         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
				.section	".text"
		.Ltext0:
				.section	".rodata"
		.LC0:
				.byte	7
				.asciz	"TEST OK"
				.skip	247
		.LC1:
				.byte	15
				.asciz	"Divide in error"
				.skip	239
				.section	".text"
				.align 4
				.global main
				.proc	04
		main:
		.LFB185:
				.register	%g2, #scratch
				.register	%g3, #scratch
				.register	%g7, #ignore
		.LVL0:
				save	%sp, -1472, %sp
		.LVL1:
				ldx	[%g7+40], %g1
				stx	%g1, [%fp+2039]
				mov	0, %g1
    2 %externalroutinespec phex %alias "s_phex" (%integer x)
				mov	%i1, %o1
				call	_imp_initialise, 0
				 mov	%i0, %o0
		.LVL2:
		.LBB32:
		.LBB33:
    3 %integer i,j,k,corr,fail
    4 %integerfn div(%integer x,y)
    5 %result=x//y
				mov	20, %g2
		.LBE33:
		.LBE32:
				add	%g2, 3, %g4
				mov	%g2, %i1
				movrlz	%g2, %g4, %i1
				srax	%i1, 2, %g4
		.LBE36:
		.LBE35:
				add	%g2, 7, %g4
				mov	%g2, %i1
				movrlz	%g2, %g4, %i1
				srax	%i1, 3, %g4
		.LBE38:
		.LBE37:
				cmp	%g5, %g4
				movne	%icc, 1, %g3
		.LVL5:
		.L6:
				add	%g1, 15, %g4
				cmp	%g1, 0
				mov	%g1, %g5
				movl	%icc, %g4, %g5
				sra	%g5, 4, %g5
		.LBB39:
		.LBB40:
				add	%g2, 15, %g4
				mov	%g2, %i1
				movrlz	%g2, %g4, %i1
				srax	%i1, 4, %g4
		.LBE40:
		.LBE39:
				srlx	%g2, 63, %g4
				add	%g4, %g2, %g4
				srax	%g4, 1, %g4
		.LBE34:
		.LBE41:
    6 %end
    7 fail=0
				mov	0, %g3
		.LVL3:
		.L2:
    8 %for k=20,-1,-20%cycle
    9       %if k//2#div(k,2) %then fail=1
				srl	%g1, 31, %g5
				add	%g5, %g1, %g5
				sra	%g5, 1, %g5
		.LBB41:
		.LBB34:
   10       %if k//4#div(k,4) %then fail=1
				add	%g1, 3, %g4
				cmp	%g1, 0
				mov	%g1, %g5
				movl	%icc, %g4, %g5
				sra	%g5, 2, %g5
		.LBB35:
		.LBB36:
				cmp	%g5, %g4
		.LVL9:
		.L4:
				ba,pt	%xcc, .L2
				 movne	%icc, 1, %g3
		.LVL10:
		.L12:
		.L3:
   11       %if k//8#div(k,8) %then fail=1
				cmp	%g5, %g4
				movne	%icc, 1, %g3
		.LVL4:
		.L5:
				add	%g1, 7, %g4
				cmp	%g1, 0
				mov	%g1, %g5
				movl	%icc, %g4, %g5
				sra	%g5, 3, %g5
		.LBB37:
		.LBB38:
				cmp	%g1, -20
				be,pn	%icc, .L12
				 add	%g1, -1, %g1
		.LVL7:
				add	%g2, -1, %g2
		.LVL8:
   12       %if k//16#div(k,16) %then fail=1
				mov	20, %g1
   13       %if k//1#div(k,1) %then fail=1
				cmp	%g5, %g4
				movne	%icc, 1, %g3
		.LVL6:
   14 %repeat
   15 %if fail=0 %then printstring("TEST OK") %else printstring("Divide in error")
				cmp	%g3, 0
				bne,pt	%icc, .L8
				 mov	256, %o2
		.LBB42:
   16 newline
				sethi	%hi(.LC0), %o1
				or	%o1, %lo(.LC0), %o1
				call	memcpy, 0
				 add	%fp, 1783, %o0
		.LVL11:
				mov	256, %o2
				add	%fp, 1783, %o1
				call	memcpy, 0
				 add	%fp, 1015, %o0
		.LVL12:
				mov	256, %o2
				add	%fp, 1015, %o1
				call	memcpy, 0
				 add	%fp, 1527, %o0
		.LVL13:
		.LBE42:
		.LBB43:
		.LBB44:
				mov	256, %o2
				add	%fp, 1527, %o1
				call	memcpy, 0
				 add	%fp, 751, %o0
		.LVL14:
				call	_imp_printstring, 0
				 add	%fp, 751, %o0
		.LVL15:
		.L9:
		.LBE44:
		.LBE43:
		.LBB45:
		.LBB46:
				call	_imp_newline, 0
				 nop
		.LVL16:
		.LBE46:
		.LBE45:
		.LBB47:
		.LBB48:
				call	exit, 0
				 mov	0, %o0
		.LVL17:
		.L8:
		.LBE48:
		.LBE47:
		.LBB49:
   17 %endofprogram
?CORR unused
?J unused
?I unused
?PHEX unused
   17 Statements compiled
				sethi	%hi(.LC1), %o1
				or	%o1, %lo(.LC1), %o1
				call	memcpy, 0
				 add	%fp, 1783, %o0
		.LVL18:
				mov	256, %o2
				add	%fp, 1783, %o1
				call	memcpy, 0
				 add	%fp, 1271, %o0
		.LVL19:
				mov	256, %o2
				add	%fp, 1271, %o1
				call	memcpy, 0
				 add	%fp, 1783, %o0
		.LVL20:
		.LBE49:
		.LBB50:
		.LBB51:
				mov	256, %o2
				add	%fp, 1783, %o1
				call	memcpy, 0
				 add	%fp, 751, %o0
		.LVL21:
				call	_imp_printstring, 0
				 add	%fp, 751, %o0
		.LVL22:
				ba,pt	%xcc, .L9
				 nop
		.LBE51:
		.LBE50:
		.LFE185:
		.Letext0:
