         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
		.Ltext0:
				.align	2
				.global	main
		main:
		.LFB185:
		.LVL0:
				mov	x16, 4768
				sub	sp, sp, x16
				stp	x29, x30, [sp]
				add	x29, sp, 0
				stp	x19, x20, [sp, 16]
				stp	x21, x22, [sp, 32]
				stp	x23, x24, [sp, 48]
				stp	x25, x26, [sp, 64]
				stp	x27, x28, [sp, 80]
				adrp	x2, :got:__stack_chk_guard
				ldr	x2, [x2, #:got_lo12:__stack_chk_guard]
				ldr	x3, [x2]
				str	x3, [x29, 4760]
				mov	x3,0
    2   ! It would appear that Imp and C do not store their arrays in the same x-major order.
				bl	_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
				adrp	x1, .LANCHOR0
				add	x0, x1, :lo12:.LANCHOR0
				ldr	w1, [x1, #:lo12:.LANCHOR0]
				str	w1, [x29, 384]
		.LVL2:
		.LBB76:
		.LBB77:
				add	x25, x29, 384
		.LVL3:
		.LBE77:
		.LBE76:
   10   d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
				ldr	w1, [x0, 4]
				str	w1, [x29, 388]
   11   d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
				ldr	w1, [x0, 8]
				str	w1, [x29, 392]
   12   d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
				ldr	w1, [x0, 12]
				str	w1, [x29, 396]
   13   %for i = 0, 1, 1 %cycle
				ldr	w1, [x0, 16]
				str	w1, [x29, 400]
   14     %for j = 0, 1, 2 %cycle
				ldr	w0, [x0, 20]
				str	w0, [x29, 404]
		.LVL4:
				str	x25, [x29, 104]
				mov	w28, -1
		.LBB78:
   15       printstring("d2(");write(i,0);printstring(", ");write(j,0);printstring(") = "); write(d2(i,j),0);printstring(",  ");
				adrp	x24, .LANCHOR1
				add	x24, x24, :lo12:.LANCHOR1
				add	x21, x29, 4096
				add	x21, x21, 408
				add	x27, x29, 408
				add	x26, x29, 3480
		.LBE78:
		.LBB79:
				mov	x19, 256
				mov	x2, x19
				mov	x1, x24
				mov	x0, x21
				bl	memcpy
		.LVL8:
				mov	x2, x19
				mov	x1, x21
				mov	x0, x27
				bl	memcpy
		.LVL9:
				mov	x2, x19
				mov	x1, x27
				mov	x0, x26
				bl	memcpy
		.LVL10:
		.LBE80:
		.LBB81:
		.LBB82:
				add	x20, x29, 128
				mov	x2, x19
				mov	x1, x26
				mov	x0, x20
				bl	memcpy
		.LVL11:
				mov	x0, x20
				bl	_imp_printstring
		.LVL12:
		.LBE82:
		.LBE81:
   16     %repeat
				mov	w1, 0
				mov	w0, w28
				bl	_imp_writeint
		.LVL13:
		.LBB83:
				mov	x2, x19
				ldr	x1, [x29, 120]
				mov	x0, x21
				bl	memcpy
		.LVL14:
				add	x23, x29, 664
				mov	x2, x19
				mov	x1, x21
				mov	x0, x23
				bl	memcpy
		.LVL15:
				add	x0, x29, 3224
				mov	x2, x19
				mov	x1, x23
				mov	x23, x0
				bl	memcpy
		.LVL16:
		.LBE83:
		.LBB84:
		.LBB85:
				mov	x2, x19
				mov	x1, x23
				mov	x0, x20
				bl	memcpy
		.LVL17:
				mov	x0, x20
				bl	_imp_printstring
		.LVL18:
		.LBE85:
		.LBE84:
				cmp	w28, 1
				bne	.L4
		.L5:
		.LBB94:
		.LBB95:
				bl	_imp_newline
		.LVL33:
				mov	x25, 0
		.LBE95:
		.LBE94:
		.LBB96:
   17     newline
				add	x0, x24, 256
				str	x0, [x29, 120]
		.LVL5:
		.L4:
		.LBE79:
				add	w28, w28, 1
		.LVL6:
				mov	x22, 0
		.LVL7:
		.L2:
		.LBB80:
				cmp	x22, 3
				bne	.L2
		.L3:
		.LBB92:
		.LBB93:
				bl	_imp_newline
		.LVL32:
		.LDL2:
				add	x25, x25, 12
		.LBE93:
		.LBE92:
   18   %repeat
				mov	w1, 0
				mov	w0, w22
				bl	_imp_writeint
		.LVL19:
		.LBB86:
   19   newline
				mov	x2, x19
				add	x1, x24, 512
				mov	x0, x21
				bl	memcpy
		.LVL20:
				add	x23, x29, 920
				mov	x2, x19
				mov	x1, x21
				mov	x0, x23
				bl	memcpy
		.LVL21:
				add	x0, x29, 2968
				mov	x2, x19
				mov	x1, x23
				mov	x23, x0
				bl	memcpy
		.LVL22:
		.LBE86:
		.LBB87:
		.LBB88:
				mov	x2, x19
				mov	x1, x23
				mov	x0, x20
				bl	memcpy
		.LVL23:
				mov	x0, x20
				bl	_imp_printstring
		.LVL24:
		.LBE88:
		.LBE87:
   20   %for i = 0, 1, 2 %cycle
				mov	w1, 0
				ldr	w0, [x25, x22, lsl 2]
				bl	_imp_writeint
		.LVL25:
		.LBB89:
   21     %for j = 0, 1, 1 %cycle
				mov	x2, x19
				add	x1, x24, 768
				mov	x0, x21
				bl	memcpy
		.LVL26:
				add	x23, x29, 1176
				mov	x2, x19
				mov	x1, x21
				mov	x0, x23
				bl	memcpy
		.LVL27:
				add	x0, x29, 2712
				mov	x2, x19
				mov	x1, x23
				mov	x23, x0
				bl	memcpy
		.LVL28:
		.LBE89:
		.LBB90:
		.LBB91:
				mov	x2, x19
				mov	x1, x23
				mov	x0, x20
				bl	memcpy
		.LVL29:
				mov	x0, x20
				bl	_imp_printstring
		.LVL30:
		.LDL1:
				add	x22, x22, 1
		.LVL31:
		.LBE91:
		.LBE90:
   22       printstring("d2(");write(j,0);printstring(", ");write(i,0);printstring(") = "); write(d2(j,i),0);printstring(",  ");
				adrp	x24, .LANCHOR1
				add	x24, x24, :lo12:.LANCHOR1
				add	x21, x29, 2200
				add	x28, x29, 1432
				add	x27, x29, 4096
				add	x27, x27, 408
		.LBE96:
		.LBB97:
				mov	w23, -1
		.LVL39:
		.L6:
				mov	x19, 256
				mov	x2, x19
				mov	x1, x24
				mov	x0, x21
				bl	memcpy
		.LVL41:
				mov	x2, x19
				mov	x1, x21
				mov	x0, x28
				bl	memcpy
		.LVL42:
				mov	x2, x19
				mov	x1, x28
				mov	x0, x27
				bl	memcpy
		.LVL43:
		.LBE100:
		.LBB101:
		.LBB102:
				add	x20, x29, 128
				mov	x2, x19
				mov	x1, x27
				mov	x0, x20
				bl	memcpy
		.LVL44:
				mov	x0, x20
				bl	_imp_printstring
		.LVL45:
		.LBE102:
		.LBE101:
   23     %repeat
				cmp	x25, 3
				beq	.L16
		.LVL37:
		.L8:
				str	w25, [x29, 120]
		.LVL38:
				ldr	x0, [x29, 104]
				add	x26, x0, x25, lsl 2
				mov	w1, 0
				mov	w0, w23
				bl	_imp_writeint
		.LVL46:
		.LBB103:
   24     newline
				add	x0, x24, x19
				str	x0, [x29, 112]
				b	.L8
		.LVL34:
		.L17:
		.L7:
		.LBE97:
		.LBB98:
		.LBB99:
				bl	_imp_newline
		.LVL35:
		.LDL3:
				add	x25, x25, 1
		.LVL36:
		.LBE99:
		.LBE98:
				mov	x2, x19
				ldr	x1, [x29, 112]
				mov	x0, x21
				bl	memcpy
		.LVL47:
				add	x22, x29, 1688
				mov	x2, x19
				mov	x1, x21
				mov	x0, x22
				bl	memcpy
		.LVL48:
				add	x0, x29, 4096
				add	x0, x0, 152
				mov	x2, x19
				mov	x1, x22
				mov	x22, x0
				bl	memcpy
		.LVL49:
		.LBE103:
		.LBB104:
		.LBB105:
				mov	x2, x19
				mov	x1, x22
				mov	x0, x20
				bl	memcpy
		.LVL50:
				mov	x0, x20
				bl	_imp_printstring
		.LVL51:
		.LBE105:
		.LBE104:
				mov	w1, 0
				ldr	w0, [x29, 120]
				bl	_imp_writeint
		.LVL52:
		.LBB106:
				cmp	w23, 1
				bne	.L6
   25   %repeat
				add	w23, w23, 1
		.LVL40:
		.LBB100:
   26   newline
				mov	x2, x19
				add	x1, x24, 512
				mov	x0, x21
				bl	memcpy
		.LVL53:
				add	x22, x29, 1944
				mov	x2, x19
				mov	x1, x21
				mov	x0, x22
				bl	memcpy
		.LVL54:
				add	x0, x29, 3992
				mov	x2, x19
				mov	x1, x22
				mov	x22, x0
				bl	memcpy
		.LVL55:
		.LBE106:
		.LBB107:
		.LBB108:
				mov	x2, x19
				mov	x1, x22
				mov	x0, x20
				bl	memcpy
		.LVL56:
				mov	x0, x20
				bl	_imp_printstring
		.LVL57:
		.LBE108:
		.LBE107:
				b	.L17
		.LVL64:
		.L16:
		.L9:
		.LBB112:
		.LBB113:
				bl	_imp_newline
		.LVL65:
		.LBE113:
		.LBE112:
		.LBB114:
		.LBB115:
				mov	w0, 0
				bl	exit
		.LVL66:
		.LBE115:
		.LBE114:
		.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.7690:
				.word	0
				.word	1
				.word	2
				.word	3
				.word	4
				.word	5
		.Letext0:
   27 %endofprogram
				mov	w1, 0
				ldr	w0, [x26], 12
				bl	_imp_writeint
		.LVL58:
		.LBB109:
   50 Statements compiled
				mov	x2, x19
				add	x1, x24, 768
				mov	x0, x21
				bl	memcpy
		.LVL59:
				add	x22, x29, 2456
				mov	x2, x19
				mov	x1, x21
				mov	x0, x22
				bl	memcpy
		.LVL60:
				add	x0, x29, 3736
				mov	x2, x19
				mov	x1, x22
				mov	x22, x0
				bl	memcpy
		.LVL61:
		.LBE109:
		.LBB110:
		.LBB111:
				mov	x2, x19
				mov	x1, x22
				mov	x0, x20
				bl	memcpy
		.LVL62:
				mov	x0, x20
				bl	_imp_printstring
		.LVL63:
		.LDL4:
		.LBE111:
		.LBE110:
