         Edinburgh IMP77 Compiler - Version 8.4
    1
				.section	".text"
		.Ltext0:
				.align 4
				.proc	020
		A.6060:
		.LFB186:
    2 %BEGIN
				.register	%g7, #ignore
		.LVL4:
				save	%sp, -1488, %sp
		.LVL5:
				ldx	[%g7+40], %g1
				stx	%g1, [%fp+2039]
				mov	0, %g1
				add	%fp, 2047, %g1
				stx	%g1, [%fp+1007]
    3 !***********************************************************************
				mov	%i1, %o1
				call	_imp_initialise, 0
				 mov	%i0, %o0
		.LVL6:
    4 !*    TESTS SOME VERY NOTTED CONDITIONS FOR CONSISTENCY. NO OPUT IF OK *
    5 !***********************************************************************
    6 %INTEGER I,J,K
    7 %ROUTINESPEC A
    8 %ROUTINESPEC B
    9 %ROUTINESPEC C
   10       K=0
				st	%g0, [%fp+999]
   11       %CYCLE I=-1,1,1
   12          %CYCLE J=0,1,3
   13             %IFNOTNOTNOTNOT I=1 %THEN A %ELSE B
				lduw	[%fp+995], %g1
				cmp	%g1, 1
				be,pn	%icc, .L62
				 nop
		.L12:
   14             %IFNOT (%NOT I=1) %THEN A %ELSE B
				mov	-2, %g1
				cmp	%g1, 1
				be,pn	%icc, .L11
				 mov	256, %o2
		.LVL8:
		.L8:
				call	A.6060, 0
				 add	%fp, 991, %g5
		.LVL9:
				lduw	[%fp+995], %g1
		.L71:
				cmp	%g1, 1
				be,pn	%icc, .L63
				 nop
		.L14:
   15             %IF I=1 %THEN A %ELSE B
				ba,pt	%xcc, .L8
				 mov	-1, %i5
		.L9:
		.LVL7:
		.L61:
		.L10:
				add	%g1, 1, %g1
				st	%g1, [%fp+995]
				ba,pt	%xcc, .L36
				 mov	%i5, %g1
		.L62:
				ba,pt	%xcc, .L71
				 lduw	[%fp+995], %g1
		.L63:
				call	A.6060, 0
				 add	%fp, 991, %g5
		.LVL10:
				lduw	[%fp+991], %g1
				cmp	%g1, 3
				be,a,pn	%icc, .L61
				 lduw	[%fp+995], %g1
		.LVL23:
		.L36:
				lduw	[%fp+995], %g1
		.L72:
				cmp	%g1, 1
				be,pn	%icc, .L64
				 nop
		.L16:
   16             C
				ba,pt	%xcc, .L72
				 lduw	[%fp+995], %g1
		.L64:
				call	A.6060, 0
				 add	%fp, 991, %g5
		.LVL11:
				add	%g1, 1, %g1
				st	%g1, [%fp+991]
				call	C.6064, 0
				 add	%fp, 991, %g5
		.LVL27:
   17             %IFNOT I=1 %THEN A %ELSE B
				ba,pt	%xcc, .L17
				 nop
		.L18:
				call	B.6062, 0
				 add	%fp, 991, %g5
		.LVL24:
		.L13:
				lduw	[%fp+995], %g1
				cmp	%g1, 1
				be,pn	%icc, .L18
				 nop
   18             %UNLESS I=1 %THEN A %ELSE B
				ba,pt	%xcc, .L73
				 lduw	[%fp+995], %g1
		.L20:
				call	B.6062, 0
				 add	%fp, 991, %g5
		.LVL25:
		.L15:
				call	A.6060, 0
				 add	%fp, 991, %g5
		.LVL28:
		.L19:
				lduw	[%fp+995], %g1
		.L73:
				cmp	%g1, 1
				be,pn	%icc, .L20
				 nop
   19             C
				call	B.6062, 0
				 add	%fp, 991, %g5
		.LVL26:
		.L17:
				call	A.6060, 0
				 add	%fp, 991, %g5
		.LVL29:
		.L21:
				call	C.6064, 0
				 add	%fp, 991, %g5
		.LVL30:
   20             %IF I=1 %AND J#2 %THEN A %ELSE B
				lduw	[%fp+995], %g1
				cmp	%g1, 1
				bne,pn	%icc, .L22
				 lduw	[%fp+991], %g1
   21             %IF I=1 %ANDNOT J=2 %THEN A %ELSE B
				call	B.6062, 0
				 add	%fp, 991, %g5
		.LVL12:
				cmp	%g1, 2
				bne,pn	%icc, .L65
				 nop
		.L22:
				lduw	[%fp+995], %g1
		.L74:
				cmp	%g1, 1
				bne,pn	%icc, .L24
				 lduw	[%fp+991], %g1
   22             C
				call	B.6062, 0
				 add	%fp, 991, %g5
		.LVL13:
				ba,pt	%xcc, .L21
				 nop
		.L65:
				call	A.6060, 0
				 add	%fp, 991, %g5
		.LVL14:
				cmp	%g1, 2
				bne,pn	%icc, .L66
				 nop
		.L24:
				call	C.6064, 0
				 add	%fp, 991, %g5
		.LVL33:
   23             %IF I=1 %OR 1<=J<=2 %THEN A %ELSE B
				ba,pt	%xcc, .L74
				 lduw	[%fp+995], %g1
		.L66:
				call	A.6060, 0
				 add	%fp, 991, %g5
		.LVL15:
				lduw	[%fp+995], %g1
				cmp	%g1, 1
				be,pn	%icc, .L26
				 lduw	[%fp+991], %g1
		.LVL34:
		.LBB18:
   24             %IF I=1 %OR (1<=J %AND J<=2) %THEN A %ELSE B
				ba,pt	%xcc, .L25
				 nop
		.L26:
				lduw	[%fp+995], %g1
		.L75:
				cmp	%g1, 1
				be,pn	%icc, .L29
				 lduw	[%fp+991], %g1
				ba,pt	%xcc, .L75
				 lduw	[%fp+995], %g1
		.LVL37:
		.L59:
   25             C
				call	C.6064, 0
				 add	%fp, 991, %g5
		.LVL19:
		.LBB17:
				call	B.6062, 0
				 add	%fp, 991, %g5
		.LVL31:
		.L23:
   26             %IF I=0=J %THEN A %ELSE B
				add	%g1, -1, %g1
				cmp	%g1, 1
				bleu,pn	%icc, .L29
				 nop
		.L30:
				call	B.6062, 0
				 add	%fp, 991, %g5
		.LVL32:
		.L25:
   27             %IF I=0 %AND J=0 %THEN A %ELSE B
				lduw	[%fp+995], %g1
		.L76:
				cmp	%g1, 0
				bne,pn	%icc, .L34
				 lduw	[%fp+991], %g1
   28             C
				call	A.6060, 0
				 add	%fp, 991, %g5
		.LVL18:
		.L31:
				cmp	%g1, 0
				be,pn	%icc, .L60
				 nop
		.L34:
				call	C.6064, 0
				 add	%fp, 991, %g5
		.LVL22:
		.LDL1:
   29          %REPEAT
				lduw	[%fp+995], %g1
				cmp	%g1, 0
				bne,pn	%icc, .L32
				 lduw	[%fp+991], %g1
				add	%g1, -1, %g1
				cmp	%g1, 1
				bleu,pn	%icc, .L26
				 nop
		.L27:
		.LVL35:
		.LBE18:
				call	A.6060, 0
				 add	%fp, 991, %g5
		.LVL39:
   30       %REPEAT
				ba,pt	%xcc, .L35
				 nop
		.L11:
		.LBB19:
   31       PRINTSTRING("PART 1 OK ")
				call	B.6062, 0
				 add	%fp, 991, %g5
		.LVL17:
				ba,pt	%xcc, .L31
				 nop
		.L29:
				cmp	%g1, 0
				be,pn	%icc, .L59
				 nop
		.L32:
		.LBE17:
				sethi	%hi(.LC0), %o1
				or	%o1, %lo(.LC0), %o1
				call	memcpy, 0
				 add	%fp, 1783, %o0
		.LVL40:
				mov	256, %o2
				add	%fp, 1783, %o1
				call	memcpy, 0
				 add	%fp, 1015, %o0
		.LVL41:
				mov	256, %o2
				add	%fp, 1015, %o1
				call	memcpy, 0
				 add	%fp, 1527, %o0
		.LVL42:
		.LBE19:
		.LBB20:
		.LBB21:
				mov	256, %o2
				add	%fp, 1527, %o1
				call	memcpy, 0
				 add	%fp, 735, %o0
		.LVL43:
				call	_imp_printstring, 0
				 add	%fp, 735, %o0
		.LVL44:
		.LBE21:
		.LBE20:
   32       %CYCLE I=-1,1,1
				call	A.6060, 0
				 add	%fp, 991, %g5
		.LVL16:
		.L28:
				call	B.6062, 0
				 add	%fp, 991, %g5
		.LVL21:
		.L35:
   33          %CYCLE J=0,1,3
				call	A.6060, 0
				 add	%fp, 991, %g5
		.LVL38:
   34             %IF I=1 %ANDNOT J#1 %THEN A %ELSE B
				ba,pt	%xcc, .L76
				 lduw	[%fp+995], %g1
		.L60:
				lduw	[%fp+995], %g2
				xor	%g2, 1, %g2
				cmp	%g0, %g2
				addx	%g0, 0, %g2
   35             %IF I=1 %ANDNOT (J#1) %THEN A %ELSE B
				call	B.6062, 0
				 add	%fp, 991, %g5
		.LVL36:
				mov	-2, %g1
				cmp	%g1, 1
				be,pn	%icc, .L40
				 mov	256, %o2
		.L37:
				xor	%g1, 1, %g1
				cmp	%g0, %g1
				addx	%g0, 0, %g1
				orcc	%g2, %g1, %g0
				be,pn	%icc, .L68
				 nop
		.L41:
				lduw	[%fp+995], %g1
		.L77:
				cmp	%g1, 1
				bne,pn	%icc, .L43
				 lduw	[%fp+991], %g1
   36             C
				call	B.6062, 0
				 add	%fp, 991, %g5
		.LVL20:
		.L33:
				ba,pt	%xcc, .L37
				 mov	-1, %i5
		.L38:
		.L67:
		.L39:
				add	%g1, 1, %g1
				st	%g1, [%fp+995]
				ba,pt	%xcc, .L55
				 mov	%i5, %g1
		.L68:
				call	A.6060, 0
				 add	%fp, 991, %g5
		.LVL45:
				lduw	[%fp+991], %g1
				cmp	%g1, 3
				be,a,pn	%icc, .L67
				 lduw	[%fp+995], %g1
		.L55:
				cmp	%g1, 1
				be,pn	%icc, .L69
				 nop
		.L43:
				call	C.6064, 0
				 add	%fp, 991, %g5
		.LVL55:
   37             %IF I=1 %ORNOT 1<=J<=2 %THEN A %ELSE B
				ba,pt	%xcc, .L77
				 lduw	[%fp+995], %g1
		.L69:
				call	A.6060, 0
				 add	%fp, 991, %g5
		.LVL46:
				add	%g1, 1, %g1
				st	%g1, [%fp+991]
				lduw	[%fp+995], %g1
				cmp	%g1, 1
				be,pn	%icc, .L45
				 lduw	[%fp+991], %g1
		.LVL56:
		.LBB22:
   38             %IF I=1 %ORNOT (1<=J %AND J<=2) %THEN A %ELSE B
				ba,pt	%xcc, .L44
				 nop
		.LVL47:
		.L46:
				ba,pt	%xcc, .L78
				 lduw	[%fp+995], %g1
		.L49:
				lduw	[%fp+995], %g1
		.L78:
				cmp	%g1, 1
				be,pn	%icc, .L48
				 lduw	[%fp+991], %g1
   39             C
				call	B.6062, 0
				 add	%fp, 991, %g5
		.LVL53:
		.L42:
				call	C.6064, 0
				 add	%fp, 991, %g5
		.LVL60:
   40             %IF I=1 %AND J=2 %THEN A %ELSE B
				call	B.6062, 0
				 add	%fp, 991, %g5
		.LVL54:
		.L44:
				add	%g1, -1, %g1
				cmp	%g1, 1
				bleu,pn	%icc, .L49
				 nop
		.L48:
				lduw	[%fp+995], %g1
				cmp	%g1, 1
				bne,pn	%icc, .L51
				 lduw	[%fp+991], %g1
   41             %IFNOT (%NOT (I=1 %AND J=2)) %THEN A %ELSE B
				cmp	%g1, 2
				be,pn	%icc, .L70
				 nop
		.L51:
				lduw	[%fp+995], %g1
		.L79:
				cmp	%g1, 1
				bne,pn	%icc, .L53
				 lduw	[%fp+991], %g1
   42             C
				call	A.6060, 0
				 add	%fp, 991, %g5
		.LVL50:
				call	C.6064, 0
				 add	%fp, 991, %g5
		.LVL52:
		.LDL2:
				call	A.6060, 0
				 add	%fp, 991, %g5
		.LVL59:
		.L50:
				cmp	%g1, 2
				bne,pt	%icc, .L53
				 nop
   43          %REPEAT
				ba,pt	%xcc, .L79
				 lduw	[%fp+995], %g1
		.L53:
				add	%g1, -1, %g1
				cmp	%g1, 1
				bleu,pn	%icc, .L46
				 nop
		.LVL57:
		.L45:
		.LBE22:
				call	A.6060, 0
				 add	%fp, 991, %g5
		.LVL62:
   44       %REPEAT
				ba,pt	%xcc, .L54
				 nop
		.L40:
		.LBB23:
   45       PRINTSTRING("TEST OK")
				call	B.6062, 0
				 add	%fp, 991, %g5
		.LVL49:
				ba,pt	%xcc, .L50
				 nop
		.L70:
				call	B.6062, 0
				 add	%fp, 991, %g5
		.LVL61:
		.L52:
				sethi	%hi(.LC1), %o1
				or	%o1, %lo(.LC1), %o1
				call	memcpy, 0
				 add	%fp, 1783, %o0
		.LVL63:
				mov	256, %o2
				add	%fp, 1783, %o1
				call	memcpy, 0
				 add	%fp, 1271, %o0
		.LVL64:
				mov	256, %o2
				add	%fp, 1271, %o1
				call	memcpy, 0
				 add	%fp, 1783, %o0
		.LVL65:
		.LBE23:
		.LBB24:
		.LBB25:
				mov	256, %o2
				add	%fp, 1783, %o1
				call	memcpy, 0
				 add	%fp, 735, %o0
		.LVL66:
				call	_imp_printstring, 0
				 add	%fp, 735, %o0
		.LVL67:
		.LBE25:
		.LBE24:
		.LBB26:
		.LBB27:
				call	exit, 0
				 mov	0, %o0
		.LVL68:
		.LBE27:
		.LBE26:
				nop
		.LFE185:
		.Letext0:
   46 %ROUTINE A; K=K<<8!'A'; %END
				call	B.6062, 0
				 add	%fp, 991, %g5
		.LVL51:
		.L54:
				call	A.6060, 0
				 add	%fp, 991, %g5
		.LVL58:
		.L47:
   47 %ROUTINE B; K=K<<8!'B'; %END
   48 %ROUTINE C
				lduw	[%g5+8], %g1
				sll	%g1, 8, %g1
				or	%g1, 65, %g1
				.register	%g2, #scratch
				.register	%g3, #scratch
				save	%sp, -176, %sp
   49       %IF K=M'AA' %OR K=M'BB' %OR K=M'AAA' %OR K=M'BBB' %THEN K=0 %ANDRETURN
				lduw	[%g5+8], %g1
				sll	%g1, 8, %g1
				or	%g1, 66, %g1
				lduw	[%g5+8], %g2
				or	%g3, 321, %g3
				xor	%g2, %g3, %g3
				cmp	%g0, %g3
				subx	%g0, -1, %g3
				or	%g1, %g3, %g1
				sethi	%hi(4276224), %g3
				or	%g3, 321, %g3
				xor	%g2, %g3, %g3
				cmp	%g0, %g3
				subx	%g0, -1, %g3
				or	%g1, %g3, %g1
				xor	%g1, 1, %g1
				call	B.6062, 0
				 add	%fp, 991, %g5
		.LVL48:
   50       WRITE(I,1); WRITE(J,1); WRITE(K,1)
				jmp	%o7+8
				 st	%g1, [%g5+8]
		.LFE186:
				.align 4
				.proc	020
		B.6062:
		.LFB187:
				sethi	%hi(16384), %g3
				or	%g3, 578, %g1
				xor	%g2, %g1, %g1
				cmp	%g0, %g1
				subx	%g0, -1, %g1
				mov	1, %o1
				call	_imp_writeint, 0
				 ldsw	[%g5+4], %o0
		.LVL0:
   51       %MONITOR
				jmp	%o7+8
				 st	%g1, [%g5+8]
		.LFE187:
				.align 4
				.proc	020
		C.6064:
		.LFB188:
				mov	1, %o1
				call	_imp_writeint, 0
				 ldsw	[%i5], %o0
		.LVL1:
   52       %STOP
				sethi	%hi(4341760), %g3
				or	%g3, 578, %g3
				xor	%g2, %g3, %g2
				cmp	%g0, %g2
				addx	%g0, 0, %g2
				andcc	%g1, %g2, %g0
				bne,pn	%icc, .L4
				 mov	%g5, %i5
		.L5:
				mov	1, %o1
				call	_imp_writeint, 0
				 ldsw	[%i5+8], %o0
		.LVL2:
		.LBB15:
		.LBB16:
				call	exit, 0
				 mov	0, %o0
		.LVL3:
		.LBE16:
		.LBE15:
				nop
		.LFE188:
				.section	".rodata"
		.LC0:
				.byte	10
				.asciz	"PART 1 OK "
				.skip	244
		.LC1:
				.byte	7
				.asciz	"TEST OK"
				.skip	247
				.section	".text"
				.align 4
				.global main
				.proc	04
		main:
		.LFB185:
   53 %END
				return	%i7+8
				 nop
		.L4:
   54 %ENDOFPROGRAM
				st	%g0, [%g5+8]
   56 Statements compiled
