         Edinburgh IMP77 Compiler - Version 8.4
    1 %BEGIN
				.option nopic
		.Ltext0:
				.align	1
		CHECK.6008:
		.LFB186:
		.LVL12:
				add	sp,sp,-2032
				sd	ra,2024(sp)
				sd	s0,2016(sp)
				sd	s1,2008(sp)
				sd	s2,2000(sp)
				sd	s3,1992(sp)
				sd	s4,1984(sp)
				sd	s5,1976(sp)
				sd	s6,1968(sp)
				sd	s7,1960(sp)
				sd	s8,1952(sp)
				sd	s9,1944(sp)
				li	t1,-4096
				add	t1,t1,-1936
				add	sp,sp,t1
				lui	a5,%hi(__stack_chk_guard)
				ld	a5,%lo(__stack_chk_guard)(a5)
				li	s2,8192
				add	a4,s2,-248
				add	a3,sp,16
				add	a4,a4,a3
				sd	a5,0(a4)
				add	a5,s2,-256
				add	a5,a5,a3
				add	a4,s2,-160
				add	a3,sp,32
				add	a4,a4,a3
				sd	a4,0(a5)
    2 %owninteger Fail=0
				call	_imp_initialise
		.LVL13:
    3 %STRING(30)S,T,U
    4 %ROUTINESPEC CHECK(%STRING(30) P,Q,R)
    5       S=""; T=S
    6       PRINTSTRING("BUG0") %UNLESS T=""
    7       CHECK(S,T,"")
				li	s0,-8192
				add	a1,s0,1520
				li	a2,30
				add	a5,s2,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	a1,a5,a1
				add	a5,s2,-512
				add	a0,a4,a5
				call	_imp_strncpy
		.LVL14:
				li	s1,-8192
				add	s6,sp,528
				li	a2,256
				add	a5,s9,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	a1,a5,-1552
				mv	a0,s6
				call	memcpy
		.LVL18:
				add	s7,sp,272
				li	a2,256
				add	a5,s9,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	a1,a5,-1296
				mv	a0,s7
				call	memcpy
		.LVL19:
				add	s2,sp,16
				li	a2,256
				mv	a1,s3
				mv	a0,s2
				call	memcpy
		.LVL20:
				add	s3,s1,240
				li	s8,8192
				add	a5,s8,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	s3,a5,s3
				add	s4,s1,496
				add	a5,s8,-240
				add	a5,a5,a4
				add	s4,a5,s4
				add	s5,s1,752
				add	a5,s8,-240
				add	a5,a5,a4
				add	s5,a5,s5
				add	t2,s8,-512
				add	t2,t2,a4
				mv	a2,s3
				mv	a1,s4
				mv	a0,s5
				call	CHECK.6008
		.LVL21:
    8       S="ABCD"; T=S
				add	a1,s0,2032
				add	a5,s2,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	a1,a5,a1
				mv	a0,s1
				call	_imp_strcmp
		.LVL16:
				bnez	a0,.L17
		.L9:
		.LBB48:
    9       CHECK(S,T,"ABCD")
				li	a2,256
				add	a5,s9,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	a1,a5,-272
				mv	a0,s2
				call	memcpy
		.LVL27:
				li	a2,256
				add	a5,s9,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	a1,a5,-16
				mv	a0,s7
				call	memcpy
		.LVL28:
				li	a2,256
				mv	a1,s1
				mv	a0,s6
				call	memcpy
		.LVL29:
				add	t2,s8,-512
				add	a5,sp,16
				add	t2,t2,a5
				mv	a2,s5
				mv	a1,s4
				mv	a0,s3
				call	CHECK.6008
		.LVL30:
		.LBB50:
   10       %UNLESS "MAST"<="MEST"<="MOST" %THEN Fail=1 %and PRINTSTRING("BUG1")
				add	a1,s0,-784
				li	a2,30
				add	a5,s8,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	a1,a5,a1
				add	a0,s8,-512
				add	a0,a0,a4
				call	_imp_strncpy
		.LVL22:
   11       S="MAST"; T="MEST"; U="MOST"
				li	a2,256
				lui	a1,%hi(.LANCHOR0+256)
				addi	a1,a1,%lo(.LANCHOR0+256)
				li	s0,8192
				add	a0,s0,-768
				add	a5,sp,16
				add	a0,a0,a5
				call	memcpy
		.LVL48:
				li	a5,-4096
				mv	a4,s0
				add	a3,s0,-240
				add	a2,sp,16
				add	a3,a3,a2
				add	a5,a3,a5
				sd	a5,8(sp)
				add	s0,a5,-1808
				li	a2,256
				mv	s1,a4
				add	a1,a4,-768
				add	a5,sp,16
				add	a1,a1,a5
				mv	a0,s0
				call	memcpy
		.LVL49:
				li	a2,256
				mv	a1,s0
				add	a0,s1,-1536
				add	a5,sp,16
				add	a0,a0,a5
				call	memcpy
		.LVL50:
		.LBE60:
		.LBB61:
		.LBB62:
				li	s0,-8192
				li	a2,256
				add	a1,s1,-1536
				add	a5,sp,16
				add	a1,a1,a5
				add	a0,sp,528
				call	memcpy
		.LVL51:
				add	a0,s0,752
				add	a5,s1,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	a0,a5,a0
				call	_imp_printstring
		.LVL52:
				j	.L9
		.LVL53:
		.L18:
		.LBE62:
		.LBE61:
		.LBB63:
				li	a0,-4096
				add	a1,a0,1008
				add	a0,a0,752
				li	a4,8192
				add	a5,a4,-240
				add	a3,sp,16
				add	a5,a5,a3
				add	a1,a5,a1
				add	a5,a4,-240
				add	a5,a5,a3
				add	a0,a5,a0
				call	_imp_strcmp
		.LVL54:
				bgtz	a0,.L10
		.LBE63:
				j	.L11
		.LVL55:
		.L19:
		.LBB64:
				li	a0,-8192
				add	a1,a0,1264
				add	a0,a0,1008
				li	a4,8192
				add	a5,a4,-240
				add	a3,sp,16
				add	a5,a5,a3
				add	a1,a5,a1
				add	a5,a4,-240
				add	a5,a5,a3
				add	a0,a5,a0
				call	_imp_strcmp
		.LVL56:
				bgtz	a0,.L12
		.LBE64:
				j	.L13
		.L20:
		.LBB65:
   12       %UNLESS S<=T<=U %THEN Fail=1 %and PRINTSTRING("BUG2")
				add	a1,s0,1776
				add	s1,s0,1008
				add	a5,s2,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	s1,a5,s1
				li	a2,30
				add	a5,s2,-240
				add	a5,a5,a4
				add	a1,a5,a1
				mv	a0,s1
				call	_imp_strncpy
		.LVL15:
   13       %if Fail=0 %then printstring("TEST OK")
				li	s0,-4096
				add	a1,s0,1520
				li	a2,30
				li	s3,8192
				add	a5,s3,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	a1,a5,a1
				add	a0,s3,-512
				add	a0,a0,a4
				call	_imp_strncpy
		.LVL37:
				lui	a5,%hi(FAIL.6001)
				lw	a5,%lo(FAIL.6001)(a5)
				beqz	a5,.L20
		.L14:
		.LVL46:
		.LBB58:
		.LBB59:
				li	a0,0
				call	exit
		.LVL47:
		.L17:
		.LBE59:
		.LBE58:
		.LBB60:
   14       %ROUTINE CHECK(%STRING(30) P,Q,R)
				add	sp,sp,-816
				sd	ra,808(sp)
				sd	s0,800(sp)
				sd	s1,792(sp)
				sd	s2,784(sp)
				mv	s2,a0
				mv	s0,a1
				mv	s1,a2
				lui	a5,%hi(__stack_chk_guard)
				ld	a5,%lo(__stack_chk_guard)(a5)
				sd	a5,776(sp)
				li	a2,256
				lui	a1,%hi(.LANCHOR0+1056)
				addi	a1,a1,%lo(.LANCHOR0+1056)
				li	s1,8192
				add	a0,s1,-768
				add	a5,sp,16
				add	a0,a0,a5
				call	memcpy
		.LVL57:
				li	a2,256
				add	a1,s1,-768
				add	a5,sp,16
				add	a1,a1,a5
				add	a0,s1,-1792
				add	a0,a0,a5
				call	memcpy
		.LVL58:
				li	a2,256
				add	a1,s1,-1792
				add	a5,sp,16
				add	a1,a1,a5
				add	a0,s1,-768
				add	a0,a0,a5
				call	memcpy
		.LVL59:
		.LBE65:
		.LBB66:
		.LBB67:
				li	s0,-8192
				li	a2,256
				add	a1,s1,-768
				add	a5,sp,16
				add	a1,a1,a5
				add	a0,sp,16
				call	memcpy
		.LVL60:
				add	a0,s0,240
				add	a5,s1,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	a0,a5,a0
				call	_imp_printstring
		.LVL61:
				j	.L14
		.LBE67:
		.LBE66:
		.LFE185:
				.section	.rodata
				.align	3
				.set	.LANCHOR0,. + 0
		.LC8:
				.byte	11
				.string	"CHECK FAILS"
				.zero	243
		.LC0:
				.byte	4
				.string	"BUG0"
				.zero	250
		.LC9:
				.string	"ABCD"
				.zero	25
				.zero	2
		.LC5:
				.byte	4
				.string	"BUG1"
				.zero	250
		.LC6:
				.byte	4
				.string	"BUG2"
				.zero	250
		.LC7:
				.byte	7
				.string	"TEST OK"
				.zero	247
				.section	.sbss,"aw",@nobits
				.align	2
		FAIL.6001:
				.zero	4
		.Letext0:
   15       Fail=1 %and PRINTSTRING("CHECK FAILS") %UNLESS %C
				li	s0,-4096
				li	s9,4096
				add	a5,s9,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	s3,a5,-1040
				li	a2,256
				li	a1,0
				mv	a0,s3
				call	memset
		.LVL17:
		.LBE48:
				add	a1,s0,-528
				add	a0,s1,1008
				li	a2,30
				add	a5,s8,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	a1,a5,a1
				add	a5,s8,-240
				add	a5,a5,a4
				add	a0,a5,a0
				call	_imp_strncpy
		.LVL23:
		.LBB49:
				add	a1,s0,752
				add	a0,s0,496
				add	a5,s8,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	a1,a5,a1
				add	a5,s8,-240
				add	a5,a5,a4
				add	a0,a5,a0
				call	_imp_strcmp
		.LVL31:
				blez	a0,.L18
		.L10:
		.LBE50:
				lui	a5,%hi(FAIL.6001)
				li	a4,1
				sw	a4,%lo(FAIL.6001)(a5)
		.LBB51:
				li	a2,256
				lui	a1,%hi(.LANCHOR0+544)
				addi	a1,a1,%lo(.LANCHOR0+544)
				li	s0,8192
				add	a0,s0,-768
				add	a5,sp,16
				add	a0,a0,a5
				call	memcpy
		.LVL32:
				li	a5,-4096
				mv	a4,s0
				add	a3,s0,-240
				add	a2,sp,16
				add	a3,a3,a2
				add	a5,a3,a5
				sd	a5,8(sp)
				add	s0,a5,1264
				li	a2,256
				mv	s1,a4
				add	a1,a4,-768
				add	a5,sp,16
				add	a1,a1,a5
				mv	a0,s0
				call	memcpy
		.LVL33:
				li	a2,256
				mv	a1,s0
				add	a0,s1,-1280
				add	a5,sp,16
				add	a0,a0,a5
				call	memcpy
		.LVL34:
		.LBE51:
		.LBB52:
		.LBB53:
				li	s0,-8192
				li	a2,256
				add	a1,s1,-1280
				add	a5,sp,16
				add	a1,a1,a5
				add	a0,sp,16
				call	memcpy
		.LVL35:
				add	a0,s0,240
				add	a5,s1,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	a0,a5,a0
				call	_imp_printstring
		.LVL36:
		.L11:
		.LBE53:
		.LBE52:
   16          P=S %AND Q=R %AND P=Q=R
   17       %END
				mv	a1,t2
				call	_imp_strcmp
		.LVL0:
				bnez	a0,.L2
				li	a2,226
				li	a1,0
				add	a5,s8,-738
				add	a4,sp,16
				add	a0,a4,a5
				call	memset
		.LVL24:
				lui	a5,%hi(.LANCHOR0)
				addi	a5,a5,%lo(.LANCHOR0)
				lbu	a4,512(a5)
				add	a3,s8,-767
				add	a2,sp,16
				add	a3,a3,a2
				sb	a4,0(a3)
				lbu	a4,513(a5)
				add	a3,s8,-766
				add	a3,a3,a2
				sb	a4,0(a3)
				lbu	a4,514(a5)
				add	a3,s8,-765
				add	a3,a3,a2
				sb	a4,0(a3)
				lbu	a4,515(a5)
				add	a3,s8,-764
				add	a3,a3,a2
				sb	a4,0(a3)
				lbu	a5,516(a5)
				add	a4,s8,-763
				mv	a3,a2
				add	a4,a4,a2
				sb	a5,0(a4)
				li	a2,25
				li	a1,0
				add	a5,s8,-762
				add	a0,a3,a5
				call	memset
		.LVL25:
				li	a5,4
				add	a4,s8,-768
				add	a3,sp,16
				add	a4,a4,a3
				sb	a5,0(a4)
				add	a5,s9,-240
				add	a5,a5,a3
				add	s1,a5,240
				li	a2,256
				add	a5,s8,-768
				add	a1,a3,a5
				mv	a0,s1
				call	memcpy
		.LVL26:
		.LBE49:
				mv	a1,s1
				add	a0,s3,-512
				add	a5,sp,16
				add	a0,a0,a5
				call	_imp_strcmp
		.LVL40:
				blez	a0,.L19
		.L12:
		.LBE54:
				lui	a5,%hi(FAIL.6001)
				li	a4,1
				sw	a4,%lo(FAIL.6001)(a5)
		.LBB55:
				li	a2,256
				lui	a1,%hi(.LANCHOR0+800)
				addi	a1,a1,%lo(.LANCHOR0+800)
				li	s1,8192
				add	a0,s1,-768
				add	a5,sp,16
				add	a0,a0,a5
				call	memcpy
		.LVL41:
				li	a2,256
				add	a1,s1,-768
				add	a5,sp,16
				add	a1,a1,a5
				add	a0,s1,-2048
				add	a0,a0,a5
				call	memcpy
		.LVL42:
				li	a2,256
				add	a1,s1,-2048
				add	a5,sp,16
				add	a1,a1,a5
				add	a0,s1,-1024
				add	a0,a0,a5
				call	memcpy
		.LVL43:
		.LBE55:
		.LBB56:
		.LBB57:
				li	s0,-8192
				li	a2,256
				add	a1,s1,-1024
				add	a5,sp,16
				add	a1,a1,a5
				add	a0,sp,16
				call	memcpy
		.LVL44:
				add	a0,s0,240
				add	a5,s1,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	a0,a5,a0
				call	_imp_printstring
		.LVL45:
		.L13:
		.LBE57:
		.LBE56:
   18 %ENDOFPROGRAM
				ld	a4,776(sp)
				lui	a5,%hi(__stack_chk_guard)
				ld	a5,%lo(__stack_chk_guard)(a5)
				bne	a4,a5,.L7
				ld	ra,808(sp)
				ld	s0,800(sp)
				ld	s1,792(sp)
				ld	s2,784(sp)
				add	sp,sp,816
				jr	ra
		.L6:
		.LVL7:
		.LBB47:
				mv	a1,s0
				mv	a0,s2
				call	_imp_strcmp
		.LVL8:
				bnez	a0,.L2
				mv	a1,s1
				mv	a0,s0
				call	_imp_strcmp
		.LVL9:
				bnez	a0,.L2
		.LBE47:
				j	.L1
		.LVL10:
		.L7:
				call	__stack_chk_fail
		.LVL11:
		.LFE186:
				.align	1
				.globl	main
		main:
		.LFB185:
				add	a1,s0,1776
				li	s2,-8192
				add	s1,s2,1008
				add	a5,s3,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	s1,a5,s1
				li	a2,30
				add	a5,s3,-240
				add	a5,a5,a4
				add	a1,a5,a1
				mv	a0,s1
				call	_imp_strncpy
		.LVL38:
				add	a1,s0,2032
				add	a0,s2,1264
				li	a2,30
				add	a5,s3,-240
				add	a4,sp,16
				add	a5,a5,a4
				add	a1,a5,a1
				add	a5,s3,-240
				add	a5,a5,a4
				add	a0,a5,a0
				call	_imp_strncpy
		.LVL39:
		.LBB54:
   21 Statements compiled
				mv	a1,s1
				mv	a0,s0
				call	_imp_strcmp
		.LVL1:
				beqz	a0,.L6
		.L2:
				lui	a5,%hi(FAIL.6001)
				li	a4,1
				sw	a4,%lo(FAIL.6001)(a5)
		.LBB44:
				li	a2,256
				lui	a1,%hi(.LANCHOR0)
				addi	a1,a1,%lo(.LANCHOR0)
				add	a0,sp,520
				call	memcpy
		.LVL2:
				li	a2,256
				add	a1,sp,520
				add	a0,sp,264
				call	memcpy
		.LVL3:
				li	a2,256
				add	a1,sp,264
				add	a0,sp,520
				call	memcpy
		.LVL4:
		.LBE44:
		.LBB45:
		.LBB46:
				li	a2,256
				add	a1,sp,520
				mv	a0,sp
				call	memcpy
		.LVL5:
				mv	a0,sp
				call	_imp_printstring
		.LVL6:
		.L3:
		.L1:
		.LBE46:
		.LBE45:
