         Edinburgh IMP77 Compiler - Version 8.4
    1 %BEGIN
		.Ltext0:
				.align	2
				.global	main
		main:
		.LFB185:
		.LVL0:
				sub	sp, sp, #1344
				stp	x29, x30, [sp]
				add	x29, sp, 0
				stp	x19, x20, [sp, 16]
				stp	x21, x22, [sp, 32]
				adrp	x2, :got:__stack_chk_guard
				ldr	x2, [x2, #:got_lo12:__stack_chk_guard]
				ldr	x3, [x2]
				str	x3, [x29, 1336]
				mov	x3,0
    2 !***********************************************************************
				bl	_imp_initialise
		.LVL1:
		.LDL1:
		.LDL2:
		.LDL3:
		.LDL4:
		.LDL5:
		.LDL6:
		.LDL7:
		.LDL8:
		.LDL9:
		.LDL10:
		.LDL11:
		.LDL12:
		.LDL13:
		.LDL14:
		.LDL15:
		.LDL16:
		.LDL17:
		.LDL18:
		.LDL19:
		.LDL20:
				adrp	x3, .LANCHOR0
				add	x3, x3, :lo12:.LANCHOR0
				add	x1, x3, 1
				add	x3, x3, 17
				mov	w19, 4003
				b	.L2
		.LVL2:
		.L4:
				add	x1, x1, 1
		.LVL3:
		.L2:
    3 !*    SHOULD RUN WITHOUT OPUT. LOOPS ON SOME COMPILERS DUE TO          *
    4 !*    MISSING LABELS GIVING JUMPS WITH ZERO OFFSET                     *
    5 !***********************************************************************
    6 %OWNBYTEINTEGERARRAY CH(0:16)='0','1','2','3','4','5','6','7','8',
    7       '9','A','B','C','D','E','F','G'
    8 %INTEGER I,K,L
    9 %CONSTINTEGER J=0
   10       I=4000; L=10
   11       %IF I>4095 %AND J#0 %THEN I=I+1
   12       %IF I>4095 %AND J#0 %THEN I=I+1 %ELSE I=I-1
   13       %IF I>4095 %AND J#0 %THEN %START; %FINISH
   14       %IF I>4095 %AND J#0 %THEN %START
   15          I=I+1
   16       %FINISH %ELSE I=I-1
   17       %IF (I>4095 %AND J#0 ) %AND L=1 %THEN I=I+1
   18       %IF (I>4095 %AND J#0) %OR L=1 %THEN I=I+1
   19       %UNLESS I>4095 %AND J#0 %THEN I=I+1
   20       %UNLESS I>4095 %AND J#0 %THEN I=I+1 %ELSE I=I-1
   21       %UNLESS I>4095 %AND J#0 %THEN %START; %FINISH
   22       %UNLESS I>4095 %AND J#0 %THEN %START
   23          I=I+1
   24       %FINISH %ELSE I=I-1
   25       %UNLESS (I>4095 %AND J#0 ) %AND L=1 %THEN I=I+1
   26       %UNLESS (I>4095 %AND J#0) %OR L=1 %THEN I=I+1
   27        %FOR K=0,1,16 %CYCLE
   28          %UNLESS '0'<=CH(K)<='9' %OR 'A'<=CH(K)<='F' %THEN I=I+1
   29       %REPEAT
   30       %IF I=4004 %THEN PRINTSTRING("TEST OK") %ELSE %C
				cmp	x3, x1
				beq	.L3
		.LVL4:
		.LBB12:
				cmp	w19, 4004
				beq	.L11
		.L7:
		.LBB14:
				add	x20, x29, 1080
				mov	x21, 256
				mov	x2, x21
				adrp	x1, .LANCHOR0
		.LVL11:
				add	x1, x1, :lo12:.LANCHOR0
				add	x1, x1, 280
				mov	x0, x20
				bl	memcpy
		.LVL12:
				add	x22, x29, 568
				mov	x2, x21
				mov	x1, x20
				mov	x0, x22
				bl	memcpy
		.LVL13:
				mov	x2, x21
				mov	x1, x22
				mov	x0, x20
				bl	memcpy
		.LVL14:
		.LBE14:
		.LBB15:
		.LBB16:
				add	x0, x29, 48
				mov	x2, x21
				mov	x1, x20
				mov	x20, x0
				bl	memcpy
		.LVL15:
				mov	x0, x20
				bl	_imp_printstring
		.LVL16:
		.LBE16:
		.LBE15:
				mov	w1, 5
				mov	w0, w19
				bl	_imp_writeint
		.LVL17:
		.L8:
		.LBB17:
		.LBB18:
				mov	w0, 0
				bl	exit
		.LVL18:
		.L11:
		.LBE18:
		.LBE17:
		.LBB19:
   31          PRINTSTRING("WRONG ANSWERS") %AND WRITE(I,5)
				ldrb	w0, [x1]
		.LVL5:
				add	x20, x29, 1080
				mov	x21, 256
				mov	x2, x21
				adrp	x1, .LANCHOR0
		.LVL19:
				add	x1, x1, :lo12:.LANCHOR0
				add	x1, x1, 24
				mov	x0, x20
				bl	memcpy
		.LVL20:
				add	x19, x29, 312
		.LVL21:
				mov	x2, x21
				mov	x1, x20
				mov	x0, x19
				bl	memcpy
		.LVL22:
				add	x20, x29, 824
				mov	x2, x21
				mov	x1, x19
				mov	x0, x20
				bl	memcpy
		.LVL23:
		.LBE19:
		.LBB20:
		.LBB21:
				add	x19, x29, 48
				mov	x2, x21
				mov	x1, x20
				mov	x0, x19
				bl	memcpy
		.LVL24:
				mov	x0, x19
				bl	_imp_printstring
		.LVL25:
				b	.L8
		.LBE21:
		.LBE20:
		.LFE185:
				.section	.rodata
				.align	3
				.set	.LANCHOR0,. + 0
		CH.7689:
				.byte	48
				.byte	49
				.byte	50
				.byte	51
				.byte	52
				.byte	53
				.byte	54
				.byte	55
				.byte	56
				.byte	57
				.byte	65
				.byte	66
				.byte	67
				.byte	68
				.byte	69
				.byte	70
				.byte	71
				.zero	7
		.LC0:
				.byte	7
				.string	"TEST OK"
				.zero	247
		.LC1:
				.byte	13
				.string	"WRONG ANSWERS"
				.zero	241
		.Letext0:
   32 %ENDOFPROGRAM
   29 Statements compiled
				sub	w2, w0, #48
				and	w2, w2, 255
				cmp	w2, 9
				bls	.L4
		.L5:
		.LVL6:
		.LBE12:
		.LBB13:
				sub	w0, w0, #65
		.LVL7:
				and	w0, w0, 255
		.LVL8:
		.LBE13:
				cmp	w0, 5
				cinc	w19, w19, hi
		.LVL9:
				b	.L4
		.L6:
		.LVL10:
		.L3:
