         Edinburgh IMP77 Compiler - Version 8.4
    1 %BEGIN
				NO_APP
		.Ltext0:
				.section	.rodata
		.LC0:
		 		.byte	19
		 		.string	"TEST OK (Unswopped)"
		 		.zero	235
		.LC1:
		 		.byte	17
		 		.string	"TEST OK (Swopped)"
		 		.zero	237
				.align	2
				.globl	main
		main:
		.LFB185:
		.LVL0:
		 		link.w %fp,#-536
		 		movem.l #14368,-(%sp)
    2
		 		move.l 12(%fp),-(%sp)
		 		move.l 8(%fp),-(%sp)
		 		jsr _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
		 		clr.l -22(%fp)
		 		clr.l -18(%fp)
		 		clr.l -14(%fp)
		 		clr.l -6(%fp)
		 		clr.w -2(%fp)
   13       R_VOL(1)='A'
		 		move.b #65,-10(%fp)
   14       R_VOL(2)='B'
		 		move.b #66,-9(%fp)
   15       R_VOL(3)='C'
		 		move.b #67,-8(%fp)
   16       R_VOL(4)='D'
		 		move.b #68,-7(%fp)
   17       R_VOL(5)='E'
		 		move.b #69,-6(%fp)
		.LVL2:
		 		lea (-20,%fp),%a0
		 		lea (-15,%fp),%a1
		 		addq.l #8,%sp
		.LVL3:
		.L2:
   18       %FOR I=1,1,5 %CYCLE
   19          BYTEINTEGER(ADDR(R_I)+1+I)=R_VOL(I)
		 		move.b 10(%a0),(%a0)
		 		addq.l #1,%a0
		.LVL4:
		.LDL1:
   20       %REPEAT
   21       I=ADDR(R_VOL(5))
		 		cmp.l %a0,%a1
		 		jne .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
		 		move.l -22(%fp),%d0
		 		cmp.l #16706,%d0
		 		jeq .L7
		.L4:
   24          PRINTSTRING("TEST OK (Unswopped)") %AND %STOP
		 		cmp.l #1128547584,-18(%fp)
		 		jne .L5
		.LBB24:
   25       %if R_I=M'BA'<<16 %and R_j=M'EDC' %and J-I=2 %then %C
		 		cmp.l #1111556096,%d0
		 		jne .L5
   26          PRINTSTRING("TEST OK (Swopped)") %and %stop
		 		cmp.l #4539459,-18(%fp)
		 		jeq .L8
		.L5:
		 		move.l %fp,%d2
		.LVL9:
		 		add.l #-278,%d2
		.LVL10:
		 		move.l #256,%d3
		 		move.l %d3,-(%sp)
		 		pea .LC0
		 		move.l %d2,-(%sp)
		 		lea memcpy,%a2
		 		jsr (%a2)
		.LVL11:
		 		move.l %fp,%d4
		.LVL12:
		 		add.l #-534,%d4
		.LVL13:
		 		move.l %d3,-(%sp)
		 		move.l %d2,-(%sp)
		 		move.l %d4,-(%sp)
		 		jsr (%a2)
		.LVL14:
		 		move.l %d3,-(%sp)
		 		move.l %d4,-(%sp)
		 		move.l %d2,-(%sp)
		 		jsr (%a2)
		.LVL15:
		.LBE24:
		.LBB25:
		.LBB26:
		 		lea (-220,%sp),%sp
		 		move.l %sp,%d0
		 		move.l %d3,-(%sp)
		 		move.l %d2,-(%sp)
		 		move.l %d0,-(%sp)
		 		jsr (%a2)
		.LVL16:
		 		lea (12,%sp),%sp
		 		jsr _imp_printstring
		.LVL17:
		.LBE26:
		.LBE25:
		.LBB27:
		.LBB28:
		 		add.l %d3,%sp
		 		clr.l -(%sp)
		 		jsr exit
		.LVL18:
		.L8:
		.LBE28:
		.LBE27:
		.LBB29:
		 		move.l %fp,%d2
		.LVL19:
		 		add.l #-278,%d2
		.LVL20:
		 		move.l #256,%d3
		 		move.l %d3,-(%sp)
		 		pea .LC1
		 		move.l %d2,-(%sp)
		 		lea memcpy,%a2
		 		jsr (%a2)
		.LVL21:
		 		move.l %fp,%d4
		.LVL22:
		 		add.l #-534,%d4
		.LVL23:
		 		move.l %d3,-(%sp)
		 		move.l %d2,-(%sp)
		 		move.l %d4,-(%sp)
		 		jsr (%a2)
		.LVL24:
		 		move.l %d3,-(%sp)
		 		move.l %d4,-(%sp)
		 		move.l %d2,-(%sp)
		 		jsr (%a2)
		.LVL25:
		.LBE29:
		.LBB30:
		.LBB31:
		 		lea (-220,%sp),%sp
		 		move.l %sp,%d0
		 		move.l %d3,-(%sp)
		 		move.l %d2,-(%sp)
		 		move.l %d0,-(%sp)
		 		jsr (%a2)
		.LVL26:
		 		lea (12,%sp),%sp
		 		jsr _imp_printstring
		.LVL27:
		.LBE31:
		.LBE30:
		.LBB32:
		.LBB33:
		 		add.l %d3,%sp
		 		clr.l -(%sp)
		 		jsr exit
		.LVL28:
		.LBE33:
		.LBE32:
		.LFE185:
		.Letext0:
   27       WRITE(R_I,5)
		 		pea 5.w
		 		move.l %d0,-(%sp)
		 		lea _imp_writeint,%a2
		 		jsr (%a2)
		.LVL6:
   28       WRITE(R_J,5)
		 		pea 5.w
		 		move.l -18(%fp),-(%sp)
		 		jsr (%a2)
		.LVL7:
		.LBB22:
		.LBB23:
		 		clr.l -(%sp)
		 		jsr exit
		.LVL8:
		.L7:
		.LBE23:
		.LBE22:
   29 %ENDOFPROGRAM
   22 Statements compiled
