         Edinburgh IMP77 Compiler - Version 8.4
    1
		.Ltext0:
				.align	2
		_imp_SQRT:
		.LFB61:
		.LVL0:
				stp	x29, x30, [sp, -32]!
				add	x29, sp, 0
				str	d8, [sp, 16]
				fsqrt	d8, d0
				fcmp	d0, #0.0
				bmi	.L4
		.LVL1:
		.L1:
				fmov	d0, d8
				ldr	d8, [sp, 16]
				ldp	x29, x30, [sp], 32
				ret
		.LVL2:
		.L4:
				bl	sqrt
		.LVL3:
				b	.L1
		.LFE61:
				.align	2
		_imp_SIN:
		.LFB42:
		.LVL4:
				stp	x29, x30, [sp, -16]!
				add	x29, sp, 0
				bl	sin
		.LVL5:
				ldp	x29, x30, [sp], 16
				ret
		.LFE42:
				.align	2
		TABULATE.7694:
		.LFB186:
    2 %begin
		.LVL36:
				sub	sp, sp, #1344
				stp	x29, x30, [sp]
				add	x29, sp, 0
				stp	x19, x20, [sp, 16]
				stp	x21, x22, [sp, 32]
				adrp	x2, :got:__stack_chk_guard
				ldr	x2, [x2, #:got_lo12:__stack_chk_guard]
				ldr	x3, [x2]
				str	x3, [x29, 1336]
				mov	x3,0
    3 %routine Tabulate (%longrealfn func(%longreal x),%longreal from,to,
		.LVL6:
				sub	sp, sp, #1392
				stp	x29, x30, [sp]
				add	x29, sp, 0
				stp	x19, x20, [sp, 16]
				stp	x21, x22, [sp, 32]
				stp	x23, x24, [sp, 48]
				str	d8, [sp, 80]
				str	d10, [sp, 72]
				mov	x22, x0
				mov	w21, w1
				adrp	x0, :got:__stack_chk_guard
		.LVL7:
				ldr	x0, [x0, #:got_lo12:__stack_chk_guard]
				ldr	x1, [x0]
				str	x1, [x29, 1384]
				mov	x1,0
		.LVL8:
				bl	_imp_initialise
		.LVL37:
		.LBB34:
    4    %integer steps)
    5 ! func(x) is the dummy formal function
    6 %real value,inc
    7 %integer i
    8 !
    9 inc=(to-from)/steps
				fsub	d10, d1, d0
				scvtf	d1, w21
		.LVL9:
				fdiv	d10, d10, d1
				fcvt	s10, d10
		.LVL10:
   10 !
   11 value=from
				fcvt	s8, d0
		.LVL11:
		.LBB21:
   12 %for i=0,1,steps %cycle
   13    print(value,4,2) ; print(func(value),10,4) ; newline
				fcvt	d9, s8
		.LVL15:
		.LBB28:
		.LBB24:
				mov	w1, w24
				mov	w0, w20
				fmov	d0, d9
				bl	_imp_print
		.LVL16:
		.LBE24:
		.LBE28:
   14    value=value+inc
				tbnz	w21, #31, .L18
		.LVL12:
		.L8:
				fmov	d0, d9
				blr	x22
		.LVL17:
		.LBB29:
		.LBB27:
				mov	w1, w20
				mov	w0, w23
				bl	_imp_print
		.LVL18:
		.LBE27:
		.LBE29:
		.LBB30:
		.LBB31:
				bl	_imp_newline
		.LVL19:
		.LBE31:
		.LBE30:
				fadd	s8, s8, s10
		.LVL20:
				adrp	x0, :got:_imp_current_file
				ldr	x0, [x0, #:got_lo12:_imp_current_file]
				ldr	x0, [x0]
				cbz	x0, .L9
				add	x8, x29, 872
				bl	_imp_c2istr
		.LVL26:
		.L10:
				adrp	x0, :got:_imp_current_line
				ldr	x0, [x0, #:got_lo12:_imp_current_line]
				ldr	w20, [x0]
				cmp	w20, 0
				mov	w0, 14
				csel	w20, w20, w0, ne
				add	x24, x29, 1128
				mov	x8, x24
				adrp	x0, .LC3
				add	x0, x0, :lo12:.LC3
				bl	_imp_c2istr
		.LVL27:
				add	x19, x29, 352
				mov	x25, 256
				mov	x2, x25
				add	x1, x29, 872
				mov	x0, x19
				bl	memcpy
		.LVL28:
				add	x23, x29, 96
				mov	x2, x25
				mov	x1, x24
				mov	x0, x23
				bl	memcpy
		.LVL29:
				mov	w5, 0
				mov	w4, 1
				mov	w3, 5
				mov	x2, x23
				mov	w1, w20
				mov	x0, x19
				bl	_signal_event
		.LVL30:
				ldr	x25, [x29, 64]
				b	.L8
		.LVL31:
		.L9:
		.LBB32:
				add	x20, x29, 1128
				mov	x23, 256
				mov	x2, x23
				adrp	x1, .LANCHOR0
				add	x1, x1, :lo12:.LANCHOR0
				mov	x0, x20
				bl	memcpy
		.LVL32:
				add	x19, x29, 616
				mov	x2, x23
				mov	x1, x20
				mov	x0, x19
				bl	memcpy
		.LVL33:
		.LBE32:
				mov	x2, x23
				mov	x1, x19
				add	x0, x29, 872
				bl	memcpy
		.LVL34:
				b	.L10
		.L19:
				str	x25, [x29, 64]
				str	d9, [x29, 88]
		.LBE33:
   15 %repeat
   16 %end ;!  of routine tabulate
   17 !
				cmn	w21, #1
				beq	.L7
				str	d9, [x29, 88]
				mov	w19, -1
		.LBB22:
		.LBB23:
				mov	w24, 2
				mov	w20, 4
		.LBE23:
		.LBE22:
		.LBB25:
		.LBB26:
				mov	w23, 10
		.LVL13:
		.L13:
		.LBE26:
		.LBE25:
				cmp	w21, w19
				bne	.L13
		.L12:
				ldr	d9, [x29, 88]
		.LVL21:
		.L7:
		.LBE21:
				adrp	x0, :got:__stack_chk_guard
				ldr	x0, [x0, #:got_lo12:__stack_chk_guard]
				ldr	x1, [x29, 1384]
				ldr	x0, [x0]
				eor	x0, x1, x0
				cbnz	x0, .L19
				ldp	x19, x20, [sp, 16]
				ldp	x21, x22, [sp, 32]
		.LVL22:
				ldp	x23, x24, [sp, 48]
				ldp	x29, x30, [sp]
				ldr	d8, [sp, 80]
		.LVL23:
				ldr	d10, [sp, 72]
		.LVL24:
				add	sp, sp, 1392
				ret
		.LVL25:
		.L18:
				str	x25, [x29, 64]
		.LBB33:
				bl	__stack_chk_fail
		.LVL35:
		.LFE186:
				.align	2
				.global	main
		main:
		.LFB185:
   18 ! now call with some functions....
				add	w19, w19, 1
		.LVL14:
   19 printstring("
				adrp	x22, .LANCHOR0
				add	x22, x22, :lo12:.LANCHOR0
				add	x21, x29, 1080
				mov	x19, 256
				mov	x2, x19
				add	x1, x22, x19
				mov	x0, x21
				bl	memcpy
		.LVL38:
				add	x20, x29, 312
				mov	x2, x19
				mov	x1, x21
				mov	x0, x20
				bl	memcpy
		.LVL39:
				mov	x2, x19
				mov	x1, x20
				mov	x0, x21
				bl	memcpy
		.LVL40:
		.LBE34:
		.LBB35:
		.LBB36:
				add	x20, x29, 48
				mov	x2, x19
				mov	x1, x21
				mov	x0, x20
				bl	memcpy
		.LVL41:
				mov	x0, x20
				bl	_imp_printstring
		.LVL42:
		.LBE36:
		.LBE35:
   20     x               sine(x)
   21 ")
   22 tabulate ( sin, 0.0,pi/2,10)
				mov	w1, 10
				adrp	x0, .LC4
				ldr	d1, [x0, #:lo12:.LC4]
				movi	d0, #0
				adrp	x0, _imp_SIN
				add	x0, x0, :lo12:_imp_SIN
				bl	TABULATE.7694
		.LVL43:
		.LBB37:
   23 ! note that the function name appears WITHOUT parameters in the call
   24 !
   25 printstring("
				add	x21, x29, 824
				mov	x2, x19
				add	x1, x22, 512
				mov	x0, x21
				bl	memcpy
		.LVL44:
				add	x22, x29, 568
				mov	x2, x19
				mov	x1, x21
				mov	x0, x22
				bl	memcpy
		.LVL45:
				mov	x2, x19
				mov	x1, x22
				mov	x0, x21
				bl	memcpy
		.LVL46:
		.LBE37:
		.LBB38:
		.LBB39:
				mov	x2, x19
				mov	x1, x21
				mov	x0, x20
				bl	memcpy
		.LVL47:
				mov	x0, x20
				bl	_imp_printstring
		.LVL48:
		.LBE39:
		.LBE38:
   26     x         squareroot(x)
   27 ")
   28 tabulate( sqrt, 0.0,10.0,5)
				mov	w1, 5
				fmov	d1, 1.0e+1
				movi	d0, #0
				adrp	x0, _imp_SQRT
				add	x0, x0, :lo12:_imp_SQRT
				bl	TABULATE.7694
		.LVL49:
		.LBB40:
		.LBB41:
				mov	w0, 0
				bl	exit
		.LVL50:
		.LBE41:
		.LBE40:
		.LFE185:
				.section	.rodata.cst8,"aM",@progbits,8
				.align	3
		.LC4:
				.word	1413754136
				.word	1073291771
				.section	.rodata
				.align	3
				.set	.LANCHOR0,. + 0
		.LC2:
				.byte	17
				.string	"test-new/rt28.imp"
				.zero	237
		.LC0:
				.byte	29
				.string	"\n    x               sine(x)\n"
				.zero	225
		.LC1:
				.byte	29
				.string	"\n    x         squareroot(x)\n"
				.zero	225
				.section	.rodata.str1.8,"aMS",@progbits,1
				.align	3
		.LC3:
				.string	"Illegal cycle I = 0, 1, STEPS"
		.Letext0:
   29 !
   30 %endofprogram
   18 Statements compiled
