3 unsigned long long mem
[] = { 0x3FF0000000000001ULL
, 0x3FF0000000000000ULL
,
4 0x00000000ffffffffULL
, 0x1234563388994400ULL
,
5 0x0000004412369801ULL
, 0x111111eeeeeee220ULL
,
6 0xAAAAABBBBBCCCDDDULL
, 0xaa55cc2266dd2200ULL
,
7 0x3FF0045698720001ULL
, 0x3FF0000000000000ULL
,
8 0x00000000ffffffffULL
, 0x0007200059762458ULL
,
9 0xaa55c200abcdefabULL
, 0x852369741afedbc6ULL
};
13 #define TEST1(instruction, RD, RS, RT, RSval, RTval) \
15 unsigned long long result; \
17 "move $"#RS", %1\n\t" \
18 "move $"#RT", %2\n\t" \
19 instruction" $"#RD", $"#RS", $"#RT", 1\n\t" \
20 "move %0, $"#RD"\n\t" \
22 : "r"(RSval), "r"(RTval) \
23 : #RD, #RS, #RT, "memory" \
25 printf(instruction":: %llx\n", result); \
28 #define TEST2(instruction, RS, RT, RSval, RTval) \
30 unsigned long long result; \
32 "move $"#RS", %1\n\t" \
33 "move $"#RT", %2\n\t" \
34 instruction" $"#RS", $"#RT", 1\n\t" \
35 "move %0, $"#RS"\n\t" \
37 : "r"(RSval), "r"(RTval) \
38 : #RS, #RT, "memory" \
40 printf(instruction":: %llx\n", result); \
43 #define TEST3(instruction, RS, RSval) \
45 unsigned long long result; \
47 "move $"#RS", %1\n\t" \
48 instruction" $"#RS", $"#RS", 1\n\t" \
49 "move %0, $"#RS"\n\t" \
54 printf(instruction":: %llx\n", result); \
57 #define TEST4(instruction, RS, RT, RSval, RTval) \
59 unsigned long long result; \
61 "move $"#RS", %1\n\t" \
62 "move $"#RT", %2\n\t" \
63 instruction" $"#RS", $"#RT" \n\t" \
64 "move %0, $"#RS"\n\t" \
66 : "r"(RSval), "r"(RTval) \
67 : #RS, #RT, "memory" \
69 printf(instruction":: %llx\n", result); \
72 #define TEST5(instruction, RD, RS, RT, RSval, RTval) \
74 unsigned long long result; \
76 "move $"#RS", %1\n\t" \
77 "move $"#RT", %2\n\t" \
78 instruction" $"#RD", $"#RS", $"#RT" \n\t" \
79 "move %0, $"#RD"\n\t" \
81 : "r"(RSval), "r"(RTval) \
82 : #RD, #RS, #RT, "memory" \
84 printf(instruction":: %llx\n", result); \
87 #define TEST6(instruction, RSval, RD) \
89 unsigned long long out = 0; \
90 __asm__ __volatile__( \
92 ".set noreorder \n\t" \
93 "lbl"instruction#RSval ": \n\t" \
94 "or $0, $0, $0 \n\t" \
95 "and $0, $0, $0 \n\t" \
96 instruction" $"#RD ", lbl"instruction#RSval "\n\t" \
97 "move %0, $"#RD "\n\t" \
103 printf("%s :: out: 0x%llx\n", instruction, out); \
109 #if (__mips_isa_rev>=6)
111 TEST1("dalign" , t0
, t1
, t2
, mem
[0], 0);
112 TEST1("dalign" , t1
, t2
, t3
, mem
[1], 1);
113 TEST1("dalign" , t2
, t3
, v0
, mem
[2], 2);
114 TEST1("dalign" , t3
, v0
, v1
, mem
[3], 3);
115 TEST1("dalign" , v0
, v1
, a0
, mem
[4], 4);
116 TEST1("dalign" , v1
, a0
, a1
, mem
[5], 5);
117 TEST1("dalign" , a0
, a1
, a2
, mem
[6], 6);
118 TEST1("dalign" , a1
, a2
, a3
, mem
[7], 7);
119 TEST1("dalign" , s0
, s1
, s2
, mem
[8], 8);
120 TEST1("dalign" , s1
, s2
, s3
, mem
[9], 9);
121 TEST1("dalign" , s2
, s3
, s4
, mem
[10], 10);
122 TEST1("dalign" , s3
, s4
, s5
, mem
[11], 11);
123 TEST1("dalign" , s4
, s5
, s6
, mem
[12], 12);
124 TEST1("dalign" , s5
, s6
, s7
, mem
[13], 13);
127 TEST2("daui" , t0
, t1
, mem
[0], 0);
128 TEST2("daui" , t1
, t2
, mem
[1], 1);
129 TEST2("daui" , t2
, t3
, mem
[2], 2);
130 TEST2("daui" , t3
, v0
, mem
[3], 3);
131 TEST2("daui" , v0
, v1
, mem
[4], 4);
132 TEST2("daui" , v1
, a0
, mem
[5], 5);
133 TEST2("daui" , a0
, a1
, mem
[6], 6);
134 TEST2("daui" , a1
, a2
, mem
[7], 7);
135 TEST2("daui" , a2
, a3
, mem
[8], 8);
136 TEST2("daui" , s0
, s1
, mem
[9], 9);
137 TEST2("daui" , s2
, s3
, mem
[10], 10);
138 TEST2("daui" , s3
, s4
, mem
[11], 11);
139 TEST2("daui" , s4
, s5
, mem
[12], 12);
140 TEST2("daui" , s5
, s6
, mem
[13], 13);
143 TEST3("dahi" , t0
, mem
[0]);
144 TEST3("dahi" , t1
, mem
[1]);
145 TEST3("dahi" , t2
, mem
[2]);
146 TEST3("dahi" , t3
, mem
[3]);
147 TEST3("dahi" , v0
, mem
[4]);
148 TEST3("dahi" , v1
, mem
[5]);
149 TEST3("dahi" , a0
, mem
[6]);
150 TEST3("dahi" , a1
, mem
[7]);
151 TEST3("dahi" , a2
, mem
[8]);
152 TEST3("dahi" , a3
, mem
[9]);
153 TEST3("dahi" , s0
, mem
[10]);
154 TEST3("dahi" , s1
, mem
[11]);
155 TEST3("dahi" , s2
, mem
[12]);
156 TEST3("dahi" , s3
, mem
[13]);
159 TEST3("dati" , t0
, mem
[0]);
160 TEST3("dati" , t1
, mem
[1]);
161 TEST3("dati" , t2
, mem
[2]);
162 TEST3("dati" , t3
, mem
[3]);
163 TEST3("dati" , v0
, mem
[4]);
164 TEST3("dati" , v1
, mem
[5]);
165 TEST3("dati" , a0
, mem
[6]);
166 TEST3("dati" , a1
, mem
[7]);
167 TEST3("dati" , a2
, mem
[8]);
168 TEST3("dati" , a3
, mem
[9]);
169 TEST3("dati" , s0
, mem
[10]);
170 TEST3("dati" , s1
, mem
[11]);
171 TEST3("dati" , s2
, mem
[12]);
172 TEST3("dati" , s3
, mem
[13]);
174 printf("\ndbitswap\n");
175 TEST4("dbitswap" , t0
, t1
, mem
[0], 0);
176 TEST4("dbitswap" , t1
, t2
, mem
[1], 1);
177 TEST4("dbitswap" , t2
, t3
, mem
[2], 2);
178 TEST4("dbitswap" , t3
, v0
, mem
[3], 3);
179 TEST4("dbitswap" , v0
, v1
, mem
[4], 4);
180 TEST4("dbitswap" , v1
, a0
, mem
[5], 5);
181 TEST4("dbitswap" , a0
, a1
, mem
[6], 6);
182 TEST4("dbitswap" , a1
, a2
, mem
[7], 7);
183 TEST4("dbitswap" , a2
, a3
, mem
[8], 8);
184 TEST4("dbitswap" , a3
, s0
, mem
[9], 9);
185 TEST4("dbitswap" , s0
, s1
, mem
[10], 10);
186 TEST4("dbitswap" , s1
, s2
, mem
[11], 11);
187 TEST4("dbitswap" , s2
, s3
, mem
[12], 12);
188 TEST4("dbitswap" , s3
, s4
, mem
[13], 13);
191 TEST5("ddiv" , t0
, t1
, t2
, mem
[0], mem
[1]);
192 TEST5("ddiv" , t1
, t2
, t3
, mem
[1], mem
[2]);
193 TEST5("ddiv" , t2
, t3
, v0
, mem
[2], mem
[3]);
194 TEST5("ddiv" , t3
, v0
, v1
, mem
[3], mem
[4]);
195 TEST5("ddiv" , v0
, v1
, a0
, mem
[4], mem
[5]);
196 TEST5("ddiv" , v1
, a0
, a1
, mem
[5], mem
[6]);
197 TEST5("ddiv" , a0
, a1
, a2
, mem
[6], mem
[7]);
198 TEST5("ddiv" , a1
, a2
, a3
, mem
[7], mem
[8]);
199 TEST5("ddiv" , a2
, a3
, s0
, mem
[8], mem
[9]);
200 TEST5("ddiv" , a3
, s0
, s1
, mem
[9], mem
[10]);
201 TEST5("ddiv" , s0
, s1
, s2
, mem
[10], mem
[11]);
202 TEST5("ddiv" , s2
, s3
, s4
, mem
[11], mem
[12]);
203 TEST5("ddiv" , s3
, s4
, s5
, mem
[12], mem
[13]);
204 TEST5("ddiv" , s4
, s5
, s6
, mem
[13], mem
[0]);
207 TEST5("dmod" , t0
, t1
, t2
, mem
[0], mem
[1]);
208 TEST5("dmod" , t1
, t2
, t3
, mem
[1], mem
[2]);
209 TEST5("dmod" , t2
, t3
, v0
, mem
[2], mem
[3]);
210 TEST5("dmod" , t3
, v0
, v1
, mem
[3], mem
[4]);
211 TEST5("dmod" , v0
, v1
, a0
, mem
[4], mem
[5]);
212 TEST5("dmod" , v1
, a0
, a1
, mem
[5], mem
[6]);
213 TEST5("dmod" , a0
, a1
, a2
, mem
[6], mem
[7]);
214 TEST5("dmod" , a1
, a2
, a3
, mem
[7], mem
[8]);
215 TEST5("dmod" , a2
, a3
, s0
, mem
[8], mem
[9]);
216 TEST5("dmod" , a3
, s0
, s1
, mem
[9], mem
[10]);
217 TEST5("dmod" , s0
, s1
, s2
, mem
[10], mem
[11]);
218 TEST5("dmod" , s2
, s3
, s4
, mem
[11], mem
[12]);
219 TEST5("dmod" , s3
, s4
, s5
, mem
[12], mem
[13]);
220 TEST5("dmod" , s4
, s5
, s6
, mem
[13], mem
[0]);
223 TEST5("ddivu" , t0
, t1
, t2
, mem
[0], mem
[1]);
224 TEST5("ddivu" , t1
, t2
, t3
, mem
[1], mem
[2]);
225 TEST5("ddivu" , t2
, t3
, v0
, mem
[2], mem
[3]);
226 TEST5("ddivu" , t3
, v0
, v1
, mem
[3], mem
[4]);
227 TEST5("ddivu" , v0
, v1
, a0
, mem
[4], mem
[5]);
228 TEST5("ddivu" , v1
, a0
, a1
, mem
[5], mem
[6]);
229 TEST5("ddivu" , a0
, a1
, a2
, mem
[6], mem
[7]);
230 TEST5("ddivu" , a1
, a2
, a3
, mem
[7], mem
[8]);
231 TEST5("ddivu" , a2
, a3
, s0
, mem
[8], mem
[9]);
232 TEST5("ddivu" , a3
, s0
, s1
, mem
[9], mem
[10]);
233 TEST5("ddivu" , s0
, s1
, s2
, mem
[10], mem
[11]);
234 TEST5("ddivu" , s2
, s3
, s4
, mem
[11], mem
[12]);
235 TEST5("ddivu" , s3
, s4
, s5
, mem
[12], mem
[13]);
236 TEST5("ddivu" , s4
, s5
, s6
, mem
[13], mem
[0]);
239 TEST5("dmodu" , t0
, t1
, t2
, mem
[0], mem
[1]);
240 TEST5("dmodu" , t1
, t2
, t3
, mem
[1], mem
[2]);
241 TEST5("dmodu" , t2
, t3
, v0
, mem
[2], mem
[3]);
242 TEST5("dmodu" , t3
, v0
, v1
, mem
[3], mem
[4]);
243 TEST5("dmodu" , v0
, v1
, a0
, mem
[4], mem
[5]);
244 TEST5("dmodu" , v1
, a0
, a1
, mem
[5], mem
[6]);
245 TEST5("dmodu" , a0
, a1
, a2
, mem
[6], mem
[7]);
246 TEST5("dmodu" , a1
, a2
, a3
, mem
[7], mem
[8]);
247 TEST5("dmodu" , a2
, a3
, s0
, mem
[8], mem
[9]);
248 TEST5("dmodu" , a3
, s0
, s1
, mem
[9], mem
[10]);
249 TEST5("dmodu" , s0
, s1
, s2
, mem
[10], mem
[11]);
250 TEST5("dmodu" , s2
, s3
, s4
, mem
[11], mem
[12]);
251 TEST5("dmodu" , s3
, s4
, s5
, mem
[12], mem
[13]);
252 TEST5("dmodu" , s4
, s5
, s6
, mem
[13], mem
[0]);
255 TEST1("dlsa" , t0
, t1
, t2
, mem
[0], 0);
256 TEST1("dlsa" , t1
, t2
, t3
, mem
[1], 1);
257 TEST1("dlsa" , t2
, t3
, v0
, mem
[2], 2);
258 TEST1("dlsa" , t3
, v0
, v1
, mem
[3], 3);
259 TEST1("dlsa" , v0
, v1
, a0
, mem
[4], 4);
260 TEST1("dlsa" , v1
, a0
, a1
, mem
[5], 5);
261 TEST1("dlsa" , a0
, a1
, a2
, mem
[6], 6);
262 TEST1("dlsa" , a1
, a2
, a3
, mem
[7], 7);
263 TEST1("dlsa" , s0
, s1
, s2
, mem
[8], 8);
264 TEST1("dlsa" , s1
, s2
, s3
, mem
[9], 9);
265 TEST1("dlsa" , s2
, s3
, s4
, mem
[10], 10);
266 TEST1("dlsa" , s3
, s4
, s5
, mem
[11], 11);
267 TEST1("dlsa" , s4
, s5
, s6
, mem
[12], 12);
268 TEST1("dlsa" , s5
, s6
, s7
, mem
[13], 13);
271 TEST5("dmul" , t0
, t1
, t2
, mem
[0], mem
[1]);
272 TEST5("dmul" , t1
, t2
, t3
, mem
[1], mem
[2]);
273 TEST5("dmul" , t2
, t3
, v0
, mem
[2], mem
[3]);
274 TEST5("dmul" , t3
, v0
, v1
, mem
[3], mem
[4]);
275 TEST5("dmul" , v0
, v1
, a0
, mem
[4], mem
[5]);
276 TEST5("dmul" , v1
, a0
, a1
, mem
[5], mem
[6]);
277 TEST5("dmul" , a0
, a1
, a2
, mem
[6], mem
[7]);
278 TEST5("dmul" , a1
, a2
, a3
, mem
[7], mem
[8]);
279 TEST5("dmul" , a2
, a3
, s0
, mem
[8], mem
[9]);
280 TEST5("dmul" , a3
, s0
, s1
, mem
[9], mem
[10]);
281 TEST5("dmul" , s0
, s1
, s2
, mem
[10], mem
[11]);
282 TEST5("dmul" , s2
, s3
, s4
, mem
[11], mem
[12]);
283 TEST5("dmul" , s3
, s4
, s5
, mem
[12], mem
[13]);
284 TEST5("dmul" , s4
, s5
, s6
, mem
[13], mem
[0]);
287 TEST5("dmuh" , t0
, t1
, t2
, mem
[0], mem
[1]);
288 TEST5("dmuh" , t1
, t2
, t3
, mem
[1], mem
[2]);
289 TEST5("dmuh" , t2
, t3
, v0
, mem
[2], mem
[3]);
290 TEST5("dmuh" , t3
, v0
, v1
, mem
[3], mem
[4]);
291 TEST5("dmuh" , v0
, v1
, a0
, mem
[4], mem
[5]);
292 TEST5("dmuh" , v1
, a0
, a1
, mem
[5], mem
[6]);
293 TEST5("dmuh" , a0
, a1
, a2
, mem
[6], mem
[7]);
294 TEST5("dmuh" , a1
, a2
, a3
, mem
[7], mem
[8]);
295 TEST5("dmuh" , a2
, a3
, s0
, mem
[8], mem
[9]);
296 TEST5("dmuh" , a3
, s0
, s1
, mem
[9], mem
[10]);
297 TEST5("dmuh" , s0
, s1
, s2
, mem
[10], mem
[11]);
298 TEST5("dmuh" , s2
, s3
, s4
, mem
[11], mem
[12]);
299 TEST5("dmuh" , s3
, s4
, s5
, mem
[12], mem
[13]);
300 TEST5("dmuh" , s4
, s5
, s6
, mem
[13], mem
[0]);
303 TEST5("dmulu" , t0
, t1
, t2
, mem
[0], mem
[1]);
304 TEST5("dmulu" , t1
, t2
, t3
, mem
[1], mem
[2]);
305 TEST5("dmulu" , t2
, t3
, v0
, mem
[2], mem
[3]);
306 TEST5("dmulu" , t3
, v0
, v1
, mem
[3], mem
[4]);
307 TEST5("dmulu" , v0
, v1
, a0
, mem
[4], mem
[5]);
308 TEST5("dmulu" , v1
, a0
, a1
, mem
[5], mem
[6]);
309 TEST5("dmulu" , a0
, a1
, a2
, mem
[6], mem
[7]);
310 TEST5("dmulu" , a1
, a2
, a3
, mem
[7], mem
[8]);
311 TEST5("dmulu" , a2
, a3
, s0
, mem
[8], mem
[9]);
312 TEST5("dmulu" , a3
, s0
, s1
, mem
[9], mem
[10]);
313 TEST5("dmulu" , s0
, s1
, s2
, mem
[10], mem
[11]);
314 TEST5("dmulu" , s2
, s3
, s4
, mem
[11], mem
[12]);
315 TEST5("dmulu" , s3
, s4
, s5
, mem
[12], mem
[13]);
316 TEST5("dmulu" , s4
, s5
, s6
, mem
[13], mem
[0]);
319 TEST5("dmuhu" , t0
, t1
, t2
, mem
[0], mem
[1]);
320 TEST5("dmuhu" , t1
, t2
, t3
, mem
[1], mem
[2]);
321 TEST5("dmuhu" , t2
, t3
, v0
, mem
[2], mem
[3]);
322 TEST5("dmuhu" , t3
, v0
, v1
, mem
[3], mem
[4]);
323 TEST5("dmuhu" , v0
, v1
, a0
, mem
[4], mem
[5]);
324 TEST5("dmuhu" , v1
, a0
, a1
, mem
[5], mem
[6]);
325 TEST5("dmuhu" , a0
, a1
, a2
, mem
[6], mem
[7]);
326 TEST5("dmuhu" , a1
, a2
, a3
, mem
[7], mem
[8]);
327 TEST5("dmuhu" , a2
, a3
, s0
, mem
[8], mem
[9]);
328 TEST5("dmuhu" , a3
, s0
, s1
, mem
[9], mem
[10]);
329 TEST5("dmuhu" , s0
, s1
, s2
, mem
[10], mem
[11]);
330 TEST5("dmuhu" , s2
, s3
, s4
, mem
[11], mem
[12]);
331 TEST5("dmuhu" , s3
, s4
, s5
, mem
[12], mem
[13]);
332 TEST5("dmuhu" , s4
, s5
, s6
, mem
[13], mem
[0]);
335 TEST6("ldpc", 0, v0
);
336 TEST6("ldpc", 4, v1
);
337 TEST6("ldpc", 16, a0
);
338 TEST6("ldpc", 64, a1
);
339 TEST6("ldpc", 256, a3
);
340 TEST6("ldpc", 1024, t0
);
341 TEST6("ldpc", 4096, t1
);
342 TEST6("ldpc", 16384, t2
);
345 TEST6("lwupc", 0, v0
);
346 TEST6("lwupc", 4, v1
);
347 TEST6("lwupc", 16, a0
);
348 TEST6("lwupc", 64, a1
);
349 TEST6("lwupc", 256, a3
);
350 TEST6("lwupc", 1024, t0
);
351 TEST6("lwupc", 4096, t1
);
352 TEST6("lwupc", 16384, t2
);