         Edinburgh IMP77 Compiler - Version 8.4
    1 %external %real %function S To R (%string (255) Input)
		.Ltext0:
				.align	1
				.thumb
				.thumb_func
		NEXT.10030:
		.LFB186:
				@ args = 256, pretend = 16, frame = 1304
				@ frame_needed = 0, uses_anonymous_args = 0
				sub	sp, sp, #16
				push	{r4, r5, r6, r7, lr}
				vpush.64	{d8, d9, d10}
				subw	sp, sp, #1820
				add	r4, sp, #1864
				stm	r4, {r0, r1, r2, r3}
				ldr	r5, .L34+16
		.LPIC0:
				add	r5, pc
				ldr	r3, .L34+20
				ldr	r3, [r5, r3]
				ldr	r3, [r3]
				str	r3, [sp, #1812]
				add	r2, sp, #1880
				str	r2, [sp, #528]
				str	r4, [sp, #520]
		.LVL0:
    2   %integer Sign = 0,
    3            Sym,
				it	ne
				movne	r6, #0
				beq	.L30
		.LVL1:
		.L5:
    4            Pos = 1
    5   %long %real Value,
    6               Exp
				movs	r2, #1
				str	r2, [sp, #524]
    7
    8    %routine Next
				@ Nested: function declared inside another function.
				@ args = 0, pretend = 0, frame = 0
				@ frame_needed = 0, uses_anonymous_args = 0
				@ link register save eliminated.
    9       Pos = Pos + 1
				ldr	r3, [ip, #8]
				adds	r3, r3, #1
				str	r3, [ip, #8]
   10       %if Pos > Length (Input) %start
				ldr	r2, [ip, #4]
				ldrb	r1, [r2]	@ zero_extendqisi2
				cmp	r1, r3
   11          Sym = 0
				ite	lt
				movlt	r3, #0
		.L2:
   12       %else
   13          Sym = Char No (Input, Pos)
				ldrbge	r3, [r2, r3]	@ zero_extendqisi2
				str	r3, [ip]
		.L3:
   14       %finish
   15    %end
   16
				bx	lr
		.LFE186:
				.align	1
				.global	STOR
				.thumb
				.thumb_func
		STOR:
		.LFB185:
   17    Sym = Char No (Input, Pos)
				ldrb	r2, [sp, #1865]	@ zero_extendqisi2
				str	r2, [sp, #516]
   18    %if Sym = '-' %start
				cmp	r2, #45
   19       Sign = 1
				movs	r6, #1
				b	.L5
		.LVL20:
		.L9:
		.LBB23:
   20       Next
				mov	ip, r3
				bl	NEXT.10030(PLT)
		.LVL19:
   21    %finish
   22    Value = 0
				vldr.64	d8, .L34
		.LVL24:
		.L6:
   23    %if Sym # '.' %start
				ldr	r3, [sp, #516]
				cmp	r3, #46
				beq	.L25
		.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')
				vmov.f64	d9, #1.0e+1
				add	r4, sp, #516
		.LVL9:
		.L12:
				ldr	r3, [r4]
				subs	r3, r3, #48
				vmov	s15, r3	@ int
				vcvt.f64.s32	d7, s15
				vmla.f64	d7, d8, d9
				vmov.f64	d8, d7
		.LVL10:
   27          Next
				mov	ip, r4
				bl	NEXT.10030(PLT)
		.LVL11:
		.LBB22:
   28       %repeat %until %not '0' <= Sym <= '9'
   29    %finish
				subs	r3, r3, #48
		.LVL3:
				cmp	r3, #9
				bls	.L7
		.L8:
		.LBE21:
   30    %if Sym = '.' %start
				cmp	r3, #46
				beq	.L6
		.L15:
		.L18:
		.LVL13:
		.L19:
   31       Exp = 10.0
				ldr	r3, [r4]
		.LVL12:
   32       %cycle
				ldr	r3, .L34+24
				ldr	r3, [r5, r3]
				ldr	r1, [r3]
				cmp	r1, #0
				beq	.L9
				addw	r0, sp, #1044
				bl	_imp_c2istr(PLT)
		.LVL4:
		.L10:
				ldr	r3, .L34+28
				ldr	r3, [r5, r3]
				ldr	r4, [r3]
				cmp	r4, #0
				it	eq
				moveq	r4, #32
				ldr	r1, .L34+32
		.LPIC2:
				add	r1, pc
				addw	r7, sp, #1300
				mov	r0, r7
				bl	_imp_c2istr(PLT)
		.LVL5:
				ldr	r3, [sp, #524]
				str	r3, [sp, #508]
				movs	r3, #5
				str	r3, [sp, #504]
				movs	r3, #6
				str	r3, [sp, #500]
				mov	r2, #256
				mov	r1, r7
				add	r0, sp, #244
				bl	memcpy(PLT)
		.LVL6:
				str	r4, [sp, #240]
				movs	r2, #240
				addw	r1, sp, #1060
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL7:
				addw	r3, sp, #1044
				ldm	r3, {r0, r1, r2, r3}
				bl	_signal_event(PLT)
		.LVL8:
		.L7:
				vldr.64	d8, .L34
				mov	r7, #256
				mov	r2, r7
				ldr	r1, .L34+36
		.LPIC1:
				add	r1, pc
				addw	r4, sp, #1556
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL21:
				mov	r2, r7
				mov	r1, r4
				add	r4, sp, #532
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL22:
		.LBE23:
				mov	r2, r7
				mov	r1, r4
				addw	r0, sp, #1044
				bl	memcpy(PLT)
		.LVL23:
				b	.L10
		.L25:
				vmov.f64	d9, #1.0e+1
   33          Next
				sub	r2, r3, #48
				cmp	r2, #9
				bls	.L12
		.L13:
		.L14:
		.LBE22:
				add	r4, sp, #516
				mov	ip, r4
				bl	NEXT.10030(PLT)
		.LVL26:
		.LBB24:
   34          %exit %unless '0' <= Sym <= '9'
   35          Value = Value + (Sym - '0')/Exp
				vmov	s15, r2	@ int
				vcvt.f64.s32	d7, s15
				vdiv.f64	d6, d7, d9
				vadd.f64	d8, d8, d6
		.LVL28:
   36          Exp = Exp * 10.0
				vmov.f64	d10, d9
		.L17:
		.LVL25:
				vmul.f64	d9, d9, d10
		.LVL29:
   37       %repeat
				ldr	r3, [r4]
		.LVL27:
				b	.L17
		.LVL30:
		.L31:
		.LBB25:
   38    %finish
   39    %if Sym = '@' %start
				ldr	r3, [sp, #516]
				cmp	r3, #64
				beq	.L31
		.L20:
				sub	r2, r3, #48
				cmp	r2, #9
				bhi	.L19
		.L16:
		.LBE24:
   40       Sym = S To I (Sub String (Input, Pos + 1, Length (Input)))
				str	r0, [r7]
   41       Value = Value * 10.0\Sym
				vmov	s15, r0	@ int
				vcvt.f64.s32	d1, s15
		.LVL38:
		.LBB30:
		.LBB31:
				vmov.f64	d7, #2.0e+0
				vcmp.f64	d1, d7
				vmrs	APSR_nzcv, FPSCR
				bne	.L33
				vldr.64	d0, .L34+8
		.LVL39:
		.L21:
		.LBE31:
		.LBE30:
				vmul.f64	d8, d8, d0
		.LVL40:
				b	.L20
		.LVL41:
		.L33:
		.LBB33:
		.LBB32:
				vmov.f64	d0, #1.0e+1
				bl	pow(PLT)
		.LVL42:
				b	.L21
		.LVL43:
		.L32:
		.LBE32:
		.LBE33:
				bl	__stack_chk_fail(PLT)
		.LVL44:
		.L35:
				.align	3
		.L34:
				.word	0
				.word	0
				.word	0
				.word	1079574528
				.word	_GLOBAL_OFFSET_TABLE_-(.LPIC0+4)
				.word	__stack_chk_guard(GOT)
				.word	_imp_current_file(GOT)
				.word	_imp_current_line(GOT)
				.word	.LC1-(.LPIC2+4)
				.word	.LANCHOR0-(.LPIC1+4)
		.LFE185:
				.section	.rodata
				.align	2
				.set	.LANCHOR0,. + 0
		.LC0:
				.byte	20
				.ascii	"test-new/test153.imp\000"
				.space	234
				.section	.rodata.str1.4,"aMS",%progbits,1
				.align	2
		.LC1:
				.ascii	"\000"
		.Letext0:
   42    %finish
				add	r7, sp, #516
				ldr	r2, [sp, #524]
		.LBB26:
		.LBB27:
				ldrb	r3, [sp, #1864]	@ zero_extendqisi2
		.LVL31:
				adds	r2, r2, #1
		.LVL32:
				add	r1, sp, #1864
		.LVL33:
				add	r4, sp, #788
				mov	r0, r4
				bl	_imp_substring(PLT)
		.LVL34:
				mov	r2, #256
				mov	r1, r4
				addw	r4, sp, #1556
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL35:
		.LBE27:
		.LBE26:
		.LBE25:
		.LBB28:
		.LBB29:
				movs	r2, #240
				addw	r1, sp, #1572
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL36:
				ldm	r4, {r0, r1, r2, r3}
				bl	_imp_stoi(PLT)
		.LVL37:
		.LBE29:
		.LBE28:
   43    Value = -Value %if Sign # 0
				cbz	r6, .L22
   44    %result = Value
				vneg.f64	d8, d8
		.LVL14:
		.L22:
   45 %end {S To R}
				vcvt.f32.f64	s0, d8
				ldr	r3, .L34+20
				ldr	r3, [r5, r3]
				ldr	r2, [sp, #1812]
				ldr	r3, [r3]
				cmp	r2, r3
				bne	.L32
				addw	sp, sp, #1820
				@ sp needed
				vldm	sp!, {d8-d10}
		.LVL15:
				pop	{r4, r5, r6, r7, lr}
		.LVL16:
				add	sp, sp, #16
				bx	lr
		.LVL17:
		.L30:
				add	r3, sp, #516
		.LVL18:
   46
   47 %endoffile
   41 Statements compiled
