         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
		.Ltext0:
				.align	2
				.global	main
		main:
		.LFB185:
		.LVL0:
				sub	sp, sp, #1344
				stp	x29, x30, [sp]
				add	x29, sp, 0
				stp	x19, x20, [sp, 16]
				str	x21, [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
    2 %externalroutinespec phex %alias "s_phex" (%integer x)
				bl	_imp_initialise
		.LVL1:
		.LBB32:
		.LBB33:
    3 %integer i,j,k,corr,fail
    4 %integerfn div(%integer x,y)
    5 %result=x//y
				mov	x1, 20
		.LBE33:
		.LBE32:
				add	x2, x1, 3
				cmp	x1, 0
				csel	x2, x2, x1, lt
				asr	x2, x2, 2
		.LBE36:
		.LBE35:
				add	x2, x1, 7
				cmp	x1, 0
				csel	x2, x2, x1, lt
				asr	x2, x2, 3
		.LBE38:
		.LBE37:
				cmp	w3, w2
				csel	w4, w4, w5, eq
		.LVL4:
		.L6:
				add	w3, w0, 15
				cmp	w0, 0
				csel	w3, w3, w0, lt
				asr	w3, w3, 4
		.LBB39:
		.LBB40:
				add	x2, x1, 15
				cmp	x1, 0
				csel	x2, x2, x1, lt
				asr	x2, x2, 4
		.LBE40:
		.LBE39:
				add	x2, x1, x1, lsr 63
				asr	x2, x2, 1
		.LBE34:
		.LBE41:
    6 %end
    7 fail=0
				mov	w4, 0
    8 %for k=20,-1,-20%cycle
    9       %if k//2#div(k,2) %then fail=1
				add	w3, w0, w0, lsr 31
				asr	w3, w3, 1
		.LBB41:
		.LBB34:
   10       %if k//4#div(k,4) %then fail=1
				add	w3, w0, 3
				cmp	w0, 0
				csel	w3, w3, w0, lt
				asr	w3, w3, 2
		.LBB35:
		.LBB36:
				cmp	w3, w2
				csel	w4, w4, w5, eq
		.LVL8:
		.L4:
				b	.L2
		.LVL9:
		.L13:
		.L3:
   11       %if k//8#div(k,8) %then fail=1
				mov	w5, 1
		.LVL2:
		.L2:
				cmp	w3, w2
				csel	w4, w4, w5, eq
		.LVL3:
		.L5:
				add	w3, w0, 7
				cmp	w0, 0
				csel	w3, w3, w0, lt
				asr	w3, w3, 3
		.LBB37:
		.LBB38:
				cmn	w0, #20
				beq	.L13
   12       %if k//16#div(k,16) %then fail=1
				mov	w0, w1
				sub	w0, w0, #1
		.LVL6:
				sub	x1, x1, #1
		.LVL7:
   13       %if k//1#div(k,1) %then fail=1
				cmp	w3, w2
				csel	w4, w4, w5, eq
		.LVL5:
   14 %repeat
   15 %if fail=0 %then printstring("TEST OK") %else printstring("Divide in error")
				cbnz	w4, .L8
		.LBB42:
   16 newline
				add	x20, x29, 1080
				mov	x21, 256
				mov	x2, x21
				adrp	x1, .LANCHOR0
				add	x1, x1, :lo12:.LANCHOR0
				mov	x0, x20
		.LVL10:
				bl	memcpy
		.LVL11:
				add	x19, x29, 312
				mov	x2, x21
				mov	x1, x20
				mov	x0, x19
				bl	memcpy
		.LVL12:
				add	x20, x29, 824
				mov	x2, x21
				mov	x1, x19
				mov	x0, x20
				bl	memcpy
		.LVL13:
		.LBE42:
		.LBB43:
		.LBB44:
				add	x19, x29, 48
				mov	x2, x21
				mov	x1, x20
				mov	x0, x19
				bl	memcpy
		.LVL14:
				mov	x0, x19
				bl	_imp_printstring
		.LVL15:
		.L9:
		.LBE44:
		.LBE43:
		.LBB45:
		.LBB46:
				bl	_imp_newline
		.LVL16:
		.LBE46:
		.LBE45:
		.LBB47:
		.LBB48:
				mov	w0, 0
				bl	exit
		.LVL17:
		.L8:
		.LBE48:
		.LBE47:
		.LBB49:
   17 %endofprogram
?CORR unused
?J unused
?I unused
?PHEX unused
   17 Statements compiled
				add	x19, x29, 1080
				mov	x20, 256
				mov	x2, x20
				adrp	x1, .LANCHOR0
				add	x1, x1, :lo12:.LANCHOR0
				add	x1, x1, x20
				mov	x0, x19
		.LVL18:
				bl	memcpy
		.LVL19:
				add	x21, x29, 568
				mov	x2, x20
				mov	x1, x19
				mov	x0, x21
				bl	memcpy
		.LVL20:
				mov	x2, x20
				mov	x1, x21
				mov	x0, x19
				bl	memcpy
		.LVL21:
		.LBE49:
		.LBB50:
		.LBB51:
				add	x0, x29, 48
				mov	x2, x20
				mov	x1, x19
				mov	x19, x0
				bl	memcpy
		.LVL22:
				mov	x0, x19
				bl	_imp_printstring
		.LVL23:
				b	.L9
		.LBE51:
		.LBE50:
		.LFE185:
				.section	.rodata
				.align	3
				.set	.LANCHOR0,. + 0
		.LC0:
				.byte	7
				.string	"TEST OK"
				.zero	247
		.LC1:
				.byte	15
				.string	"Divide in error"
				.zero	239
		.Letext0:
