1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
.equ MAX_TESTNAME_LEN, 32
.macro test_name name
.data
tn_\name:
.ascii "\name"
.space MAX_TESTNAME_LEN - (. - tn_\name), ' '
.text
.global \name
\name:
addi sp, sp, -12
sw (sp+4), r1
sw (sp+8), r2
sw (sp+12), r3
mvi r1, 1
mvhi r2, hi(tn_\name)
ori r2, r2, lo(tn_\name)
mvi r3, MAX_TESTNAME_LEN
calli _write
lw r3, (sp+12)
lw r2, (sp+8)
lw r1, (sp+4)
addi sp, sp, 12
.endm
.macro load reg val
mvhi \reg, hi(\val)
ori \reg, \reg, lo(\val)
.endm
.macro tc_pass
calli _tc_pass
.endm
.macro tc_fail
addi r12, r12, 1
calli _tc_fail
.endm
.macro check_r3 val
mvhi r13, hi(\val)
ori r13, r13, lo(\val)
be r3, r13, 1f
tc_fail
bi 2f
1:
tc_pass
2:
.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, 1f
tc_fail
bi 2f
1:
tc_pass
2:
.endm
.macro check_excp excp
andi r13, r25, \excp
bne r13, r0, 1f
tc_fail
bi 2f
1:
tc_pass
2:
.endm
.macro start
.global _main
.text
_main:
mvi r12, 0
.endm
.macro end
mv r1, r12
calli _exit
.endm
# base +
# 0 ctrl
# 4 pass/fail
# 8 ptr to test name
|