         Edinburgh IMP77 Compiler - Version 8.4
    1 %BEGIN
		.Ltext0:
				.align	1
				.global	main
				.thumb
				.thumb_func
		main:
		.LFB185:
				@ args = 0, pretend = 0, frame = 544
				@ frame_needed = 0, uses_anonymous_args = 0
		.LVL0:
				push	{r4, r5, r6, lr}
				sub	sp, sp, #784
				ldr	r3, .L11
		.LPIC8:
				add	r3, pc
				ldr	r2, .L11+4
				ldr	r3, [r3, r2]
				ldr	r3, [r3]
				str	r3, [sp, #780]
    2
				bl	_imp_initialise(PLT)
		.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
				movs	r2, #0
				str	r2, [sp, #244]
				str	r2, [sp, #248]
				str	r2, [sp, #252]
				str	r2, [sp, #260]
				str	r2, [sp, #264]
   13       R_VOL(1)='A'
				movs	r2, #65
				strb	r2, [sp, #256]
   14       R_VOL(2)='B'
				movs	r2, #66
				strb	r2, [sp, #257]
   15       R_VOL(3)='C'
				movs	r2, #67
				strb	r2, [sp, #258]
   16       R_VOL(4)='D'
				movs	r2, #68
				strb	r2, [sp, #259]
   17       R_VOL(5)='E'
				movs	r2, #69
				strb	r2, [sp, #260]
		.LVL2:
				add	r3, sp, #245
				add	r1, sp, #250
		.LVL3:
		.L2:
   18       %FOR I=1,1,5 %CYCLE
   19          BYTEINTEGER(ADDR(R_I)+1+I)=R_VOL(I)
				ldrb	r2, [r3, #11]	@ zero_extendqisi2
				strb	r2, [r3, #1]!
		.LVL4:
		.LDL1:
   20       %REPEAT
   21       I=ADDR(R_VOL(5))
				cmp	r3, r1
				bne	.L2
		.L3:
		.LVL5:
   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	r0, [sp, #244]
				movw	r3, #16706
				cmp	r0, r3
				beq	.L9
		.L4:
   24          PRINTSTRING("TEST OK (Unswopped)") %AND %STOP
				mov	r3, #17664
				movt	r3, 17220
				ldr	r2, [sp, #248]
				cmp	r2, r3
				bne	.L5
		.LBB24:
   25       %if R_I=M'BA'<<16 %and R_j=M'EDC' %and J-I=2 %then %C
				movs	r3, #0
				movt	r3, 16961
				cmp	r0, r3
				bne	.L5
   26          PRINTSTRING("TEST OK (Swopped)") %and %stop
				movw	r3, #17475
				movt	r3, 69
				ldr	r2, [sp, #248]
				cmp	r2, r3
				beq	.L10
		.L5:
				mov	r6, #256
				mov	r2, r6
				ldr	r1, .L11+8
		.LPIC9:
				add	r1, pc
				add	r4, sp, #524
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL9:
				mov	r2, r6
				mov	r1, r4
				add	r5, sp, #268
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL10:
				mov	r2, r6
				mov	r1, r5
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL11:
		.LBE24:
		.LBB25:
		.LBB26:
				movs	r2, #240
				add	r1, sp, #540
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL12:
				ldm	r4, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL13:
		.LBE26:
		.LBE25:
		.LBB27:
		.LBB28:
				movs	r0, #0
				bl	exit(PLT)
		.LVL14:
		.L10:
		.LBE28:
		.LBE27:
		.LBB29:
				mov	r6, #256
				mov	r2, r6
				ldr	r1, .L11+12
		.LPIC10:
				add	r1, pc
				add	r1, r1, r6
				add	r4, sp, #524
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL15:
				mov	r2, r6
				mov	r1, r4
				add	r5, sp, #268
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL16:
				mov	r2, r6
				mov	r1, r5
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL17:
		.LBE29:
		.LBB30:
		.LBB31:
				movs	r2, #240
				add	r1, sp, #540
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL18:
				ldm	r4, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL19:
		.LBE31:
		.LBE30:
		.LBB32:
		.LBB33:
				movs	r0, #0
				bl	exit(PLT)
		.LVL20:
		.L12:
				.align	2
		.L11:
				.word	_GLOBAL_OFFSET_TABLE_-(.LPIC8+4)
				.word	__stack_chk_guard(GOT)
				.word	.LANCHOR0-(.LPIC9+4)
				.word	.LANCHOR0-(.LPIC10+4)
		.LBE33:
		.LBE32:
		.LFE185:
				.section	.rodata
				.align	2
				.set	.LANCHOR0,. + 0
		.LC0:
				.byte	19
				.ascii	"TEST OK (Unswopped)\000"
				.space	235
		.LC1:
				.byte	17
				.ascii	"TEST OK (Swopped)\000"
				.space	237
		.Letext0:
   27       WRITE(R_I,5)
				movs	r1, #5
				bl	_imp_writeint(PLT)
		.LVL6:
   28       WRITE(R_J,5)
				movs	r1, #5
				ldr	r0, [sp, #248]
				bl	_imp_writeint(PLT)
		.LVL7:
		.LBB22:
		.LBB23:
				movs	r0, #0
				bl	exit(PLT)
		.LVL8:
		.L9:
		.LBE23:
		.LBE22:
   29 %ENDOFPROGRAM
   22 Statements compiled
