         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
		.Ltext0:
				.align	1
				.global	main
				.thumb
				.thumb_func
		main:
		.LFB185:
				@ args = 0, pretend = 0, frame = 4400
				@ frame_needed = 0, uses_anonymous_args = 0
		.LVL0:
				push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
				sub	sp, sp, #4640
				sub	sp, sp, #4
				ldr	r3, .L18
		.LPIC8:
				add	r3, pc
				ldr	r2, .L18+4
				ldr	r3, [r3, r2]
				ldr	r3, [r3]
				add	r2, sp, #4608
				adds	r2, r2, #28
				str	r3, [r2]
    2   ! It would appear that Imp and C do not store their arrays in the same x-major order.
				bl	_imp_initialise(PLT)
		.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
				ldr	r3, .L18+8
		.LPIC9:
				add	r3, pc
				ldr	r0, [r3]
				str	r0, [sp, #260]
		.LVL2:
   10   d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
				ldr	r0, [r3, #4]
				str	r0, [sp, #264]
   11   d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
				ldr	r0, [r3, #8]
				str	r0, [sp, #268]
   12   d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
				ldr	r0, [r3, #12]
				str	r0, [sp, #272]
   13   %for i = 0, 1, 1 %cycle
				ldr	r0, [r3, #16]
				str	r0, [sp, #276]
   14     %for j = 0, 1, 2 %cycle
				ldr	r3, [r3, #20]
				str	r3, [sp, #280]
		.LVL3:
				add	r3, sp, #256
				str	r3, [sp, #244]
				mov	r10, #-1
		.LBB76:
   15       printstring("d2(");write(i,0);printstring(", ");write(j,0);printstring(") = "); write(d2(i,j),0);printstring(",  ");
				ldr	r9, .L18+12
		.LPIC11:
				add	r9, pc
		.LBE76:
		.LBB77:
				add	r3, sp, #284
				str	r3, [sp, #248]
		.LVL4:
		.L4:
		.LBE78:
				add	r10, r10, #1
		.LVL5:
				ldr	fp, [sp, #244]
				mov	r8, #-1
		.LVL6:
		.L2:
				mov	r4, #256
				mov	r2, r4
				mov	r1, r9
				add	r5, sp, #4352
				adds	r5, r5, #28
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL8:
				mov	r2, r4
				mov	r1, r5
				ldr	r6, [sp, #248]
				mov	r0, r6
				bl	memcpy(PLT)
		.LVL9:
				mov	r2, r4
				mov	r1, r6
				addw	r7, sp, #3356
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL10:
		.LBE79:
		.LBB80:
		.LBB81:
				movs	r6, #240
				mov	r2, r6
				addw	r1, sp, #3372
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL11:
				ldm	r7, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL12:
		.LBE81:
		.LBE80:
   16     %repeat
				movs	r1, #0
				mov	r0, r10
				bl	_imp_writeint(PLT)
		.LVL13:
		.LBB82:
				cmp	r10, #1
				bne	.L4
		.L5:
		.LBB93:
		.LBB94:
				bl	_imp_newline(PLT)
		.LVL32:
		.LBE94:
		.LBE93:
				mov	r9, #-1
				add	r3, sp, #260
				str	r3, [sp, #248]
		.LBB95:
   17     newline
				add	r3, r9, #256
				str	r3, [sp, #252]
		.LBE77:
		.LBB78:
				mov	r2, r4
				ldr	r1, [sp, #252]
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL14:
				mov	r2, r4
				mov	r1, r5
				add	r7, sp, #540
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL15:
				mov	r2, r4
				mov	r1, r7
				addw	r7, sp, #3100
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL16:
		.LBE82:
		.LBB83:
		.LBB84:
				mov	r2, r6
				addw	r1, sp, #3116
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL17:
				ldm	r7, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL18:
		.LBE84:
		.LBE83:
				movs	r1, #0
				mov	r0, r8
				bl	_imp_writeint(PLT)
		.LVL19:
		.LBB85:
				cmp	r8, #2
				bne	.L2
		.L3:
		.LBB91:
		.LBB92:
				bl	_imp_newline(PLT)
		.LVL31:
		.LDL2:
				ldr	r3, [sp, #244]
				adds	r3, r3, #12
				str	r3, [sp, #244]
		.LBE92:
		.LBE91:
   18   %repeat
				add	r8, r8, #1
		.LVL7:
		.LBB79:
   19   newline
				mov	r2, r4
				add	r1, r9, #512
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL20:
				mov	r2, r4
				mov	r1, r5
				add	r7, sp, #796
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL21:
				mov	r2, r4
				mov	r1, r7
				addw	r7, sp, #2844
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL22:
		.LBE85:
		.LBB86:
		.LBB87:
				mov	r2, r6
				addw	r1, sp, #2860
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL23:
				ldm	r7, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL24:
		.LBE87:
		.LBE86:
   20   %for i = 0, 1, 2 %cycle
				movs	r1, #0
				ldr	r0, [fp, #4]!
				bl	_imp_writeint(PLT)
		.LVL25:
		.LBB88:
   21     %for j = 0, 1, 1 %cycle
				mov	r2, r4
				add	r1, r9, #768
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL26:
				mov	r2, r4
				mov	r1, r5
				addw	r5, sp, #1052
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL27:
				mov	r2, r4
				mov	r1, r5
				addw	r4, sp, #2588
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL28:
		.LBE88:
		.LBB89:
		.LBB90:
				mov	r2, r6
				addw	r1, sp, #2604
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL29:
				ldm	r4, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL30:
		.LDL1:
		.LBE90:
		.LBE89:
   22       printstring("d2(");write(j,0);printstring(", ");write(i,0);printstring(") = "); write(d2(j,i),0);printstring(",  ");
				ldr	r10, .L18+16
		.LPIC15:
				add	r10, pc
		.LBE95:
		.LBB96:
				mov	r8, #-1
		.LVL37:
		.L6:
				mov	r4, #256
				mov	r2, r4
				mov	r1, r10
				addw	r5, sp, #2076
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL39:
				mov	r2, r4
				mov	r1, r5
				addw	r6, sp, #1308
				mov	r0, r6
				bl	memcpy(PLT)
		.LVL40:
				mov	r2, r4
				mov	r1, r6
				add	r7, sp, #4352
				adds	r7, r7, #28
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL41:
		.LBE99:
		.LBB100:
		.LBB101:
				movs	r6, #240
				mov	r2, r6
				add	r1, sp, #4384
				adds	r1, r1, #12
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL42:
				ldm	r7, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL43:
		.LBE101:
		.LBE100:
   23     %repeat
				cmp	r9, #2
				beq	.L16
		.LVL35:
		.L8:
				add	r9, r9, #1
		.LVL36:
				ldr	r3, [sp, #248]
				add	fp, r3, r9, lsl #2
				movs	r1, #0
				mov	r0, r8
				bl	_imp_writeint(PLT)
		.LVL44:
		.LBB102:
   24     newline
				add	r3, r10, #256
				str	r3, [sp, #244]
				b	.L8
		.LVL33:
		.L17:
		.L7:
		.LBE96:
		.LBB97:
		.LBB98:
				bl	_imp_newline(PLT)
		.LVL34:
		.LDL3:
		.LBE98:
		.LBE97:
				mov	r2, r4
				ldr	r1, [sp, #244]
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL45:
				mov	r2, r4
				mov	r1, r5
				addw	r7, sp, #1564
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL46:
				mov	r2, r4
				mov	r1, r7
				add	r7, sp, #4096
				adds	r7, r7, #28
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL47:
		.LBE102:
		.LBB103:
		.LBB104:
				mov	r2, r6
				add	r1, sp, #4128
				adds	r1, r1, #12
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL48:
				ldm	r7, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL49:
		.LBE104:
		.LBE103:
				movs	r1, #0
				mov	r0, r9
				bl	_imp_writeint(PLT)
		.LVL50:
		.LBB105:
				cmp	r8, #1
				bne	.L6
   25   %repeat
				add	r8, r8, #1
		.LVL38:
		.LBB99:
   26   newline
				mov	r2, r4
				add	r1, r10, #512
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL51:
				mov	r2, r4
				mov	r1, r5
				addw	r7, sp, #1820
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL52:
				mov	r2, r4
				mov	r1, r7
				addw	r7, sp, #3868
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL53:
		.LBE105:
		.LBB106:
		.LBB107:
				mov	r2, r6
				addw	r1, sp, #3884
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL54:
				ldm	r7, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL55:
		.LBE107:
		.LBE106:
				b	.L17
		.L16:
		.L9:
		.LBB111:
		.LBB112:
				bl	_imp_newline(PLT)
		.LVL62:
		.LBE112:
		.LBE111:
		.LBB113:
		.LBB114:
				movs	r0, #0
				bl	exit(PLT)
		.LVL63:
		.L19:
				.align	2
		.L18:
				.word	_GLOBAL_OFFSET_TABLE_-(.LPIC8+4)
				.word	__stack_chk_guard(GOT)
				.word	.LANCHOR0-(.LPIC9+4)
				.word	.LANCHOR1-(.LPIC11+4)
				.word	.LANCHOR1-(.LPIC15+4)
		.LBE114:
		.LBE113:
		.LFE185:
				.section	.rodata
				.align	2
				.set	.LANCHOR1,. + 0
		.LC0:
				.byte	3
				.ascii	"d2(\000"
				.space	251
		.LC1:
				.byte	2
				.ascii	", \000"
				.space	252
		.LC2:
				.byte	4
				.ascii	") = \000"
				.space	250
		.LC3:
				.byte	3
				.ascii	",  \000"
				.space	251
				.data
				.align	2
				.set	.LANCHOR0,. + 0
		D1.10026:
				.word	0
				.word	1
				.word	2
				.word	3
				.word	4
				.word	5
		.Letext0:
   27 %endofprogram
				movs	r1, #0
				ldr	r0, [fp], #12
				bl	_imp_writeint(PLT)
		.LVL56:
		.LBB108:
   50 Statements compiled
				mov	r2, r4
				add	r1, r10, #768
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL57:
				mov	r2, r4
				mov	r1, r5
				addw	r5, sp, #2332
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL58:
				mov	r2, r4
				mov	r1, r5
				addw	r4, sp, #3612
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL59:
		.LBE108:
		.LBB109:
		.LBB110:
				mov	r2, r6
				addw	r1, sp, #3628
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL60:
				ldm	r4, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL61:
		.LDL4:
		.LBE110:
		.LBE109:
