
.macro test_name name
	.data
tn_\name:
	.asciz "\name"
	.text
	mvhi r13, hi(tn_\name)
	ori r13, r13, lo(tn_\name)
	sw (r12+8), r13
_\name:
.endm

.macro load reg val
	mvhi \reg, hi(\val)
	ori \reg, \reg, lo(\val)
.endm

.macro tc_pass
	mvi r13, 0
	sw (r12+4), r13
.endm

.macro tc_fail
	mvi r13, 1
	sw (r12+4), r13
.endm

.macro check_r3 val
	mvhi r13, hi(\val)
	ori r13, r13, lo(\val)
	be r3, r13, 991f
	tc_fail
	bi 992f
991:
	tc_pass
992:
.endm

.macro check_reg reg val
	mvhi r13, hi(\val)
	ori r13, r13, lo(\val)
	be \reg, r13, 991f
	tc_fail
	bi 992f
991:
	tc_pass
992:
.endm

.macro check_mem adr val
	mvhi r13, hi(\adr)
	ori r13, r13, lo(\adr)
	mvhi r14, hi(\val)
	ori r14, r14, lo(\val)
	lw r13, (r13+0)
	be r13, r14, 991f
	tc_fail
	bi 992f
991:
	tc_pass
992:
.endm

.macro check_excp excp
	andi r13, r25, \excp
	mv r25, r0
	bne r13, r0, 991f
	tc_fail
	bi 992f
991:
	tc_pass
992:
.endm

.macro check_csr csr val
	mvhi r13, hi(\val)
	ori r13, r13, lo(\val)
    rcsr r14, \csr
	be r13, r14, 991f
	tc_fail
	bi 992f
991:
	tc_pass
992:
.endm

.macro start
	.global _main
	.text
_main:
	mvhi r12, hi(0xffff0000)      # base address of test block
	ori r12, r12, lo(0xffff0000)
.endm

.macro end
	sw (r12+0), r0
1:
	bi 1b
.endm

# base +
#  0  ctrl
#  4  pass/fail
#  8  ptr to test name
