         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
				.option nopic
		.Ltext0:
				.align	1
				.globl	main
		main:
		.LFB185:
		.LVL0:
				add	sp,sp,-656
				sd	ra,648(sp)
				sd	s0,640(sp)
				sd	s1,632(sp)
				sd	s2,624(sp)
				sd	s3,616(sp)
				sd	s4,608(sp)
				sd	s5,600(sp)
				sd	s6,592(sp)
				sd	s7,584(sp)
				sd	s8,576(sp)
				sd	s9,568(sp)
				sd	s10,560(sp)
				sd	s11,552(sp)
				li	t1,-4096
				add	sp,sp,t1
				lui	a5,%hi(__stack_chk_guard)
				ld	a5,%lo(__stack_chk_guard)(a5)
				li	s0,4096
				add	a4,s0,536
				add	a4,a4,sp
				sd	a5,0(a4)
    2   ! It would appear that Imp and C do not store their arrays in the same x-major order.
				call	_imp_initialise
		.LVL1:
    3   %integerarray d2(0:1, 0:2)
    4   %ownintegerarray d1(0:5) = 0,1,2,3,4,5
    5   %integername d, e
    6   %integer i,j
    7   d == d2(0,0);            e == d1(0);              d = e;
    8   d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
    9   d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
				li	s5,-4096
				lui	a5,%hi(.LANCHOR0)
				addi	a5,a5,%lo(.LANCHOR0)
				lw	a4,0(a5)
				sw	a4,256(sp)
		.LVL2:
		.LBB76:
		.LBB77:
				add	s5,s5,-288
				add	a4,s0,544
				add	a4,a4,sp
				add	s5,a4,s5
		.LVL3:
		.LBE77:
		.LBE76:
   10   d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
				lw	a4,4(a5)
				sw	a4,4(s5)
   11   d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
				lw	a4,8(a5)
				sw	a4,8(s5)
   12   d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
				lw	a4,12(a5)
				sw	a4,12(s5)
   13   %for i = 0, 1, 1 %cycle
				lw	a4,16(a5)
				sw	a4,16(s5)
   14     %for j = 0, 1, 2 %cycle
				lw	a5,20(a5)
				sw	a5,20(s5)
		.LVL4:
				mv	s9,s5
				li	s8,-1
		.LBB78:
   15       printstring("d2(");write(i,0);printstring(", ");write(j,0);printstring(") = "); write(d2(i,j),0);printstring(",  ");
				lui	s4,%hi(.LANCHOR1)
				addi	s4,s4,%lo(.LANCHOR1)
				li	s1,-4096
				add	s7,sp,280
		.LBE78:
		.LBB79:
		.LBB80:
				add	s1,s1,-544
				add	a5,s0,544
				add	a5,a5,sp
				add	s1,a5,s1
		.LBE80:
		.LBE79:
		.LBB82:
				li	s3,-1
		.LVL7:
		.L2:
				li	a2,256
				mv	a1,s4
				li	s11,4096
				add	a0,s11,280
				add	a0,a0,sp
				call	memcpy
		.LVL9:
				li	a2,256
				add	a1,s11,280
				add	a1,a1,sp
				mv	a0,s7
				call	memcpy
		.LVL10:
				li	a2,256
				mv	a1,s7
				add	a0,s11,-744
				add	a0,a0,sp
				call	memcpy
		.LVL11:
		.LBE83:
		.LBB84:
		.LBB81:
				mv	s0,sp
				li	a2,256
				add	a1,s11,-744
				add	a1,a1,sp
				mv	a0,s0
				call	memcpy
		.LVL12:
				mv	a0,s1
				call	_imp_printstring
		.LVL13:
		.LBE81:
		.LBE84:
   16     %repeat
				li	a1,0
				mv	a0,s8
				call	_imp_writeint
		.LVL14:
		.LBB85:
				li	a5,1
				bne	s8,a5,.L4
		.L5:
		.LBB96:
		.LBB97:
				call	_imp_newline
		.LVL33:
		.LBE97:
		.LBE96:
				li	s7,-1
		.LBB98:
   17     newline
				add	s10,s4,256
		.LVL5:
		.L4:
		.LBE82:
				addw	s8,s8,1
		.LVL6:
				mv	s6,s5
				li	a2,256
				mv	a1,s10
				add	a0,s11,280
				add	a0,a0,sp
				call	memcpy
		.LVL15:
				add	s2,sp,536
				li	a2,256
				add	a1,s11,280
				add	a1,a1,sp
				mv	a0,s2
				call	memcpy
		.LVL16:
				li	a2,256
				mv	a1,s2
				add	a0,s11,-1000
				add	a0,a0,sp
				call	memcpy
		.LVL17:
		.LBE85:
		.LBB86:
		.LBB87:
				li	a2,256
				add	a1,s11,-1000
				add	a1,a1,sp
				mv	a0,s0
				call	memcpy
		.LVL18:
				mv	a0,s1
				call	_imp_printstring
		.LVL19:
		.LBE87:
		.LBE86:
				li	a1,0
				mv	a0,s3
				call	_imp_writeint
		.LVL20:
		.LBB88:
				li	a5,2
				bne	s3,a5,.L2
		.L3:
		.LBB94:
		.LBB95:
				call	_imp_newline
		.LVL32:
		.LDL2:
				add	s5,s5,12
		.LBE95:
		.LBE94:
   18   %repeat
				addw	s3,s3,1
		.LVL8:
		.LBB83:
   19   newline
				li	a2,256
				add	a1,s4,512
				add	a0,s11,280
				add	a0,a0,sp
				call	memcpy
		.LVL21:
				add	s2,sp,792
				li	a2,256
				add	a1,s11,280
				add	a1,a1,sp
				mv	a0,s2
				call	memcpy
		.LVL22:
				li	a2,256
				mv	a1,s2
				mv	s2,s11
				add	a0,s11,-1256
				add	a0,a0,sp
				call	memcpy
		.LVL23:
		.LBE88:
		.LBB89:
		.LBB90:
				li	a2,256
				add	a1,s11,-1256
				add	a1,a1,sp
				mv	a0,s0
				call	memcpy
		.LVL24:
				mv	a0,s1
				call	_imp_printstring
		.LVL25:
		.LBE90:
		.LBE89:
   20   %for i = 0, 1, 2 %cycle
				li	a1,0
				lw	a0,0(s6)
				call	_imp_writeint
		.LVL26:
		.LBB91:
   21     %for j = 0, 1, 1 %cycle
				li	a2,256
				add	a1,s4,768
				add	a0,s11,280
				add	a0,a0,sp
				call	memcpy
		.LVL27:
				add	s11,sp,1048
				li	a2,256
				add	a1,s2,280
				add	a1,a1,sp
				mv	a0,s11
				call	memcpy
		.LVL28:
				add	a5,sp,544
				add	s2,a5,2040
				li	a2,256
				mv	a1,s11
				mv	a0,s2
				call	memcpy
		.LVL29:
		.LBE91:
		.LBB92:
		.LBB93:
				li	a2,256
				mv	a1,s2
				mv	a0,s0
				call	memcpy
		.LVL30:
				mv	a0,s1
				call	_imp_printstring
		.LVL31:
		.LDL1:
				add	s6,s6,4
		.LBE93:
		.LBE92:
   22       printstring("d2(");write(j,0);printstring(", ");write(i,0);printstring(") = "); write(d2(j,i),0);printstring(",  ");
				li	s3,-4096
				lui	s5,%hi(.LANCHOR1)
				addi	s5,s5,%lo(.LANCHOR1)
				add	a5,sp,544
				add	s0,a5,1528
				add	s8,a5,760
		.LBE98:
		.LBB99:
		.LBB100:
				add	s3,s3,-544
				li	a5,4096
				add	a5,a5,544
				add	a5,a5,sp
				add	s3,a5,s3
		.LBE100:
		.LBE99:
		.LBB102:
				li	s4,-1
		.LVL38:
		.L6:
				li	a2,256
				mv	a1,s5
				mv	a0,s0
				call	memcpy
		.LVL40:
				li	a2,256
				mv	a1,s0
				mv	a0,s8
				call	memcpy
		.LVL41:
				li	a2,256
				mv	a1,s8
				li	s11,4096
				add	a0,s11,280
				add	a0,a0,sp
				call	memcpy
		.LVL42:
		.LBE105:
		.LBB106:
		.LBB101:
				mv	s1,sp
				li	a2,256
				add	a1,s11,280
				add	a1,a1,sp
				mv	a0,s1
				call	memcpy
		.LVL43:
				mv	a0,s3
				call	_imp_printstring
		.LVL44:
		.LBE101:
		.LBE106:
   23     %repeat
				li	a5,2
				beq	s7,a5,.L16
		.L8:
		.LVL36:
				addw	s7,s7,1
		.LVL37:
				mv	s6,s9
				li	a1,0
				mv	a0,s4
				call	_imp_writeint
		.LVL45:
		.LBB107:
   24     newline
				add	s10,s5,256
				j	.L8
		.LVL34:
		.L17:
		.L7:
		.LBE102:
		.LBB103:
		.LBB104:
				call	_imp_newline
		.LVL35:
		.LDL3:
				add	s9,s9,4
		.LBE104:
		.LBE103:
				li	a2,256
				mv	a1,s10
				mv	a0,s0
				call	memcpy
		.LVL46:
				add	s2,sp,1560
				li	a2,256
				mv	a1,s0
				mv	a0,s2
				call	memcpy
		.LVL47:
				li	a2,256
				mv	a1,s2
				add	a0,s11,24
				add	a0,a0,sp
				call	memcpy
		.LVL48:
		.LBE107:
		.LBB108:
		.LBB109:
				li	a2,256
				add	a1,s11,24
				add	a1,a1,sp
				mv	a0,s1
				call	memcpy
		.LVL49:
				mv	a0,s3
				call	_imp_printstring
		.LVL50:
		.LBE109:
		.LBE108:
				li	a1,0
				mv	a0,s7
				call	_imp_writeint
		.LVL51:
		.LBB110:
				li	a5,1
				bne	s4,a5,.L6
   25   %repeat
				addw	s4,s4,1
		.LVL39:
		.LBB105:
   26   newline
				li	a2,256
				add	a1,s5,512
				mv	a0,s0
				call	memcpy
		.LVL52:
				add	s2,sp,1816
				li	a2,256
				mv	a1,s0
				mv	a0,s2
				call	memcpy
		.LVL53:
				li	a2,256
				mv	a1,s2
				add	a0,s11,-232
				add	a0,a0,sp
				call	memcpy
		.LVL54:
		.LBE110:
		.LBB111:
		.LBB112:
				li	a2,256
				add	a1,s11,-232
				add	a1,a1,sp
				mv	a0,s1
				call	memcpy
		.LVL55:
				mv	a0,s3
				call	_imp_printstring
		.LVL56:
		.LBE112:
		.LBE111:
				j	.L17
		.L16:
		.L9:
		.LBB116:
		.LBB117:
				call	_imp_newline
		.LVL63:
		.LBE117:
		.LBE116:
		.LBB118:
		.LBB119:
				li	a0,0
				call	exit
		.LVL64:
		.LBE119:
		.LBE118:
		.LFE185:
				.section	.rodata
				.align	3
				.set	.LANCHOR1,. + 0
		.LC0:
				.byte	3
				.string	"d2("
				.zero	251
		.LC1:
				.byte	2
				.string	", "
				.zero	252
		.LC2:
				.byte	4
				.string	") = "
				.zero	250
		.LC3:
				.byte	3
				.string	",  "
				.zero	251
				.data
				.align	3
				.set	.LANCHOR0,. + 0
		D1.6002:
				.word	0
				.word	1
				.word	2
				.word	3
				.word	4
				.word	5
		.Letext0:
   27 %endofprogram
				li	a1,0
				lw	a0,0(s6)
				call	_imp_writeint
		.LVL57:
		.LBB113:
   50 Statements compiled
				li	a2,256
				add	a1,s5,768
				mv	a0,s0
				call	memcpy
		.LVL58:
				add	a5,sp,544
				add	s2,a5,1784
				li	a2,256
				mv	a1,s0
				mv	a0,s2
				call	memcpy
		.LVL59:
				li	a2,256
				mv	a1,s2
				add	a0,s11,-488
				add	a0,a0,sp
				call	memcpy
		.LVL60:
		.LBE113:
		.LBB114:
		.LBB115:
				li	a2,256
				add	a1,s11,-488
				add	a1,a1,sp
				mv	a0,s1
				call	memcpy
		.LVL61:
				mv	a0,s3
				call	_imp_printstring
		.LVL62:
		.LDL4:
				add	s6,s6,12
		.LBE115:
		.LBE114:
