         Edinburgh IMP77 Compiler - Version 8.4
    1
		.Ltext0:
		A.6025:
		.LFB190:
    2 %BEGIN
				leal	4(%esp), %ecx
				andl	$-16, %esp
				pushl	-4(%ecx)
				pushl	%ebp
				movl	%esp, %ebp
				pushl	%edi
				pushl	%esi
				pushl	%ebx
				pushl	%ecx
				subl	$1096, %esp
				call	__x86.get_pc_thunk.bx
				addl	$_GLOBAL_OFFSET_TABLE_, %ebx
				movl	%ecx, %eax
				movl	4(%eax), %edx
				movl	%edx, -1100(%ebp)
				movl	%gs:20, %esi
				movl	%esi, -28(%ebp)
				xorl	%esi, %esi
				leal	8(%ebp), %edx
				movl	%edx, -1056(%ebp)
				subl	$8, %esp
				pushl	-1100(%ebp)
				pushl	(%eax)
				call	_imp_initialise@PLT
				addl	$16, %esp
    3 !***********************************************************************
    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
				movl	$0, %eax
				movl	%eax, -1060(%ebp)
   11       %CYCLE I=-1,1,1
				movl	$-2, %eax
				movl	%eax, -1064(%ebp)
		.L4:
				movl	-1064(%ebp), %eax
				cmpl	$1, %eax
				je	.L95
				movl	-1064(%ebp), %eax
				addl	$1, %eax
				movl	%eax, -1064(%ebp)
				nop
		.L6:
		.LBB19:
   12          %CYCLE J=0,1,3
				movl	$-1, %eax
				movl	%eax, -1068(%ebp)
		.L7:
				movl	-1068(%ebp), %eax
				cmpl	$3, %eax
				je	.L96
				movl	-1068(%ebp), %eax
				addl	$1, %eax
				movl	%eax, -1068(%ebp)
				nop
		.L9:
   13             %IFNOTNOTNOTNOT I=1 %THEN A %ELSE B
				movl	-1064(%ebp), %eax
				cmpl	$1, %eax
				jne	.L97
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	A.6025
				jmp	.L12
		.L97:
				nop
		.L11:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	B.6027
		.L12:
   14             %IFNOT (%NOT I=1) %THEN A %ELSE B
				movl	-1064(%ebp), %eax
				cmpl	$1, %eax
				jne	.L98
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	A.6025
				jmp	.L15
		.L98:
				nop
		.L14:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	B.6027
		.L15:
   15             %IF I=1 %THEN A %ELSE B
				movl	-1064(%ebp), %eax
				cmpl	$1, %eax
				jne	.L99
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	A.6025
				jmp	.L18
		.L99:
				nop
		.L17:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	B.6027
		.L18:
   16             C
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	C.6029
   17             %IFNOT I=1 %THEN A %ELSE B
				movl	-1064(%ebp), %eax
				cmpl	$1, %eax
				je	.L100
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	A.6025
				jmp	.L21
		.L100:
				nop
		.L20:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	B.6027
		.L21:
   18             %UNLESS I=1 %THEN A %ELSE B
				movl	-1064(%ebp), %eax
				cmpl	$1, %eax
				je	.L101
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	A.6025
				jmp	.L24
		.L101:
				nop
		.L23:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	B.6027
		.L24:
   19             C
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	C.6029
   20             %IF I=1 %AND J#2 %THEN A %ELSE B
				movl	-1064(%ebp), %eax
				cmpl	$1, %eax
				jne	.L102
				movl	-1068(%ebp), %eax
				cmpl	$2, %eax
				je	.L103
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	A.6025
				jmp	.L28
		.L102:
				nop
				jmp	.L26
		.L103:
				nop
		.L26:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	B.6027
		.L28:
   21             %IF I=1 %ANDNOT J=2 %THEN A %ELSE B
				movl	-1064(%ebp), %eax
				cmpl	$1, %eax
				jne	.L104
				movl	-1068(%ebp), %eax
				cmpl	$2, %eax
				je	.L105
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	A.6025
				jmp	.L32
		.L104:
				nop
				jmp	.L30
		.L105:
				nop
		.L30:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	B.6027
		.L32:
   22             C
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	C.6029
   23             %IF I=1 %OR 1<=J<=2 %THEN A %ELSE B
				movl	-1064(%ebp), %eax
				cmpl	$1, %eax
				je	.L106
		.LBB15:
				movl	-1068(%ebp), %eax
				movl	%eax, -1084(%ebp)
				cmpl	$0, -1084(%ebp)
				jle	.L107
				cmpl	$2, -1084(%ebp)
				jg	.L108
		.LBE15:
				jmp	.L34
		.L106:
				nop
		.L34:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	A.6025
				jmp	.L37
		.L107:
		.LBB16:
				nop
				jmp	.L36
		.L108:
				nop
		.L36:
		.LBE16:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	B.6027
		.L37:
   24             %IF I=1 %OR (1<=J %AND J<=2) %THEN A %ELSE B
				movl	-1064(%ebp), %eax
				cmpl	$1, %eax
				je	.L109
				movl	-1068(%ebp), %eax
				testl	%eax, %eax
				jle	.L110
				movl	-1068(%ebp), %eax
				cmpl	$2, %eax
				jg	.L111
				jmp	.L39
		.L109:
				nop
		.L39:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	A.6025
				jmp	.L42
		.L110:
				nop
				jmp	.L41
		.L111:
				nop
		.L41:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	B.6027
		.L42:
   25             C
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	C.6029
		.LBB17:
   26             %IF I=0=J %THEN A %ELSE B
				movl	$0, -1080(%ebp)
				movl	-1064(%ebp), %eax
				cmpl	%eax, -1080(%ebp)
				jne	.L112
				movl	-1068(%ebp), %eax
				cmpl	%eax, -1080(%ebp)
				jne	.L113
		.LBE17:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	A.6025
				jmp	.L46
		.L112:
		.LBB18:
				nop
				jmp	.L44
		.L113:
				nop
		.L44:
		.LBE18:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	B.6027
		.L46:
   27             %IF I=0 %AND J=0 %THEN A %ELSE B
				movl	-1064(%ebp), %eax
				testl	%eax, %eax
				jne	.L114
				movl	-1068(%ebp), %eax
				testl	%eax, %eax
				jne	.L115
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	A.6025
				jmp	.L50
		.L114:
				nop
				jmp	.L48
		.L115:
				nop
		.L48:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	B.6027
		.L50:
   28             C
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	C.6029
   29          %REPEAT
				jmp	.L7
		.L96:
   30       %REPEAT
				jmp	.L4
		.L95:
   31       PRINTSTRING("PART 1 OK ")
				leal	-284(%ebp), %eax
				leal	.LC0@GOTOFF(%ebx), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-1052(%ebp), %eax
				leal	-284(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-540(%ebp), %eax
				leal	-1052(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.LBE19:
		.LBB20:
		.LBB21:
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-540(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				call	_imp_printstring@PLT
				addl	$256, %esp
		.LBE21:
		.LBE20:
   32       %CYCLE I=-1,1,1
				movl	$-2, %eax
				movl	%eax, -1064(%ebp)
		.L51:
				movl	-1064(%ebp), %eax
				cmpl	$1, %eax
				je	.L116
				movl	-1064(%ebp), %eax
				addl	$1, %eax
				movl	%eax, -1064(%ebp)
				nop
		.L53:
		.LBB25:
   33          %CYCLE J=0,1,3
				movl	$-1, %eax
				movl	%eax, -1068(%ebp)
		.L54:
				movl	-1068(%ebp), %eax
				cmpl	$3, %eax
				je	.L117
				movl	-1068(%ebp), %eax
				addl	$1, %eax
				movl	%eax, -1068(%ebp)
				nop
		.L56:
   34             %IF I=1 %ANDNOT J#1 %THEN A %ELSE B
				movl	-1064(%ebp), %eax
				cmpl	$1, %eax
				jne	.L118
				movl	-1068(%ebp), %eax
				cmpl	$1, %eax
				jne	.L119
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	A.6025
				jmp	.L60
		.L118:
				nop
				jmp	.L58
		.L119:
				nop
		.L58:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	B.6027
		.L60:
   35             %IF I=1 %ANDNOT (J#1) %THEN A %ELSE B
				movl	-1064(%ebp), %eax
				cmpl	$1, %eax
				jne	.L120
				movl	-1068(%ebp), %eax
				cmpl	$1, %eax
				jne	.L121
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	A.6025
				jmp	.L64
		.L120:
				nop
				jmp	.L62
		.L121:
				nop
		.L62:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	B.6027
		.L64:
   36             C
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	C.6029
   37             %IF I=1 %ORNOT 1<=J<=2 %THEN A %ELSE B
				movl	-1064(%ebp), %eax
				cmpl	$1, %eax
				je	.L122
		.LBB22:
				movl	-1068(%ebp), %eax
				movl	%eax, -1076(%ebp)
				cmpl	$0, -1076(%ebp)
				jle	.L123
				cmpl	$2, -1076(%ebp)
				jle	.L124
		.LBE22:
				jmp	.L66
		.L122:
				nop
				jmp	.L66
		.L123:
		.LBB23:
				nop
		.L66:
		.LBE23:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	A.6025
				jmp	.L69
		.L124:
		.LBB24:
				nop
		.L68:
		.LBE24:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	B.6027
		.L69:
   38             %IF I=1 %ORNOT (1<=J %AND J<=2) %THEN A %ELSE B
				movl	-1064(%ebp), %eax
				cmpl	$1, %eax
				je	.L125
				movl	-1068(%ebp), %eax
				testl	%eax, %eax
				jle	.L126
				movl	-1068(%ebp), %eax
				cmpl	$2, %eax
				jle	.L127
				jmp	.L71
		.L125:
				nop
				jmp	.L71
		.L126:
				nop
		.L71:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	A.6025
				jmp	.L74
		.L127:
				nop
		.L73:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	B.6027
		.L74:
   39             C
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	C.6029
   40             %IF I=1 %AND J=2 %THEN A %ELSE B
				movl	-1064(%ebp), %eax
				cmpl	$1, %eax
				jne	.L128
				movl	-1068(%ebp), %eax
				cmpl	$2, %eax
				jne	.L129
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	A.6025
				jmp	.L78
		.L128:
				nop
				jmp	.L76
		.L129:
				nop
		.L76:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	B.6027
		.L78:
   41             %IFNOT (%NOT (I=1 %AND J=2)) %THEN A %ELSE B
				movl	-1064(%ebp), %eax
				cmpl	$1, %eax
				jne	.L130
				movl	-1068(%ebp), %eax
				cmpl	$2, %eax
				jne	.L131
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	A.6025
				jmp	.L82
		.L130:
				nop
				jmp	.L80
		.L131:
				nop
		.L80:
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	B.6027
		.L82:
   42             C
				leal	-1068(%ebp), %eax
				movl	%eax, %ecx
				call	C.6029
   43          %REPEAT
				jmp	.L54
		.L117:
   44       %REPEAT
				jmp	.L51
		.L116:
   45       PRINTSTRING("TEST OK")
				leal	-284(%ebp), %eax
				leal	.LC1@GOTOFF(%ebx), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-796(%ebp), %eax
				leal	-284(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-284(%ebp), %eax
				leal	-796(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.LBE25:
		.LBB26:
		.LBB27:
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-284(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				call	_imp_printstring@PLT
				addl	$256, %esp
				movl	$0, -1072(%ebp)
		.LBE27:
		.LBE26:
		.LBB28:
		.LBB29:
				subl	$12, %esp
				pushl	-1072(%ebp)
				call	exit@PLT
		.LBE29:
		.LBE28:
		.LFE189:
		B.6027:
		.LFB191:
   46 %ROUTINE A; K=K<<8!'A'; %END
				pushl	%ebp
				movl	%esp, %ebp
				subl	$4, %esp
				call	__x86.get_pc_thunk.ax
				addl	$_GLOBAL_OFFSET_TABLE_, %eax
				movl	%ecx, %eax
				movl	%ecx, -4(%ebp)
				movl	8(%eax), %edx
				sall	$8, %edx
				orl	$65, %edx
				movl	%edx, 8(%eax)
				nop
				leave
				ret
		.LFE190:
				.section	.rodata
				.align 32
		.LC0:
				.byte	10
				.string	"PART 1 OK "
				.zero	244
				.align 32
		.LC1:
				.byte	7
				.string	"TEST OK"
				.zero	247
				.globl	main
		main:
		.LFB189:
   47 %ROUTINE B; K=K<<8!'B'; %END
				pushl	%ebp
				movl	%esp, %ebp
				subl	$4, %esp
				call	__x86.get_pc_thunk.ax
				addl	$_GLOBAL_OFFSET_TABLE_, %eax
				movl	%ecx, %eax
				movl	%ecx, -4(%ebp)
				movl	8(%eax), %edx
				sall	$8, %edx
				orl	$66, %edx
				movl	%edx, 8(%eax)
				nop
				leave
				ret
		.LFE191:
		C.6029:
		.LFB192:
   48 %ROUTINE C
				pushl	%ebp
				movl	%esp, %ebp
				pushl	%esi
				pushl	%ebx
				subl	$32, %esp
				call	__x86.get_pc_thunk.bx
				addl	$_GLOBAL_OFFSET_TABLE_, %ebx
				movl	%ecx, %esi
				movl	%ecx, -28(%ebp)
   49       %IF K=M'AA' %OR K=M'BB' %OR K=M'AAA' %OR K=M'BBB' %THEN K=0 %ANDRETURN
				movl	8(%esi), %eax
				cmpl	$16705, %eax
				je	.L144
				movl	8(%esi), %eax
				cmpl	$16962, %eax
				je	.L145
				movl	8(%esi), %eax
				cmpl	$4276545, %eax
				je	.L146
				movl	8(%esi), %eax
				cmpl	$4342338, %eax
				jne	.L147
				jmp	.L136
		.L144:
				nop
				jmp	.L136
		.L145:
				nop
				jmp	.L136
		.L146:
				nop
		.L136:
				movl	$0, %eax
				movl	%eax, 8(%esi)
				jmp	.L143
		.L139:
		.L147:
				nop
   50       WRITE(I,1); WRITE(J,1); WRITE(K,1)
				movl	4(%esi), %eax
				subl	$8, %esp
				pushl	$1
				pushl	%eax
				call	_imp_writeint@PLT
				addl	$16, %esp
				movl	(%esi), %eax
				subl	$8, %esp
				pushl	$1
				pushl	%eax
				call	_imp_writeint@PLT
				addl	$16, %esp
				movl	8(%esi), %eax
				subl	$8, %esp
				pushl	$1
				pushl	%eax
				call	_imp_writeint@PLT
				addl	$16, %esp
				movl	$0, -12(%ebp)
		.LBB30:
		.LBB31:
				subl	$12, %esp
				pushl	-12(%ebp)
				call	exit@PLT
		.L143:
		.LBE31:
		.LBE30:
   51       %MONITOR
   52       %STOP
   53 %END
				leal	-8(%ebp), %esp
				popl	%ebx
				popl	%esi
				popl	%ebp
				ret
		.LFE192:
				.section	.text.__x86.get_pc_thunk.ax,"axG",@progbits,__x86.get_pc_thunk.ax,comdat
				.globl	__x86.get_pc_thunk.ax
				.hidden	__x86.get_pc_thunk.ax
		__x86.get_pc_thunk.ax:
		.LFB193:
				movl	(%esp), %eax
				ret
		.LFE193:
				.section	.text.__x86.get_pc_thunk.bx,"axG",@progbits,__x86.get_pc_thunk.bx,comdat
				.globl	__x86.get_pc_thunk.bx
				.hidden	__x86.get_pc_thunk.bx
		__x86.get_pc_thunk.bx:
		.LFB194:
				movl	(%esp), %ebx
				ret
		.LFE194:
		.Letext0:
   54 %ENDOFPROGRAM
   56 Statements compiled
