1#include "macros.inc"
2
3test_suite load_store
4
5.macro load_ok_test op, type, data, value
6 .data
7 .align 4
81:
9 \type \data
10 .previous
11
12 reset_ps
13 set_vector kernel, 0
14 movi a3, 1b
15 addi a4, a4, 1
16 mov a5, a4
17 \op a5, a3, 0
18 movi a6, \value
19 assert eq, a5, a6
20.endm
21
22
23.macro load_unaligned_test will_trap, op, type, data, value
24 .data
25 .align 4
26 .byte 0
271:
28 \type \data
29 .previous
30
31 reset_ps
32 .ifeq \will_trap
33 set_vector kernel, 0
34 .else
35 set_vector kernel, 2f
36 .endif
37 movi a3, 1b
38 addi a4, a4, 1
39 mov a5, a4
401:
41 \op a5, a3, 0
42 .ifeq \will_trap
43 movi a6, \value
44 assert eq, a5, a6
45 .else
46 test_fail
472:
48 rsr a6, exccause
49 movi a7, 9
50 assert eq, a6, a7
51 rsr a6, epc1
52 movi a7, 1b
53 assert eq, a6, a7
54 rsr a6, excvaddr
55 assert eq, a6, a3
56 assert eq, a5, a4
57 .endif
58 reset_ps
59.endm
60#else
61.macro load_unaligned_test will_trap, op, type, data, value
62 .data
63 .align 4
641:
65 \type \data
66 .previous
67
68 reset_ps
69 set_vector kernel, 0
70 movi a3, 1b + 1
71 addi a4, a4, 1
72 mov a5, a4
73 \op a5, a3, 0
74 movi a6, \value
75 assert eq, a5, a6
76.endm
77#endif
78
79.macro store_ok_test op, type, value
80 .data
81 .align 4
82 .byte 0, 0, 0, 0x55
831:
84 \type 0
852:
86 .byte 0xaa
87 .previous
88
89 reset_ps
90 set_vector kernel, 0
91 movi a3, 1b
92 movi a5, \value
93 \op a5, a3, 0
94 movi a3, 2b
95 l8ui a5, a3, 0
96 movi a6, 0xaa
97 assert eq, a5, a6
98 movi a3, 1b - 1
99 l8ui a5, a3, 0
100 movi a6, 0x55
101 assert eq, a5, a6
102.endm
103
104
105.macro store_unaligned_test will_trap, op, nop, type, value
106 .data
107 .align 4
108 .byte 0x55
1091:
110 \type 0
1112:
112 .byte 0xaa
113 .previous
114
115 reset_ps
116 .ifeq \will_trap
117 set_vector kernel, 0
118 .else
119 set_vector kernel, 4f
120 .endif
121 movi a3, 1b
122 movi a5, \value
1233:
124 \op a5, a3, 0
125 .ifne \will_trap
126 test_fail
1274:
128 rsr a6, exccause
129 movi a7, 9
130 assert eq, a6, a7
131 rsr a6, epc1
132 movi a7, 3b
133 assert eq, a6, a7
134 rsr a6, excvaddr
135 assert eq, a6, a3
136 l8ui a5, a3, 0
137 assert eqi, a5, 0
138 .endif
139 reset_ps
140 movi a3, 2b
141 l8ui a5, a3, 0
142 movi a6, 0xaa
143 assert eq, a5, a6
144 movi a3, 1b - 1
145 l8ui a5, a3, 0
146 movi a6, 0x55
147 assert eq, a5, a6
148.endm
149#else
150.macro store_unaligned_test will_trap, sop, lop, type, value
151 .data
152 .align 4
153 .byte 0x55
1541:
155 \type 0
156 .previous
157
158 reset_ps
159 set_vector kernel, 0
160 movi a3, 1b
161 movi a5, \value
162 \sop a5, a3, 0
163 movi a3, 1b - 1
164 \lop a6, a3, 0
165 assert eq, a5, a6
166.endm
167#endif
168
169test load_ok
170 load_ok_test l16si, .short, 0x00001234, 0x00001234
171 load_ok_test l16si, .short, 0x000089ab, 0xffff89ab
172 load_ok_test l16ui, .short, 0x00001234, 0x00001234
173 load_ok_test l16ui, .short, 0x000089ab, 0x000089ab
174 load_ok_test l32i, .word, 0x12345678, 0x12345678
175
176 load_ok_test l32ai, .word, 0x12345678, 0x12345678
177#endif
178test_end
179
180#undef WILL_TRAP
181
182#define WILL_TRAP 0
183#else
184#define WILL_TRAP 1
185#endif
186
187test load_unaligned
188 load_unaligned_test WILL_TRAP, l16si, .short, 0x00001234, 0x00001234
189 load_unaligned_test WILL_TRAP, l16si, .short, 0x000089ab, 0xffff89ab
190 load_unaligned_test WILL_TRAP, l16ui, .short, 0x00001234, 0x00001234
191 load_unaligned_test WILL_TRAP, l16ui, .short, 0x000089ab, 0x000089ab
192 load_unaligned_test WILL_TRAP, l32i, .word, 0x12345678, 0x12345678
193
194 load_unaligned_test 1, l32ai, .word, 0x12345678, 0x12345678
195#endif
196test_end
197
198test store_ok
199 store_ok_test s16i, .short, 0x00001234
200 store_ok_test s32i, .word, 0x12345678
201
202 store_ok_test s32ri, .word, 0x12345678
203#endif
204test_end
205
206#undef WILL_TRAP
207
208#define WILL_TRAP 0
209#else
210#define WILL_TRAP 1
211#endif
212
213test store_unaligned
214 store_unaligned_test WILL_TRAP, s16i, l16ui, .short, 0x00001234
215 store_unaligned_test WILL_TRAP, s32i, l32i, .word, 0x12345678
216
217 store_unaligned_test 1, s32ri, l32i, .word, 0x12345678
218#endif
219test_end
220
221test_suite_end
222