         Edinburgh IMP77 Compiler - Version 8.4
    1 %BEGIN
		.Ltext0:
				.align	2
				.global	main
		main:
		.LFB185:
		.LVL0:
				sub	sp, sp, #848
				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, 840]
				mov	x3,0
    2
				bl	_imp_initialise
		.LVL1:
    3 !
    4 ! TEST A MAP USE THAT IS DIFFICULT TO OPTIMISE
    5 !
    6 %RECORDFORMAT F(%INTEGER I,J,K,%BYTEARRAY VOL(1:5),
    7       %BYTE B,%BYTEARRAY LAB(1:3))
    8 %INTEGER I,J
    9 %RECORD(F) SP
   10 %RECORD(F)%NAME R
   11       R==SP
   12       R=0
				stp	xzr, xzr, [x29, 304]
				str	xzr, [x29, 320]
   13       R_VOL(1)='A'
				mov	w0, 65
				strb	w0, [x29, 316]
   14       R_VOL(2)='B'
				mov	w0, 66
				strb	w0, [x29, 317]
   15       R_VOL(3)='C'
				mov	w0, 67
				strb	w0, [x29, 318]
   16       R_VOL(4)='D'
				mov	w0, 68
				strb	w0, [x29, 319]
   17       R_VOL(5)='E'
				mov	w0, 69
				strb	w0, [x29, 320]
		.LVL2:
				add	x0, x29, 306
				add	x2, x29, 311
		.LVL3:
		.L2:
   18       %FOR I=1,1,5 %CYCLE
   19          BYTEINTEGER(ADDR(R_I)+1+I)=R_VOL(I)
				ldrb	w1, [x0, 10]
				strb	w1, [x0], 1
		.LVL4:
		.LDL1:
   20       %REPEAT
   21       I=ADDR(R_VOL(5))
				cmp	x0, x2
				bne	.L2
		.L3:
		.LBB22:
		.LBB23:
				add	x3, x29, 320
		.LVL5:
		.LBE23:
		.LBE22:
		.LBB24:
		.LBB25:
				add	x1, x29, 322
		.LVL6:
		.LBE25:
		.LBE24:
   22       J=ADDR(R_LAB(1))
   23       %IF R_I=M'AB' %AND R_J=M'CDE'<<8 %AND J-I=2 %THEN %c
				ldr	w0, [x29, 304]
				mov	w2, 16706
				cmp	w0, w2
				beq	.L9
		.L4:
   24          PRINTSTRING("TEST OK (Unswopped)") %AND %STOP
				mov	w2, 17664
				movk	w2, 0x4344, lsl 16
				ldr	w4, [x29, 308]
				cmp	w4, w2
				bne	.L5
   25       %if R_I=M'BA'<<16 %and R_j=M'EDC' %and J-I=2 %then %C
				mov	w2, 1111556096
				cmp	w0, w2
				bne	.L5
				sub	w1, w1, w3
		.LVL11:
				cmp	w1, 2
				bne	.L5
		.LBB28:
   26          PRINTSTRING("TEST OK (Swopped)") %and %stop
				mov	w2, 17475
				movk	w2, 0x45, lsl 16
				ldr	w4, [x29, 308]
				cmp	w4, w2
				beq	.L10
		.LVL7:
		.L5:
				add	x19, x29, 584
				mov	x20, 256
				mov	x2, x20
				adrp	x1, .LANCHOR0
				add	x1, x1, :lo12:.LANCHOR0
				mov	x0, x19
				bl	memcpy
		.LVL12:
				add	x21, x29, 328
				mov	x2, x20
				mov	x1, x19
				mov	x0, x21
				bl	memcpy
		.LVL13:
				mov	x2, x20
				mov	x1, x21
				mov	x0, x19
				bl	memcpy
		.LVL14:
		.LBE28:
		.LBB29:
		.LBB30:
				add	x0, x29, 48
				mov	x2, x20
				mov	x1, x19
				mov	x19, x0
				bl	memcpy
		.LVL15:
				mov	x0, x19
				bl	_imp_printstring
		.LVL16:
		.LBE30:
		.LBE29:
		.LBB31:
		.LBB32:
				mov	w0, 0
				bl	exit
		.LVL17:
		.L10:
		.LBE32:
		.LBE31:
   27       WRITE(R_I,5)
				mov	w1, 5
				bl	_imp_writeint
		.LVL8:
				sub	w1, w1, w3
		.LVL18:
				cmp	w1, 2
				bne	.L5
		.LBB33:
				add	x19, x29, 584
				mov	x20, 256
				mov	x2, x20
				adrp	x1, .LANCHOR0
				add	x1, x1, :lo12:.LANCHOR0
				add	x1, x1, x20
				mov	x0, x19
				bl	memcpy
		.LVL19:
				add	x21, x29, 328
				mov	x2, x20
				mov	x1, x19
				mov	x0, x21
				bl	memcpy
		.LVL20:
				mov	x2, x20
				mov	x1, x21
				mov	x0, x19
				bl	memcpy
		.LVL21:
		.LBE33:
		.LBB34:
		.LBB35:
				add	x0, x29, 48
				mov	x2, x20
				mov	x1, x19
				mov	x19, x0
				bl	memcpy
		.LVL22:
				mov	x0, x19
				bl	_imp_printstring
		.LVL23:
		.LBE35:
		.LBE34:
		.LBB36:
		.LBB37:
				mov	w0, 0
				bl	exit
		.LVL24:
		.LBE37:
		.LBE36:
		.LFE185:
				.section	.rodata
				.align	3
				.set	.LANCHOR0,. + 0
		.LC0:
				.byte	19
				.string	"TEST OK (Unswopped)"
				.zero	235
		.LC1:
				.byte	17
				.string	"TEST OK (Swopped)"
				.zero	237
		.Letext0:
   28       WRITE(R_J,5)
				mov	w1, 5
				ldr	w0, [x29, 308]
				bl	_imp_writeint
		.LVL9:
		.LBB26:
		.LBB27:
				mov	w0, 0
				bl	exit
		.LVL10:
		.L9:
		.LBE27:
		.LBE26:
   29 %ENDOFPROGRAM
   22 Statements compiled
