         Edinburgh IMP77 Compiler - Version 8.4
    1 %BEGIN
				.option nopic
		.Ltext0:
				.align	1
				.globl	main
		main:
		.LFB185:
		.LVL0:
				add	sp,sp,-816
				sd	ra,808(sp)
				lui	a5,%hi(__stack_chk_guard)
				ld	a5,%lo(__stack_chk_guard)(a5)
				sd	a5,792(sp)
    2
				call	_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
				sd	zero,256(sp)
				sd	zero,264(sp)
				sd	zero,272(sp)
   13       R_VOL(1)='A'
				li	a5,65
				sb	a5,268(sp)
   14       R_VOL(2)='B'
				li	a5,66
				sb	a5,269(sp)
   15       R_VOL(3)='C'
				li	a5,67
				sb	a5,270(sp)
   16       R_VOL(4)='D'
				li	a5,68
				sb	a5,271(sp)
   17       R_VOL(5)='E'
				li	a5,69
				sb	a5,272(sp)
		.LVL2:
				add	a5,sp,258
				add	a3,sp,263
		.LVL3:
		.L2:
   18       %FOR I=1,1,5 %CYCLE
   19          BYTEINTEGER(ADDR(R_I)+1+I)=R_VOL(I)
				lbu	a4,10(a5)
				sb	a4,0(a5)
		.LDL1:
				add	a5,a5,1
		.LVL4:
   20       %REPEAT
   21       I=ADDR(R_VOL(5))
				bne	a5,a3,.L2
		.L3:
				add	a5,sp,800
				addw	a3,a5,-528
		.LVL5:
   22       J=ADDR(R_LAB(1))
				addw	a4,a5,-526
		.LVL6:
   23       %IF R_I=M'AB' %AND R_J=M'CDE'<<8 %AND J-I=2 %THEN %c
				lw	a0,256(sp)
				li	a5,16384
				add	a5,a5,322
				beq	a0,a5,.L9
		.L4:
   24          PRINTSTRING("TEST OK (Unswopped)") %AND %STOP
				lw	a2,260(sp)
				li	a5,1128546304
				add	a5,a5,1280
				bne	a2,a5,.L5
   25       %if R_I=M'BA'<<16 %and R_j=M'EDC' %and J-I=2 %then %C
				li	a5,1111556096
				bne	a0,a5,.L5
				subw	a4,a4,a3
		.LVL11:
				li	a5,2
				bne	a4,a5,.L5
		.LBB24:
   26          PRINTSTRING("TEST OK (Swopped)") %and %stop
				lw	a2,260(sp)
				li	a5,4538368
				add	a5,a5,1091
				beq	a2,a5,.L10
		.LVL7:
		.L5:
				li	a2,256
				lui	a1,%hi(.LANCHOR0)
				addi	a1,a1,%lo(.LANCHOR0)
				add	a0,sp,536
				call	memcpy
		.LVL12:
				li	a2,256
				add	a1,sp,536
				add	a0,sp,280
				call	memcpy
		.LVL13:
				li	a2,256
				add	a1,sp,280
				add	a0,sp,536
				call	memcpy
		.LVL14:
		.LBE24:
		.LBB25:
		.LBB26:
				li	a2,256
				add	a1,sp,536
				mv	a0,sp
				call	memcpy
		.LVL15:
				mv	a0,sp
				call	_imp_printstring
		.LVL16:
		.LBE26:
		.LBE25:
		.LBB27:
		.LBB28:
				li	a0,0
				call	exit
		.LVL17:
		.L10:
		.LBE28:
		.LBE27:
   27       WRITE(R_I,5)
				li	a1,5
				call	_imp_writeint
		.LVL8:
				subw	a4,a4,a3
		.LVL18:
				li	a5,2
				bne	a4,a5,.L5
		.LBB29:
				li	a2,256
				lui	a1,%hi(.LANCHOR0+256)
				addi	a1,a1,%lo(.LANCHOR0+256)
				add	a0,sp,536
				call	memcpy
		.LVL19:
				li	a2,256
				add	a1,sp,536
				add	a0,sp,280
				call	memcpy
		.LVL20:
				li	a2,256
				add	a1,sp,280
				add	a0,sp,536
				call	memcpy
		.LVL21:
		.LBE29:
		.LBB30:
		.LBB31:
				li	a2,256
				add	a1,sp,536
				mv	a0,sp
				call	memcpy
		.LVL22:
				mv	a0,sp
				call	_imp_printstring
		.LVL23:
		.LBE31:
		.LBE30:
		.LBB32:
		.LBB33:
				li	a0,0
				call	exit
		.LVL24:
		.LBE33:
		.LBE32:
		.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)
				li	a1,5
				lw	a0,260(sp)
				call	_imp_writeint
		.LVL9:
		.LBB22:
		.LBB23:
				li	a0,0
				call	exit
		.LVL10:
		.L9:
		.LBE23:
		.LBE22:
   29 %ENDOFPROGRAM
   22 Statements compiled
