         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
		.Ltext0:
				.align	2
				.global	main
		main:
		.LFB185:
		.LVL0:
				mov	x16, 5728
				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]
				adrp	x2, :got:__stack_chk_guard
				ldr	x2, [x2, #:got_lo12:__stack_chk_guard]
				ldr	x3, [x2]
				str	x3, [x29, 5720]
				mov	x3,0
    2   %string(100) s
				bl	_imp_initialise
		.LVL1:
    3   %string(25) left = "left"
    4   %string(20) middle = "middle"
    5   %string(15) right = "right"
    6   s = left . right
				add	x19, x29, 600
				mov	x2, 25
				add	x1, x29, 856
				mov	x0, x19
				bl	_imp_strncpy
		.LVL2:
    7   printstring(s); newline
				add	x23, x29, 1112
				mov	x2, 20
				add	x1, x29, 1368
				mov	x0, x23
				bl	_imp_strncpy
		.LVL3:
    8   s = left . middle . right
				add	x20, x29, 1624
				mov	x2, 15
				add	x1, x29, 1880
				mov	x0, x20
				bl	_imp_strncpy
		.LVL4:
		.LBB48:
		.LBB49:
				add	x25, x29, 4096
				add	x25, x25, 1368
				mov	x8, x25
				mov	x1, x20
				mov	x0, x19
				bl	_imp_join
		.LVL5:
		.LBE49:
		.LBE48:
				add	x22, x29, 344
				mov	x2, 100
				add	x1, x29, 2136
				mov	x0, x22
				bl	_imp_strncpy
		.LVL6:
				add	x26, x29, 4096
				add	x26, x26, 856
				mov	x24, 256
				mov	x2, x24
				add	x1, x29, 2392
				mov	x0, x26
				bl	memcpy
		.LVL7:
		.LBB50:
		.LBB51:
				add	x21, x29, 80
				mov	x2, x24
				mov	x1, x26
				mov	x0, x21
				bl	memcpy
		.LVL8:
				mov	x0, x21
				bl	_imp_printstring
		.LVL9:
		.LBE51:
		.LBE50:
		.LBB52:
		.LBB53:
				bl	_imp_newline
		.LVL10:
		.LBE53:
		.LBE52:
		.LBB54:
		.LBB55:
		.LBB56:
    9   printstring(s); newline
   10   s <- left . right
				add	x26, x29, 2904
				mov	x8, x26
				mov	x1, x23
				mov	x0, x19
				bl	_imp_join
		.LVL11:
		.LBE56:
				mov	x8, x25
				mov	x1, x20
				mov	x0, x26
				bl	_imp_join
		.LVL12:
		.LBE55:
		.LBE54:
				mov	x2, 100
				add	x1, x29, 2648
				mov	x0, x22
				bl	_imp_strncpy
		.LVL13:
				add	x23, x29, 4096
				add	x23, x23, 600
				mov	x2, x24
				add	x1, x29, 3160
				mov	x0, x23
				bl	memcpy
		.LVL14:
		.LBB57:
		.LBB58:
				mov	x2, x24
				mov	x1, x23
				mov	x0, x21
				bl	memcpy
		.LVL15:
				mov	x0, x21
				bl	_imp_printstring
		.LVL16:
		.LBE58:
		.LBE57:
		.LBB59:
		.LBB60:
				bl	_imp_newline
		.LVL17:
		.LBE60:
		.LBE59:
		.LBB61:
		.LBB62:
   11   printstring(s); newline
   12   s <- left . middle . right
				mov	x8, x25
				mov	x1, x20
				mov	x0, x19
				bl	_imp_join
		.LVL18:
		.LBE62:
		.LBE61:
				mov	x2, 100
				add	x1, x29, 3416
				mov	x0, x22
				bl	_imp_strncpy
		.LVL19:
   13   printstring(s); newline
   14 %endofprogram
				add	x19, x29, 4096
				add	x19, x19, 88
				mov	x8, x19
				add	x1, x29, 1112
				add	x0, x29, 600
				bl	_imp_join
		.LVL24:
		.LBE69:
				add	x8, x29, 4096
				add	x8, x8, 1368
				add	x1, x29, 1624
				mov	x0, x19
				bl	_imp_join
		.LVL25:
		.LBE68:
		.LBE67:
				mov	x2, 100
				add	x1, x29, 3928
				add	x0, x29, 344
				bl	_imp_strncpy
		.LVL26:
				ldrb	w0, [x29, 344]
				cmp	w0, 100
				bls	.L3
				mov	w0, 100
				strb	w0, [x29, 344]
		.L3:
				add	x20, x29, 4096
				add	x20, x20, 1368
				mov	x21, 256
				mov	x2, x21
				add	x1, x29, 4096
				add	x1, x1, 344
				mov	x0, x20
				bl	memcpy
		.LVL27:
		.LBB70:
		.LBB71:
				add	x19, x29, 80
				mov	x2, x21
				mov	x1, x20
				mov	x0, x19
				bl	memcpy
		.LVL28:
				mov	x0, x19
				bl	_imp_printstring
		.LVL29:
		.LBE71:
		.LBE70:
		.LBB72:
		.LBB73:
				bl	_imp_newline
		.LVL30:
		.LBE73:
		.LBE72:
		.LBB74:
		.LBB75:
				mov	w0, 0
				bl	exit
		.LVL31:
		.LBE75:
		.LBE74:
		.LFE185:
		.Letext0:
   18 Statements compiled
				ldrb	w0, [x29, 344]
				cmp	w0, 100
				bls	.L2
				mov	w0, 100
				strb	w0, [x29, 344]
		.L2:
				add	x20, x29, 4096
				add	x20, x20, 1112
				mov	x21, 256
				mov	x2, x21
				add	x1, x29, 3672
				mov	x0, x20
				bl	memcpy
		.LVL20:
		.LBB63:
		.LBB64:
				add	x19, x29, 80
				mov	x2, x21
				mov	x1, x20
				mov	x0, x19
				bl	memcpy
		.LVL21:
				mov	x0, x19
				bl	_imp_printstring
		.LVL22:
		.LBE64:
		.LBE63:
		.LBB65:
		.LBB66:
				bl	_imp_newline
		.LVL23:
		.LBE66:
		.LBE65:
		.LBB67:
		.LBB68:
		.LBB69:
