         Edinburgh IMP77 Compiler - Version 8.4
    1
		.Ltext0:
				.align	1
				.thumb
				.thumb_func
		_imp_SQRT:
		.LFB61:
				@ args = 0, pretend = 0, frame = 0
				@ frame_needed = 0, uses_anonymous_args = 0
		.LVL0:
				push	{r3, lr}
				vpush.64	{d8}
				vsqrt.f64	d8, d0
				vcmp.f64	d0, #0
				vmrs	APSR_nzcv, FPSCR
				bmi	.L4
		.LVL1:
		.L1:
				vmov.f64	d0, d8
				vldm	sp!, {d8}
				pop	{r3, pc}
		.LVL2:
		.L4:
				bl	sqrt(PLT)
		.LVL3:
				b	.L1
		.LFE61:
				.align	1
				.thumb
				.thumb_func
		_imp_SIN:
		.LFB42:
				@ args = 0, pretend = 0, frame = 0
				@ frame_needed = 0, uses_anonymous_args = 0
		.LVL4:
				push	{r3, lr}
				bl	sin(PLT)
		.LVL5:
				pop	{r3, pc}
		.LFE42:
				.align	1
				.thumb
				.thumb_func
		TABULATE.10030:
		.LFB186:
    2 %begin
				@ Volatile: function does not return.
				@ args = 0, pretend = 0, frame = 1032
				@ frame_needed = 0, uses_anonymous_args = 0
		.LVL35:
				push	{r7, lr}
				sub	sp, sp, #1272
				ldr	r3, .L25+16
		.LPIC3:
				add	r3, pc
				ldr	r2, .L25+20
				ldr	r3, [r3, r2]
				ldr	r3, [r3]
				str	r3, [sp, #1268]
    3 %routine Tabulate (%longrealfn func(%longreal x),%longreal from,to,
				@ args = 0, pretend = 0, frame = 776
				@ frame_needed = 0, uses_anonymous_args = 0
		.LVL6:
				push	{r4, r5, r6, r7, r8, r9, r10, lr}
				vpush.64	{d8, d9}
				sub	sp, sp, #1288
				mov	r7, r0
				mov	r6, r1
				ldr	r10, .L20
		.LPIC0:
				add	r10, pc
				ldr	r3, .L20+4
				ldr	r3, [r10, r3]
				ldr	r3, [r3]
				str	r3, [sp, #1284]
				bl	_imp_initialise(PLT)
		.LVL36:
		.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
				vsub.f64	d1, d1, d0
		.LVL7:
				vmov	s15, r1	@ int
				vcvt.f64.s32	d6, s15
				vdiv.f64	d7, d1, d6
				vcvt.f32.f64	s17, d7
		.LVL8:
   10 !
   11 value=from
				vcvt.f32.f64	s16, d0
		.LVL9:
		.LBB21:
   12 %for i=0,1,steps %cycle
   13    print(value,4,2) ; print(func(value),10,4) ; newline
				vcvt.f64.f32	d9, s16
		.LVL13:
		.LBB28:
		.LBB24:
				mov	r1, r9
				mov	r0, r5
				vmov.f64	d0, d9
				bl	_imp_print(PLT)
		.LVL14:
		.LBE24:
		.LBE28:
   14    value=value+inc
				cmp	r1, #0
				blt	.L18
		.LVL10:
		.L8:
				vmov.f64	d0, d9
				blx	r7
		.LVL15:
		.LBB29:
		.LBB27:
				mov	r1, r5
				mov	r0, r8
				bl	_imp_print(PLT)
		.LVL16:
		.LBE27:
		.LBE29:
		.LBB30:
		.LBB31:
				bl	_imp_newline(PLT)
		.LVL17:
		.LBE31:
		.LBE30:
				vadd.f32	s16, s16, s17
		.LVL18:
				ldr	r3, .L20+8
				ldr	r3, [r10, r3]
				ldr	r1, [r3]
		.LVL22:
				cbz	r1, .L9
				add	r0, sp, #772
		.LVL23:
				bl	_imp_c2istr(PLT)
		.LVL24:
		.L10:
				ldr	r3, .L20+12
				ldr	r3, [r10, r3]
				ldr	r4, [r3]
				cmp	r4, #0
				it	eq
				moveq	r4, #14
				ldr	r1, .L20+16
		.LPIC2:
				add	r1, pc
				addw	r5, sp, #1028
				mov	r0, r5
				bl	_imp_c2istr(PLT)
		.LVL25:
				movs	r3, #0
				str	r3, [sp, #508]
				movs	r3, #1
				str	r3, [sp, #504]
				movs	r3, #5
				str	r3, [sp, #500]
				mov	r2, #256
				mov	r1, r5
				add	r0, sp, #244
				bl	memcpy(PLT)
		.LVL26:
				str	r4, [sp, #240]
				movs	r2, #240
				add	r1, sp, #788
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL27:
				add	r3, sp, #772
				ldm	r3, {r0, r1, r2, r3}
				bl	_signal_event(PLT)
		.LVL28:
				b	.L8
		.LVL29:
		.L9:
		.LBB32:
				mov	r5, #256
				mov	r2, r5
				ldr	r1, .L20+20
		.LPIC1:
				add	r1, pc
				addw	r4, sp, #1028
				mov	r0, r4
		.LVL30:
				bl	memcpy(PLT)
		.LVL31:
				mov	r2, r5
				mov	r1, r4
				add	r4, sp, #516
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL32:
		.LBE32:
				mov	r2, r5
				mov	r1, r4
				add	r0, sp, #772
				bl	memcpy(PLT)
		.LVL33:
				b	.L10
		.L19:
		.LBE33:
   15 %repeat
   16 %end ;!  of routine tabulate
   17 !
				cmp	r6, #-1
				beq	.L7
				mov	r4, #-1
		.LBB22:
		.LBB23:
				mov	r9, #2
				movs	r5, #4
		.LBE23:
		.LBE22:
		.LBB25:
		.LBB26:
				mov	r8, #10
		.LVL11:
		.L13:
		.LBE26:
		.LBE25:
				cmp	r6, r4
				bne	.L13
		.L12:
		.LVL19:
		.L7:
		.LBE21:
				ldr	r3, .L20+4
				ldr	r3, [r10, r3]
				ldr	r2, [sp, #1284]
				ldr	r3, [r3]
				cmp	r2, r3
				bne	.L19
				add	sp, sp, #1288
				@ sp needed
				vldm	sp!, {d8-d9}
		.LVL20:
				pop	{r4, r5, r6, r7, r8, r9, r10, pc}
		.LVL21:
		.L18:
		.LBB33:
				bl	__stack_chk_fail(PLT)
		.LVL34:
		.L21:
				.align	2
		.L20:
				.word	_GLOBAL_OFFSET_TABLE_-(.LPIC0+4)
				.word	__stack_chk_guard(GOT)
				.word	_imp_current_file(GOT)
				.word	_imp_current_line(GOT)
				.word	.LC3-(.LPIC2+4)
				.word	.LANCHOR0-(.LPIC1+4)
		.LFE186:
				.align	1
				.global	main
				.thumb
				.thumb_func
		main:
		.LFB185:
   18 ! now call with some functions....
				adds	r4, r4, #1
		.LVL12:
   19 printstring("
				ldr	r6, .L25+24
		.LPIC4:
				add	r6, pc
				mov	r5, #256
				mov	r2, r5
				adds	r1, r6, r5
				add	r4, sp, #1012
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL37:
				mov	r2, r5
				mov	r1, r4
				add	r7, sp, #244
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL38:
				mov	r2, r5
				mov	r1, r7
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL39:
		.LBE34:
		.LBB35:
		.LBB36:
				movs	r7, #240
				mov	r2, r7
				addw	r1, sp, #1028
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL40:
				ldm	r4, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL41:
		.LBE36:
		.LBE35:
   20     x               sine(x)
   21 ")
   22 tabulate ( sin, 0.0,pi/2,10)
				vldr.64	d8, .L25
				movs	r1, #10
				vldr.64	d1, .L25+8
				vmov.f64	d0, d8
				ldr	r0, .L25+28
		.LPIC5:
				add	r0, pc
				bl	TABULATE.10030(PLT)
		.LVL42:
		.LBB37:
   23 ! note that the function name appears WITHOUT parameters in the call
   24 !
   25 printstring("
				mov	r2, r5
				add	r1, r6, #512
				add	r4, sp, #756
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL43:
				mov	r2, r5
				mov	r1, r4
				add	r6, sp, #500
				mov	r0, r6
				bl	memcpy(PLT)
		.LVL44:
				mov	r2, r5
				mov	r1, r6
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL45:
		.LBE37:
		.LBB38:
		.LBB39:
				mov	r2, r7
				add	r1, sp, #772
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL46:
				ldm	r4, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL47:
		.LBE39:
		.LBE38:
   26     x         squareroot(x)
   27 ")
   28 tabulate( sqrt, 0.0,10.0,5)
				movs	r1, #5
				vmov.f64	d1, #1.0e+1
				vmov.f64	d0, d8
				ldr	r0, .L25+32
		.LPIC7:
				add	r0, pc
				bl	TABULATE.10030(PLT)
		.LVL48:
		.LBB40:
		.LBB41:
				movs	r0, #0
				bl	exit(PLT)
		.LVL49:
		.L26:
				.align	3
		.L25:
				.word	0
				.word	0
				.word	1413754136
				.word	1073291771
				.word	_GLOBAL_OFFSET_TABLE_-(.LPIC3+4)
				.word	__stack_chk_guard(GOT)
				.word	.LANCHOR0-(.LPIC4+4)
				.word	_imp_SIN-(.LPIC5+4)
				.word	_imp_SQRT-(.LPIC7+4)
		.LBE41:
		.LBE40:
		.LFE185:
				.section	.rodata
				.align	2
				.set	.LANCHOR0,. + 0
		.LC2:
				.byte	17
				.ascii	"test-new/rt28.imp\000"
				.space	237
		.LC0:
				.byte	29
				.ascii	"\012    x               sine(x)\012\000"
				.space	225
		.LC1:
				.byte	29
				.ascii	"\012    x         squareroot(x)\012\000"
				.space	225
				.section	.rodata.str1.4,"aMS",%progbits,1
				.align	2
		.LC3:
				.ascii	"Illegal cycle I = 0, 1, STEPS\000"
		.Letext0:
   29 !
   30 %endofprogram
   18 Statements compiled
