summaryrefslogtreecommitdiffstats
path: root/qemu/tests/tcg/lm32/macros.inc
blob: 360ad53c9fc92ca7c3940f11ac382b0a860ef0d9 (plain)
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