         Edinburgh IMP77 Compiler - Version 8.4
    1 %external %real %function S To R (%string (255) Input)
		.Ltext0:
				.align	2
		NEXT.7694:
		.LFB186:
				sub	sp, sp, #1920
				stp	x29, x30, [sp]
				add	x29, sp, 0
				stp	x19, x20, [sp, 16]
				str	x21, [sp, 32]
				stp	d8, d9, [sp, 80]
				mov	x20, x0
				adrp	x0, :got:__stack_chk_guard
				ldr	x0, [x0, #:got_lo12:__stack_chk_guard]
				ldr	x1, [x0]
				str	x1, [x29, 1912]
				mov	x1,0
				add	x0, x29, 1920
				str	x0, [x29, 624]
				str	x20, [x29, 608]
		.LVL0:
    2   %integer Sign = 0,
    3            Sym,
				mov	w21, 0
    4            Pos = 1
    5   %long %real Value,
    6               Exp
				mov	w0, 1
				str	w0, [x29, 620]
    7
    8    %routine Next
    9       Pos = Pos + 1
				ldr	w0, [x18, 12]
				add	w0, w0, 1
				str	w0, [x18, 12]
   10       %if Pos > Length (Input) %start
				ldr	x1, [x18]
				ldrb	w2, [x1]
				cmp	w2, w0
				blt	.L4
		.L2:
   11          Sym = 0
				str	wzr, [x18, 8]
   12       %else
				b	.L1
		.LFE186:
				.align	2
				.global	STOR
		STOR:
		.LFB185:
   13          Sym = Char No (Input, Pos)
				ldrb	w0, [x1, w0, sxtw]
				str	w0, [x18, 8]
		.L3:
		.L1:
   14       %finish
   15    %end
   16
				ret
		.L4:
   17    Sym = Char No (Input, Pos)
				ldrb	w0, [x20, 1]
				str	w0, [x29, 616]
   18    %if Sym = '-' %start
				cmp	w0, 45
				beq	.L32
		.LVL1:
		.L6:
   19       Sign = 1
				mov	w21, 1
				b	.L6
		.LVL21:
		.L10:
		.LBB23:
   20       Next
				add	x18, x29, 608
				bl	NEXT.7694
		.LVL20:
   21    %finish
   22    Value = 0
				movi	d8, #0
		.LVL27:
		.L7:
   23    %if Sym # '.' %start
				ldr	w0, [x29, 616]
				cmp	w0, 46
				beq	.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')
				fmov	d9, 1.0e+1
				fmul	d8, d8, d9
		.LVL11:
				ldr	w0, [x29, 616]
				sub	w0, w0, #48
				scvtf	d0, w0
				fadd	d8, d0, d8
		.LVL12:
   27          Next
				add	x19, x29, 608
		.LVL10:
		.L13:
				mov	x18, x19
				bl	NEXT.7694
		.LVL13:
		.LBB22:
   28       %repeat %until %not '0' <= Sym <= '9'
   29    %finish
				sub	w0, w0, #48
		.LVL3:
				cmp	w0, 9
				bls	.L8
				stp	x22, x23, [x29, 40]
				stp	x24, x25, [x29, 56]
		.L9:
		.LBE21:
   30    %if Sym = '.' %start
				cmp	w0, 46
				beq	.L33
		.LVL15:
		.L20:
   31       Exp = 10.0
				ldr	w0, [x29, 616]
		.LVL14:
   32       %cycle
				adrp	x0, :got:_imp_current_file
		.LVL4:
				ldr	x0, [x0, #:got_lo12:_imp_current_file]
				ldr	x0, [x0]
				cbz	x0, .L10
				add	x8, x29, 1144
				bl	_imp_c2istr
		.LVL5:
		.L11:
				adrp	x0, :got:_imp_current_line
				ldr	x0, [x0, #:got_lo12:_imp_current_line]
				ldr	w22, [x0]
				cmp	w22, 0
				mov	w0, 32
				csel	w22, w22, w0, ne
				add	x24, x29, 1400
				mov	x8, x24
				adrp	x0, .LC1
				add	x0, x0, :lo12:.LC1
				bl	_imp_c2istr
		.LVL6:
				add	x19, x29, 352
				mov	x25, 256
				mov	x2, x25
				add	x1, x29, 1144
				mov	x0, x19
				bl	memcpy
		.LVL7:
				add	x23, x29, 96
				mov	x2, x25
				mov	x1, x24
				mov	x0, x23
				bl	memcpy
		.LVL8:
				ldr	w5, [x29, 620]
				mov	w4, 5
				mov	w3, 6
				mov	x2, x23
				mov	w1, w22
				mov	x0, x19
				bl	_signal_event
		.LVL9:
				ldp	x22, x23, [x29, 40]
				ldp	x24, x25, [x29, 56]
		.L8:
				movi	d8, #0
				add	x22, x29, 1656
				mov	x23, 256
				mov	x2, x23
				adrp	x1, .LANCHOR0
				add	x1, x1, :lo12:.LANCHOR0
				mov	x0, x22
				bl	memcpy
		.LVL22:
				add	x19, x29, 632
				mov	x2, x23
				mov	x1, x22
				mov	x0, x19
				bl	memcpy
		.LVL23:
		.LBE23:
				mov	x2, x23
				mov	x1, x19
				add	x0, x29, 1144
				bl	memcpy
		.LVL24:
				b	.L11
		.LVL25:
		.L33:
				str	d10, [x29, 72]
				b	.L7
		.LVL26:
		.L26:
				str	d10, [x29, 72]
				fmov	d9, 1.0e+1
   33          Next
				sub	w1, w0, #48
				cmp	w1, 9
				bls	.L13
		.L14:
		.L15:
		.LBE22:
				add	x19, x29, 608
				mov	x18, x19
				bl	NEXT.7694
		.LVL29:
		.LBB24:
   34          %exit %unless '0' <= Sym <= '9'
   35          Value = Value + (Sym - '0')/Exp
				scvtf	d0, w1
				fdiv	d0, d0, d9
				fadd	d8, d8, d0
		.LVL31:
   36          Exp = Exp * 10.0
				fmov	d10, d9
		.L18:
		.LVL28:
				fmul	d9, d9, d10
		.LVL32:
   37       %repeat
				ldr	w0, [x29, 616]
		.LVL30:
				b	.L18
		.L16:
		.L19:
		.L31:
				ldr	d10, [x29, 72]
				b	.L20
		.LVL33:
		.L34:
				str	x22, [x29, 40]
		.LVL34:
		.LBB25:
		.LBB26:
		.LBB27:
				add	x19, x29, 888
				mov	x8, x19
				ldrb	w2, [x20]
		.LVL35:
				ldr	w1, [x29, 620]
				add	w1, w1, 1
				mov	x0, x20
				bl	_imp_substring
		.LVL36:
				add	x20, x29, 1656
				mov	x22, 256
				mov	x2, x22
				mov	x1, x19
				mov	x0, x20
				bl	memcpy
		.LVL37:
		.LBE27:
		.LBE26:
		.LBE25:
		.LBB28:
		.LBB29:
				add	x19, x29, 96
				mov	x2, x22
				mov	x1, x20
				mov	x0, x19
				bl	memcpy
		.LVL38:
				mov	x0, x19
				bl	_imp_stoi
		.LVL39:
		.LBE29:
		.LBE28:
   38    %finish
   39    %if Sym = '@' %start
				ldr	w0, [x29, 616]
				cmp	w0, 64
				beq	.L34
		.L21:
				sub	w1, w0, #48
				cmp	w1, 9
				bhi	.L31
		.L17:
		.LBE24:
   40       Sym = S To I (Sub String (Input, Pos + 1, Length (Input)))
				str	w0, [x29, 616]
   41       Value = Value * 10.0\Sym
				scvtf	d1, w0
		.LVL40:
		.LBB30:
		.LBB31:
				adrp	x0, .LC2
				ldr	d0, [x0, #:lo12:.LC2]
				fmov	d2, 2.0e+0
				fcmp	d1, d2
				bne	.L36
		.LVL41:
		.L22:
		.LBE31:
		.LBE30:
				fmul	d8, d8, d0
		.LVL42:
				ldr	x22, [x29, 40]
				b	.L21
		.LVL43:
		.L36:
		.LBB33:
		.LBB32:
				fmov	d0, 1.0e+1
				bl	pow
		.LVL44:
				b	.L22
		.LVL45:
		.L35:
				stp	x22, x23, [x29, 40]
				stp	x24, x25, [x29, 56]
				str	d10, [x29, 72]
		.LBE32:
		.LBE33:
				bl	__stack_chk_fail
		.LVL46:
		.LFE185:
				.section	.rodata.cst8,"aM",@progbits,8
				.align	3
		.LC2:
				.word	0
				.word	1079574528
				.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
		.LC1:
				.string	""
		.Letext0:
   42    %finish
   43    Value = -Value %if Sign # 0
   44    %result = Value
				fneg	d0, d8
				cmp	w21, 0
				fcsel	d8, d0, d8, ne
		.LVL16:
		.L23:
   45 %end {S To R}
				fcvt	s0, d8
				adrp	x0, :got:__stack_chk_guard
				ldr	x0, [x0, #:got_lo12:__stack_chk_guard]
				ldr	x1, [x29, 1912]
				ldr	x0, [x0]
				eor	x0, x1, x0
				cbnz	x0, .L35
				ldp	x19, x20, [sp, 16]
				ldr	x21, [sp, 32]
		.LVL17:
				ldp	x29, x30, [sp]
				ldp	d8, d9, [sp, 80]
		.LVL18:
				add	sp, sp, 1920
				ret
		.LVL19:
		.L32:
   46
   47 %endoffile
   41 Statements compiled
