         Edinburgh IMP77 Compiler - Version 8.4
    1 %external %real %function S To R (%string (255) Input)
				.option nopic
		.Ltext0:
				.align	1
		NEXT.6006:
		.LFB186:
				add	sp,sp,-1888
				sd	ra,1880(sp)
				sd	s0,1872(sp)
				sd	s1,1864(sp)
				sd	s2,1856(sp)
				fsd	fs0,1848(sp)
				fsd	fs1,1840(sp)
				fsd	fs2,1832(sp)
				mv	s0,a0
				lui	a5,%hi(__stack_chk_guard)
				ld	a5,%lo(__stack_chk_guard)(a5)
				sd	a5,1816(sp)
				add	a5,sp,1888
				sd	a5,528(sp)
				sd	a0,512(sp)
		.LVL0:
    2   %integer Sign = 0,
    3            Sym,
				li	s1,0
				beq	a4,a5,.L31
		.LVL1:
		.L6:
    4            Pos = 1
    5   %long %real Value,
    6               Exp
				li	a5,1
				sw	a5,524(sp)
    7
    8    %routine Next
    9       Pos = Pos + 1
				lw	a5,12(t2)
				addw	a5,a5,1
				sext.w	a4,a5
				sw	a5,12(t2)
   10       %if Pos > Length (Input) %start
				ld	a5,0(t2)
				lbu	a3,0(a5)
				blt	a3,a4,.L4
		.L2:
   11          Sym = 0
				sw	zero,8(t2)
   12       %else
				ret
		.LFE186:
				.align	1
				.globl	STOR
		STOR:
		.LFB185:
   13          Sym = Char No (Input, Pos)
				add	a5,a5,a4
				lbu	a5,0(a5)
				sw	a5,8(t2)
		.L3:
   14       %finish
   15    %end
   16
				ret
		.L4:
   17    Sym = Char No (Input, Pos)
				lbu	a5,1(a0)
				sext.w	a4,a5
				sw	a5,520(sp)
   18    %if Sym = '-' %start
				li	a5,45
   19       Sign = 1
				li	s1,1
				j	.L6
		.LVL20:
		.L10:
		.LBB24:
   20       Next
				add	t2,sp,512
				call	NEXT.6006
		.LVL19:
   21    %finish
   22    Value = 0
				fmv.d.x	fs0,zero
		.LVL24:
		.L7:
   23    %if Sym # '.' %start
				lw	a5,520(sp)
				li	a4,46
				beq	a5,a4,.L26
		.LVL2:
		.LBB21:
   24       %signal 6, 5, Pos %unless '0' <= Sym <= '9'           {Char No out of range}
   25       %cycle
   26          Value = Value*10.0 + (Sym - '0')
				lui	a5,%hi(.LC1)
				fld	fs1,%lo(.LC1)(a5)
		.LBB22:
				fmul.d	fs0,fs0,fs1
		.LVL10:
				lw	a5,520(sp)
				addw	a5,a5,-48
				fcvt.d.w	fa5,a5
				fadd.d	fs0,fa5,fs0
		.LVL11:
   27          Next
				addw	a5,a5,-48
		.LVL3:
				li	a4,9
				bleu	a5,a4,.L8
		.L9:
		.LBE21:
				add	t2,sp,512
				call	NEXT.6006
		.LVL12:
		.LBB23:
   28       %repeat %until %not '0' <= Sym <= '9'
   29    %finish
   30    %if Sym = '.' %start
				li	a4,46
				beq	a5,a4,.L7
		.L16:
		.L19:
		.LVL14:
		.L20:
   31       Exp = 10.0
				li	s2,9
		.LVL9:
		.L13:
		.LBE22:
				lw	a5,520(sp)
		.LVL13:
				addw	a4,a5,-48
				bleu	a4,s2,.L13
		.L14:
		.L15:
		.LBE23:
   32       %cycle
				lui	a5,%hi(_imp_current_file)
				ld	a1,%lo(_imp_current_file)(a5)
				beqz	a1,.L10
				add	a0,sp,1048
				call	_imp_c2istr
		.LVL4:
		.L11:
				lui	a5,%hi(_imp_current_line)
				lw	s2,%lo(_imp_current_line)(a5)
				bnez	s2,.L12
				li	s2,32
		.L12:
				lui	a1,%hi(.LC3)
				addi	a1,a1,%lo(.LC3)
				add	a0,sp,1304
				call	_imp_c2istr
		.LVL5:
				li	a2,256
				add	a1,sp,1048
				add	a0,sp,256
				call	memcpy
		.LVL6:
				li	a2,256
				add	a1,sp,1304
				mv	a0,sp
				call	memcpy
		.LVL7:
				lw	a5,524(sp)
				li	a4,5
				li	a3,6
				mv	a2,sp
				mv	a1,s2
				add	a0,sp,256
				call	_signal_event
		.LVL8:
		.L8:
				fmv.d.x	fs0,zero
				li	a2,256
				lui	a1,%hi(.LANCHOR0)
				addi	a1,a1,%lo(.LANCHOR0)
				add	a0,sp,1560
				call	memcpy
		.LVL21:
				li	a2,256
				add	a1,sp,1560
				add	a0,sp,536
				call	memcpy
		.LVL22:
		.LBE24:
				li	a2,256
				add	a1,sp,536
				add	a0,sp,1048
				call	memcpy
		.LVL23:
				j	.L11
		.L26:
				lui	a5,%hi(.LC1)
				fld	fs1,%lo(.LC1)(a5)
		.LBB25:
   33          Next
				add	t2,sp,512
				call	NEXT.6006
		.LVL26:
		.LBB26:
   34          %exit %unless '0' <= Sym <= '9'
   35          Value = Value + (Sym - '0')/Exp
				addw	a5,a5,-48
		.LVL28:
				fcvt.d.w	fa5,a5
				fdiv.d	fa5,fa5,fs1
				fadd.d	fs0,fs0,fa5
		.LVL29:
   36          Exp = Exp * 10.0
				fmv.d	fs2,fs1
		.L18:
		.LVL25:
				fmul.d	fs1,fs1,fs2
		.LVL30:
   37       %repeat
				li	s2,9
		.LBE25:
				lw	a5,520(sp)
		.LVL27:
				addw	a4,a5,-48
				bgtu	a4,s2,.L20
		.L17:
		.LBE26:
				j	.L18
		.LVL31:
		.L32:
		.LBB27:
		.LBB28:
		.LBB29:
				lbu	a3,0(s0)
				lw	a2,524(sp)
				addw	a2,a2,1
				mv	a1,s0
				add	a0,sp,792
				call	_imp_substring
		.LVL32:
				li	a2,256
				add	a1,sp,792
				add	a0,sp,1560
				call	memcpy
		.LVL33:
		.LBE29:
		.LBE28:
		.LBE27:
		.LBB30:
		.LBB31:
				li	a2,256
				add	a1,sp,1560
				mv	a0,sp
				call	memcpy
		.LVL34:
				mv	a0,sp
				call	_imp_stoi
		.LVL35:
		.LBE31:
		.LBE30:
   38    %finish
   39    %if Sym = '@' %start
				lw	a4,520(sp)
				li	a5,64
				beq	a4,a5,.L32
		.L21:
   40       Sym = S To I (Sub String (Input, Pos + 1, Length (Input)))
				sw	a0,520(sp)
   41       Value = Value * 10.0\Sym
				fcvt.d.w	fa1,a0
		.LVL36:
		.LBB32:
		.LBB33:
				lui	a5,%hi(.LC4)
				fld	fa5,%lo(.LC4)(a5)
				feq.d	a5,fa1,fa5
				beqz	a5,.L34
				lui	a5,%hi(.LC2)
				fld	fa0,%lo(.LC2)(a5)
		.LVL37:
		.L22:
		.LBE33:
		.LBE32:
				fmul.d	fs0,fs0,fa0
		.LVL38:
				j	.L21
		.LVL39:
		.L34:
		.LBB35:
		.LBB34:
				lui	a5,%hi(.LC1)
				fld	fa0,%lo(.LC1)(a5)
				call	pow
		.LVL40:
				j	.L22
		.LVL41:
		.L33:
		.LBE34:
		.LBE35:
				call	__stack_chk_fail
		.LVL42:
		.LFE185:
				.section	.rodata
				.align	3
				.set	.LANCHOR0,. + 0
		.LC0:
				.byte	20
				.string	"test-new/test153.imp"
				.zero	234
				.section	.rodata.str1.8,"aMS",@progbits,1
				.align	3
		.LC3:
				.string	""
				.section	.srodata.cst8,"aM",@progbits,8
				.align	3
		.LC1:
				.word	0
				.word	1076101120
		.LC2:
				.word	0
				.word	1079574528
		.LC4:
				.word	0
				.word	1073741824
		.Letext0:
   42    %finish
   43    Value = -Value %if Sign # 0
				beqz	s1,.L23
   44    %result = Value
				fneg.d	fs0,fs0
		.LVL15:
		.L23:
   45 %end {S To R}
				fcvt.s.d	fa0,fs0
				ld	a4,1816(sp)
				lui	a5,%hi(__stack_chk_guard)
				ld	a5,%lo(__stack_chk_guard)(a5)
				bne	a4,a5,.L33
				ld	ra,1880(sp)
				ld	s0,1872(sp)
				ld	s1,1864(sp)
		.LVL16:
				ld	s2,1856(sp)
				fld	fs0,1848(sp)
		.LVL17:
				fld	fs1,1840(sp)
				fld	fs2,1832(sp)
				add	sp,sp,1888
				jr	ra
		.LVL18:
		.L31:
   46
   47 %endoffile
   41 Statements compiled
