]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - sim/testsuite/sim/fr30/testutils.inc
Tue Dec 8 13:16:53 1998 Dave Brolley <brolley@cygnus.com>
[thirdparty/binutils-gdb.git] / sim / testsuite / sim / fr30 / testutils.inc
1 # r0, r4-r6 are used as tmps, consider them call clobbered by these macros.
2
3 .macro start
4 .data
5 failmsg:
6 .ascii "fail\n"
7 passmsg:
8 .ascii "pass\n"
9 .text
10 .global _start
11 _start:
12 ldi32 0x7fffc,sp ; TODO -- what's a good value for this?
13 .endm
14
15 ; Exit with return code
16 .macro exit rc
17 ldi32 \rc,r4
18 ldi32 #1,r0
19 int #10
20 .endm
21
22 ; Pass the test case
23 .macro pass
24 ldi32 #5,r6
25 ldi32 #passmsg,r5
26 ldi32 #1,r4
27 ldi32 #5,r0
28 int #10
29 exit #0
30 .endm
31
32 ; Fail the testcase
33 .macro fail
34 ldi32 #5,r6
35 ldi32 #failmsg,r5
36 ldi32 #1,r4
37 ldi32 #5,r0
38 int #10
39 exit #1
40 .endm
41
42 ; Load an immediate value into a general register
43 ; TODO: use minimal sized insn
44 .macro mvi_h_gr val reg
45 ldi32 \val,\reg
46 .endm
47
48 ; Load a general register into another general register
49 .macro mvr_h_gr src targ
50 mov \src,\targ
51 .endm
52
53 ; Store an immediate into a word in memory
54 .macro mvi_h_mem val addr
55 mvi_h_gr \val r4
56 mvr_h_mem r4,\addr
57 .endm
58
59 ; Store a register into a word in memory
60 .macro mvr_h_mem reg addr
61 st \reg,@\addr
62 .endm
63
64 ; Load a word value from memory
65 .macro ldmem_h_gr addr reg
66 ld @\addr,\reg
67 .endm
68
69 ; Add 2 general registers
70 .macro add_h_gr reg1 reg2
71 add \reg1,\reg2
72 .endm
73
74 ; Increment a register by and immediate
75 .macro inci_h_gr inc reg
76 mvi_h_gr \inc,r4
77 add r4,\reg
78 .endm
79
80 ; Test the value of an immediate against a general register
81 .macro test_h_gr val reg
82 .if (\val >= 0) && (\val <= 15)
83 cmp \val,\reg
84 .else
85 .if (\val < 0) && (\val >= -16)
86 cmp2 \val,\reg
87 .else
88 ldi32 \val,r4
89 cmp r4,\reg
90 .endif
91 .endif
92 beq test_gr\@
93 fail
94 test_gr\@:
95 .endm
96
97 ; compare two general registers
98 .macro testr_h_gr reg1 reg2
99 cmp \reg1,\reg2
100 beq testr_gr\@
101 fail
102 testr_gr\@:
103 .endm
104
105 ; Test the value of an immediate against a dedicated register
106 .macro test_h_dr val reg
107 mov \reg,r5
108 test_h_gr \val r5
109 .endm
110
111 ; Test the value of an general register against a dedicated register
112 .macro testr_h_dr gr dr
113 mov \dr,r5
114 testr_h_gr \gr r5
115 .endm
116
117 ; Compare an immediate with word in memory
118 .macro test_h_mem val addr
119 ldmem_h_gr \addr r5
120 test_h_gr \val r5
121 .endm
122
123 ; Compare a general register with word in memory
124 .macro testr_h_mem reg addr
125 ldmem_h_gr \addr r5
126 testr_h_gr \reg r5
127 .endm
128
129 ; Set the condition codes
130 .macro set_cc mask
131 andccr 0xf0
132 orccr \mask
133 .endm
134
135 ; Set the stack mode
136 .macro set_s_user
137 orccr 0x20
138 .endm
139
140 .macro set_s_system
141 andccr 0x1f
142 .endm
143
144 ; Test the condition codes
145 .macro test_cc N Z V C
146 .if (\N == 1)
147 bp fail\@
148 .else
149 bn fail\@
150 .endif
151 .if (\Z == 1)
152 bne fail\@
153 .else
154 beq fail\@
155 .endif
156 .if (\V == 1)
157 bnv fail\@
158 .else
159 bv fail\@
160 .endif
161 .if (\C == 1)
162 bnc fail\@
163 .else
164 bc fail\@
165 .endif
166 bra test_cc\@
167 fail\@:
168 fail
169 test_cc\@:
170 .endm