]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/valgrind/src/valgrind-3.6.0-svn/none/tests/arm/vfp.c
update
[l4.git] / l4 / pkg / valgrind / src / valgrind-3.6.0-svn / none / tests / arm / vfp.c
1
2 /* Can be compiled both as ARM or Thumb using
3    gcc -Wall -g -O0 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -m{arm,thumb} -o vfp vfp.c
4 */
5
6 #include <stdio.h>
7 #include <string.h>
8 #include <math.h>
9
10 #ifndef __thumb__
11 // ARM
12 #define MOVE_to_FPSCR_from_R4 \
13       ".word 0xEEE14A10 @ vmsr FPSCR, r4\n\t"
14 #define MOVE_to_R4_from_FPSCR \
15       ".word 0xEEF14A10 @ vmrs r4, FPSCR\n\t"
16 #endif
17
18 #ifdef __thumb__
19 // Thumb
20 #define MOVE_to_FPSCR_from_R4 \
21       ".word 0x4A10EEE1 @ vmsr FPSCR, r4\n\t"
22 #define MOVE_to_R4_from_FPSCR \
23       ".word 0x4A10EEF1 @ vmrs r4, FPSCR\n\t"
24 #endif
25
26 static inline unsigned int f2u(float x) {
27     union {
28         float f;
29         unsigned int u;
30     } cvt;
31     cvt.f = x;
32     return cvt.u;
33 }
34
35 static inline unsigned int f2u0(double x) {
36     union {
37         double f;
38         unsigned int u[2];
39     } cvt;
40     cvt.f = x;
41     return cvt.u[0];
42 }
43
44 static inline unsigned int f2u1(double x) {
45     union {
46         double f;
47         unsigned int u[2];
48     } cvt;
49     cvt.f = x;
50     return cvt.u[1];
51 }
52
53 /* test macros to generate and output the result of a single instruction */
54
55 const unsigned int mem[] = {
56     0x121f1e1f, 0x131b1a1b, 0x141c1f1c, 0x151d191d,
57     0x232f2e2f, 0x242c2b2b, 0x252a2e2b, 0x262d2d2a,
58     0x3f343f3e, 0x3e353d3c, 0x363a3c3b, 0x3b373b3a,
59     0x454f4e45, 0x4e464d46, 0x474d474c, 0x4a484a4c
60 };
61
62 #define TESTINSN_vmovf32_imm(instruction, DD, imm) \
63 { \
64   unsigned int out[1]; \
65 \
66   __asm__ volatile( \
67       instruction ", #"#imm"\n\t"\
68       "vstmia %0, {" #DD "}\n\t" \
69       : \
70       : "r" (out) \
71       : #DD, "memory" \
72       ); \
73   printf("%s, #" #imm " :: Sd 0x%08x\n", \
74       instruction, out[0]); \
75 }
76
77 #define TESTINSN_vmov_core_single(instruction, RN, SD, SDval) \
78 { \
79   unsigned int out[1]; \
80 \
81   printf(#SD" 0x%08x\t",  SDval); \
82   __asm__ volatile( \
83       "mov " #RN ", #0\n\t" \
84       "vmov.f32 " #SD ", %1\n\t" \
85       instruction "\n\t" \
86       "str " #RN ", [%0]\n\t" \
87       : \
88       : "r" (out), "r" (SDval) \
89       : #SD, #RN, "memory" \
90       ); \
91   printf("%s :: "#RN" 0x%08x\n", \
92       instruction, out[0]); \
93 }
94
95 #define TESTINSN_vmov_single_core(instruction, SD, RN, RNval) \
96 { \
97   unsigned int out[1]; \
98 \
99   printf(#RN" 0x%08x\t",  RNval); \
100   __asm__ volatile( \
101       "mov " #RN ", %1\n\t" \
102       "vmov " #SD ", #0x40000000\n\t" \
103       instruction "\n\t"\
104       "vstmia %0, {" #SD "}\n\t" \
105       : \
106       : "r" (out), "r" (RNval) \
107       : #SD, #RN, "memory" \
108       ); \
109   printf("%s :: "#SD" 0x%08x\n", \
110       instruction, out[0]); \
111 }
112
113 #define TESTINSN_vmov_2core_2single(instruction, RD1, RD2, SN, SM, SNval, SMval) \
114 { \
115   unsigned int out[2]; \
116 \
117   printf("\t\t\t "#SN" 0x%08x "#SM" 0x%08x\n",  SNval, SMval); \
118   __asm__ volatile( \
119       "vmov " #SN ", %1\n\t" \
120       "vmov " #SM ", %2\n\t" \
121       "mov " #RD1 ", #0x4\n\t" \
122       "mov " #RD2 ", #0x4\n\t" \
123       instruction "\n\t"\
124       "str " #RD1 ", [%0]\n\t" \
125       "str " #RD2 ", [%0, #+4]\n\t" \
126       : \
127       : "r" (out), "r" (SNval), "r" (SMval) \
128       : #RD1, #RD2, #SN, #SM, "memory" \
129       ); \
130   printf("%s :: "#RD1" 0x%08x "#RD2" 0x%08x\n", \
131       instruction, out[0], out[1]); \
132 }
133
134 #define TESTINSN_vmov_2single_2core(instruction, SD1, SD2, RN, RM, RNval, RMval) \
135 { \
136   unsigned int out[2]; \
137 \
138   printf("\t\t\t "#RN" 0x%08x "#RM" 0x%08x\n",  RNval, RMval); \
139   __asm__ volatile( \
140       "mov " #RN ", %1\n\t" \
141       "mov " #RM ", %2\n\t" \
142       "vmov " #SD1 ", #0x40000000\n\t" \
143       "vmov " #SD2 ", #0x40000000\n\t" \
144       instruction "\n\t"\
145       "vstmia %0, {" #SD1 ", " #SD2 " }\n\t" \
146       : \
147       : "r" (out), "r" (RNval), "r" (RMval) \
148       : #SD1, #SD2, #RN, #RM, "memory" \
149       ); \
150   printf("%s :: "#SD1" 0x%08x "#SD2" 0x%08x\n", \
151       instruction, out[0], out[1]); \
152 }
153
154 #define TESTINSN_vmov_double_2core(instruction, DD, RN, RM, RNval, RMval) \
155 { \
156   unsigned int out[2]; \
157 \
158   printf(#RN" 0x%08x "#RM" 0x%08x\t",  RNval, RMval); \
159   __asm__ volatile( \
160       "mov " #RN ", %1\n\t" \
161       "mov " #RM ", %2\n\t" \
162       "vmov.i8 " #DD ", #0x55\n\t" \
163       instruction "\n\t"\
164       "vstmia %0, {" #DD "}\n\t" \
165       : \
166       : "r" (out), "r" (RNval), "r" (RMval) \
167       : #DD, #RN, #RM, "memory" \
168       ); \
169   printf("%s :: "#DD" 0x%08x 0x%08x\n", \
170       instruction, out[0], out[1]); \
171 }
172
173 #define TESTINSN_vmov_2core_double(instruction, RD1, RD2, DN, DNval0, DNval1) \
174 { \
175   unsigned int out[2]; \
176 \
177   printf(#DN" 0x%08x 0x%08x\t",  DNval0, DNval1); \
178   __asm__ volatile( \
179       "mov " #RD1 ", #55\n\t" \
180       "mov " #RD2 ", #55\n\t" \
181       "vmov " #DN ", %1, %2\n\t" \
182       instruction "\n\t" \
183       "str " #RD1 ", [%0]\n\t" \
184       "str " #RD2 ", [%0, #+4]\n\t" \
185       : \
186       : "r" (out), "r" (DNval0), "r" (DNval1) \
187       : #DN, #RD1, #RD2, "memory" \
188       ); \
189   printf("%s :: "#RD1" 0x%08x "#RD2" 0x%08x\n", \
190       instruction, out[0], out[1]); \
191 }
192
193 #define TESTINSN_un_f64(instruction, DD, DM, DMtype, DMval0, DMval1) \
194 { \
195   unsigned int out[2]; \
196 \
197   __asm__ volatile( \
198       "vmov.i8 " #DD ", #0x55" "\n\t" \
199       "vmov " #DM ", %1, %2 \n\t" \
200       instruction "\n\t" \
201       "vstmia %0, {" #DD "}\n\t" \
202       : \
203       : "r" (out), "r" (DMval0), "r" (DMval1) \
204       : #DD, #DM, "memory" \
205       ); \
206   printf("%s :: Dd 0x%08x 0x%08x  Dm (" #DMtype ")0x%08x %08x\n", \
207       instruction, out[1], out[0], DMval1, DMval0); \
208 }
209
210 #define TESTINSN_un_f32(instruction, SD, SM, SMtype, SMval) \
211 { \
212   unsigned int out[1]; \
213 \
214   __asm__ volatile( \
215       "vmov.f32 " #SM ", %1\n\t" \
216       "vmov.f32 " #SD ", %2\n\t" \
217       instruction "\n\t" \
218       "vstmia %0, {" #SD "}\n\t" \
219       : \
220       : "r" (out), "r" (SMval), "r" (0xffffaaaa) \
221       : #SD, #SM, "memory" \
222       ); \
223   printf("%s :: Sd 0x%08x Sm (" #SMtype ")0x%08x\n", \
224       instruction, out[0], SMval); \
225 }
226
227 #define TESTINSN_un_cvt_ds(instruction, DD, SM, SMval) \
228 { \
229   unsigned int out[2]; \
230 \
231   __asm__ volatile( \
232       "vmov " #SM ", %1\n\t" \
233       "vmov " #DD ", %2, %2\n\t" \
234       instruction "\n\t" \
235       "vstmia %0, {" #DD "}\n\t" \
236       : \
237       : "r" (out), "r" (SMval), "r" (0xffffaaaa) \
238       : #DD, #SM, "memory" \
239       ); \
240   printf("%s :: Dd 0x%08x 0x%08x  Sm 0x%08x\n", \
241       instruction, out[1], out[0], SMval); \
242 }
243
244 #define TESTINSN_un_cvt_sd(instruction, SD, DM, DMval0, DMval1) \
245 { \
246   unsigned int out[1]; \
247 \
248   __asm__ volatile( \
249       "vmov " #SD ", %3\n\t" \
250       "vmov " #DM ", %1, %2\n\t" \
251       instruction "\n\t" \
252       "vstmia %0, {" #SD "}\n\t" \
253       : \
254       : "r" (out), "r" (DMval0), "r" (DMval1), "r" (0xffffaaaa) \
255       : #SD, #DM, "memory" \
256       ); \
257   printf("%s :: Sd 0x%08x  Dm 0x%08x %08x\n", \
258       instruction, out[0], DMval1, DMval0); \
259 }
260
261 #define TESTINSN_cvt_i32_f64(instruction, SD, DM, DMval0, DMval1) \
262 { \
263   unsigned int out[1]; \
264 \
265   __asm__ volatile( \
266       "vmov " #DM ", %1, %2\n\t" \
267       "vmov " #SD ", %3\n\t" \
268       instruction "\n\t" \
269       "vstmia %0, {" #SD "}\n\t" \
270       : \
271       : "r" (out), "r" (DMval0), "r" (DMval1), "r" (0xffffaaaa) \
272       : #SD, #DM, "memory" \
273       ); \
274  printf("%s :: Sd 0x%08x Dm 0x%08x %08x\n", \
275       instruction, out[0], DMval1, DMval0); \
276 }
277
278 #define TESTINSN_cvt_f64_i32(instruction, DD, SM, SMval) \
279 { \
280   unsigned int out[2]; \
281 \
282   __asm__ volatile( \
283       "vmov " #SM ", %1\n\t" \
284       "vmov " #DD ", %2, %2\n\t" \
285       instruction "\n\t" \
286       "vstmia %0, {" #DD "}\n\t" \
287       : \
288       : "r" (out), "r" (SMval), "r" (0xfffffff0) \
289       : #DD, #SM, "memory" \
290       ); \
291  printf("%s :: Dd 0x%08x %08x Sm 0x%08x\n", \
292       instruction, out[0], out[1], SMval); \
293 }
294
295 #define TESTINSN_un_f64_q_vmrs(instruction, DD, DM, DMtype, DMval, RN) \
296 { \
297   unsigned int out[2]; \
298   unsigned int fpscr; \
299 \
300   __asm__ volatile( \
301       "vmov.i8 " #DD ", #0x55" "\n\t" \
302       "mov r4, #0\n\t" \
303       ".word 0xEEE14A10 @ vmsr FPSCR, "#RN"\n\t" \
304       "vdup." #DMtype " " #DM ", %2\n\t" \
305       instruction "\n\t" \
306       "vstmia %1, {" #DD "}\n\t" \
307       ".word 0xEEF14A10 @ vmrs "#RN", FPSCR\n\t" \
308       "mov %0, r4" \
309       : "=r" (fpscr) \
310       : "r" (out), "r" (DMval) \
311       : #DD, #DM, "memory", #RN \
312       ); \
313   printf("%s :: Dd 0x%08x 0x%08x  Dm (" #DMtype ")0x%08x  fpscr %08x\n", \
314       instruction, out[1], out[0], DMval, fpscr); \
315 }
316
317 #define TESTINSN_core_to_scalar(instruction, DD, DM, DMval) \
318 { \
319   unsigned int out[2]; \
320 \
321   __asm__ volatile( \
322       "vmov.i8 " #DD ", #0x55" "\n\t" \
323       "mov " #DM ", %1\n\t" \
324       instruction "\n\t" \
325       "vstmia %0, {" #DD "}\n\t" \
326       : \
327       : "r" (out), "r" (DMval) \
328       : #DD, #DM, "memory" \
329       ); \
330   printf("%s :: Dd 0x%08x 0x%08x  Dm 0x%08x\n", \
331       instruction, out[1], out[0], DMval); \
332 }
333
334 #define TESTINSN_vldr_f64(instruction, DD, RN, RNval, imm) \
335 { \
336   unsigned int out[2]; \
337 \
338   __asm__ volatile( \
339       "vmov.i8 " #DD ", #0x55" "\n\t" \
340       "mov " #RN ", %1\n\t" \
341       instruction "\n\t" \
342       "vstmia %0, {" #DD "}\n\t" \
343       : \
344       : "r" (out), "r" (RNval) \
345       : #DD, #RN, "memory" \
346       ); \
347   printf("%s :: Dd 0x%08x 0x%08x  *(int*) (Rn + shift) 0x%04x\n", \
348       instruction, out[1], out[0], *(int*) (RNval + imm)); \
349 }
350
351 #define TESTINSN_vldr_f32(instruction, SD, RN, RNval, imm) \
352 { \
353   unsigned int out[1]; \
354 \
355   __asm__ volatile( \
356       "vmov " #SD ", %3" "\n\t" \
357       "mov " #RN ", %1\n\t" \
358       instruction "\n\t" \
359       "vstmia %0, {" #SD "}\n\t" \
360       : \
361       : "r" (out), "r" (RNval), "r" (imm), "r" (0xffffffaa) \
362       : #SD, #RN, "memory" \
363       ); \
364   printf("%s :: Sd 0x%08x  *(int*) (Rn + shift) 0x%04x\n", \
365       instruction, out[0], *(int*) (RNval + imm)); \
366 }
367
368 #define TESTINSN_vstr64(instruction, DD, DDval, RM, RMval, imm) \
369 { \
370   unsigned int out[2]; \
371 \
372   __asm__ volatile( \
373       "vmov.i8 " #DD ", #" #DDval "\n\t" \
374       "add %1, %1, #" #imm "\n\t" \
375       "mov " #RM ", #0x55\n\t" \
376       "str " #RM ", [%1]\n\t" \
377       "str " #RM ", [%1, #4]\n\t" \
378       "sub %1, %1, #" #imm "\n\t" \
379       "mov " #RM ", %1\n\t" \
380       instruction "\n\t" \
381       "vstmia %0, {" #DD "}\n\t" \
382       : \
383       : "r" (out), "r" (RMval) \
384       : #DD, #RM, "memory" \
385       ); \
386   printf("%s :: Dd 0x%08x 0x%08x  *(int*) (Rm + shift) 0x%04x\n", \
387       instruction, out[1], out[0], *(int*) (RMval + imm)); \
388 }
389
390 #define TESTINSN_vstr32(instruction, SD, RM, RMval, imm) \
391 { \
392   unsigned int out[1]; \
393 \
394   __asm__ volatile( \
395       "vmov " #SD ", #0xbe280000\n\t" \
396       "mov " #RM ", #0x55\n\t" \
397       "str " #RM ", [%1, #" #imm "]\n\t" \
398       "mov " #RM ", %1\n\t" \
399       instruction "\n\t" \
400       "vstmia %0, {" #SD "}\n\t" \
401       : \
402       : "r" (out), "r" (RMval) \
403       : #SD, #RM, "memory" \
404       ); \
405   printf("%s :: Sd 0x%08x,  *(int*) (Rm + shift) 0x%04x\n", \
406       instruction, out[0], *(int*) (RMval + imm)); \
407 }
408
409 #define TESTINSN_scalar_to_core(instruction, QD, QM, QMtype, QMval) \
410 { \
411   unsigned int out[2]; \
412 \
413   __asm__ volatile( \
414       "mov " #QD ", #0x55" "\n\t" \
415       "vdup." #QMtype " " #QM ", %1\n\t" \
416       instruction "\n\t" \
417       "str " #QD ", [%0]\n\t" \
418       : \
419       : "r" (out), "r" (QMval) \
420       : #QD, #QM, "memory" \
421       ); \
422   printf("%s :: Rd 0x%08x  Qm (" #QMtype ")0x%08x\n", \
423       instruction, out[0], QMval); \
424 }
425
426 #define TESTINSN_VLDn(instruction, QD1, QD2, QD3, QD4) \
427 { \
428   unsigned int out[8]; \
429 \
430   __asm__ volatile( \
431       "vmov.i8 " #QD1 ", #0x55" "\n\t" \
432       "vmov.i8 " #QD2 ", #0x55" "\n\t" \
433       "vmov.i8 " #QD3 ", #0x55" "\n\t" \
434       "vmov.i8 " #QD4 ", #0x55" "\n\t" \
435       instruction ", [%1]\n\t" \
436       "mov r4, %0\n\t" \
437       "vstmia %0!, {" #QD1 "}\n\t" \
438       "vstmia %0!, {" #QD2 "}\n\t" \
439       "vstmia %0!, {" #QD3 "}\n\t" \
440       "vstmia %0!, {" #QD4 "}\n\t" \
441       "mov %0, r4\n\t" \
442       : \
443       : "r" (out), "r" (mem) \
444       : #QD1, #QD2, #QD3, #QD4, "memory", "r4" \
445       ); \
446   printf("%s :: Result 0x%08x 0x%08x 0x%08x 0x%08x "\
447           "0x%08x 0x%08x 0x%08x 0x%08x\n", \
448       instruction, out[0], out[1], out[2], out[3], out[4],\
449           out[5], out[6], out[7]); \
450 }
451
452 #define TESTINSN_VSTMIAnoWB(instruction, RN, QD, QDval) \
453 { \
454   unsigned int out[2]; \
455 \
456   __asm__ volatile( \
457       "vmov.i8 " #QD ", " #QDval "\n\t" \
458       "mov " #RN ", %0\n\t" \
459       instruction "\n\t" \
460       : \
461       : "r" (out), "r" (mem) \
462       : #QD, "memory", #RN \
463       ); \
464   printf("%s :: Result 0x%08x 0x%08x\n", \
465       instruction, out[0], out[1]); \
466 }
467
468 #define TESTINSN_VSTMIAnoWB32(instruction, RN, SD, SDval) \
469 { \
470   unsigned int out[1]; \
471 \
472   __asm__ volatile( \
473       "vmov " #SD ", %2\n\t" \
474       "mov " #RN ", %0\n\t" \
475       instruction "\n\t" \
476       : \
477       : "r" (out), "r" (mem), "r" (SDval) \
478       : #SD, "memory", #RN \
479       ); \
480   printf("%s :: Result 0x%08x\n", \
481       instruction, out[0]); \
482 }
483
484 #define TESTINSN_VSTMIAWB(RN, QD1, QD2) \
485 { \
486   unsigned int out[4]; \
487 \
488   __asm__ volatile( \
489       "vmov.i8 " #QD1 ", #0xa0" "\n\t"  \
490       "vmov.i8 " #QD2 ", #0xb1" "\n\t" \
491       "mov " #RN ", %0\n\t" \
492       "vstmia " #RN "!, {" #QD1 "}\n\t" \
493       "vstmia " #RN "!, {" #QD2 "}\n\t" \
494       : \
495       : "r" (out), "r" (mem) \
496       : #QD1, #QD2, "memory", #RN \
497       ); \
498   printf("vstmia "#RN"!, "#QD1"; vstmia "#RN"!, "#QD2" :: Result 0x%08x 0x%08x 0x%08x 0x%08x\n", \
499          out[0], out[1], out[2], out[3]); \
500 }
501
502 #define TESTINSN_VSTMIAWB32(RN, SD1, SD2) \
503 { \
504   unsigned int out[2]; \
505 \
506   __asm__ volatile( \
507       "vmov " #SD1 ", #0xbff80000" "\n\t" \
508       "vmov " #SD2 ", #0x3fa80000" "\n\t" \
509       "mov " #RN ", %0\n\t" \
510       "vstmia " #RN "!, {" #SD1 "}\n\t" \
511       "vstmia " #RN "!, {" #SD2 "}\n\t" \
512       : \
513       : "r" (out), "r" (mem) \
514       : #SD1, #SD2, "memory", #RN \
515       ); \
516   printf("vstmia " #RN "!, "#SD1"; vstmia "#RN"!, "#SD2" :: Result 0x%08x 0x%08x\n", \
517          out[0], out[1]); \
518 }
519
520 #define TESTINSN_VSTMDB(RN, QD1, QD2) \
521 { \
522     unsigned int out[4]; \
523     long endout = (long) out + 8; \
524 \
525   __asm__ volatile( \
526       "vmov.i8 " #QD1 ", #0xaa" "\n\t" \
527       "vmov.i8 " #QD2 ", #0xbb" "\n\t" \
528       "mov " #RN ", %0\n\t" \
529       "vstmdb " #RN "!, {" #QD1 "}\n\t" \
530       "vstmdb " #RN "!, {" #QD2 "}\n\t" \
531       "mov %0, " #RN "\n\t" \
532       : \
533       : "r" (endout), "r" (mem) \
534       : #QD1, #QD2, "memory", #RN \
535       ); \
536   printf("vstmdb " #RN "!, " #QD2 "; vstmdb " #RN "!, " #QD2 \
537          " :: Result 0x%08x 0x%08x 0x%08x 0x%08x\n", \
538          out[0], out[1], out[2], out[3]); \
539 }
540
541 #define TESTINSN_VLDMIAnoWB(instruction, RN, QD) \
542 { \
543   unsigned int in[2] = {0xaa0, 0xbb1}; \
544   unsigned int out[2]; \
545 \
546   __asm__ volatile( \
547       "vmov.i8 " #QD ", #0x55" "\n\t" \
548       "mov " #RN ", %0\n\t" \
549       instruction "\n\t" \
550       "mov " #RN ", %1\n\t" \
551       "vstmia " #RN ", {" #QD "}\n\t" \
552       : \
553       : "r" (in), "r" (out), "r" (mem) \
554       : #QD, "memory", #RN \
555       ); \
556   printf("%s :: Result 0x%08x 0x%08x 0x%08x 0x%08x\n", \
557          instruction, out[0], out[1], out[2], out[3]); \
558 }
559
560 #define TESTINSN_VLDMIAWB(RN, QD1, QD2) \
561 { \
562   unsigned int in[4] = {0xaa0, 0xbb1, 0xcc2, 0xdd3}; \
563   unsigned int out[4]; \
564 \
565   __asm__ volatile( \
566       "vmov.i8 " #QD1 ", #0x55" "\n\t" \
567       "vmov.i8 " #QD2 ", #0x55" "\n\t" \
568       "mov " #RN ", %0\n\t" \
569       "vldmia " #RN "!, {" #QD1 "}\n\t" \
570       "vldmia " #RN "!, {" #QD2 "}\n\t" \
571       "mov " #RN ", %1\n\t" \
572       "vstmia " #RN "!, {" #QD1 "}\n\t" \
573       "vstmia " #RN "!, {" #QD2 "}\n\t" \
574       : \
575       : "r" (in), "r" (out), "r" (mem) \
576       : #QD1, #QD2, "memory", #RN \
577       ); \
578   printf("vldmia rN!, qD1; vldmia rN!, qD2 :: Result 0x%08x 0x%08x 0x%08x 0x%08x\n", \
579          out[0], out[1], out[2], out[3]); \
580 }
581
582 #define TESTINSN_VLDMDB(RN, QD1, QD2) \
583 { \
584     unsigned int in[4] = {0xaa0, 0xbb1, 0xcc2, 0xdd3}; \
585     unsigned int out[4]; \
586     long endin = (long) in + 16; \
587 \
588   __asm__ volatile( \
589       "vmov.i8 " #QD1 ", #0x55" "\n\t" \
590       "vmov.i8 " #QD2 ", #0x55" "\n\t" \
591       "mov " #RN ", %0\n\t" \
592       "vldmdb " #RN "!, {" #QD1 "}\n\t" \
593       "vldmdb " #RN "!, {" #QD2 "}\n\t" \
594       "mov " #RN ", %1\n\t" \
595       "vstmia " #RN "!, {" #QD1 "}\n\t" \
596       "vstmia " #RN "!, {" #QD2 "}\n\t" \
597       : \
598       : "r" (endin), "r" (out), "r" (mem) \
599       : #QD1, #QD2, "memory", #RN \
600       ); \
601   printf("vldmdb rN!, qD1; vldmia rN!, qD2 :: Result 0x%08x 0x%08x 0x%08x 0x%08x\n", \
602          out[0], out[1], out[2], out[3]); \
603 }
604
605 #define TESTINSN_VLDR(instruction, dD, rN, rNval, offset) \
606 { \
607   unsigned int out[2]; \
608 \
609   __asm__ volatile( \
610       "vmov.i8 " #dD ", #0x55\n\t" \
611       "mov " #rN ", %1\n\t" \
612       instruction ", #" #offset "]\n\t" \
613       "vstmia %0, {" #dD "}\n\t" \
614       : \
615       : "r" (out), "r" (rNval) \
616       : #dD, "memory" \
617       ); \
618       printf("%s :: dD 0x%08x 0x%08x  rN 0x%08x\n", \
619       instruction, out[1], out[0], rNval); \
620 }
621
622
623 #define TESTINSN_vpush_vpop_f32(S1, Sval1, S2, Sval2, S3, Sval3, S4, S5, S6) \
624 { \
625   unsigned int out[6]; \
626 \
627   __asm__ volatile( \
628       "vmov "#S4", %4\n\t" \
629       "vmov "#S5", %4\n\t" \
630       "vmov "#S6", %4\n\t" \
631       "vmov "#S1", %1\n\t" \
632       "vmov "#S2", %2\n\t" \
633       "vmov "#S3", %3\n\t" \
634       "vpush {"#S1", "#S2"}\n\t" \
635       "vpush {"#S3"}\n\t" \
636       "vpop  {"#S4"}\n\t" \
637       "vpop  {"#S5", "#S6"}\n\t" \
638       "mov r4, %0\n\t" \
639       "vstmia %0!, {"#S1"}\n\t" \
640       "vstmia %0!, {"#S2"}\n\t" \
641       "vstmia %0!, {"#S3"}\n\t" \
642       "vstmia %0!, {"#S4"}\n\t" \
643       "vstmia %0!, {"#S5"}\n\t" \
644       "vstmia %0!, {"#S6"}\n\t" \
645       "mov %0, r4\n\t" \
646       : \
647       : "r" (out), "r" (Sval1), "r" (Sval2), "r" (Sval3), "r" (0x55555555) \
648       : #S1, #S2, #S3, #S4, #S5, #S6, "r4", "memory" \
649       ); \
650       printf(#S1" 0x%08x "#S2" 0x%08x "#S3" 0x%08x "#S4" 0x%08x "\
651              #S5" 0x%08x "#S6" 0x%08x\n", out[0], out[1],\
652              out[2], out[3], out[4], out[5]); \
653 }
654
655 #define TESTINSN_vpush_vpop_f64(D1, Dval10, Dval11, D2, Dval20, Dval21, D3, D4) \
656 { \
657   unsigned int out[8]; \
658 \
659   __asm__ volatile( \
660       "vmov "#D3", %4, %4\n\t" \
661       "vmov "#D4", %4, %4\n\t" \
662       "vmov "#D1", %1, %2\n\t" \
663       "vmov "#D2", %3, %4\n\t" \
664       "vpush {"#D1", "#D2"}\n\t" \
665       "vpop  {"#D3", "#D4"}\n\t" \
666       "mov r4, %0\n\t" \
667       "vstmia %0!, {"#D1"}\n\t" \
668       "vstmia %0!, {"#D2"}\n\t" \
669       "vstmia %0!, {"#D3"}\n\t" \
670       "vstmia %0!, {"#D4"}\n\t" \
671       "mov %0, r4\n\t" \
672       : \
673       : "r" (out), "r" (Dval10), "r" (Dval11), "r" (Dval20), "r" (Dval21), "r" (0x55555555) \
674       : #D1, #D2, #D3, #D4, "r4", "memory" \
675       ); \
676       printf(#D1" 0x%08x %08x "#D2" 0x%08x %08x "#D3" 0x%08x %08x "#D4" 0x%08x %08x\n",\
677                   out[0],out[1],    out[2],out[3],    out[4],out[5],    out[6],out[7]); \
678 }
679
680 #define TESTINSN_VSTn(instruction, QD1, QD2, QD3, QD4) \
681 { \
682   unsigned int out[8]; \
683 \
684   memset(out, 0x55, 8 * (sizeof(unsigned int)));\
685   __asm__ volatile( \
686       "mov r4, %1\n\t" \
687       "vldmia %1!, {" #QD1 "}\n\t" \
688       "vldmia %1!, {" #QD2 "}\n\t" \
689       "vldmia %1!, {" #QD3 "}\n\t" \
690       "vldmia %1!, {" #QD4 "}\n\t" \
691       "mov %1, r4\n\t" \
692       instruction ", [%0]\n\t" \
693       : \
694       : "r" (out), "r" (mem) \
695       : #QD1, #QD2, #QD3, #QD4, "memory", "r4" \
696       ); \
697   printf("%s :: Result 0x%08x 0x%08x 0x%08x 0x%08x "\
698           "0x%08x 0x%08x 0x%08x 0x%08x\n", \
699       instruction, out[0], out[1], out[2], out[3], out[4],\
700           out[5], out[6], out[7]); \
701 }
702
703 #define TESTINSN_bin(instruction, QD, QM, QMtype, QMval, QN, QNtype, QNval) \
704 { \
705   unsigned int out[2]; \
706 \
707   __asm__ volatile( \
708       "vmov.i8 " #QD ", #0x55" "\n\t" \
709       "vdup." #QMtype " " #QM ", %1\n\t" \
710       "vdup." #QNtype " " #QN ", %2\n\t" \
711       instruction "\n\t" \
712       "vstmia %0, {" #QD "}\n\t" \
713       : \
714       : "r" (out), "r" (QMval), "r" (QNval) \
715       : #QD, #QM, #QN, "memory" \
716       ); \
717   printf("%s :: Qd 0x%08x 0x%08x  Qm (" #QMtype ")0x%08x" \
718       "  Qn (" #QNtype ")0x%08x\n", \
719       instruction, out[1], out[0], QMval, QNval); \
720 }
721
722 #define TESTINSN_bin_f64(instruction, QD, QM, QMtype, QMval0, QMval1, QN, QNtype, QNval0, QNval1) \
723 { \
724   unsigned int out[2]; \
725 \
726   __asm__ volatile( \
727       "vdup.i32 " #QD ", %5\n\t" \
728       "vmov " #QM ", %1, %2 \n\t" \
729       "vmov " #QN ", %3, %4 \n\t" \
730       instruction "\n\t" \
731       "vstmia %0, {" #QD "}\n\t" \
732       : \
733       : "r" (out), "r" (QMval0), "r" (QMval1), "r" (QNval0), "r" (QNval1), "r"(0x3f800000) \
734       : #QD, #QM, #QN, "memory" \
735       ); \
736   printf("%s :: Qd 0x%08x 0x%08x  Qm 0x%08x %08x" \
737       "  Qn 0x%08x %08x\n", \
738       instruction, out[1], out[0], QMval1, QMval0, QNval1, QNval0); \
739 }
740
741 #define TESTINSN_bin_f32(instruction, SD, SM, SMtype, SMval, SN, SNtype, SNval) \
742 { \
743   unsigned int out[1]; \
744 \
745   __asm__ volatile( \
746       "vmov.f32 " #SM ", %1\n\t" \
747       "vmov.f32 " #SN ", %2\n\t" \
748       "vmov.f32 " #SD ", %3\n\t" \
749       instruction "\n\t" \
750       "vstmia %0, {" #SD "}\n\t" \
751       : \
752       : "r" (out), "r" (SMval), "r" (SNval), "r" (0xaaaaaaaa) \
753       : #SD, #SM, #SN, "memory" \
754       ); \
755   printf("%s :: Sd 0x%08x Sm (" #SMtype ")0x%08x" \
756       "  Sn (" #SNtype ")0x%08x\n", \
757       instruction, out[0], SMval, SNval); \
758 }
759
760 #define TESTINSN_cmp_f64(instruction, DD, DDval0, DDval1, DM, DMval0, DMval1) \
761 { \
762   unsigned int out[1]; \
763 \
764   __asm__ volatile( \
765       "vmov " #DD ", %1, %2\n\t" \
766       "vmov " #DM ", %3, %4\n\t" \
767       "mov r4, #0\n\t" \
768       MOVE_to_FPSCR_from_R4 \
769       instruction "\n\t" \
770       MOVE_to_R4_from_FPSCR \
771       "str r4, [%0]\n\t" \
772       : \
773       : "r" (out), "r" (DDval0), "r" (DDval1),"r" (DMval0), "r" (DMval1) \
774       : #DD, #DM, "r4", "memory" \
775       ); \
776   printf("%s :: FPSCR 0x%08x  Dd 0x%08x %08x" \
777       "  Dm 0x%08x %08x\n", \
778       instruction, out[0] & 0xffffff60, DDval1, DDval0, DMval1, DMval0); \
779 }
780
781 #define TESTINSN_cmp_f32(instruction, SD, SDval, SM, SMval) \
782 { \
783   unsigned int out[1]; \
784 \
785   __asm__ volatile( \
786       "vmov " #SD ", %1\n\t" \
787       "vmov " #SM ", %2\n\t" \
788       "mov r4, #0\n\t" \
789       MOVE_to_FPSCR_from_R4 \
790       instruction "\n\t" \
791       MOVE_to_R4_from_FPSCR \
792       "str r4, [%0]\n\t" \
793       : \
794       : "r" (out), "r" (SDval),"r" (SMval) \
795       : #SD, #SM, "r4", "memory" \
796       ); \
797   printf("%s :: FPSCR 0x%01x  Sd 0x%08x" \
798       "  Sm 0x%08x\n", \
799       instruction, (out[0] & 0xf0000000) >> 28, SDval, SMval); \
800 }
801
802 #define TESTINSN_cmpz_f32(instruction, SD, SDval) \
803 { \
804   unsigned int out[1]; \
805 \
806   __asm__ volatile( \
807       "vmov " #SD ", %1\n\t" \
808       instruction ", #0\n\t" \
809       MOVE_to_R4_from_FPSCR \
810       "vmov " #SD ", r4\n\t" \
811       "vstmia %0, {" #SD "}\n\t" \
812       : \
813       : "r" (out), "r" (SDval)\
814       : #SD, "r4", "memory" \
815       ); \
816   printf("%s :: FPSCR 0x%08x  Sd 0x%08x\n", \
817       instruction, out[0] & 0xffffff60, SDval); \
818 }
819
820 #define TESTINSN_cmpz_f64(instruction, DD, DDval0, DDval1) \
821 { \
822   unsigned int out[1]; \
823 \
824   __asm__ volatile( \
825       "vmov " #DD ", %1, %2\n\t" \
826       instruction ", #0\n\t" \
827       MOVE_to_R4_from_FPSCR \
828       "str r4, [%0]\n\t" \
829       : \
830       : "r" (out), "r" (DDval0), "r" (DDval1) \
831       : #DD, "r4", "memory" \
832       ); \
833   printf("%s :: FPSCR 0x%08x  Dd 0x%08x %08x\n", \
834       instruction, out[0] & 0xffffff60, DDval1, DDval0); \
835 }
836
837 static void do_vldm_vstm_check(void)
838 {
839     int i;
840     const char *format = "\t0x%08x\n";
841     unsigned int data[] = {
842         0x1a1b1c1d, 0x2a2b2c2d, 0x3a3b3c3d, 0x4a4b4c4d,
843         0x5a5b5c5d, 0x6a6b6c6d, 0x7a7b7c7d, 0x8a8b8c8d,
844         0x9a9b9c9d, 0xaaabacad, 0xbabbbcbd, 0xcacbcccd,
845         0xdadbdcdd, 0xeaebeced, 0xfafbfcfd, 0x0a0b0c0d
846     };
847     unsigned int res;
848     printf("do_vldm_vstm_check:\n");
849     __asm__ volatile(
850             "mov r1, %0\n\t"
851             "vldmia r1!, {s0, s1, s2, s3}\n\t"
852             "mov r0, %1\n\t"
853             "sub r1, r1, %0\n\t"
854             "mov r3, r1\n\t"
855             "bl printf\n\t"
856             "mov r0, %1\n\t"
857             "vmov r1, s2\n\t"
858             "mov r3, r1\n\t"
859             "bl printf\n\t"
860             "mov r0, %1\n\t"
861             "vmov r1, s3\n\t"
862             "mov r3, r1\n\t"
863             "bl printf\n\t"
864             "mov r0, %1\n\t"
865             "vmov r1, s0\n\t"
866             "mov r3, r1\n\t"
867             "bl printf\n\t"
868 /* --- */
869             "add r1, %0, #32\n\t"
870             "vldmdb r1!, {s5, s6}\n\t"
871             "mov r0, %1\n\t"
872             "sub r1, r1, %0\n\t"
873             "mov r3, r1\n\t"
874             "bl printf\n\t"
875             "mov r0, %1\n\t"
876             "vmov r1, s5\n\t"
877             "mov r3, r1\n\t"
878             "bl printf\n\t"
879             "mov r0, %1\n\t"
880             "vmov r1, s6\n\t"
881             "mov r3, r1\n\t"
882             "bl printf\n\t"
883 /* --- */
884             "add r1, %0, #4\n\t"
885             "vldmia r1, {s0, s1, s2, s3}\n\t"
886             "mov r0, %1\n\t"
887             "sub r1, r1, %0\n\t"
888             "mov r3, r1\n\t"
889             "bl printf\n\t"
890             "mov r0, %1\n\t"
891             "vmov r1, s2\n\t"
892             "mov r3, r1\n\t"
893             "bl printf\n\t"
894             "mov r0, %1\n\t"
895             "vmov r1, s3\n\t"
896             "mov r3, r1\n\t"
897             "bl printf\n\t"
898             "mov r0, %1\n\t"
899             "vmov r1, s0\n\t"
900             "mov r3, r1\n\t"
901             "bl printf\n\t"
902 /* --- */
903             "add r1, %0, #48\n\t"
904             "vldmia r1!, {d30, d31}\n\t"
905             "mov r0, %1\n\t"
906             "sub r1, r1, %0\n\t"
907             "mov r3, r1\n\t"
908             "bl printf\n\t"
909             "mov r0, %1\n\t"
910             "vmov r1, r5, d30\n\t"
911             "mov r3, r1\n\t"
912             "bl printf\n\t"
913             "mov r0, %1\n\t"
914             "mov r1, r5\n\t"
915             "mov r3, r1\n\t"
916             "bl printf\n\t"
917             "mov r0, %1\n\t"
918             "vmov r1, r5, d31\n\t"
919             "mov r3, r1\n\t"
920             "bl printf\n\t"
921             "mov r0, %1\n\t"
922             "mov r1, r5\n\t"
923             "mov r3, r1\n\t"
924             "bl printf\n\t"
925 /* --- */
926             "add r1, %0, #44\n\t"
927             "vldmia r1, {d30, d31}\n\t"
928             "mov r0, %1\n\t"
929             "sub r1, r1, %0\n\t"
930             "mov r3, r1\n\t"
931             "bl printf\n\t"
932             "mov r0, %1\n\t"
933             "vmov r1, r5, d30\n\t"
934             "mov r3, r1\n\t"
935             "bl printf\n\t"
936             "mov r0, %1\n\t"
937             "mov r1, r5\n\t"
938             "mov r3, r1\n\t"
939             "bl printf\n\t"
940             "mov r0, %1\n\t"
941             "vmov r1, r5, d31\n\t"
942             "mov r3, r1\n\t"
943             "bl printf\n\t"
944             "mov r0, %1\n\t"
945             "mov r1, r5\n\t"
946             "mov r3, r1\n\t"
947             "bl printf\n\t"
948 /* --- */
949             "add r1, %0, #40\n\t"
950             "vldmdb r1!, {d30, d31}\n\t"
951             "mov r0, %1\n\t"
952             "sub r1, r1, %0\n\t"
953             "mov r3, r1\n\t"
954             "bl printf\n\t"
955             "mov r0, %1\n\t"
956             "vmov r1, r5, d30\n\t"
957             "mov r3, r1\n\t"
958             "bl printf\n\t"
959             "mov r0, %1\n\t"
960             "mov r1, r5\n\t"
961             "mov r3, r1\n\t"
962             "bl printf\n\t"
963             "mov r0, %1\n\t"
964             "vmov r1, r5, d31\n\t"
965             "mov r3, r1\n\t"
966             "bl printf\n\t"
967             "mov r0, %1\n\t"
968             "mov r1, r5\n\t"
969             "mov r3, r1\n\t"
970             "bl printf\n\t"
971 /* --- */
972             "mov r0, #0x55\n\t"
973             "vmov s0, r0\n\t"
974             "mov r0, #0x56\n\t"
975             "vmov s1, r0\n\t"
976             "mov r0, #0x57\n\t"
977             "vmov s2, r0\n\t"
978             "mov r0, #0x58\n\t"
979             "vmov s3, r0\n\t"
980             "add r1, %0, #0\n\t"
981             "vstmia r1!, {s0, s1, s2, s3}\n\t"
982             "mov r0, %1\n\t"
983             "sub r1, r1, %0\n\t"
984             "mov r3, r1\n\t"
985             "bl printf\n\t"
986 /* --- */
987             "mov r0, #0x65\n\t"
988             "vmov s16, r0\n\t"
989             "mov r0, #0x66\n\t"
990             "vmov s17, r0\n\t"
991             "add r1, %0, #16\n\t"
992             "vstmia r1, {s16, s17}\n\t"
993             "mov r0, %1\n\t"
994             "sub r1, r1, %0\n\t"
995             "mov r3, r1\n\t"
996             "bl printf\n\t"
997 /* --- */
998             "mov r0, #0x75\n\t"
999             "vmov s16, r0\n\t"
1000             "mov r0, #0x76\n\t"
1001             "vmov s17, r0\n\t"
1002             "add r1, %0, #32\n\t"
1003             "vstmdb r1!, {s16, s17}\n\t"
1004             "mov r0, %1\n\t"
1005             "sub r1, r1, %0\n\t"
1006             "mov r3, r1\n\t"
1007             "bl printf\n\t"
1008 /* --- */
1009             "mov r0, #0x42\n\t"
1010             "mov r1, #0x43\n\t"
1011             "vmov d30, r0, r1\n\t"
1012             "mov r0, #0x40\n\t"
1013             "mov r1, #0x41\n\t"
1014             "vmov d31, r0, r1\n\t"
1015             "mov r0, #0x57\n\t"
1016             "add r1, %0, #32\n\t"
1017             "vstmia r1!, {d30, d31}\n\t"
1018             "mov r0, %1\n\t"
1019             "sub r1, r1, %0\n\t"
1020             "mov r3, r1\n\t"
1021             "bl printf\n\t"
1022 /* --- */
1023             "mov r0, #0x32\n\t"
1024             "mov r1, #0x33\n\t"
1025             "vmov d10, r0, r1\n\t"
1026             "mov r0, #0x57\n\t"
1027             "add r1, %0, #48\n\t"
1028             "vstmia r1, {d10}\n\t"
1029             "mov r0, %1\n\t"
1030             "sub r1, r1, %0\n\t"
1031             "mov r3, r1\n\t"
1032             "bl printf\n\t"
1033 /* --- */
1034             "mov r0, #0x22\n\t"
1035             "mov r1, #0x23\n\t"
1036             "vmov d10, r0, r1\n\t"
1037             "mov r0, #0x57\n\t"
1038             "add r1, %0, #64\n\t"
1039             "vstmdb r1!, {d10}\n\t"
1040             "mov r0, %1\n\t"
1041             "sub r1, r1, %0\n\t"
1042             "mov r3, r1\n\t"
1043             "bl printf\n\t"
1044         :
1045         : "r" (data), "r" (format), "r"(&res)
1046         : "r0", "r1", "r2", "r3", "r5", "r12", "r14", "memory",
1047           "s0", "s1", "s2", "s3", "s5", "s6", "s16", "s17",
1048           "d10", "d30", "d31"
1049         );
1050     printf("data:\n");
1051     for (i = 0; i < 16; i++) {
1052         printf("\t0x%08x\n", data[i]);
1053     }
1054 }
1055
1056 int main(int argc, char **argv)
1057 {
1058     do_vldm_vstm_check();
1059
1060     printf("---- VMOV (ARM core register to scalar) ----\n");
1061     TESTINSN_core_to_scalar("vmov.32 d0[0],  r5", d0,  r5, f2u(13));
1062     TESTINSN_core_to_scalar("vmov.32 d1[1],  r6", d1,  r6, 0x12);
1063     TESTINSN_core_to_scalar("vmov.32 d20[0], r5", d20, r5, f2u(NAN));
1064     TESTINSN_core_to_scalar("vmov.32 d29[1], r6", d29, r6, f2u(172));
1065     TESTINSN_core_to_scalar("vmov.32 d30[0], r5", d30, r5, f2u(INFINITY));
1066     TESTINSN_core_to_scalar("vmov.32 d11[1], r6", d11, r6, f2u(-INFINITY));
1067     TESTINSN_core_to_scalar("vmov.32 d18[0], r5", d11, r5, f2u(653));
1068     TESTINSN_core_to_scalar("vmov.32 d9[1],  r6", d9,  r6, 12);
1069     TESTINSN_core_to_scalar("vmov.16 d0[0],  r5", d0,  r5, 13);
1070     TESTINSN_core_to_scalar("vmov.16 d14[1], r5", d14, r5, f2u(NAN));
1071     TESTINSN_core_to_scalar("vmov.16 d28[2], r6", d28, r6, 14);
1072     TESTINSN_core_to_scalar("vmov.16 d30[3], r1", d30, r1, 17);
1073     TESTINSN_core_to_scalar("vmov.16 d0[0],  r5", d0,  r5, f2u(INFINITY));
1074     TESTINSN_core_to_scalar("vmov.16 d7[1],  r5", d7,  r5, f2u(-INFINITY));
1075     TESTINSN_core_to_scalar("vmov.16 d21[2], r6", d21, r6, 14);
1076     TESTINSN_core_to_scalar("vmov.16 d17[3], r1", d17, r1, 17);
1077     TESTINSN_core_to_scalar("vmov.8  d0[0],  r5", d0,  r5, 13);
1078     TESTINSN_core_to_scalar("vmov.8  d10[1], r5", d10, r5, f2u(NAN));
1079     TESTINSN_core_to_scalar("vmov.8  d20[2], r5", d20, r5, f2u(INFINITY));
1080     TESTINSN_core_to_scalar("vmov.8  d30[3], r5", d30, r5, f2u(-INFINITY));
1081     TESTINSN_core_to_scalar("vmov.8  d13[4], r5", d13, r5, 213);
1082     TESTINSN_core_to_scalar("vmov.8  d17[5], r5", d17, r5, 1343);
1083     TESTINSN_core_to_scalar("vmov.8  d24[6], r5", d24, r5, 111);
1084     TESTINSN_core_to_scalar("vmov.8  d29[7], r5", d29, r5, 173);
1085
1086     printf("---- VMOV (scalar to ARM core register) ----\n");
1087     TESTINSN_scalar_to_core("vmov.32   r5,  d0[0]",  r5,  d0,  i32, f2u(NAN));
1088     TESTINSN_scalar_to_core("vmov.32   r6,  d5[1]",  r6,  d5,  i32, f2u(INFINITY));
1089     TESTINSN_scalar_to_core("vmov.32   r4,  d10[0]", r4,  d10, i32, f2u(-INFINITY));
1090     TESTINSN_scalar_to_core("vmov.32   r5,  d15[1]", r5,  d15, i32, 0x11223344);
1091     TESTINSN_scalar_to_core("vmov.32   r9, d20[0]", r9, d20, i32, 0x11223344);
1092     TESTINSN_scalar_to_core("vmov.32   r8,  d25[1]", r8,  d25, i32, 0x11223344);
1093     TESTINSN_scalar_to_core("vmov.32   r0,  d30[0]", r0,  d30, i32, 0x11223344);
1094     TESTINSN_scalar_to_core("vmov.32   r2,  d19[1]", r2,  d19, i32, 0x11223344);
1095     TESTINSN_scalar_to_core("vmov.u16  r5,  d31[0]", r5,  d31, i32, f2u(NAN));
1096     TESTINSN_scalar_to_core("vmov.u16  r3,  d30[1]", r3,  d30, i32, f2u(INFINITY));
1097     TESTINSN_scalar_to_core("vmov.u16  r6,  d21[2]", r6,  d21, i32, f2u(-INFINITY));
1098     TESTINSN_scalar_to_core("vmov.u16  r9, d26[3]", r9, d26, i32, 0x11223344);
1099     TESTINSN_scalar_to_core("vmov.u16  r12, d11[0]", r12, d11, i32, 0x11223344);
1100     TESTINSN_scalar_to_core("vmov.u16  r0,  d10[1]", r0,  d10, i32, 0x11223344);
1101     TESTINSN_scalar_to_core("vmov.u16  r6,  d1[2]",  r6,  d1,  i32, 0x11223344);
1102     TESTINSN_scalar_to_core("vmov.u16  r8,  d5[3]",  r8,  d5,  i32, 0x11223344);
1103     TESTINSN_scalar_to_core("vmov.u8   r2,  d4[0]",  r2,  d4,  i32, f2u(NAN));
1104     TESTINSN_scalar_to_core("vmov.u8   r6,  d14[1]", r6,  d14, i32, f2u(INFINITY));
1105     TESTINSN_scalar_to_core("vmov.u8   r9, d24[2]", r9, d24, i32, f2u(-INFINITY));
1106     TESTINSN_scalar_to_core("vmov.u8   r8,  d31[3]", r8,  d31, i32, 0x11223344);
1107     TESTINSN_scalar_to_core("vmov.u8   r10, d29[4]", r10, d29, i32, 0x11223344);
1108     TESTINSN_scalar_to_core("vmov.u8   r3,  d19[5]", r3,  d19, i32, 0x11223344);
1109     TESTINSN_scalar_to_core("vmov.u8   r12, d12[6]", r12, d12, i32, 0x11223344);
1110     TESTINSN_scalar_to_core("vmov.u8   r10, d18[4]", r10, d18, i32, 0x11223344);
1111     TESTINSN_scalar_to_core("vmov.s16  r5,  d31[0]", r5,  d31, i32, f2u(NAN));
1112     TESTINSN_scalar_to_core("vmov.s16  r3,  d30[1]", r3,  d30, i32, f2u(INFINITY));
1113     TESTINSN_scalar_to_core("vmov.s16  r6,  d21[2]", r6,  d21, i32, f2u(-INFINITY));
1114     TESTINSN_scalar_to_core("vmov.s16  r9, d26[3]", r9, d26, i32, 0x11223344);
1115     TESTINSN_scalar_to_core("vmov.s16  r4,  d11[0]", r4,  d11, i32, 0x11223344);
1116     TESTINSN_scalar_to_core("vmov.s16  r0,  d10[1]", r0,  d10, i32, 0x11223344);
1117     TESTINSN_scalar_to_core("vmov.s16  r6,  d1[2]",  r6,  d1,  i32, 0x11223344);
1118     TESTINSN_scalar_to_core("vmov.s16  r8,  d5[3]",  r8,  d5,  i32, 0x11223344);
1119     TESTINSN_scalar_to_core("vmov.s8   r2,  d4[0]",  r2,  d4,  i32, f2u(NAN));
1120     TESTINSN_scalar_to_core("vmov.s8   r6,  d14[1]", r6,  d14, i32, f2u(INFINITY));
1121     TESTINSN_scalar_to_core("vmov.s8   r9, d24[2]", r9, d24, i32, f2u(-INFINITY));
1122     TESTINSN_scalar_to_core("vmov.s8   r8,  d31[3]", r8,  d31, i32, 0x11223344);
1123     TESTINSN_scalar_to_core("vmov.s8   r6,  d29[4]", r6,  d29, i32, 0x11223344);
1124     TESTINSN_scalar_to_core("vmov.s8   r3,  d19[5]", r3,  d19, i32, 0x11223344);
1125     TESTINSN_scalar_to_core("vmov.s8   r12, d12[6]", r12, d12, i32, 0x11223344);
1126     TESTINSN_scalar_to_core("vmov.s8   r10, d18[7]", r10, d18, i32, 0x11223344);
1127
1128     printf("---- VMLA (fp) ----\n");
1129     TESTINSN_bin_f64("vmla.f64 d0,  d11, d12", d0,  d11, i32, f2u0(-INFINITY), f2u1(-INFINITY), d12, i32, f2u0(NAN), f2u1(NAN));
1130     TESTINSN_bin_f64("vmla.f64 d7,  d1,  d6",  d7,  d1,  i32, f2u0(INFINITY), f2u1(INFINITY), d6, i32, f2u0(NAN), f2u1(NAN));
1131     TESTINSN_bin_f64("vmla.f64 d0,  d5,  d2",  d0,  d5,  i32, f2u0(NAN), f2u1(NAN), d2, i32, f2u0(-1.0), f2u1(-1.0));
1132     TESTINSN_bin_f64("vmla.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(0.0), f2u1(0.0));
1133     TESTINSN_bin_f64("vmla.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(NAN), f2u1(NAN));
1134     TESTINSN_bin_f64("vmla.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687));
1135     TESTINSN_bin_f64("vmla.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346));
1136     TESTINSN_bin_f64("vmla.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476));
1137     TESTINSN_bin_f64("vmla.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065));
1138     TESTINSN_bin_f64("vmla.f64 d30, d15, d2",  d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76));
1139     TESTINSN_bin_f64("vmla.f64 d23, d24, d5",  d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346));
1140     TESTINSN_bin_f64("vmla.f64 d10, d11, d2",  d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089));
1141     TESTINSN_bin_f64("vmla.f64 d29, d15, d7",  d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065));
1142     TESTINSN_bin_f64("vmla.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009));
1143     TESTINSN_bin_f64("vmla.f64 d27, d21, d6",  d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575));
1144     TESTINSN_bin_f64("vmla.f64 d30, d31, d2",  d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107));
1145     TESTINSN_bin_f64("vmla.f64 d13, d24, d5",  d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6));
1146     TESTINSN_bin_f64("vmla.f64 d10, d11, d2",  d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109));
1147     TESTINSN_bin_f64("vmla.f64 d29, d25, d7",  d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752));
1148     TESTINSN_bin_f64("vmla.f64 d0,  d11, d12", d0,  d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47));
1149     TESTINSN_bin_f64("vmla.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676));
1150     TESTINSN_bin_f64("vmla.f64 d0,  d5,  d2",  d0,  d5,  i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY));
1151     TESTINSN_bin_f64("vmla.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1152     TESTINSN_bin_f64("vmla.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1153     TESTINSN_bin_f32("vmla.f32 s0,  s11, s12", s0,  s11, i32, f2u(-INFINITY), s12, i32, f2u(NAN));
1154     TESTINSN_bin_f32("vmla.f32 s7,  s1,  s6",  s7,  s1,  i32, f2u(INFINITY), s6, i32, f2u(NAN));
1155     TESTINSN_bin_f32("vmla.f32 s0,  s5,  s2",  s0,  s5,  i32, f2u(NAN), s2, i32, f2u(-1.0));
1156     TESTINSN_bin_f32("vmla.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(0.0));
1157     TESTINSN_bin_f32("vmla.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(NAN));
1158     TESTINSN_bin_f32("vmla.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687));
1159     TESTINSN_bin_f32("vmla.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346));
1160     TESTINSN_bin_f32("vmla.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476));
1161     TESTINSN_bin_f32("vmla.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065));
1162     TESTINSN_bin_f32("vmla.f32 s30, s15, s2",  s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76));
1163     TESTINSN_bin_f32("vmla.f32 s23, s24, s5",  s23, s24, i32, f2u(24), s5, i32, f2u(1346));
1164     TESTINSN_bin_f32("vmla.f32 s10, s11, s2",  s10, s11, i32, f2u(48755), s2, i32, f2u(1089));
1165     TESTINSN_bin_f32("vmla.f32 s29, s15, s7",  s29, s15, i32, f2u(214), s7, i32, f2u(1752065));
1166     TESTINSN_bin_f32("vmla.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009));
1167     TESTINSN_bin_f32("vmla.f32 s27, s21, s6",  s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575));
1168     TESTINSN_bin_f32("vmla.f32 s30, s31, s2",  s30, s31, i32, f2u(2754), s2, i32, f2u(107));
1169     TESTINSN_bin_f32("vmla.f32 s13, s24, s5",  s13, s24, i32, f2u(874), s5, i32, f2u(1384.6));
1170     TESTINSN_bin_f32("vmla.f32 s10, s11, s2",  s10, s11, i32, f2u(487.587), s2, i32, f2u(109));
1171     TESTINSN_bin_f32("vmla.f32 s29, s25, s7",  s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752));
1172     TESTINSN_bin_f32("vmla.f32 s0,  s11, s12", s0,  s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47));
1173     TESTINSN_bin_f32("vmla.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676));
1174     TESTINSN_bin_f32("vmla.f32 s0,  s5,  s2",  s0,  s5,  i32, f2u(INFINITY), s2, i32, f2u(-INFINITY));
1175     TESTINSN_bin_f32("vmla.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0));
1176     TESTINSN_bin_f32("vmla.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0));
1177
1178     printf("---- VNMLA (fp) ----\n");
1179     TESTINSN_bin_f64("vnmla.f64 d0,  d11, d12", d0,  d11, i32, f2u0(-INFINITY), f2u1(-INFINITY), d12, i32, f2u0(NAN), f2u1(NAN));
1180     TESTINSN_bin_f64("vnmla.f64 d7,  d1,  d6",  d7,  d1,  i32, f2u0(INFINITY), f2u1(INFINITY), d6, i32, f2u0(NAN), f2u1(NAN));
1181     TESTINSN_bin_f64("vnmla.f64 d0,  d5,  d2",  d0,  d5,  i32, f2u0(NAN), f2u1(NAN), d2, i32, f2u0(-1.0), f2u1(-1.0));
1182     TESTINSN_bin_f64("vnmla.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(0.0), f2u1(0.0));
1183     TESTINSN_bin_f64("vnmla.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(NAN), f2u1(NAN));
1184     TESTINSN_bin_f64("vnmla.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687));
1185     TESTINSN_bin_f64("vnmla.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346));
1186     TESTINSN_bin_f64("vnmla.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476));
1187     TESTINSN_bin_f64("vnmla.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065));
1188     TESTINSN_bin_f64("vnmla.f64 d30, d15, d2",  d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76));
1189     TESTINSN_bin_f64("vnmla.f64 d23, d24, d5",  d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346));
1190     TESTINSN_bin_f64("vnmla.f64 d10, d11, d2",  d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089));
1191     TESTINSN_bin_f64("vnmla.f64 d29, d15, d7",  d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065));
1192     TESTINSN_bin_f64("vnmla.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009));
1193     TESTINSN_bin_f64("vnmla.f64 d27, d21, d6",  d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575));
1194     TESTINSN_bin_f64("vnmla.f64 d30, d31, d2",  d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107));
1195     TESTINSN_bin_f64("vnmla.f64 d13, d24, d5",  d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6));
1196     TESTINSN_bin_f64("vnmla.f64 d10, d11, d2",  d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109));
1197     TESTINSN_bin_f64("vnmla.f64 d29, d25, d7",  d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752));
1198     TESTINSN_bin_f64("vnmla.f64 d0,  d11, d12", d0,  d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47));
1199     TESTINSN_bin_f64("vnmla.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676));
1200     TESTINSN_bin_f64("vnmla.f64 d0,  d5,  d2",  d0,  d5,  i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY));
1201     TESTINSN_bin_f64("vnmla.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1202     TESTINSN_bin_f64("vnmla.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1203     TESTINSN_bin_f32("vnmla.f32 s0,  s11, s12", s0,  s11, i32, f2u(-INFINITY), s12, i32, f2u(NAN));
1204     TESTINSN_bin_f32("vnmla.f32 s7,  s1,  s6",  s7,  s1,  i32, f2u(INFINITY), s6, i32, f2u(NAN));
1205     TESTINSN_bin_f32("vnmla.f32 s0,  s5,  s2",  s0,  s5,  i32, f2u(NAN), s2, i32, f2u(-1.0));
1206     TESTINSN_bin_f32("vnmla.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(0.0));
1207     TESTINSN_bin_f32("vnmla.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(NAN));
1208     TESTINSN_bin_f32("vnmla.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687));
1209     TESTINSN_bin_f32("vnmla.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346));
1210     TESTINSN_bin_f32("vnmla.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476));
1211     TESTINSN_bin_f32("vnmla.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065));
1212     TESTINSN_bin_f32("vnmla.f32 s30, s15, s2",  s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76));
1213     TESTINSN_bin_f32("vnmla.f32 s23, s24, s5",  s23, s24, i32, f2u(24), s5, i32, f2u(1346));
1214     TESTINSN_bin_f32("vnmla.f32 s10, s11, s2",  s10, s11, i32, f2u(48755), s2, i32, f2u(1089));
1215     TESTINSN_bin_f32("vnmla.f32 s29, s15, s7",  s29, s15, i32, f2u(214), s7, i32, f2u(1752065));
1216     TESTINSN_bin_f32("vnmla.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009));
1217     TESTINSN_bin_f32("vnmla.f32 s27, s21, s6",  s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575));
1218     TESTINSN_bin_f32("vnmla.f32 s30, s31, s2",  s30, s31, i32, f2u(2754), s2, i32, f2u(107));
1219     TESTINSN_bin_f32("vnmla.f32 s13, s24, s5",  s13, s24, i32, f2u(874), s5, i32, f2u(1384.6));
1220     TESTINSN_bin_f32("vnmla.f32 s10, s11, s2",  s10, s11, i32, f2u(487.587), s2, i32, f2u(109));
1221     TESTINSN_bin_f32("vnmla.f32 s29, s25, s7",  s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752.));
1222     TESTINSN_bin_f32("vnmla.f32 s0,  s11, s12", s0,  s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47));
1223     TESTINSN_bin_f32("vnmla.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676));
1224     TESTINSN_bin_f32("vnmla.f32 s0,  s5,  s2",  s0,  s5,  i32, f2u(INFINITY), s2, i32, f2u(-INFINITY));
1225     TESTINSN_bin_f32("vnmla.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0));
1226     TESTINSN_bin_f32("vnmla.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0));
1227
1228     printf("---- VMLS (fp) ----\n");
1229     TESTINSN_bin_f64("vmls.f64 d0,  d11, d12", d0,  d11, i32, f2u0(-INFINITY), f2u1(-INFINITY), d12, i32, f2u0(NAN), f2u1(NAN));
1230     TESTINSN_bin_f64("vmls.f64 d7,  d1,  d6",  d7,  d1,  i32, f2u0(INFINITY), f2u1(INFINITY), d6, i32, f2u0(NAN), f2u1(NAN));
1231     TESTINSN_bin_f64("vmls.f64 d0,  d5,  d2",  d0,  d5,  i32, f2u0(NAN), f2u1(NAN), d2, i32, f2u0(-1.0), f2u1(-1.0));
1232     TESTINSN_bin_f64("vmls.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(0.0), f2u1(0.0));
1233     TESTINSN_bin_f64("vmls.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(NAN), f2u1(NAN));
1234     TESTINSN_bin_f64("vmls.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687));
1235     TESTINSN_bin_f64("vmls.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346));
1236     TESTINSN_bin_f64("vmls.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476));
1237     TESTINSN_bin_f64("vmls.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065));
1238     TESTINSN_bin_f64("vmls.f64 d30, d15, d2",  d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76));
1239     TESTINSN_bin_f64("vmls.f64 d23, d24, d5",  d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346));
1240     TESTINSN_bin_f64("vmls.f64 d10, d11, d2",  d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089));
1241     TESTINSN_bin_f64("vmls.f64 d29, d15, d7",  d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065));
1242     TESTINSN_bin_f64("vmls.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009));
1243     TESTINSN_bin_f64("vmls.f64 d27, d21, d6",  d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575));
1244     TESTINSN_bin_f64("vmls.f64 d30, d31, d2",  d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107));
1245     TESTINSN_bin_f64("vmls.f64 d13, d24, d5",  d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6));
1246     TESTINSN_bin_f64("vmls.f64 d10, d11, d2",  d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109));
1247     TESTINSN_bin_f64("vmls.f64 d29, d25, d7",  d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752));
1248     TESTINSN_bin_f64("vmls.f64 d0,  d11, d12", d0,  d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47));
1249     TESTINSN_bin_f64("vmls.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676));
1250     TESTINSN_bin_f64("vmls.f64 d0,  d5,  d2",  d0,  d5,  i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY));
1251     TESTINSN_bin_f64("vmls.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1252     TESTINSN_bin_f64("vmls.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1253     TESTINSN_bin_f32("vmls.f32 s0,  s11, s12", s0,  s11, i32, f2u(-INFINITY), s12, i32, f2u(NAN));
1254     TESTINSN_bin_f32("vmls.f32 s7,  s1,  s6",  s7,  s1,  i32, f2u(INFINITY), s6, i32, f2u(NAN));
1255     TESTINSN_bin_f32("vmls.f32 s0,  s5,  s2",  s0,  s5,  i32, f2u(NAN), s2, i32, f2u(-1.0));
1256     TESTINSN_bin_f32("vmls.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(0.0));
1257     TESTINSN_bin_f32("vmls.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(NAN));
1258     TESTINSN_bin_f32("vmls.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687));
1259     TESTINSN_bin_f32("vmls.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346));
1260     TESTINSN_bin_f32("vmls.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476));
1261     TESTINSN_bin_f32("vmls.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065));
1262     TESTINSN_bin_f32("vmls.f32 s30, s15, s2",  s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76));
1263     TESTINSN_bin_f32("vmls.f32 s23, s24, s5",  s23, s24, i32, f2u(24), s5, i32, f2u(1346));
1264     TESTINSN_bin_f32("vmls.f32 s10, s11, s2",  s10, s11, i32, f2u(48755), s2, i32, f2u(1089));
1265     TESTINSN_bin_f32("vmls.f32 s29, s15, s7",  s29, s15, i32, f2u(214), s7, i32, f2u(1752065));
1266     TESTINSN_bin_f32("vmls.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009));
1267     TESTINSN_bin_f32("vmls.f32 s27, s21, s6",  s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575));
1268     TESTINSN_bin_f32("vmls.f32 s30, s31, s2",  s30, s31, i32, f2u(2754), s2, i32, f2u(107));
1269     TESTINSN_bin_f32("vmls.f32 s13, s24, s5",  s13, s24, i32, f2u(874), s5, i32, f2u(1384.6));
1270     TESTINSN_bin_f32("vmls.f32 s10, s11, s2",  s10, s11, i32, f2u(487.587), s2, i32, f2u(109));
1271     TESTINSN_bin_f32("vmls.f32 s29, s25, s7",  s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752));
1272     TESTINSN_bin_f32("vmls.f32 s0,  s11, s12", s0,  s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47));
1273     TESTINSN_bin_f32("vmls.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676));
1274     TESTINSN_bin_f32("vmls.f32 s0,  s5,  s2",  s0,  s5,  i32, f2u(INFINITY), s2, i32, f2u(-INFINITY));
1275     TESTINSN_bin_f32("vmls.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0));
1276     TESTINSN_bin_f32("vmls.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0));
1277
1278     printf("---- VNMLS (fp) ----\n");
1279     TESTINSN_bin_f64("vnmls.f64 d0,  d11, d12", d0,  d11, i32, f2u0(-INFINITY), f2u1(-INFINITY), d12, i32, f2u0(NAN), f2u1(NAN));
1280     TESTINSN_bin_f64("vnmls.f64 d7,  d1,  d6",  d7,  d1,  i32, f2u0(INFINITY), f2u1(INFINITY), d6, i32, f2u0(NAN), f2u1(NAN));
1281     TESTINSN_bin_f64("vnmls.f64 d0,  d5,  d2",  d0,  d5,  i32, f2u0(NAN), f2u1(NAN), d2, i32, f2u0(-1.0), f2u1(-1.0));
1282     TESTINSN_bin_f64("vnmls.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(0.0), f2u1(0.0));
1283     TESTINSN_bin_f64("vnmls.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(NAN), f2u1(NAN));
1284     TESTINSN_bin_f64("vnmls.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687));
1285     TESTINSN_bin_f64("vnmls.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346));
1286     TESTINSN_bin_f64("vnmls.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476));
1287     TESTINSN_bin_f64("vnmls.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065));
1288     TESTINSN_bin_f64("vnmls.f64 d30, d15, d2",  d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76));
1289     TESTINSN_bin_f64("vnmls.f64 d23, d24, d5",  d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346));
1290     TESTINSN_bin_f64("vnmls.f64 d10, d11, d2",  d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089));
1291     TESTINSN_bin_f64("vnmls.f64 d29, d15, d7",  d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065));
1292     TESTINSN_bin_f64("vnmls.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009));
1293     TESTINSN_bin_f64("vnmls.f64 d27, d21, d6",  d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575));
1294     TESTINSN_bin_f64("vnmls.f64 d30, d31, d2",  d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107));
1295     TESTINSN_bin_f64("vnmls.f64 d13, d24, d5",  d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6));
1296     TESTINSN_bin_f64("vnmls.f64 d10, d11, d2",  d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109));
1297     TESTINSN_bin_f64("vnmls.f64 d29, d25, d7",  d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752));
1298     TESTINSN_bin_f64("vnmls.f64 d0,  d11, d12", d0,  d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47));
1299     TESTINSN_bin_f64("vnmls.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676));
1300     TESTINSN_bin_f64("vnmls.f64 d0,  d5,  d2",  d0,  d5,  i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY));
1301     TESTINSN_bin_f64("vnmls.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1302     TESTINSN_bin_f64("vnmls.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1303     TESTINSN_bin_f32("vnmls.f32 s0,  s11, s12", s0,  s11, i32, f2u(-INFINITY), s12, i32, f2u(NAN));
1304     TESTINSN_bin_f32("vnmls.f32 s7,  s1,  s6",  s7,  s1,  i32, f2u(INFINITY), s6, i32, f2u(NAN));
1305     TESTINSN_bin_f32("vnmls.f32 s0,  s5,  s2",  s0,  s5,  i32, f2u(NAN), s2, i32, f2u(-1.0));
1306     TESTINSN_bin_f32("vnmls.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(0.0));
1307     TESTINSN_bin_f32("vnmls.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(NAN));
1308     TESTINSN_bin_f32("vnmls.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687));
1309     TESTINSN_bin_f32("vnmls.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346));
1310     TESTINSN_bin_f32("vnmls.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476));
1311     TESTINSN_bin_f32("vnmls.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065));
1312     TESTINSN_bin_f32("vnmls.f32 s30, s15, s2",  s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76));
1313     TESTINSN_bin_f32("vnmls.f32 s23, s24, s5",  s23, s24, i32, f2u(24), s5, i32, f2u(1346));
1314     TESTINSN_bin_f32("vnmls.f32 s10, s11, s2",  s10, s11, i32, f2u(48755), s2, i32, f2u(1089));
1315     TESTINSN_bin_f32("vnmls.f32 s29, s15, s7",  s29, s15, i32, f2u(214), s7, i32, f2u(1752065));
1316     TESTINSN_bin_f32("vnmls.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009));
1317     TESTINSN_bin_f32("vnmls.f32 s27, s21, s6",  s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575));
1318     TESTINSN_bin_f32("vnmls.f32 s30, s31, s2",  s30, s31, i32, f2u(2754), s2, i32, f2u(107));
1319     TESTINSN_bin_f32("vnmls.f32 s13, s24, s5",  s13, s24, i32, f2u(874), s5, i32, f2u(1384.6));
1320     TESTINSN_bin_f32("vnmls.f32 s10, s11, s2",  s10, s11, i32, f2u(487.587), s2, i32, f2u(109));
1321     TESTINSN_bin_f32("vnmls.f32 s29, s25, s7",  s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752));
1322     TESTINSN_bin_f32("vnmls.f32 s0,  s11, s12", s0,  s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47));
1323     TESTINSN_bin_f32("vnmls.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676));
1324     TESTINSN_bin_f32("vnmls.f32 s0,  s5,  s2",  s0,  s5,  i32, f2u(INFINITY), s2, i32, f2u(-INFINITY));
1325     TESTINSN_bin_f32("vnmls.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0));
1326     TESTINSN_bin_f32("vnmls.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0));
1327
1328     printf("---- VMUL (fp) ----\n");
1329     TESTINSN_bin_f64("vmul.f64 d0,  d11, d12", d0,  d11, i32, f2u0(-INFINITY), f2u1(-INFINITY), d12, i32, f2u0(NAN), f2u1(NAN));
1330     TESTINSN_bin_f64("vmul.f64 d7,  d1,  d6",  d7,  d1,  i32, f2u0(INFINITY), f2u1(INFINITY), d6, i32, f2u0(NAN), f2u1(NAN));
1331     TESTINSN_bin_f64("vmul.f64 d0,  d5,  d2",  d0,  d5,  i32, f2u0(NAN), f2u1(NAN), d2, i32, f2u0(-1.0), f2u1(-1.0));
1332     TESTINSN_bin_f64("vmul.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(0.0), f2u1(0.0));
1333     TESTINSN_bin_f64("vmul.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(NAN), f2u1(NAN));
1334     TESTINSN_bin_f64("vmul.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687));
1335     TESTINSN_bin_f64("vmul.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346));
1336     TESTINSN_bin_f64("vmul.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476));
1337     TESTINSN_bin_f64("vmul.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065));
1338     TESTINSN_bin_f64("vmul.f64 d30, d15, d2",  d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76));
1339     TESTINSN_bin_f64("vmul.f64 d23, d24, d5",  d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346));
1340     TESTINSN_bin_f64("vmul.f64 d10, d11, d2",  d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089));
1341     TESTINSN_bin_f64("vmul.f64 d29, d15, d7",  d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065));
1342     TESTINSN_bin_f64("vmul.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009));
1343     TESTINSN_bin_f64("vmul.f64 d27, d21, d6",  d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575));
1344     TESTINSN_bin_f64("vmul.f64 d30, d31, d2",  d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107));
1345     TESTINSN_bin_f64("vmul.f64 d13, d24, d5",  d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6));
1346     TESTINSN_bin_f64("vmul.f64 d10, d11, d2",  d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109));
1347     TESTINSN_bin_f64("vmul.f64 d29, d25, d7",  d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752));
1348     TESTINSN_bin_f64("vmul.f64 d0,  d11, d12", d0,  d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47));
1349     TESTINSN_bin_f64("vmul.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676));
1350     TESTINSN_bin_f64("vmul.f64 d0,  d5,  d2",  d0,  d5,  i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY));
1351     TESTINSN_bin_f64("vmul.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1352     TESTINSN_bin_f64("vmul.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1353     TESTINSN_bin_f32("vmul.f32 s0,  s11, s12", s0,  s11, i32, f2u(-INFINITY), s12, i32, f2u(NAN));
1354     TESTINSN_bin_f32("vmul.f32 s7,  s1,  s6",  s7,  s1,  i32, f2u(INFINITY), s6, i32, f2u(NAN));
1355     TESTINSN_bin_f32("vmul.f32 s0,  s5,  s2",  s0,  s5,  i32, f2u(NAN), s2, i32, f2u(-1.0));
1356     TESTINSN_bin_f32("vmul.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(0.0));
1357     TESTINSN_bin_f32("vmul.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(NAN));
1358     TESTINSN_bin_f32("vmul.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687));
1359     TESTINSN_bin_f32("vmul.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346));
1360     TESTINSN_bin_f32("vmul.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476));
1361     TESTINSN_bin_f32("vmul.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065));
1362     TESTINSN_bin_f32("vmul.f32 s30, s15, s2",  s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76));
1363     TESTINSN_bin_f32("vmul.f32 s23, s24, s5",  s23, s24, i32, f2u(24), s5, i32, f2u(1346));
1364     TESTINSN_bin_f32("vmul.f32 s10, s11, s2",  s10, s11, i32, f2u(48755), s2, i32, f2u(1089));
1365     TESTINSN_bin_f32("vmul.f32 s29, s15, s7",  s29, s15, i32, f2u(214), s7, i32, f2u(1752065));
1366     TESTINSN_bin_f32("vmul.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009));
1367     TESTINSN_bin_f32("vmul.f32 s27, s21, s6",  s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575));
1368     TESTINSN_bin_f32("vmul.f32 s30, s31, s2",  s30, s31, i32, f2u(2754), s2, i32, f2u(107));
1369     TESTINSN_bin_f32("vmul.f32 s13, s24, s5",  s13, s24, i32, f2u(874), s5, i32, f2u(1384.6));
1370     TESTINSN_bin_f32("vmul.f32 s10, s11, s2",  s10, s11, i32, f2u(487.587), s2, i32, f2u(109));
1371     TESTINSN_bin_f32("vmul.f32 s29, s25, s7",  s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752));
1372     TESTINSN_bin_f32("vmul.f32 s0,  s11, s12", s0,  s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47));
1373     TESTINSN_bin_f32("vmul.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676));
1374     TESTINSN_bin_f32("vmul.f32 s0,  s5,  s2",  s0,  s5,  i32, f2u(INFINITY), s2, i32, f2u(-INFINITY));
1375     TESTINSN_bin_f32("vmul.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0));
1376     TESTINSN_bin_f32("vmul.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0));
1377
1378     printf("---- VNMUL (fp) ----\n");
1379     TESTINSN_bin_f64("vnmul.f64 d0,  d11, d12", d0,  d11, i32, f2u0(-INFINITY), f2u1(-INFINITY), d12, i32, f2u0(NAN), f2u1(NAN));
1380     TESTINSN_bin_f64("vnmul.f64 d7,  d1,  d6",  d7,  d1,  i32, f2u0(INFINITY), f2u1(INFINITY), d6, i32, f2u0(NAN), f2u1(NAN));
1381     TESTINSN_bin_f64("vnmul.f64 d0,  d5,  d2",  d0,  d5,  i32, f2u0(NAN), f2u1(NAN), d2, i32, f2u0(-1.0), f2u1(-1.0));
1382     TESTINSN_bin_f64("vnmul.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(0.0), f2u1(0.0));
1383     TESTINSN_bin_f64("vnmul.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(NAN), f2u1(NAN));
1384     TESTINSN_bin_f64("vnmul.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687));
1385     TESTINSN_bin_f64("vnmul.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346));
1386     TESTINSN_bin_f64("vnmul.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476));
1387     TESTINSN_bin_f64("vnmul.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065));
1388     TESTINSN_bin_f64("vnmul.f64 d30, d15, d2",  d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76));
1389     TESTINSN_bin_f64("vnmul.f64 d23, d24, d5",  d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346));
1390     TESTINSN_bin_f64("vnmul.f64 d10, d11, d2",  d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089));
1391     TESTINSN_bin_f64("vnmul.f64 d29, d15, d7",  d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065));
1392     TESTINSN_bin_f64("vnmul.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009));
1393     TESTINSN_bin_f64("vnmul.f64 d27, d21, d6",  d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575));
1394     TESTINSN_bin_f64("vnmul.f64 d30, d31, d2",  d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107));
1395     TESTINSN_bin_f64("vnmul.f64 d13, d24, d5",  d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6));
1396     TESTINSN_bin_f64("vnmul.f64 d10, d11, d2",  d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109));
1397     TESTINSN_bin_f64("vnmul.f64 d29, d25, d7",  d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752));
1398     TESTINSN_bin_f64("vnmul.f64 d0,  d11, d12", d0,  d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47));
1399     TESTINSN_bin_f64("vnmul.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676));
1400     TESTINSN_bin_f64("vnmul.f64 d0,  d5,  d2",  d0,  d5,  i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY));
1401     TESTINSN_bin_f64("vnmul.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1402     TESTINSN_bin_f64("vnmul.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1403     TESTINSN_bin_f32("vnmul.f32 s0,  s11, s12", s0,  s11, i32, f2u(-INFINITY), s12, i32, f2u(NAN));
1404     TESTINSN_bin_f32("vnmul.f32 s7,  s1,  s6",  s7,  s1,  i32, f2u(INFINITY), s6, i32, f2u(NAN));
1405     TESTINSN_bin_f32("vnmul.f32 s0,  s5,  s2",  s0,  s5,  i32, f2u(NAN), s2, i32, f2u(-1.0));
1406     TESTINSN_bin_f32("vnmul.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(0.0));
1407     TESTINSN_bin_f32("vnmul.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(NAN));
1408     TESTINSN_bin_f32("vnmul.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687));
1409     TESTINSN_bin_f32("vnmul.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346));
1410     TESTINSN_bin_f32("vnmul.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476));
1411     TESTINSN_bin_f32("vnmul.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065));
1412     TESTINSN_bin_f32("vnmul.f32 s30, s15, s2",  s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76));
1413     TESTINSN_bin_f32("vnmul.f32 s23, s24, s5",  s23, s24, i32, f2u(24), s5, i32, f2u(1346));
1414     TESTINSN_bin_f32("vnmul.f32 s10, s11, s2",  s10, s11, i32, f2u(48755), s2, i32, f2u(1089));
1415     TESTINSN_bin_f32("vnmul.f32 s29, s15, s7",  s29, s15, i32, f2u(214), s7, i32, f2u(1752065));
1416     TESTINSN_bin_f32("vnmul.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009));
1417     TESTINSN_bin_f32("vnmul.f32 s27, s21, s6",  s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575));
1418     TESTINSN_bin_f32("vnmul.f32 s30, s31, s2",  s30, s31, i32, f2u(2754), s2, i32, f2u(107));
1419     TESTINSN_bin_f32("vnmul.f32 s13, s24, s5",  s13, s24, i32, f2u(874), s5, i32, f2u(1384.6));
1420     TESTINSN_bin_f32("vnmul.f32 s10, s11, s2",  s10, s11, i32, f2u(487.587), s2, i32, f2u(109));
1421     TESTINSN_bin_f32("vnmul.f32 s29, s25, s7",  s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752));
1422     TESTINSN_bin_f32("vnmul.f32 s0,  s11, s12", s0,  s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47));
1423     TESTINSN_bin_f32("vnmul.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676));
1424     TESTINSN_bin_f32("vnmul.f32 s0,  s5,  s2",  s0,  s5,  i32, f2u(INFINITY), s2, i32, f2u(-INFINITY));
1425     TESTINSN_bin_f32("vnmul.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0));
1426     TESTINSN_bin_f32("vnmul.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0));
1427
1428     printf("---- VADD (fp) ----\n");
1429     TESTINSN_bin_f64("vadd.f64 d0,  d11, d12", d0,  d11, i32, f2u0(-INFINITY), f2u1(-INFINITY), d12, i32, f2u0(NAN), f2u1(NAN));
1430     TESTINSN_bin_f64("vadd.f64 d7,  d1,  d6",  d7,  d1,  i32, f2u0(INFINITY), f2u1(INFINITY), d6, i32, f2u0(NAN), f2u1(NAN));
1431     TESTINSN_bin_f64("vadd.f64 d0,  d5,  d2",  d0,  d5,  i32, f2u0(NAN), f2u1(NAN), d2, i32, f2u0(-1.0), f2u1(-1.0));
1432     TESTINSN_bin_f64("vadd.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(0.0), f2u1(0.0));
1433     TESTINSN_bin_f64("vadd.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(NAN), f2u1(NAN));
1434     TESTINSN_bin_f64("vadd.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687));
1435     TESTINSN_bin_f64("vadd.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346));
1436     TESTINSN_bin_f64("vadd.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476));
1437     TESTINSN_bin_f64("vadd.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065));
1438     TESTINSN_bin_f64("vadd.f64 d30, d15, d2",  d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76));
1439     TESTINSN_bin_f64("vadd.f64 d23, d24, d5",  d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346));
1440     TESTINSN_bin_f64("vadd.f64 d10, d11, d2",  d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089));
1441     TESTINSN_bin_f64("vadd.f64 d29, d15, d7",  d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065));
1442     TESTINSN_bin_f64("vadd.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009));
1443     TESTINSN_bin_f64("vadd.f64 d27, d21, d6",  d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575));
1444     TESTINSN_bin_f64("vadd.f64 d30, d31, d2",  d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107));
1445     TESTINSN_bin_f64("vadd.f64 d13, d24, d5",  d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6));
1446     TESTINSN_bin_f64("vadd.f64 d10, d11, d2",  d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109));
1447     TESTINSN_bin_f64("vadd.f64 d29, d25, d7",  d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752));
1448     TESTINSN_bin_f64("vadd.f64 d0,  d11, d12", d0,  d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47));
1449     TESTINSN_bin_f64("vadd.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676));
1450     TESTINSN_bin_f64("vadd.f64 d0,  d5,  d2",  d0,  d5,  i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY));
1451     TESTINSN_bin_f64("vadd.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1452     TESTINSN_bin_f64("vadd.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1453     TESTINSN_bin_f32("vadd.f32 s0,  s11, s12", s0,  s11, i32, f2u(-INFINITY), s12, i32, f2u(NAN));
1454     TESTINSN_bin_f32("vadd.f32 s7,  s1,  s6",  s7,  s1,  i32, f2u(INFINITY), s6, i32, f2u(NAN));
1455     TESTINSN_bin_f32("vadd.f32 s0,  s5,  s2",  s0,  s5,  i32, f2u(NAN), s2, i32, f2u(-1.0));
1456     TESTINSN_bin_f32("vadd.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(0.0));
1457     TESTINSN_bin_f32("vadd.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(NAN));
1458     TESTINSN_bin_f32("vadd.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687));
1459     TESTINSN_bin_f32("vadd.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346));
1460     TESTINSN_bin_f32("vadd.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476));
1461     TESTINSN_bin_f32("vadd.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065));
1462     TESTINSN_bin_f32("vadd.f32 s30, s15, s2",  s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76));
1463     TESTINSN_bin_f32("vadd.f32 s23, s24, s5",  s23, s24, i32, f2u(24), s5, i32, f2u(1346));
1464     TESTINSN_bin_f32("vadd.f32 s10, s11, s2",  s10, s11, i32, f2u(48755), s2, i32, f2u(1089));
1465     TESTINSN_bin_f32("vadd.f32 s29, s15, s7",  s29, s15, i32, f2u(214), s7, i32, f2u(1752065));
1466     TESTINSN_bin_f32("vadd.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009));
1467     TESTINSN_bin_f32("vadd.f32 s27, s21, s6",  s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575));
1468     TESTINSN_bin_f32("vadd.f32 s30, s31, s2",  s30, s31, i32, f2u(2754), s2, i32, f2u(107));
1469     TESTINSN_bin_f32("vadd.f32 s13, s24, s5",  s13, s24, i32, f2u(874), s5, i32, f2u(1384.6));
1470     TESTINSN_bin_f32("vadd.f32 s10, s11, s2",  s10, s11, i32, f2u(487.587), s2, i32, f2u(109));
1471     TESTINSN_bin_f32("vadd.f32 s29, s25, s7",  s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752));
1472     TESTINSN_bin_f32("vadd.f32 s0,  s11, s12", s0,  s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47));
1473     TESTINSN_bin_f32("vadd.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676));
1474     TESTINSN_bin_f32("vadd.f32 s0,  s5,  s2",  s0,  s5,  i32, f2u(INFINITY), s2, i32, f2u(-INFINITY));
1475     TESTINSN_bin_f32("vadd.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0));
1476     TESTINSN_bin_f32("vadd.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0));
1477
1478     printf("---- VSUB (fp) ----\n");
1479     TESTINSN_bin_f64("vsub.f64 d0,  d11, d12", d0,  d11, i32, f2u0(-INFINITY), f2u1(-INFINITY), d12, i32, f2u0(NAN), f2u1(NAN));
1480     TESTINSN_bin_f64("vsub.f64 d7,  d1,  d6",  d7,  d1,  i32, f2u0(INFINITY), f2u1(INFINITY), d6, i32, f2u0(NAN), f2u1(NAN));
1481     TESTINSN_bin_f64("vsub.f64 d0,  d5,  d2",  d0,  d5,  i32, f2u0(NAN), f2u1(NAN), d2, i32, f2u0(-1.0), f2u1(-1.0));
1482     TESTINSN_bin_f64("vsub.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(0.0), f2u1(0.0));
1483     TESTINSN_bin_f64("vsub.f64 d10, d13, d15", d10, d13, i32, f2u0(NAN), f2u1(NAN), d15, i32, f2u0(NAN), f2u1(NAN));
1484     TESTINSN_bin_f64("vsub.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687));
1485     TESTINSN_bin_f64("vsub.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346));
1486     TESTINSN_bin_f64("vsub.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476));
1487     TESTINSN_bin_f64("vsub.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065));
1488     TESTINSN_bin_f64("vsub.f64 d30, d15, d2",  d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76));
1489     TESTINSN_bin_f64("vsub.f64 d23, d24, d5",  d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346));
1490     TESTINSN_bin_f64("vsub.f64 d10, d11, d2",  d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089));
1491     TESTINSN_bin_f64("vsub.f64 d29, d15, d7",  d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065));
1492     TESTINSN_bin_f64("vsub.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009));
1493     TESTINSN_bin_f64("vsub.f64 d27, d21, d6",  d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575));
1494     TESTINSN_bin_f64("vsub.f64 d30, d31, d2",  d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107));
1495     TESTINSN_bin_f64("vsub.f64 d13, d24, d5",  d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6));
1496     TESTINSN_bin_f64("vsub.f64 d10, d11, d2",  d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109));
1497     TESTINSN_bin_f64("vsub.f64 d29, d25, d7",  d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752));
1498     TESTINSN_bin_f64("vsub.f64 d0,  d11, d12", d0,  d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47));
1499     TESTINSN_bin_f64("vsub.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676));
1500     TESTINSN_bin_f64("vsub.f64 d0,  d5,  d2",  d0,  d5,  i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY));
1501     TESTINSN_bin_f64("vsub.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1502     TESTINSN_bin_f64("vsub.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1503     TESTINSN_bin_f32("vsub.f32 s0,  s11, s12", s0,  s11, i32, f2u(-INFINITY), s12, i32, f2u(NAN));
1504     TESTINSN_bin_f32("vsub.f32 s7,  s1,  s6",  s7,  s1,  i32, f2u(INFINITY), s6, i32, f2u(NAN));
1505     TESTINSN_bin_f32("vsub.f32 s0,  s5,  s2",  s0,  s5,  i32, f2u(NAN), s2, i32, f2u(-1.0));
1506     TESTINSN_bin_f32("vsub.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(0.0));
1507     TESTINSN_bin_f32("vsub.f32 s10, s13, s15", s10, s13, i32, f2u(NAN), s15, i32, f2u(NAN));
1508     TESTINSN_bin_f32("vsub.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687));
1509     TESTINSN_bin_f32("vsub.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346));
1510     TESTINSN_bin_f32("vsub.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476));
1511     TESTINSN_bin_f32("vsub.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065));
1512     TESTINSN_bin_f32("vsub.f32 s30, s15, s2",  s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76));
1513     TESTINSN_bin_f32("vsub.f32 s23, s24, s5",  s23, s24, i32, f2u(24), s5, i32, f2u(1346));
1514     TESTINSN_bin_f32("vsub.f32 s10, s11, s2",  s10, s11, i32, f2u(48755), s2, i32, f2u(1089));
1515     TESTINSN_bin_f32("vsub.f32 s29, s15, s7",  s29, s15, i32, f2u(214), s7, i32, f2u(1752065));
1516     TESTINSN_bin_f32("vsub.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009));
1517     TESTINSN_bin_f32("vsub.f32 s27, s21, s6",  s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575));
1518     TESTINSN_bin_f32("vsub.f32 s30, s31, s2",  s30, s31, i32, f2u(2754), s2, i32, f2u(107));
1519     TESTINSN_bin_f32("vsub.f32 s13, s24, s5",  s13, s24, i32, f2u(874), s5, i32, f2u(1384.6));
1520     TESTINSN_bin_f32("vsub.f32 s10, s11, s2",  s10, s11, i32, f2u(487.587), s2, i32, f2u(109));
1521     TESTINSN_bin_f32("vsub.f32 s29, s25, s7",  s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752));
1522     TESTINSN_bin_f32("vsub.f32 s0,  s11, s12", s0,  s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47));
1523     TESTINSN_bin_f32("vsub.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676));
1524     TESTINSN_bin_f32("vsub.f32 s0,  s5,  s2",  s0,  s5,  i32, f2u(INFINITY), s2, i32, f2u(-INFINITY));
1525     TESTINSN_bin_f32("vsub.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0));
1526     TESTINSN_bin_f32("vsub.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0));
1527
1528     printf("---- VDIV (fp) ----\n");
1529     TESTINSN_bin_f64("vdiv.f64 d20, d25, d22", d20, d25, i32, f2u0(23.04), f2u1(23.04), d22, i32, f2u0(-45.5687), f2u1(-45.5687));
1530     TESTINSN_bin_f64("vdiv.f64 d23, d24, d25", d23, d24, i32, f2u0(-347856.475), f2u1(-347856.475), d25, i32, f2u0(1346), f2u1(1346));
1531     TESTINSN_bin_f64("vdiv.f64 d20, d31, d12", d20, d31, i32, f2u0(48755), f2u1(48755), d12, i32, f2u0(-45786.476), f2u1(-45786.476));
1532     TESTINSN_bin_f64("vdiv.f64 d19, d25, d27", d19, d25, i32, f2u0(95867.76), f2u1(95867.76), d27, i32, f2u0(17065), f2u1(17065));
1533     TESTINSN_bin_f64("vdiv.f64 d30, d15, d2",  d30, d15, i32, f2u0(-45667.24), f2u1(-45667.24), d2, i32, f2u0(-248562.76), f2u1(-248562.76));
1534     TESTINSN_bin_f64("vdiv.f64 d23, d24, d5",  d23, d24, i32, f2u0(24), f2u1(24), d5, i32, f2u0(1346), f2u1(1346));
1535     TESTINSN_bin_f64("vdiv.f64 d10, d11, d2",  d10, d11, i32, f2u0(48755), f2u1(48755), d2, i32, f2u0(1089), f2u1(1089));
1536     TESTINSN_bin_f64("vdiv.f64 d29, d15, d7",  d29, d15, i32, f2u0(214), f2u1(214), d7, i32, f2u0(1752065), f2u1(1752065));
1537     TESTINSN_bin_f64("vdiv.f64 d30, d11, d12", d30, d11, i32, f2u0(356047.56), f2u1(356047.56), d12, i32, f2u0(5867.009), f2u1(5867.009));
1538     TESTINSN_bin_f64("vdiv.f64 d27, d21, d6",  d27, d21, i32, f2u0(34.00046), f2u1(34.00046), d6, i32, f2u0(0.0024575), f2u1(0.0024575));
1539     TESTINSN_bin_f64("vdiv.f64 d30, d31, d2",  d30, d31, i32, f2u0(2754), f2u1(2754), d2, i32, f2u0(107), f2u1(107));
1540     TESTINSN_bin_f64("vdiv.f64 d13, d24, d5",  d13, d24, i32, f2u0(874), f2u1(874), d5, i32, f2u0(1384.6), f2u1(1384.6));
1541     TESTINSN_bin_f64("vdiv.f64 d10, d11, d2",  d10, d11, i32, f2u0(487.587), f2u1(487.587), d2, i32, f2u0(109), f2u1(109));
1542     TESTINSN_bin_f64("vdiv.f64 d29, d25, d7",  d29, d25, i32, f2u0(-INFINITY), f2u1(-INFINITY), d7, i32, f2u0(1752), f2u1(1752));
1543     TESTINSN_bin_f64("vdiv.f64 d0,  d11, d12", d0,  d11, i32, f2u0(INFINITY), f2u1(INFINITY), d12, i32, f2u0(-5786.47), f2u1(-5786.47));
1544     TESTINSN_bin_f64("vdiv.f64 d27, d21, d16", d27, d21, i32, f2u0(456.2489562), f2u1(456.2489562), d16, i32, f2u0(-7.2945676), f2u1(-7.2945676));
1545     TESTINSN_bin_f64("vdiv.f64 d0,  d5,  d2",  d0,  d5,  i32, f2u0(INFINITY), f2u1(INFINITY), d2, i32, f2u0(-INFINITY), f2u1(-INFINITY));
1546     TESTINSN_bin_f64("vdiv.f64 d20, d13, d15", d20, d13, i32, f2u0(-INFINITY), f2u1(-INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1547     TESTINSN_bin_f64("vdiv.f64 d10, d23, d15", d10, d23, i32, f2u0(INFINITY), f2u1(INFINITY), d15, i32, f2u0(0.0), f2u1(0.0));
1548     TESTINSN_bin_f32("vdiv.f32 s20, s25, s22", s20, s25, i32, f2u(23.04), s22, i32, f2u(-45.5687));
1549     TESTINSN_bin_f32("vdiv.f32 s23, s24, s25", s23, s24, i32, f2u(-347856.475), s25, i32, f2u(1346));
1550     TESTINSN_bin_f32("vdiv.f32 s20, s31, s12", s20, s31, i32, f2u(48755), s12, i32, f2u(-45786.476));
1551     TESTINSN_bin_f32("vdiv.f32 s19, s25, s27", s19, s25, i32, f2u(95867.76), s27, i32, f2u(17065));
1552     TESTINSN_bin_f32("vdiv.f32 s30, s15, s2",  s30, s15, i32, f2u(-45667.24), s2, i32, f2u(-248562.76));
1553     TESTINSN_bin_f32("vdiv.f32 s23, s24, s5",  s23, s24, i32, f2u(24), s5, i32, f2u(1346));
1554     TESTINSN_bin_f32("vdiv.f32 s10, s11, s2",  s10, s11, i32, f2u(48755), s2, i32, f2u(1089));
1555     TESTINSN_bin_f32("vdiv.f32 s29, s15, s7",  s29, s15, i32, f2u(214), s7, i32, f2u(1752065));
1556     TESTINSN_bin_f32("vdiv.f32 s30, s11, s12", s30, s11, i32, f2u(356047.56), s12, i32, f2u(5867.009));
1557     TESTINSN_bin_f32("vdiv.f32 s27, s21, s6",  s27, s21, i32, f2u(34.00046), s6, i32, f2u(0.0024575));
1558     TESTINSN_bin_f32("vdiv.f32 s30, s31, s2",  s30, s31, i32, f2u(2754), s2, i32, f2u(107));
1559     TESTINSN_bin_f32("vdiv.f32 s13, s24, s5",  s13, s24, i32, f2u(874), s5, i32, f2u(1384.6));
1560     TESTINSN_bin_f32("vdiv.f32 s10, s11, s2",  s10, s11, i32, f2u(487.587), s2, i32, f2u(109));
1561     TESTINSN_bin_f32("vdiv.f32 s29, s25, s7",  s29, s25, i32, f2u(-INFINITY), s7, i32, f2u(1752));
1562     TESTINSN_bin_f32("vdiv.f32 s0,  s11, s12", s0,  s11, i32, f2u(INFINITY), s12, i32, f2u(-5786.47));
1563     TESTINSN_bin_f32("vdiv.f32 s27, s21, s16", s27, s21, i32, f2u(456.2489562), s16, i32, f2u(-7.2945676));
1564     TESTINSN_bin_f32("vdiv.f32 s0,  s5,  s2",  s0,  s5,  i32, f2u(INFINITY), s2, i32, f2u(-INFINITY));
1565     TESTINSN_bin_f32("vdiv.f32 s20, s13, s15", s20, s13, i32, f2u(-INFINITY), s15, i32, f2u(0.0));
1566     TESTINSN_bin_f32("vdiv.f32 s10, s23, s15", s10, s23, i32, f2u(INFINITY), s15, i32, f2u(0.0));
1567
1568     printf("---- VABS ----\n");
1569     TESTINSN_un_f64("vabs.f64 d15, d4",  d15, d4,  i32, f2u0(NAN), f2u1(NAN));
1570     TESTINSN_un_f64("vabs.f64 d31, d4",  d31, d4,  i32, f2u0(NAN), f2u1(NAN));
1571     TESTINSN_un_f64("vabs.f64 d25, d25", d25, d24, i32, f2u0(INFINITY), f2u1(INFINITY));
1572     TESTINSN_un_f64("vabs.f64 d18, d17", d18, d17, i32, f2u0(INFINITY), f2u1(INFINITY));
1573     TESTINSN_un_f64("vabs.f64 d30, d1",  d30, d1,  i32, f2u0(-INFINITY), f2u1(-INFINITY));
1574     TESTINSN_un_f64("vabs.f64 d8,  d27", d8,  d27, i32, f2u0(-INFINITY), f2u1(-INFINITY));
1575     TESTINSN_un_f64("vabs.f64 d20, d1",  d20, d1,  i32, f2u0(76543.001002), f2u1(76543.001002));
1576     TESTINSN_un_f64("vabs.f64 d28, d7",  d28, d7,  i32, f2u0(-4856.234), f2u1(-4856.234));
1577     TESTINSN_un_f64("vabs.f64 d2,  d19", d2, d19,  i32,f2u0(87.098217), f2u1(87.098217));
1578     TESTINSN_un_f64("vabs.f64 d8,  d7",  d8, d7,  i32, f2u0(-122156.2), f2u1(-122156.2));
1579     TESTINSN_un_f32("vabs.f32 s15, s4",  s15, s4,  i32, f2u(NAN));
1580     TESTINSN_un_f32("vabs.f32 s31, s4",  s31, s4,  i32, f2u(NAN));
1581     TESTINSN_un_f32("vabs.f32 s25, s25", s25, s24, i32, f2u(INFINITY));
1582     TESTINSN_un_f32("vabs.f32 s18, s17", s18, s17, i32, f2u(INFINITY));
1583     TESTINSN_un_f32("vabs.f32 s30, s1",  s30, s1,  i32, f2u(-INFINITY));
1584     TESTINSN_un_f32("vabs.f32 s8,  s27", s8,  s27, i32, f2u(-INFINITY));
1585     TESTINSN_un_f32("vabs.f32 s20, s1",  s20, s1,  i32, f2u(76543.001002));
1586     TESTINSN_un_f32("vabs.f32 s28, s7",  s28, s7,  i32, f2u(-4856.234));
1587     TESTINSN_un_f32("vabs.f32 s2,  s19", s2, s19,  i32,f2u(87.098217));
1588     TESTINSN_un_f32("vabs.f32 s8,  s7",  s8, s7,  i32, f2u(-122156.2));
1589
1590     printf("---- VNEG ----\n");
1591     TESTINSN_un_f64("vneg.f64 d15, d4",  d15, d4,  i32, f2u0(NAN), f2u1(NAN));
1592     TESTINSN_un_f64("vneg.f64 d31, d4",  d31, d4,  i32, f2u0(NAN), f2u1(NAN));
1593     TESTINSN_un_f64("vneg.f64 d25, d25", d25, d24, i32, f2u0(INFINITY), f2u1(INFINITY));
1594     TESTINSN_un_f64("vneg.f64 d18, d17", d18, d17, i32, f2u0(INFINITY), f2u1(INFINITY));
1595     TESTINSN_un_f64("vneg.f64 d30, d1",  d30, d1,  i32, f2u0(-INFINITY), f2u1(-INFINITY));
1596     TESTINSN_un_f64("vneg.f64 d8,  d27", d8,  d27, i32, f2u0(-INFINITY), f2u1(-INFINITY));
1597     TESTINSN_un_f64("vneg.f64 d20, d1",  d20, d1,  i32, f2u0(76543.001002), f2u1(76543.001002));
1598     TESTINSN_un_f64("vneg.f64 d28, d7",  d28, d7,  i32, f2u0(-4856.234), f2u1(-4856.234));
1599     TESTINSN_un_f64("vneg.f64 d2,  d19", d2, d19,  i32,f2u0(87.098217), f2u1(87.098217));
1600     TESTINSN_un_f64("vneg.f64 d8,  d7",  d8, d7,  i32, f2u0(-122156.2), f2u1(-122156.2));
1601     TESTINSN_un_f32("vneg.f32 s15, s4",  s15, s4,  i32, f2u(NAN));
1602     TESTINSN_un_f32("vneg.f32 s31, s4",  s31, s4,  i32, f2u(NAN));
1603     TESTINSN_un_f32("vneg.f32 s25, s25", s25, s24, i32, f2u(INFINITY));
1604     TESTINSN_un_f32("vneg.f32 s18, s17", s18, s17, i32, f2u(INFINITY));
1605     TESTINSN_un_f32("vneg.f32 s30, s1",  s30, s1,  i32, f2u(-INFINITY));
1606     TESTINSN_un_f32("vneg.f32 s8,  s27", s8,  s27, i32, f2u(-INFINITY));
1607     TESTINSN_un_f32("vneg.f32 s20, s1",  s20, s1,  i32, f2u(76543.001002));
1608     TESTINSN_un_f32("vneg.f32 s28, s7",  s28, s7,  i32, f2u(-4856.234));
1609     TESTINSN_un_f32("vneg.f32 s2,  s19", s2, s19,  i32,f2u(87.098217));
1610     TESTINSN_un_f32("vneg.f32 s8,  s7",  s8, s7,  i32, f2u(-122156.2));
1611
1612     printf("---- VMOV (register) ----\n");
1613     TESTINSN_un_f64("vmov.f64 d15, d4",  d15, d4,  i32, f2u0(NAN), f2u1(NAN));
1614     TESTINSN_un_f64("vmov.f64 d31, d4",  d31, d4,  i32, f2u0(NAN), f2u1(NAN));
1615     TESTINSN_un_f64("vmov.f64 d25, d25", d25, d24, i32, f2u0(INFINITY), f2u1(INFINITY));
1616     TESTINSN_un_f64("vmov.f64 d18, d17", d18, d17, i32, f2u0(INFINITY), f2u1(INFINITY));
1617     TESTINSN_un_f64("vmov.f64 d30, d1",  d30, d1,  i32, f2u0(-INFINITY), f2u1(-INFINITY));
1618     TESTINSN_un_f64("vmov.f64 d8,  d27", d8,  d27, i32, f2u0(-INFINITY), f2u1(-INFINITY));
1619     TESTINSN_un_f64("vmov.f64 d20, d1",  d20, d1,  i32, f2u0(76543.001002), f2u1(76543.001002));
1620     TESTINSN_un_f64("vmov.f64 d28, d7",  d28, d7,  i32, f2u0(-4856.234), f2u1(-4856.234));
1621     TESTINSN_un_f64("vmov.f64 d2,  d19", d2, d19,  i32,f2u0(87.098217), f2u1(87.098217));
1622     TESTINSN_un_f64("vmov.f64 d8,  d7",  d8, d7,  i32, f2u0(-122156.2), f2u1(-122156.2));
1623     TESTINSN_un_f32("vmov.f32 s15, s4",  s15, s4,  i32, f2u(NAN));
1624     TESTINSN_un_f32("vmov.f32 s31, s4",  s31, s4,  i32, f2u(NAN));
1625     TESTINSN_un_f32("vmov.f32 s25, s25", s25, s24, i32, f2u(INFINITY));
1626     TESTINSN_un_f32("vmov.f32 s18, s17", s18, s17, i32, f2u(INFINITY));
1627     TESTINSN_un_f32("vmov.f32 s30, s1",  s30, s1,  i32, f2u(-INFINITY));
1628     TESTINSN_un_f32("vmov.f32 s8,  s27", s8,  s27, i32, f2u(-INFINITY));
1629     TESTINSN_un_f32("vmov.f32 s20, s1",  s20, s1,  i32, f2u(76543.001002));
1630     TESTINSN_un_f32("vmov.f32 s28, s7",  s28, s7,  i32, f2u(-4856.234));
1631     TESTINSN_un_f32("vmov.f32 s2,  s19", s2, s19,  i32,f2u(87.098217));
1632     TESTINSN_un_f32("vmov.f32 s8,  s7",  s8, s7,  i32, f2u(-122156.2));
1633
1634     printf("---- VSQRT ----\n");
1635     TESTINSN_un_f64("vsqrt.f64 d15, d4",  d15, d4,  i32, f2u0(NAN), f2u1(NAN));
1636     TESTINSN_un_f64("vsqrt.f64 d31, d4",  d31, d4,  i32, f2u0(NAN), f2u1(NAN));
1637     TESTINSN_un_f64("vsqrt.f64 d25, d25", d25, d24, i32, f2u0(INFINITY), f2u1(INFINITY));
1638     TESTINSN_un_f64("vsqrt.f64 d18, d17", d18, d17, i32, f2u0(INFINITY), f2u1(INFINITY));
1639     TESTINSN_un_f64("vsqrt.f64 d30, d1",  d30, d1,  i32, f2u0(-INFINITY), f2u1(-INFINITY));
1640     TESTINSN_un_f64("vsqrt.f64 d8,  d27", d8,  d27, i32, f2u0(-INFINITY), f2u1(-INFINITY));
1641     TESTINSN_un_f64("vsqrt.f64 d20, d1",  d20, d1,  i32, f2u0(76543.001002), f2u1(76543.001002));
1642     TESTINSN_un_f64("vsqrt.f64 d28, d7",  d28, d7,  i32, f2u0(-4856.234), f2u1(-4856.234));
1643     TESTINSN_un_f64("vsqrt.f64 d2,  d19", d2, d19,  i32,f2u0(87.098217), f2u1(87.098217));
1644     TESTINSN_un_f64("vsqrt.f64 d8,  d7",  d8, d7,  i32, f2u0(-122156.2), f2u1(-122156.2));
1645     TESTINSN_un_f32("vsqrt.f32 s15, s4",  s15, s4,  i32, f2u(NAN));
1646     TESTINSN_un_f32("vsqrt.f32 s31, s4",  s31, s4,  i32, f2u(NAN));
1647     TESTINSN_un_f32("vsqrt.f32 s25, s25", s25, s24, i32, f2u(INFINITY));
1648     TESTINSN_un_f32("vsqrt.f32 s18, s17", s18, s17, i32, f2u(INFINITY));
1649     TESTINSN_un_f32("vsqrt.f32 s30, s1",  s30, s1,  i32, f2u(-INFINITY));
1650     TESTINSN_un_f32("vsqrt.f32 s8,  s27", s8,  s27, i32, f2u(-INFINITY));
1651     TESTINSN_un_f32("vsqrt.f32 s20, s1",  s20, s1,  i32, f2u(76543.001002));
1652     TESTINSN_un_f32("vsqrt.f32 s28, s7",  s28, s7,  i32, f2u(-4856.234));
1653     TESTINSN_un_f32("vsqrt.f32 s2,  s19", s2, s19,  i32,f2u(87.098217));
1654     TESTINSN_un_f32("vsqrt.f32 s8,  s7",  s8, s7,  i32, f2u(-122156.2));
1655
1656     printf("---- VCVT (integer <-> fp) ----\n");
1657     TESTINSN_un_f32("vcvt.u32.f32 s0,  s1",  s0,  s1,  i32, f2u(3.2));
1658     TESTINSN_un_f32("vcvt.u32.f32 s10, s11", s10, s11, i32, f2u(3e22));
1659     TESTINSN_un_f32("vcvt.u32.f32 s15, s4",  s15, s4,  i32, f2u(3e9));
1660     TESTINSN_un_f32("vcvt.u32.f32 s25, s24", s25, s24, i32, f2u(-0.5));
1661     TESTINSN_un_f32("vcvt.u32.f32 s19, s21", s19, s21, i32, f2u(-7.1));
1662     TESTINSN_un_f32("vcvt.u32.f32 s12, s8",  s12, s8,  i32, f2u(8.0 - 1.0/1024.0));
1663     TESTINSN_un_f32("vcvt.u32.f32 s12, s18", s12, s18, i32, f2u(-8.0 + 1.0/1024.0));
1664     TESTINSN_un_f32("vcvt.u32.f32 s30, s1",  s30, s1, i32, f2u(0.0));
1665     TESTINSN_un_f32("vcvt.u32.f32 s11, s1",  s11, s1, i32, f2u(INFINITY));
1666     TESTINSN_un_f32("vcvt.u32.f32 s21, s12", s21, s12, i32, f2u(-INFINITY));
1667     TESTINSN_un_f32("vcvt.u32.f32 s20, s11", s20, s11, i32, f2u(NAN));
1668     TESTINSN_un_f32("vcvt.s32.f32 s29, s13", s29, s13, i32, f2u(NAN));
1669     TESTINSN_un_f32("vcvt.s32.f32 s9,  s19", s9,  s19, i32, f2u(0.0));
1670     TESTINSN_un_f32("vcvt.s32.f32 s0,  s17", s0,  s17, i32, f2u(INFINITY));
1671     TESTINSN_un_f32("vcvt.s32.f32 s0,  s1",  s0,  s1, i32, f2u(-INFINITY));
1672     TESTINSN_un_f32("vcvt.s32.f32 s30, s11", s30, s11, i32, f2u(3.2));
1673     TESTINSN_un_f32("vcvt.s32.f32 s20, s21", s20, s21, i32, f2u(3e22));
1674     TESTINSN_un_f32("vcvt.s32.f32 s15, s14", s15, s14, i32, f2u(3e9));
1675     TESTINSN_un_f32("vcvt.s32.f32 s15, s24", s15, s24, i32, f2u(-0.5));
1676     TESTINSN_un_f32("vcvt.s32.f32 s15, s29", s15, s29, i32, f2u(-7.1));
1677     TESTINSN_un_f32("vcvt.s32.f32 s12, s31", s12, s31, i32, f2u(8.0 - 1.0/1024.0));
1678     TESTINSN_un_f32("vcvt.s32.f32 s1,  s8",  s1,  s8, i32, f2u(-8.0 + 1.0/1024.0));
1679
1680     TESTINSN_un_f32("vcvt.f32.u32 s30, s1",  s30, s1, i32, f2u(7));
1681     TESTINSN_un_f32("vcvt.f32.u32 s10, s17", s10, s17, i32, f2u(1 << 31));
1682     TESTINSN_un_f32("vcvt.f32.u32 s20, s1",  s20, s1, i32, f2u((1U << 31) + 1));
1683     TESTINSN_un_f32("vcvt.f32.u32 s24, s26", s24, s26, i32, f2u((1U << 31) - 1));
1684     TESTINSN_un_f32("vcvt.f32.u32 s0,  s14", s0,  s14, i32, f2u(0x30a0bcef));
1685     TESTINSN_un_f32("vcvt.f32.u32 s11, s1",  s11, s1, i32, f2u(INFINITY));
1686     TESTINSN_un_f32("vcvt.f32.u32 s21, s12", s21, s12, i32, f2u(-INFINITY));
1687     TESTINSN_un_f32("vcvt.f32.u32 s29, s13", s29, s13, i32, f2u(NAN));
1688     TESTINSN_un_f32("vcvt.f32.s32 s0,  s1",  s0,  s1, i32, f2u(7));
1689     TESTINSN_un_f32("vcvt.f32.s32 s30, s31", s30, s31, i32, f2u(1 << 31));
1690     TESTINSN_un_f32("vcvt.f32.s32 s0,  s12", s0,  s12, i32, f2u((1U << 31) + 1));
1691     TESTINSN_un_f32("vcvt.f32.s32 s10, s16", s10, s16, i32, f2u((1U << 31) - 1));
1692     TESTINSN_un_f32("vcvt.f32.s32 s1,  s8",  s1,  s8, i32, f2u(-8.0 + 1.0/1024.0));
1693     TESTINSN_un_f32("vcvt.f32.s32 s29, s13", s29, s13, i32, f2u(NAN));
1694     TESTINSN_un_f32("vcvt.f32.s32 s9,  s19", s9,  s19, i32, f2u(0.0));
1695     TESTINSN_un_f32("vcvt.f32.s32 s0,  s17", s0,  s17, i32, f2u(INFINITY));
1696     TESTINSN_un_f32("vcvt.f32.s32 s0,  s1",  s0,  s1, i32, f2u(-INFINITY));
1697
1698     TESTINSN_cvt_i32_f64("vcvt.u32.f64 s0,  d1",  s0,  d1,  f2u0(3.2), f2u1(3.2));
1699     TESTINSN_cvt_i32_f64("vcvt.u32.f64 s13, d26", s13, d26, f2u0(234.54), f2u1(234.54));
1700     TESTINSN_cvt_i32_f64("vcvt.u32.f64 s29, d30", s29, d30, f2u0(46245.345), f2u1(46245.345));
1701     TESTINSN_cvt_i32_f64("vcvt.u32.f64 s30, d21", s30, d21, f2u0(-8.0 + 1.0/1024.0), f2u1(-8.0 + 1.0/1024.0));
1702     TESTINSN_cvt_i32_f64("vcvt.u32.f64 s11, d8",  s11, d8,  f2u0(INFINITY), f2u1(INFINITY));
1703     TESTINSN_cvt_i32_f64("vcvt.u32.f64 s8,  d12", s8,  d12, f2u0(-INFINITY), f2u1(-INFINITY));
1704     TESTINSN_cvt_i32_f64("vcvt.u32.f64 s19, d7",  s19, d7,  f2u0(NAN), f2u1(NAN));
1705     TESTINSN_cvt_i32_f64("vcvt.u32.f64 s16, d16", s16, d16, f2u0(76.67), f2u1(76.67));
1706     TESTINSN_cvt_i32_f64("vcvt.s32.f64 s0,  d1",  s0,  d1,  f2u0(3.2), f2u1(3.2));
1707     TESTINSN_cvt_i32_f64("vcvt.s32.f64 s13, d26", s13, d26, f2u0(234.54), f2u1(234.54));
1708     TESTINSN_cvt_i32_f64("vcvt.s32.f64 s29, d30", s29, d30, f2u0(46245.345), f2u1(46245.345));
1709     TESTINSN_cvt_i32_f64("vcvt.s32.f64 s30, d21", s30, d21, f2u0(-8.0 + 1.0/1024.0), f2u1(-8.0 + 1.0/1024.0));
1710     TESTINSN_cvt_i32_f64("vcvt.s32.f64 s11, d8",  s11, d8,  f2u0(INFINITY), f2u1(INFINITY));
1711     TESTINSN_cvt_i32_f64("vcvt.s32.f64 s8,  d12", s8,  d12, f2u0(-INFINITY), f2u1(-INFINITY));
1712     TESTINSN_cvt_i32_f64("vcvt.s32.f64 s19, d7",  s19, d7,  f2u0(NAN), f2u1(NAN));
1713     TESTINSN_cvt_i32_f64("vcvt.s32.f64 s16, d16", s16, d16, f2u0(76.67), f2u1(76.67));
1714
1715     TESTINSN_cvt_f64_i32("vcvt.f64.u32 d0,  s1",  d0,  s1,  f2u(3.2));
1716     TESTINSN_cvt_f64_i32("vcvt.f64.u32 d30, s21", d30, s21, f2u(-656.42));
1717     TESTINSN_cvt_f64_i32("vcvt.f64.u32 d16, s12", d16, s12, f2u(870.024));
1718     TESTINSN_cvt_f64_i32("vcvt.f64.u32 d29, s7",  d29, s7,  f2u(-2543.4506));
1719     TESTINSN_cvt_f64_i32("vcvt.f64.u32 d12, s28", d12, s28, f2u(5.00003245));
1720     TESTINSN_cvt_f64_i32("vcvt.f64.u32 d7,  s5",  d7,  s5,  f2u(-INFINITY));
1721     TESTINSN_cvt_f64_i32("vcvt.f64.u32 d21, s20", d21, s20, f2u(INFINITY));
1722     TESTINSN_cvt_f64_i32("vcvt.f64.u32 d11, s11", d11, s11, f2u(NAN));
1723     TESTINSN_cvt_f64_i32("vcvt.f64.s32 d0,  s1",  d0,  s1,  f2u(3.2));
1724     TESTINSN_cvt_f64_i32("vcvt.f64.s32 d30, s21", d30, s21, f2u(-656.42));
1725     TESTINSN_cvt_f64_i32("vcvt.f64.s32 d16, s12", d16, s12, f2u(870.024));
1726     TESTINSN_cvt_f64_i32("vcvt.f64.s32 d29, s7",  d29, s7,  f2u(-2543.4506));
1727     TESTINSN_cvt_f64_i32("vcvt.f64.s32 d12, s28", d12, s28, f2u(5.00003245));
1728     TESTINSN_cvt_f64_i32("vcvt.f64.s32 d7,  s5",  d7,  s5,  f2u(-INFINITY));
1729     TESTINSN_cvt_f64_i32("vcvt.f64.s32 d21, s20", d21, s20, f2u(INFINITY));
1730     TESTINSN_cvt_f64_i32("vcvt.f64.s32 d11, s11", d11, s11, f2u(NAN));
1731
1732 /*    printf("---- VCVT (fixed <-> fp) ----\n");
1733     TESTINSN_un_f32("vcvt.u32.f32 s0,  s0,  #3",  s0,  s0, i32, f2u(3.2));
1734     TESTINSN_un_f32("vcvt.u32.f32 s11, s11, #1",  s11, s11, i32, f2u(3e22));
1735     TESTINSN_un_f32("vcvt.u32.f32 s15, s15, #32", s15, s15, i32, f2u(3e9));
1736     TESTINSN_un_f32("vcvt.u32.f32 s4,  s4,  #7",  s4,  s4, i32, f2u(-0.5));
1737     TESTINSN_un_f32("vcvt.u32.f32 s6,  s6,  #4",  s6,  s6, i32, f2u(-7.1));
1738     TESTINSN_un_f32("vcvt.u32.f32 s12, s12, #3",  s12, s12, i32, f2u(8.0 - 1.0/1024.0));
1739     TESTINSN_un_f32("vcvt.u32.f32 s8,  s8,  #3",  s8,  s8, i32, f2u(-8.0 + 1.0/1024.0));
1740     TESTINSN_un_f32("vcvt.u32.f32 s30, s30, #3",  s30, s30, i32, f2u(NAN));
1741     TESTINSN_un_f32("vcvt.u32.f32 s20, s20, #3",  s20, s20, i32, f2u(0.0));
1742     TESTINSN_un_f32("vcvt.u32.f32 s13, s13, #6",  s13, s13, i32, f2u(INFINITY));
1743     TESTINSN_un_f32("vcvt.u32.f32 s16, s16, #3",  s16, s16, i32, f2u(-INFINITY));
1744     TESTINSN_un_f32("vcvt.s32.f32 s1,  s1,  #5",  s1,  s1, i32, f2u(3.2));
1745     TESTINSN_un_f32("vcvt.s32.f32 s21, s21, #1",  s21, s21, i32, f2u(3e22));
1746     TESTINSN_un_f32("vcvt.s32.f32 s17, s17, #8",  s17, s17, i32, f2u(3e9));
1747     TESTINSN_un_f32("vcvt.s32.f32 s27, s27, #2",  s27, s27, i32, f2u(-0.5));
1748     TESTINSN_un_f32("vcvt.s32.f32 s15, s15, #1",  s15, s15, i32, f2u(-7.1));
1749     TESTINSN_un_f32("vcvt.s32.f32 s8,  s8,  #2",  s8,  s8, i32, f2u(8.0 - 1.0/1024.0));
1750     TESTINSN_un_f32("vcvt.s32.f32 s31, s31, #2",  s31, s31, i32, f2u(-8.0 + 1.0/1024.0));
1751     TESTINSN_un_f32("vcvt.s32.f32 s10, s10, #3",  s10, s10, i32, f2u(0.0));
1752     TESTINSN_un_f32("vcvt.s32.f32 s13, s13, #9",  s13, s13, i32, f2u(INFINITY));
1753     TESTINSN_un_f32("vcvt.s32.f32 s22, s22, #3",  s22, s22, i32, f2u(-INFINITY));
1754     TESTINSN_un_f32("vcvt.s32.f32 s1,  s1,  #7",  s1,  s1, i32, f2u(NAN));
1755
1756     TESTINSN_un_f32("vcvt.f32.u32 s0,  s0,  #3",  s0,  s0, i32, f2u(3.2));
1757     TESTINSN_un_f32("vcvt.f32.u32 s11, s11, #1",  s11, s11, i32, f2u(3e22));
1758     TESTINSN_un_f32("vcvt.f32.u32 s15, s15, #32", s15, s15, i32, f2u(3e9));
1759     TESTINSN_un_f32("vcvt.f32.u32 s4,  s4,  #7",  s4,  s4, i32, f2u(-0.5));
1760     TESTINSN_un_f32("vcvt.f32.u32 s6,  s6,  #4",  s6,  s6, i32, f2u(-7.1));
1761     TESTINSN_un_f32("vcvt.f32.u32 s12, s12, #3",  s12, s12, i32, f2u(8.0 - 1.0/1024.0));
1762     TESTINSN_un_f32("vcvt.f32.u32 s8,  s8,  #3",  s8,  s8, i32, f2u(-8.0 + 1.0/1024.0));
1763     TESTINSN_un_f32("vcvt.f32.u32 s30, s30, #3",  s30, s30, i32, f2u(NAN));
1764     TESTINSN_un_f32("vcvt.f32.u32 s20, s20, #3",  s20, s20, i32, f2u(0.0));
1765     TESTINSN_un_f32("vcvt.f32.u32 s13, s13, #6",  s13, s13, i32, f2u(INFINITY));
1766     TESTINSN_un_f32("vcvt.f32.u32 s16, s16, #3",  s16, s16, i32, f2u(-INFINITY));
1767     TESTINSN_un_f32("vcvt.f32.s32 s1,  s1,  #5",  s1,  s1, i32, f2u(3.2));
1768     TESTINSN_un_f32("vcvt.f32.s32 s21, s21, #1",  s21, s21, i32, f2u(3e22));
1769     TESTINSN_un_f32("vcvt.f32.s32 s17, s17, #8",  s17, s17, i32, f2u(3e9));
1770     TESTINSN_un_f32("vcvt.f32.s32 s27, s27, #2",  s27, s27, i32, f2u(-0.5));
1771     TESTINSN_un_f32("vcvt.f32.s32 s15, s15, #1",  s15, s15, i32, f2u(-7.1));
1772     TESTINSN_un_f32("vcvt.f32.s32 s8,  s8,  #2",  s8,  s8, i32, f2u(8.0 - 1.0/1024.0));
1773     TESTINSN_un_f32("vcvt.f32.s32 s31, s31, #2",  s31, s31, i32, f2u(-8.0 + 1.0/1024.0));
1774     TESTINSN_un_f32("vcvt.f32.s32 s10, s10, #3",  s10, s10, i32, f2u(0.0));
1775     TESTINSN_un_f32("vcvt.f32.s32 s13, s13, #9",  s13, s13, i32, f2u(INFINITY));
1776     TESTINSN_un_f32("vcvt.f32.s32 s22, s22, #3",  s22, s22, i32, f2u(-INFINITY));
1777     TESTINSN_un_f32("vcvt.f32.s32 s1,  s1,  #7",  s1,  s1, i32, f2u(NAN));
1778     */
1779
1780     printf("---- VCVT (single <-> double) ----\n");
1781     TESTINSN_un_cvt_ds("vcvt.f64.f32 d0,  s1",  d0,  s1,  f2u(3.2));
1782     TESTINSN_un_cvt_ds("vcvt.f64.f32 d29, s21",  d29, s21, f2u(234.65));
1783     TESTINSN_un_cvt_ds("vcvt.f64.f32 d16, s30",  d16, s30, f2u(-700.63));
1784     TESTINSN_un_cvt_ds("vcvt.f64.f32 d11, s7",  d11, s7,  f2u(8.0 - 1.0/1024.0));
1785     TESTINSN_un_cvt_ds("vcvt.f64.f32 d30, s3",  d30, s3,  f2u(-8.0 + 1.0/1024.0));
1786     TESTINSN_un_cvt_ds("vcvt.f64.f32 d7,  s19", d7,  s19, f2u(12.43303));
1787     TESTINSN_un_cvt_ds("vcvt.f64.f32 d2,  s11",  d2,  s11, f2u(65.4235));
1788     TESTINSN_un_cvt_ds("vcvt.f64.f32 d9,  s21",  d9,  s21, f2u(NAN));
1789     TESTINSN_un_cvt_ds("vcvt.f64.f32 d17, s29",  d17, s29, f2u(-INFINITY));
1790     TESTINSN_un_cvt_ds("vcvt.f64.f32 d19, s0",  d19, s0,  f2u(INFINITY));
1791     TESTINSN_un_cvt_sd("vcvt.f32.f64 s0,  d1",  s0,  d1,  f2u0(3.2), f2u1(3.2));
1792     TESTINSN_un_cvt_sd("vcvt.f32.f64 s29, d21",  s29, d21, f2u0(234.65), f2u1(234.65));
1793     TESTINSN_un_cvt_sd("vcvt.f32.f64 s16, d30",  s16, d30, f2u0(-700.63), f2u1(-700.63));
1794     TESTINSN_un_cvt_sd("vcvt.f32.f64 s11, d7",  s11, d7,  f2u0(8.0 - 1.0/1024.0), f2u1(8.0 - 1.0/1024.0));
1795     TESTINSN_un_cvt_sd("vcvt.f32.f64 s30, d3",  s30, d3,  f2u0(-8.0 + 1.0/1024.0), f2u1(-8.0 + 1.0/1024.0));
1796     TESTINSN_un_cvt_sd("vcvt.f32.f64 s7,  d19", s7,  d19, f2u0(12.43303), f2u1(12.43303));
1797     TESTINSN_un_cvt_sd("vcvt.f32.f64 s2,  d11",  s2,  d11, f2u0(65.4235), f2u1(65.4235));
1798     TESTINSN_un_cvt_sd("vcvt.f32.f64 s9,  d21",  s9,  d21, f2u0(NAN), f2u1(NAN));
1799     TESTINSN_un_cvt_sd("vcvt.f32.f64 s17, d29",  s17, d29, f2u0(-INFINITY), f2u1(-INFINITY));
1800     TESTINSN_un_cvt_sd("vcvt.f32.f64 s19, d0",  s19, d0,  f2u0(INFINITY), f2u1(INFINITY));
1801
1802     printf("---- VCMP ----\n");
1803     TESTINSN_cmp_f64("vcmp.f64  d0,  d19",  d0, f2u0(-3.4567), f2u1(-3.4567), d19, f2u0(-2.6245), f2u1(-2.6245));
1804     TESTINSN_cmp_f64("vcmp.f64  d11, d16",  d11, f2u0(23475.45), f2u1(23475.45), d16, f2u0(3425.5), f2u1(3425.5));
1805     TESTINSN_cmp_f64("vcmp.f64  d21, d30",  d21, f2u0(-4524.5), f2u1(-4524.5), d30, f2u0(-452345.5), f2u1(-452345.5));
1806     TESTINSN_cmp_f64("vcmp.f64  d7,  d28",  d7,  f2u0(425.5), f2u1(425.5), d28, f2u0(-456.3), f2u1(-456.3));
1807     TESTINSN_cmp_f64("vcmp.f64  d29, d3",   d29, f2u0(INFINITY), f2u1(INFINITY), d3, f2u0(34562.45), f2u1(34562.45));
1808     TESTINSN_cmp_f64("vcmp.f64  d3,  d22",  d3,  f2u0(2.0), f2u1(2.0), d22, f2u0(2.0), f2u1(2.0));
1809     TESTINSN_cmp_f64("vcmp.f64  d3,  d22",  d3,  f2u0(12.023), f2u1(12.023), d22, f2u0(12.023), f2u1(12.023));
1810     TESTINSN_cmp_f64("vcmp.f64  d3,  d22",  d3,  f2u0(0.0), f2u1(0.0), d22, f2u0(0.0), f2u1(0.0));
1811     TESTINSN_cmp_f64("vcmp.f64  d9,  d2",   d9,  f2u0(INFINITY), f2u1(INFINITY), d2, f2u0(INFINITY), f2u1(INFINITY));
1812     TESTINSN_cmp_f64("vcmp.f64  d30, d15",  d30, f2u0(-INFINITY), f2u1(-INFINITY), d15, f2u0(-INFINITY), f2u1(-INFINITY));
1813     TESTINSN_cmp_f64("vcmp.f64  d0,  d19",  d0,  f2u0(-3.4567), f2u1(-3.4567), d19, f2u0(-2.6245), f2u1(-2.6245));
1814     TESTINSN_cmp_f64("vcmp.f64  d11, d16",  d11, f2u0(-5463.7), f2u1(-5463.7), d16, f2u0(-INFINITY), f2u1(-INFINITY));
1815     TESTINSN_cmp_f64("vcmp.f64  d21, d30",  d21, f2u0(-INFINITY), f2u1(-INFINITY), d30, f2u0(86.7), f2u1(86.7));
1816     TESTINSN_cmp_f64("vcmp.f64  d7,  d28",  d7,  f2u0(INFINITY), f2u1(INFINITY), d28, f2u0(-8567.456), f2u1(-8567.456));
1817     TESTINSN_cmp_f64("vcmp.f64  d29, d3",   d29, f2u0(-524.4), f2u1(-524.4), d3, f2u0(654.5), f2u1(654.5));
1818     TESTINSN_cmp_f64("vcmp.f64  d3,  d22",  d3,  f2u0(NAN), f2u1(NAN), d22, f2u0(-6.46524), f2u1(-6.46524));
1819     TESTINSN_cmp_f64("vcmp.f64  d9,  d2",   d9,  f2u0(56.563), f2u1(56.563), d2, f2u0(56.56), f2u1(56.56));
1820     TESTINSN_cmp_f64("vcmp.f64  d30, d15",  d30, f2u0(5365.60001), f2u1(5365.60001), d15, f2u0(56763.5), f2u1(56763.5));
1821     TESTINSN_cmp_f64("vcmpe.f64 d0,  d19",  d0,  f2u0(-3.4567), f2u1(-3.4567), d19, f2u0(-2.6245), f2u1(-2.6245));
1822     TESTINSN_cmp_f64("vcmpe.f64 d11, d16",  d11, f2u0(23475.45), f2u1(23475.45), d16, f2u0(3425.5), f2u1(3425.5));
1823     TESTINSN_cmp_f64("vcmpe.f64 d11, d16",  d11, f2u0(23475.45), f2u1(23475.45), d16, f2u0(NAN), f2u1(NAN));
1824     TESTINSN_cmp_f64("vcmpe.f64 d21, d30",  d21, f2u0(-4524.5), f2u1(-4524.5), d30, f2u0(-452345.5), f2u1(-452345.5));
1825     TESTINSN_cmp_f64("vcmpe.f64 d7,  d28",  d7,  f2u0(425.5), f2u1(425.5), d28, f2u0(-456.3), f2u1(-456.3));
1826     TESTINSN_cmp_f64("vcmpe.f64 d29, d3",   d29, f2u0(INFINITY), f2u1(INFINITY), d3, f2u0(34562.45), f2u1(34562.45));
1827     TESTINSN_cmp_f64("vcmpe.f64 d3,  d22",  d3,  f2u0(2.0), f2u1(2.0), d22, f2u0(2.0), f2u1(2.0));
1828     TESTINSN_cmp_f64("vcmpe.f64 d9,  d2",   d9,  f2u0(INFINITY), f2u1(INFINITY), d2, f2u0(INFINITY), f2u1(INFINITY));
1829     TESTINSN_cmp_f64("vcmpe.f64 d30, d15",  d30, f2u0(-INFINITY), f2u1(-INFINITY), d15, f2u0(-INFINITY), f2u1(-INFINITY));
1830     TESTINSN_cmp_f64("vcmpe.f64 d0,  d19",  d0,  f2u0(-3.4567), f2u1(-3.4567), d19, f2u0(-2.6245), f2u1(-2.6245));
1831     TESTINSN_cmp_f64("vcmpe.f64 d11, d16",  d11, f2u0(-5463.7), f2u1(-5463.7), d16, f2u0(-INFINITY), f2u1(-INFINITY));
1832     TESTINSN_cmp_f64("vcmpe.f64 d21, d30",  d21, f2u0(-INFINITY), f2u1(-INFINITY), d30, f2u0(86.7), f2u1(86.7));
1833     TESTINSN_cmp_f64("vcmpe.f64 d7,  d28",  d7,  f2u0(INFINITY), f2u1(INFINITY), d28, f2u0(-8567.456), f2u1(-8567.456));
1834     TESTINSN_cmp_f64("vcmpe.f64 d29, d3",   d29, f2u0(-524.4), f2u1(-524.4), d3, f2u0(654.5), f2u1(654.5));
1835     TESTINSN_cmp_f64("vcmpe.f64 d3,  d22",  d3,  f2u0(4624.5), f2u1(4624.5), d22, f2u0(-6.46524), f2u1(-6.46524));
1836     TESTINSN_cmp_f64("vcmpe.f64 d9,  d2",   d9,  f2u0(56.563), f2u1(56.563), d2, f2u0(56.56), f2u1(56.56));
1837     TESTINSN_cmp_f64("vcmpe.f64 d30, d15",  d30, f2u0(5365.60001), f2u1(5365.60001), d15, f2u0(56763.5), f2u1(56763.5));
1838
1839     TESTINSN_cmp_f32("vcmp.f32  s0,  s19",  s0,  f2u(-3.4567),  s19, f2u(-2.6245));
1840     TESTINSN_cmp_f32("vcmp.f32  s11, s16",  s11, f2u(23475.45), s16, f2u(3425.5));
1841     TESTINSN_cmp_f32("vcmp.f32  s3,  s22",  s3,  f2u(2.0),      s22, f2u(2.0));
1842     TESTINSN_cmp_f32("vcmp.f32  s0,  s19",  s0,  f2u(-3.4567),  s19, f2u(-2.6245));
1843     TESTINSN_cmp_f32("vcmp.f32  s11, s16",  s11, f2u(23475.45), s16, f2u(3425.5));
1844     TESTINSN_cmp_f32("vcmp.f32  s21, s30",  s21, f2u(-4524.5),  s30, f2u(-452345.5));
1845     TESTINSN_cmp_f32("vcmp.f32  s7,  s28",  s7,  f2u(425.5),    s28, f2u(-456.3));
1846     TESTINSN_cmp_f32("vcmp.f32  s29, s3",   s29, f2u(INFINITY), s3, f2u(34562.45));
1847     TESTINSN_cmp_f32("vcmp.f32  s3,  s22",  s3,  f2u(12.023),   s22, f2u(12.023));
1848     TESTINSN_cmp_f32("vcmp.f32  s3,  s22",  s3,  f2u(0.0),      s22, f2u(0.0));
1849     TESTINSN_cmp_f32("vcmp.f32  s9,  s2",   s9,  f2u(INFINITY), s2, f2u(INFINITY));
1850     TESTINSN_cmp_f32("vcmp.f32  s30, s15",  s30, f2u(-INFINITY),s15, f2u(-INFINITY));
1851     TESTINSN_cmp_f32("vcmp.f32  s0,  s19",  s0,  f2u(-3.4567),  s19, f2u(-2.6245));
1852     TESTINSN_cmp_f32("vcmp.f32  s11, s16",  s11, f2u(-5463.7),  s16, f2u(-INFINITY));
1853     TESTINSN_cmp_f32("vcmp.f32  s21, s30",  s21, f2u(-INFINITY),s30, f2u(86.7));
1854     TESTINSN_cmp_f32("vcmp.f32  s7,  s28",  s7,  f2u(INFINITY), s28, f2u(-8567.456));
1855     TESTINSN_cmp_f32("vcmp.f32  s29, s3",   s29, f2u(-524.4),   s3, f2u(654.5));
1856     TESTINSN_cmp_f32("vcmp.f32  s3,  s22",  s3,  f2u(NAN),      s22, f2u(-6.46524));
1857     TESTINSN_cmp_f32("vcmp.f32  s9,  s2",   s9,  f2u(56.563),   s2, f2u(56.56));
1858     TESTINSN_cmp_f32("vcmp.f32  s30, s15",  s30, f2u(5365.60001), s15, f2u(56763.5));
1859     TESTINSN_cmp_f32("vcmpe.f32 s0,  s19",  s0,  f2u(-3.4567),  s19, f2u(-2.6245));
1860     TESTINSN_cmp_f32("vcmpe.f32 s11, s16",  s11, f2u(23475.45), s16, f2u(3425.5));
1861     TESTINSN_cmp_f32("vcmpe.f32 s11, s16",  s11, f2u(23475.45), s16, f2u(NAN));
1862     TESTINSN_cmp_f32("vcmpe.f32 s21, s30",  s21, f2u(-4524.5),  s30, f2u(-452345.5));
1863     TESTINSN_cmp_f32("vcmpe.f32 s7,  s28",  s7,  f2u(425.5),    s28, f2u(-456.3));
1864     TESTINSN_cmp_f32("vcmpe.f32 s29, s3",   s29, f2u(INFINITY), s3, f2u(34562.45));
1865     TESTINSN_cmp_f32("vcmpe.f32 s3,  s22",  s3,  f2u(2.0),      s22, f2u(2.0));
1866     TESTINSN_cmp_f32("vcmpe.f32 s9,  s2",   s9,  f2u(INFINITY), s2, f2u(INFINITY));
1867     TESTINSN_cmp_f32("vcmpe.f32 s30, s15",  s30, f2u(-INFINITY), s15, f2u(-INFINITY));
1868     TESTINSN_cmp_f32("vcmpe.f32 s0,  s19",  s0,  f2u(-3.4567),  s19, f2u(-2.6245));
1869     TESTINSN_cmp_f32("vcmpe.f32 s11, s16",  s11, f2u(-5463.7),  s16, f2u(-INFINITY));
1870     TESTINSN_cmp_f32("vcmpe.f32 s21, s30",  s21, f2u(-INFINITY), s30, f2u(86.7));
1871     TESTINSN_cmp_f32("vcmpe.f32 s7,  s28",  s7,  f2u(INFINITY), s28, f2u(-8567.456));
1872     TESTINSN_cmp_f32("vcmpe.f32 s29, s3",   s29, f2u(-524.4),   s3, f2u(654.5));
1873     TESTINSN_cmp_f32("vcmpe.f32 s3,  s22",  s3,  f2u(4624.5),   s22, f2u(-6.46524));
1874     TESTINSN_cmp_f32("vcmpe.f32 s9,  s2",   s9,  f2u(56.563),   s2, f2u(56.56));
1875     TESTINSN_cmp_f32("vcmpe.f32 s9,  s2",   s9,  f2u(0.0),   s2, f2u(56.56));
1876     TESTINSN_cmp_f32("vcmpe.f32 s9,  s2",   s9,  f2u(10.0),   s2, f2u(0.0));
1877     TESTINSN_cmp_f32("vcmpe.f32 s9,  s2",   s9,  f2u(0.0),   s2, f2u(0.0));
1878     TESTINSN_cmp_f32("vcmpe.f32 s9,  s2",   s9,  f2u(0.0),   s2, f2u(0.0));
1879
1880     printf("---- VCMP (zero) ----\n");
1881     TESTINSN_cmpz_f64("vcmp.f64 d0",  d0,  f2u0(-3.4567), f2u1(-3.4567));
1882     TESTINSN_cmpz_f64("vcmp.f64 d11", d11, f2u0(23475.45), f2u1(23475.45));
1883     TESTINSN_cmpz_f64("vcmp.f64 d21", d21, f2u0(-4524.5), f2u1(-4524.5));
1884     TESTINSN_cmpz_f64("vcmp.f64 d7",  d7,  f2u0(425.5), f2u1(425.5));
1885     TESTINSN_cmpz_f64("vcmp.f64 d29", d29, f2u0(INFINITY), f2u1(INFINITY));
1886     TESTINSN_cmpz_f64("vcmp.f64 d3",  d3,  f2u0(2.0), f2u1(2.0));
1887     TESTINSN_cmpz_f64("vcmp.f64 d3",  d3,  f2u0(0.0), f2u1(0.0));
1888     TESTINSN_cmpz_f64("vcmp.f64 d9",  d9,  f2u0(INFINITY), f2u1(INFINITY));
1889     TESTINSN_cmpz_f64("vcmp.f64 d30", d30, f2u0(-INFINITY), f2u1(-INFINITY));
1890     TESTINSN_cmpz_f64("vcmp.f64 d0",  d0,  f2u0(-3.4567), f2u1(-3.4567));
1891     TESTINSN_cmpz_f64("vcmp.f64 d11", d11, f2u0(-5463.7), f2u1(-5463.7));
1892     TESTINSN_cmpz_f64("vcmp.f64 d21", d21, f2u0(-INFINITY), f2u1(-INFINITY));
1893     TESTINSN_cmpz_f64("vcmp.f64 d7",  d7,  f2u0(INFINITY), f2u1(INFINITY));
1894     TESTINSN_cmpz_f64("vcmp.f64 d29", d29, f2u0(-524.4), f2u1(-524.4));
1895     TESTINSN_cmpz_f64("vcmp.f64 d3",  d3,  f2u0(4624.5), f2u1(4624.5));
1896     TESTINSN_cmpz_f64("vcmp.f64 d9",  d9,  f2u0(NAN), f2u1(NAN));
1897     TESTINSN_cmpz_f64("vcmp.f64 d30", d30, f2u0(5365.60001), f2u1(5365.60001));
1898
1899     TESTINSN_cmpz_f64("vcmpe.f64 d0",  d0,  f2u0(-3.4567), f2u1(-3.4567));
1900     TESTINSN_cmpz_f64("vcmpe.f64 d11", d11, f2u0(23475.45), f2u1(23475.45));
1901     TESTINSN_cmpz_f64("vcmpe.f64 d21", d21, f2u0(-4524.5), f2u1(-4524.5));
1902     TESTINSN_cmpz_f64("vcmpe.f64 d7",  d7,  f2u0(425.5), f2u1(425.5));
1903     TESTINSN_cmpz_f64("vcmpe.f64 d29", d29, f2u0(INFINITY), f2u1(INFINITY));
1904     TESTINSN_cmpz_f64("vcmpe.f64 d3",  d3,  f2u0(2.0), f2u1(2.0));
1905     TESTINSN_cmpz_f64("vcmpe.f64 d3",  d3,  f2u0(0.0), f2u1(0.0));
1906     TESTINSN_cmpz_f64("vcmpe.f64 d9",  d9,  f2u0(INFINITY), f2u1(INFINITY));
1907     TESTINSN_cmpz_f64("vcmpe.f64 d30", d30, f2u0(-INFINITY), f2u1(-INFINITY));
1908     TESTINSN_cmpz_f64("vcmpe.f64 d0",  d0,  f2u0(-3.4567), f2u1(-3.4567));
1909     TESTINSN_cmpz_f64("vcmpe.f64 d11", d11, f2u0(-5463.7), f2u1(-5463.7));
1910     TESTINSN_cmpz_f64("vcmpe.f64 d21", d21, f2u0(-INFINITY), f2u1(-INFINITY));
1911     TESTINSN_cmpz_f64("vcmpe.f64 d7",  d7,  f2u0(INFINITY), f2u1(INFINITY));
1912     TESTINSN_cmpz_f64("vcmpe.f64 d29", d29, f2u0(-524.4), f2u1(-524.4));
1913     TESTINSN_cmpz_f64("vcmpe.f64 d3",  d3,  f2u0(4624.5), f2u1(4624.5));
1914     TESTINSN_cmpz_f64("vcmpe.f64 d9",  d9,  f2u0(NAN), f2u1(NAN));
1915     TESTINSN_cmpz_f64("vcmpe.f64 d30", d30, f2u0(5365.60001), f2u1(5365.60001));
1916
1917     TESTINSN_cmpz_f32("vcmp.f32 s0",  s0,  f2u(-3.4567));
1918     TESTINSN_cmpz_f32("vcmp.f32 s11", s11, f2u(23475.45));
1919     TESTINSN_cmpz_f32("vcmp.f32 s21", s21, f2u(-4524.5));
1920     TESTINSN_cmpz_f32("vcmp.f32 s7",  s7,  f2u(425.5));
1921     TESTINSN_cmpz_f32("vcmp.f32 s29", s29, f2u(INFINITY));
1922     TESTINSN_cmpz_f32("vcmp.f32 s3",  s3,  f2u(2.0));
1923     TESTINSN_cmpz_f32("vcmp.f32 s3",  s3,  f2u(0.0));
1924     TESTINSN_cmpz_f32("vcmp.f32 s9",  s9,  f2u(INFINITY));
1925     TESTINSN_cmpz_f32("vcmp.f32 s30", s30, f2u(-INFINITY));
1926     TESTINSN_cmpz_f32("vcmp.f32 s0",  s0,  f2u(-3.4567));
1927     TESTINSN_cmpz_f32("vcmp.f32 s11", s11, f2u(-5463.7));
1928     TESTINSN_cmpz_f32("vcmp.f32 s21", s21, f2u(-INFINITY));
1929     TESTINSN_cmpz_f32("vcmp.f32 s7",  s7,  f2u(INFINITY));
1930     TESTINSN_cmpz_f32("vcmp.f32 s29", s29, f2u(-524.4));
1931     TESTINSN_cmpz_f32("vcmp.f32 s3",  s3,  f2u(4624.5));
1932     TESTINSN_cmpz_f32("vcmp.f32 s9",  s9,  f2u(NAN));
1933     TESTINSN_cmpz_f32("vcmp.f32 s30", s30, f2u(5365.60001));
1934     TESTINSN_cmpz_f32("vcmpe.f32 s0",  s0,  f2u(-3.4567));
1935     TESTINSN_cmpz_f32("vcmpe.f32 s11", s11, f2u(23475.45));
1936     TESTINSN_cmpz_f32("vcmpe.f32 s21", s21, f2u(-4524.5));
1937     TESTINSN_cmpz_f32("vcmpe.f32 s7",  s7,  f2u(425.5));
1938     TESTINSN_cmpz_f32("vcmpe.f32 s29", s29, f2u(INFINITY));
1939     TESTINSN_cmpz_f32("vcmpe.f32 s3",  s3,  f2u(2.0));
1940     TESTINSN_cmpz_f32("vcmpe.f32 s3",  s3,  f2u(0.0));
1941     TESTINSN_cmpz_f32("vcmpe.f32 s9",  s9,  f2u(INFINITY));
1942     TESTINSN_cmpz_f32("vcmpe.f32 s30", s30, f2u(-INFINITY));
1943     TESTINSN_cmpz_f32("vcmpe.f32 s0",  s0,  f2u(-3.4567));
1944     TESTINSN_cmpz_f32("vcmpe.f32 s11", s11, f2u(-5463.7));
1945     TESTINSN_cmpz_f32("vcmpe.f32 s21", s21, f2u(-INFINITY));
1946     TESTINSN_cmpz_f32("vcmpe.f32 s7",  s7,  f2u(INFINITY));
1947     TESTINSN_cmpz_f32("vcmpe.f32 s29", s29, f2u(-524.4));
1948     TESTINSN_cmpz_f32("vcmpe.f32 s3",  s3,  f2u(4624.5));
1949     TESTINSN_cmpz_f32("vcmpe.f32 s9",  s9,  f2u(NAN));
1950     TESTINSN_cmpz_f32("vcmpe.f32 s30", s30, f2u(5365.60001));
1951
1952     int numbers[8] ={ 0xaa0, 0xbb1, 0xcc2, 0xdd3, 0x11a, 0x22b, 0x33c, 0x44d };
1953
1954     printf("---- VLDR ----\n");
1955     TESTINSN_vldr_f64("vldr d9,  [r6, #+4]",  d9,  r6,  (long) numbers + 8, 4);
1956     TESTINSN_vldr_f64("vldr d16, [r9, #-4]",  d16, r9,  (long) numbers + 8, -4);
1957     TESTINSN_vldr_f64("vldr d30, [r12]",      d30, r12, (long) numbers + 8, 0);
1958     TESTINSN_vldr_f64("vldr d22, [r9, #+8]", d22, r9, (long) numbers + 8, 8);
1959     TESTINSN_vldr_f64("vldr d29, [r2, #-8]",  d29, r2,  (long) numbers + 8, -8);
1960     TESTINSN_vldr_f64("vldr d8,  [r8, #+8]",  d8,  r8,  (long) numbers + 8, 8);
1961     TESTINSN_vldr_f64("vldr d11, [r12, #-4]", d11, r12, (long) numbers + 8, -4);
1962     TESTINSN_vldr_f64("vldr d18, [r3]",       d18, r3,  (long) numbers + 8, 0);
1963     TESTINSN_vldr_f64("vldr d5,  [r10, #+8]", d5,  r10, (long) numbers + 8, 8);
1964     TESTINSN_vldr_f64("vldr d17, [r10]",      d17, r10, (long) numbers + 8, 0);
1965     TESTINSN_vldr_f64("vldr d9,  [r9, #-4]", d9,  r9, (long) numbers + 8, -4);
1966     TESTINSN_vldr_f64("vldr d29, [r4, #-8]",  d29, r4,  (long) numbers + 8, -8);
1967     TESTINSN_vldr_f64("vldr d21, [r6, #+4]",  d21, r6,  (long) numbers + 8, 4);
1968     TESTINSN_vldr_f64("vldr d8,  [r4]",       d8,  r4,  (long) numbers + 8, 0);
1969     TESTINSN_vldr_f64("vldr d19, [r0, #-8]",  d19, r0,  (long) numbers + 8, -8);
1970     TESTINSN_vldr_f64("vldr d10, [r3, #+4]",  d10, r3,  (long) numbers + 8, 4);
1971     TESTINSN_vldr_f32("vldr s10, [r3, #+4]",  s10, r3,  (long) numbers + 8, 4);
1972     TESTINSN_vldr_f32("vldr s9,  [r6, #+4]",  s9,  r6,  (long) numbers + 8, 4);
1973     TESTINSN_vldr_f32("vldr s16, [r9, #-4]",  s16, r9,  (long) numbers + 8, -4);
1974     TESTINSN_vldr_f32("vldr s30, [r12]",      s30, r12, (long) numbers + 8, 0);
1975     TESTINSN_vldr_f32("vldr s22, [r9, #+8]", s22, r9, (long) numbers + 8, 8);
1976     TESTINSN_vldr_f32("vldr s29, [r2, #-8]",  s29, r2,  (long) numbers + 8, -8);
1977     TESTINSN_vldr_f32("vldr s8,  [r8, #+8]",  s8,  r8,  (long) numbers + 8, 8);
1978     TESTINSN_vldr_f32("vldr s11, [r12, #-4]", s11, r12, (long) numbers + 8, -4);
1979     TESTINSN_vldr_f32("vldr s18, [r3]",       s18, r3,  (long) numbers + 8, 0);
1980     TESTINSN_vldr_f32("vldr s5,  [r10, #+8]", s5,  r10, (long) numbers + 8, 8);
1981     TESTINSN_vldr_f32("vldr s17, [r10]",      s17, r10, (long) numbers + 8, 0);
1982     TESTINSN_vldr_f32("vldr s9,  [r9, #-4]", s9,  r9, (long) numbers + 8, -4);
1983     TESTINSN_vldr_f32("vldr s29, [r4, #-8]",  s29, r4,  (long) numbers + 8, -8);
1984     TESTINSN_vldr_f32("vldr s21, [r6, #+4]",  s21, r6,  (long) numbers + 8, 4);
1985     TESTINSN_vldr_f32("vldr s8,  [r4]",       s8,  r4,  (long) numbers + 8, 0);
1986     TESTINSN_vldr_f32("vldr s19, [r0, #-8]",  s19, r0,  (long) numbers + 8, -8);
1987     TESTINSN_vldr_f32("vldr s10, [r3, #+4]",  s10, r3,  (long) numbers + 8, 4);
1988
1989     printf("---- VLDM (Increment After, writeback) ----\n");
1990     TESTINSN_VLDMIAWB(r6,  d17, d7);
1991     TESTINSN_VLDMIAWB(r4,  d11, d23);
1992     TESTINSN_VLDMIAWB(r9, d29, d12);
1993     TESTINSN_VLDMIAWB(r9,  d0,  d30);
1994     TESTINSN_VLDMIAWB(r12, d8,  d24);
1995     TESTINSN_VLDMIAWB(r3,  d27, d13);
1996     TESTINSN_VLDMIAWB(r10, d20, d30);
1997     TESTINSN_VLDMIAWB(r0,  d0,  d1);
1998     TESTINSN_VLDMIAWB(r8,  d15, d19);
1999     TESTINSN_VLDMIAWB(r3,  d31, d30);
2000     TESTINSN_VLDMIAWB(r10, d6,  d23);
2001     TESTINSN_VLDMIAWB(r8,  d8,  d16);
2002     TESTINSN_VLDMIAWB(r9,  d13, d11);
2003     TESTINSN_VLDMIAWB(r1,  d3,  d8);
2004     TESTINSN_VLDMIAWB(r2,  d4,  d8);
2005     TESTINSN_VLDMIAWB(r3,  d9,  d27);
2006
2007     printf("---- VSTR ----\n");
2008     TESTINSN_vstr64("vstr d9,  [r6, #+4]",  d9,  0xa0, r6,  (long) numbers + 8, 4);
2009     TESTINSN_vstr64("vstr d16, [r9, #-4]",  d16, 0xb1, r9,  (long) numbers + 8, -4);
2010     TESTINSN_vstr64("vstr d30, [r12]",      d30, 0xc2, r12, (long) numbers + 8, 0);
2011     TESTINSN_vstr64("vstr d22, [r9, #+8]", d22, 0xd4, r9, (long) numbers + 8, 8);
2012     TESTINSN_vstr64("vstr d29, [r2, #-8]",  d29, 0x00, r2,  (long) numbers + 8, -8);
2013     TESTINSN_vstr64("vstr d8,  [r8, #+8]",  d8,  0x11, r8,  (long) numbers + 8, 8);
2014     TESTINSN_vstr64("vstr d11, [r12, #-4]", d11, 0x22, r12, (long) numbers + 8, -4);
2015     TESTINSN_vstr64("vstr d18, [r3]",       d18, 0x33, r3,  (long) numbers + 8, 0);
2016     TESTINSN_vstr64("vstr d5,  [r10, #+8]", d5,  0x99, r10, (long) numbers + 8, 8);
2017     TESTINSN_vstr64("vstr d17, [r10]",      d17, 0x77, r10, (long) numbers + 8, 0);
2018     TESTINSN_vstr64("vstr d9,  [r9, #-4]", d9,  0xee, r9, (long) numbers + 8, -4);
2019     TESTINSN_vstr64("vstr d29, [r4, #-8]",  d29, 0xff, r4,  (long) numbers + 8, -8);
2020     TESTINSN_vstr64("vstr d10, [r3, #+4]",  d10, 0xbc, r3,  (long) numbers + 8, 4);
2021     TESTINSN_vstr64("vstr d21, [r6, #+4]",  d21, 0x48, r6,  (long) numbers + 8, 4);
2022     TESTINSN_vstr64("vstr d8,  [r4]",       d8,  0x1f, r4,  (long) numbers + 8, 0);
2023     TESTINSN_vstr64("vstr d19, [r0, #-8]",  d19, 0xf9, r0,  (long) numbers + 8, -8);
2024     TESTINSN_vstr32("vstr s9,  [r6,  #+4]", s9,  r6,  (long) numbers + 8, 4);
2025     TESTINSN_vstr32("vstr s21, [r9, #-4]", s21, r9, (long) numbers + 8, -4);
2026     TESTINSN_vstr32("vstr s4,  [r3,  #+8]", s4,  r3,  (long) numbers + 8, 8);
2027     TESTINSN_vstr32("vstr s19, [r4,  #-8]", s19, r4,  (long) numbers + 8, -8);
2028     TESTINSN_vstr32("vstr s29, [r8]",       s29, r8,  (long) numbers + 8, 0);
2029     TESTINSN_vstr32("vstr s8,  [r12]",      s8,  r12, (long) numbers + 8, 0);
2030     TESTINSN_vstr32("vstr s16, [r0,  #+4]", s16, r0,  (long) numbers + 8, 4);
2031     TESTINSN_vstr32("vstr s0,  [r8,  #-4]", s0,  r8,  (long) numbers + 8, -4);
2032     TESTINSN_vstr32("vstr s3,  [r9,  #+8]", s3,  r9,  (long) numbers + 8, 8);
2033     TESTINSN_vstr32("vstr s9,  [r10, #-8]", s9,  r10, (long) numbers + 8, -8);
2034     TESTINSN_vstr32("vstr s11, [r2]",       s11, r2,  (long) numbers + 8, 0);
2035     TESTINSN_vstr32("vstr s30, [r0]",       s30, r0,  (long) numbers + 8, 0);
2036
2037     printf("---- VSTM (Increment After, no writeback) ----\n");
2038     TESTINSN_VSTMIAnoWB("vstmia r6,  {d21}", r6,  d21, 0xab);
2039     TESTINSN_VSTMIAnoWB("vstmia r1,  {d1}",  r1,  d1, 0x13);
2040     TESTINSN_VSTMIAnoWB("vstmia r9,  {d2}",  r9,  d2, 0x78);
2041     TESTINSN_VSTMIAnoWB("vstmia r4,  {d30}", r4,  d30, 0x0);
2042     TESTINSN_VSTMIAnoWB("vstmia r12, {d23}", r12, d23, 0xb9);
2043     TESTINSN_VSTMIAnoWB("vstmia r6,  {d16}", r6,  d16, 0xa6);
2044     TESTINSN_VSTMIAnoWB("vstmia r6,  {d8}",  r6,  d8, 0x7f);
2045     TESTINSN_VSTMIAnoWB("vstmia r6,  {d27}", r6,  d27, 0xff);
2046     TESTINSN_VSTMIAnoWB("vstmia r5,  {d11}", r5,  d11, 0x32);
2047     TESTINSN_VSTMIAnoWB("vstmia r6,  {d4}",  r6,  d4, 0x10);
2048     TESTINSN_VSTMIAnoWB("vstmia r10, {d9}",  r10, d9, 0x4f);
2049     TESTINSN_VSTMIAnoWB("vstmia r9, {d29}", r9, d29, 0x97);
2050     TESTINSN_VSTMIAnoWB("vstmia r10, {d17}", r10, d17, 0xaa);
2051     TESTINSN_VSTMIAnoWB("vstmia r5,  {d5}",  r5,  d5, 0x2b);
2052     TESTINSN_VSTMIAnoWB("vstmia r9,  {d7}",  r9,  d7, 0x7b);
2053     TESTINSN_VSTMIAnoWB("vstmia r3,  {d16}", r3,  d16, 0x11);
2054     TESTINSN_VSTMIAnoWB32("vstmia r6,  {s21}", r6,  s21, 0xab);
2055     TESTINSN_VSTMIAnoWB32("vstmia r1,  {s1}",  r1,  s1,  0x13);
2056     TESTINSN_VSTMIAnoWB32("vstmia r9,  {s2}",  r9,  s2,  0x78);
2057     TESTINSN_VSTMIAnoWB32("vstmia r4,  {s30}", r4,  s30, 0x0);
2058     TESTINSN_VSTMIAnoWB32("vstmia r12, {s23}", r12, s23, 0xb9);
2059     TESTINSN_VSTMIAnoWB32("vstmia r6,  {s16}", r6,  s16, 0xa613451d);
2060     TESTINSN_VSTMIAnoWB32("vstmia r6,  {s8}",  r6,  s8,  0x7f);
2061     TESTINSN_VSTMIAnoWB32("vstmia r6,  {s27}", r6,  s27, f2u(-INFINITY));
2062     TESTINSN_VSTMIAnoWB32("vstmia r5,  {s11}", r5,  s11, f2u(NAN));
2063     TESTINSN_VSTMIAnoWB32("vstmia r6,  {s4}",  r6,  s4,  0x10ccb);
2064     TESTINSN_VSTMIAnoWB32("vstmia r10, {s9}",  r10, s9,  0x4f543);
2065     TESTINSN_VSTMIAnoWB32("vstmia r9, {s29}", r9, s29, 0x97001a);
2066     TESTINSN_VSTMIAnoWB32("vstmia r10, {s17}", r10, s17, 0xaa45f);
2067     TESTINSN_VSTMIAnoWB32("vstmia r5,  {s5}",  r5,  s5,  f2u(NAN));
2068     TESTINSN_VSTMIAnoWB32("vstmia r9,  {s7}",  r9,  s7,  f2u(-INFINITY));
2069     TESTINSN_VSTMIAnoWB32("vstmia r3,  {s16}", r3,  s16, f2u(INFINITY));
2070
2071     printf("---- VSTM (Increment After, writeback) ----\n");
2072     TESTINSN_VSTMIAWB(r6,  d21, d2);
2073     TESTINSN_VSTMIAWB(r1,  d1, d5);
2074     TESTINSN_VSTMIAWB(r9,  d2, d17);
2075     TESTINSN_VSTMIAWB(r4,  d30, d21);
2076     TESTINSN_VSTMIAWB(r12, d23, d29);
2077     TESTINSN_VSTMIAWB(r6,  d16, d30);
2078     TESTINSN_VSTMIAWB(r6,  d8,  d12);
2079     TESTINSN_VSTMIAWB(r6,  d27, d24);
2080     TESTINSN_VSTMIAWB(r5,  d11, d13);
2081     TESTINSN_VSTMIAWB(r6,  d4,  d31);
2082     TESTINSN_VSTMIAWB(r10, d9,  d27);
2083     TESTINSN_VSTMIAWB(r9, d29, d17);
2084     TESTINSN_VSTMIAWB(r10, d17, d7);
2085     TESTINSN_VSTMIAWB(r5,  d5,  d8);
2086     TESTINSN_VSTMIAWB(r9,  d7,  d16);
2087     TESTINSN_VSTMIAWB(r3,  d16, d21);
2088     TESTINSN_VSTMIAWB32(r6,  s21, s2);
2089     TESTINSN_VSTMIAWB32(r12, s23, s21);
2090     TESTINSN_VSTMIAWB32(r3,  s3,  s3);
2091     TESTINSN_VSTMIAWB32(r10, s19, s5);
2092     TESTINSN_VSTMIAWB32(r2,  s3,  s12);
2093     TESTINSN_VSTMIAWB32(r8,  s7,  s10);
2094     TESTINSN_VSTMIAWB32(r4,  s30, s13);
2095     TESTINSN_VSTMIAWB32(r6,  s17, s17);
2096     TESTINSN_VSTMIAWB32(r9, s11, s21);
2097     TESTINSN_VSTMIAWB32(r9,  s8,  s30);
2098     TESTINSN_VSTMIAWB32(r3,  s12, s9);
2099     TESTINSN_VSTMIAWB32(r6,  s6,  s11);
2100     TESTINSN_VSTMIAWB32(r8,  s17, s12);
2101     TESTINSN_VSTMIAWB32(r9,  s12, s12);
2102     TESTINSN_VSTMIAWB32(r4,  s11, s11);
2103
2104     printf("---- VLDM (Decrement Before) ----\n");
2105     TESTINSN_VLDMDB(r4,  d11, d23);
2106     TESTINSN_VLDMDB(r9, d29, d12);
2107     TESTINSN_VLDMDB(r9,  d0,  d30);
2108     TESTINSN_VLDMDB(r12, d8,  d24);
2109     TESTINSN_VLDMDB(r3,  d27, d13);
2110     TESTINSN_VLDMDB(r6,  d17, d7);
2111     TESTINSN_VLDMDB(r10, d20, d30);
2112     TESTINSN_VLDMDB(r0,  d0,  d1);
2113     TESTINSN_VLDMDB(r8,  d15, d19);
2114     TESTINSN_VLDMDB(r3,  d31, d30);
2115     TESTINSN_VLDMDB(r10, d6,  d23);
2116     TESTINSN_VLDMDB(r8,  d8,  d16);
2117     TESTINSN_VLDMDB(r9,  d13, d11);
2118     TESTINSN_VLDMDB(r1,  d3,  d8);
2119     TESTINSN_VLDMDB(r2,  d4,  d8);
2120     TESTINSN_VLDMDB(r3,  d9,  d27);
2121
2122     printf("----- VMOV (immediate) -----\n");
2123     TESTINSN_vmovf32_imm("vmov s0",  s0,  0xbe880000);
2124     TESTINSN_vmovf32_imm("vmov s1",  s1,  0x3fa80000);
2125     TESTINSN_vmovf32_imm("vmov s2",  s2,  0xbf080000);
2126     TESTINSN_vmovf32_imm("vmov s5",  s5,  0x3eb80000);
2127     TESTINSN_vmovf32_imm("vmov s7",  s7,  0xbff80000);
2128     TESTINSN_vmovf32_imm("vmov s10", s10, 0xbe280000);
2129     TESTINSN_vmovf32_imm("vmov s12", s12, 0x40000000);
2130     TESTINSN_vmovf32_imm("vmov s13", s13, 0x3e880000);
2131     TESTINSN_vmovf32_imm("vmov s14", s14, 0xbee80000);
2132     TESTINSN_vmovf32_imm("vmov s15", s15, 0xc0b80000);
2133
2134     printf("----- VMOV (ARM core register and single register) -----\n");
2135     TESTINSN_vmov_core_single("vmov r12, s12", r12, s12, 0x4000aad);
2136     TESTINSN_vmov_core_single("vmov r2,  s5",  r2,  s5,  0xab45e7);
2137     TESTINSN_vmov_core_single("vmov r5,  s15", r5,  s15, 0x00add12);
2138     TESTINSN_vmov_core_single("vmov r8,  s11", r8,  s11, 0x876450ff);
2139     TESTINSN_vmov_core_single("vmov r9, s5",  r9, s5,  0xffff);
2140     TESTINSN_vmov_core_single("vmov r10, s9",  r10, s9,  0x87d34f);
2141     TESTINSN_vmov_core_single("vmov r9,  s10", r9,  s10, 0x00ffff);
2142     TESTINSN_vmov_core_single("vmov r6,  s8",  r6,  s8,  0xad4f8);
2143     TESTINSN_vmov_core_single("vmov r4,  s14", r4,  s14, 0x920b8cf);
2144     TESTINSN_vmov_core_single("vmov r3,  s7",  r3,  s7,  f2u(NAN));
2145     TESTINSN_vmov_core_single("vmov r2,  s0",  r2,  s0,  f2u(-INFINITY));
2146     TESTINSN_vmov_core_single("vmov r0,  s1",  r0,  s1,  f2u(INFINITY));
2147     TESTINSN_vmov_single_core("vmov s2,  r9",  s2,  r9,  0x9465a);
2148     TESTINSN_vmov_single_core("vmov s14, r0",  s14, r0,  0xd0b87a);
2149     TESTINSN_vmov_single_core("vmov s4,  r2",  s4,  r2,  0x452bbc8);
2150     TESTINSN_vmov_single_core("vmov s7,  r8",  s7,  r8,  0xa7cb3d);
2151     TESTINSN_vmov_single_core("vmov s9,  r4",  s9,  r4,  0xdd8ec);
2152     TESTINSN_vmov_single_core("vmov s10, r12", s10, r12, 0x8a7b6e);
2153     TESTINSN_vmov_single_core("vmov s13, r9",  s13, r9,  0x4b00a);
2154     TESTINSN_vmov_single_core("vmov s3,  r3",  s3,  r3,  0x0023455);
2155     TESTINSN_vmov_single_core("vmov s5,  r5",  s5,  r5,  f2u(INFINITY));
2156     TESTINSN_vmov_single_core("vmov s8,  r6",  s8,  r6,  f2u(-INFINITY));
2157     TESTINSN_vmov_single_core("vmov s4,  r0",  s4,  r0,  0x000acb45);
2158     TESTINSN_vmov_single_core("vmov s0,  r6",  s0,  r6,  f2u(NAN));
2159
2160     printf("----- VMOV (ARM two core registers and two single registers) -----\n");
2161     TESTINSN_vmov_2single_2core("vmov  s0,  s1,  r6,  r9",  s0,  s1,  r6,  r9, 0x43252acc, 0xabcc4);
2162     TESTINSN_vmov_2single_2core("vmov  s0,  s1,  r9,  r9",  s0,  s1,  r9,  r9, 0x43252acc, 0xabcc4);
2163     TESTINSN_vmov_2single_2core("vmov s30, s31,  r9,  r1", s30, s31,  r9,  r1, 0xaa2e2acc, 0x00337);
2164     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(NAN), f2u(NAN));
2165     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(NAN), f2u(INFINITY));
2166     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(NAN), f2u(-INFINITY));
2167     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(NAN), f2u(0));
2168     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(INFINITY), f2u(NAN));
2169     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(INFINITY), f2u(INFINITY));
2170     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(INFINITY), f2u(-INFINITY));
2171     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(INFINITY), f2u(0));
2172     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(-INFINITY), f2u(NAN));
2173     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(-INFINITY), f2u(INFINITY));
2174     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(-INFINITY), f2u(-INFINITY));
2175     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(-INFINITY), f2u(0));
2176     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(0), f2u(NAN));
2177     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(0), f2u(INFINITY));
2178     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(0), f2u(-INFINITY));
2179     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(0), f2u(0));
2180     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(NAN) + 1, f2u(NAN));
2181     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(NAN) + 1, f2u(0));
2182     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(NAN), f2u(NAN) - 1);
2183     TESTINSN_vmov_2single_2core("vmov s20, s21, r10, r9", s20, s21, r10, r9, f2u(0), f2u(NAN) - 1);
2184     TESTINSN_vmov_2core_2single("vmov r12,  r9, s12, s13", r12,  r9, s12, s13, 0x4000aad, 0xaffff);
2185     TESTINSN_vmov_2core_2single("vmov  r0,  r9, s12, s13",  r0,  r9, s12, s13, 0x40ee56d, 0x123ff);
2186     TESTINSN_vmov_2core_2single("vmov r12, r9, s12, s13", r12, r9, s12, s13, 0x4000aad, 0xaffff);
2187     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(NAN), f2u(NAN));
2188     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(NAN), f2u(INFINITY));
2189     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(NAN), f2u(-INFINITY));
2190     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(NAN), f2u(0));
2191     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(INFINITY), f2u(NAN));
2192     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(INFINITY), f2u(INFINITY));
2193     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(INFINITY), f2u(-INFINITY));
2194     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(INFINITY), f2u(0));
2195     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(-INFINITY), f2u(NAN));
2196     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(-INFINITY), f2u(INFINITY));
2197     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(-INFINITY), f2u(-INFINITY));
2198     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(-INFINITY), f2u(0));
2199     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(0), f2u(NAN));
2200     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(0), f2u(INFINITY));
2201     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(0), f2u(-INFINITY));
2202     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(0), f2u(0));
2203     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(NAN) + 1, f2u(NAN));
2204     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(NAN) + 1, f2u(0));
2205     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(NAN), f2u(NAN) - 1);
2206     TESTINSN_vmov_2core_2single("vmov r10, r9, s20, s21", r10, r9, s20, s21, f2u(0), f2u(NAN) - 1);
2207
2208     printf("----- VMOV (ARM two core registers and double register) -----\n");
2209     TESTINSN_vmov_double_2core("vmov d3,  r6,  r9",  d3,  r6,  r9,  0x43252acc, 0x45bbd);
2210     TESTINSN_vmov_double_2core("vmov d4,  r10, r2",  d4,  r10, r2,  0x1243b4, 0x237ffb);
2211     TESTINSN_vmov_double_2core("vmov d21, r1,  r6",  d21, r1,  r6,  0x30cc4, 0x314c043);
2212     TESTINSN_vmov_double_2core("vmov d30, r9, r9", d30, r9, r9, 0x08ddf, 0x87bbca);
2213     TESTINSN_vmov_double_2core("vmov d29, r3,  r5",  d29, r3,  r5,  0xaaa0, 0xbbb1);
2214     TESTINSN_vmov_double_2core("vmov d16, r8,  r8",  d16, r8,  r8,  0xaa455bb, 0x13434);
2215     TESTINSN_vmov_double_2core("vmov d17, r12, r9", d17, r12, r9, 0x004003, 0x452bbc1);
2216     TESTINSN_vmov_double_2core("vmov d9,  r9,  r0",  d9,  r9,  r0,  0x134c, 0x41ffb6);
2217     TESTINSN_vmov_double_2core("vmov d7,  r0,  r6",  d7,  r0,  r6,  0x35425dcc, 0x0876c43);
2218     TESTINSN_vmov_double_2core("vmov d13, r3,  r9", d13, r3,  r9, f2u0(NAN), f2u1(NAN));
2219     TESTINSN_vmov_double_2core("vmov d19, r6,  r5",  d19, r6,  r5,  f2u0(INFINITY), f2u1(INFINITY));
2220     TESTINSN_vmov_double_2core("vmov d0,  r2,  r6",  d0,  r2,  r6,  f2u0(-INFINITY), f2u1(-INFINITY));
2221
2222     TESTINSN_vmov_2core_double("vmov r3,  r6,  d9",  r3,  r6,  d9,  0x43252acc, 0x45bbd);
2223     TESTINSN_vmov_2core_double("vmov r4,  r10, d2",  r4,  r10, d2,  0x1243b4, 0x237ffb);
2224     TESTINSN_vmov_2core_double("vmov r2,  r1,  d6",  r2,  r1,  d6,  0x30cc4, 0x314c043);
2225     TESTINSN_vmov_2core_double("vmov r0,  r9, d11", r0,  r9, d11, 0x08ddf, 0x87bbca);
2226     TESTINSN_vmov_2core_double("vmov r9,  r3,  d5",  r9,  r3,  d5,  0xaaa0, 0xbbb1);
2227     TESTINSN_vmov_2core_double("vmov r10, r8,  d8",  r10, r8,  d8,  0xaa455bb, 0x13434);
2228     TESTINSN_vmov_2core_double("vmov r9, r12, d11", r9, r12, d11, 0x004003, 0x452bbc1);
2229
2230     // ARM ARM says this is UNDEFINED, hence we don't decode it
2231     //TESTINSN_vmov_2core_double("vmov r9,  r9,  d0",  r9,  r9,  d0,  0x134c, 0x41ffb6);
2232
2233     TESTINSN_vmov_2core_double("vmov r6,  r0,  d7",  r6,  r0,  d7,  0x35425dcc, 0x0876c43);
2234     TESTINSN_vmov_2core_double("vmov r12, r3,  d11", r12, r3,  d11, f2u0(NAN), f2u1(NAN));
2235     TESTINSN_vmov_2core_double("vmov r1,  r6,  d5",  r1,  r6,  d5,  f2u0(INFINITY), f2u1(INFINITY));
2236     TESTINSN_vmov_2core_double("vmov r0,  r2,  d7",  r0,  r2,  d7,  f2u0(-INFINITY), f2u1(-INFINITY));
2237
2238     TESTINSN_vmov_2core_double("vmov r2,  r9,  d0",  r2,  r9,  d0,  f2u0(INFINITY), f2u1(INFINITY));
2239     TESTINSN_vmov_2core_double("vmov r6,  r9, d10", r6,  r9, d10, 0x14534c, 0x41ffb6);
2240     TESTINSN_vmov_2core_double("vmov r0,  r9, d20", r0,  r9, d20, f2u0(NAN), f2u1(NAN));
2241
2242     printf("----- VPUSH, VPOP -----\n");
2243     TESTINSN_vpush_vpop_f32(s3, 0x00aaaaaa, s4, 0x00bbbbbb, s5, 0x00cccccc, s0, s1,  s2);
2244     TESTINSN_vpush_vpop_f32(s1, 0x000134f4, s2, 0x0870ccb3, s3, 0x00aba0f1, s9, s10, s11);
2245     TESTINSN_vpush_vpop_f32(s3, 0x00dddddd, s4, 0x00eeeeee, s5, 0x00ffffff, s0, s1,  s2);
2246     TESTINSN_vpush_vpop_f32(s11, 0x13454c,  s12, 0x341,     s13, 0xaac45f, s6, s7,  s8);
2247     TESTINSN_vpush_vpop_f32(s21, 0x0,       s22, f2u(NAN),  s23, f2u(INFINITY), s23, s24,  s25);
2248     TESTINSN_vpush_vpop_f32(s12, 0xffffff,  s13, 0xf542dd4, s14, f2u(-INFINITY), s11, s12,  s13);
2249     TESTINSN_vpush_vpop_f32(s25, 0x45cd,    s26, 0xa3ccb5,  s27, 0xbbcaf, s0, s1,  s2);
2250     TESTINSN_vpush_vpop_f32(s1,  f2u(NAN),  s2,  0xaaca3,   s3,  0x876008, s6, s7,  s8);
2251     TESTINSN_vpush_vpop_f32(s9,  0x2f43,    s10, f2u(INFINITY), s11, 0x3cc66a, s9, s10,  s11);
2252     TESTINSN_vpush_vpop_f32(s10, f2u(INFINITY), s11, 0x134cc5, s12, f2u(NAN), s2, s3,  s4);
2253     TESTINSN_vpush_vpop_f32(s7,  0xcc006d,  s8,  0x1308c,   s9,  0xabbc45, s21, s22,  s23);
2254     TESTINSN_vpush_vpop_f32(s19, f2u(-INFINITY), s20, 0x452146, s21, 0x388bbc, s4, s5,  s6);
2255     TESTINSN_vpush_vpop_f32(s16, 0x542aa,   s17, 0xaddcd5,  s18, 0x87acc, s18, s19,  s20);
2256     TESTINSN_vpush_vpop_f32(s22, 0x5ccb708, s23, 0x52345c,  s24, 0x98745c, s12, s13,  s14);
2257     TESTINSN_vpush_vpop_f32(s24, 0x99234f,  s25, 0x1aac,    s26, 0x3746c, s28, s29,  s30);
2258     TESTINSN_vpush_vpop_f32(s13, 0x134ccc,  s14, 0x6bb43,   s15, 0x834aa, s0,  s1,   s2);
2259     TESTINSN_vpush_vpop_f64(d3,  0x00aaaaaa, 0xaac3,     d4,  0x00bbbbbb, 0x34ccb,     d0, d1);
2260     TESTINSN_vpush_vpop_f64(d1,  0x000134f4, 0x341531,   d2,  0x0870ccb3, 0x4576bbc,   d9, d10);
2261     TESTINSN_vpush_vpop_f64(d3,  0x00dddddd, 0x13451cc,  d4,  0x00eeeeee, 0x123ddc8,   d0, d1);
2262     TESTINSN_vpush_vpop_f64(d11, 0x13454c,   0x541bbc3,  d12, 0x341,      0xccb5, d6,  d7);
2263     TESTINSN_vpush_vpop_f64(d21, 0x0,        0x123c33,   d22, f2u0(NAN),  f2u1(NAN),   d23, d24);
2264     TESTINSN_vpush_vpop_f64(d12, 0xffffff,   0x1940c,    d13, 0xf542dd4,  0x788ffc,    d11, d12);
2265     TESTINSN_vpush_vpop_f64(d25, 0x45cd,     0x1309c,    d26, 0xa3ccb5,   0x4588b,     d0, d1);
2266     TESTINSN_vpush_vpop_f64(d1,  f2u0(NAN),  f2u1(NAN),  d2,  0xaaca3,    0x1120a,     d6, d7);
2267     TESTINSN_vpush_vpop_f64(d9,  0x2f43,     0x19ff9,    d10, f2u0(INFINITY), f2u1(INFINITY), d9, d10);
2268     TESTINSN_vpush_vpop_f64(d10, f2u0(INFINITY), f2u1(INFINITY), d11, 0x134cc5, 0x78cbbd, d2, d3);
2269     TESTINSN_vpush_vpop_f64(d7,  0xcc006d,   0x28354,    d8,  0x1308c,    0x1993bc,    d21, d22);
2270     TESTINSN_vpush_vpop_f64(d19, f2u0(-INFINITY), f2u1(-INFINITY), d20, 0x452146, 0x138476c,  d4, d5);
2271     TESTINSN_vpush_vpop_f64(d16, 0x542aa,    0x12dd4,    d17, 0xaddcd5,   0x399cb,     d18, d19);
2272     TESTINSN_vpush_vpop_f64(d22, 0x5ccb708,  0x8009c,    d23, 0x52345c,   0x29902c,    d12, d13);
2273     TESTINSN_vpush_vpop_f64(d24, 0x99234f,   0x3457ff,   d25, 0x1aac,     0x1002cba,   d28, d29);
2274     TESTINSN_vpush_vpop_f64(d13, 0x134ccc,   0xfaa309,   d14, 0x6bb43,    0x199cb,     d0,  d1);
2275
2276     return 0;
2277 }