         Edinburgh IMP77 Compiler - Version 8.4
    1
		.Ltext0:
				.align	2
				.global	GETYNX
		GETYNX:
		.LFB185:
    2
    3 %externalintegerfn get YNX
				sub	sp, sp, #1632
				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	x0, :got:__stack_chk_guard
				ldr	x0, [x0, #:got_lo12:__stack_chk_guard]
				ldr	x1, [x0]
				str	x1, [x29, 1624]
				mov	x1,0
    4   %on %event 9 %start
				mov	w1, 1
				adrp	x0, :got:_imp_event
				ldr	x0, [x0, #:got_lo12:_imp_event]
				add	x0, x0, 536
				bl	__sigsetjmp
		.LVL0:
				cbnz	w0, .L1
		.LVL1:
				mov	w1, 512
				adrp	x0, :got:_imp_event
				ldr	x0, [x0, #:got_lo12:_imp_event]
				bl	_imp_on_event_enter
		.LVL2:
				cbz	x0, .L15
    5     %result = 'X'
				mov	w19, 88
				mov	w19, 88
		.L4:
		.LVL19:
		.L1:
    6   %finish
    7   %integer c
    8   %cycle
    9     !read symbol(c)  ;! read symbol currently not working due to %name parameters not being handled yet.
   10     c = next symbol; skip symbol
   11     %signal 7,1,0 %if c = '?'
				cmp	w19, 63
				bne	.L8
   12     c = c - 'a' + 'A' %if 'a' <= c <= 'z'
				adrp	x24, :got:_imp_current_file
				ldr	x24, [x24, #:got_lo12:_imp_current_file]
				adrp	x23, :got:_imp_current_line
				ldr	x23, [x23, #:got_lo12:_imp_current_line]
				add	x22, x29, 1368
				b	.L5
		.LVL3:
		.L19:
				add	x8, x29, 1112
				bl	_imp_c2istr
		.LVL4:
		.L10:
				ldr	w21, [x23]
				cmp	w21, 0
				mov	w0, 12
				csel	w21, w21, w0, ne
				mov	x8, x22
				adrp	x0, .LC6
				add	x0, x0, :lo12:.LC6
				bl	_imp_c2istr
		.LVL5:
				add	x20, x29, 336
				mov	x26, 256
				mov	x2, x26
				add	x1, x29, 1112
				mov	x0, x20
				bl	memcpy
		.LVL6:
				add	x25, x29, 80
				mov	x2, x26
				mov	x1, x22
				mov	x0, x25
				bl	memcpy
		.LVL7:
				mov	w5, 0
				mov	w4, 1
				mov	w3, 7
				mov	x2, x25
				mov	w1, w21
				mov	x0, x20
				bl	_signal_event
		.LVL8:
		.L8:
		.LBB44:
				ldr	x0, [x24]
				cbnz	x0, .L19
		.LBB49:
				add	x21, x29, 600
				mov	x25, 256
				mov	x2, x25
				adrp	x1, .LANCHOR0
				add	x1, x1, :lo12:.LANCHOR0
				mov	x0, x21
				bl	memcpy
		.LVL15:
				add	x20, x29, 856
				mov	x2, x25
				mov	x1, x21
				mov	x0, x20
				bl	memcpy
		.LVL16:
		.LBE49:
				mov	x2, x25
				mov	x1, x20
				add	x0, x29, 1112
				bl	memcpy
		.LVL17:
				b	.L10
		.LVL18:
		.L15:
   13     %result = c %if c = 'Y' %or c = 'N'
   14   %repeat
				cmp	w19, 78
				mov	w0, 89
		.LVL10:
				ccmp	w19, w0, 4, ne
				beq	.L1
		.LVL11:
		.L5:
		.L6:
		.L7:
		.LBB45:
		.LBB46:
				bl	_imp_nextsymbol
		.LVL12:
				mov	w19, w0
		.LVL13:
		.LBE46:
		.LBE45:
		.LBB47:
		.LBB48:
				bl	_imp_skipsymbol
		.LVL14:
		.LBE48:
		.LBE47:
   15 %end
				mov	w0, w19
				adrp	x1, :got:__stack_chk_guard
				ldr	x1, [x1, #:got_lo12:__stack_chk_guard]
				ldr	x2, [x29, 1624]
				ldr	x1, [x1]
				eor	x1, x2, x1
				cbnz	x1, .L20
				ldp	x19, x20, [sp, 16]
				ldp	x21, x22, [sp, 32]
				ldp	x23, x24, [sp, 48]
				ldp	x25, x26, [sp, 64]
				ldp	x29, x30, [sp]
				add	sp, sp, 1632
				ret
		.L20:
				bl	__stack_chk_fail
		.LVL20:
		.LFE185:
				.align	2
				.global	main
		main:
		.LFB186:
   16
   17 ! A complete program.  Should run.
				sub	w1, w19, #97
		.LBE44:
   18 %begin
		.LVL21:
				sub	sp, sp, #3680
				stp	x29, x30, [sp]
				add	x29, sp, 0
				stp	x19, x20, [sp, 16]
				stp	x21, x22, [sp, 32]
				stp	x23, x24, [sp, 48]
				str	x25, [sp, 64]
				adrp	x2, :got:__stack_chk_guard
				ldr	x2, [x2, #:got_lo12:__stack_chk_guard]
				ldr	x3, [x2]
				str	x3, [x29, 3672]
				mov	x3,0
				bl	_imp_initialise
		.LVL22:
   19   %integer Answer
				sub	w0, w19, #32
				cmp	w1, 26
				csel	w19, w0, w19, cc
		.LVL9:
		.L12:
   20   %on %event 7 %start
				mov	w1, 1
				adrp	x0, :got:_imp_event
				ldr	x0, [x0, #:got_lo12:_imp_event]
				add	x0, x0, 536
				bl	__sigsetjmp
		.LVL23:
				cbnz	w0, .L23
		.LVL24:
				mov	w1, 128
				adrp	x0, :got:_imp_event
				ldr	x0, [x0, #:got_lo12:_imp_event]
				bl	_imp_on_event_enter
		.LVL25:
				cbz	x0, .L23
		.LVL26:
		.L24:
		.LBB50:
   21     print string("What indeed?"); newline
				add	x20, x29, 1624
				mov	x21, 256
				mov	x2, x21
				adrp	x1, .LANCHOR0
				add	x1, x1, :lo12:.LANCHOR0
				add	x1, x1, x21
				mov	x0, x20
				bl	memcpy
		.LVL47:
				add	x19, x29, 344
				mov	x2, x21
				mov	x1, x20
				mov	x0, x19
				bl	memcpy
		.LVL48:
				add	x20, x29, 2136
				mov	x2, x21
				mov	x1, x19
				mov	x0, x20
				bl	memcpy
		.LVL49:
		.LBE64:
		.LBB65:
		.LBB66:
				add	x19, x29, 80
				mov	x2, x21
				mov	x1, x20
				mov	x0, x19
				bl	memcpy
		.LVL50:
				mov	x0, x19
				bl	_imp_printstring
		.LVL51:
		.LBE66:
		.LBE65:
		.LBB67:
		.LBB68:
				bl	_imp_newline
		.LVL52:
				b	.L24
		.LVL53:
		.L32:
		.LBE68:
		.LBE67:
		.LBB69:
   22     ! drop through and restart...
   23   %finish
   24
   25   prompt("Y or N: ");
				mov	x2, 240
				mov	w1, 0
				add	x0, x29, 1640
				bl	memset
		.LVL27:
				adrp	x20, .LANCHOR0
				add	x20, x20, :lo12:.LANCHOR0
				ldr	x0, [x20, 512]
				add	x1, x29, 1536
				str	x0, [x1, 89]
				ldrb	w0, [x20, 520]
				strb	w0, [x29, 1633]
				str	wzr, [x1, 98]
				strh	wzr, [x29, 1638]
				mov	w24, 8
				strb	w24, [x29, 1624]
				add	x23, x29, 600
				add	x21, x29, 1624
				mov	x19, 256
				mov	x2, x19
				mov	x1, x21
				mov	x0, x23
				bl	memcpy
		.LVL28:
				strb	w24, [x29, 600]
				add	x22, x29, 2392
				mov	x2, x19
				mov	x1, x23
				mov	x0, x22
				bl	memcpy
		.LVL29:
		.LBE50:
		.LBB51:
		.LBB52:
				add	x0, x20, 528
				bl	check_instream
		.LVL30:
				strb	w24, [x29, 2392]
				mov	x2, x19
				mov	x1, x22
				adrp	x0, :got:_imp_promptstr
				ldr	x0, [x0, #:got_lo12:_imp_promptstr]
				bl	memcpy
		.LVL31:
		.LBE52:
		.LBE51:
		.LBB53:
   26   print string("Starting"); newline
				mov	x2, x19
				add	x1, x20, 544
				mov	x0, x21
				bl	memcpy
		.LVL32:
				add	x0, x29, 856
				mov	x2, x19
				mov	x1, x21
				mov	x21, x0
				bl	memcpy
		.LVL33:
				add	x20, x29, 2648
				mov	x2, x19
				mov	x1, x21
				mov	x0, x20
				bl	memcpy
		.LVL34:
		.LBE53:
		.LBB54:
		.LBB55:
				add	x0, x29, 80
				mov	x2, x19
				mov	x1, x20
				mov	x19, x0
				bl	memcpy
		.LVL35:
				mov	x0, x19
				bl	_imp_printstring
		.LVL36:
		.LBE55:
		.LBE54:
		.LBB56:
		.LBB57:
				bl	_imp_newline
		.LVL37:
		.LBE57:
		.LBE56:
		.LBB58:
   27   %cycle
   28     Answer = get YNX
				bl	GETYNX
		.LVL38:
   29     %if Answer = 'Y' %start
				cmp	w0, 89
				beq	.L32
		.L26:
   30       print string("Yes!"); newline
				mov	x22, 256
				mov	x2, x22
				add	x1, x19, 800
				mov	x0, x23
		.LVL54:
				bl	memcpy
		.LVL55:
				add	x20, x29, 1112
				mov	x2, x22
				mov	x1, x23
				mov	x0, x20
				bl	memcpy
		.LVL56:
				add	x21, x29, 2904
				mov	x2, x22
				mov	x1, x20
				mov	x0, x21
				bl	memcpy
		.LVL57:
		.LBE69:
		.LBB70:
		.LBB71:
				add	x20, x29, 80
				mov	x2, x22
				mov	x1, x21
				mov	x0, x20
				bl	memcpy
		.LVL58:
				mov	x0, x20
				bl	_imp_printstring
		.LVL59:
		.LBE71:
		.LBE70:
		.LBB72:
		.LBB73:
				bl	_imp_newline
		.LVL60:
				b	.L25
		.LVL61:
		.L28:
		.LBE73:
		.LBE72:
   31     %finish %else %if Answer = 'N' %start
   32       print string("No?"); newline
				adrp	x19, .LANCHOR0
				add	x19, x19, :lo12:.LANCHOR0
				add	x25, x19, 1056
				add	x23, x29, 1624
				add	x24, x29, 1368
		.L25:
		.LBE58:
				mov	x22, 256
				mov	x2, x22
				mov	x1, x25
				mov	x0, x23
		.LVL39:
				bl	memcpy
		.LVL40:
				mov	x2, x22
				mov	x1, x23
				mov	x0, x24
				bl	memcpy
		.LVL41:
				add	x21, x29, 3160
				mov	x2, x22
				mov	x1, x24
				mov	x0, x21
				bl	memcpy
		.LVL42:
		.LBE59:
		.LBB60:
		.LBB61:
				add	x20, x29, 80
				mov	x2, x22
				mov	x1, x21
				mov	x0, x20
				bl	memcpy
		.LVL43:
				mov	x0, x20
				bl	_imp_printstring
		.LVL44:
		.LBE61:
		.LBE60:
		.LBB62:
		.LBB63:
				bl	_imp_newline
		.LVL45:
				b	.L25
		.LVL46:
		.L23:
		.LBE63:
		.LBE62:
		.LBB64:
   33     %finish %else %if Answer = 'X' %start
				cmp	w0, 78
				bne	.L28
		.LBB59:
   34       print string("
				add	x20, x29, 1624
				mov	x21, 256
				mov	x2, x21
				adrp	x1, .LANCHOR0
				add	x1, x1, :lo12:.LANCHOR0
				add	x1, x1, 1312
				mov	x0, x20
		.LVL65:
				bl	memcpy
		.LVL66:
				add	x19, x29, 1880
				mov	x2, x21
				mov	x1, x20
				mov	x0, x19
				bl	memcpy
		.LVL67:
				add	x20, x29, 3416
				mov	x2, x21
				mov	x1, x19
				mov	x0, x20
				bl	memcpy
		.LVL68:
		.LBE76:
		.LBB77:
		.LBB78:
				add	x19, x29, 80
				mov	x2, x21
				mov	x1, x20
				mov	x0, x19
				bl	memcpy
		.LVL69:
				mov	x0, x19
				bl	_imp_printstring
		.LVL70:
		.LBE78:
		.LBE77:
		.LBB79:
		.LBB80:
				mov	w0, 2
				bl	_imp_newlines
		.LVL71:
		.LBE80:
		.LBE79:
		.LBB81:
		.LBB82:
				mov	w0, 0
				bl	exit
		.LVL72:
		.LBE82:
		.LBE81:
		.LFE186:
				.section	.rodata
				.align	3
				.set	.LANCHOR0,. + 0
		.LC0:
				.byte	21
				.string	"test-new/test113b.imp"
				.zero	233
		.LC1:
				.byte	12
				.string	"What indeed?"
				.zero	242
		.LC7:
				.string	"Y or N: "
				.zero	6
				.zero	1
		__PRETTY_FUNCTION__.7204:
				.string	"_imp_PROMPT"
				.zero	4
		.LC2:
				.byte	8
				.string	"Starting"
				.zero	246
		.LC3:
				.byte	4
				.string	"Yes!"
				.zero	250
		.LC4:
				.byte	3
				.string	"No?"
				.zero	251
		.LC5:
				.byte	39
				.string	"\nExiting on trapped END OF FILE event!."
				.zero	215
				.section	.rodata.str1.8,"aMS",@progbits,1
				.align	3
		.LC6:
				.string	""
		.Letext0:
   35 Exiting on trapped END OF FILE event!."); newlines(2)
				cmp	w0, 88
				beq	.L33
		.L29:
		.LVL62:
		.LBB74:
		.LBB75:
				mov	w0, 0
		.LVL63:
				bl	exit
		.LVL64:
		.L33:
		.LBE75:
		.LBE74:
		.LBB76:
   36       %stop
   37     %finish %else %start
   38       %monitor %and %stop
   39     %finish
   40   %repeat
   41 %endofprogram
   39 Statements compiled
