         Edinburgh IMP77 Compiler - Version 8.4
    1
		.Ltext0:
				.align	1
				.global	GETYNX
				.thumb
				.thumb_func
		GETYNX:
		.LFB185:
    2
    3 %externalintegerfn get YNX
				@ args = 0, pretend = 0, frame = 1040
				@ frame_needed = 0, uses_anonymous_args = 0
				push	{r4, r5, r6, r7, r8, r9, lr}
				subw	sp, sp, #1556
				ldr	r3, .L21
		.LPIC0:
				add	r3, pc
				mov	r2, r3
				str	r3, [sp, #512]
				ldr	r3, .L21+4
				ldr	r3, [r2, r3]
				ldr	r3, [r3]
				str	r3, [sp, #1548]
    4   %on %event 9 %start
				ldr	r3, .L21+8
				ldr	r0, [r2, r3]
				movs	r1, #1
				add	r0, r0, #536
				bl	__sigsetjmp(PLT)
		.LVL0:
				cmp	r0, #0
				bne	.L1
		.LVL1:
				ldr	r3, .L21+8
				ldr	r2, [sp, #512]
				ldr	r3, [r2, r3]
				str	r3, [sp, #516]
				mov	r1, #512
				mov	r0, r3
				bl	_imp_on_event_enter(PLT)
		.LVL2:
				cmp	r0, #0
				beq	.L15
    5     %result = 'X'
				movs	r4, #88
				movs	r4, #88
		.L4:
		.LVL18:
		.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	r4, #63
				bne	.L8
   12     c = c - 'a' + 'A' %if 'a' <= c <= 'z'
				addw	r6, sp, #1292
				ldr	r7, .L21+12
		.LPIC2:
				add	r7, pc
		.LBB44:
				ldr	r8, .L21+16
		.LPIC1:
				add	r8, pc
				b	.L5
		.LVL3:
		.L19:
		.LBE44:
				addw	r0, sp, #1036
				bl	_imp_c2istr(PLT)
		.LVL4:
		.L10:
				ldr	r3, .L21+20
				ldr	r2, [sp, #512]
				ldr	r3, [r2, r3]
				ldr	r5, [r3]
				cmp	r5, #0
				it	eq
				moveq	r5, #12
				mov	r1, r7
				mov	r0, r6
				bl	_imp_c2istr(PLT)
		.LVL5:
				movs	r3, #0
				str	r3, [sp, #508]
				movs	r3, #1
				str	r3, [sp, #504]
				movs	r3, #7
				str	r3, [sp, #500]
				mov	r2, #256
				mov	r1, r6
				add	r0, sp, #244
				bl	memcpy(PLT)
		.LVL6:
				str	r5, [sp, #240]
				movs	r2, #240
				addw	r1, sp, #1052
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL7:
				addw	r3, sp, #1036
				ldm	r3, {r0, r1, r2, r3}
				bl	_signal_event(PLT)
		.LVL8:
		.L8:
		.LBB45:
				ldr	r3, .L21+24
				ldr	r2, [sp, #512]
				ldr	r3, [r2, r3]
				ldr	r1, [r3]
				cmp	r1, #0
				bne	.L19
		.LBB50:
				mov	r9, #256
				mov	r2, r9
				mov	r1, r8
				add	r5, sp, #524
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL14:
				mov	r2, r9
				mov	r1, r5
				add	r5, sp, #780
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL15:
		.LBE50:
				mov	r2, r9
				mov	r1, r5
				addw	r0, sp, #1036
				bl	memcpy(PLT)
		.LVL16:
				b	.L10
		.LVL17:
		.L15:
   13     %result = c %if c = 'Y' %or c = 'N'
   14   %repeat
				cmp	r4, #78
				it	ne
				cmpne	r4, #89
				beq	.L1
		.LVL10:
		.L5:
		.L6:
		.L7:
		.LBB46:
		.LBB47:
				bl	_imp_nextsymbol(PLT)
		.LVL11:
				mov	r4, r0
		.LVL12:
		.LBE47:
		.LBE46:
		.LBB48:
		.LBB49:
				bl	_imp_skipsymbol(PLT)
		.LVL13:
		.LBE49:
		.LBE48:
   15 %end
				mov	r0, r4
				ldr	r3, .L21+4
				ldr	r2, [sp, #512]
				ldr	r3, [r2, r3]
				ldr	r2, [sp, #1548]
				ldr	r3, [r3]
				cmp	r2, r3
				bne	.L20
				addw	sp, sp, #1556
				@ sp needed
				pop	{r4, r5, r6, r7, r8, r9, pc}
		.L20:
				bl	__stack_chk_fail(PLT)
		.LVL19:
		.L22:
				.align	2
		.L21:
				.word	_GLOBAL_OFFSET_TABLE_-(.LPIC0+4)
				.word	__stack_chk_guard(GOT)
				.word	_imp_event(GOT)
				.word	.LC6-(.LPIC2+4)
				.word	.LANCHOR0-(.LPIC1+4)
				.word	_imp_current_line(GOT)
				.word	_imp_current_file(GOT)
		.LFE185:
				.align	1
				.global	main
				.thumb
				.thumb_func
		main:
		.LFB186:
   16
   17 ! A complete program.  Should run.
				sub	r3, r4, #97
				cmp	r3, #25
		.LBE45:
   18 %begin
				@ args = 0, pretend = 0, frame = 3352
				@ frame_needed = 0, uses_anonymous_args = 0
		.LVL20:
				push	{r4, r5, r6, r7, r8, r9, lr}
				subw	sp, sp, #3596
				ldr	r4, .L36
		.LPIC3:
				add	r4, pc
				ldr	r3, .L36+4
				ldr	r3, [r4, r3]
				ldr	r3, [r3]
				str	r3, [sp, #3588]
				bl	_imp_initialise(PLT)
		.LVL21:
   19   %integer Answer
				it	ls
				subls	r4, r4, #32
		.LVL9:
		.L12:
   20   %on %event 7 %start
				ldr	r3, .L36+8
				str	r4, [sp, #244]
				ldr	r0, [r4, r3]
				movs	r1, #1
				add	r0, r0, #536
				bl	__sigsetjmp(PLT)
		.LVL22:
				cmp	r0, #0
				bne	.L25
		.LVL23:
				ldr	r3, .L36+8
				ldr	r2, [sp, #244]
				ldr	r3, [r2, r3]
				str	r3, [sp, #248]
				movs	r1, #128
				mov	r0, r3
				bl	_imp_on_event_enter(PLT)
		.LVL24:
				cmp	r0, #0
				beq	.L25
		.LVL25:
		.L26:
		.LBB51:
   21     print string("What indeed?"); newline
				mov	r5, #256
				mov	r2, r5
				ldr	r1, .L36+28
		.LPIC4:
				add	r1, pc
				add	r1, r1, r5
				addw	r4, sp, #1540
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL46:
				mov	r2, r5
				mov	r1, r4
				add	r4, sp, #260
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL47:
				mov	r2, r5
				mov	r1, r4
				addw	r4, sp, #2052
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL48:
		.LBE66:
		.LBB67:
		.LBB68:
				movs	r2, #240
				addw	r1, sp, #2068
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL49:
				ldm	r4, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL50:
		.LBE68:
		.LBE67:
		.LBB69:
		.LBB70:
				bl	_imp_newline(PLT)
		.LVL51:
				b	.L26
		.LVL52:
		.L34:
		.LBE70:
		.LBE69:
		.LBB71:
   22     ! drop through and restart...
   23   %finish
   24
   25   prompt("Y or N: ");
				mov	r8, #240
				mov	r2, r8
				movs	r1, #0
				addw	r0, sp, #1556
				bl	memset(PLT)
		.LVL26:
				ldr	r6, .L36+12
		.LPIC5:
				add	r6, pc
				add	r2, r6, #512
				ldmia	r2!, {r0, r1}
				str	r0, [sp, #1541]	@ unaligned
				str	r1, [sp, #1545]	@ unaligned
				ldrb	r2, [r2]	@ zero_extendqisi2
				strb	r2, [sp, #1549]
				movs	r2, #0
				str	r2, [sp, #1550]	@ unaligned
				strh	r2, [sp, #1554]	@ unaligned
				mov	r9, #8
				addw	r5, sp, #1540
				strb	r9, [sp, #1540]
				mov	r4, #256
				mov	r2, r4
				mov	r1, r5
				add	r7, sp, #516
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL27:
				strb	r9, [r7]
				mov	r2, r4
				mov	r1, r7
				addw	r7, sp, #2308
				mov	r0, r7
				bl	memcpy(PLT)
		.LVL28:
		.LBE51:
		.LBB52:
		.LBB53:
				add	r0, r6, #528
				bl	check_instream(PLT)
		.LVL29:
				strb	r9, [r7]
				ldr	r3, .L36+16
				ldr	r2, [sp, #244]
				ldr	r3, [r2, r3]
				str	r3, [sp, #252]
				mov	r2, r4
				mov	r1, r7
				mov	r0, r3
				bl	memcpy(PLT)
		.LVL30:
		.LBE53:
		.LBE52:
		.LBB54:
   26   print string("Starting"); newline
				mov	r2, r4
				add	r1, r6, #540
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL31:
				mov	r2, r4
				mov	r1, r5
				add	r5, sp, #772
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL32:
				mov	r2, r4
				mov	r1, r5
				addw	r4, sp, #2564
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL33:
		.LBE54:
		.LBB55:
		.LBB56:
				mov	r2, r8
				addw	r1, sp, #2580
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL34:
				ldm	r4, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL35:
		.LBE56:
		.LBE55:
		.LBB57:
		.LBB58:
				bl	_imp_newline(PLT)
		.LVL36:
		.LBE58:
		.LBE57:
		.LBB59:
   27   %cycle
   28     Answer = get YNX
				bl	GETYNX(PLT)
		.LVL37:
   29     %if Answer = 'Y' %start
				cmp	r0, #89
				beq	.L34
		.L28:
   30       print string("Yes!"); newline
				ldr	r7, .L36+24
		.LPIC8:
				add	r7, pc
		.L27:
		.LBE60:
				mov	r6, #256
				mov	r2, r6
				add	r1, r7, #796
				addw	r4, sp, #1540
				mov	r0, r4
		.LVL53:
				bl	memcpy(PLT)
		.LVL54:
				mov	r2, r6
				mov	r1, r4
				addw	r4, sp, #1028
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL55:
				mov	r2, r6
				mov	r1, r4
				addw	r4, sp, #2820
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL56:
		.LBE71:
		.LBB72:
		.LBB73:
				movs	r2, #240
				addw	r1, sp, #2836
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL57:
				ldm	r4, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL58:
		.LBE73:
		.LBE72:
		.LBB74:
		.LBB75:
				bl	_imp_newline(PLT)
		.LVL59:
				b	.L27
		.LVL60:
		.L30:
		.LBE75:
		.LBE74:
   31     %finish %else %if Answer = 'N' %start
   32       print string("No?"); newline
				ldr	r3, .L36+20
		.LPIC9:
				add	r3, pc
				addw	r5, r3, #1052
		.LBE59:
		.LBB60:
				mov	r6, #256
				mov	r2, r6
				mov	r1, r5
				addw	r4, sp, #1540
				mov	r0, r4
		.LVL38:
				bl	memcpy(PLT)
		.LVL39:
				mov	r2, r6
				mov	r1, r4
				addw	r4, sp, #1284
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL40:
				mov	r2, r6
				mov	r1, r4
				addw	r4, sp, #3076
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL41:
		.LBE61:
		.LBB62:
		.LBB63:
				movs	r2, #240
				addw	r1, sp, #3092
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL42:
				ldm	r4, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL43:
		.LBE63:
		.LBE62:
		.LBB64:
		.LBB65:
				bl	_imp_newline(PLT)
		.LVL44:
				b	.L27
		.LVL45:
		.L25:
		.LBE65:
		.LBE64:
		.LBB66:
   33     %finish %else %if Answer = 'X' %start
				cmp	r0, #78
				bne	.L30
		.LBB61:
   34       print string("
				mov	r5, #256
				mov	r2, r5
				ldr	r1, .L36+32
		.LPIC10:
				add	r1, pc
				addw	r1, r1, #1308
				addw	r4, sp, #1540
				mov	r0, r4
		.LVL64:
				bl	memcpy(PLT)
		.LVL65:
				mov	r2, r5
				mov	r1, r4
				addw	r4, sp, #1796
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL66:
				mov	r2, r5
				mov	r1, r4
				addw	r4, sp, #3332
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL67:
		.LBE78:
		.LBB79:
		.LBB80:
				movs	r2, #240
				addw	r1, sp, #3348
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL68:
				ldm	r4, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL69:
		.LBE80:
		.LBE79:
		.LBB81:
		.LBB82:
				movs	r0, #2
				bl	_imp_newlines(PLT)
		.LVL70:
		.LBE82:
		.LBE81:
		.LBB83:
		.LBB84:
				movs	r0, #0
				bl	exit(PLT)
		.LVL71:
		.L37:
				.align	2
		.L36:
				.word	_GLOBAL_OFFSET_TABLE_-(.LPIC3+4)
				.word	__stack_chk_guard(GOT)
				.word	_imp_event(GOT)
				.word	.LANCHOR0-(.LPIC5+4)
				.word	_imp_promptstr(GOT)
				.word	.LANCHOR0-(.LPIC9+4)
				.word	.LANCHOR0-(.LPIC8+4)
				.word	.LANCHOR0-(.LPIC4+4)
				.word	.LANCHOR0-(.LPIC10+4)
		.LBE84:
		.LBE83:
		.LFE186:
				.section	.rodata
				.align	2
				.set	.LANCHOR0,. + 0
		.LC0:
				.byte	21
				.ascii	"test-new/test113b.imp\000"
				.space	233
		.LC1:
				.byte	12
				.ascii	"What indeed?\000"
				.space	242
		.LC7:
				.ascii	"Y or N: \000"
				.space	6
				.space	1
		__PRETTY_FUNCTION__.9540:
				.ascii	"_imp_PROMPT\000"
		.LC2:
				.byte	8
				.ascii	"Starting\000"
				.space	246
		.LC3:
				.byte	4
				.ascii	"Yes!\000"
				.space	250
		.LC4:
				.byte	3
				.ascii	"No?\000"
				.space	251
		.LC5:
				.byte	39
				.ascii	"\012Exiting on trapped END OF FILE event!.\000"
				.space	215
				.section	.rodata.str1.4,"aMS",%progbits,1
				.align	2
		.LC6:
				.ascii	"\000"
		.Letext0:
   35 Exiting on trapped END OF FILE event!."); newlines(2)
				cmp	r0, #88
				beq	.L35
		.L31:
		.LVL61:
		.LBB76:
		.LBB77:
				movs	r0, #0
		.LVL62:
				bl	exit(PLT)
		.LVL63:
		.L35:
		.LBE77:
		.LBE76:
		.LBB78:
   36       %stop
   37     %finish %else %start
   38       %monitor %and %stop
   39     %finish
   40   %repeat
   41 %endofprogram
   39 Statements compiled
