         Edinburgh IMP77 Compiler - Version 8.4
    1
		.Ltext0:
				.align	2
		A.7693:
		.LFB186:
    2 %BEGIN
		.LVL4:
				sub	sp, sp, #1360
				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, 1352]
				mov	x3,0
				add	x2, x29, 1360
				str	x2, [x29, 320]
    3 !***********************************************************************
				bl	_imp_initialise
		.LVL5:
    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
				str	wzr, [x29, 312]
   11       %CYCLE I=-1,1,1
   12          %CYCLE J=0,1,3
   13             %IFNOTNOTNOTNOT I=1 %THEN A %ELSE B
				ldr	w0, [x29, 308]
				cmp	w0, 1
				beq	.L65
		.L14:
   14             %IFNOT (%NOT I=1) %THEN A %ELSE B
				mov	w0, -2
				ldr	w0, [x29, 308]
				cmp	w0, 1
				beq	.L13
		.LVL7:
		.L10:
				mov	x18, x19
				bl	A.7693
		.LVL8:
				ldr	w0, [x29, 308]
				cmp	w0, 1
				beq	.L66
		.L16:
   15             %IF I=1 %THEN A %ELSE B
				mov	w20, -1
				add	w0, w0, 1
				str	w0, [x29, 308]
				mov	w0, w20
				b	.L38
		.L65:
				b	.L15
		.L66:
				mov	x18, x19
				bl	A.7693
		.LVL9:
				ldr	w0, [x29, 304]
				cmp	w0, 3
				beq	.L64
		.LVL22:
		.L38:
				ldr	w0, [x29, 308]
				cmp	w0, 1
				beq	.L67
		.L18:
   16             C
				b	.L17
		.L67:
				mov	x18, x19
				bl	A.7693
		.LVL10:
				add	w0, w0, 1
				str	w0, [x29, 304]
				mov	x18, x19
				bl	C.7697
		.LVL26:
   17             %IFNOT I=1 %THEN A %ELSE B
				add	x19, x29, 304
				b	.L10
		.L11:
		.LVL6:
		.L64:
		.L12:
				b	.L19
		.L20:
				mov	x18, x19
				bl	B.7695
		.LVL23:
		.L15:
				ldr	w0, [x29, 308]
				cmp	w0, 1
				beq	.L20
   18             %UNLESS I=1 %THEN A %ELSE B
				mov	x18, x19
				bl	B.7695
		.LVL24:
		.L17:
				mov	x18, x19
				bl	A.7693
		.LVL27:
		.L21:
				ldr	w0, [x29, 308]
				cmp	w0, 1
				beq	.L22
   19             C
				mov	x18, x19
				bl	B.7695
		.LVL25:
		.L19:
				mov	x18, x19
				bl	A.7693
		.LVL28:
		.L23:
				mov	x18, x19
				bl	C.7697
		.LVL29:
   20             %IF I=1 %AND J#2 %THEN A %ELSE B
				ldr	w0, [x29, 308]
				cmp	w0, 1
				bne	.L24
   21             %IF I=1 %ANDNOT J=2 %THEN A %ELSE B
				mov	x18, x19
				bl	B.7695
		.LVL11:
				b	.L21
		.L22:
				ldr	w0, [x29, 304]
				cmp	w0, 2
				bne	.L68
		.L24:
				ldr	w0, [x29, 308]
				cmp	w0, 1
				bne	.L26
   22             C
				mov	x18, x19
				bl	B.7695
		.LVL12:
				b	.L23
		.L68:
				mov	x18, x19
				bl	A.7693
		.LVL13:
				ldr	w0, [x29, 304]
				cmp	w0, 2
				bne	.L69
		.L26:
				mov	x18, x19
				bl	C.7697
		.LVL32:
   23             %IF I=1 %OR 1<=J<=2 %THEN A %ELSE B
				b	.L25
		.L69:
				mov	x18, x19
				bl	A.7693
		.LVL14:
				ldr	w0, [x29, 308]
				cmp	w0, 1
				beq	.L28
		.LVL33:
		.LBB18:
   24             %IF I=1 %OR (1<=J %AND J<=2) %THEN A %ELSE B
				b	.L27
		.L28:
				ldr	w0, [x29, 308]
				cmp	w0, 1
				beq	.L31
   25             C
				mov	x18, x19
				bl	C.7697
		.LVL18:
		.LBB17:
				mov	x18, x19
				bl	B.7695
		.LVL30:
		.L25:
   26             %IF I=0=J %THEN A %ELSE B
				ldr	w0, [x29, 304]
				sub	w0, w0, #1
				cmp	w0, 1
				bls	.L31
		.L32:
				mov	x18, x19
				bl	B.7695
		.LVL31:
		.L27:
   27             %IF I=0 %AND J=0 %THEN A %ELSE B
				ldr	w0, [x29, 308]
				cbnz	w0, .L36
   28             C
				mov	x18, x19
				bl	A.7693
		.LVL17:
		.L33:
				ldr	w0, [x29, 304]
				cbz	w0, .L63
		.L36:
				mov	x18, x19
				bl	C.7697
		.LVL21:
		.LDL1:
   29          %REPEAT
				ldr	w0, [x29, 308]
				cbnz	w0, .L34
				ldr	w0, [x29, 304]
				sub	w0, w0, #1
				cmp	w0, 1
				bls	.L28
		.L29:
		.LBE18:
				mov	x18, x19
				bl	A.7693
		.LVL37:
   30       %REPEAT
				b	.L37
		.L13:
		.LBB19:
   31       PRINTSTRING("PART 1 OK ")
				mov	x18, x19
				bl	B.7695
		.LVL16:
				b	.L33
		.L31:
				ldr	w0, [x29, 304]
				cbz	w0, .L62
		.L34:
		.LBE17:
				add	x20, x29, 1096
				mov	x21, 256
				mov	x2, x21
				adrp	x1, .LANCHOR0
				add	x1, x1, :lo12:.LANCHOR0
				mov	x0, x20
				bl	memcpy
		.LVL38:
				add	x19, x29, 328
				mov	x2, x21
				mov	x1, x20
				mov	x0, x19
				bl	memcpy
		.LVL39:
				add	x20, x29, 840
				mov	x2, x21
				mov	x1, x19
				mov	x0, x20
				bl	memcpy
		.LVL40:
		.LBE19:
		.LBB20:
		.LBB21:
				add	x19, x29, 48
				mov	x2, x21
				mov	x1, x20
				mov	x0, x19
				bl	memcpy
		.LVL41:
				mov	x0, x19
				bl	_imp_printstring
		.LVL42:
		.LBE21:
		.LBE20:
   32       %CYCLE I=-1,1,1
				mov	x18, x19
				bl	A.7693
		.LVL15:
		.L30:
				mov	x18, x19
				bl	B.7695
		.LVL20:
		.L37:
   33          %CYCLE J=0,1,3
				mov	x18, x19
				bl	A.7693
		.LVL36:
   34             %IF I=1 %ANDNOT J#1 %THEN A %ELSE B
				b	.L35
		.L63:
   35             %IF I=1 %ANDNOT (J#1) %THEN A %ELSE B
				mov	x18, x19
				bl	B.7695
		.LVL34:
				b	.L30
		.LVL35:
		.L62:
				mov	w0, -2
				ldr	w0, [x29, 308]
				cmp	w0, 1
				beq	.L42
		.L39:
				ldr	w1, [x29, 308]
				cmp	w1, 1
				ccmp	w0, 1, 0, eq
				beq	.L71
		.L43:
				ldr	w0, [x29, 308]
				cmp	w0, 1
				bne	.L45
   36             C
				mov	x18, x19
				bl	B.7695
		.LVL19:
		.L35:
				mov	w20, -1
				add	w0, w0, 1
				str	w0, [x29, 308]
				mov	w0, w20
				b	.L57
		.L71:
				mov	x18, x19
				bl	A.7693
		.LVL43:
				ldr	w0, [x29, 304]
				cmp	w0, 3
				beq	.L70
		.L57:
				ldr	w0, [x29, 304]
				cmp	w0, 1
				beq	.L72
		.L45:
				mov	x18, x19
				bl	C.7697
		.LVL53:
   37             %IF I=1 %ORNOT 1<=J<=2 %THEN A %ELSE B
				b	.L44
		.L72:
				mov	x18, x19
				bl	A.7693
		.LVL44:
				add	w0, w0, 1
				str	w0, [x29, 304]
				ldr	w0, [x29, 308]
				cmp	w0, 1
				beq	.L47
		.LVL54:
		.LBB22:
   38             %IF I=1 %ORNOT (1<=J %AND J<=2) %THEN A %ELSE B
				b	.L46
		.LVL45:
		.L48:
				ldr	w0, [x29, 308]
				cmp	w0, 1
				beq	.L50
   39             C
				add	x19, x29, 304
				b	.L39
		.L40:
		.L70:
		.L41:
				mov	x18, x19
				bl	B.7695
		.LVL51:
		.L44:
				mov	x18, x19
				bl	C.7697
		.LVL58:
   40             %IF I=1 %AND J=2 %THEN A %ELSE B
				mov	x18, x19
				bl	B.7695
		.LVL52:
		.L46:
				ldr	w0, [x29, 304]
				sub	w0, w0, #1
				cmp	w0, 1
				bls	.L51
		.L50:
				ldr	w0, [x29, 308]
				cmp	w0, 1
				bne	.L53
   41             %IFNOT (%NOT (I=1 %AND J=2)) %THEN A %ELSE B
				ldr	w0, [x29, 304]
				cmp	w0, 2
				beq	.L73
		.L53:
				ldr	w0, [x29, 308]
				cmp	w0, 1
				bne	.L55
   42             C
				mov	x18, x19
				bl	A.7693
		.LVL48:
				mov	x18, x19
				bl	C.7697
		.LVL50:
		.LDL2:
				mov	x18, x19
				bl	A.7693
		.LVL57:
		.L52:
				ldr	w0, [x29, 304]
				cmp	w0, 2
				bne	.L55
   43          %REPEAT
				b	.L54
		.L55:
				ldr	w0, [x29, 304]
				sub	w0, w0, #1
				cmp	w0, 1
				bls	.L48
		.LVL55:
		.L47:
		.LBE22:
				mov	x18, x19
				bl	A.7693
		.LVL60:
   44       %REPEAT
				b	.L56
		.L42:
		.LBB23:
   45       PRINTSTRING("TEST OK")
				mov	x18, x19
				bl	B.7695
		.LVL47:
				b	.L52
		.L73:
				mov	x18, x19
				bl	B.7695
		.LVL59:
		.L54:
				add	x19, x29, 1096
				mov	x20, 256
				mov	x2, x20
				adrp	x1, .LANCHOR0
				add	x1, x1, :lo12:.LANCHOR0
				add	x1, x1, x20
				mov	x0, x19
				bl	memcpy
		.LVL61:
				add	x21, x29, 584
				mov	x2, x20
				mov	x1, x19
				mov	x0, x21
				bl	memcpy
		.LVL62:
				mov	x2, x20
				mov	x1, x21
				mov	x0, x19
				bl	memcpy
		.LVL63:
		.LBE23:
		.LBB24:
		.LBB25:
				add	x0, x29, 48
				mov	x2, x20
				mov	x1, x19
				mov	x19, x0
				bl	memcpy
		.LVL64:
				mov	x0, x19
				bl	_imp_printstring
		.LVL65:
		.LBE25:
		.LBE24:
		.LBB26:
		.LBB27:
				mov	w0, 0
				bl	exit
		.LVL66:
		.LBE27:
		.LBE26:
		.LFE185:
				.section	.rodata
				.align	3
				.set	.LANCHOR0,. + 0
		.LC0:
				.byte	10
				.string	"PART 1 OK "
				.zero	244
		.LC1:
				.byte	7
				.string	"TEST OK"
				.zero	247
		.Letext0:
   46 %ROUTINE A; K=K<<8!'A'; %END
				mov	x18, x19
				bl	B.7695
		.LVL49:
		.L56:
				mov	x18, x19
				bl	A.7693
		.LVL56:
		.L49:
   47 %ROUTINE B; K=K<<8!'B'; %END
   48 %ROUTINE C
				ldr	w0, [x18, 8]
				mov	w1, 65
				orr	w0, w1, w0, lsl 8
				str	w0, [x18, 8]
				stp	x29, x30, [sp, -32]!
				add	x29, sp, 0
				str	x19, [sp, 16]
				mov	x19, x18
   49       %IF K=M'AA' %OR K=M'BB' %OR K=M'AAA' %OR K=M'BBB' %THEN K=0 %ANDRETURN
				ldr	w0, [x18, 8]
				mov	w1, 66
				orr	w0, w1, w0, lsl 8
				str	w0, [x18, 8]
				ldr	w0, [x18, 8]
				mov	w1, 16962
				cmp	w0, w1
				mov	w1, 16705
				ccmp	w0, w1, 4, ne
				add	w1, w1, 4259840
				ccmp	w0, w1, 4, ne
				cset	w1, ne
				mov	x18, x19
				bl	B.7695
		.LVL46:
				b	.L49
		.L51:
   50       WRITE(I,1); WRITE(J,1); WRITE(K,1)
				ret
		.LFE186:
				.align	2
		B.7695:
		.LFB187:
				mov	w1, 1
				ldr	w0, [x18, 4]
				bl	_imp_writeint
		.LVL0:
   51       %MONITOR
				ret
		.LFE187:
				.align	2
		C.7697:
		.LFB188:
				mov	w1, 1
				ldr	w0, [x19]
				bl	_imp_writeint
		.LVL1:
   52       %STOP
				sub	w0, w0, #4341760
				subs	w0, w0, #578
				cset	w0, ne
				tst	w0, w1
				bne	.L4
		.L5:
				mov	w1, 1
				ldr	w0, [x19, 8]
				bl	_imp_writeint
		.LVL2:
		.LBB15:
		.LBB16:
				mov	w0, 0
				bl	exit
		.LVL3:
		.LBE16:
		.LBE15:
		.LFE188:
				.align	2
				.global	main
		main:
		.LFB185:
   53 %END
   54 %ENDOFPROGRAM
				str	wzr, [x18, 8]
				ret
		.L4:
   56 Statements compiled
