]>
Commit | Line | Data |
---|---|---|
a2e67072 | 1 | #include "macros.inc" |
e7e9af5c MF |
2 | |
3 | test_suite mac16 | |
4 | ||
5 | #define ext16(v) (((v) & 0xffff) | (((v) & 0x8000) * 0x1ffffffe)) | |
6 | #define mul16(a, b) ((ext16(a) * ext16(b))) | |
7 | ||
8 | .macro assert_acc_value v | |
9 | rsr a4, ACCLO | |
10 | movi a5, (\v) & 0xffffffff | |
11 | assert eq, a4, a5 | |
12 | rsr a4, ACCHI | |
13 | movi a5, (\v) >> 32 | |
14 | sext a5, a5, 7 | |
15 | assert eq, a4, a5 | |
16 | .endm | |
17 | ||
18 | .macro init_reg sr, reg, val | |
19 | .if (\sr) | |
20 | movi a4, \val | |
21 | wsr a4, \reg | |
22 | .else | |
23 | movi \reg, \val | |
24 | .endif | |
25 | .endm | |
26 | ||
27 | .macro test_mulxx mulop, comb, s, t, a, b | |
28 | init_reg \comb & 2, \s, \a | |
29 | init_reg \comb & 1, \t, \b | |
30 | ||
31 | \mulop\().ll \s, \t | |
32 | assert_acc_value mul16(\a, \b) | |
33 | ||
34 | \mulop\().lh \s, \t | |
35 | assert_acc_value mul16(\a, (\b >> 16)) | |
36 | ||
37 | \mulop\().hl \s, \t | |
38 | assert_acc_value mul16((\a >> 16), \b) | |
39 | ||
40 | \mulop\().hh \s, \t | |
41 | assert_acc_value mul16((\a >> 16), (\b >> 16)) | |
42 | .endm | |
43 | ||
44 | test mul_aa | |
45 | test_mulxx mul.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f | |
46 | test_end | |
47 | ||
48 | test mul_ad | |
49 | test_mulxx mul.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f | |
50 | test_end | |
51 | ||
52 | test mul_da | |
53 | test_mulxx mul.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f | |
54 | test_end | |
55 | ||
56 | test mul_dd | |
57 | test_mulxx mul.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f | |
58 | test_end | |
59 | ||
60 | ||
61 | .macro init_acc iv | |
62 | movi a4, (\iv) & 0xffffffff | |
63 | wsr a4, ACCLO | |
64 | movi a4, (\iv) >> 32 | |
65 | wsr a4, ACCHI | |
66 | .endm | |
67 | ||
68 | .macro test_mulxxx mulop, comb, s, t, a, b, iv, op | |
69 | init_reg \comb & 2, \s, \a | |
70 | init_reg \comb & 1, \t, \b | |
71 | ||
72 | init_acc \iv | |
73 | \mulop\().ll \s, \t | |
74 | assert_acc_value (\iv \op mul16(\a, \b)) | |
75 | ||
76 | init_acc \iv | |
77 | \mulop\().lh \s, \t | |
78 | assert_acc_value (\iv \op mul16(\a, (\b >> 16))) | |
79 | ||
80 | init_acc \iv | |
81 | \mulop\().hl \s, \t | |
82 | assert_acc_value (\iv \op mul16((\a >> 16), \b)) | |
83 | ||
84 | init_acc \iv | |
85 | \mulop\().hh \s, \t | |
86 | assert_acc_value (\iv \op mul16((\a >> 16), (\b >> 16))) | |
87 | .endm | |
88 | ||
89 | ||
90 | test mula_aa | |
91 | test_mulxxx mula.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, + | |
92 | test_end | |
93 | ||
94 | test mula_ad | |
95 | test_mulxxx mula.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, + | |
96 | test_end | |
97 | ||
98 | test mula_da | |
99 | test_mulxxx mula.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + | |
100 | test_end | |
101 | ||
102 | test mula_dd | |
103 | test_mulxxx mula.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + | |
104 | test_end | |
105 | ||
106 | ||
107 | test muls_aa | |
108 | test_mulxxx muls.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, - | |
109 | test_end | |
110 | ||
111 | test muls_ad | |
112 | test_mulxxx muls.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, - | |
113 | test_end | |
114 | ||
115 | test muls_da | |
116 | test_mulxxx muls.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, - | |
117 | test_end | |
118 | ||
119 | test muls_dd | |
120 | test_mulxxx muls.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, - | |
121 | test_end | |
122 | ||
123 | test ldinc | |
124 | movi a2, 1f - 4 | |
125 | ldinc m0, a2 | |
126 | movi a3, 1f | |
127 | assert eq, a2, a3 | |
128 | rsr a3, m0 | |
129 | movi a4, 0x55aa137f | |
130 | assert eq, a3, a4 | |
131 | ldinc m1, a2 | |
132 | movi a3, 1f + 4 | |
133 | assert eq, a2, a3 | |
134 | rsr a3, m1 | |
135 | movi a4, 0x12345678 | |
136 | assert eq, a3, a4 | |
137 | ||
138 | .data | |
139 | 1: .word 0x55aa137f, 0x12345678, 0x137fa5a5 | |
140 | .text | |
141 | test_end | |
142 | ||
143 | test lddec | |
144 | movi a2, 1f | |
145 | lddec m2, a2 | |
146 | movi a3, 1f - 4 | |
147 | assert eq, a2, a3 | |
148 | rsr a3, m2 | |
149 | movi a4, 0x12345678 | |
150 | assert eq, a3, a4 | |
151 | lddec m3, a2 | |
152 | movi a3, 1f - 8 | |
153 | assert eq, a2, a3 | |
154 | rsr a3, m3 | |
155 | movi a4, 0x55aa137f | |
156 | assert eq, a3, a4 | |
157 | .data | |
158 | .word 0x55aa137f, 0x12345678 | |
159 | 1: | |
160 | .text | |
161 | test_end | |
162 | ||
163 | ||
164 | .macro test_mulxxx_ld mulop, ldop, comb, w, x, s, t, a, b, iv, op | |
165 | init_reg \comb & 2, \s, \a | |
166 | init_reg \comb & 1, \t, \b | |
167 | ||
168 | init_acc \iv | |
169 | \mulop\().ll.\ldop \w, \x, \s, \t | |
170 | assert_acc_value (\iv \op mul16(\a, \b)) | |
171 | ||
172 | init_acc \iv | |
173 | \mulop\().lh.\ldop \w, \x, \s, \t | |
174 | assert_acc_value (\iv \op mul16(\a, (\b >> 16))) | |
175 | ||
176 | init_acc \iv | |
177 | \mulop\().hl.\ldop \w, \x, \s, \t | |
178 | assert_acc_value (\iv \op mul16((\a >> 16), \b)) | |
179 | ||
180 | init_acc \iv | |
181 | \mulop\().hh.\ldop \w, \x, \s, \t | |
182 | assert_acc_value (\iv \op mul16((\a >> 16), (\b >> 16))) | |
183 | .endm | |
184 | ||
185 | test mula_da_ldinc | |
186 | movi a2, 1f - 4 | |
187 | test_mulxxx_ld mula.da, ldinc, 2, m1, a2, m1, a3, \ | |
188 | 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + | |
189 | movi a3, 1f + 12 | |
190 | assert eq, a2, a3 | |
191 | rsr a2, m1 | |
192 | movi a3, 0x12345678 | |
193 | assert eq, a2, a3 | |
194 | .data | |
195 | 1: .word 0xf7315a5a, 0xf7315a5a, 0xf7315a5a, 0x12345678 | |
196 | .text | |
197 | test_end | |
198 | ||
199 | test mula_dd_ldinc | |
200 | movi a2, 1f - 4 | |
201 | test_mulxxx_ld mula.dd, ldinc, 3, m2, a2, m1, m2, \ | |
202 | 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + | |
203 | movi a3, 1f + 12 | |
204 | assert eq, a2, a3 | |
205 | rsr a2, m2 | |
206 | movi a3, 0x12345678 | |
207 | assert eq, a2, a3 | |
208 | .data | |
209 | 1: .word 0xa5a5137f, 0xa5a5137f, 0xa5a5137f, 0x12345678 | |
210 | .text | |
211 | test_end | |
212 | ||
213 | test mula_da_lddec | |
214 | movi a2, 1f | |
215 | test_mulxxx_ld mula.da, lddec, 2, m1, a2, m1, a3, \ | |
216 | 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + | |
217 | movi a3, 1f - 16 | |
218 | assert eq, a2, a3 | |
219 | rsr a2, m1 | |
220 | movi a3, 0x12345678 | |
221 | assert eq, a2, a3 | |
222 | .data | |
223 | .word 0x12345678, 0xf7315a5a, 0xf7315a5a, 0xf7315a5a | |
224 | 1: | |
225 | .text | |
226 | test_end | |
227 | ||
228 | test mula_dd_lddec | |
229 | movi a2, 1f | |
230 | test_mulxxx_ld mula.dd, lddec, 3, m2, a2, m1, m2, \ | |
231 | 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + | |
232 | movi a3, 1f - 16 | |
233 | assert eq, a2, a3 | |
234 | rsr a2, m2 | |
235 | movi a3, 0x12345678 | |
236 | assert eq, a2, a3 | |
237 | .data | |
238 | .word 0x12345678, 0xa5a5137f, 0xa5a5137f, 0xa5a5137f | |
239 | 1: | |
240 | .text | |
241 | test_end | |
242 | ||
243 | test_suite_end |