         Edinburgh IMP77 Compiler - Version 8.4
    1 %BEGIN
				.machine ppc
				.section	".text"
		.Ltext0:
				.align 2
		FACT.6988:
		.LFB186:
		.LVL6:
				stwu 1,-1344(1)
				mflr 0
				stw 0,1348(1)
				stw 27,1324(1)
				stw 28,1328(1)
				stw 29,1332(1)
				stw 30,1336(1)
				stw 31,1340(1)
				lwz 9,-28680(2)
				stw 9,1308(1)
				li 9,0
    2 %owninteger fail=0
				bl _imp_initialise
		.LVL7:
    3 %INTEGER I
    4 %INTEGERFN FACT(%INTEGER N,mult)
		.LVL0:
				stwu 1,-16(1)
				mflr 0
				stw 0,20(1)
		.L3:
    5       %IF N<=1 %THENRESULT=mult
				cmpwi 7,3,1
				bgt 7,.L8
    6       %RESULT=FACT(N-1,mult*N)
				mullw 4,3,4
		.LVL3:
				addi 3,3,-1
		.LVL4:
				bl FACT.6988
		.LVL5:
				lwz 0,20(1)
				mtlr 0
				addi 1,1,16
				blr
		.LFE186:
				.align 2
				.globl main
		main:
		.LFB185:
    7 %END
				mr 3,4
		.LVL1:
				blr
		.LVL2:
		.L8:
    8 %ROUTINE COMPARE(%INTEGER I,J)
    9       %UNLESS I=J %START
				cmpw 7,29,30
				beq 7,.L12
		.LBB27:
   10          PRINTSTRING("ERROR")
				lis 28,.LANCHOR0@ha
				la 28,.LANCHOR0@l(28)
		.LBE26:
				li 5,256
				mr 4,28
				addi 3,1,796
				bl memcpy
		.LVL15:
				li 5,256
				addi 4,1,796
				addi 3,1,1052
				bl memcpy
		.LVL16:
				li 5,256
				addi 4,1,1052
				addi 3,1,540
				bl memcpy
		.LVL17:
		.LBE27:
		.LBB28:
		.LBB29:
				li 5,256
				addi 4,1,540
				addi 3,1,16
				bl memcpy
		.LVL18:
				addi 3,1,16
				bl _imp_printstring
		.LVL19:
		.LBE29:
		.LBE28:
   11          WRITE(I,5); WRITE(J,5)
				li 4,5
				mr 3,29
				bl _imp_writeint
		.LVL20:
   12          Fail=1; NEWLINE
				lis 27,.LANCHOR1@ha
				b .L10
		.LVL8:
		.L12:
				mr 30,31
		.LVL9:
		.LBE25:
		.LBE24:
				li 4,5
				mr 3,30
				bl _imp_writeint
		.LVL21:
				li 9,1
				stw 9,.LANCHOR1@l(27)
		.LBB30:
		.LBB31:
				bl _imp_newline
		.LVL22:
				b .L12
		.LVL23:
		.L11:
		.LBE31:
		.LBE30:
		.LBE32:
		.LBE33:
   13       %FINISH
   14 %END
   15       COMPARE(FACT(I,1),I*FACT(I-1,1)) %FOR I=2,1,100
   16       %if fail=0 %then printstring("TEST OK")
				li 30,1
		.LBB24:
		.LBB25:
		.LBB26:
				lis 9,.LANCHOR1@ha
				lwz 9,.LANCHOR1@l(9)
				cmpwi 7,9,0
				beq 7,.L16
		.L13:
		.LVL24:
		.LBB34:
		.LBB35:
				li 3,0
				bl exit
		.LVL25:
		.L16:
		.LBE35:
		.LBE34:
		.LBB36:
   17 %ENDOFPROGRAM
				li 5,256
				lis 4,.LANCHOR0@ha
				la 4,.LANCHOR0@l(4)
				addi 4,4,256
				addi 3,1,796
				bl memcpy
		.LVL26:
				li 5,256
				addi 4,1,796
				addi 3,1,284
				bl memcpy
		.LVL27:
				li 5,256
				addi 4,1,284
				addi 3,1,796
				bl memcpy
		.LVL28:
		.LBE36:
		.LBB37:
		.LBB38:
				li 5,256
				addi 4,1,796
				addi 3,1,16
				bl memcpy
		.LVL29:
				addi 3,1,16
				bl _imp_printstring
		.LVL30:
				b .L13
		.LBE38:
		.LBE37:
		.LFE185:
				.section	.rodata
				.set	.LANCHOR0,. + 0
		.LC1:
				.byte	5
				.string	"ERROR"
				.zero	249
		.LC0:
				.byte	7
				.string	"TEST OK"
				.zero	247
				.section	".bss"
				.align 2
				.set	.LANCHOR1,. + 0
		FAIL.6984:
				.zero	4
				.section	".text"
		.Letext0:
   19 Statements compiled
				cmpwi 7,31,100
				beq 7,.L11
		.LVL10:
		.L10:
				addi 31,30,1
		.LVL11:
				li 4,1
				mr 3,31
				bl FACT.6988
		.LVL12:
				mr 29,3
				li 4,1
				mr 3,30
				bl FACT.6988
		.LVL13:
				mullw 30,3,31
		.LVL14:
		.LBB33:
		.LBB32:
