From: Julian Seward Date: Sun, 22 Aug 2010 12:24:47 +0000 (+0000) Subject: Merge from branches/THUMB: test programs for NEON and Thumb. X-Git-Tag: svn/VALGRIND_3_6_0~172 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=573dc1f1fc360ec9aec78d467e444f19228dac5f;p=thirdparty%2Fvalgrind.git Merge from branches/THUMB: test programs for NEON and Thumb. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11285 --- diff --git a/none/tests/arm/neon128.c b/none/tests/arm/neon128.c new file mode 100644 index 0000000000..9b122fe7f2 --- /dev/null +++ b/none/tests/arm/neon128.c @@ -0,0 +1,3093 @@ + +/* How to compile: + + gcc -O -g -Wall -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp \ + -marm -o neon128-a neon128.c + + or + + gcc -O -g -Wall -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp \ + -mthumb -o neon128-t neon128.c + +*/ + +#include +#include + +#ifndef __thumb__ +// ARM +#define MOVE_to_FPSCR_from_R4 \ + ".word 0xEEE14A10 @ vmsr FPSCR, r4\n\t" +#define MOVE_to_R4_from_FPSCR \ + ".word 0xEEF14A10 @ vmrs r4, FPSCR\n\t" +#endif + +#ifdef __thumb__ +// Thumb +#define MOVE_to_FPSCR_from_R4 \ + ".word 0x4A10EEE1 @ vmsr FPSCR, r4\n\t" +#define MOVE_to_R4_from_FPSCR \ + ".word 0x4A10EEF1 @ vmrs r4, FPSCR\n\t" +#endif + +static inline unsigned int f2u(float x) { + union { + float f; + unsigned int u; + } cvt; + cvt.f = x; + return cvt.u; +} + +/* test macros to generate and output the result of a single instruction */ + +#define TESTINSN_imm(instruction, QD, imm) \ +{ \ + unsigned int out[4]; \ +\ + __asm__ volatile( \ + "vmov.i8 " #QD ", #0x55" "\n\t" \ + instruction ", #" #imm "\n\t" \ + "vstmia %0, {" #QD "}\n\t" \ + : \ + : "r" (out) \ + : #QD, "memory" \ + ); \ + printf("%s, #" #imm " :: Qd 0x%08x 0x%08x 0x%08x 0x%08x\n", \ + instruction, out[3], out[2], out[1], out[0]); \ +} + +#define TESTINSN_un(instruction, QD, QM, QMtype, QMval) \ +{ \ + unsigned int out[4]; \ +\ + __asm__ volatile( \ + "vmov.i8 " #QD ", #0x55" "\n\t" \ + "vdup." #QMtype " " #QM ", %1\n\t" \ + instruction "\n\t" \ + "vstmia %0, {" #QD "}\n\t" \ + : \ + : "r" (out), "r" (QMval) \ + : #QD, #QM, "memory" \ + ); \ + printf("%s :: Qd 0x%08x 0x%08x 0x%08x 0x%08x Qm (" #QMtype ")0x%08x\n", \ + instruction, out[3], out[2], out[1], out[0], QMval); \ +} + +#define TESTINSN_un_q(instruction, QD, QM, QMtype, QMval) \ +{ \ + unsigned int out[4]; \ + unsigned int fpscr; \ +\ + __asm__ volatile( \ + "vmov.i8 " #QD ", #0x55" "\n\t" \ + "mov r4, #0\n\t" \ + MOVE_to_FPSCR_from_R4 \ + "vdup." #QMtype " " #QM ", %2\n\t" \ + instruction "\n\t" \ + "vstmia %1, {" #QD "}\n\t" \ + MOVE_to_R4_from_FPSCR \ + "mov %0, r4" \ + : "=r" (fpscr) \ + : "r" (out), "r" (QMval) \ + : #QD, #QM, "memory", "r4" \ + ); \ + printf("%s :: Qd 0x%08x 0x%08x 0x%08x 0x%08x Qm (" #QMtype ")0x%08x" \ + " fpscr: %08x\n", \ + instruction, out[3], out[2], out[1], out[0], QMval, fpscr); \ +} + +#define TESTINSN_bin(instruction, QD, QM, QMtype, QMval, QN, QNtype, QNval) \ +{ \ + unsigned int out[4]; \ +\ + __asm__ volatile( \ + "vmov.i8 " #QD ", #0x55" "\n\t" \ + "vdup." #QMtype " " #QM ", %1\n\t" \ + "vdup." #QNtype " " #QN ", %2\n\t" \ + instruction "\n\t" \ + "vstmia %0, {" #QD "}\n\t" \ + : \ + : "r" (out), "r" (QMval), "r" (QNval) \ + : #QD, #QM, #QN, "memory" \ + ); \ + printf("%s :: Qd 0x%08x 0x%08x 0x%08x 0x%08x Qm (" #QMtype ")0x%08x" \ + " Qn (" #QNtype ")0x%08x\n", \ + instruction, out[3], out[2], out[1], out[0], QMval, QNval); \ +} + +#define TESTINSN_bin_f(instruction, QD, QM, QMtype, QMval, QN, QNtype, QNval) \ +{ \ + unsigned int out[4]; \ +\ + __asm__ volatile( \ + "vdup.i32 " #QD ", %3\n\t" \ + "vdup." #QMtype " " #QM ", %1\n\t" \ + "vdup." #QNtype " " #QN ", %2\n\t" \ + instruction "\n\t" \ + "vstmia %0, {" #QD "}\n\t" \ + : \ + : "r" (out), "r" (QMval), "r" (QNval), "r" (0x3f800000) \ + : #QD, #QM, #QN, "memory" \ + ); \ + printf("%s :: Qd 0x%08x 0x%08x 0x%08x 0x%08x Qm (" #QMtype ")0x%08x" \ + " Qn (" #QNtype ")0x%08x\n", \ + instruction, out[3], out[2], out[1], out[0], QMval, QNval); \ +} + +#define TESTINSN_bin_q(instruction, QD, QM, QMtype, QMval, QN, QNtype, QNval) \ +{ \ + unsigned int out[4]; \ + unsigned int fpscr; \ +\ + __asm__ volatile( \ + "vmov.i8 " #QD ", #0x55" "\n\t" \ + "mov r4, #0\n\t" \ + MOVE_to_FPSCR_from_R4 \ + "vdup." #QMtype " " #QM ", %2\n\t" \ + "vdup." #QNtype " " #QN ", %3\n\t" \ + instruction "\n\t" \ + "vstmia %1, {" #QD "}\n\t" \ + MOVE_to_R4_from_FPSCR \ + "mov %0, r4" \ + : "=r" (fpscr) \ + : "r" (out), "r" (QMval), "r" (QNval) \ + : #QD, #QM, #QN, "memory", "r4" \ + ); \ + printf("%s :: Qd 0x%08x 0x%08x 0x%08x 0x%08x Qm (" #QMtype ")0x%08x" \ + " Qn (" #QNtype ")0x%08x fpscr: %08x\n", \ + instruction, out[3], out[2], out[1], out[0], QMval, QNval, fpscr); \ +} + +#define TESTINSN_dual(instruction, QM, QMtype, QMval, QN, QNtype, QNval) \ +{ \ + unsigned int out1[4]; \ + unsigned int out2[4]; \ +\ + __asm__ volatile( \ + "vdup." #QMtype " " #QM ", %2\n\t" \ + "vdup." #QNtype " " #QN ", %3\n\t" \ + instruction "\n\t" \ + "vstmia %0, {" #QM "}\n\t" \ + "vstmia %1, {" #QN "}\n\t" \ + : \ + : "r" (out1), "r" (out2), "r" (QMval), "r" (QNval) \ + : #QM, #QN, "memory" \ + ); \ + printf("%s :: Qm 0x%08x 0x%08x 0x%08x 0x%08x Qn 0x%08x 0x%08x 0x%08x 0x%08x" \ + " Qm (" #QMtype ")0x%08x Qn (" #QNtype ")0x%08x\n", \ + instruction, out1[3], out1[2], out1[1], out1[0], \ + out2[3], out2[2], out2[1], out2[0], QMval, QNval); \ +} + +// Ditto TESTING_bin(), but in QD all zeros +#define TESTINSN_bin_0s(instruction, QD, QM, QMtype, QMval, QN, QNtype, QNval) \ +{ \ + unsigned int out[4]; \ +\ + __asm__ volatile( \ + "vmov.i8 " #QD ", #0x00" "\n\t" \ + "vdup." #QMtype " " #QM ", %1\n\t" \ + "vdup." #QNtype " " #QN ", %2\n\t" \ + instruction "\n\t" \ + "vstmia %0, {" #QD "}\n\t" \ + : \ + : "r" (out), "r" (QMval), "r" (QNval) \ + : #QD, #QM, #QN, "memory" \ + ); \ + printf("%s :: Qd 0x%08x 0x%08x 0x%08x 0x%08x Qm (" #QMtype ")0x%08x" \ + " Qn (" #QNtype ")0x%08x\n", \ + instruction, out[3], out[2], out[1], out[0], QMval, QNval); \ +} + +#if 0 +#define TESTINSN_2reg_shift(instruction, QD, QM, QMtype, QMval, imm) \ +{ \ + unsigned int out[4]; \ +\ + __asm__ volatile( \ + "vmov.i8 " #QD ", #0x55" "\n\t" \ + "vdup." #QMtype " " #QM ", %1\n\t" \ + instruction ", #" #imm "\n\t" \ + "vstmia %0, {" #QD "}\n\t" \ + : \ + : "r" (out), "r" (QMval) \ + : #QD, #QM, "memory" \ + ); \ + printf("%s, #" #imm " :: Qd 0x%08x 0x%08x 0x%08x 0x%08x Qm (" #QMtype ")0x%08x", \ + instruction, out[3], out[2], out[1], out[0], QMval); \ +} +#endif + +int main(int argc, char **argv) +{ + printf("----- VMOV (immediate) -----\n"); + TESTINSN_imm("vmov.i32 q0", q0, 0x7); + TESTINSN_imm("vmov.i16 q1", q1, 0x7); + TESTINSN_imm("vmov.i8 q2", q2, 0x7); + TESTINSN_imm("vmov.i32 q5", q5, 0x700); + TESTINSN_imm("vmov.i16 q7", q7, 0x700); + TESTINSN_imm("vmov.i32 q10", q10, 0x70000); + TESTINSN_imm("vmov.i32 q12", q12, 0x7000000); + TESTINSN_imm("vmov.i32 q13", q13, 0x7FF); + TESTINSN_imm("vmov.i32 q14", q14, 0x7FFFF); + TESTINSN_imm("vmov.i64 q15", q15, 0xFF0000FF00FFFF00); + + printf("----- VMVN (immediate) -----\n"); + TESTINSN_imm("vmvn.i32 q0", q0, 0x7); + TESTINSN_imm("vmvn.i16 q1", q1, 0x7); + TESTINSN_imm("vmvn.i8 q2", q2, 0x7); + TESTINSN_imm("vmvn.i32 q5", q5, 0x700); + TESTINSN_imm("vmvn.i16 q7", q7, 0x700); + TESTINSN_imm("vmvn.i32 q10", q10, 0x70000); + TESTINSN_imm("vmvn.i32 q13", q13, 0x7000000); + TESTINSN_imm("vmvn.i32 q11", q11, 0x7FF); + TESTINSN_imm("vmvn.i32 q14", q14, 0x7FFFF); + TESTINSN_imm("vmvn.i64 q15", q15, 0xFF0000FF00FFFF00); + + printf("----- VORR (immediate) -----\n"); + TESTINSN_imm("vorr.i32 q0", q0, 0x7); + TESTINSN_imm("vorr.i16 q2", q2, 0x7); + TESTINSN_imm("vorr.i32 q8", q8, 0x700); + TESTINSN_imm("vorr.i16 q6", q6, 0x700); + TESTINSN_imm("vorr.i32 q14", q14, 0x70000); + TESTINSN_imm("vorr.i32 q15", q15, 0x7000000); + + printf("----- VBIC (immediate) -----\n"); + TESTINSN_imm("vbic.i32 q0", q0, 0x7); + TESTINSN_imm("vbic.i16 q3", q3, 0x7); + TESTINSN_imm("vbic.i32 q5", q5, 0x700); + TESTINSN_imm("vbic.i16 q8", q8, 0x700); + TESTINSN_imm("vbic.i32 q10", q10, 0x70000); + TESTINSN_imm("vbic.i32 q15", q15, 0x7000000); + + printf("---- VMVN (register) ----\n"); + TESTINSN_un("vmvn q0, q1", q0, q1, i32, 24); + TESTINSN_un("vmvn q10, q15", q10, q15, i32, 24); + TESTINSN_un("vmvn q0, q14", q0, q14, i32, 24); + + printf("---- VMOV (register) ----\n"); + TESTINSN_un("vmov q0, q1", q0, q1, i32, 24); + TESTINSN_un("vmov q10, q15", q10, q15, i32, 24); + TESTINSN_un("vmov q0, q14", q0, q14, i32, 24); + + printf("---- VDUP (ARM core register) (tested indirectly) ----\n"); + TESTINSN_un("vmov q0, q1", q0, q1, i8, 7); + TESTINSN_un("vmov q10, q11", q10, q11, i16, 7); + TESTINSN_un("vmov q0, q15", q0, q15, i32, 7); + + printf("---- VADD ----\n"); + TESTINSN_bin("vadd.i32 q0, q1, q2", q0, q1, i32, 24, q2, i32, 120); + TESTINSN_bin("vadd.i64 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vadd.i32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vadd.i16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vadd.i8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vadd.i8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vadd.i16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vadd.i32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vadd.i64 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vadd.i32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + TESTINSN_bin("vadd.i64 q13, q14, q15", q13, q14, i32, 140, q15, i32, 120); + + printf("---- VSUB ----\n"); + TESTINSN_bin("vsub.i32 q0, q1, q2", q0, q1, i32, 24, q2, i32, 120); + TESTINSN_bin("vsub.i64 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vsub.i32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vsub.i16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vsub.i8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vsub.i8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vsub.i16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vsub.i32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vsub.i64 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vsub.i32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + TESTINSN_bin("vsub.i64 q13, q14, q15", q13, q14, i32, 140, q15, i32, 120); + + printf("---- VAND ----\n"); + TESTINSN_bin("vand q0, q1, q2", q0, q1, i8, 0x24, q2, i16, 0x77); + TESTINSN_bin("vand q4, q6, q5", q4, q6, i8, 0xff, q5, i16, 0x57); + TESTINSN_bin("vand q10, q11, q12", q10, q11, i8, 0xfe, q12, i8, 0xed); + TESTINSN_bin("vand q15, q15, q15", q15, q15, i8, 0xff, q15, i8, 0xff); + + printf("---- VBIC ----\n"); + TESTINSN_bin("vbic q0, q1, q2", q0, q1, i8, 0x24, q2, i16, 0x77); + TESTINSN_bin("vbic q4, q6, q5", q4, q6, i8, 0xff, q5, i16, 0x57); + TESTINSN_bin("vbic q10, q11, q12", q10, q11, i8, 0xfe, q12, i8, 0xed); + TESTINSN_bin("vbic q15, q15, q15", q15, q15, i8, 0xff, q15, i8, 0xff); + + printf("---- VORR ----\n"); + TESTINSN_bin("vorr q0, q1, q2", q0, q1, i8, 0x24, q2, i16, 0x73); + TESTINSN_bin("vorr q7, q3, q0", q7, q3, i8, 0x24, q0, i16, 0xff); + TESTINSN_bin("vorr q4, q4, q4", q4, q4, i16, 0xff, q4, i16, 0xff); + TESTINSN_bin("vorr q2, q3, q15", q2, q3, i32, 0x24, q15, i32, 0x1f); + + printf("---- VORN ----\n"); + TESTINSN_bin("vorn q0, q1, q2", q0, q1, i8, 0x24, q2, i16, 0x73); + TESTINSN_bin("vorn q7, q3, q0", q7, q3, i8, 0x24, q0, i16, 0xff); + TESTINSN_bin("vorn q4, q4, q4", q4, q4, i16, 0xff, q4, i16, 0xff); + TESTINSN_bin("vorn q2, q3, q15", q2, q3, i32, 0x24, q15, i32, 0x1f); + + printf("---- VEOR ----\n"); + TESTINSN_bin("veor q0, q1, q2", q0, q1, i8, 0x24, q2, i16, 0x77); + TESTINSN_bin("veor q4, q6, q5", q4, q6, i8, 0xff, q5, i16, 0x57); + TESTINSN_bin("veor q10, q11, q12", q10, q11, i8, 0xfe, q12, i8, 0xed); + TESTINSN_bin("veor q15, q15, q15", q15, q15, i8, 0xff, q15, i8, 0xff); + TESTINSN_bin("veor q0, q1, q2", q0, q1, i8, 0x24, q2, i16, 0x73); + TESTINSN_bin("veor q7, q3, q0", q7, q3, i8, 0x24, q0, i16, 0xff); + TESTINSN_bin("veor q4, q4, q4", q4, q4, i16, 0xff, q4, i16, 0xff); + TESTINSN_bin("veor q2, q3, q15", q2, q3, i32, 0x24, q15, i32, 0x1f); + + printf("---- VBSL ----\n"); + TESTINSN_bin("vbsl q0, q1, q2", q0, q1, i8, 0x24, q2, i16, 0x77); + TESTINSN_bin("vbsl q4, q6, q5", q4, q6, i8, 0xff, q5, i16, 0x57); + TESTINSN_bin("vbsl q10, q11, q12", q10, q11, i8, 0xfe, q12, i8, 0xed); + TESTINSN_bin("vbsl q15, q15, q15", q15, q15, i8, 0xff, q15, i8, 0xff); + TESTINSN_bin("vbsl q0, q1, q2", q0, q1, i8, 0x24, q2, i16, 0x73); + TESTINSN_bin("vbsl q7, q3, q0", q7, q3, i8, 0x24, q0, i16, 0xff); + TESTINSN_bin("vbsl q4, q4, q4", q4, q4, i16, 0xff, q4, i16, 0xff); + TESTINSN_bin("vbsl q2, q3, q15", q2, q3, i32, 0x24, q15, i32, 0x1f); + + printf("---- VBIT ----\n"); + TESTINSN_bin("vbit q0, q1, q2", q0, q1, i8, 0x24, q2, i16, 0x77); + TESTINSN_bin("vbit q4, q6, q5", q4, q6, i8, 0xff, q5, i16, 0x57); + TESTINSN_bin("vbit q10, q11, q12", q10, q11, i8, 0xfe, q12, i8, 0xed); + TESTINSN_bin("vbit q15, q15, q15", q15, q15, i8, 0xff, q15, i8, 0xff); + TESTINSN_bin("vbit q0, q1, q2", q0, q1, i8, 0x24, q2, i16, 0x73); + TESTINSN_bin("vbit q7, q3, q0", q7, q3, i8, 0x24, q0, i16, 0xff); + TESTINSN_bin("vbit q4, q4, q4", q4, q4, i16, 0xff, q4, i16, 0xff); + TESTINSN_bin("vbit q2, q3, q15", q2, q3, i32, 0x24, q15, i32, 0x1f); + + printf("---- VBIF ----\n"); + TESTINSN_bin("vbif q0, q1, q2", q0, q1, i8, 0x24, q2, i16, 0x77); + TESTINSN_bin("vbif q4, q6, q5", q4, q6, i8, 0xff, q5, i16, 0x57); + TESTINSN_bin("vbif q10, q11, q12", q10, q11, i8, 0xfe, q12, i8, 0xed); + TESTINSN_bin("vbif q15, q15, q15", q15, q15, i8, 0xff, q15, i8, 0xff); + TESTINSN_bin("vbif q0, q1, q2", q0, q1, i8, 0x24, q2, i16, 0x73); + TESTINSN_bin("vbif q7, q3, q0", q7, q3, i8, 0x24, q0, i16, 0xff); + TESTINSN_bin("vbif q4, q4, q4", q4, q4, i16, 0xff, q4, i16, 0xff); + TESTINSN_bin("vbif q2, q3, q15", q2, q3, i32, 0x24, q15, i32, 0x1f); + + printf("---- VEXT ----\n"); + TESTINSN_bin("vext.8 q0, q1, q2, #0", q0, q1, i8, 0x77, q2, i8, 0xff); + TESTINSN_bin("vext.8 q0, q1, q2, #1", q0, q1, i8, 0x77, q2, i8, 0xff); + TESTINSN_bin("vext.8 q0, q1, q2, #9", q0, q1, i8, 0x77, q2, i8, 0xff); + TESTINSN_bin("vext.8 q0, q1, q2, #15", q0, q1, i8, 0x77, q2, i8, 0xff); + TESTINSN_bin("vext.8 q10, q11, q12, #4", q10, q11, i8, 0x77, q12, i8, 0xff); + TESTINSN_bin("vext.8 q0, q5, q15, #12", q0, q5, i8, 0x77, q15, i8, 0xff); + + printf("---- VHADD ----\n"); + TESTINSN_bin("vhadd.s32 q0, q1, q2", q0, q1, i32, 24, q2, i32, 120); + TESTINSN_bin("vhadd.s32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vhadd.s16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vhadd.s8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vhadd.s8 q0, q1, q2", q0, q1, i8, 141, q2, i8, 121); + TESTINSN_bin("vhadd.s8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vhadd.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vhadd.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vhadd.s32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + TESTINSN_bin("vhadd.u32 q0, q1, q2", q0, q1, i32, 24, q2, i32, 120); + TESTINSN_bin("vhadd.u32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vhadd.u16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vhadd.u8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vhadd.u8 q0, q1, q2", q0, q1, i8, 141, q2, i8, 121); + TESTINSN_bin("vhadd.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vhadd.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vhadd.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vhadd.u32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + + printf("---- VHSUB ----\n"); + TESTINSN_bin("vhsub.s32 q0, q1, q2", q0, q1, i32, 24, q2, i32, 120); + TESTINSN_bin("vhsub.s32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vhsub.s16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vhsub.s8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vhsub.s8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vhsub.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vhsub.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vhsub.s32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + TESTINSN_bin("vhsub.u32 q0, q1, q2", q0, q1, i32, 24, q2, i32, 120); + TESTINSN_bin("vhsub.u32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vhsub.u16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vhsub.u8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vhsub.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vhsub.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vhsub.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vhsub.u32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + + printf("---- VQADD ----\n"); + TESTINSN_bin_q("vqadd.s32 q0, q1, q2", q0, q1, i32, 24, q2, i32, 120); + TESTINSN_bin_q("vqadd.s32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin_q("vqadd.s16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin_q("vqadd.s8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin_q("vqadd.s8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqadd.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqadd.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqadd.s32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + TESTINSN_bin_q("vqadd.u32 q0, q1, q2", q0, q1, i32, 24, q2, i32, 120); + TESTINSN_bin_q("vqadd.u32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin_q("vqadd.u16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin_q("vqadd.u8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin_q("vqadd.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqadd.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqadd.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqadd.u32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + + printf("---- VQSUB ----\n"); + TESTINSN_bin_q("vqsub.s32 q0, q1, q2", q0, q1, i32, 24, q2, i32, 120); + TESTINSN_bin_q("vqsub.s32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin_q("vqsub.s16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin_q("vqsub.s8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin_q("vqsub.s8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqsub.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqsub.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqsub.s32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + TESTINSN_bin_q("vqsub.u32 q0, q1, q2", q0, q1, i32, 24, q2, i32, 120); + TESTINSN_bin_q("vqsub.u32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin_q("vqsub.u16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin_q("vqsub.u8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin_q("vqsub.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqsub.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqsub.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqsub.u32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + + printf("---- VRHADD ----\n"); + TESTINSN_bin("vrhadd.s32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 120); + TESTINSN_bin("vrhadd.s32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 121); + TESTINSN_bin("vrhadd.s32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vrhadd.s16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vrhadd.s8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vrhadd.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 1, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 1, q5, i32, (1 << 31) + 3); + TESTINSN_bin("vrhadd.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vrhadd.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vrhadd.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 4, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.s32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + TESTINSN_bin("vrhadd.u32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 120); + TESTINSN_bin("vrhadd.u32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vrhadd.u16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vrhadd.u8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vrhadd.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vrhadd.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vrhadd.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vrhadd.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.u32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + + printf("---- VCGT ----\n"); + TESTINSN_bin("vcgt.s32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 120); + TESTINSN_bin("vcgt.s32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 121); + TESTINSN_bin("vcgt.s32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vcgt.s16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vcgt.s8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vcgt.s32 q0, q1, q2", q0, q1, i32, 120, q2, i32, 120); + TESTINSN_bin("vcgt.s16 q0, q1, q2", q0, q1, i32, 120, q2, i32, 120); + TESTINSN_bin("vcgt.s8 q0, q1, q2", q0, q1, i32, 120, q2, i32, 120); + TESTINSN_bin("vcgt.s32 q0, q1, q2", q0, q1, i32, 120, q2, i32, 140); + TESTINSN_bin("vcgt.s16 q0, q1, q2", q0, q1, i32, 120, q2, i32, 140); + TESTINSN_bin("vcgt.s8 q0, q1, q2", q0, q1, i32, 120, q2, i32, 140); + TESTINSN_bin("vcgt.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 3, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 3, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 3, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 1, q5, i32, (1 << 31) + 3); + TESTINSN_bin("vcgt.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vcgt.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vcgt.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 2, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 2, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 2, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.s32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + TESTINSN_bin("vcgt.u32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 120); + TESTINSN_bin("vcgt.u32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vcgt.u16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vcgt.u8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vcgt.u32 q0, q1, q2", q0, q1, i32, 120, q2, i32, 120); + TESTINSN_bin("vcgt.u16 q0, q1, q2", q0, q1, i32, 120, q2, i32, 120); + TESTINSN_bin("vcgt.u8 q0, q1, q2", q0, q1, i32, 120, q2, i32, 120); + TESTINSN_bin("vcgt.u32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 140); + TESTINSN_bin("vcgt.u16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 140); + TESTINSN_bin("vcgt.u8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 140); + TESTINSN_bin("vcgt.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 3, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 3, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 3, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vcgt.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vcgt.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vcgt.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 2, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 2, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 2, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.u32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + + printf("---- VCGE ----\n"); + TESTINSN_bin("vcge.s32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 120); + TESTINSN_bin("vcge.s32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 121); + TESTINSN_bin("vcge.s32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vcge.s16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vcge.s8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vcge.s32 q0, q1, q2", q0, q1, i32, 120, q2, i32, 120); + TESTINSN_bin("vcge.s16 q0, q1, q2", q0, q1, i32, 120, q2, i32, 120); + TESTINSN_bin("vcge.s8 q0, q1, q2", q0, q1, i32, 120, q2, i32, 120); + TESTINSN_bin("vcge.s32 q0, q1, q2", q0, q1, i32, 120, q2, i32, 140); + TESTINSN_bin("vcge.s16 q0, q1, q2", q0, q1, i32, 120, q2, i32, 140); + TESTINSN_bin("vcge.s8 q0, q1, q2", q0, q1, i32, 120, q2, i32, 140); + TESTINSN_bin("vcge.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 3, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 3, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 3, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 1, q5, i32, (1 << 31) + 3); + TESTINSN_bin("vcge.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vcge.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vcge.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 2, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 2, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 2, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.s32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + TESTINSN_bin("vcge.u32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 120); + TESTINSN_bin("vcge.u32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vcge.u16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vcge.u8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vcge.u32 q0, q1, q2", q0, q1, i32, 120, q2, i32, 120); + TESTINSN_bin("vcge.u16 q0, q1, q2", q0, q1, i32, 120, q2, i32, 120); + TESTINSN_bin("vcge.u8 q0, q1, q2", q0, q1, i32, 120, q2, i32, 120); + TESTINSN_bin("vcge.u32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 140); + TESTINSN_bin("vcge.u16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 140); + TESTINSN_bin("vcge.u8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 140); + TESTINSN_bin("vcge.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 3, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 3, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 3, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vcge.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vcge.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vcge.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 2, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 2, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 2, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.u32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + + printf("---- VSHL (register) ----\n"); + TESTINSN_bin("vshl.s8 q0, q1, q2", q0, q1, i32, 24, q2, i32, 1); + TESTINSN_bin("vshl.s8 q8, q1, q12", q8, q1, i32, 24, q12, i32, 8); + TESTINSN_bin("vshl.s8 q10, q11, q7", q10, q11, i32, 24, q7, i32, 4); + TESTINSN_bin("vshl.s16 q3, q8, q11", q3, q8, i32, 14, q11, i32, 2); + TESTINSN_bin("vshl.s16 q5, q12, q14", q5, q12, i32, (1 << 30), q14, i32, 1); + TESTINSN_bin("vshl.s16 q15, q2, q1", q15, q2, i32, (1 << 30), q1, i32, 11); + TESTINSN_bin("vshl.s32 q9, q12, q15", q9, q12, i32, (1 << 31) + 2, q15, i32, 2); + TESTINSN_bin("vshl.s32 q11, q2, q0", q11, q2, i32, -1, q0, i32, 12); + TESTINSN_bin("vshl.s32 q5, q2, q3", q5, q2, i32, (1 << 30), q3, i32, 21); + TESTINSN_bin("vshl.s64 q15, q12, q4", q15, q12, i32, 5, q4, i32, 20); + TESTINSN_bin("vshl.s64 q8, q2, q4", q8, q2, i32, 15, q4, i32, 4); + TESTINSN_bin("vshl.s64 q5, q12, q4", q5, q12, i32, (1 << 31) + 1, q4, i32, 30); + TESTINSN_bin("vshl.u8 q0, q1, q2", q0, q1, i32, 24, q2, i32, 1); + TESTINSN_bin("vshl.u8 q8, q1, q12", q8, q1, i32, 24, q12, i32, 8); + TESTINSN_bin("vshl.u8 q10, q11, q7", q10, q11, i32, 24, q7, i32, 4); + TESTINSN_bin("vshl.u16 q3, q8, q11", q3, q8, i32, 14, q11, i32, 2); + TESTINSN_bin("vshl.u16 q5, q12, q14", q5, q12, i32, (1 << 30), q14, i32, 1); + TESTINSN_bin("vshl.u16 q15, q2, q1", q15, q2, i32, (1 << 30), q1, i32, 11); + TESTINSN_bin("vshl.u32 q9, q12, q15", q9, q12, i32, (1 << 31) + 2, q15, i32, 2); + TESTINSN_bin("vshl.u32 q11, q2, q0", q11, q2, i32, -1, q0, i32, 12); + TESTINSN_bin("vshl.u32 q5, q2, q3", q5, q2, i32, (1 << 30), q3, i32, 21); + TESTINSN_bin("vshl.u64 q15, q12, q4", q15, q12, i32, 5, q4, i32, 20); + TESTINSN_bin("vshl.u64 q8, q2, q4", q8, q2, i32, 15, q4, i32, 4); + TESTINSN_bin("vshl.u64 q5, q12, q4", q5, q12, i32, (1 << 31) + 1, q4, i32, 30); + + printf("---- VQSHL (register) ----\n"); + TESTINSN_bin_q("vqshl.s64 q0, q1, q2", q0, q1, i32, 1, q2, i32, 1); + TESTINSN_bin_q("vqshl.s64 q3, q4, q5", q3, q4, i32, -127, q5, i32, 1); + TESTINSN_bin_q("vqshl.s64 q3, q4, q5", q3, q4, i32, -127, q5, i32, -3); + TESTINSN_bin_q("vqshl.s64 q0, q1, q2", q0, q1, i32, 16, q2, i32, 14); + TESTINSN_bin_q("vqshl.s64 q13, q14, q15", q13, q14, i32, -17, q15, i32, -26); + TESTINSN_bin_q("vqshl.s64 q7, q8, q2", q7, q8, i32, 24, q2, i32, -60); + TESTINSN_bin_q("vqshl.s32 q3, q4, q15", q3, q4, i32, 127, q15, i32, -30); + TESTINSN_bin_q("vqshl.s32 q2, q8, q4", q2, q8, i32, -11, q4, i32, -4); + TESTINSN_bin_q("vqshl.s32 q12, q11, q13", q12, q11, i32, -120, q13, i32, -9); + TESTINSN_bin_q("vqshl.s32 q0, q1, q2", q0, q1, i32, 34, q2, i32, -7); + TESTINSN_bin_q("vqshl.s32 q9, q10, q11", q9, q10, i32, (1 << 31) + 8, q11, i32, -1); + TESTINSN_bin_q("vqshl.s32 q13, q3, q5", q13, q3, i32, (1 << 27), q5, i32, 3); + TESTINSN_bin_q("vqshl.s16 q11, q10, q2", q11, q10, i32, (1 << 31), q2, i32, -31); + TESTINSN_bin_q("vqshl.s16 q3, q14, q7", q3, q14, i32, (1 << 31), q7, i32, -3); + TESTINSN_bin_q("vqshl.s16 q0, q11, q2", q0, q11, i32, (1 << 31) + 256, q2, i32, -1); + TESTINSN_bin_q("vqshl.s16 q1, q2, q3", q1, q2, i32, (1 << 31) + 256, q3, i32, -31); + TESTINSN_bin_q("vqshl.s16 q3, q4, q5", q3, q4, i32, (1 << 31) + (1 << 29), q5, i32, -13); + TESTINSN_bin_q("vqshl.s16 q0, q15, q2", q0, q15, i32, 1, q2, i32, 30); + TESTINSN_bin_q("vqshl.s8 q2, q7, q11", q2, q7, i32, -1, q11, i32, 40); + TESTINSN_bin_q("vqshl.s8 q13, q1, q2", q13, q1, i32, -4, q2, i32, 30); + TESTINSN_bin_q("vqshl.s8 q3, q7, q5", q3, q7, i32, (1 << 31) + 11, q5, i32, 3); + TESTINSN_bin_q("vqshl.s8 q10, q11, q12", q10, q11, i32, (1 << 16), q12, i32, 16); + TESTINSN_bin_q("vqshl.s8 q6, q7, q8", q6, q7, i32, (1 << 30), q8, i32, 2); + TESTINSN_bin_q("vqshl.s8 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + TESTINSN_bin_q("vqshl.u64 q0, q1, q2", q0, q1, i32, 1, q2, i32, 1); + TESTINSN_bin_q("vqshl.u64 q3, q4, q5", q3, q4, i32, -127, q5, i32, 1); + TESTINSN_bin_q("vqshl.u64 q3, q4, q5", q3, q4, i32, -127, q5, i32, -3); + TESTINSN_bin_q("vqshl.u64 q0, q1, q2", q0, q1, i32, 16, q2, i32, 14); + TESTINSN_bin_q("vqshl.u64 q13, q14, q15", q13, q14, i32, -17, q15, i32, -26); + TESTINSN_bin_q("vqshl.u64 q7, q8, q2", q7, q8, i32, 24, q2, i32, -60); + TESTINSN_bin_q("vqshl.u32 q3, q4, q15", q3, q4, i32, 127, q15, i32, -30); + TESTINSN_bin_q("vqshl.u32 q2, q8, q4", q2, q8, i32, -11, q4, i32, -4); + TESTINSN_bin_q("vqshl.u32 q12, q11, q13", q12, q11, i32, -120, q13, i32, -9); + TESTINSN_bin_q("vqshl.u32 q0, q1, q2", q0, q1, i32, 34, q2, i32, -7); + TESTINSN_bin_q("vqshl.u32 q9, q10, q11", q9, q10, i32, (1 << 31) + 8, q11, i32, -1); + TESTINSN_bin_q("vqshl.u32 q13, q3, q5", q13, q3, i32, (1 << 27), q5, i32, 3); + TESTINSN_bin_q("vqshl.u16 q11, q10, q2", q11, q10, i32, (1 << 31), q2, i32, -31); + TESTINSN_bin_q("vqshl.u16 q3, q14, q7", q3, q14, i32, (1 << 31), q7, i32, -3); + TESTINSN_bin_q("vqshl.u16 q0, q11, q2", q0, q11, i32, (1 << 31) + 256, q2, i32, -1); + TESTINSN_bin_q("vqshl.u16 q1, q2, q3", q1, q2, i32, (1 << 31) + 256, q3, i32, -31); + TESTINSN_bin_q("vqshl.u16 q3, q4, q5", q3, q4, i32, (1 << 31) + (1 << 29), q5, i32, -13); + TESTINSN_bin_q("vqshl.u16 q0, q15, q2", q0, q15, i32, 1, q2, i32, 30); + TESTINSN_bin_q("vqshl.u8 q2, q7, q11", q2, q7, i32, -1, q11, i32, 40); + TESTINSN_bin_q("vqshl.u8 q13, q1, q2", q13, q1, i32, -4, q2, i32, 30); + TESTINSN_bin_q("vqshl.u8 q3, q7, q5", q3, q7, i32, (1 << 31) + 11, q5, i32, 3); + TESTINSN_bin_q("vqshl.u8 q10, q11, q12", q10, q11, i32, (1 << 16), q12, i32, 16); + TESTINSN_bin_q("vqshl.u8 q6, q7, q8", q6, q7, i32, (1 << 30), q8, i32, 2); + TESTINSN_bin_q("vqshl.u8 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + + printf("---- VQSHL / VQSHLU (immediate) ----\n"); + TESTINSN_un_q("vqshl.s64 q0, q1, #1", q0, q1, i32, 1); + TESTINSN_un_q("vqshl.s64 q15, q14, #1", q15, q14, i32, -127); + TESTINSN_un_q("vqshl.s64 q5, q4, #0", q5, q4, i32, -127); + TESTINSN_un_q("vqshl.s64 q5, q4, #63", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s64 q5, q4, #60", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s64 q5, q4, #59", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s64 q5, q4, #58", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s64 q5, q4, #17", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s64 q5, q4, #63", q5, q4, i32, -1); + TESTINSN_un_q("vqshl.s64 q5, q4, #60", q5, q4, i32, -1); + TESTINSN_un_q("vqshl.s64 q5, q4, #7", q5, q4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshl.s32 q10, q11, #1", q10, q11, i32, 1); + TESTINSN_un_q("vqshl.s32 q15, q14, #1", q15, q14, i32, -127); + TESTINSN_un_q("vqshl.s32 q5, q4, #0", q5, q4, i32, -127); + TESTINSN_un_q("vqshl.s32 q5, q4, #31", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s32 q5, q4, #28", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s32 q5, q4, #27", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s32 q5, q4, #26", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s32 q5, q4, #17", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s32 q5, q4, #31", q5, q4, i32, -1); + TESTINSN_un_q("vqshl.s32 q5, q4, #29", q5, q4, i32, -1); + TESTINSN_un_q("vqshl.s32 q5, q4, #7", q5, q4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshl.s16 q9, q8, #1", q9, q8, i32, 1); + TESTINSN_un_q("vqshl.s16 q15, q14, #1", q15, q14, i32, -127); + TESTINSN_un_q("vqshl.s16 q5, q4, #0", q5, q4, i32, -127); + TESTINSN_un_q("vqshl.s16 q9, q8, #15", q9, q8, i32, 16); + TESTINSN_un_q("vqshl.s16 q5, q4, #12", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s16 q5, q4, #11", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s16 q5, q4, #10", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s16 q5, q4, #4", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s16 q5, q4, #15", q5, q4, i32, -1); + TESTINSN_un_q("vqshl.s16 q5, q4, #12", q5, q4, i32, -1); + TESTINSN_un_q("vqshl.s16 q5, q4, #7", q5, q4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshl.s8 q0, q1, #1", q0, q1, i32, 1); + TESTINSN_un_q("vqshl.s8 q15, q14, #1", q15, q14, i32, -127); + TESTINSN_un_q("vqshl.s8 q5, q4, #0", q5, q4, i32, -127); + TESTINSN_un_q("vqshl.s8 q5, q4, #7", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s8 q5, q4, #4", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s8 q5, q4, #3", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s8 q5, q4, #2", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s8 q5, q4, #1", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.s8 q5, q4, #7", q5, q4, i32, -1); + TESTINSN_un_q("vqshl.s8 q5, q4, #5", q5, q4, i32, -1); + TESTINSN_un_q("vqshl.s8 q5, q4, #2", q5, q4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshl.u64 q0, q1, #1", q0, q1, i32, 1); + TESTINSN_un_q("vqshl.u64 q15, q14, #1", q15, q14, i32, -127); + TESTINSN_un_q("vqshl.u64 q5, q4, #0", q5, q4, i32, -127); + TESTINSN_un_q("vqshl.u64 q5, q4, #63", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u64 q5, q4, #60", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u64 q5, q4, #59", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u64 q5, q4, #58", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u64 q5, q4, #17", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u64 q5, q4, #63", q5, q4, i32, -1); + TESTINSN_un_q("vqshl.u64 q5, q4, #60", q5, q4, i32, -1); + TESTINSN_un_q("vqshl.u64 q5, q4, #7", q5, q4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshl.u32 q10, q11, #1", q10, q11, i32, 1); + TESTINSN_un_q("vqshl.u32 q15, q14, #1", q15, q14, i32, -127); + TESTINSN_un_q("vqshl.u32 q5, q4, #0", q5, q4, i32, -127); + TESTINSN_un_q("vqshl.u32 q5, q4, #31", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u32 q5, q4, #28", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u32 q5, q4, #27", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u32 q5, q4, #26", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u32 q5, q4, #17", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u32 q5, q4, #31", q5, q4, i32, -1); + TESTINSN_un_q("vqshl.u32 q5, q4, #29", q5, q4, i32, -1); + TESTINSN_un_q("vqshl.u32 q5, q4, #7", q5, q4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshl.u16 q9, q8, #1", q9, q8, i32, 1); + TESTINSN_un_q("vqshl.u16 q15, q14, #1", q15, q14, i32, -127); + TESTINSN_un_q("vqshl.u16 q5, q4, #0", q5, q4, i32, -127); + TESTINSN_un_q("vqshl.u16 q9, q8, #15", q9, q8, i32, 16); + TESTINSN_un_q("vqshl.u16 q5, q4, #12", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u16 q5, q4, #11", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u16 q5, q4, #10", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u16 q5, q4, #4", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u16 q5, q4, #15", q5, q4, i32, -1); + TESTINSN_un_q("vqshl.u16 q5, q4, #12", q5, q4, i32, -1); + TESTINSN_un_q("vqshl.u16 q5, q4, #7", q5, q4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshl.u8 q0, q1, #1", q0, q1, i32, 1); + TESTINSN_un_q("vqshl.u8 q15, q14, #1", q15, q14, i32, -127); + TESTINSN_un_q("vqshl.u8 q5, q4, #0", q5, q4, i32, -127); + TESTINSN_un_q("vqshl.u8 q5, q4, #7", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u8 q5, q4, #4", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u8 q5, q4, #3", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u8 q5, q4, #2", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u8 q5, q4, #1", q5, q4, i32, 16); + TESTINSN_un_q("vqshl.u8 q5, q4, #7", q5, q4, i32, -1); + TESTINSN_un_q("vqshl.u8 q5, q4, #5", q5, q4, i32, -1); + TESTINSN_un_q("vqshl.u8 q5, q4, #2", q5, q4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshlu.s64 q0, q1, #1", q0, q1, i32, 1); + TESTINSN_un_q("vqshlu.s64 q15, q14, #1", q15, q14, i32, -127); + TESTINSN_un_q("vqshlu.s64 q5, q4, #0", q5, q4, i32, -127); + TESTINSN_un_q("vqshlu.s64 q5, q4, #63", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s64 q5, q4, #60", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s64 q5, q4, #59", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s64 q5, q4, #58", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s64 q5, q4, #17", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s64 q5, q4, #63", q5, q4, i32, -1); + TESTINSN_un_q("vqshlu.s64 q5, q4, #60", q5, q4, i32, -1); + TESTINSN_un_q("vqshlu.s64 q5, q4, #7", q5, q4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshlu.s32 q10, q11, #1", q10, q11, i32, 1); + TESTINSN_un_q("vqshlu.s32 q15, q14, #1", q15, q14, i32, -127); + TESTINSN_un_q("vqshlu.s32 q5, q4, #0", q5, q4, i32, -127); + TESTINSN_un_q("vqshlu.s32 q5, q4, #31", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s32 q5, q4, #28", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s32 q5, q4, #27", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s32 q5, q4, #26", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s32 q5, q4, #17", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s32 q5, q4, #31", q5, q4, i32, -1); + TESTINSN_un_q("vqshlu.s32 q5, q4, #29", q5, q4, i32, -1); + TESTINSN_un_q("vqshlu.s32 q5, q4, #7", q5, q4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshlu.s16 q9, q8, #1", q9, q8, i32, 1); + TESTINSN_un_q("vqshlu.s16 q15, q14, #1", q15, q14, i32, -127); + TESTINSN_un_q("vqshlu.s16 q5, q4, #0", q5, q4, i32, -127); + TESTINSN_un_q("vqshlu.s16 q9, q8, #15", q9, q8, i32, 16); + TESTINSN_un_q("vqshlu.s16 q5, q4, #12", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s16 q5, q4, #11", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s16 q5, q4, #10", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s16 q5, q4, #4", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s16 q5, q4, #15", q5, q4, i32, -1); + TESTINSN_un_q("vqshlu.s16 q5, q4, #12", q5, q4, i32, -1); + TESTINSN_un_q("vqshlu.s16 q5, q4, #7", q5, q4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshlu.s8 q0, q1, #1", q0, q1, i32, 1); + TESTINSN_un_q("vqshlu.s8 q15, q14, #1", q15, q14, i32, -127); + TESTINSN_un_q("vqshlu.s8 q5, q4, #0", q5, q4, i32, -127); + TESTINSN_un_q("vqshlu.s8 q5, q4, #7", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s8 q5, q4, #4", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s8 q5, q4, #3", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s8 q5, q4, #2", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s8 q5, q4, #1", q5, q4, i32, 16); + TESTINSN_un_q("vqshlu.s8 q5, q4, #7", q5, q4, i32, -1); + TESTINSN_un_q("vqshlu.s8 q5, q4, #5", q5, q4, i32, -1); + TESTINSN_un_q("vqshlu.s8 q5, q4, #2", q5, q4, i32, (1 << 31) + 2); + + printf("---- VQRSHL (register) ----\n"); + TESTINSN_bin_q("vqrshl.s64 q0, q1, q2", q0, q1, i32, 1, q2, i32, 1); + TESTINSN_bin_q("vqrshl.s64 q3, q4, q5", q3, q4, i32, -127, q5, i32, 1); + TESTINSN_bin_q("vqrshl.s64 q3, q4, q5", q3, q4, i32, -127, q5, i32, -3); + TESTINSN_bin_q("vqrshl.s64 q0, q1, q2", q0, q1, i32, 16, q2, i32, 14); + TESTINSN_bin_q("vqrshl.s64 q13, q14, q15", q13, q14, i32, -17, q15, i32, -26); + TESTINSN_bin_q("vqrshl.s64 q7, q8, q2", q7, q8, i32, 24, q2, i32, -60); + TESTINSN_bin_q("vqrshl.s32 q3, q4, q15", q3, q4, i32, 127, q15, i32, -30); + TESTINSN_bin_q("vqrshl.s32 q2, q8, q4", q2, q8, i32, -11, q4, i32, -4); + TESTINSN_bin_q("vqrshl.s32 q12, q11, q13", q12, q11, i32, -120, q13, i32, -9); + TESTINSN_bin_q("vqrshl.s32 q0, q1, q2", q0, q1, i32, 34, q2, i32, -7); + TESTINSN_bin_q("vqrshl.s32 q9, q10, q11", q9, q10, i32, (1 << 31) + 8, q11, i32, -1); + TESTINSN_bin_q("vqrshl.s32 q13, q3, q5", q13, q3, i32, (1 << 27), q5, i32, 3); + TESTINSN_bin_q("vqrshl.s16 q11, q10, q2", q11, q10, i32, (1 << 31), q2, i32, -31); + TESTINSN_bin_q("vqrshl.s16 q3, q14, q7", q3, q14, i32, (1 << 31), q7, i32, -3); + TESTINSN_bin_q("vqrshl.s16 q0, q11, q2", q0, q11, i32, (1 << 31) + 256, q2, i32, -1); + TESTINSN_bin_q("vqrshl.s16 q1, q2, q3", q1, q2, i32, (1 << 31) + 256, q3, i32, -31); + TESTINSN_bin_q("vqrshl.s16 q3, q4, q5", q3, q4, i32, (1 << 31) + (1 << 29), q5, i32, -13); + TESTINSN_bin_q("vqrshl.s16 q0, q15, q2", q0, q15, i32, 1, q2, i32, 30); + TESTINSN_bin_q("vqrshl.s8 q2, q7, q11", q2, q7, i32, 0xf, q11, i32, -1); + TESTINSN_bin_q("vqrshl.s16 q2, q7, q11", q2, q7, i32, 0xf, q11, i32, -1); + TESTINSN_bin_q("vqrshl.s32 q2, q7, q11", q2, q7, i32, 0xf, q11, i32, -1); + TESTINSN_bin_q("vqrshl.s8 q2, q7, q11", q2, q7, i32, -1, q11, i32, -1); + TESTINSN_bin_q("vqrshl.s16 q2, q7, q11", q2, q7, i32, -1, q11, i32, -1); + TESTINSN_bin_q("vqrshl.s32 q2, q7, q11", q2, q7, i32, -1, q11, i32, -1); + TESTINSN_bin_q("vqrshl.s8 q2, q7, q11", q2, q7, i32, -2, q11, i32, -1); + TESTINSN_bin_q("vqrshl.s16 q2, q7, q11", q2, q7, i32, -2, q11, i32, -1); + TESTINSN_bin_q("vqrshl.s32 q2, q7, q11", q2, q7, i32, -2, q11, i32, -1); + TESTINSN_bin_q("vqrshl.s8 q2, q7, q11", q2, q7, i32, -1, q11, i32, 0); + TESTINSN_bin_q("vqrshl.s16 q2, q7, q11", q2, q7, i32, -1, q11, i32, 0); + TESTINSN_bin_q("vqrshl.s32 q2, q7, q11", q2, q7, i32, -1, q11, i32, 0); + TESTINSN_bin_q("vqrshl.s8 q2, q7, q11", q2, q7, i32, -1, q11, i32, 40); + TESTINSN_bin_q("vqrshl.s8 q13, q1, q2", q13, q1, i32, -4, q2, i32, 30); + TESTINSN_bin_q("vqrshl.s8 q3, q7, q5", q3, q7, i32, (1 << 31) + 11, q5, i32, 3); + TESTINSN_bin_q("vqrshl.s8 q10, q11, q12", q10, q11, i32, (1 << 16), q12, i32, 16); + TESTINSN_bin_q("vqrshl.s8 q6, q7, q8", q6, q7, i32, (1 << 30), q8, i32, 2); + TESTINSN_bin_q("vqrshl.s8 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + TESTINSN_bin_q("vqrshl.u64 q0, q1, q2", q0, q1, i32, 1, q2, i32, 1); + TESTINSN_bin_q("vqrshl.u64 q3, q4, q5", q3, q4, i32, -127, q5, i32, 1); + TESTINSN_bin_q("vqrshl.u64 q3, q4, q5", q3, q4, i32, -127, q5, i32, -3); + TESTINSN_bin_q("vqrshl.u64 q0, q1, q2", q0, q1, i32, 16, q2, i32, 14); + TESTINSN_bin_q("vqrshl.u64 q13, q14, q15", q13, q14, i32, -17, q15, i32, -26); + TESTINSN_bin_q("vqrshl.u64 q7, q8, q2", q7, q8, i32, 24, q2, i32, -60); + TESTINSN_bin_q("vqrshl.u32 q3, q4, q15", q3, q4, i32, 127, q15, i32, -30); + TESTINSN_bin_q("vqrshl.u32 q2, q8, q4", q2, q8, i32, -11, q4, i32, -4); + TESTINSN_bin_q("vqrshl.u32 q12, q11, q13", q12, q11, i32, -120, q13, i32, -9); + TESTINSN_bin_q("vqrshl.u32 q0, q1, q2", q0, q1, i32, 34, q2, i32, -7); + TESTINSN_bin_q("vqrshl.u32 q9, q10, q11", q9, q10, i32, (1 << 31) + 8, q11, i32, -1); + TESTINSN_bin_q("vqrshl.u32 q13, q3, q5", q13, q3, i32, (1 << 27), q5, i32, 3); + TESTINSN_bin_q("vqrshl.u16 q11, q10, q2", q11, q10, i32, (1 << 31), q2, i32, -31); + TESTINSN_bin_q("vqrshl.u16 q3, q14, q7", q3, q14, i32, (1 << 31), q7, i32, -3); + TESTINSN_bin_q("vqrshl.u16 q0, q11, q2", q0, q11, i32, (1 << 31) + 256, q2, i32, -1); + TESTINSN_bin_q("vqrshl.u16 q1, q2, q3", q1, q2, i32, (1 << 31) + 256, q3, i32, -31); + TESTINSN_bin_q("vqrshl.u16 q3, q4, q5", q3, q4, i32, (1 << 31) + (1 << 29), q5, i32, -13); + TESTINSN_bin_q("vqrshl.u16 q0, q15, q2", q0, q15, i32, 1, q2, i32, 30); + TESTINSN_bin_q("vqrshl.u8 q2, q7, q11", q2, q7, i32, -1, q11, i32, 40); + TESTINSN_bin_q("vqrshl.u8 q2, q7, q11", q2, q7, i32, -1, q11, i32, -1); + TESTINSN_bin_q("vqrshl.u8 q2, q7, q11", q2, q7, i32, 0xf, q11, i32, -1); + TESTINSN_bin_q("vqrshl.u16 q2, q7, q11", q2, q7, i32, 0xf, q11, i32, -1); + TESTINSN_bin_q("vqrshl.u32 q2, q7, q11", q2, q7, i32, 0xf, q11, i32, -1); + TESTINSN_bin_q("vqrshl.u8 q2, q7, q11", q2, q7, i32, -2, q11, i32, -1); + TESTINSN_bin_q("vqrshl.u16 q2, q7, q11", q2, q7, i32, -2, q11, i32, -1); + TESTINSN_bin_q("vqrshl.u32 q2, q7, q11", q2, q7, i32, -2, q11, i32, -1); + TESTINSN_bin_q("vqrshl.u8 q2, q7, q11", q2, q7, i32, -1, q11, i32, 0); + TESTINSN_bin_q("vqrshl.u16 q2, q7, q11", q2, q7, i32, -1, q11, i32, 0); + TESTINSN_bin_q("vqrshl.u32 q2, q7, q11", q2, q7, i32, -1, q11, i32, 0); + TESTINSN_bin_q("vqrshl.u8 q13, q1, q2", q13, q1, i32, -4, q2, i32, 30); + TESTINSN_bin_q("vqrshl.u8 q3, q7, q5", q3, q7, i32, (1 << 31) + 11, q5, i32, 3); + TESTINSN_bin_q("vqrshl.u8 q10, q11, q12", q10, q11, i32, (1 << 16), q12, i32, 16); + TESTINSN_bin_q("vqrshl.u8 q6, q7, q8", q6, q7, i32, (1 << 30), q8, i32, 2); + TESTINSN_bin_q("vqrshl.u8 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + + printf("---- VRSHL (register) ----\n"); + TESTINSN_bin("vrshl.s64 q0, q1, q2", q0, q1, i32, 1, q2, i32, 1); + TESTINSN_bin("vrshl.s64 q3, q4, q5", q3, q4, i32, -127, q5, i32, 1); + TESTINSN_bin("vrshl.s64 q3, q4, q5", q3, q4, i32, -127, q5, i32, -3); + TESTINSN_bin("vrshl.s64 q0, q1, q2", q0, q1, i32, 16, q2, i32, 14); + TESTINSN_bin("vrshl.s64 q13, q14, q15", q13, q14, i32, -17, q15, i32, -26); + TESTINSN_bin("vrshl.s64 q7, q8, q2", q7, q8, i32, 24, q2, i32, -60); + TESTINSN_bin("vrshl.s32 q3, q4, q15", q3, q4, i32, 127, q15, i32, -30); + TESTINSN_bin("vrshl.s32 q2, q8, q4", q2, q8, i32, -11, q4, i32, -4); + TESTINSN_bin("vrshl.s32 q12, q11, q13", q12, q11, i32, -120, q13, i32, -9); + TESTINSN_bin("vrshl.s32 q0, q1, q2", q0, q1, i32, 34, q2, i32, -7); + TESTINSN_bin("vrshl.s32 q9, q10, q11", q9, q10, i32, (1 << 31) + 8, q11, i32, -1); + TESTINSN_bin("vrshl.s32 q13, q3, q5", q13, q3, i32, (1 << 27), q5, i32, 3); + TESTINSN_bin("vrshl.s16 q11, q10, q2", q11, q10, i32, (1 << 31), q2, i32, -31); + TESTINSN_bin("vrshl.s16 q3, q14, q7", q3, q14, i32, (1 << 31), q7, i32, -3); + TESTINSN_bin("vrshl.s16 q0, q11, q2", q0, q11, i32, (1 << 31) + 256, q2, i32, -1); + TESTINSN_bin("vrshl.s16 q1, q2, q3", q1, q2, i32, (1 << 31) + 256, q3, i32, -31); + TESTINSN_bin("vrshl.s16 q3, q4, q5", q3, q4, i32, (1 << 31) + (1 << 29), q5, i32, -13); + TESTINSN_bin("vrshl.s16 q0, q15, q2", q0, q15, i32, 1, q2, i32, 30); + TESTINSN_bin("vrshl.s8 q2, q7, q11", q2, q7, i32, 0xf, q11, i32, -1); + TESTINSN_bin("vrshl.s16 q2, q7, q11", q2, q7, i32, 0xf, q11, i32, -1); + TESTINSN_bin("vrshl.s32 q2, q7, q11", q2, q7, i32, 0xf, q11, i32, -1); + TESTINSN_bin("vrshl.s8 q2, q7, q11", q2, q7, i32, -1, q11, i32, -1); + TESTINSN_bin("vrshl.s16 q2, q7, q11", q2, q7, i32, -1, q11, i32, -1); + TESTINSN_bin("vrshl.s32 q2, q7, q11", q2, q7, i32, -1, q11, i32, -1); + TESTINSN_bin("vrshl.s8 q2, q7, q11", q2, q7, i32, -2, q11, i32, -1); + TESTINSN_bin("vrshl.s16 q2, q7, q11", q2, q7, i32, -2, q11, i32, -1); + TESTINSN_bin("vrshl.s32 q2, q7, q11", q2, q7, i32, -2, q11, i32, -1); + TESTINSN_bin("vrshl.s8 q2, q7, q11", q2, q7, i32, -1, q11, i32, 0); + TESTINSN_bin("vrshl.s16 q2, q7, q11", q2, q7, i32, -1, q11, i32, 0); + TESTINSN_bin("vrshl.s32 q2, q7, q11", q2, q7, i32, -1, q11, i32, 0); + TESTINSN_bin("vrshl.s8 q2, q7, q11", q2, q7, i32, -1, q11, i32, 40); + TESTINSN_bin("vrshl.s8 q13, q1, q2", q13, q1, i32, -4, q2, i32, 30); + TESTINSN_bin("vrshl.s8 q3, q7, q5", q3, q7, i32, (1 << 31) + 11, q5, i32, 3); + TESTINSN_bin("vrshl.s8 q10, q11, q12", q10, q11, i32, (1 << 16), q12, i32, 16); + TESTINSN_bin("vrshl.s8 q6, q7, q8", q6, q7, i32, (1 << 30), q8, i32, 2); + TESTINSN_bin("vrshl.s8 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + TESTINSN_bin("vrshl.u64 q0, q1, q2", q0, q1, i32, 1, q2, i32, 1); + TESTINSN_bin("vrshl.u64 q3, q4, q5", q3, q4, i32, -127, q5, i32, 1); + TESTINSN_bin("vrshl.u64 q3, q4, q5", q3, q4, i32, -127, q5, i32, -3); + TESTINSN_bin("vrshl.u64 q0, q1, q2", q0, q1, i32, 16, q2, i32, 14); + TESTINSN_bin("vrshl.u64 q13, q14, q15", q13, q14, i32, -17, q15, i32, -26); + TESTINSN_bin("vrshl.u64 q7, q8, q2", q7, q8, i32, 24, q2, i32, -60); + TESTINSN_bin("vrshl.u32 q3, q4, q15", q3, q4, i32, 127, q15, i32, -30); + TESTINSN_bin("vrshl.u32 q2, q8, q4", q2, q8, i32, -11, q4, i32, -4); + TESTINSN_bin("vrshl.u32 q12, q11, q13", q12, q11, i32, -120, q13, i32, -9); + TESTINSN_bin("vrshl.u32 q0, q1, q2", q0, q1, i32, 34, q2, i32, -7); + TESTINSN_bin("vrshl.u32 q9, q10, q11", q9, q10, i32, (1 << 31) + 8, q11, i32, -1); + TESTINSN_bin("vrshl.u32 q13, q3, q5", q13, q3, i32, (1 << 27), q5, i32, 3); + TESTINSN_bin("vrshl.u16 q11, q10, q2", q11, q10, i32, (1 << 31), q2, i32, -31); + TESTINSN_bin("vrshl.u16 q3, q14, q7", q3, q14, i32, (1 << 31), q7, i32, -3); + TESTINSN_bin("vrshl.u16 q0, q11, q2", q0, q11, i32, (1 << 31) + 256, q2, i32, -1); + TESTINSN_bin("vrshl.u16 q1, q2, q3", q1, q2, i32, (1 << 31) + 256, q3, i32, -31); + TESTINSN_bin("vrshl.u16 q3, q4, q5", q3, q4, i32, (1 << 31) + (1 << 29), q5, i32, -13); + TESTINSN_bin("vrshl.u16 q0, q15, q2", q0, q15, i32, 1, q2, i32, 30); + TESTINSN_bin("vrshl.u8 q2, q7, q11", q2, q7, i32, -1, q11, i32, 40); + TESTINSN_bin("vrshl.u8 q2, q7, q11", q2, q7, i32, -1, q11, i32, -1); + TESTINSN_bin("vrshl.u8 q2, q7, q11", q2, q7, i32, 0xf, q11, i32, -1); + TESTINSN_bin("vrshl.u16 q2, q7, q11", q2, q7, i32, 0xf, q11, i32, -1); + TESTINSN_bin("vrshl.u32 q2, q7, q11", q2, q7, i32, 0xf, q11, i32, -1); + TESTINSN_bin("vrshl.u8 q2, q7, q11", q2, q7, i32, -1, q11, i32, -1); + TESTINSN_bin("vrshl.u16 q2, q7, q11", q2, q7, i32, -1, q11, i32, -1); + TESTINSN_bin("vrshl.u32 q2, q7, q11", q2, q7, i32, -1, q11, i32, -1); + TESTINSN_bin("vrshl.u8 q2, q7, q11", q2, q7, i32, -2, q11, i32, -1); + TESTINSN_bin("vrshl.u16 q2, q7, q11", q2, q7, i32, -2, q11, i32, -1); + TESTINSN_bin("vrshl.u32 q2, q7, q11", q2, q7, i32, -2, q11, i32, -1); + TESTINSN_bin("vrshl.u8 q13, q1, q2", q13, q1, i32, -4, q2, i32, 30); + TESTINSN_bin("vrshl.u8 q3, q7, q5", q3, q7, i32, (1 << 31) + 11, q5, i32, 3); + TESTINSN_bin("vrshl.u8 q10, q11, q12", q10, q11, i32, (1 << 16), q12, i32, 16); + TESTINSN_bin("vrshl.u8 q6, q7, q8", q6, q7, i32, (1 << 30), q8, i32, 2); + TESTINSN_bin("vrshl.u8 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + + printf("---- VMAX (integer) ----\n"); + TESTINSN_bin("vmax.s32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 121); + TESTINSN_bin("vmax.s32 q0, q1, q2", q0, q1, i32, 250, q2, i32, 121); + TESTINSN_bin("vmax.s32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 140); + TESTINSN_bin("vmax.s16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vmax.s8 q0, q1, q2", q0, q1, i32, 120, q2, i32, 120); + TESTINSN_bin("vmax.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 1, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 1, q5, i32, (1 << 31) + 3); + TESTINSN_bin("vmax.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vmax.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vmax.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 4, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.s32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + TESTINSN_bin("vmax.u32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 120); + TESTINSN_bin("vmax.u32 q0, q1, q2", q0, q1, i32, 250, q2, i32, 120); + TESTINSN_bin("vmax.u32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 140); + TESTINSN_bin("vmax.u16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vmax.u8 q0, q1, q2", q0, q1, i32, 120, q2, i32, 120); + TESTINSN_bin("vmax.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vmax.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vmax.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vmax.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.u32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + + printf("---- VMIN (integer) ----\n"); + TESTINSN_bin("vmin.s32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 121); + TESTINSN_bin("vmin.s32 q0, q1, q2", q0, q1, i32, 250, q2, i32, 121); + TESTINSN_bin("vmin.s32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vmin.s16 q0, q1, q2", q0, q1, i32, 120, q2, i32, 120); + TESTINSN_bin("vmin.s8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 140); + TESTINSN_bin("vmin.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 1, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 1, q5, i32, (1 << 31) + 3); + TESTINSN_bin("vmin.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vmin.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vmin.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 4, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.s32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + TESTINSN_bin("vmin.u32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 120); + TESTINSN_bin("vmin.u32 q0, q1, q2", q0, q1, i32, 250, q2, i32, 120); + TESTINSN_bin("vmin.u32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vmin.u16 q0, q1, q2", q0, q1, i32, 120, q2, i32, 120); + TESTINSN_bin("vmin.u8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 140); + TESTINSN_bin("vmin.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vmin.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vmin.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vmin.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.u32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + + printf("---- VABD ----\n"); + TESTINSN_bin("vabd.s32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 120); + TESTINSN_bin("vabd.s32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 121); + TESTINSN_bin("vabd.s32 q0, q1, q2", q0, q1, i32, 140, q2, i32, -120); + TESTINSN_bin("vabd.s16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vabd.s8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vabd.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 1, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.s8 q5, q7, q5", q5, q7, i32, -255, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 1, q5, i32, -200); + TESTINSN_bin("vabd.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 1, q5, i32, (1 << 31) + 3); + TESTINSN_bin("vabd.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vabd.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vabd.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 4, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.s32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + TESTINSN_bin("vabd.u32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 120); + TESTINSN_bin("vabd.u32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vabd.u16 q0, q1, q2", q0, q1, i32, -140, q2, i32, 120); + TESTINSN_bin("vabd.u8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vabd.u8 q5, q7, q5", q5, q7, i32, -255, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.u8 q5, q7, q5", q5, q7, i32, (1 << 31) + 1, q5, i32, -200); + TESTINSN_bin("vabd.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vabd.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vabd.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vabd.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.u32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + + printf("---- VABA ----\n"); + TESTINSN_bin("vaba.s32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 120); + TESTINSN_bin("vaba.s32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 121); + TESTINSN_bin("vaba.s32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vaba.s16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vaba.s8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vaba.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 1, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.s8 q5, q7, q5", q5, q7, i32, -255, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 1, q5, i32, -200); + TESTINSN_bin("vaba.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 1, q5, i32, (1 << 31) + 3); + TESTINSN_bin("vaba.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vaba.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vaba.s8 q5, q7, q5", q5, q7, i32, (1 << 31) + 4, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.s16 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.s32 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.s32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + TESTINSN_bin("vaba.u32 q0, q1, q2", q0, q1, i32, 25, q2, i32, 120); + TESTINSN_bin("vaba.u32 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vaba.u16 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vaba.u8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vaba.u8 q5, q7, q5", q5, q7, i32, -255, q5, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.u8 q5, q7, q5", q5, q7, i32, (1 << 31) + 1, q5, i32, -200); + TESTINSN_bin("vaba.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vaba.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vaba.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 3); + TESTINSN_bin("vaba.u8 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.u16 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.u32 q0, q1, q2", q0, q1, i32, (1 << 31) + 4, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.u32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + + printf("---- VABAL ----\n"); + TESTINSN_bin("vabal.s32 q0, d1, d2", q0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vabal.s32 q0, d1, d2", q0, d1, i32, 25, d2, i32, 121); + TESTINSN_bin("vabal.s32 q0, d1, d2", q0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vabal.s16 q0, d1, d2", q0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vabal.s8 q0, d1, d2", q0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vabal.s8 q5, d7, d5", q5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vabal.s8 q5, d7, d5", q5, d7, i32, -255, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vabal.s8 q5, d7, d5", q5, d7, i32, (1 << 31) + 1, d5, i32, -200); + TESTINSN_bin("vabal.s16 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabal.s32 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabal.s8 q5, d7, d5", q5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 3); + TESTINSN_bin("vabal.s16 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vabal.s32 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vabal.s8 q5, d7, d5", q5, d7, i32, (1 << 31) + 4, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vabal.s16 q0, d1, d2", q0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabal.s32 q0, d1, d2", q0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabal.s32 q10, d31, d12", q10, d31, i32, 24, d12, i32, 120); + TESTINSN_bin("vabal.u32 q0, d1, d2", q0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vabal.u32 q0, d1, d2", q0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vabal.u16 q0, d1, d2", q0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vabal.u8 q0, d1, d2", q0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vabal.u8 q5, d7, d5", q5, d7, i32, -255, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vabal.u8 q5, d7, d5", q5, d7, i32, (1 << 31) + 1, d5, i32, -200); + TESTINSN_bin("vabal.u8 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabal.u16 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabal.u32 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabal.u8 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vabal.u16 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vabal.u32 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vabal.u8 q0, d1, d2", q0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabal.u16 q0, d1, d2", q0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabal.u32 q0, d1, d2", q0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabal.u32 q10, d11, d12", q10, d11, i32, 24, d12, i32, 120); + + printf("---- VABDL ----\n"); + TESTINSN_bin("vabdl.s32 q0, d1, d2", q0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vabdl.s32 q0, d1, d2", q0, d1, i32, 25, d2, i32, 121); + TESTINSN_bin("vabdl.s32 q0, d1, d2", q0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vabdl.s16 q0, d1, d2", q0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vabdl.s8 q0, d1, d2", q0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vabdl.s8 q5, d7, d5", q5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vabdl.s8 q5, d7, d5", q5, d7, i32, -255, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vabdl.s8 q5, d7, d5", q5, d7, i32, (1 << 31) + 1, d5, i32, -200); + TESTINSN_bin("vabdl.s16 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabdl.s32 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabdl.s8 q5, d7, d5", q5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 3); + TESTINSN_bin("vabdl.s16 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vabdl.s32 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vabdl.s8 q5, d7, d5", q5, d7, i32, (1 << 31) + 4, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vabdl.s16 q0, d1, d2", q0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabdl.s32 q0, d1, d2", q0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabdl.s32 q10, d31, d12", q10, d31, i32, 24, d12, i32, 120); + TESTINSN_bin("vabdl.u32 q0, d1, d2", q0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vabdl.u32 q0, d1, d2", q0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vabdl.u16 q0, d1, d2", q0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vabdl.u8 q0, d1, d2", q0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vabdl.u8 q5, d7, d5", q5, d7, i32, -255, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vabdl.u8 q5, d7, d5", q5, d7, i32, (1 << 31) + 1, d5, i32, -200); + TESTINSN_bin("vabdl.u8 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabdl.u16 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabdl.u32 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabdl.u8 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vabdl.u16 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vabdl.u32 q0, d1, d2", q0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vabdl.u8 q0, d1, d2", q0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabdl.u16 q0, d1, d2", q0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabdl.u32 q0, d1, d2", q0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabdl.u32 q10, d11, d12", q10, d11, i32, 24, d12, i32, 120); + + printf("---- VTST ----\n"); + TESTINSN_bin("vtst.32 q0, q1, q2", q0, q1, i32, 24, q2, i32, 120); + TESTINSN_bin("vtst.32 q3, q4, q5", q3, q4, i32, 140, q5, i32, 120); + TESTINSN_bin("vtst.16 q6, q7, q8", q6, q7, i32, 120, q8, i32, 120); + TESTINSN_bin("vtst.8 q9, q10, q12", q9, q10, i32, 140, q12, i32, 120); + TESTINSN_bin("vtst.8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vtst.16 q0, q1, q2", q0, q1, i32, (1 << 14) + 1, q2, i32, (1 << 14) + 1); + TESTINSN_bin("vtst.32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vtst.8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, 2); + TESTINSN_bin("vtst.16 q0, q1, q2", q0, q1, i32, (1 << 14) + 1, q2, i32, (1 << 14) + 1); + TESTINSN_bin("vtst.32 q0, q1, q2", q0, q1, i32, 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vtst.32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + + printf("---- VCEQ ----\n"); + TESTINSN_bin("vceq.i32 q0, q1, q2", q0, q1, i32, 24, q2, i32, 120); + TESTINSN_bin("vceq.i32 q3, q4, q5", q3, q4, i32, 140, q5, i32, 120); + TESTINSN_bin("vceq.i16 q6, q7, q8", q6, q7, i32, 120, q8, i32, 120); + TESTINSN_bin("vceq.i8 q9, q10, q12", q9, q10, i32, 140, q12, i32, 120); + TESTINSN_bin("vceq.i8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vceq.i16 q0, q1, q2", q0, q1, i32, (1 << 14) + 1, q2, i32, (1 << 14) + 1); + TESTINSN_bin("vceq.i32 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vceq.i8 q0, q1, q2", q0, q1, i32, (1 << 31) + 1, q2, i32, 2); + TESTINSN_bin("vceq.i16 q0, q1, q2", q0, q1, i32, 1, q2, i32, (1 << 14) + 1); + TESTINSN_bin("vceq.i32 q0, q1, q2", q0, q1, i32, 1, q2, i32, (1 << 31) + 2); + TESTINSN_bin("vceq.i32 q10, q11, q12", q10, q11, i32, 24, q12, i32, 120); + + printf("---- VMLA ----\n"); + TESTINSN_bin("vmla.i32 q0, q1, q2", q0, q1, i32, -24, q2, i32, 120); + TESTINSN_bin("vmla.i32 q6, q7, q8", q6, q7, i32, 140, q8, i32, 120); + TESTINSN_bin("vmla.i16 q9, q11, q12", q9, q11, i32, 0x140, q12, i32, 0x120); + TESTINSN_bin("vmla.i16 q7, q1, q2", q7, q1, i32, 0x140, q2, i32, 0x120); + TESTINSN_bin("vmla.i8 q0, q1, q2", q0, q1, i32, 140, q2, i32, -120); + TESTINSN_bin("vmla.i8 q10, q11, q12", q10, q11, i32, (1 << 5) + 1, q12, i32, (1 << 3) + 2); + TESTINSN_bin("vmla.i16 q4, q5, q6", q4, q5, i32, (1 << 14) + 1, q6, i32, (1 << 13) + 2); + TESTINSN_bin("vmla.i16 q14, q5, q9", q14, q5, i32, (1 << 14) + 1, q9, i32, (1 << 13) + 2); + TESTINSN_bin("vmla.i32 q7, q8, q9", q7, q8, i32, (1 << 31) + 1, q9, i32, (1 << 31) + 2); + TESTINSN_bin("vmla.i8 q10, q13, q12", q10, q13, i32, (1 << 5) + 1, q12, i32, (1 << 3) + 2); + TESTINSN_bin("vmla.i16 q4, q5, q6", q4, q5, i32, (1 << 28) + 0xfe, q6, i32, (1 << 13) + 2); + TESTINSN_bin("vmla.i32 q7, q8, q9", q7, q8, i32, (1 << 31) + 1, q9, i32, (1 << 31) + 2); + TESTINSN_bin("vmla.i32 q10, q11, q15", q10, q11, i32, 24, q15, i32, -120); + + printf("---- VMLS ----\n"); + TESTINSN_bin("vmls.i32 q0, q1, q2", q0, q1, i32, -24, q2, i32, 120); + TESTINSN_bin("vmls.i32 q6, q7, q8", q6, q7, i32, 140, q8, i32, -120); + TESTINSN_bin("vmls.i16 q9, q11, q12", q9, q11, i32, 0x140, q12, i32, 0x120); + TESTINSN_bin("vmls.i8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vmls.i8 q10, q11, q12", q10, q11, i32, (1 << 5) + 1, q12, i32, (1 << 3) + 2); + TESTINSN_bin("vmls.i16 q4, q5, q6", q4, q5, i32, (1 << 14) + 1, q6, i32, (1 << 13) + 2); + TESTINSN_bin("vmls.i32 q7, q8, q9", q7, q8, i32, (1 << 31) + 1, q9, i32, (1 << 31) + 2); + TESTINSN_bin("vmls.i8 q10, q13, q12", q10, q13, i32, (1 << 5) + 1, q12, i32, (1 << 3) + 2); + TESTINSN_bin("vmls.i16 q4, q5, q6", q4, q5, i32, (1 << 28) + 0xfe, q6, i32, (1 << 13) + 2); + TESTINSN_bin("vmls.i32 q7, q8, q9", q7, q8, i32, (1 << 31) + 1, q9, i32, (1 << 31) + 2); + TESTINSN_bin("vmls.i32 q10, q11, q15", q10, q11, i32, -24, q15, i32, 120); + + printf("---- VMUL ----\n"); + TESTINSN_bin("vmul.i32 q0, q1, q2", q0, q1, i32, 24, q2, i32, 120); + TESTINSN_bin("vmul.i32 q6, q7, q8", q6, q7, i32, 140, q8, i32, -120); + TESTINSN_bin("vmul.i16 q9, q11, q12", q9, q11, i32, 0x140, q12, i32, 0x120); + TESTINSN_bin("vmul.i8 q0, q1, q2", q0, q1, i32, 140, q2, i32, 120); + TESTINSN_bin("vmul.i8 q10, q11, q12", q10, q11, i32, (1 << 5) + 1, q12, i32, (1 << 3) + 2); + TESTINSN_bin("vmul.i16 q4, q5, q6", q4, q5, i32, (1 << 14) + 1, q6, i32, (1 << 13) + 2); + TESTINSN_bin("vmul.i32 q7, q8, q9", q7, q8, i32, (1 << 31) + 1, q9, i32, (1 << 31) + 2); + TESTINSN_bin("vmul.i8 q10, q11, q12", q10, q11, i32, (1 << 25) + 0xfeb2, q12, i32, (1 << 13) + 0xdf); + TESTINSN_bin("vmul.i16 q4, q5, q6", q4, q5, i32, (1 << 14) - 0xabcd, q6, i32, (1 << 13) + 2); + TESTINSN_bin("vmul.i32 q7, q8, q9", q7, q8, i32, (1 << 31), q9, i32, 12); + TESTINSN_bin("vmul.i8 q10, q13, q12", q10, q13, i32, (1 << 5) + 1, q12, i32, (1 << 3) + 2); + TESTINSN_bin("vmul.i16 q4, q5, q6", q4, q5, i32, (1 << 28) + 0xfe, q6, i32, (1 << 13) + 2); + TESTINSN_bin("vmul.i32 q7, q8, q9", q7, q8, i32, (1 << 31) + 1, q9, i32, (1 << 31) + 2); + TESTINSN_bin("vmul.i32 q10, q11, q15", q10, q11, i32, 24, q15, i32, 120); + TESTINSN_bin("vmul.p8 q0, q1, q2", q0, q1, i32, 3, q2, i32, 3); + TESTINSN_bin("vmul.p8 q0, q1, q2", q0, q1, i32, 12, q2, i8, 0x0f); + + printf("---- VMUL (by scalar) ----\n"); + TESTINSN_bin("vmul.i32 q0, q1, d4[0]", q0, q1, i32, 24, d4, i32, 120); + TESTINSN_bin("vmul.i32 q15, q8, d7[1]", q15, q8, i32, 140, d4, i32, -120); + TESTINSN_bin("vmul.i16 q10, q9, d7[3]", q10, q9, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin("vmul.i16 q4, q5, d6[2]", q4, q5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmul.i32 q4, q8, d15[1]", q4, q8, i32, (1 << 31) + 1, d15, i32, (1 << 31) + 2); + TESTINSN_bin("vmul.i16 q4, q5, d6[0]", q4, q5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmul.i32 q7, q8, d1[1]", q7, q8, i32, (1 << 31), d1, i16, 12); + TESTINSN_bin("vmul.i16 q4, q5, d6[0]", q4, q5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmul.i32 q7, q8, d1[1]", q7, q8, i32, (1 << 31) + 1, d1, i32, (1 << 31) + 2); + + printf("---- VMLA (by scalar) ----\n"); + TESTINSN_bin("vmla.i32 q0, q1, d4[0]", q0, q1, i32, 24, d4, i32, 120); + TESTINSN_bin("vmla.i32 q15, q8, d7[1]", q15, q8, i32, 140, d7, i32, -120); + TESTINSN_bin("vmla.i16 q10, q9, d7[3]", q10, q9, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin("vmla.i16 q4, q5, d6[2]", q4, q5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmla.i32 q4, q8, d15[1]", q4, q8, i32, (1 << 31) + 1, d15, i32, (1 << 31) + 2); + TESTINSN_bin("vmla.i16 q4, q5, d6[0]", q4, q5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmla.i32 q7, q8, d1[1]", q7, q8, i32, (1 << 31), d1, i16, 12); + TESTINSN_bin("vmla.i16 q4, q5, d6[0]", q4, q5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmla.i32 q7, q8, d1[1]", q7, q8, i32, (1 << 31) + 1, d1, i32, (1 << 31) + 2); + + printf("---- VMLS (by scalar) ----\n"); + TESTINSN_bin("vmls.i32 q0, q1, d4[0]", q0, q1, i32, 24, d4, i32, 120); + TESTINSN_bin("vmls.i32 q15, q8, d7[1]", q15, q8, i32, 140, d7, i32, -120); + TESTINSN_bin("vmls.i16 q10, q9, d7[3]", q10, q9, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin("vmls.i16 q4, q5, d6[2]", q4, q5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmls.i32 q4, q8, d15[1]", q4, q8, i32, (1 << 31) + 1, d15, i32, (1 << 31) + 2); + TESTINSN_bin("vmls.i16 q4, q5, d6[0]", q4, q5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmls.i32 q7, q8, d1[1]", q7, q8, i32, (1 << 31), d1, i16, 12); + TESTINSN_bin("vmls.i16 q4, q5, d6[0]", q4, q5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmls.i32 q7, q8, d1[1]", q7, q8, i32, (1 << 31) + 1, d1, i32, (1 << 31) + 2); + + printf("---- VMULL (by scalar) ----\n"); + TESTINSN_bin("vmull.s32 q0, d2, d4[0]", q0, d2, i32, 24, d4, i32, 120); + TESTINSN_bin("vmull.s32 q15, d8, d7[1]", q15, d8, i32, 140, d7, i32, -120); + TESTINSN_bin("vmull.s16 q10, d31, d7[3]", q10, d31, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin("vmull.s16 q4, d5, d6[2]", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmull.s32 q4, d7, d15[1]", q4, d7, i32, (1 << 31) + 1, d15, i32, (1 << 31) + 2); + TESTINSN_bin("vmull.s16 q4, d5, d6[0]", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmull.s32 q7, d7, d1[1]", q7, d7, i32, (1 << 31), d1, i16, 12); + TESTINSN_bin("vmull.s16 q4, d5, d6[0]", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmull.s32 q7, d7, d1[1]", q7, d7, i32, (1 << 31) + 1, d1, i32, (1 << 31) + 2); + TESTINSN_bin("vmull.u32 q0, d1, d4[0]", q0, d1, i32, 24, d4, i32, 120); + TESTINSN_bin("vmull.u32 q15, d8, d7[1]", q15, d8, i32, 140, d4, i32, -120); + TESTINSN_bin("vmull.u16 q10, d31, d7[3]", q10, d31, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin("vmull.u16 q4, d5, d6[2]", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmull.u32 q4, d7, d15[1]", q4, d7, i32, (1 << 31) + 1, d15, i32, (1 << 31) + 2); + TESTINSN_bin("vmull.u16 q4, d5, d6[0]", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmull.u32 q7, d7, d1[1]", q7, d7, i32, (1 << 31), d1, i16, 12); + TESTINSN_bin("vmull.u16 q4, d5, d6[0]", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmull.u32 q7, d7, d1[1]", q7, d7, i32, (1 << 31) + 1, d1, i32, (1 << 31) + 2); + + printf("---- VMLAL (by scalar) ----\n"); + TESTINSN_bin("vmlal.s32 q0, d2, d4[0]", q0, d2, i32, 24, d4, i32, 120); + TESTINSN_bin("vmlal.s32 q15, d8, d7[1]", q15, d8, i32, 140, d7, i32, -120); + TESTINSN_bin("vmlal.s16 q10, d31, d7[3]", q10, d31, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin("vmlal.s16 q4, d5, d6[2]", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlal.s32 q4, d7, d15[1]", q4, d7, i32, (1 << 31) + 1, d15, i32, (1 << 31) + 2); + TESTINSN_bin("vmlal.s16 q4, d5, d6[0]", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlal.s32 q7, d7, d1[1]", q7, d7, i32, (1 << 31), d1, i16, 12); + TESTINSN_bin("vmlal.s16 q4, d5, d6[0]", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlal.s32 q7, d7, d1[1]", q7, d7, i32, (1 << 31) + 1, d1, i32, (1 << 31) + 2); + TESTINSN_bin("vmlal.u32 q0, d1, d4[0]", q0, d1, i32, 24, d4, i32, 120); + TESTINSN_bin("vmlal.u32 q15, d8, d7[1]", q15, d8, i32, 140, d4, i32, -120); + TESTINSN_bin("vmlal.u16 q10, d31, d7[3]", q10, d31, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin("vmlal.u16 q4, d5, d6[2]", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlal.u32 q4, d7, d15[1]", q4, d7, i32, (1 << 31) + 1, d15, i32, (1 << 31) + 2); + TESTINSN_bin("vmlal.u16 q4, d5, d6[0]", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlal.u32 q7, d7, d1[1]", q7, d7, i32, (1 << 31), d1, i16, 12); + TESTINSN_bin("vmlal.u16 q4, d5, d6[0]", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlal.u32 q7, d7, d1[1]", q7, d7, i32, (1 << 31) + 1, d1, i32, (1 << 31) + 2); + + printf("---- VMLSL (by scalar) ----\n"); + TESTINSN_bin("vmlsl.s32 q0, d2, d4[0]", q0, d2, i32, 24, d4, i32, 120); + TESTINSN_bin("vmlsl.s32 q15, d8, d7[1]", q15, d8, i32, 140, d7, i32, -120); + TESTINSN_bin("vmlsl.s16 q10, d31, d7[3]", q10, d31, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin("vmlsl.s16 q4, d5, d6[2]", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlsl.s32 q4, d7, d15[1]", q4, d7, i32, (1 << 31) + 1, d15, i32, (1 << 31) + 2); + TESTINSN_bin("vmlsl.s16 q4, d5, d6[0]", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlsl.s32 q7, d7, d1[1]", q7, d7, i32, (1 << 31), d1, i16, 12); + TESTINSN_bin("vmlsl.s16 q4, d5, d6[0]", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlsl.s32 q7, d7, d1[1]", q7, d7, i32, (1 << 31) + 1, d1, i32, (1 << 31) + 2); + TESTINSN_bin("vmlsl.u32 q0, d1, d4[0]", q0, d1, i32, 24, d4, i32, 120); + TESTINSN_bin("vmlsl.u32 q15, d8, d7[1]", q15, d8, i32, 140, d4, i32, -120); + TESTINSN_bin("vmlsl.u16 q10, d31, d7[3]", q10, d31, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin("vmlsl.u16 q4, d5, d6[2]", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlsl.u32 q4, d7, d15[1]", q4, d7, i32, (1 << 31) + 1, d15, i32, (1 << 31) + 2); + TESTINSN_bin("vmlsl.u16 q4, d5, d6[0]", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlsl.u32 q7, d7, d1[1]", q7, d7, i32, (1 << 31), d1, i16, 12); + TESTINSN_bin("vmlsl.u16 q4, d5, d6[0]", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlsl.u32 q7, d7, d1[1]", q7, d7, i32, (1 << 31) + 1, d1, i32, (1 << 31) + 2); + + printf("---- VRSHR ----\n"); + TESTINSN_un("vrshr.s8 q0, q1, #0", q0, q1, i32, -1); + TESTINSN_un("vrshr.s8 q0, q1, #1", q0, q1, i32, -1); + TESTINSN_un("vrshr.s16 q3, q4, #2", q3, q4, i32, -0x7c); + TESTINSN_un("vrshr.s32 q2, q5, #31", q2, q5, i32, -1); + TESTINSN_un("vrshr.s8 q6, q7, #7", q6, q7, i32, 0xffff); + TESTINSN_un("vrshr.s16 q8, q9, #12", q8, q9, i32, -10); + TESTINSN_un("vrshr.s32 q10, q11, #5", q10, q11, i32, 10234); + TESTINSN_un("vrshr.u8 q12, q13, #1", q12, q13, i32, -1); + TESTINSN_un("vrshr.u16 q14, q15, #11", q14, q15, i32, -1); + TESTINSN_un("vrshr.u32 q10, q11, #9", q10, q11, i32, 1000); + TESTINSN_un("vrshr.u8 q7, q13, #7", q7, q13, i32, -1); + TESTINSN_un("vrshr.u16 q8, q1, #5", q8, q1, i32, 0xabcf); + TESTINSN_un("vrshr.u32 q12, q3, #15", q12, q3, i32, -0x1b0); + TESTINSN_un("vrshr.u64 q0, q1, #42", q0, q1, i32, -1); + TESTINSN_un("vrshr.s64 q6, q7, #12", q6, q7, i32, 0xfac); + TESTINSN_un("vrshr.u64 q8, q4, #9", q8, q4, i32, 13560); + TESTINSN_un("vrshr.s64 q9, q12, #11", q9, q12, i32, 98710); + + printf("---- VRSRA ----\n"); + TESTINSN_un("vrsra.s8 q0, q1, #1", q0, q1, i32, -1); + TESTINSN_un("vrsra.s16 q3, q4, #2", q3, q4, i32, -0x7c); + TESTINSN_un("vrsra.s32 q2, q5, #31", q2, q5, i32, -1); + TESTINSN_un("vrsra.s8 q6, q7, #7", q6, q7, i32, 0xffff); + TESTINSN_un("vrsra.s16 q8, q9, #12", q8, q9, i32, -10); + TESTINSN_un("vrsra.s32 q10, q11, #5", q10, q11, i32, 10234); + TESTINSN_un("vrsra.u8 q12, q13, #1", q12, q13, i32, -1); + TESTINSN_un("vrsra.u16 q14, q15, #11", q14, q15, i32, -1); + TESTINSN_un("vrsra.u32 q10, q11, #9", q10, q11, i32, 1000); + TESTINSN_un("vrsra.u8 q7, q13, #7", q7, q13, i32, -1); + TESTINSN_un("vrsra.u16 q8, q1, #5", q8, q1, i32, 0xabcf); + TESTINSN_un("vrsra.u32 q12, q3, #15", q12, q3, i32, -0x1b0); + TESTINSN_un("vrsra.u64 q0, q1, #42", q0, q1, i32, -1); + TESTINSN_un("vrsra.s64 q6, q7, #12", q6, q7, i32, 0xfac); + TESTINSN_un("vrsra.u64 q8, q4, #9", q8, q4, i32, 13560); + TESTINSN_un("vrsra.s64 q9, q12, #11", q9, q12, i32, 98710); + + printf("---- VSHR ----\n"); + TESTINSN_un("vshr.s8 q0, q1, #0", q0, q1, i32, -1); + TESTINSN_un("vshr.s8 q0, q1, #1", q0, q1, i32, -1); + TESTINSN_un("vshr.s16 q3, q4, #2", q3, q4, i32, -0x7c); + TESTINSN_un("vshr.s32 q2, q5, #31", q2, q5, i32, -1); + TESTINSN_un("vshr.s8 q6, q7, #7", q6, q7, i32, 0xffff); + TESTINSN_un("vshr.s16 q8, q9, #12", q8, q9, i32, -10); + TESTINSN_un("vshr.s32 q10, q11, #5", q10, q11, i32, 10234); + TESTINSN_un("vshr.u8 q12, q13, #1", q12, q13, i32, -1); + TESTINSN_un("vshr.u16 q14, q15, #11", q14, q15, i32, -1); + TESTINSN_un("vshr.u32 q10, q11, #9", q10, q11, i32, 1000); + TESTINSN_un("vshr.u8 q7, q13, #7", q7, q13, i32, -1); + TESTINSN_un("vshr.u16 q8, q1, #5", q8, q1, i32, 0xabcf); + TESTINSN_un("vshr.u32 q12, q3, #15", q12, q3, i32, -0x1b0); + TESTINSN_un("vshr.u64 q0, q1, #42", q0, q1, i32, -1); + TESTINSN_un("vshr.s64 q6, q7, #12", q6, q7, i32, 0xfac); + TESTINSN_un("vshr.u64 q8, q4, #9", q8, q4, i32, 13560); + TESTINSN_un("vshr.s64 q9, q12, #11", q9, q12, i32, 98710); + + printf("---- VSRA ----\n"); + TESTINSN_un("vsra.s8 q0, q1, #1", q0, q1, i32, -1); + TESTINSN_un("vsra.s16 q3, q4, #2", q3, q4, i32, -0x7c); + TESTINSN_un("vsra.s32 q2, q5, #31", q2, q5, i32, -1); + TESTINSN_un("vsra.s8 q6, q7, #7", q6, q7, i32, 0xffff); + TESTINSN_un("vsra.s16 q8, q9, #12", q8, q9, i32, -10); + TESTINSN_un("vsra.s32 q10, q11, #5", q10, q11, i32, 10234); + TESTINSN_un("vsra.u8 q12, q13, #1", q12, q13, i32, -1); + TESTINSN_un("vsra.u16 q14, q15, #11", q14, q15, i32, -1); + TESTINSN_un("vsra.u32 q10, q11, #9", q10, q11, i32, 1000); + TESTINSN_un("vsra.u8 q7, q13, #7", q7, q13, i32, -1); + TESTINSN_un("vsra.u16 q8, q1, #5", q8, q1, i32, 0xabcf); + TESTINSN_un("vsra.u32 q12, q3, #15", q12, q3, i32, -0x1b0); + TESTINSN_un("vsra.u64 q0, q1, #42", q0, q1, i32, -1); + TESTINSN_un("vsra.s64 q6, q7, #12", q6, q7, i32, 0xfac); + TESTINSN_un("vsra.u64 q8, q4, #9", q8, q4, i32, 13560); + TESTINSN_un("vsra.s64 q9, q12, #11", q9, q12, i32, 98710); + + printf("---- VSRI ----\n"); + TESTINSN_un("vsri.16 q0, q1, #1", q0, q1, i32, -1); + TESTINSN_un("vsri.16 q3, q4, #2", q3, q4, i32, -0x7c); + TESTINSN_un("vsri.32 q2, q5, #31", q2, q5, i32, -1); + TESTINSN_un("vsri.8 q6, q7, #7", q6, q7, i32, 0xffff); + TESTINSN_un("vsri.16 q8, q9, #12", q8, q9, i32, -10); + TESTINSN_un("vsri.32 q10, q11, #5", q10, q11, i32, 10234); + TESTINSN_un("vsri.8 q12, q13, #1", q12, q13, i32, -1); + TESTINSN_un("vsri.16 q14, q15, #11", q14, q15, i32, -1); + TESTINSN_un("vsri.32 q10, q11, #9", q10, q11, i32, 1000); + TESTINSN_un("vsri.8 q7, q13, #7", q7, q13, i32, -1); + TESTINSN_un("vsri.16 q8, q1, #5", q8, q1, i32, 0xabcf); + TESTINSN_un("vsri.32 q12, q3, #15", q12, q3, i32, -0x1b0); + TESTINSN_un("vsri.64 q0, q1, #42", q0, q1, i32, -1); + TESTINSN_un("vsri.64 q6, q7, #12", q6, q7, i32, 0xfac); + TESTINSN_un("vsri.64 q8, q4, #9", q8, q4, i32, 13560); + TESTINSN_un("vsri.64 q9, q12, #11", q9, q12, i32, 98710); + + printf("---- VMOVL ----\n"); + TESTINSN_un("vmovl.u32 q0, d2", q0, d2, i32, 0x42); + TESTINSN_un("vmovl.u16 q15, d2", q15, d2, i32, 0x42); + TESTINSN_un("vmovl.u8 q3, d31", q0, d31, i32, 0x42); + TESTINSN_un("vmovl.s32 q0, d2", q0, d2, i32, 0x42); + TESTINSN_un("vmovl.s16 q15, d2", q15, d2, i32, 0x42); + TESTINSN_un("vmovl.s8 q3, d31", q0, d31, i32, 0x42); + TESTINSN_un("vmovl.u32 q0, d2", q0, d2, i8, 0xed); + TESTINSN_un("vmovl.u16 q15, d2", q15, d2, i8, 0xed); + TESTINSN_un("vmovl.u8 q3, d31", q0, d31, i8, 0xed); + TESTINSN_un("vmovl.s32 q0, d2", q0, d2, i8, 0xed); + TESTINSN_un("vmovl.s16 q15, d2", q15, d2, i8, 0xed); + TESTINSN_un("vmovl.s8 q3, d31", q0, d31, i8, 0xed); + + printf("---- VABS ----\n"); + TESTINSN_un("vabs.s32 q0, q1", q0, q1, i32, 0x73); + TESTINSN_un("vabs.s16 q15, q4", q15, q4, i32, 0x73); + TESTINSN_un("vabs.s8 q8, q7", q8, q7, i32, 0x73); + TESTINSN_un("vabs.s32 q0, q1", q0, q1, i32, 0xfe); + TESTINSN_un("vabs.s16 q15, q4", q15, q4, i32, 0xef); + TESTINSN_un("vabs.s8 q8, q7", q8, q7, i32, 0xde); + TESTINSN_un("vabs.s32 q0, q1", q0, q1, i16, 0xfe0a); + TESTINSN_un("vabs.s16 q15, q4", q15, q4, i16, 0xef0b); + TESTINSN_un("vabs.s8 q8, q7", q8, q7, i16, 0xde0c); + + printf("---- VQABS ----\n"); + TESTINSN_un_q("vqabs.s32 q0, q1", q0, q1, i32, 0x73); + TESTINSN_un_q("vqabs.s32 q0, q1", q0, q1, i32, 1 << 31); + TESTINSN_un_q("vqabs.s16 q0, q1", q0, q1, i32, 1 << 31); + TESTINSN_un_q("vqabs.s8 q0, q1", q0, q1, i32, 1 << 31); + TESTINSN_un_q("vqabs.s16 q15, q4", q15, q4, i32, 0x73); + TESTINSN_un_q("vqabs.s8 q8, q7", q8, q7, i32, 0x73); + TESTINSN_un_q("vqabs.s32 q0, q1", q0, q1, i32, 0xfe); + TESTINSN_un_q("vqabs.s16 q15, q4", q15, q4, i32, 0xef); + TESTINSN_un_q("vqabs.s8 q8, q7", q8, q7, i32, 0xde); + TESTINSN_un_q("vqabs.s32 q0, q1", q0, q1, i16, 0xfe0a); + TESTINSN_un_q("vqabs.s16 q15, q4", q15, q4, i16, 0xef0b); + TESTINSN_un_q("vqabs.s8 q8, q7", q8, q7, i16, 0xde0c); + + printf("---- VADDW ----\n"); + TESTINSN_bin("vaddw.s32 q0, q1, d4", q0, q1, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vaddw.s16 q15, q14, d4", q15, q14, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vaddw.s8 q0, q1, d31", q0, q1, i32, 0x73, d31, i8, 0x12); + TESTINSN_bin("vaddw.u32 q0, q1, d4", q0, q1, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vaddw.u16 q0, q1, d4", q0, q1, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vaddw.u8 q0, q1, d4", q0, q1, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vaddw.s32 q0, q1, d4", q0, q1, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vaddw.s16 q15, q14, d4", q15, q14, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vaddw.s8 q0, q1, d31", q0, q1, i32, 0x73, d31, i8, 0xe2); + TESTINSN_bin("vaddw.u32 q0, q1, d4", q0, q1, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vaddw.u16 q0, q1, d4", q0, q1, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vaddw.u8 q0, q1, d4", q0, q1, i32, 0x73, d4, i8, 0xe2); + + printf("---- VADDL ----\n"); + TESTINSN_bin("vaddl.s32 q0, d2, d4", q0, d2, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vaddl.s16 q15, d14, d4", q15, d14, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vaddl.s8 q0, d2, d31", q0, d2, i32, 0x73, d31, i8, 0x12); + TESTINSN_bin("vaddl.u32 q0, d2, d4", q0, d2, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vaddl.u16 q0, d2, d4", q0, d2, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vaddl.u8 q0, d2, d4", q0, d2, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vaddl.s32 q0, d2, d4", q0, d2, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vaddl.s16 q15, d14, d4", q15, d14, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vaddl.s8 q0, d2, d31", q0, d2, i32, 0x73, d31, i8, 0xe2); + TESTINSN_bin("vaddl.u32 q0, d2, d4", q0, d2, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vaddl.u16 q0, d2, d4", q0, d2, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vaddl.u8 q0, d2, d4", q0, d2, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vaddl.s32 q0, d2, d4", q0, d2, i8, 0x93, d4, i8, 0x12); + TESTINSN_bin("vaddl.s16 q15, d14, d4", q15, d14, i8, 0x93, d4, i8, 0x12); + TESTINSN_bin("vaddl.s8 q0, d2, d31", q0, d2, i8, 0x99, d31, i8, 0x12); + TESTINSN_bin("vaddl.u32 q0, d2, d4", q0, d2, i8, 0x93, d4, i8, 0x12); + TESTINSN_bin("vaddl.u16 q0, d2, d4", q0, d2, i8, 0x93, d4, i8, 0x12); + TESTINSN_bin("vaddl.u8 q0, d2, d4", q0, d2, i8, 0x93, d4, i8, 0x12); + TESTINSN_bin("vaddl.s32 q0, d2, d4", q0, d2, i8, 0x93, d4, i8, 0xe2); + TESTINSN_bin("vaddl.s16 q15, d14, d4", q15, d14, i8, 0x93, d4, i8, 0xe2); + TESTINSN_bin("vaddl.s8 q0, d2, d31", q0, d2, i8, 0x93, d31, i8, 0xe2); + TESTINSN_bin("vaddl.u32 q0, d2, d4", q0, d2, i8, 0x93, d4, i8, 0xe2); + TESTINSN_bin("vaddl.u16 q0, d2, d4", q0, d2, i8, 0x93, d4, i8, 0xe2); + TESTINSN_bin("vaddl.u8 q0, d2, d4", q0, d2, i8, 0x93, d4, i8, 0xe2); + + printf("---- VSUBW ----\n"); + TESTINSN_bin("vsubw.s32 q0, q1, d4", q0, q1, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vsubw.s16 q15, q14, d4", q15, q14, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vsubw.s8 q0, q1, d31", q0, q1, i32, 0x73, d31, i8, 0x12); + TESTINSN_bin("vsubw.u32 q0, q1, d4", q0, q1, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vsubw.u16 q0, q1, d4", q0, q1, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vsubw.u8 q0, q1, d4", q0, q1, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vsubw.s32 q0, q1, d4", q0, q1, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vsubw.s16 q15, q14, d4", q15, q14, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vsubw.s8 q0, q1, d31", q0, q1, i32, 0x73, d31, i8, 0xe2); + TESTINSN_bin("vsubw.u32 q0, q1, d4", q0, q1, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vsubw.u16 q0, q1, d4", q0, q1, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vsubw.u8 q0, q1, d4", q0, q1, i32, 0x73, d4, i8, 0xe2); + + printf("---- VSUBL ----\n"); + TESTINSN_bin("vsubl.s32 q0, d2, d4", q0, d2, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vsubl.s16 q15, d14, d4", q15, d14, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vsubl.s8 q0, d2, d31", q0, d2, i32, 0x73, d31, i8, 0x12); + TESTINSN_bin("vsubl.u32 q0, d2, d4", q0, d2, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vsubl.u16 q0, d2, d4", q0, d2, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vsubl.u8 q0, d2, d4", q0, d2, i32, 0x73, d4, i8, 0x12); + TESTINSN_bin("vsubl.s32 q0, d2, d4", q0, d2, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vsubl.s16 q15, d14, d4", q15, d14, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vsubl.s8 q0, d2, d31", q0, d2, i32, 0x73, d31, i8, 0xe2); + TESTINSN_bin("vsubl.u32 q0, d2, d4", q0, d2, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vsubl.u16 q0, d2, d4", q0, d2, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vsubl.u8 q0, d2, d4", q0, d2, i32, 0x73, d4, i8, 0xe2); + TESTINSN_bin("vsubl.s32 q0, d2, d4", q0, d2, i8, 0x93, d4, i8, 0x12); + TESTINSN_bin("vsubl.s16 q15, d14, d4", q15, d14, i8, 0x93, d4, i8, 0x12); + TESTINSN_bin("vsubl.s8 q0, d2, d31", q0, d2, i8, 0x99, d31, i8, 0x12); + TESTINSN_bin("vsubl.u32 q0, d2, d4", q0, d2, i8, 0x93, d4, i8, 0x12); + TESTINSN_bin("vsubl.u16 q0, d2, d4", q0, d2, i8, 0x93, d4, i8, 0x12); + TESTINSN_bin("vsubl.u8 q0, d2, d4", q0, d2, i8, 0x93, d4, i8, 0x12); + TESTINSN_bin("vsubl.s32 q0, d2, d4", q0, d2, i8, 0x93, d4, i8, 0xe2); + TESTINSN_bin("vsubl.s16 q15, d14, d4", q15, d14, i8, 0x93, d4, i8, 0xe2); + TESTINSN_bin("vsubl.s8 q0, d2, d31", q0, d2, i8, 0x93, d31, i8, 0xe2); + TESTINSN_bin("vsubl.u32 q0, d2, d4", q0, d2, i8, 0x93, d4, i8, 0xe2); + TESTINSN_bin("vsubl.u16 q0, d2, d4", q0, d2, i8, 0x93, d4, i8, 0xe2); + TESTINSN_bin("vsubl.u8 q0, d2, d4", q0, d2, i8, 0x93, d4, i8, 0xe2); + + printf("---- VCEQ #0 ----\n"); + TESTINSN_un("vceq.i32 q0, q1, #0", q0, q1, i32, 0x21); + TESTINSN_un("vceq.i16 q2, q1, #0", q2, q1, i32, 0x21); + TESTINSN_un("vceq.i8 q10, q11, #0", q10, q11, i32, 0x21); + TESTINSN_un("vceq.i32 q0, q1, #0", q0, q1, i32, 0x0); + TESTINSN_un("vceq.i16 q2, q1, #0", q2, q1, i32, 0x0); + TESTINSN_un("vceq.i8 q10, q11, #0", q10, q11, i32, 0x0); + + printf("---- VCGT #0 ----\n"); + TESTINSN_un("vcgt.s32 q0, q1, #0", q0, q1, i32, 0x21); + TESTINSN_un("vcgt.s16 q2, q1, #0", q2, q1, i32, 0x21); + TESTINSN_un("vcgt.s8 q10, q11, #0", q10, q11, i32, 0x21); + TESTINSN_un("vcgt.s32 q0, q1, #0", q0, q1, i32, 0x0); + TESTINSN_un("vcgt.s16 q2, q1, #0", q2, q1, i32, 0x0); + TESTINSN_un("vcgt.s8 q10, q11, #0", q10, q11, i32, 0x0); + TESTINSN_un("vcgt.s32 q0, q1, #0", q0, q1, i8, 0xef); + TESTINSN_un("vcgt.s16 q2, q1, #0", q2, q1, i8, 0xed); + TESTINSN_un("vcgt.s8 q10, q11, #0", q10, q11, i8, 0xae); + + printf("---- VCGE #0 ----\n"); + TESTINSN_un("vcge.s32 q0, q1, #0", q0, q1, i32, 0x21); + TESTINSN_un("vcge.s16 q2, q1, #0", q2, q1, i32, 0x21); + TESTINSN_un("vcge.s8 q10, q11, #0", q10, q11, i32, 0x21); + TESTINSN_un("vcge.s32 q0, q1, #0", q0, q1, i32, 0x0); + TESTINSN_un("vcge.s16 q2, q1, #0", q2, q1, i32, 0x0); + TESTINSN_un("vcge.s8 q10, q11, #0", q10, q11, i32, 0x0); + TESTINSN_un("vcge.s32 q0, q1, #0", q0, q1, i8, 0xef); + TESTINSN_un("vcge.s16 q2, q1, #0", q2, q1, i8, 0xed); + TESTINSN_un("vcge.s8 q10, q11, #0", q10, q11, i8, 0xae); + TESTINSN_un("vcge.s32 q0, q1, #0", q0, q1, i32, 0xef); + TESTINSN_un("vcge.s16 q2, q1, #0", q2, q1, i32, 0xed); + TESTINSN_un("vcge.s8 q10, q11, #0", q10, q11, i32, 0xae); + + printf("---- VCLE #0 ----\n"); + TESTINSN_un("vcle.s32 q0, q1, #0", q0, q1, i32, 0x21); + TESTINSN_un("vcle.s16 q2, q1, #0", q2, q1, i32, 0x21); + TESTINSN_un("vcle.s8 q10, q11, #0", q10, q11, i32, 0x21); + TESTINSN_un("vcle.s32 q0, q1, #0", q0, q1, i32, 0x0); + TESTINSN_un("vcle.s16 q2, q1, #0", q2, q1, i32, 0x0); + TESTINSN_un("vcle.s8 q10, q11, #0", q10, q11, i32, 0x0); + TESTINSN_un("vcle.s32 q0, q1, #0", q0, q1, i8, 0xef); + TESTINSN_un("vcle.s16 q2, q1, #0", q2, q1, i8, 0xed); + TESTINSN_un("vcle.s8 q10, q11, #0", q10, q11, i8, 0xae); + + printf("---- VCLT #0 ----\n"); + TESTINSN_un("vclt.s32 q0, q1, #0", q0, q1, i32, 0x21); + TESTINSN_un("vclt.s16 q2, q1, #0", q2, q1, i32, 0x21); + TESTINSN_un("vclt.s8 q10, q11, #0", q10, q11, i32, 0x21); + TESTINSN_un("vclt.s32 q0, q1, #0", q0, q1, i32, 0x0); + TESTINSN_un("vclt.s16 q2, q1, #0", q2, q1, i32, 0x0); + TESTINSN_un("vclt.s8 q10, q11, #0", q10, q11, i32, 0x0); + TESTINSN_un("vclt.s32 q0, q1, #0", q0, q1, i8, 0xef); + TESTINSN_un("vclt.s16 q2, q1, #0", q2, q1, i8, 0xed); + TESTINSN_un("vclt.s8 q10, q11, #0", q10, q11, i8, 0xae); + TESTINSN_un("vclt.s32 q0, q1, #0", q0, q1, i32, 0xef); + TESTINSN_un("vclt.s16 q2, q1, #0", q2, q1, i32, 0xed); + TESTINSN_un("vclt.s8 q10, q11, #0", q10, q11, i32, 0xae); + + printf("---- VCNT ----\n"); + TESTINSN_un("vcnt.8 q0, q1", q0, q1, i32, 0xac3d25eb); + TESTINSN_un("vcnt.8 q11, q14", q11, q14, i32, 0xac3d25eb); + TESTINSN_un("vcnt.8 q6, q2", q6, q2, i32, 0xad0eb); + + printf("---- VCLS ----\n"); + TESTINSN_un("vcls.s8 q0, q1", q0, q1, i32, 0x21); + TESTINSN_un("vcls.s8 q10, q15", q10, q15, i8, 0x82); + TESTINSN_un("vcls.s16 q0, q1", q0, q1, i32, 0x21); + TESTINSN_un("vcls.s16 q15, q10", q15, q10, i8, 0x82); + TESTINSN_un("vcls.s32 q6, q1", q6, q1, i32, 0x21); + TESTINSN_un("vcls.s32 q10, q5", q10, q5, i8, 0x82); + TESTINSN_un("vcls.s8 q2, q4", q2, q4, i8, 0xff); + TESTINSN_un("vcls.s16 q2, q4", q2, q4, i8, 0xff); + TESTINSN_un("vcls.s32 q2, q4", q2, q4, i8, 0xff); + TESTINSN_un("vcls.s8 q2, q4", q2, q4, i16, 0xffef); + TESTINSN_un("vcls.s16 q2, q4", q2, q4, i16, 0xffef); + TESTINSN_un("vcls.s32 q2, q4", q2, q4, i16, 0xffef); + TESTINSN_un("vcls.s8 q2, q4", q2, q4, i8, 0x00); + TESTINSN_un("vcls.s16 q2, q4", q2, q4, i8, 0x00); + TESTINSN_un("vcls.s32 q2, q4", q2, q4, i8, 0x00); + TESTINSN_un("vcls.s8 q2, q4", q2, q4, i16, 0x00ef); + TESTINSN_un("vcls.s16 q2, q4", q2, q4, i16, 0x00ef); + TESTINSN_un("vcls.s32 q2, q4", q2, q4, i16, 0x00ef); + + printf("---- VCLZ ----\n"); + TESTINSN_un("vclz.i8 q0, q1", q0, q1, i32, 0x21); + TESTINSN_un("vclz.i8 q10, q15", q10, q15, i8, 0x82); + TESTINSN_un("vclz.i16 q0, q1", q0, q1, i32, 0x21); + TESTINSN_un("vclz.i16 q15, q10", q15, q10, i8, 0x82); + TESTINSN_un("vclz.i32 q6, q1", q6, q1, i32, 0x21); + TESTINSN_un("vclz.i32 q10, q5", q10, q5, i8, 0x82); + TESTINSN_un("vclz.i8 q2, q4", q2, q4, i8, 0xff); + TESTINSN_un("vclz.i16 q2, q4", q2, q4, i8, 0xff); + TESTINSN_un("vclz.i32 q2, q4", q2, q4, i8, 0xff); + TESTINSN_un("vclz.i8 q2, q4", q2, q4, i16, 0xffef); + TESTINSN_un("vclz.i16 q2, q4", q2, q4, i16, 0xffef); + TESTINSN_un("vclz.i32 q2, q4", q2, q4, i16, 0xffef); + TESTINSN_un("vclz.i8 q2, q4", q2, q4, i8, 0x00); + TESTINSN_un("vclz.i16 q2, q4", q2, q4, i8, 0x00); + TESTINSN_un("vclz.i32 q2, q4", q2, q4, i8, 0x00); + TESTINSN_un("vclz.i8 q2, q4", q2, q4, i16, 0x00ef); + TESTINSN_un("vclz.i16 q2, q4", q2, q4, i16, 0x00ef); + TESTINSN_un("vclz.i32 q2, q4", q2, q4, i16, 0x00ef); + + printf("---- VSLI ----\n"); + TESTINSN_un("vsli.16 q0, q1, #1", q0, q1, i32, -1); + TESTINSN_un("vsli.16 q3, q4, #2", q3, q4, i32, -0x7c); + TESTINSN_un("vsli.32 q2, q5, #31", q2, q5, i32, -1); + TESTINSN_un("vsli.8 q6, q7, #7", q6, q7, i32, 0xffff); + TESTINSN_un("vsli.16 q8, q9, #12", q8, q9, i32, -10); + TESTINSN_un("vsli.32 q10, q11, #5", q10, q11, i32, 10234); + TESTINSN_un("vsli.8 q12, q13, #1", q12, q13, i32, -1); + TESTINSN_un("vsli.16 q14, q15, #11", q14, q15, i32, -1); + TESTINSN_un("vsli.32 q10, q11, #9", q10, q11, i32, 1000); + TESTINSN_un("vsli.8 q7, q13, #7", q7, q13, i32, -1); + TESTINSN_un("vsli.16 q8, q1, #1", q8, q1, i32, 0xabcf); + TESTINSN_un("vsli.32 q12, q3, #15", q12, q3, i32, -0x1b0); + TESTINSN_un("vsli.64 q0, q1, #42", q0, q1, i32, -1); + TESTINSN_un("vsli.64 q6, q7, #12", q6, q7, i32, 0xfac); + TESTINSN_un("vsli.64 q8, q4, #9", q8, q4, i32, 13560); + TESTINSN_un("vsli.64 q9, q12, #11", q9, q12, i32, 98710); + + printf("---- VPADDL ----\n"); + TESTINSN_un("vpaddl.u32 q0, q1", q0, q1, i32, 24); + TESTINSN_un("vpaddl.u32 q0, q1", q0, q1, i32, 140); + TESTINSN_un("vpaddl.u16 q0, q1", q0, q1, i32, 140); + TESTINSN_un("vpaddl.u8 q0, q1", q0, q1, i32, 140); + TESTINSN_un("vpaddl.u8 q0, q1", q0, q1, i32, (1 << 31) + 1); + TESTINSN_un("vpaddl.u16 q0, q1", q0, q1, i32, (1 << 31) + 1); + TESTINSN_un("vpaddl.u32 q0, q1", q0, q1, i32, (1 << 31) + 1); + TESTINSN_un("vpaddl.u32 q10, q11", q10, q11, i32, 24); + TESTINSN_un("vpaddl.s32 q0, q1", q0, q1, i32, 24); + TESTINSN_un("vpaddl.s32 q0, q1", q0, q1, i32, 140); + TESTINSN_un("vpaddl.s16 q0, q1", q0, q1, i32, 140); + TESTINSN_un("vpaddl.s8 q0, q1", q0, q1, i32, 140); + TESTINSN_un("vpaddl.s8 q0, q1", q0, q1, i32, (1 << 31) + 1); + TESTINSN_un("vpaddl.s16 q0, q1", q0, q1, i32, (1 << 31) + 1); + TESTINSN_un("vpaddl.s32 q0, q1", q0, q1, i32, (1 << 31) + 1); + TESTINSN_un("vpaddl.s32 q10, q11", q10, q11, i32, 24); + + printf("---- VPADAL ----\n"); + TESTINSN_un("vpadal.u32 q0, q1", q0, q1, i32, 24); + TESTINSN_un("vpadal.u32 q0, q1", q0, q1, i32, 140); + TESTINSN_un("vpadal.u16 q0, q1", q0, q1, i32, 140); + TESTINSN_un("vpadal.u8 q0, q1", q0, q1, i8, 140); + TESTINSN_un("vpadal.u8 q0, q1", q0, q1, i32, (1 << 31) + 1); + TESTINSN_un("vpadal.u16 q0, q1", q0, q1, i32, (1 << 31) + 1); + TESTINSN_un("vpadal.u32 q0, q1", q0, q1, i32, (1 << 31) + 1); + TESTINSN_un("vpadal.u32 q10, q11", q10, q11, i32, 24); + TESTINSN_un("vpadal.s32 q0, q1", q0, q1, i32, 24); + TESTINSN_un("vpadal.s32 q0, q1", q0, q1, i32, 140); + TESTINSN_un("vpadal.s16 q0, q1", q0, q1, i32, 140); + TESTINSN_un("vpadal.s8 q0, q1", q0, q1, i8, 140); + TESTINSN_un("vpadal.s8 q0, q1", q0, q1, i32, (1 << 31) + 1); + TESTINSN_un("vpadal.s16 q0, q1", q0, q1, i32, (1 << 31) + 1); + TESTINSN_un("vpadal.s32 q0, q1", q0, q1, i32, (1 << 31) + 1); + TESTINSN_un("vpadal.s32 q10, q11", q10, q11, i32, 24); + + printf("---- VZIP ----\n"); + TESTINSN_dual("vzip.32 q0, q1", q0, i8, 0x12, q1, i8, 0x34); + TESTINSN_dual("vzip.16 q1, q0", q0, i8, 0x12, q1, i8, 0x34); + TESTINSN_dual("vzip.8 q10, q11", q10, i8, 0x12, q11, i8, 0x34); + TESTINSN_dual("vzip.32 q0, q1", q0, i32, 0x12345678, q1, i32, 0x0a0b0c0d); + TESTINSN_dual("vzip.16 q1, q0", q0, i32, 0x12345678, q1, i32, 0x0a0b0c0d); + TESTINSN_dual("vzip.8 q10, q11", q10, i32, 0x12345678, q11, i32, 0x0a0b0c0d); + + printf("---- VUZP ----\n"); + TESTINSN_dual("vuzp.32 q0, q1", q0, i8, 0x12, q1, i8, 0x34); + TESTINSN_dual("vuzp.16 q1, q0", q0, i8, 0x12, q1, i8, 0x34); + TESTINSN_dual("vuzp.8 q10, q11", q10, i8, 0x12, q11, i8, 0x34); + TESTINSN_dual("vuzp.32 q0, q1", q0, i32, 0x12345678, q1, i32, 0x0a0b0c0d); + TESTINSN_dual("vuzp.16 q1, q0", q0, i32, 0x12345678, q1, i32, 0x0a0b0c0d); + TESTINSN_dual("vuzp.8 q10, q11", q10, i32, 0x12345678, q11, i32, 0x0a0b0c0d); + + printf("---- VTRN ----\n"); + TESTINSN_dual("vtrn.32 q0, q1", q0, i8, 0x12, q1, i8, 0x34); + TESTINSN_dual("vtrn.16 q1, q0", q0, i8, 0x12, q1, i8, 0x34); + TESTINSN_dual("vtrn.8 q10, q11", q10, i8, 0x12, q11, i8, 0x34); + TESTINSN_dual("vtrn.32 q0, q1", q0, i32, 0x12345678, q1, i32, 0x0a0b0c0d); + TESTINSN_dual("vtrn.16 q1, q0", q0, i32, 0x12345678, q1, i32, 0x0a0b0c0d); + TESTINSN_dual("vtrn.8 q10, q11", q10, i32, 0x12345678, q11, i32, 0x0a0b0c0d); + + printf("---- VSWP ----\n"); + TESTINSN_dual("vswp q0, q1", q0, i8, 0x12, q1, i8, 0x34); + TESTINSN_dual("vswp q1, q0", q0, i8, 0x12, q1, i8, 0x34); + TESTINSN_dual("vswp q10, q11", q10, i8, 0x12, q11, i8, 0x34); + TESTINSN_dual("vswp q0, q1", q0, i32, 0x12345678, q1, i32, 0x0a0b0c0d); + TESTINSN_dual("vswp q1, q0", q0, i32, 0x12345678, q1, i32, 0x0a0b0c0d); + TESTINSN_dual("vswp q10, q11", q10, i32, 0x12345678, q11, i32, 0x0a0b0c0d); + + printf("---- VDUP ----\n"); + TESTINSN_un("vdup.8 q2, d2[0]", q2, d2, i32, 0xabc4657); + TESTINSN_un("vdup.8 q3, d3[2]", q3, d3, i32, 0x7a1b3); + TESTINSN_un("vdup.8 q1, d0[7]", q1, d0, i32, 0x713aaa); + TESTINSN_un("vdup.8 q0, d4[3]", q0, d4, i32, 0xaa713); + TESTINSN_un("vdup.8 q4, d28[4]", q4, d28, i32, 0x7b1c3); + TESTINSN_un("vdup.16 q7, d19[3]", q7, d19, i32, 0x713ffff); + TESTINSN_un("vdup.16 q15, d31[0]", q15, d31, i32, 0x7f00fa); + TESTINSN_un("vdup.16 q6, d2[0]", q6, d2, i32, 0xffabcde); + TESTINSN_un("vdup.16 q8, d22[3]", q8, d22, i32, 0x713); + TESTINSN_un("vdup.16 q9, d2[0]", q9, d2, i32, 0x713); + TESTINSN_un("vdup.32 q10, d17[1]", q10, d17, i32, 0x713); + TESTINSN_un("vdup.32 q15, d11[0]", q15, d11, i32, 0x3); + TESTINSN_un("vdup.32 q10, d29[1]", q10, d29, i32, 0xf00000aa); + TESTINSN_un("vdup.32 q12, d0[1]", q12, d0, i32, 0xf); + TESTINSN_un("vdup.32 q13, d13[0]", q13, d13, i32, -1); + + printf("---- VQDMULL ----\n"); + TESTINSN_bin_q("vqdmull.s32 q0, d1, d2", q0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin_q("vqdmull.s32 q6, d7, d8", q6, d7, i32, 140, d8, i32, -120); + TESTINSN_bin_q("vqdmull.s16 q9, d11, d12", q9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin_q("vqdmull.s16 q4, d5, d6", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmull.s32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmull.s16 q4, d5, d6", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmull.s32 q7, d8, d9", q7, d8, i32, (1 << 31), d9, i32, 12); + TESTINSN_bin_q("vqdmull.s16 q4, d5, d6", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmull.s32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmull.s32 q10, d11, d15", q10, d11, i32, 24, d15, i32, 120); + TESTINSN_bin_q("vqdmull.s32 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin_q("vqdmull.s16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin_q("vqdmull.s32 q10, d30, d31", q10, d30, i32, 1 << 30, d31, i32, 1 << 31); + TESTINSN_bin_q("vqdmull.s16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 30); + + printf("---- VQDMULL (by scalar) ----\n"); + TESTINSN_bin_q("vqdmull.s32 q0, d1, d7[0]", q0, d1, i32, 24, d7, i32, 120); + TESTINSN_bin_q("vqdmull.s32 q6, d7, d6[0]", q6, d7, i32, 140, d6, i32, -120); + TESTINSN_bin_q("vqdmull.s16 q9, d11, d7[2]", q9, d11, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin_q("vqdmull.s16 q4, d5, d6[2]", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmull.s32 q7, d8, d3[1]", q7, d8, i32, (1 << 31) + 1, d3, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmull.s16 q4, d5, d6[1]", q4, d5, i32, (1 << 14) - 0xabcd, d6, i16, (1 << 13) + 2); + TESTINSN_bin_q("vqdmull.s32 q7, d8, d3[0]", q7, d8, i32, (1 << 31), d3, i32, 12); + TESTINSN_bin_q("vqdmull.s16 q4, d5, d6[2]", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmull.s32 q7, d8, d3[1]", q7, d8, i32, (1 << 31) + 1, d3, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmull.s32 q10, d11, d15[1]", q10, d11, i32, 24, d15, i32, 120); + TESTINSN_bin_q("vqdmull.s32 q10, d30, d1[0]", q10, d30, i32, 1 << 31, d1, i32, 1 << 31); + TESTINSN_bin_q("vqdmull.s16 q10, d30, d1[1]", q10, d30, i32, 1 << 31, d1, i32, 1 << 31); + TESTINSN_bin_q("vqdmull.s32 q10, d30, d1[1]", q10, d30, i32, 1 << 30, d1, i32, 1 << 31); + TESTINSN_bin_q("vqdmull.s16 q10, d30, d1[3]", q10, d30, i32, 1 << 31, d1, i32, 1 << 30); + + printf("---- VQDMLSL ----\n"); + TESTINSN_bin_q("vqdmlsl.s32 q0, d1, d2", q0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin_q("vqdmlsl.s32 q6, d7, d8", q6, d7, i32, 140, d8, i32, -120); + TESTINSN_bin_q("vqdmlsl.s16 q9, d11, d12", q9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin_q("vqdmlsl.s16 q4, d5, d6", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmlsl.s32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmlsl.s16 q4, d5, d6", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmlsl.s32 q7, d8, d9", q7, d8, i32, (1 << 31), d9, i32, 12); + TESTINSN_bin_q("vqdmlsl.s16 q4, d5, d6", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmlsl.s32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmlsl.s32 q10, d11, d15", q10, d11, i32, 24, d15, i32, 120); + TESTINSN_bin_q("vqdmlsl.s32 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin_q("vqdmlsl.s16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin_q("vqdmlsl.s32 q10, d30, d31", q10, d30, i32, 1 << 30, d31, i32, 1 << 31); + TESTINSN_bin_q("vqdmlsl.s16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 30); + + printf("---- VQDMLSL (by scalar) ----\n"); + TESTINSN_bin_q("vqdmlsl.s32 q0, d1, d7[0]", q0, d1, i32, 24, d7, i32, 120); + TESTINSN_bin_q("vqdmlsl.s32 q6, d7, d6[0]", q6, d7, i32, 140, d6, i32, -120); + TESTINSN_bin_q("vqdmlsl.s16 q9, d11, d7[2]", q9, d11, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin_q("vqdmlsl.s16 q4, d5, d6[2]", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmlsl.s32 q7, d8, d3[1]", q7, d8, i32, (1 << 31) + 1, d3, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmlsl.s16 q4, d5, d6[1]", q4, d5, i32, (1 << 14) - 0xabcd, d6, i16, (1 << 13) + 2); + TESTINSN_bin_q("vqdmlsl.s32 q7, d8, d3[0]", q7, d8, i32, (1 << 31), d3, i32, 12); + TESTINSN_bin_q("vqdmlsl.s16 q4, d5, d6[2]", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmlsl.s32 q7, d8, d3[1]", q7, d8, i32, (1 << 31) + 1, d3, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmlsl.s32 q10, d11, d15[1]", q10, d11, i32, 24, d15, i32, 120); + TESTINSN_bin_q("vqdmlsl.s32 q10, d30, d1[0]", q10, d30, i32, 1 << 31, d1, i32, 1 << 31); + TESTINSN_bin_q("vqdmlsl.s16 q10, d30, d1[1]", q10, d30, i32, 1 << 31, d1, i32, 1 << 31); + TESTINSN_bin_q("vqdmlsl.s32 q10, d30, d1[1]", q10, d30, i32, 1 << 30, d1, i32, 1 << 31); + TESTINSN_bin_q("vqdmlsl.s16 q10, d30, d1[3]", q10, d30, i32, 1 << 31, d1, i32, 1 << 30); + + printf("---- VQDMLAL ----\n"); + TESTINSN_bin_q("vqdmlal.s32 q0, d1, d2", q0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin_q("vqdmlal.s32 q6, d7, d8", q6, d7, i32, 140, d8, i32, -120); + TESTINSN_bin_q("vqdmlal.s16 q9, d11, d12", q9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin_q("vqdmlal.s16 q4, d5, d6", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmlal.s32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmlal.s16 q4, d5, d6", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmlal.s32 q7, d8, d9", q7, d8, i32, (1 << 31), d9, i32, 12); + TESTINSN_bin_q("vqdmlal.s16 q4, d5, d6", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmlal.s32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmlal.s32 q10, d11, d15", q10, d11, i32, 24, d15, i32, 120); + TESTINSN_bin_q("vqdmlal.s32 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin_q("vqdmlal.s16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin_q("vqdmlal.s32 q10, d30, d31", q10, d30, i32, 1 << 30, d31, i32, 1 << 31); + TESTINSN_bin_q("vqdmlal.s16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 30); + + printf("---- VQDMLAL (by scalar) ----\n"); + TESTINSN_bin_q("vqdmlal.s32 q0, d1, d7[0]", q0, d1, i32, 24, d7, i32, 120); + TESTINSN_bin_q("vqdmlal.s32 q6, d7, d6[0]", q6, d7, i32, 140, d6, i32, -120); + TESTINSN_bin_q("vqdmlal.s16 q9, d11, d7[2]", q9, d11, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin_q("vqdmlal.s16 q4, d5, d6[2]", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmlal.s32 q7, d8, d3[1]", q7, d8, i32, (1 << 31) + 1, d3, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmlal.s16 q4, d5, d6[1]", q4, d5, i32, (1 << 14) - 0xabcd, d6, i16, (1 << 13) + 2); + TESTINSN_bin_q("vqdmlal.s32 q7, d8, d3[0]", q7, d8, i32, (1 << 31), d3, i32, 12); + TESTINSN_bin_q("vqdmlal.s16 q4, d5, d6[2]", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmlal.s32 q7, d8, d3[1]", q7, d8, i32, (1 << 31) + 1, d3, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmlal.s32 q10, d11, d15[1]", q10, d11, i32, 24, d15, i32, 120); + TESTINSN_bin_q("vqdmlal.s32 q10, d30, d1[0]", q10, d30, i32, 1 << 31, d1, i32, 1 << 31); + TESTINSN_bin_q("vqdmlal.s16 q10, d30, d1[1]", q10, d30, i32, 1 << 31, d1, i32, 1 << 31); + TESTINSN_bin_q("vqdmlal.s32 q10, d30, d1[1]", q10, d30, i32, 1 << 30, d1, i32, 1 << 31); + TESTINSN_bin_q("vqdmlal.s16 q10, d30, d1[3]", q10, d30, i32, 1 << 31, d1, i32, 1 << 30); + + printf("---- VQDMULH ----\n"); + TESTINSN_bin_q("vqdmulh.s32 q0, q1, q2", q0, q1, i32, 24, q2, i32, 120); + TESTINSN_bin_q("vqdmulh.s32 q6, q7, q8", q6, q7, i32, 140, q8, i32, -120); + TESTINSN_bin_q("vqdmulh.s16 q9, q11, q12", q9, q11, i32, 0x140, q12, i32, 0x120); + TESTINSN_bin_q("vqdmulh.s16 q4, q5, q6", q4, q5, i32, (1 << 14) + 1, q6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmulh.s32 q7, q8, q9", q7, q8, i32, (1 << 31) + 1, q9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmulh.s16 q4, q5, q6", q4, q5, i32, (1 << 14) - 0xabcd, q6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmulh.s32 q7, q8, q9", q7, q8, i32, (1 << 31), q9, i32, 12); + TESTINSN_bin_q("vqdmulh.s16 q4, q5, q6", q4, q5, i32, (1 << 28) + 0xfe, q6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmulh.s32 q7, q8, q9", q7, q8, i32, (1 << 31) + 1, q9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmulh.s32 q10, q11, q15", q10, q11, i32, 24, q15, i32, 120); + TESTINSN_bin_q("vqdmulh.s32 q10, q14, q15", q10, q14, i32, 1 << 31, q15, i32, 1 << 31); + TESTINSN_bin_q("vqdmulh.s16 q10, q14, q15", q10, q14, i32, 1 << 31, q15, i32, 1 << 31); + TESTINSN_bin_q("vqdmulh.s32 q10, q14, q15", q10, q14, i32, 1 << 30, q15, i32, 1 << 31); + TESTINSN_bin_q("vqdmulh.s16 q10, q14, q15", q10, q14, i32, 1 << 31, q15, i32, 1 << 30); + + printf("---- VQDMULH (by scalar) ----\n"); + TESTINSN_bin_q("vqdmulh.s32 q0, q1, d6[0]", q0, q1, i32, 24, d6, i32, 120); + TESTINSN_bin_q("vqdmulh.s32 q6, q7, d1[1]", q6, q7, i32, 140, d1, i32, -120); + TESTINSN_bin_q("vqdmulh.s16 q9, q11, d7[0]", q9, q11, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin_q("vqdmulh.s16 q4, q5, d6[0]", q4, q5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmulh.s32 q7, q8, d9[1]", q7, q8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmulh.s16 q4, q5, d6[1]", q4, q5, i32, (1 << 14) - 0xabcd, d6, i16, (1 << 13) + 2); + TESTINSN_bin_q("vqdmulh.s32 q7, q8, d9[0]", q7, q8, i32, (1 << 31), d9, i32, 12); + TESTINSN_bin_q("vqdmulh.s16 q4, q5, d6[2]", q4, q5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmulh.s32 q7, q8, d9[0]", q7, q8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmulh.s32 q10, q11, d15[0]", q10, q11, i32, 24, d15, i32, 120); + TESTINSN_bin_q("vqdmulh.s32 q10, q14, d15[1]", q10, q14, i32, 1 << 31, d7, i32, 1 << 31); + TESTINSN_bin_q("vqdmulh.s16 q10, q14, d7[3]", q10, q14, i32, 1 << 31, q15, i32, 1 << 31); + TESTINSN_bin_q("vqdmulh.s32 q10, q14, d15[1]", q10, q14, i32, 1 << 30, d15, i32, 1 << 31); + TESTINSN_bin_q("vqdmulh.s16 q10, q14, d7[1]", q10, q14, i32, 1 << 31, d7, i32, 1 << 30); + + printf("---- VSHL (immediate) ----\n"); + TESTINSN_un("vshl.i64 q0, q1, #1", q0, q1, i32, 24); + TESTINSN_un("vshl.i64 q5, q2, #1", q5, q2, i32, (1 << 30)); + TESTINSN_un("vshl.i64 q9, q12, #2", q9, q12, i32, (1 << 31) + 2); + TESTINSN_un("vshl.i64 q11, q2, #12", q11, q2, i32, -1); + TESTINSN_un("vshl.i64 q15, q12, #63", q15, q12, i32, 5); + TESTINSN_un("vshl.i64 q5, q12, #62", q5, q12, i32, (1 << 31) + 1); + TESTINSN_un("vshl.i32 q0, q1, #1", q0, q1, i32, 24); + TESTINSN_un("vshl.i32 q5, q2, #1", q5, q2, i32, (1 << 30)); + TESTINSN_un("vshl.i32 q9, q12, #2", q9, q12, i32, (1 << 31) + 2); + TESTINSN_un("vshl.i32 q11, q2, #12", q11, q2, i32, -1); + TESTINSN_un("vshl.i32 q15, q12, #20", q15, q12, i32, 5); + TESTINSN_un("vshl.i32 q5, q12, #30", q5, q12, i32, (1 << 31) + 1); + TESTINSN_un("vshl.i16 q0, q1, #1", q0, q1, i16, 24); + TESTINSN_un("vshl.i16 q5, q2, #1", q5, q2, i32, (1 << 30)); + TESTINSN_un("vshl.i16 q9, q12, #2", q9, q12, i32, (1 << 31) + 2); + TESTINSN_un("vshl.i16 q11, q2, #12", q11, q2, i16, -1); + TESTINSN_un("vshl.i16 q15, q12, #3", q15, q12, i16, 5); + TESTINSN_un("vshl.i16 q5, q12, #14", q5, q12, i32, (1 << 31) + 1); + TESTINSN_un("vshl.i8 q0, q1, #1", q0, q1, i8, 24); + TESTINSN_un("vshl.i8 q5, q2, #1", q5, q2, i32, (1 << 30)); + TESTINSN_un("vshl.i8 q9, q12, #2", q9, q12, i32, (1 << 31) + 2); + TESTINSN_un("vshl.i8 q11, q2, #7", q11, q2, i8, -1); + TESTINSN_un("vshl.i8 q15, q12, #3", q15, q12, i8, 5); + TESTINSN_un("vshl.i8 q5, q12, #6", q5, q12, i32, (1 << 31) + 1); + + printf("---- VNEG ----\n"); + TESTINSN_un("vneg.s32 q0, q1", q0, q1, i32, 0x73); + TESTINSN_un("vneg.s16 q15, q4", q15, q4, i32, 0x73); + TESTINSN_un("vneg.s8 q8, q7", q8, q7, i32, 0x73); + TESTINSN_un("vneg.s32 q0, q1", q0, q1, i32, 0xfe); + TESTINSN_un("vneg.s16 q15, q4", q15, q4, i32, 0xef); + TESTINSN_un("vneg.s8 q8, q7", q8, q7, i32, 0xde); + TESTINSN_un("vneg.s32 q0, q1", q0, q1, i16, 0xfe0a); + TESTINSN_un("vneg.s16 q15, q4", q15, q4, i16, 0xef0b); + TESTINSN_un("vneg.s8 q8, q7", q8, q7, i16, 0xde0c); + + printf("---- VQNEG ----\n"); + TESTINSN_un_q("vqneg.s32 q0, q1", q0, q1, i32, 0x73); + TESTINSN_un_q("vqneg.s32 q0, q1", q0, q1, i32, 1 << 31); + TESTINSN_un_q("vqneg.s16 q0, q1", q0, q1, i32, 1 << 31); + TESTINSN_un_q("vqneg.s8 q0, q1", q0, q1, i32, 1 << 31); + TESTINSN_un_q("vqneg.s16 q15, q4", q15, q4, i32, 0x73); + TESTINSN_un_q("vqneg.s8 q8, q7", q8, q7, i32, 0x73); + TESTINSN_un_q("vqneg.s32 q0, q1", q0, q1, i32, 0xfe); + TESTINSN_un_q("vqneg.s16 q15, q4", q15, q4, i32, 0xef); + TESTINSN_un_q("vqneg.s8 q8, q7", q8, q7, i32, 0xde); + TESTINSN_un_q("vqneg.s32 q0, q1", q0, q1, i16, 0xfe0a); + TESTINSN_un_q("vqneg.s16 q15, q4", q15, q4, i16, 0xef0b); + TESTINSN_un_q("vqneg.s8 q8, q7", q8, q7, i16, 0xde0c); + + printf("---- VREV ----\n"); + TESTINSN_un("vrev64.8 q0, q1", q0, q1, i32, 0xaabbccdd); + TESTINSN_un("vrev64.16 q10, q15", q10, q15, i32, 0xaabbccdd); + TESTINSN_un("vrev64.32 q1, q14", q1, q14, i32, 0xaabbccdd); + TESTINSN_un("vrev32.8 q0, q1", q0, q1, i32, 0xaabbccdd); + TESTINSN_un("vrev32.16 q10, q15", q10, q15, i32, 0xaabbccdd); + TESTINSN_un("vrev16.8 q0, q1", q0, q1, i32, 0xaabbccdd); + + printf("---- VSHLL ----\n"); + TESTINSN_un("vshll.s32 q0, d1, #1", q0, d1, i32, 24); + TESTINSN_un("vshll.s32 q5, d2, #1", q5, d2, i32, (1 << 30)); + TESTINSN_un("vshll.s32 q9, d12, #2", q9, d12, i32, (1 << 31) + 2); + TESTINSN_un("vshll.u32 q11, d2, #12", q11, d2, i32, -1); + TESTINSN_un("vshll.u32 q15, d12, #20", q15, d12, i32, 5); + TESTINSN_un("vshll.u32 q5, d22, #30", q5, d22, i32, (1 << 31) + 1); + TESTINSN_un("vshll.s16 q0, d1, #1", q0, d1, i16, 24); + TESTINSN_un("vshll.s16 q5, d2, #1", q5, d2, i32, (1 << 30)); + TESTINSN_un("vshll.s16 q9, d12, #2", q9, d12, i32, (1 << 31) + 2); + TESTINSN_un("vshll.u16 q11, d2, #12", q11, d2, i16, -1); + TESTINSN_un("vshll.u16 q15, d22, #3", q15, d22, i16, 5); + TESTINSN_un("vshll.u16 q5, d12, #14", q5, d12, i32, (1 << 31) + 1); + TESTINSN_un("vshll.s8 q0, d1, #1", q0, d1, i8, 24); + TESTINSN_un("vshll.s8 q5, d2, #1", q5, d2, i32, (1 << 30)); + TESTINSN_un("vshll.s8 q9, d12, #2", q9, d12, i32, (1 << 31) + 2); + TESTINSN_un("vshll.u8 q11, d2, #7", q11, d2, i8, -1); + TESTINSN_un("vshll.u8 q15, d19, #3", q15, d19, i8, 5); + TESTINSN_un("vshll.u8 q5, d12, #6", q5, d12, i32, (1 << 31) + 1); + + printf("---- VSHLL (max shift) ----\n"); + TESTINSN_un("vshll.i32 q0, d1, #32", q0, d1, i32, 24); + TESTINSN_un("vshll.i32 q5, d2, #32", q5, d2, i32, (1 << 30)); + TESTINSN_un("vshll.i32 q11, d2, #32", q11, d2, i32, -1); + TESTINSN_un("vshll.i32 q15, d12, #32", q15, d12, i32, 5); + TESTINSN_un("vshll.i16 q0, d1, #16", q0, d1, i16, 24); + TESTINSN_un("vshll.i16 q5, d2, #16", q5, d2, i32, (1 << 30)); + TESTINSN_un("vshll.i16 q11, d2, #16", q11, d2, i16, -1); + TESTINSN_un("vshll.i16 q15, d22, #16", q15, d22, i16, 5); + TESTINSN_un("vshll.i8 q0, d1, #8", q0, d1, i8, 24); + TESTINSN_un("vshll.i8 q5, d2, #8", q5, d2, i32, (1 << 30)); + TESTINSN_un("vshll.i8 q11, d2, #8", q11, d2, i8, -1); + TESTINSN_un("vshll.i8 q15, d19, #8", q15, d19, i8, 5); + + printf("---- VMULL ----\n"); + TESTINSN_bin("vmull.s8 q0, d1, d12", q0, d1, i32, 0xabcd4, d12, i32, 0xcefab1); + TESTINSN_bin("vmull.s8 q9, d11, d12", q9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin("vmull.s8 q4, d5, d6", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmull.s8 q4, d5, d6", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 0xaa2); + TESTINSN_bin("vmull.s8 q4, d5, d6", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 0x2bbc2d); + TESTINSN_bin("vmull.s8 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmull.s8 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 30); + TESTINSN_bin("vmull.u8 q0, d1, d12", q0, d1, i32, 0xabcd4, d12, i32, 0xcefab1); + TESTINSN_bin("vmull.u8 q9, d11, d12", q9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin("vmull.u8 q4, d5, d6", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmull.u8 q4, d5, d6", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 0xaa2); + TESTINSN_bin("vmull.u8 q4, d5, d6", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 0x2bbc2d); + TESTINSN_bin("vmull.u8 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmull.u8 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 30); + TESTINSN_bin("vmull.s16 q0, d1, d12", q0, d1, i32, 0xabcd4, d12, i32, 0xcefab1); + TESTINSN_bin("vmull.s16 q9, d11, d12", q9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin("vmull.s16 q4, d5, d6", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmull.s16 q4, d5, d6", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 0xaa2); + TESTINSN_bin("vmull.s16 q4, d5, d6", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 0x2bbc2d); + TESTINSN_bin("vmull.s16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmull.s16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 30); + TESTINSN_bin("vmull.u16 q0, d1, d12", q0, d1, i32, 0xabcd4, d12, i32, 0xcefab1); + TESTINSN_bin("vmull.u16 q9, d11, d12", q9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin("vmull.u16 q4, d5, d6", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmull.u16 q4, d5, d6", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 0xaa2); + TESTINSN_bin("vmull.u16 q4, d5, d6", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 0x2bbc2d); + TESTINSN_bin("vmull.u16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmull.u16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 30); + TESTINSN_bin("vmull.s32 q0, d1, d2", q0, d1, i32, 0xaabbcc4, d2, i32, 0x1b2c0a); + TESTINSN_bin("vmull.s32 q6, d7, d8", q6, d7, i32, 140, d8, i32, -120); + TESTINSN_bin("vmull.s32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmull.s32 q7, d8, d9", q7, d8, i32, (1 << 31), d9, i32, 12); + TESTINSN_bin("vmull.s32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmull.s32 q10, d11, d15", q10, d11, i32, 24, d15, i32, 120); + TESTINSN_bin("vmull.s32 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmull.s32 q10, d30, d31", q10, d30, i32, 1 << 30, d31, i32, 1 << 31); + TESTINSN_bin("vmull.u32 q0, d1, d2", q0, d1, i32, 0xaabbcc4, d2, i32, 0x1b2c0a); + TESTINSN_bin("vmull.u32 q6, d7, d8", q6, d7, i32, 140, d8, i32, -120); + TESTINSN_bin("vmull.u32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmull.u32 q7, d8, d9", q7, d8, i32, (1 << 31), d9, i32, 12); + TESTINSN_bin("vmull.u32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmull.u32 q10, d11, d15", q10, d11, i32, 24, d15, i32, 120); + TESTINSN_bin("vmull.u32 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmull.u32 q10, d30, d31", q10, d30, i32, 1 << 30, d31, i32, 1 << 31); + TESTINSN_bin("vmull.p8 q9, d11, d12", q9, d11, i32, 0x1a4b0c, d12, i32, 0xd1e2f0); + TESTINSN_bin("vmull.p8 q4, d5, d6", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmull.p8 q4, d15, d26", q4, d15, i32, (1 << 14) - 0xabcd, d26, i32, (1 << 13) + 0xaa2); + TESTINSN_bin("vmull.p8 q14, d5, d6", q14, d5, i32, (1 << 28) + 0xefe, d6, i32, (1 << 13) + 0x2bbc2d); + TESTINSN_bin("vmull.p8 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmull.p8 q10, d27, d31", q10, d27, i32, 1 << 31, d31, i32, 1 << 30); + TESTINSN_bin("vmull.p8 q9, d11, d12", q9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin("vmull.p8 q4, d5, d6", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 0x2bbc2d); + TESTINSN_bin("vmull.p8 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 30); + + printf("---- VMLAL ----\n"); + TESTINSN_bin("vmlal.s8 q0, d1, d12", q0, d1, i32, 0xabcd4, d12, i32, 0xcefab1); + TESTINSN_bin("vmlal.s8 q9, d11, d12", q9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin("vmlal.s8 q4, d5, d6", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlal.s8 q4, d5, d6", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 0xaa2); + TESTINSN_bin("vmlal.s8 q4, d5, d6", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 0x2bbc2d); + TESTINSN_bin("vmlal.s8 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmlal.s8 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 30); + TESTINSN_bin("vmlal.u8 q0, d1, d12", q0, d1, i32, 0xabcd4, d12, i32, 0xcefab1); + TESTINSN_bin("vmlal.u8 q9, d11, d12", q9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin("vmlal.u8 q4, d5, d6", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlal.u8 q4, d5, d6", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 0xaa2); + TESTINSN_bin("vmlal.u8 q4, d5, d6", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 0x2bbc2d); + TESTINSN_bin("vmlal.u8 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmlal.u8 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 30); + TESTINSN_bin("vmlal.s16 q0, d1, d12", q0, d1, i32, 0xabcd4, d12, i32, 0xcefab1); + TESTINSN_bin("vmlal.s16 q9, d11, d12", q9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin("vmlal.s16 q4, d5, d6", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlal.s16 q4, d5, d6", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 0xaa2); + TESTINSN_bin("vmlal.s16 q4, d5, d6", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 0x2bbc2d); + TESTINSN_bin("vmlal.s16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmlal.s16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 30); + TESTINSN_bin("vmlal.u16 q0, d1, d12", q0, d1, i32, 0xabcd4, d12, i32, 0xcefab1); + TESTINSN_bin("vmlal.u16 q9, d11, d12", q9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin("vmlal.u16 q4, d5, d6", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlal.u16 q4, d5, d6", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 0xaa2); + TESTINSN_bin("vmlal.u16 q4, d5, d6", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 0x2bbc2d); + TESTINSN_bin("vmlal.u16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmlal.u16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 30); + TESTINSN_bin("vmlal.s32 q0, d1, d2", q0, d1, i32, 0xaabbcc4, d2, i32, 0x1b2c0a); + TESTINSN_bin("vmlal.s32 q6, d7, d8", q6, d7, i32, 140, d8, i32, -120); + TESTINSN_bin("vmlal.s32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmlal.s32 q7, d8, d9", q7, d8, i32, (1 << 31), d9, i32, 12); + TESTINSN_bin("vmlal.s32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmlal.s32 q10, d11, d15", q10, d11, i32, 24, d15, i32, 120); + TESTINSN_bin("vmlal.s32 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmlal.s32 q10, d30, d31", q10, d30, i32, 1 << 30, d31, i32, 1 << 31); + TESTINSN_bin("vmlal.u32 q0, d1, d2", q0, d1, i32, 0xaabbcc4, d2, i32, 0x1b2c0a); + TESTINSN_bin("vmlal.u32 q6, d7, d8", q6, d7, i32, 140, d8, i32, -120); + TESTINSN_bin("vmlal.u32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmlal.u32 q7, d8, d9", q7, d8, i32, (1 << 31), d9, i32, 12); + TESTINSN_bin("vmlal.u32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmlal.u32 q10, d11, d15", q10, d11, i32, 24, d15, i32, 120); + TESTINSN_bin("vmlal.u32 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmlal.u32 q10, d30, d31", q10, d30, i32, 1 << 30, d31, i32, 1 << 31); + + printf("---- VMLSL ----\n"); + TESTINSN_bin("vmlsl.s8 q0, d1, d12", q0, d1, i32, 0xabcd4, d12, i32, 0xcefab1); + TESTINSN_bin("vmlsl.s8 q9, d11, d12", q9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin("vmlsl.s8 q4, d5, d6", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlsl.s8 q4, d5, d6", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 0xaa2); + TESTINSN_bin("vmlsl.s8 q4, d5, d6", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 0x2bbc2d); + TESTINSN_bin("vmlsl.s8 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmlsl.s8 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 30); + TESTINSN_bin("vmlsl.u8 q0, d1, d12", q0, d1, i32, 0xabcd4, d12, i32, 0xcefab1); + TESTINSN_bin("vmlsl.u8 q9, d11, d12", q9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin("vmlsl.u8 q4, d5, d6", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlsl.u8 q4, d5, d6", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 0xaa2); + TESTINSN_bin("vmlsl.u8 q4, d5, d6", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 0x2bbc2d); + TESTINSN_bin("vmlsl.u8 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmlsl.u8 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 30); + TESTINSN_bin("vmlsl.s16 q0, d1, d12", q0, d1, i32, 0xabcd4, d12, i32, 0xcefab1); + TESTINSN_bin("vmlsl.s16 q9, d11, d12", q9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin("vmlsl.s16 q4, d5, d6", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlsl.s16 q4, d5, d6", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 0xaa2); + TESTINSN_bin("vmlsl.s16 q4, d5, d6", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 0x2bbc2d); + TESTINSN_bin("vmlsl.s16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmlsl.s16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 30); + TESTINSN_bin("vmlsl.u16 q0, d1, d12", q0, d1, i32, 0xabcd4, d12, i32, 0xcefab1); + TESTINSN_bin("vmlsl.u16 q9, d11, d12", q9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin("vmlsl.u16 q4, d5, d6", q4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmlsl.u16 q4, d5, d6", q4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 0xaa2); + TESTINSN_bin("vmlsl.u16 q4, d5, d6", q4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 0x2bbc2d); + TESTINSN_bin("vmlsl.u16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmlsl.u16 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 30); + TESTINSN_bin("vmlsl.s32 q0, d1, d2", q0, d1, i32, 0xaabbcc4, d2, i32, 0x1b2c0a); + TESTINSN_bin("vmlsl.s32 q6, d7, d8", q6, d7, i32, 140, d8, i32, -120); + TESTINSN_bin("vmlsl.s32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmlsl.s32 q7, d8, d9", q7, d8, i32, (1 << 31), d9, i32, 12); + TESTINSN_bin("vmlsl.s32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmlsl.s32 q10, d11, d15", q10, d11, i32, 24, d15, i32, 120); + TESTINSN_bin("vmlsl.s32 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmlsl.s32 q10, d30, d31", q10, d30, i32, 1 << 30, d31, i32, 1 << 31); + TESTINSN_bin("vmlsl.u32 q0, d1, d2", q0, d1, i32, 0xaabbcc4, d2, i32, 0x1b2c0a); + TESTINSN_bin("vmlsl.u32 q6, d7, d8", q6, d7, i32, 140, d8, i32, -120); + TESTINSN_bin("vmlsl.u32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmlsl.u32 q7, d8, d9", q7, d8, i32, (1 << 31), d9, i32, 12); + TESTINSN_bin("vmlsl.u32 q7, d8, d9", q7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmlsl.u32 q10, d11, d15", q10, d11, i32, 24, d15, i32, 120); + TESTINSN_bin("vmlsl.u32 q10, d30, d31", q10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin("vmlsl.u32 q10, d30, d31", q10, d30, i32, 1 << 30, d31, i32, 1 << 31); + + printf("---- VQRDMULH ----\n"); + TESTINSN_bin_q("vqrdmulh.s32 q0, q1, q2", q0, q1, i32, 24, q2, i32, 120); + TESTINSN_bin_q("vqrdmulh.s32 q6, q7, q8", q6, q7, i32, 140, q8, i32, -120); + TESTINSN_bin_q("vqrdmulh.s16 q9, q11, q12", q9, q11, i32, 0x140, q12, i32, 0x120); + TESTINSN_bin_q("vqrdmulh.s16 q4, q5, q6", q4, q5, i32, (1 << 14) + 1, q6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqrdmulh.s32 q7, q8, q9", q7, q8, i32, (1 << 31) + 1, q9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqrdmulh.s16 q4, q5, q6", q4, q5, i32, (1 << 14) - 0xabcd, q6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqrdmulh.s32 q7, q8, q9", q7, q8, i32, (1 << 31), q9, i32, 12); + TESTINSN_bin_q("vqrdmulh.s16 q4, q5, q6", q4, q5, i32, (1 << 28) + 0xfe, q6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqrdmulh.s32 q7, q8, q9", q7, q8, i32, (1 << 31) + 1, q9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqrdmulh.s32 q10, q11, q15", q10, q11, i32, 24, q15, i32, 120); + TESTINSN_bin_q("vqrdmulh.s32 q10, q14, q15", q10, q14, i32, 1 << 31, q15, i32, 1 << 31); + TESTINSN_bin_q("vqrdmulh.s32 q10, q14, q15", q10, q14, i32, 1 << 31, q15, i32, (1 << 31) + 1); + TESTINSN_bin_q("vqrdmulh.s16 q10, q14, q15", q10, q14, i32, 1 << 31, q15, i32, 1 << 31); + TESTINSN_bin_q("vqrdmulh.s32 q10, q14, q15", q10, q14, i32, 1 << 30, q15, i32, 1 << 31); + TESTINSN_bin_q("vqrdmulh.s16 q10, q14, q15", q10, q14, i32, 1 << 31, q15, i32, 1 << 30); + + printf("---- VQRDMULH (by scalar) ----\n"); + TESTINSN_bin_q("vqrdmulh.s32 q0, q1, d6[0]", q0, q1, i32, 24, d6, i32, 120); + TESTINSN_bin_q("vqrdmulh.s32 q6, q7, d1[1]", q6, q7, i32, 140, d1, i32, -120); + TESTINSN_bin_q("vqrdmulh.s16 q9, q11, d7[0]", q9, q11, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin_q("vqrdmulh.s16 q4, q5, d6[0]", q4, q5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqrdmulh.s32 q7, q8, d9[1]", q7, q8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqrdmulh.s16 q4, q5, d6[1]", q4, q5, i32, (1 << 14) - 0xabcd, d6, i16, (1 << 13) + 2); + TESTINSN_bin_q("vqrdmulh.s32 q7, q8, d9[0]", q7, q8, i32, (1 << 31), d9, i32, 12); + TESTINSN_bin_q("vqrdmulh.s16 q4, q5, d6[2]", q4, q5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqrdmulh.s32 q7, q8, d9[0]", q7, q8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqrdmulh.s32 q10, q11, d15[0]", q10, q11, i32, 24, d15, i32, 120); + TESTINSN_bin_q("vqrdmulh.s32 q10, q14, d15[1]", q10, q14, i32, 1 << 31, d7, i32, 1 << 31); + TESTINSN_bin_q("vqrdmulh.s16 q10, q14, d7[3]", q10, q14, i32, 1 << 31, q15, i32, (1 << 31) + 1); + TESTINSN_bin_q("vqrdmulh.s32 q10, q14, d15[1]", q10, q14, i32, 1 << 30, d15, i32, 1 << 31); + TESTINSN_bin_q("vqrdmulh.s16 q10, q14, d7[1]", q10, q14, i32, 1 << 31, d7, i32, 1 << 30); + + printf("---- VADD (fp) ----\n"); + TESTINSN_bin("vadd.f32 q0, q5, q2", q0, q5, i32, f2u(23.04), q2, i32, f2u(-45.5687)); + TESTINSN_bin("vadd.f32 q3, q4, q5", q3, q4, i32, f2u(-347856.475), q5, i32, f2u(1346)); + TESTINSN_bin("vadd.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(-45786.476)); + TESTINSN_bin("vadd.f32 q9, q5, q7", q9, q5, i32, f2u(95867.76), q7, i32, f2u(17065)); + TESTINSN_bin("vadd.f32 q0, q5, q2", q0, q5, i32, f2u(-45667.24), q2, i32, f2u(-248562.76)); + TESTINSN_bin("vadd.f32 q3, q4, q5", q3, q4, i32, f2u(24), q5, i32, f2u(1346)); + TESTINSN_bin("vadd.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(1089)); + TESTINSN_bin("vadd.f32 q9, q5, q7", q9, q5, i32, f2u(214), q7, i32, f2u(1752065)); + TESTINSN_bin("vadd.f32 q0, q11, q12", q0, q11, i32, f2u(356047.56), q12, i32, f2u(5867.009)); + TESTINSN_bin("vadd.f32 q7, q1, q6", q7, q1, i32, f2u(34.00046), q6, i32, f2u(0.0024575)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(2754), q2, i32, f2u(107)); + TESTINSN_bin("vadd.f32 q3, q4, q5", q3, q4, i32, f2u(874), q5, i32, f2u(1384.6)); + TESTINSN_bin("vadd.f32 q10, q11, q2", q10, q11, i32, f2u(487.587), q2, i32, f2u(109)); + TESTINSN_bin("vadd.f32 q9, q5, q7", q9, q5, i32, f2u(2146), q7, i32, f2u(1752)); + TESTINSN_bin("vadd.f32 q0, q11, q12", q0, q11, i32, f2u(-56.25), q12, i32, f2u(-5786.47)); + TESTINSN_bin("vadd.f32 q7, q1, q6", q7, q1, i32, f2u(456.2489562), q6, i32, f2u(-7.2945676)); + TESTINSN_bin("vadd.f32 q0, q5, q2", q0, q5, i32, f2u(532.987), q2, i32, f2u(-0.0045876)); + TESTINSN_bin("vadd.f32 q10, q13, q15", q10, q13, i32, f2u(-485.2457), q15, i32, f2u(-567.245)); + TESTINSN_bin("vadd.f32 q10, q13, q15", q10, q13, i32, f2u(278456.45), q15, i32, f2u(8756.0076)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(876988654), q2, i32, f2u(1224808797)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(NAN)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(1.0)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(0.0)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(NAN)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(1.0)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(0.0)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vadd.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(-INFINITY)); + + printf("---- VSUB (fp) ----\n"); + TESTINSN_bin("vsub.f32 q0, q5, q2", q0, q5, i32, f2u(23.04), q2, i32, f2u(-45.5687)); + TESTINSN_bin("vsub.f32 q3, q4, q5", q3, q4, i32, f2u(-347856.475), q5, i32, f2u(1346)); + TESTINSN_bin("vsub.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(-45786.476)); + TESTINSN_bin("vsub.f32 q9, q5, q7", q9, q5, i32, f2u(95867.76), q7, i32, f2u(17065)); + TESTINSN_bin("vsub.f32 q0, q5, q2", q0, q5, i32, f2u(-45667.24), q2, i32, f2u(-248562.76)); + TESTINSN_bin("vsub.f32 q3, q4, q5", q3, q4, i32, f2u(24.89), q5, i32, f2u(1346)); + TESTINSN_bin("vsub.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(1089)); + TESTINSN_bin("vsub.f32 q9, q5, q7", q9, q5, i32, f2u(214), q7, i32, f2u(1752065)); + TESTINSN_bin("vsub.f32 q0, q11, q12", q0, q11, i32, f2u(356047.56), q12, i32, f2u(5867.009)); + TESTINSN_bin("vsub.f32 q7, q1, q6", q7, q1, i32, f2u(34.00046), q6, i32, f2u(0.0024575)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(2754), q2, i32, f2u(107)); + TESTINSN_bin("vsub.f32 q3, q4, q5", q3, q4, i32, f2u(874), q5, i32, f2u(1384.6)); + TESTINSN_bin("vsub.f32 q10, q11, q2", q10, q11, i32, f2u(487.587), q2, i32, f2u(109)); + TESTINSN_bin("vsub.f32 q9, q5, q7", q9, q5, i32, f2u(2146), q7, i32, f2u(1752)); + TESTINSN_bin("vsub.f32 q0, q11, q12", q0, q11, i32, f2u(-56.25), q12, i32, f2u(-5786.47)); + TESTINSN_bin("vsub.f32 q7, q1, q6", q7, q1, i32, f2u(456.2489562), q6, i32, f2u(-7.2945676)); + TESTINSN_bin("vsub.f32 q0, q5, q2", q0, q5, i32, f2u(532.987), q2, i32, f2u(-0.0045876)); + TESTINSN_bin("vsub.f32 q10, q13, q15", q10, q13, i32, f2u(-485.2457), q15, i32, f2u(-567.245)); + TESTINSN_bin("vsub.f32 q10, q13, q15", q10, q13, i32, f2u(278456.45), q15, i32, f2u(8756.0076)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(876988654), q2, i32, f2u(1224808797)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(NAN)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(1.0)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(0.0)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(NAN)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(1.0)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(0.0)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vsub.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(-INFINITY)); + + printf("---- VABD (fp) ----\n"); + TESTINSN_bin("vabd.f32 q0, q5, q2", q0, q5, i32, f2u(23.04), q2, i32, f2u(-45.5687)); + TESTINSN_bin("vabd.f32 q3, q4, q5", q3, q4, i32, f2u(-347856.475), q5, i32, f2u(1346)); + TESTINSN_bin("vabd.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(-45786.476)); + TESTINSN_bin("vabd.f32 q9, q5, q7", q9, q5, i32, f2u(95867.76), q7, i32, f2u(17065)); + TESTINSN_bin("vabd.f32 q0, q5, q2", q0, q5, i32, f2u(-45667.24), q2, i32, f2u(-248562.76)); + TESTINSN_bin("vabd.f32 q3, q4, q5", q3, q4, i32, f2u(24), q5, i32, f2u(1346)); + TESTINSN_bin("vabd.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(1089)); + TESTINSN_bin("vabd.f32 q9, q5, q7", q9, q5, i32, f2u(214), q7, i32, f2u(1752065)); + TESTINSN_bin("vabd.f32 q0, q11, q12", q0, q11, i32, f2u(356047.56), q12, i32, f2u(5867.009)); + TESTINSN_bin("vabd.f32 q7, q1, q6", q7, q1, i32, f2u(34.00046), q6, i32, f2u(0.0024575)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(2754), q2, i32, f2u(107)); + TESTINSN_bin("vabd.f32 q3, q4, q5", q3, q4, i32, f2u(874), q5, i32, f2u(1384.6)); + TESTINSN_bin("vabd.f32 q10, q11, q2", q10, q11, i32, f2u(487.587), q2, i32, f2u(109)); + TESTINSN_bin("vabd.f32 q9, q5, q7", q9, q5, i32, f2u(2146), q7, i32, f2u(1752)); + TESTINSN_bin("vabd.f32 q0, q11, q12", q0, q11, i32, f2u(-56.25), q12, i32, f2u(-5786.47)); + TESTINSN_bin("vabd.f32 q7, q1, q6", q7, q1, i32, f2u(456.2489562), q6, i32, f2u(-7.2945676)); + TESTINSN_bin("vabd.f32 q0, q5, q2", q0, q5, i32, f2u(532.987), q2, i32, f2u(-0.0045876)); + TESTINSN_bin("vabd.f32 q10, q13, q15", q10, q13, i32, f2u(-485.2457), q15, i32, f2u(-567.245)); + TESTINSN_bin("vabd.f32 q10, q13, q15", q10, q13, i32, f2u(278456.45), q15, i32, f2u(8756.0076)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(876988654), q2, i32, f2u(1224808797)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(NAN)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(1.0)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(0.0)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(NAN)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(1.0)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(0.0)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vabd.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(-INFINITY)); + + printf("---- VMUL (fp) ----\n"); + TESTINSN_bin("vmul.f32 q0, q5, q2", q0, q5, i32, f2u(23.04), q2, i32, f2u(-45.5687)); + TESTINSN_bin("vmul.f32 q3, q4, q5", q3, q4, i32, f2u(-347856.475), q5, i32, f2u(1346)); + TESTINSN_bin("vmul.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(-45786.476)); + TESTINSN_bin("vmul.f32 q9, q5, q7", q9, q5, i32, f2u(95867.76), q7, i32, f2u(17065)); + TESTINSN_bin("vmul.f32 q0, q5, q2", q0, q5, i32, f2u(-45667.24), q2, i32, f2u(-248562.76)); + TESTINSN_bin("vmul.f32 q3, q4, q5", q3, q4, i32, f2u(24), q5, i32, f2u(1346)); + TESTINSN_bin("vmul.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(1089)); + TESTINSN_bin("vmul.f32 q9, q5, q7", q9, q5, i32, f2u(214), q7, i32, f2u(1752065)); + TESTINSN_bin("vmul.f32 q0, q11, q12", q0, q11, i32, f2u(356047.56), q12, i32, f2u(5867.009)); + TESTINSN_bin("vmul.f32 q7, q1, q6", q7, q1, i32, f2u(34.00046), q6, i32, f2u(0.0024575)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(2754), q2, i32, f2u(107)); + TESTINSN_bin("vmul.f32 q3, q4, q5", q3, q4, i32, f2u(874), q5, i32, f2u(1384.6)); + TESTINSN_bin("vmul.f32 q10, q11, q2", q10, q11, i32, f2u(487.587), q2, i32, f2u(109)); + TESTINSN_bin("vmul.f32 q9, q5, q7", q9, q5, i32, f2u(2146), q7, i32, f2u(1752)); + TESTINSN_bin("vmul.f32 q0, q11, q12", q0, q11, i32, f2u(-56.25), q12, i32, f2u(-5786.47)); + TESTINSN_bin("vmul.f32 q7, q1, q6", q7, q1, i32, f2u(456.2489562), q6, i32, f2u(-7.2945676)); + TESTINSN_bin("vmul.f32 q0, q5, q2", q0, q5, i32, f2u(532.987), q2, i32, f2u(-0.0045876)); + TESTINSN_bin("vmul.f32 q10, q13, q15", q10, q13, i32, f2u(-485.2457), q15, i32, f2u(-567.245)); + TESTINSN_bin("vmul.f32 q10, q13, q15", q10, q13, i32, f2u(278456.45), q15, i32, f2u(8756.0076)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(876988654), q2, i32, f2u(1224808797)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(NAN)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(1.0)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(0.0)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(NAN)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(1.0)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(0.0)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vmul.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(-INFINITY)); + + printf("---- VMLA (fp) ----\n"); + TESTINSN_bin_f("vmla.f32 q0, q5, q2", q0, q5, i32, f2u(23.04), q2, i32, f2u(-45.5687)); + TESTINSN_bin_f("vmla.f32 q3, q4, q5", q3, q4, i32, f2u(-347856.475), q5, i32, f2u(1346)); + TESTINSN_bin_f("vmla.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(-45786.476)); + TESTINSN_bin_f("vmla.f32 q9, q5, q7", q9, q5, i32, f2u(95867.76), q7, i32, f2u(17065)); + TESTINSN_bin_f("vmla.f32 q0, q5, q2", q0, q5, i32, f2u(-45667.24), q2, i32, f2u(-248562.76)); + TESTINSN_bin_f("vmla.f32 q3, q4, q5", q3, q4, i32, f2u(24), q5, i32, f2u(1346)); + TESTINSN_bin_f("vmla.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(1089)); + TESTINSN_bin_f("vmla.f32 q9, q5, q7", q9, q5, i32, f2u(214), q7, i32, f2u(1752065)); + TESTINSN_bin_f("vmla.f32 q0, q11, q12", q0, q11, i32, f2u(356047.56), q12, i32, f2u(5867.009)); + TESTINSN_bin_f("vmla.f32 q7, q1, q6", q7, q1, i32, f2u(34.00046), q6, i32, f2u(0.0024575)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(2754), q2, i32, f2u(107)); + TESTINSN_bin_f("vmla.f32 q3, q4, q5", q3, q4, i32, f2u(874), q5, i32, f2u(1384.6)); + TESTINSN_bin_f("vmla.f32 q10, q11, q2", q10, q11, i32, f2u(487.587), q2, i32, f2u(109)); + TESTINSN_bin_f("vmla.f32 q9, q5, q7", q9, q5, i32, f2u(2146), q7, i32, f2u(1752)); + TESTINSN_bin_f("vmla.f32 q0, q11, q12", q0, q11, i32, f2u(-56.25), q12, i32, f2u(-5786.47)); + TESTINSN_bin_f("vmla.f32 q7, q1, q6", q7, q1, i32, f2u(456.2489562), q6, i32, f2u(-7.2945676)); + TESTINSN_bin_f("vmla.f32 q0, q5, q2", q0, q5, i32, f2u(532.987), q2, i32, f2u(-0.0045876)); + TESTINSN_bin_f("vmla.f32 q10, q13, q15", q10, q13, i32, f2u(-485.2457), q15, i32, f2u(-567.245)); + TESTINSN_bin_f("vmla.f32 q10, q13, q15", q10, q13, i32, f2u(278456.45), q15, i32, f2u(8756.0076)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(876988654), q2, i32, f2u(1224808797)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(NAN)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(1.0)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(0.0)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(NAN)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(1.0)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(0.0)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmla.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(-INFINITY)); + + printf("---- VMLA (fp by scalar) ----\n"); + TESTINSN_bin_f("vmla.f32 q0, q1, d4[0]", q0, q1, i32, f2u(24), d4, i32, f2u(120)); + TESTINSN_bin_f("vmla.f32 q15, q8, d7[1]", q15, q8, i32, f2u(140), d7, i32, f2u(-120)); + TESTINSN_bin_f("vmla.f32 q4, q8, d15[1]", q4, q8, i32, (1 << 31) + 1, d15, i32, (1 << 31) + 2); + TESTINSN_bin_f("vmla.f32 q7, q8, d1[1]", q7, q8, i32, (1 << 31), d1, i16, 12); + TESTINSN_bin_f("vmla.f32 q7, q8, d1[1]", q7, q8, i32, (1 << 31) + 1, d1, i32, (1 << 31) + 2); + TESTINSN_bin_f("vmla.f32 q7, q8, d1[0]", q7, q8, i32, f2u(1e22), d1, i32, f2u(1e-19)); + TESTINSN_bin_f("vmla.f32 q7, q8, d1[0]", q7, q8, i32, f2u(1e12), d1, i32, f2u(1e11)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmla.f32 q0, q1, d2[0]", q0, q1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VMLS (fp) ----\n"); + TESTINSN_bin_f("vmls.f32 q0, q5, q2", q0, q5, i32, f2u(23.04), q2, i32, f2u(-45.5687)); + TESTINSN_bin_f("vmls.f32 q3, q4, q5", q3, q4, i32, f2u(-347856.475), q5, i32, f2u(1346)); + TESTINSN_bin_f("vmls.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(-45786.476)); + TESTINSN_bin_f("vmls.f32 q9, q5, q7", q9, q5, i32, f2u(95867.76), q7, i32, f2u(17065)); + TESTINSN_bin_f("vmls.f32 q0, q5, q2", q0, q5, i32, f2u(-45667.24), q2, i32, f2u(-248562.76)); + TESTINSN_bin_f("vmls.f32 q3, q4, q5", q3, q4, i32, f2u(24), q5, i32, f2u(1346)); + TESTINSN_bin_f("vmls.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(1089)); + TESTINSN_bin_f("vmls.f32 q9, q5, q7", q9, q5, i32, f2u(214), q7, i32, f2u(1752065)); + TESTINSN_bin_f("vmls.f32 q0, q11, q12", q0, q11, i32, f2u(356047.56), q12, i32, f2u(5867.009)); + TESTINSN_bin_f("vmls.f32 q7, q1, q6", q7, q1, i32, f2u(34.00046), q6, i32, f2u(0.0024575)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(2754), q2, i32, f2u(107)); + TESTINSN_bin_f("vmls.f32 q3, q4, q5", q3, q4, i32, f2u(874), q5, i32, f2u(1384.6)); + TESTINSN_bin_f("vmls.f32 q10, q11, q2", q10, q11, i32, f2u(487.587), q2, i32, f2u(109)); + TESTINSN_bin_f("vmls.f32 q9, q5, q7", q9, q5, i32, f2u(2146), q7, i32, f2u(1752)); + TESTINSN_bin_f("vmls.f32 q0, q11, q12", q0, q11, i32, f2u(-56.25), q12, i32, f2u(-5786.47)); + TESTINSN_bin_f("vmls.f32 q7, q1, q6", q7, q1, i32, f2u(456.2489562), q6, i32, f2u(-7.2945676)); + TESTINSN_bin_f("vmls.f32 q0, q5, q2", q0, q5, i32, f2u(532.987), q2, i32, f2u(-0.0045876)); + TESTINSN_bin_f("vmls.f32 q10, q13, q15", q10, q13, i32, f2u(-485.2457), q15, i32, f2u(-567.245)); + TESTINSN_bin_f("vmls.f32 q10, q13, q15", q10, q13, i32, f2u(278456.45), q15, i32, f2u(8756.0076)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(876988654), q2, i32, f2u(1224808797)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(NAN)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(1.0)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(0.0)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(NAN)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(1.0)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(0.0)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmls.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(-INFINITY)); + + printf("---- VMLS (fp by scalar) ----\n"); + TESTINSN_bin_f("vmls.f32 q0, q1, d4[0]", q0, q1, i32, f2u(24), d4, i32, f2u(120)); + TESTINSN_bin_f("vmls.f32 q15, q8, d7[1]", q15, q8, i32, f2u(140), d7, i32, f2u(-120)); + TESTINSN_bin_f("vmls.f32 q4, q8, d15[1]", q4, q8, i32, (1 << 31) + 1, d15, i32, (1 << 31) + 2); + TESTINSN_bin_f("vmls.f32 q7, q8, d1[1]", q7, q8, i32, (1 << 31), d1, i16, 12); + TESTINSN_bin_f("vmls.f32 q7, q8, d1[1]", q7, q8, i32, (1 << 31) + 1, d1, i32, (1 << 31) + 2); + TESTINSN_bin_f("vmls.f32 q7, q8, d1[0]", q7, q8, i32, f2u(1e22), d1, i32, f2u(1e-19)); + TESTINSN_bin_f("vmls.f32 q7, q8, d1[0]", q7, q8, i32, f2u(1e12), d1, i32, f2u(1e11)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmls.f32 q0, q1, d2[0]", q0, q1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VCVT (integer <-> fp) ----\n"); + TESTINSN_un("vcvt.u32.f32 q0, q1", q0, q1, i32, f2u(3.2)); + TESTINSN_un("vcvt.u32.f32 q10, q11", q10, q11, i32, f2u(3e22)); + TESTINSN_un("vcvt.u32.f32 q15, q4", q15, q4, i32, f2u(3e9)); + TESTINSN_un("vcvt.u32.f32 q15, q4", q15, q4, i32, f2u(-0.5)); + TESTINSN_un("vcvt.u32.f32 q15, q4", q15, q4, i32, f2u(-7.1)); + TESTINSN_un("vcvt.u32.f32 q12, q8", q12, q8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vcvt.u32.f32 q12, q8", q12, q8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vcvt.s32.f32 q0, q1", q0, q1, i32, f2u(3.2)); + TESTINSN_un("vcvt.s32.f32 q10, q11", q10, q11, i32, f2u(3e22)); + TESTINSN_un("vcvt.s32.f32 q15, q4", q15, q4, i32, f2u(3e9)); + TESTINSN_un("vcvt.s32.f32 q15, q4", q15, q4, i32, f2u(-0.5)); + TESTINSN_un("vcvt.s32.f32 q15, q4", q15, q4, i32, f2u(-7.1)); + TESTINSN_un("vcvt.s32.f32 q12, q8", q12, q8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vcvt.s32.f32 q12, q8", q12, q8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vcvt.f32.u32 q0, q1", q0, q1, i32, 7); + TESTINSN_un("vcvt.f32.u32 q10, q11", q10, q11, i32, 1 << 31); + TESTINSN_un("vcvt.f32.u32 q0, q1", q0, q1, i32, (1U << 31) + 1); + TESTINSN_un("vcvt.f32.u32 q0, q1", q0, q1, i32, (1U << 31) - 1); + TESTINSN_un("vcvt.f32.u32 q0, q14", q0, q14, i32, 0x30a0bcef); + TESTINSN_un("vcvt.f32.s32 q0, q1", q0, q1, i32, 7); + TESTINSN_un("vcvt.f32.s32 q10, q11", q10, q11, i32, 1 << 31); + TESTINSN_un("vcvt.f32.s32 q0, q1", q0, q1, i32, (1U << 31) + 1); + TESTINSN_un("vcvt.f32.s32 q0, q1", q0, q1, i32, (1U << 31) - 1); + TESTINSN_un("vcvt.f32.s32 q0, q14", q0, q14, i32, 0x30a0bcef); + TESTINSN_un("vcvt.u32.f32 q0, q1", q0, q1, i32, f2u(NAN)); + TESTINSN_un("vcvt.u32.f32 q0, q1", q0, q1, i32, f2u(0.0)); + TESTINSN_un("vcvt.u32.f32 q0, q1", q0, q1, i32, f2u(INFINITY)); + TESTINSN_un("vcvt.u32.f32 q0, q1", q0, q1, i32, f2u(-INFINITY)); + TESTINSN_un("vcvt.s32.f32 q0, q1", q0, q1, i32, f2u(NAN)); + TESTINSN_un("vcvt.s32.f32 q0, q1", q0, q1, i32, f2u(0.0)); + TESTINSN_un("vcvt.s32.f32 q0, q1", q0, q1, i32, f2u(INFINITY)); + TESTINSN_un("vcvt.s32.f32 q0, q1", q0, q1, i32, f2u(-INFINITY)); + + printf("---- VCVT (fixed <-> fp) ----\n"); + TESTINSN_un("vcvt.u32.f32 q0, q1, #3", q0, q1, i32, f2u(3.2)); + TESTINSN_un("vcvt.u32.f32 q10, q11, #1", q10, q11, i32, f2u(3e22)); + TESTINSN_un("vcvt.u32.f32 q15, q4, #32", q15, q4, i32, f2u(3e9)); + TESTINSN_un("vcvt.u32.f32 q15, q4, #7", q15, q4, i32, f2u(-0.5)); + TESTINSN_un("vcvt.u32.f32 q15, q4, #4", q15, q4, i32, f2u(-7.1)); + TESTINSN_un("vcvt.u32.f32 q12, q8, #3", q12, q8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vcvt.u32.f32 q12, q8, #3", q12, q8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vcvt.s32.f32 q0, q1, #5", q0, q1, i32, f2u(3.2)); + TESTINSN_un("vcvt.s32.f32 q10, q11, #1", q10, q11, i32, f2u(3e22)); + TESTINSN_un("vcvt.s32.f32 q15, q4, #8", q15, q4, i32, f2u(3e9)); + TESTINSN_un("vcvt.s32.f32 q15, q4, #2", q15, q4, i32, f2u(-0.5)); + TESTINSN_un("vcvt.s32.f32 q15, q4, #1", q15, q4, i32, f2u(-7.1)); + TESTINSN_un("vcvt.s32.f32 q12, q8, #2", q12, q8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vcvt.s32.f32 q12, q8, #2", q12, q8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vcvt.f32.u32 q0, q1, #5", q0, q1, i32, 7); + TESTINSN_un("vcvt.f32.u32 q10, q11, #9", q10, q11, i32, 1 << 31); + TESTINSN_un("vcvt.f32.u32 q0, q1, #4", q0, q1, i32, (1U << 31) + 1); + TESTINSN_un("vcvt.f32.u32 q0, q1, #6", q0, q1, i32, (1U << 31) - 1); + TESTINSN_un("vcvt.f32.u32 q0, q14, #5", q0, q14, i32, 0x30a0bcef); + TESTINSN_un("vcvt.f32.s32 q0, q1, #12", q0, q1, i32, 7); + TESTINSN_un("vcvt.f32.s32 q10, q11, #8", q10, q11, i32, 1 << 31); + TESTINSN_un("vcvt.f32.s32 q0, q1, #2", q0, q1, i32, (1U << 31) + 1); + TESTINSN_un("vcvt.f32.s32 q0, q1, #1", q0, q1, i32, (1U << 31) - 1); + TESTINSN_un("vcvt.f32.s32 q0, q14, #6", q0, q14, i32, 0x30a0bcef); + TESTINSN_un("vcvt.u32.f32 q0, q1, #3", q0, q1, i32, f2u(NAN)); + TESTINSN_un("vcvt.u32.f32 q0, q1, #3", q0, q1, i32, f2u(0.0)); + TESTINSN_un("vcvt.u32.f32 q0, q1, #3", q0, q1, i32, f2u(INFINITY)); + TESTINSN_un("vcvt.u32.f32 q0, q1, #3", q0, q1, i32, f2u(-INFINITY)); + TESTINSN_un("vcvt.s32.f32 q0, q1, #3", q0, q1, i32, f2u(NAN)); + TESTINSN_un("vcvt.s32.f32 q0, q1, #3", q0, q1, i32, f2u(0.0)); + TESTINSN_un("vcvt.s32.f32 q0, q1, #3", q0, q1, i32, f2u(INFINITY)); + TESTINSN_un("vcvt.s32.f32 q0, q1, #3", q0, q1, i32, f2u(-INFINITY)); + + printf("---- VMAX (fp) ----\n"); + TESTINSN_bin("vmax.f32 q0, q5, q2", q0, q5, i32, f2u(23.04), q2, i32, f2u(-45.5687)); + TESTINSN_bin("vmax.f32 q3, q4, q5", q3, q4, i32, f2u(-347856.475), q5, i32, f2u(1346)); + TESTINSN_bin("vmax.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(-45786.476)); + TESTINSN_bin("vmax.f32 q9, q5, q7", q9, q5, i32, f2u(95867.76), q7, i32, f2u(17065)); + TESTINSN_bin("vmax.f32 q0, q5, q2", q0, q5, i32, f2u(-45667.24), q2, i32, f2u(-248562.76)); + TESTINSN_bin("vmax.f32 q3, q4, q5", q3, q4, i32, f2u(24), q5, i32, f2u(1346)); + TESTINSN_bin("vmax.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(1089)); + TESTINSN_bin("vmax.f32 q9, q5, q7", q9, q5, i32, f2u(214), q7, i32, f2u(1752065)); + TESTINSN_bin("vmax.f32 q0, q11, q12", q0, q11, i32, f2u(356047.56), q12, i32, f2u(5867.009)); + TESTINSN_bin("vmax.f32 q7, q1, q6", q7, q1, i32, f2u(34.00046), q6, i32, f2u(0.0024575)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(2754), q2, i32, f2u(107)); + TESTINSN_bin("vmax.f32 q3, q4, q5", q3, q4, i32, f2u(874), q5, i32, f2u(1384.6)); + TESTINSN_bin("vmax.f32 q10, q11, q2", q10, q11, i32, f2u(487.587), q2, i32, f2u(109)); + TESTINSN_bin("vmax.f32 q9, q5, q7", q9, q5, i32, f2u(2146), q7, i32, f2u(1752)); + TESTINSN_bin("vmax.f32 q0, q11, q12", q0, q11, i32, f2u(-56.25), q12, i32, f2u(-5786.47)); + TESTINSN_bin("vmax.f32 q7, q1, q6", q7, q1, i32, f2u(456.2489562), q6, i32, f2u(-7.2945676)); + TESTINSN_bin("vmax.f32 q0, q5, q2", q0, q5, i32, f2u(532.987), q2, i32, f2u(-0.0045876)); + TESTINSN_bin("vmax.f32 q10, q13, q15", q10, q13, i32, f2u(-485.2457), q15, i32, f2u(-567.245)); + TESTINSN_bin("vmax.f32 q10, q13, q15", q10, q13, i32, f2u(278456.45), q15, i32, f2u(8756.0076)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(876988654), q2, i32, f2u(1224808797)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(0), q2, i32, f2u(0)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(1.0/1024.0), q2, i32, f2u(-1.0/1024.0)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(-1.0/1024.0), q2, i32, f2u(1.0/1024.0)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(2342+1.0/1024.0), q2, i32, f2u(2342-1.0/1024.0)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(-2342+1.0/1024.0), q2, i32, f2u(-2342-1.0/1024.0)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(89276+1.0/1024.0), q2, i32, f2u(89276+1.0/1024.0)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(NAN)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(1.0)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(0.0)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(NAN)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(1.0)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(0.0)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vmax.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(-INFINITY)); + + printf("---- VMIN (fp) ----\n"); + TESTINSN_bin("vmin.f32 q0, q5, q2", q0, q5, i32, f2u(23.04), q2, i32, f2u(-45.5687)); + TESTINSN_bin("vmin.f32 q3, q4, q5", q3, q4, i32, f2u(-347856.475), q5, i32, f2u(1346)); + TESTINSN_bin("vmin.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(-45786.476)); + TESTINSN_bin("vmin.f32 q9, q5, q7", q9, q5, i32, f2u(95867.76), q7, i32, f2u(17065)); + TESTINSN_bin("vmin.f32 q0, q5, q2", q0, q5, i32, f2u(-45667.24), q2, i32, f2u(-248562.76)); + TESTINSN_bin("vmin.f32 q3, q4, q5", q3, q4, i32, f2u(24), q5, i32, f2u(1346)); + TESTINSN_bin("vmin.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(1089)); + TESTINSN_bin("vmin.f32 q9, q5, q7", q9, q5, i32, f2u(214), q7, i32, f2u(1752065)); + TESTINSN_bin("vmin.f32 q0, q11, q12", q0, q11, i32, f2u(356047.56), q12, i32, f2u(5867.009)); + TESTINSN_bin("vmin.f32 q7, q1, q6", q7, q1, i32, f2u(34.00046), q6, i32, f2u(0.0024575)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(2754), q2, i32, f2u(107)); + TESTINSN_bin("vmin.f32 q3, q4, q5", q3, q4, i32, f2u(874), q5, i32, f2u(1384.6)); + TESTINSN_bin("vmin.f32 q10, q11, q2", q10, q11, i32, f2u(487.587), q2, i32, f2u(109)); + TESTINSN_bin("vmin.f32 q9, q5, q7", q9, q5, i32, f2u(2146), q7, i32, f2u(1752)); + TESTINSN_bin("vmin.f32 q0, q11, q12", q0, q11, i32, f2u(-56.25), q12, i32, f2u(-5786.47)); + TESTINSN_bin("vmin.f32 q7, q1, q6", q7, q1, i32, f2u(456.2489562), q6, i32, f2u(-7.2945676)); + TESTINSN_bin("vmin.f32 q0, q5, q2", q0, q5, i32, f2u(532.987), q2, i32, f2u(-0.0045876)); + TESTINSN_bin("vmin.f32 q10, q13, q15", q10, q13, i32, f2u(-485.2457), q15, i32, f2u(-567.245)); + TESTINSN_bin("vmin.f32 q10, q13, q15", q10, q13, i32, f2u(278456.45), q15, i32, f2u(8756.0076)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(876988654), q2, i32, f2u(1224808797)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(0), q2, i32, f2u(0)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(1.0/1024.0), q2, i32, f2u(-1.0/1024.0)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(-1.0/1024.0), q2, i32, f2u(1.0/1024.0)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(2342+1.0/1024.0), q2, i32, f2u(2342-1.0/1024.0)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(-2342+1.0/1024.0), q2, i32, f2u(-2342-1.0/1024.0)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(89276+1.0/1024.0), q2, i32, f2u(89276+1.0/1024.0)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(NAN)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(1.0)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(0.0)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(NAN)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(1.0)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(0.0)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vmin.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(-INFINITY)); + + printf("---- VRECPE ----\n"); + TESTINSN_un("vrecpe.u32 q0, q1", q0, q1, i32, f2u(3.2)); + TESTINSN_un("vrecpe.u32 q10, q11", q10, q11, i32, f2u(3e22)); + TESTINSN_un("vrecpe.u32 q15, q4", q15, q4, i32, f2u(3e9)); + TESTINSN_un("vrecpe.u32 q15, q4", q15, q4, i32, f2u(-0.5)); + TESTINSN_un("vrecpe.u32 q15, q4", q15, q4, i32, f2u(-7.1)); + TESTINSN_un("vrecpe.u32 q12, q8", q12, q8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vrecpe.u32 q12, q8", q12, q8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vrecpe.u32 q0, q1", q0, q1, i32, f2u(3.2)); + TESTINSN_un("vrecpe.u32 q10, q11", q10, q11, i32, f2u(3e22)); + TESTINSN_un("vrecpe.u32 q15, q4", q15, q4, i32, f2u(3e9)); + TESTINSN_un("vrecpe.f32 q15, q4", q15, q4, i32, f2u(-0.5)); + TESTINSN_un("vrecpe.f32 q15, q4", q15, q4, i32, f2u(-7.1)); + TESTINSN_un("vrecpe.f32 q12, q8", q12, q8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vrecpe.f32 q12, q8", q12, q8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vrecpe.f32 q0, q1", q0, q1, i32, 7); + TESTINSN_un("vrecpe.f32 q10, q11", q10, q11, i32, 1 << 31); + TESTINSN_un("vrecpe.f32 q0, q1", q0, q1, i32, (1U << 31) + 1); + TESTINSN_un("vrecpe.f32 q0, q1", q0, q1, i32, (1U << 31) - 1); + TESTINSN_un("vrecpe.f32 q0, q14", q0, q14, i32, 0x30a0bcef); + TESTINSN_un("vrecpe.f32 q0, q1", q0, q1, i32, 7); + TESTINSN_un("vrecpe.f32 q10, q11", q10, q11, i32, 1 << 31); + TESTINSN_un("vrecpe.f32 q0, q1", q0, q1, i32, (1U << 31) + 1); + TESTINSN_un("vrecpe.f32 q0, q1", q0, q1, i32, (1U << 31) - 1); + TESTINSN_un("vrecpe.f32 q0, q14", q0, q14, i32, 0x30a0bcef); + TESTINSN_un("vrecpe.f32 q0, q1", q0, q1, i32, f2u(NAN)); + TESTINSN_un("vrecpe.f32 q0, q1", q0, q1, i32, f2u(0.0)); + TESTINSN_un("vrecpe.f32 q0, q1", q0, q1, i32, f2u(INFINITY)); + TESTINSN_un("vrecpe.f32 q0, q1", q0, q1, i32, f2u(-INFINITY)); + TESTINSN_un("vrecpe.f32 q0, q1", q0, q1, i32, f2u(NAN)); + TESTINSN_un("vrecpe.f32 q0, q1", q0, q1, i32, f2u(0.0)); + TESTINSN_un("vrecpe.f32 q0, q1", q0, q1, i32, f2u(INFINITY)); + TESTINSN_un("vrecpe.f32 q0, q1", q0, q1, i32, f2u(-INFINITY)); + + printf("---- VRECPS ----\n"); + TESTINSN_bin("vrecps.f32 q0, q5, q2", q0, q5, i32, f2u(23.04), q2, i32, f2u(-45.5687)); + TESTINSN_bin("vrecps.f32 q3, q4, q5", q3, q4, i32, f2u(-347856.475), q5, i32, f2u(1346)); + TESTINSN_bin("vrecps.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(-45786.476)); + TESTINSN_bin("vrecps.f32 q9, q5, q7", q9, q5, i32, f2u(95867.76), q7, i32, f2u(17065)); + TESTINSN_bin("vrecps.f32 q0, q5, q2", q0, q5, i32, f2u(-45667.24), q2, i32, f2u(-248562.76)); + TESTINSN_bin("vrecps.f32 q3, q4, q5", q3, q4, i32, f2u(24), q5, i32, f2u(1346)); + TESTINSN_bin("vrecps.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(1089)); + TESTINSN_bin("vrecps.f32 q9, q5, q7", q9, q5, i32, f2u(214), q7, i32, f2u(1752065)); + TESTINSN_bin("vrecps.f32 q0, q11, q12", q0, q11, i32, f2u(356047.56), q12, i32, f2u(5867.009)); + TESTINSN_bin("vrecps.f32 q7, q1, q6", q7, q1, i32, f2u(34.00046), q6, i32, f2u(0.0024575)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(2754), q2, i32, f2u(107)); + TESTINSN_bin("vrecps.f32 q3, q4, q5", q3, q4, i32, f2u(874), q5, i32, f2u(1384.6)); + TESTINSN_bin("vrecps.f32 q10, q11, q2", q10, q11, i32, f2u(487.587), q2, i32, f2u(109)); + TESTINSN_bin("vrecps.f32 q9, q5, q7", q9, q5, i32, f2u(2146), q7, i32, f2u(1752)); + TESTINSN_bin("vrecps.f32 q0, q11, q12", q0, q11, i32, f2u(-56.25), q12, i32, f2u(-5786.47)); + TESTINSN_bin("vrecps.f32 q7, q1, q6", q7, q1, i32, f2u(456.2489562), q6, i32, f2u(-7.2945676)); + TESTINSN_bin("vrecps.f32 q0, q5, q2", q0, q5, i32, f2u(532.987), q2, i32, f2u(-0.0045876)); + TESTINSN_bin("vrecps.f32 q10, q13, q15", q10, q13, i32, f2u(-485.2457), q15, i32, f2u(-567.245)); + TESTINSN_bin("vrecps.f32 q10, q13, q15", q10, q13, i32, f2u(278456.45), q15, i32, f2u(8756.0076)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(876988654), q2, i32, f2u(1224808797)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(NAN)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(1.0)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(0.0)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(NAN)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(1.0)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(0.0)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vrecps.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(-INFINITY)); + + printf("---- VABS (fp) ----\n"); + TESTINSN_un("vabs.f32 q0, q1", q0, q1, i32, f2u(3.2)); + TESTINSN_un("vabs.f32 q10, q11", q10, q11, i32, f2u(3e22)); + TESTINSN_un("vabs.f32 q15, q4", q15, q4, i32, f2u(3e9)); + TESTINSN_un("vabs.f32 q15, q4", q15, q4, i32, f2u(-0.5)); + TESTINSN_un("vabs.f32 q15, q4", q15, q4, i32, f2u(-7.1)); + TESTINSN_un("vabs.f32 q12, q8", q12, q8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vabs.f32 q12, q8", q12, q8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vabs.f32 q0, q1", q0, q1, i32, f2u(3.2)); + TESTINSN_un("vabs.f32 q10, q11", q10, q11, i32, f2u(3e22)); + TESTINSN_un("vabs.f32 q15, q4", q15, q4, i32, f2u(3e9)); + TESTINSN_un("vabs.f32 q15, q4", q15, q4, i32, f2u(-0.5)); + TESTINSN_un("vabs.f32 q15, q4", q15, q4, i32, f2u(-7.1)); + TESTINSN_un("vabs.f32 q12, q8", q12, q8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vabs.f32 q12, q8", q12, q8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vabs.f32 q0, q1", q0, q1, i32, 7); + TESTINSN_un("vabs.f32 q10, q11", q10, q11, i32, 1 << 31); + TESTINSN_un("vabs.f32 q0, q1", q0, q1, i32, (1U << 31) + 1); + TESTINSN_un("vabs.f32 q0, q1", q0, q1, i32, (1U << 31) - 1); + TESTINSN_un("vabs.f32 q0, q14", q0, q14, i32, 0x30a0bcef); + TESTINSN_un("vabs.f32 q0, q1", q0, q1, i32, 7); + TESTINSN_un("vabs.f32 q10, q11", q10, q11, i32, 1 << 31); + TESTINSN_un("vabs.f32 q0, q1", q0, q1, i32, (1U << 31) + 1); + TESTINSN_un("vabs.f32 q0, q1", q0, q1, i32, (1U << 31) - 1); + TESTINSN_un("vabs.f32 q0, q14", q0, q14, i32, 0x30a0bcef); + TESTINSN_un("vabs.f32 q0, q1", q0, q1, i32, f2u(NAN)); + TESTINSN_un("vabs.f32 q0, q1", q0, q1, i32, f2u(0.0)); + TESTINSN_un("vabs.f32 q0, q1", q0, q1, i32, f2u(INFINITY)); + TESTINSN_un("vabs.f32 q0, q1", q0, q1, i32, f2u(-INFINITY)); + TESTINSN_un("vabs.f32 q0, q1", q0, q1, i32, f2u(NAN)); + TESTINSN_un("vabs.f32 q0, q1", q0, q1, i32, f2u(0.0)); + TESTINSN_un("vabs.f32 q0, q1", q0, q1, i32, f2u(INFINITY)); + TESTINSN_un("vabs.f32 q0, q1", q0, q1, i32, f2u(-INFINITY)); + + printf("---- VCGT (fp) ----\n"); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(0.5), q2, i32, f2u(-0.5)); + TESTINSN_bin("vcgt.f32 q2, q15, q12", q2, q15, i32, f2u(-0.53), q12, i32, f2u(0.52)); + TESTINSN_bin("vcgt.f32 q15, q7, q8", q15, q7, i32, f2u(231.45), q7, i32, f2u(231.45)); + TESTINSN_bin("vcgt.f32 q0, q5, q2", q0, q5, i32, f2u(23.04), q2, i32, f2u(-45.5687)); + TESTINSN_bin("vcgt.f32 q3, q4, q5", q3, q4, i32, f2u(-347856.475), q5, i32, f2u(1346)); + TESTINSN_bin("vcgt.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(-45786.476)); + TESTINSN_bin("vcgt.f32 q9, q5, q7", q9, q5, i32, f2u(95867.76), q7, i32, f2u(17065)); + TESTINSN_bin("vcgt.f32 q0, q5, q2", q0, q5, i32, f2u(-45667.24), q2, i32, f2u(-248562.76)); + TESTINSN_bin("vcgt.f32 q3, q4, q5", q3, q4, i32, f2u(24), q5, i32, f2u(1346)); + TESTINSN_bin("vcgt.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(1089)); + TESTINSN_bin("vcgt.f32 q9, q5, q7", q9, q5, i32, f2u(214), q7, i32, f2u(1752065)); + TESTINSN_bin("vcgt.f32 q0, q11, q12", q0, q11, i32, f2u(356047.56), q12, i32, f2u(5867.009)); + TESTINSN_bin("vcgt.f32 q7, q1, q6", q7, q1, i32, f2u(34.00046), q6, i32, f2u(0.0024575)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(2754), q2, i32, f2u(107)); + TESTINSN_bin("vcgt.f32 q3, q4, q5", q3, q4, i32, f2u(874), q5, i32, f2u(1384.6)); + TESTINSN_bin("vcgt.f32 q10, q11, q2", q10, q11, i32, f2u(487.587), q2, i32, f2u(109)); + TESTINSN_bin("vcgt.f32 q9, q5, q7", q9, q5, i32, f2u(2146), q7, i32, f2u(1752)); + TESTINSN_bin("vcgt.f32 q0, q11, q12", q0, q11, i32, f2u(-56.25), q12, i32, f2u(-5786.47)); + TESTINSN_bin("vcgt.f32 q7, q1, q6", q7, q1, i32, f2u(456.2489562), q6, i32, f2u(-7.2945676)); + TESTINSN_bin("vcgt.f32 q0, q5, q2", q0, q5, i32, f2u(532.987), q2, i32, f2u(-0.0045876)); + TESTINSN_bin("vcgt.f32 q10, q13, q15", q10, q13, i32, f2u(-485.2457), q15, i32, f2u(-567.245)); + TESTINSN_bin("vcgt.f32 q10, q13, q15", q10, q13, i32, f2u(278456.45), q15, i32, f2u(8756.0076)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(876988654), q2, i32, f2u(1224808797)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(0), q2, i32, f2u(0)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(1.0/1024.0), q2, i32, f2u(-1.0/1024.0)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(-1.0/1024.0), q2, i32, f2u(1.0/1024.0)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(2342+1.0/1024.0), q2, i32, f2u(2342-1.0/1024.0)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(-2342+1.0/1024.0), q2, i32, f2u(-2342-1.0/1024.0)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(89276+1.0/1024.0), q2, i32, f2u(89276+1.0/1024.0)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(NAN)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(1.0)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(0.0)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(NAN)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(1.0)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(0.0)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vcgt.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(-INFINITY)); + + printf("---- VCGE (fp) ----\n"); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(0.5), q2, i32, f2u(-0.5)); + TESTINSN_bin("vcge.f32 q2, q15, q12", q2, q15, i32, f2u(-0.53), q12, i32, f2u(0.52)); + TESTINSN_bin("vcge.f32 q15, q7, q8", q15, q7, i32, f2u(231.45), q7, i32, f2u(231.45)); + TESTINSN_bin("vcge.f32 q0, q5, q2", q0, q5, i32, f2u(23.04), q2, i32, f2u(-45.5687)); + TESTINSN_bin("vcge.f32 q3, q4, q5", q3, q4, i32, f2u(-347856.475), q5, i32, f2u(1346)); + TESTINSN_bin("vcge.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(-45786.476)); + TESTINSN_bin("vcge.f32 q9, q5, q7", q9, q5, i32, f2u(95867.76), q7, i32, f2u(17065)); + TESTINSN_bin("vcge.f32 q0, q5, q2", q0, q5, i32, f2u(-45667.24), q2, i32, f2u(-248562.76)); + TESTINSN_bin("vcge.f32 q3, q4, q5", q3, q4, i32, f2u(24), q5, i32, f2u(1346)); + TESTINSN_bin("vcge.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(1089)); + TESTINSN_bin("vcge.f32 q9, q5, q7", q9, q5, i32, f2u(214), q7, i32, f2u(1752065)); + TESTINSN_bin("vcge.f32 q0, q11, q12", q0, q11, i32, f2u(356047.56), q12, i32, f2u(5867.009)); + TESTINSN_bin("vcge.f32 q7, q1, q6", q7, q1, i32, f2u(34.00046), q6, i32, f2u(0.0024575)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(2754), q2, i32, f2u(107)); + TESTINSN_bin("vcge.f32 q3, q4, q5", q3, q4, i32, f2u(874), q5, i32, f2u(1384.6)); + TESTINSN_bin("vcge.f32 q10, q11, q2", q10, q11, i32, f2u(487.587), q2, i32, f2u(109)); + TESTINSN_bin("vcge.f32 q9, q5, q7", q9, q5, i32, f2u(2146), q7, i32, f2u(1752)); + TESTINSN_bin("vcge.f32 q0, q11, q12", q0, q11, i32, f2u(-56.25), q12, i32, f2u(-5786.47)); + TESTINSN_bin("vcge.f32 q7, q1, q6", q7, q1, i32, f2u(456.2489562), q6, i32, f2u(-7.2945676)); + TESTINSN_bin("vcge.f32 q0, q5, q2", q0, q5, i32, f2u(532.987), q2, i32, f2u(-0.0045876)); + TESTINSN_bin("vcge.f32 q10, q13, q15", q10, q13, i32, f2u(-485.2457), q15, i32, f2u(-567.245)); + TESTINSN_bin("vcge.f32 q10, q13, q15", q10, q13, i32, f2u(278456.45), q15, i32, f2u(8756.0076)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(876988654), q2, i32, f2u(1224808797)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(0), q2, i32, f2u(0)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(1.0/1024.0), q2, i32, f2u(-1.0/1024.0)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(-1.0/1024.0), q2, i32, f2u(1.0/1024.0)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(2342+1.0/1024.0), q2, i32, f2u(2342-1.0/1024.0)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(-2342+1.0/1024.0), q2, i32, f2u(-2342-1.0/1024.0)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(89276+1.0/1024.0), q2, i32, f2u(89276+1.0/1024.0)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(NAN)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(1.0)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(0.0)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(NAN)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(1.0)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(0.0)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vcge.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(-INFINITY)); + + printf("---- VACGT (fp) ----\n"); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(0.5), q2, i32, f2u(-0.5)); + TESTINSN_bin("vacgt.f32 q2, q15, q12", q2, q15, i32, f2u(-0.53), q12, i32, f2u(0.52)); + TESTINSN_bin("vacgt.f32 q15, q7, q8", q15, q7, i32, f2u(231.45), q7, i32, f2u(231.45)); + TESTINSN_bin("vacgt.f32 q0, q5, q2", q0, q5, i32, f2u(23.04), q2, i32, f2u(-45.5687)); + TESTINSN_bin("vacgt.f32 q3, q4, q5", q3, q4, i32, f2u(-347856.475), q5, i32, f2u(1346)); + TESTINSN_bin("vacgt.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(-45786.476)); + TESTINSN_bin("vacgt.f32 q9, q5, q7", q9, q5, i32, f2u(95867.76), q7, i32, f2u(17065)); + TESTINSN_bin("vacgt.f32 q0, q5, q2", q0, q5, i32, f2u(-45667.24), q2, i32, f2u(-248562.76)); + TESTINSN_bin("vacgt.f32 q3, q4, q5", q3, q4, i32, f2u(24), q5, i32, f2u(1346)); + TESTINSN_bin("vacgt.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(1089)); + TESTINSN_bin("vacgt.f32 q9, q5, q7", q9, q5, i32, f2u(214), q7, i32, f2u(1752065)); + TESTINSN_bin("vacgt.f32 q0, q11, q12", q0, q11, i32, f2u(356047.56), q12, i32, f2u(5867.009)); + TESTINSN_bin("vacgt.f32 q7, q1, q6", q7, q1, i32, f2u(34.00046), q6, i32, f2u(0.0024575)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(2754), q2, i32, f2u(107)); + TESTINSN_bin("vacgt.f32 q3, q4, q5", q3, q4, i32, f2u(874), q5, i32, f2u(1384.6)); + TESTINSN_bin("vacgt.f32 q10, q11, q2", q10, q11, i32, f2u(487.587), q2, i32, f2u(109)); + TESTINSN_bin("vacgt.f32 q9, q5, q7", q9, q5, i32, f2u(2146), q7, i32, f2u(1752)); + TESTINSN_bin("vacgt.f32 q0, q11, q12", q0, q11, i32, f2u(-56.25), q12, i32, f2u(-5786.47)); + TESTINSN_bin("vacgt.f32 q7, q1, q6", q7, q1, i32, f2u(456.2489562), q6, i32, f2u(-7.2945676)); + TESTINSN_bin("vacgt.f32 q0, q5, q2", q0, q5, i32, f2u(532.987), q2, i32, f2u(-0.0045876)); + TESTINSN_bin("vacgt.f32 q10, q13, q15", q10, q13, i32, f2u(-485.2457), q15, i32, f2u(-567.245)); + TESTINSN_bin("vacgt.f32 q10, q13, q15", q10, q13, i32, f2u(278456.45), q15, i32, f2u(8756.0076)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(876988654), q2, i32, f2u(1224808797)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(0), q2, i32, f2u(0)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(1.0/1024.0), q2, i32, f2u(-1.0/1024.0)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(-1.0/1024.0), q2, i32, f2u(1.0/1024.0)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(2342+1.0/1024.0), q2, i32, f2u(2342-1.0/1024.0)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(-2342+1.0/1024.0), q2, i32, f2u(-2342-1.0/1024.0)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(89276+1.0/1024.0), q2, i32, f2u(89276+1.0/1024.0)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(NAN)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(1.0)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(0.0)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(NAN)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(1.0)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(0.0)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vacgt.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(-INFINITY)); + + printf("---- VACGE (fp) ----\n"); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(0.5), q2, i32, f2u(-0.5)); + TESTINSN_bin("vacge.f32 q2, q15, q12", q2, q15, i32, f2u(-0.53), q12, i32, f2u(0.52)); + TESTINSN_bin("vacge.f32 q15, q7, q8", q15, q7, i32, f2u(231.45), q7, i32, f2u(231.45)); + TESTINSN_bin("vacge.f32 q0, q5, q2", q0, q5, i32, f2u(23.04), q2, i32, f2u(-45.5687)); + TESTINSN_bin("vacge.f32 q3, q4, q5", q3, q4, i32, f2u(-347856.475), q5, i32, f2u(1346)); + TESTINSN_bin("vacge.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(-45786.476)); + TESTINSN_bin("vacge.f32 q9, q5, q7", q9, q5, i32, f2u(95867.76), q7, i32, f2u(17065)); + TESTINSN_bin("vacge.f32 q0, q5, q2", q0, q5, i32, f2u(-45667.24), q2, i32, f2u(-248562.76)); + TESTINSN_bin("vacge.f32 q3, q4, q5", q3, q4, i32, f2u(24), q5, i32, f2u(1346)); + TESTINSN_bin("vacge.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(1089)); + TESTINSN_bin("vacge.f32 q9, q5, q7", q9, q5, i32, f2u(214), q7, i32, f2u(1752065)); + TESTINSN_bin("vacge.f32 q0, q11, q12", q0, q11, i32, f2u(356047.56), q12, i32, f2u(5867.009)); + TESTINSN_bin("vacge.f32 q7, q1, q6", q7, q1, i32, f2u(34.00046), q6, i32, f2u(0.0024575)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(2754), q2, i32, f2u(107)); + TESTINSN_bin("vacge.f32 q3, q4, q5", q3, q4, i32, f2u(874), q5, i32, f2u(1384.6)); + TESTINSN_bin("vacge.f32 q10, q11, q2", q10, q11, i32, f2u(487.587), q2, i32, f2u(109)); + TESTINSN_bin("vacge.f32 q9, q5, q7", q9, q5, i32, f2u(2146), q7, i32, f2u(1752)); + TESTINSN_bin("vacge.f32 q0, q11, q12", q0, q11, i32, f2u(-56.25), q12, i32, f2u(-5786.47)); + TESTINSN_bin("vacge.f32 q7, q1, q6", q7, q1, i32, f2u(456.2489562), q6, i32, f2u(-7.2945676)); + TESTINSN_bin("vacge.f32 q0, q5, q2", q0, q5, i32, f2u(532.987), q2, i32, f2u(-0.0045876)); + TESTINSN_bin("vacge.f32 q10, q13, q15", q10, q13, i32, f2u(-485.2457), q15, i32, f2u(-567.245)); + TESTINSN_bin("vacge.f32 q10, q13, q15", q10, q13, i32, f2u(278456.45), q15, i32, f2u(8756.0076)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(876988654), q2, i32, f2u(1224808797)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(0), q2, i32, f2u(0)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(1.0/1024.0), q2, i32, f2u(-1.0/1024.0)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(-1.0/1024.0), q2, i32, f2u(1.0/1024.0)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(2342+1.0/1024.0), q2, i32, f2u(2342-1.0/1024.0)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(-2342+1.0/1024.0), q2, i32, f2u(-2342-1.0/1024.0)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(89276+1.0/1024.0), q2, i32, f2u(89276+1.0/1024.0)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(NAN)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(1.0)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(0.0)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(NAN)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(1.0)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(0.0)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vacge.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(-INFINITY)); + + printf("---- VCEQ (fp) ----\n"); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(0.5), q2, i32, f2u(-0.5)); + TESTINSN_bin("vceq.f32 q2, q15, q12", q2, q15, i32, f2u(-0.53), q12, i32, f2u(0.52)); + TESTINSN_bin("vceq.f32 q15, q7, q8", q15, q7, i32, f2u(231.45), q7, i32, f2u(231.45)); + TESTINSN_bin("vceq.f32 q0, q5, q2", q0, q5, i32, f2u(23.04), q2, i32, f2u(-45.5687)); + TESTINSN_bin("vceq.f32 q3, q4, q5", q3, q4, i32, f2u(-347856.475), q5, i32, f2u(1346)); + TESTINSN_bin("vceq.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(-45786.476)); + TESTINSN_bin("vceq.f32 q9, q5, q7", q9, q5, i32, f2u(95867.76), q7, i32, f2u(17065)); + TESTINSN_bin("vceq.f32 q0, q5, q2", q0, q5, i32, f2u(-45667.24), q2, i32, f2u(-248562.76)); + TESTINSN_bin("vceq.f32 q3, q4, q5", q3, q4, i32, f2u(24), q5, i32, f2u(1346)); + TESTINSN_bin("vceq.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(1089)); + TESTINSN_bin("vceq.f32 q9, q5, q7", q9, q5, i32, f2u(214), q7, i32, f2u(1752065)); + TESTINSN_bin("vceq.f32 q0, q11, q12", q0, q11, i32, f2u(356047.56), q12, i32, f2u(5867.009)); + TESTINSN_bin("vceq.f32 q7, q1, q6", q7, q1, i32, f2u(34.00046), q6, i32, f2u(0.0024575)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(2754), q2, i32, f2u(107)); + TESTINSN_bin("vceq.f32 q3, q4, q5", q3, q4, i32, f2u(874), q5, i32, f2u(1384.6)); + TESTINSN_bin("vceq.f32 q10, q11, q2", q10, q11, i32, f2u(487.587), q2, i32, f2u(109)); + TESTINSN_bin("vceq.f32 q9, q5, q7", q9, q5, i32, f2u(2146), q7, i32, f2u(1752)); + TESTINSN_bin("vceq.f32 q0, q11, q12", q0, q11, i32, f2u(-56.25), q12, i32, f2u(-5786.47)); + TESTINSN_bin("vceq.f32 q7, q1, q6", q7, q1, i32, f2u(456.2489562), q6, i32, f2u(-7.2945676)); + TESTINSN_bin("vceq.f32 q0, q5, q2", q0, q5, i32, f2u(532.987), q2, i32, f2u(-0.0045876)); + TESTINSN_bin("vceq.f32 q10, q13, q15", q10, q13, i32, f2u(-485.2457), q15, i32, f2u(-567.245)); + TESTINSN_bin("vceq.f32 q10, q13, q15", q10, q13, i32, f2u(278456.45), q15, i32, f2u(8756.0076)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(876988654), q2, i32, f2u(1224808797)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(0), q2, i32, f2u(0)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(1.0/1024.0), q2, i32, f2u(-1.0/1024.0)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(-1.0/1024.0), q2, i32, f2u(1.0/1024.0)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(2342+1.0/1024.0), q2, i32, f2u(2342-1.0/1024.0)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(-2342+1.0/1024.0), q2, i32, f2u(-2342-1.0/1024.0)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(89276+1.0/1024.0), q2, i32, f2u(89276+1.0/1024.0)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(NAN)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(1.0)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(0.0)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(NAN)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(1.0)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(0.0)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vceq.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(-INFINITY)); + + printf("---- VCEQ (fp) #0 ----\n"); + TESTINSN_un("vceq.f32 q0, q1, #0", q0, q1, i32, 0x01000000); + TESTINSN_un("vceq.f32 q0, q1, #0", q0, q1, i32, 0x1); + TESTINSN_un("vceq.f32 q2, q1, #0", q2, q1, i32, 1 << 31); + TESTINSN_un("vceq.f32 q2, q1, #0", q2, q1, i32, f2u(23.04)); + TESTINSN_un("vceq.f32 q2, q1, #0", q2, q1, i32, f2u(-23.04)); + TESTINSN_un("vceq.f32 q10, q15, #0", q10, q15, i32, 0x0); + TESTINSN_un("vceq.f32 q0, q1, #0", q0, q1, i32, f2u(NAN)); + TESTINSN_un("vceq.f32 q0, q1, #0", q0, q1, i32, f2u(0.0)); + TESTINSN_un("vceq.f32 q0, q1, #0", q0, q1, i32, f2u(INFINITY)); + TESTINSN_un("vceq.f32 q0, q1, #0", q0, q1, i32, f2u(-INFINITY)); + + printf("---- VCGT (fp) #0 ----\n"); + TESTINSN_un("vcgt.f32 q0, q1, #0", q0, q1, i32, 0x01000000); + TESTINSN_un("vcgt.f32 q0, q1, #0", q0, q1, i32, 0x1); + TESTINSN_un("vcgt.f32 q2, q1, #0", q2, q1, i32, 1 << 31); + TESTINSN_un("vcgt.f32 q2, q1, #0", q2, q1, i32, f2u(23.04)); + TESTINSN_un("vcgt.f32 q2, q1, #0", q2, q1, i32, f2u(-23.04)); + TESTINSN_un("vcgt.f32 q10, q15, #0", q10, q15, i32, 0x0); + TESTINSN_un("vcgt.f32 q0, q1, #0", q0, q1, i32, f2u(NAN)); + TESTINSN_un("vcgt.f32 q0, q1, #0", q0, q1, i32, f2u(0.0)); + TESTINSN_un("vcgt.f32 q0, q1, #0", q0, q1, i32, f2u(INFINITY)); + TESTINSN_un("vcgt.f32 q0, q1, #0", q0, q1, i32, f2u(-INFINITY)); + + printf("---- VCLT (fp) #0 ----\n"); + TESTINSN_un("vclt.f32 q0, q1, #0", q0, q1, i32, 0x01000000); + TESTINSN_un("vclt.f32 q0, q1, #0", q0, q1, i32, 0x1); + TESTINSN_un("vclt.f32 q2, q1, #0", q2, q1, i32, 1 << 31); + TESTINSN_un("vclt.f32 q2, q1, #0", q2, q1, i32, f2u(23.04)); + TESTINSN_un("vclt.f32 q2, q1, #0", q2, q1, i32, f2u(-23.04)); + TESTINSN_un("vclt.f32 q10, q15, #0", q10, q15, i32, 0x0); + TESTINSN_un("vclt.f32 q0, q1, #0", q0, q1, i32, f2u(NAN)); + TESTINSN_un("vclt.f32 q0, q1, #0", q0, q1, i32, f2u(0.0)); + TESTINSN_un("vclt.f32 q0, q1, #0", q0, q1, i32, f2u(INFINITY)); + TESTINSN_un("vclt.f32 q0, q1, #0", q0, q1, i32, f2u(-INFINITY)); + + printf("---- VCGE (fp) #0 ----\n"); + TESTINSN_un("vcge.f32 q0, q1, #0", q0, q1, i32, 0x01000000); + TESTINSN_un("vcge.f32 q0, q1, #0", q0, q1, i32, 0x1); + TESTINSN_un("vcge.f32 q2, q1, #0", q2, q1, i32, 1 << 31); + TESTINSN_un("vcge.f32 q2, q1, #0", q2, q1, i32, f2u(23.04)); + TESTINSN_un("vcge.f32 q2, q1, #0", q2, q1, i32, f2u(-23.04)); + TESTINSN_un("vcge.f32 q10, q15, #0", q10, q15, i32, 0x0); + TESTINSN_un("vcge.f32 q0, q1, #0", q0, q1, i32, f2u(NAN)); + TESTINSN_un("vcge.f32 q0, q1, #0", q0, q1, i32, f2u(0.0)); + TESTINSN_un("vcge.f32 q0, q1, #0", q0, q1, i32, f2u(INFINITY)); + TESTINSN_un("vcge.f32 q0, q1, #0", q0, q1, i32, f2u(-INFINITY)); + + printf("---- VCLE (fp) #0 ----\n"); + TESTINSN_un("vcle.f32 q0, q1, #0", q0, q1, i32, 0x01000000); + TESTINSN_un("vcle.f32 q0, q1, #0", q0, q1, i32, 0x1); + TESTINSN_un("vcle.f32 q2, q1, #0", q2, q1, i32, 1 << 31); + TESTINSN_un("vcle.f32 q2, q1, #0", q2, q1, i32, f2u(23.04)); + TESTINSN_un("vcle.f32 q2, q1, #0", q2, q1, i32, f2u(-23.04)); + TESTINSN_un("vcle.f32 q10, q15, #0", q10, q15, i32, 0x0); + TESTINSN_un("vcle.f32 q0, q1, #0", q0, q1, i32, f2u(NAN)); + TESTINSN_un("vcle.f32 q0, q1, #0", q0, q1, i32, f2u(0.0)); + TESTINSN_un("vcle.f32 q0, q1, #0", q0, q1, i32, f2u(INFINITY)); + TESTINSN_un("vcle.f32 q0, q1, #0", q0, q1, i32, f2u(-INFINITY)); + + printf("---- VNEG (fp) ----\n"); + TESTINSN_un("vneg.f32 q0, q1", q0, q1, i32, 0x01000000); + TESTINSN_un("vneg.f32 q0, q1", q0, q1, i32, 0x1); + TESTINSN_un("vneg.f32 q2, q1", q2, q1, i32, 1 << 31); + TESTINSN_un("vneg.f32 q2, q1", q2, q1, i32, f2u(23.04)); + TESTINSN_un("vneg.f32 q2, q1", q2, q1, i32, f2u(-23.04)); + TESTINSN_un("vneg.f32 q10, q15", q10, q15, i32, 0x0); + TESTINSN_un("vneg.f32 q0, q1", q0, q1, i32, f2u(NAN)); + TESTINSN_un("vneg.f32 q0, q1", q0, q1, i32, f2u(0.0)); + TESTINSN_un("vneg.f32 q0, q1", q0, q1, i32, f2u(INFINITY)); + TESTINSN_un("vneg.f32 q0, q1", q0, q1, i32, f2u(-INFINITY)); + + printf("---- VRSQRTS ----\n"); + TESTINSN_bin("vrsqrts.f32 q0, q5, q2", q0, q5, i32, f2u(23.04), q2, i32, f2u(-45.5687)); + TESTINSN_bin("vrsqrts.f32 q3, q4, q5", q3, q4, i32, f2u(-347856.475), q5, i32, f2u(1346)); + TESTINSN_bin("vrsqrts.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(-45786.476)); + TESTINSN_bin("vrsqrts.f32 q9, q5, q7", q9, q5, i32, f2u(95867.76), q7, i32, f2u(17065)); + TESTINSN_bin("vrsqrts.f32 q0, q5, q2", q0, q5, i32, f2u(-45667.24), q2, i32, f2u(-248562.76)); + TESTINSN_bin("vrsqrts.f32 q3, q4, q5", q3, q4, i32, f2u(24), q5, i32, f2u(1346)); + TESTINSN_bin("vrsqrts.f32 q10, q11, q2", q10, q11, i32, f2u(48755), q2, i32, f2u(1089)); + TESTINSN_bin("vrsqrts.f32 q9, q5, q7", q9, q5, i32, f2u(214), q7, i32, f2u(1752065)); + TESTINSN_bin("vrsqrts.f32 q0, q11, q12", q0, q11, i32, f2u(356047.56), q12, i32, f2u(5867.009)); + TESTINSN_bin("vrsqrts.f32 q7, q1, q6", q7, q1, i32, f2u(34.00046), q6, i32, f2u(0.0024575)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(2754), q2, i32, f2u(107)); + TESTINSN_bin("vrsqrts.f32 q3, q4, q5", q3, q4, i32, f2u(874), q5, i32, f2u(1384.6)); + TESTINSN_bin("vrsqrts.f32 q10, q11, q2", q10, q11, i32, f2u(487.587), q2, i32, f2u(109)); + TESTINSN_bin("vrsqrts.f32 q9, q5, q7", q9, q5, i32, f2u(2146), q7, i32, f2u(1752)); + TESTINSN_bin("vrsqrts.f32 q0, q11, q12", q0, q11, i32, f2u(-56.25), q12, i32, f2u(-5786.47)); + TESTINSN_bin("vrsqrts.f32 q7, q1, q6", q7, q1, i32, f2u(456.2489562), q6, i32, f2u(-7.2945676)); + TESTINSN_bin("vrsqrts.f32 q0, q5, q2", q0, q5, i32, f2u(532.987), q2, i32, f2u(-0.0045876)); + TESTINSN_bin("vrsqrts.f32 q10, q13, q15", q10, q13, i32, f2u(-485.2457), q15, i32, f2u(-567.245)); + TESTINSN_bin("vrsqrts.f32 q10, q13, q15", q10, q13, i32, f2u(278456.45), q15, i32, f2u(8756.0076)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(876988654), q2, i32, f2u(1224808797)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(NAN)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(1.0)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(0.0)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(NAN), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(NAN)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(1.0)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(0.0)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(0.0), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(INFINITY), q2, i32, f2u(-INFINITY)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(NAN)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(1.0)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(0.0)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(INFINITY)); + TESTINSN_bin("vrsqrts.f32 q0, q1, q2", q0, q1, i32, f2u(-INFINITY), q2, i32, f2u(-INFINITY)); + + printf("---- VRSQRTE (fp) ----\n"); + TESTINSN_un("vrsqrte.f32 q0, q1", q0, q1, i32, f2u(3.2)); + TESTINSN_un("vrsqrte.f32 q10, q11", q10, q11, i32, f2u(3e22)); + TESTINSN_un("vrsqrte.f32 q15, q4", q15, q4, i32, f2u(3e9)); + TESTINSN_un("vrsqrte.f32 q15, q4", q15, q4, i32, f2u(-0.5)); + TESTINSN_un("vrsqrte.f32 q15, q4", q15, q4, i32, f2u(-7.1)); + TESTINSN_un("vrsqrte.f32 q12, q8", q12, q8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vrsqrte.f32 q12, q8", q12, q8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vrsqrte.f32 q0, q1", q0, q1, i32, f2u(3.2)); + TESTINSN_un("vrsqrte.f32 q10, q11", q10, q11, i32, f2u(3e22)); + TESTINSN_un("vrsqrte.f32 q15, q4", q15, q4, i32, f2u(3e9)); + TESTINSN_un("vrsqrte.f32 q15, q4", q15, q4, i32, f2u(-0.5)); + TESTINSN_un("vrsqrte.f32 q15, q4", q15, q4, i32, f2u(-7.1)); + TESTINSN_un("vrsqrte.f32 q12, q8", q12, q8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vrsqrte.f32 q12, q8", q12, q8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vrsqrte.f32 q0, q1", q0, q1, i32, 7); + TESTINSN_un("vrsqrte.f32 q10, q11", q10, q11, i32, 1 << 31); + TESTINSN_un("vrsqrte.f32 q0, q1", q0, q1, i32, (1U << 31) + 1); + TESTINSN_un("vrsqrte.f32 q0, q1", q0, q1, i32, (1U << 31) - 1); + TESTINSN_un("vrsqrte.f32 q0, q14", q0, q14, i32, 0x30a0bcef); + TESTINSN_un("vrsqrte.f32 q0, q1", q0, q1, i32, 7); + TESTINSN_un("vrsqrte.f32 q10, q11", q10, q11, i32, 1 << 31); + TESTINSN_un("vrsqrte.f32 q0, q1", q0, q1, i32, (1U << 31) + 1); + TESTINSN_un("vrsqrte.f32 q0, q1", q0, q1, i32, (1U << 31) - 1); + TESTINSN_un("vrsqrte.f32 q0, q14", q0, q14, i32, 0x30a0bcef); + TESTINSN_un("vrsqrte.f32 q0, q1", q0, q1, i32, f2u(NAN)); + TESTINSN_un("vrsqrte.f32 q0, q1", q0, q1, i32, f2u(0.0)); + TESTINSN_un("vrsqrte.f32 q0, q1", q0, q1, i32, f2u(INFINITY)); + TESTINSN_un("vrsqrte.f32 q0, q1", q0, q1, i32, f2u(-INFINITY)); + + return 0; +} diff --git a/none/tests/arm/neon64.c b/none/tests/arm/neon64.c new file mode 100644 index 0000000000..e826c16637 --- /dev/null +++ b/none/tests/arm/neon64.c @@ -0,0 +1,3634 @@ + +/* How to compile: + + gcc -O -g -Wall -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp \ + -marm -o neon64-a neon64.c + + or + + gcc -O -g -Wall -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp \ + -mthumb -o neon64-t neon64.c + +*/ + +#include +#include +#include + +#ifndef __thumb__ +// ARM +#define MOVE_to_FPSCR_from_R4 \ + ".word 0xEEE14A10 @ vmsr FPSCR, r4\n\t" +#define MOVE_to_R4_from_FPSCR \ + ".word 0xEEF14A10 @ vmrs r4, FPSCR\n\t" +#endif + +#ifdef __thumb__ +// Thumb +#define MOVE_to_FPSCR_from_R4 \ + ".word 0x4A10EEE1 @ vmsr FPSCR, r4\n\t" +#define MOVE_to_R4_from_FPSCR \ + ".word 0x4A10EEF1 @ vmrs r4, FPSCR\n\t" +#endif + +static inline unsigned int f2u(float x) { + union { + float f; + unsigned int u; + } cvt; + cvt.f = x; + return cvt.u; +} + +/* test macros to generate and output the result of a single instruction */ + +const unsigned int mem[] = { + 0x121f1e1f, 0x131b1a1b, 0x141c1f1c, 0x151d191d, + 0x232f2e2f, 0x242c2b2b, 0x252a2e2b, 0x262d2d2a, + 0x3f343f3e, 0x3e353d3c, 0x363a3c3b, 0x3b373b3a, + 0x454f4e45, 0x4e464d46, 0x474d474c, 0x4a484a4c +}; + +#define TESTINSN_imm(instruction, QD, imm) \ +{ \ + unsigned int out[2]; \ +\ + __asm__ volatile( \ + "vmov.i8 " #QD ", #0x55" "\n\t" \ + instruction ", #" #imm "\n\t" \ + "vstmia %0, {" #QD "}\n\t" \ + : \ + : "r" (out) \ + : #QD, "memory" \ + ); \ + printf("%s, #" #imm " :: Qd 0x%08x 0x%08x\n", \ + instruction, out[1], out[0]); \ +} + +#define TESTINSN_un(instruction, QD, QM, QMtype, QMval) \ +{ \ + unsigned int out[2]; \ +\ + __asm__ volatile( \ + "vmov.i8 " #QD ", #0x55" "\n\t" \ + "vdup." #QMtype " " #QM ", %1\n\t" \ + instruction "\n\t" \ + "vstmia %0, {" #QD "}\n\t" \ + : \ + : "r" (out), "r" (QMval) \ + : #QD, #QM, "memory" \ + ); \ + printf("%s :: Qd 0x%08x 0x%08x Qm (" #QMtype ")0x%08x\n", \ + instruction, out[1], out[0], QMval); \ +} + +#define TESTINSN_un_q(instruction, QD, QM, QMtype, QMval) \ +{ \ + unsigned int out[2]; \ + unsigned int fpscr; \ +\ + __asm__ volatile( \ + "vmov.i8 " #QD ", #0x55" "\n\t" \ + "mov r4, #0\n\t" \ + MOVE_to_FPSCR_from_R4 \ + "vdup." #QMtype " " #QM ", %2\n\t" \ + instruction "\n\t" \ + "vstmia %1, {" #QD "}\n\t" \ + MOVE_to_R4_from_FPSCR \ + "mov %0, r4" \ + : "=r" (fpscr) \ + : "r" (out), "r" (QMval) \ + : #QD, #QM, "memory", "r4" \ + ); \ + printf("%s :: Qd 0x%08x 0x%08x Qm (" #QMtype ")0x%08x fpscr %08x\n", \ + instruction, out[1], out[0], QMval, fpscr); \ +} + +#define TESTINSN_core_to_scalar(instruction, QD, QM, QMval) \ +{ \ + unsigned int out[2]; \ +\ + __asm__ volatile( \ + "vmov.i8 " #QD ", #0x55" "\n\t" \ + "mov " #QM ", %1\n\t" \ + instruction "\n\t" \ + "vstmia %0, {" #QD "}\n\t" \ + : \ + : "r" (out), "r" (QMval) \ + : #QD, #QM, "memory" \ + ); \ + printf("%s :: Qd 0x%08x 0x%08x Qm 0x%08x\n", \ + instruction, out[1], out[0], QMval); \ +} + +#define TESTINSN_scalar_to_core(instruction, QD, QM, QMtype, QMval) \ +{ \ + unsigned int out[2]; \ +\ + __asm__ volatile( \ + "mov " #QD ", #0x55" "\n\t" \ + "vdup." #QMtype " " #QM ", %1\n\t" \ + instruction "\n\t" \ + "str " #QD ", [%0]\n\t" \ + : \ + : "r" (out), "r" (QMval) \ + : #QD, #QM, "memory" \ + ); \ + printf("%s :: Rd 0x%08x Qm (" #QMtype ")0x%08x\n", \ + instruction, out[0], QMval); \ +} + +#define TESTINSN_VLDn(instruction, QD1, QD2, QD3, QD4) \ +{ \ + unsigned int out[8]; \ +\ + __asm__ volatile( \ + "vmov.i8 " #QD1 ", #0x55" "\n\t" \ + "vmov.i8 " #QD2 ", #0x55" "\n\t" \ + "vmov.i8 " #QD3 ", #0x55" "\n\t" \ + "vmov.i8 " #QD4 ", #0x55" "\n\t" \ + instruction ", [%1]\n\t" \ + "mov r4, %0\n\t" \ + "vstmia %0!, {" #QD1 "}\n\t" \ + "vstmia %0!, {" #QD2 "}\n\t" \ + "vstmia %0!, {" #QD3 "}\n\t" \ + "vstmia %0!, {" #QD4 "}\n\t" \ + "mov %0, r4\n\t" \ + : \ + : "r" (out), "r" (mem) \ + : #QD1, #QD2, #QD3, #QD4, "memory", "r4" \ + ); \ + printf("%s :: Result 0x%08x 0x%08x 0x%08x 0x%08x "\ + "0x%08x 0x%08x 0x%08x 0x%08x\n", \ + instruction, out[0], out[1], out[2], out[3], out[4],\ + out[5], out[6], out[7]); \ +} + +#define TESTINSN_VSTn(instruction, QD1, QD2, QD3, QD4) \ +{ \ + unsigned int out[8]; \ +\ + memset(out, 0x55, 8 * (sizeof(unsigned int)));\ + __asm__ volatile( \ + "mov r4, %1\n\t" \ + "vldmia %1!, {" #QD1 "}\n\t" \ + "vldmia %1!, {" #QD2 "}\n\t" \ + "vldmia %1!, {" #QD3 "}\n\t" \ + "vldmia %1!, {" #QD4 "}\n\t" \ + "mov %1, r4\n\t" \ + instruction ", [%0]\n\t" \ + : \ + : "r" (out), "r" (mem) \ + : #QD1, #QD2, #QD3, #QD4, "memory", "r4" \ + ); \ + printf("%s :: Result 0x%08x 0x%08x 0x%08x 0x%08x "\ + "0x%08x 0x%08x 0x%08x 0x%08x\n", \ + instruction, out[0], out[1], out[2], out[3], out[4],\ + out[5], out[6], out[7]); \ +} + +#define TESTINSN_bin(instruction, QD, QM, QMtype, QMval, QN, QNtype, QNval) \ +{ \ + unsigned int out[2]; \ +\ + __asm__ volatile( \ + "vmov.i8 " #QD ", #0x55" "\n\t" \ + "vdup." #QMtype " " #QM ", %1\n\t" \ + "vdup." #QNtype " " #QN ", %2\n\t" \ + instruction "\n\t" \ + "vstmia %0, {" #QD "}\n\t" \ + : \ + : "r" (out), "r" (QMval), "r" (QNval) \ + : #QD, #QM, #QN, "memory" \ + ); \ + printf("%s :: Qd 0x%08x 0x%08x Qm (" #QMtype ")0x%08x" \ + " Qn (" #QNtype ")0x%08x\n", \ + instruction, out[1], out[0], QMval, QNval); \ +} + +#define TESTINSN_bin_f(instruction, QD, QM, QMtype, QMval, QN, QNtype, QNval) \ +{ \ + unsigned int out[2]; \ +\ + __asm__ volatile( \ + "vdup.i32 " #QD ", %3\n\t" \ + "vdup." #QMtype " " #QM ", %1\n\t" \ + "vdup." #QNtype " " #QN ", %2\n\t" \ + instruction "\n\t" \ + "vstmia %0, {" #QD "}\n\t" \ + : \ + : "r" (out), "r" (QMval), "r" (QNval), "r"(0x3f800000) \ + : #QD, #QM, #QN, "memory" \ + ); \ + printf("%s :: Qd 0x%08x 0x%08x Qm (" #QMtype ")0x%08x" \ + " Qn (" #QNtype ")0x%08x\n", \ + instruction, out[1], out[0], QMval, QNval); \ +} + +#define TESTINSN_tbl(instruction, QD, QM, QMtype, QMval, QN1, QN1type, QN1val, \ + QN2, QN2type, QN2val, QN3, QN3type, QN3val, QN4, QN4type, QN4val) \ +{ \ + unsigned int out[2]; \ +\ + __asm__ volatile( \ + "vmov.i8 " #QD ", #0x55" "\n\t" \ + "vdup." #QMtype " " #QM ", %1\n\t" \ + "vdup." #QN1type " " #QN1 ", %2\n\t" \ + "vdup." #QN2type " " #QN2 ", %3\n\t" \ + "vdup." #QN3type " " #QN3 ", %4\n\t" \ + "vdup." #QN4type " " #QN4 ", %5\n\t" \ + instruction "\n\t" \ + "vstmia %0, {" #QD "}\n\t" \ + : \ + : "r" (out), "r" (QMval), "r" (QN1val), "r" (QN2val), "r" (QN3val), \ + "r" (QN4val) \ + : #QD, #QM, #QN1, #QN2, #QN3, #QN4, "memory" \ + ); \ + printf("%s :: Qd 0x%08x 0x%08x Qm (" #QMtype ")0x%08x" \ + " Qn1 (" #QN1type ")0x%08x" \ + " Qn2 (" #QN2type ")0x%08x" \ + " Qn3 (" #QN3type ")0x%08x" \ + " Qn4 (" #QN4type ")0x%08x\n", \ + instruction, out[1], out[0], QMval, QN1val, QN2val, QN3val, QN4val); \ +} +#define TESTINSN_tbl_1(instruction, QD, QM, QMtype, QMval, QN1, QN1type, QN1val) \ + TESTINSN_tbl(instruction, QD, QM, QMtype, QMval, QN1, QN1type, QN1val, \ + QN1, QN1type, QN1val, QN1, QN1type, QN1val, QN1, QN1type, QN1val) +#define TESTINSN_tbl_2(instruction, QD, QM, QMtype, QMval, QN1, QN1type, QN1val, \ + QN2, QN2type, QN2val) \ + TESTINSN_tbl(instruction, QD, QM, QMtype, QMval, QN1, QN1type, QN1val, \ + QN2, QN2type, QN2val, QN1, QN1type, QN1val, QN2, QN2type, QN2val) +#define TESTINSN_tbl_3(instruction, QD, QM, QMtype, QMval, QN1, QN1type, QN1val, \ + QN2, QN2type, QN2val, QN3, QN3type, QN3val) \ + TESTINSN_tbl(instruction, QD, QM, QMtype, QMval, QN1, QN1type, QN1val, \ + QN2, QN2type, QN2val, QN3, QN3type, QN3val, QN2, QN2type, QN2val) +#define TESTINSN_tbl_4(instruction, QD, QM, QMtype, QMval, QN1, QN1type, QN1val, \ + QN2, QN2type, QN2val, QN3, QN3type, QN3val, QN4, QN4type, QN4val) \ + TESTINSN_tbl(instruction, QD, QM, QMtype, QMval, QN1, QN1type, QN1val, \ + QN2, QN2type, QN2val, QN3, QN3type, QN3val, QN4, QN4type, QN4val) + +#define TESTINSN_bin_q(instruction, QD, QM, QMtype, QMval, QN, QNtype, QNval) \ +{ \ + unsigned int out[2]; \ + unsigned int fpscr; \ +\ + __asm__ volatile( \ + "vmov.i8 " #QD ", #0x55" "\n\t" \ + "mov r4, #0\n\t" \ + MOVE_to_FPSCR_from_R4 \ + "vdup." #QMtype " " #QM ", %2\n\t" \ + "vdup." #QNtype " " #QN ", %3\n\t" \ + instruction "\n\t" \ + "vstmia %1, {" #QD "}\n\t" \ + MOVE_to_R4_from_FPSCR \ + "mov %0, r4" \ + : "=r" (fpscr) \ + : "r" (out), "r" (QMval), "r" (QNval) \ + : #QD, #QM, #QN, "memory", "r4" \ + ); \ + printf("%s :: Qd 0x%08x 0x%08x Qm (" #QMtype ")0x%08x" \ + " Qn (" #QNtype ")0x%08x fpscr: %08x\n", \ + instruction, out[1], out[0], QMval, QNval, fpscr); \ +} + +#define TESTINSN_dual(instruction, QM, QMtype, QMval, QN, QNtype, QNval) \ +{ \ + unsigned int out1[2]; \ + unsigned int out2[2]; \ +\ + __asm__ volatile( \ + "vdup." #QMtype " " #QM ", %2\n\t" \ + "vdup." #QNtype " " #QN ", %3\n\t" \ + instruction "\n\t" \ + "vstmia %0, {" #QM "}\n\t" \ + "vstmia %1, {" #QN "}\n\t" \ + : \ + : "r" (out1), "r" (out2), "r" (QMval), "r" (QNval) \ + : #QM, #QN, "memory" \ + ); \ + printf("%s :: Qm 0x%08x 0x%08x Qn 0x%08x 0x%08x Qm (" #QMtype ")0x%08x" \ + " Qn (" #QNtype ")0x%08x\n", \ + instruction, out1[1], out1[0], out2[1], out2[0], QMval, QNval); \ +} + +// Ditto TESTING_bin(), but in QD all zeros +#define TESTINSN_bin_0s(instruction, QD, QM, QMtype, QMval, QN, QNtype, QNval) \ +{ \ + unsigned int out[2]; \ +\ + __asm__ volatile( \ + "vmov.i8 " #QD ", #0x00" "\n\t" \ + "vdup." #QMtype " " #QM ", %1\n\t" \ + "vdup." #QNtype " " #QN ", %2\n\t" \ + instruction "\n\t" \ + "vstmia %0, {" #QD "}\n\t" \ + : \ + : "r" (out), "r" (QMval), "r" (QNval) \ + : #QD, #QM, #QN, "memory" \ + ); \ + printf("%s :: Qd 0x%08x 0x%08x Qm (" #QMtype ")0x%08x" \ + " Qn (" #QNtype ")0x%08x\n", \ + instruction, out[1], out[0], QMval, QNval); \ +} + +#if 0 +#define TESTINSN_2reg_shift(instruction, QD, QM, QMtype, QMval, imm) \ +{ \ + unsigned int out[2]; \ +\ + __asm__ volatile( \ + "vmov.i8 " #QD ", #0x55" "\n\t" \ + "vdup." #QMtype " " #QM ", %1\n\t" \ + instruction ", #" #imm "\n\t" \ + "vstmia %0, {" #QD "}\n\t" \ + : \ + : "r" (out), "r" (QMval) \ + : #QD, #QM, "memory" \ + ); \ + printf("%s, #" #imm " :: Qd 0x%08x 0x%08x Qm (" #QMtype ")0x%08x", \ + instruction, out[1], out[0], QMval); \ +} +#endif + +int main(int argc, char **argv) +{ + printf("----- VMOV (immediate) -----\n"); + TESTINSN_imm("vmov.i32 d0", d0, 0x7); + TESTINSN_imm("vmov.i16 d1", d1, 0x7); + TESTINSN_imm("vmov.i8 d2", d2, 0x7); + TESTINSN_imm("vmov.i32 d5", d5, 0x700); + TESTINSN_imm("vmov.i16 d7", d7, 0x700); + TESTINSN_imm("vmov.i32 d10", d10, 0x70000); + TESTINSN_imm("vmov.i32 d12", d12, 0x7000000); + TESTINSN_imm("vmov.i32 d13", d13, 0x7FF); + TESTINSN_imm("vmov.i32 d14", d14, 0x7FFFF); + TESTINSN_imm("vmov.i64 d15", d15, 0xFF0000FF00FFFF00); + + printf("----- VMVN (immediate) -----\n"); + TESTINSN_imm("vmvn.i32 d0", d0, 0x7); + TESTINSN_imm("vmvn.i16 d1", d1, 0x7); + TESTINSN_imm("vmvn.i8 d2", d2, 0x7); + TESTINSN_imm("vmvn.i32 d5", d5, 0x700); + TESTINSN_imm("vmvn.i16 d7", d7, 0x700); + TESTINSN_imm("vmvn.i32 d10", d10, 0x70000); + TESTINSN_imm("vmvn.i32 d13", d13, 0x7000000); + TESTINSN_imm("vmvn.i32 d11", d11, 0x7FF); + TESTINSN_imm("vmvn.i32 d14", d14, 0x7FFFF); + TESTINSN_imm("vmvn.i64 d15", d15, 0xFF0000FF00FFFF00); + + printf("----- VORR (immediate) -----\n"); + TESTINSN_imm("vorr.i32 d0", d0, 0x7); + TESTINSN_imm("vorr.i16 d2", d2, 0x7); + TESTINSN_imm("vorr.i32 d8", d8, 0x700); + TESTINSN_imm("vorr.i16 d6", d6, 0x700); + TESTINSN_imm("vorr.i32 d14", d14, 0x70000); + TESTINSN_imm("vorr.i32 d15", d15, 0x7000000); + + printf("----- VBIC (immediate) -----\n"); + TESTINSN_imm("vbic.i32 d0", d0, 0x7); + TESTINSN_imm("vbic.i16 d3", d3, 0x7); + TESTINSN_imm("vbic.i32 d5", d5, 0x700); + TESTINSN_imm("vbic.i16 d8", d8, 0x700); + TESTINSN_imm("vbic.i32 d10", d10, 0x70000); + TESTINSN_imm("vbic.i32 d15", d15, 0x7000000); + + printf("---- VMVN (register) ----\n"); + TESTINSN_un("vmvn d0, d1", d0, d1, i32, 24); + TESTINSN_un("vmvn d10, d15", d10, d15, i32, 24); + TESTINSN_un("vmvn d0, d14", d0, d14, i32, 24); + + printf("---- VMOV (register) ----\n"); + TESTINSN_un("vmov d0, d1", d0, d1, i32, 24); + TESTINSN_un("vmov d10, d15", d10, d15, i32, 24); + TESTINSN_un("vmov d0, d14", d0, d14, i32, 24); + + printf("---- VDUP (ARM core register) (tested indirectly) ----\n"); + TESTINSN_un("vmov d0, d1", d0, d1, i8, 7); + TESTINSN_un("vmov d10, d11", d10, d11, i16, 7); + TESTINSN_un("vmov d0, d15", d0, d15, i32, 7); + + printf("---- VADD ----\n"); + TESTINSN_bin("vadd.i32 d0, d1, d2", d0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin("vadd.i64 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vadd.i32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vadd.i16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vadd.i8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vadd.i8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vadd.i16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vadd.i32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vadd.i64 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vadd.i32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin("vadd.i64 d13, d14, d15", d13, d14, i32, 140, d15, i32, 120); + + printf("---- VSUB ----\n"); + TESTINSN_bin("vsub.i32 d0, d1, d2", d0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin("vsub.i64 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vsub.i32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vsub.i16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vsub.i8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vsub.i8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vsub.i16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vsub.i32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vsub.i64 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vsub.i32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin("vsub.i64 d13, d14, d15", d13, d14, i32, 140, d15, i32, 120); + + printf("---- VAND ----\n"); + TESTINSN_bin("vand d0, d1, d2", d0, d1, i8, 0x24, d2, i16, 0x77); + TESTINSN_bin("vand d4, d6, d5", d4, d6, i8, 0xff, d5, i16, 0x57); + TESTINSN_bin("vand d10, d11, d12", d10, d11, i8, 0xfe, d12, i8, 0xed); + TESTINSN_bin("vand d15, d15, d15", d15, d15, i8, 0xff, d15, i8, 0xff); + + printf("---- VBIC ----\n"); + TESTINSN_bin("vbic d0, d1, d2", d0, d1, i8, 0x24, d2, i16, 0x77); + TESTINSN_bin("vbic d4, d6, d5", d4, d6, i8, 0xff, d5, i16, 0x57); + TESTINSN_bin("vbic d10, d11, d12", d10, d11, i8, 0xfe, d12, i8, 0xed); + TESTINSN_bin("vbic d15, d15, d15", d15, d15, i8, 0xff, d15, i8, 0xff); + + printf("---- VORR ----\n"); + TESTINSN_bin("vorr d0, d1, d2", d0, d1, i8, 0x24, d2, i16, 0x73); + TESTINSN_bin("vorr d7, d3, d0", d7, d3, i8, 0x24, d0, i16, 0xff); + TESTINSN_bin("vorr d4, d4, d4", d4, d4, i16, 0xff, d4, i16, 0xff); + TESTINSN_bin("vorr d2, d3, d15", d2, d3, i32, 0x24, d15, i32, 0x1f); + + printf("---- VORN ----\n"); + TESTINSN_bin("vorn d0, d1, d2", d0, d1, i8, 0x24, d2, i16, 0x73); + TESTINSN_bin("vorn d7, d3, d0", d7, d3, i8, 0x24, d0, i16, 0xff); + TESTINSN_bin("vorn d4, d4, d4", d4, d4, i16, 0xff, d4, i16, 0xff); + TESTINSN_bin("vorn d2, d3, d15", d2, d3, i32, 0x24, d15, i32, 0x1f); + + printf("---- VEOR ----\n"); + TESTINSN_bin("veor d0, d1, d2", d0, d1, i8, 0x24, d2, i16, 0x77); + TESTINSN_bin("veor d4, d6, d5", d4, d6, i8, 0xff, d5, i16, 0x57); + TESTINSN_bin("veor d10, d11, d12", d10, d11, i8, 0xfe, d12, i8, 0xed); + TESTINSN_bin("veor d15, d15, d15", d15, d15, i8, 0xff, d15, i8, 0xff); + TESTINSN_bin("veor d0, d1, d2", d0, d1, i8, 0x24, d2, i16, 0x73); + TESTINSN_bin("veor d7, d3, d0", d7, d3, i8, 0x24, d0, i16, 0xff); + TESTINSN_bin("veor d4, d4, d4", d4, d4, i16, 0xff, d4, i16, 0xff); + TESTINSN_bin("veor d2, d3, d15", d2, d3, i32, 0x24, d15, i32, 0x1f); + + printf("---- VBSL ----\n"); + TESTINSN_bin("vbsl d0, d1, d2", d0, d1, i8, 0x24, d2, i16, 0x77); + TESTINSN_bin("vbsl d4, d6, d5", d4, d6, i8, 0xff, d5, i16, 0x57); + TESTINSN_bin("vbsl d10, d11, d12", d10, d11, i8, 0xfe, d12, i8, 0xed); + TESTINSN_bin("vbsl d15, d15, d15", d15, d15, i8, 0xff, d15, i8, 0xff); + TESTINSN_bin("vbsl d0, d1, d2", d0, d1, i8, 0x24, d2, i16, 0x73); + TESTINSN_bin("vbsl d7, d3, d0", d7, d3, i8, 0x24, d0, i16, 0xff); + TESTINSN_bin("vbsl d4, d4, d4", d4, d4, i16, 0xff, d4, i16, 0xff); + TESTINSN_bin("vbsl d2, d3, d15", d2, d3, i32, 0x24, d15, i32, 0x1f); + + printf("---- VBIT ----\n"); + TESTINSN_bin("vbit d0, d1, d2", d0, d1, i8, 0x24, d2, i16, 0x77); + TESTINSN_bin("vbit d4, d6, d5", d4, d6, i8, 0xff, d5, i16, 0x57); + TESTINSN_bin("vbit d10, d11, d12", d10, d11, i8, 0xfe, d12, i8, 0xed); + TESTINSN_bin("vbit d15, d15, d15", d15, d15, i8, 0xff, d15, i8, 0xff); + TESTINSN_bin("vbit d0, d1, d2", d0, d1, i8, 0x24, d2, i16, 0x73); + TESTINSN_bin("vbit d7, d3, d0", d7, d3, i8, 0x24, d0, i16, 0xff); + TESTINSN_bin("vbit d4, d4, d4", d4, d4, i16, 0xff, d4, i16, 0xff); + TESTINSN_bin("vbit d2, d3, d15", d2, d3, i32, 0x24, d15, i32, 0x1f); + + printf("---- VBIF ----\n"); + TESTINSN_bin("vbif d0, d1, d2", d0, d1, i8, 0x24, d2, i16, 0x77); + TESTINSN_bin("vbif d4, d6, d5", d4, d6, i8, 0xff, d5, i16, 0x57); + TESTINSN_bin("vbif d10, d11, d12", d10, d11, i8, 0xfe, d12, i8, 0xed); + TESTINSN_bin("vbif d15, d15, d15", d15, d15, i8, 0xff, d15, i8, 0xff); + TESTINSN_bin("vbif d0, d1, d2", d0, d1, i8, 0x24, d2, i16, 0x73); + TESTINSN_bin("vbif d7, d3, d0", d7, d3, i8, 0x24, d0, i16, 0xff); + TESTINSN_bin("vbif d4, d4, d4", d4, d4, i16, 0xff, d4, i16, 0xff); + TESTINSN_bin("vbif d2, d3, d15", d2, d3, i32, 0x24, d15, i32, 0x1f); + + printf("---- VEXT ----\n"); + TESTINSN_bin("vext.8 d0, d1, d2, #0", d0, d1, i8, 0x77, d2, i8, 0xff); + TESTINSN_bin("vext.8 d0, d1, d2, #1", d0, d1, i8, 0x77, d2, i8, 0xff); + TESTINSN_bin("vext.8 d0, d1, d2, #7", d0, d1, i8, 0x77, d2, i8, 0xff); + TESTINSN_bin("vext.8 d0, d1, d2, #6", d0, d1, i8, 0x77, d2, i8, 0xff); + TESTINSN_bin("vext.8 d10, d11, d12, #4", d10, d11, i8, 0x77, d12, i8, 0xff); + TESTINSN_bin("vext.8 d0, d5, d15, #5", d0, d5, i8, 0x77, d15, i8, 0xff); + + printf("---- VHADD ----\n"); + TESTINSN_bin("vhadd.s32 d0, d1, d2", d0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin("vhadd.s32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vhadd.s16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vhadd.s8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vhadd.s8 d0, d1, d2", d0, d1, i8, 141, d2, i8, 121); + TESTINSN_bin("vhadd.s8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vhadd.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vhadd.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vhadd.s32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin("vhadd.u32 d0, d1, d2", d0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin("vhadd.u32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vhadd.u16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vhadd.u8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vhadd.u8 d0, d1, d2", d0, d1, i8, 141, d2, i8, 121); + TESTINSN_bin("vhadd.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vhadd.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vhadd.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vhadd.u32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VHSUB ----\n"); + TESTINSN_bin("vhsub.s32 d0, d1, d2", d0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin("vhsub.s32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vhsub.s16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vhsub.s8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vhsub.s8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vhsub.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vhsub.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vhsub.s32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin("vhsub.u32 d0, d1, d2", d0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin("vhsub.u32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vhsub.u16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vhsub.u8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vhsub.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vhsub.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vhsub.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vhsub.u32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VQADD ----\n"); + TESTINSN_bin_q("vqadd.s32 d0, d1, d2", d0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin_q("vqadd.s32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin_q("vqadd.s16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin_q("vqadd.s8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin_q("vqadd.s8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqadd.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqadd.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqadd.s32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin_q("vqadd.u32 d0, d1, d2", d0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin_q("vqadd.u32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin_q("vqadd.u16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin_q("vqadd.u8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin_q("vqadd.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqadd.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqadd.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqadd.u32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VQSUB ----\n"); + TESTINSN_bin_q("vqsub.s32 d0, d1, d2", d0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin_q("vqsub.s32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin_q("vqsub.s16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin_q("vqsub.s8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin_q("vqsub.s8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqsub.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqsub.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqsub.s32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin_q("vqsub.u32 d0, d1, d2", d0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin_q("vqsub.u32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin_q("vqsub.u16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin_q("vqsub.u8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin_q("vqsub.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqsub.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqsub.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqsub.u32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VRHADD ----\n"); + TESTINSN_bin("vrhadd.s32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vrhadd.s32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 121); + TESTINSN_bin("vrhadd.s32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vrhadd.s16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vrhadd.s8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vrhadd.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 3); + TESTINSN_bin("vrhadd.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vrhadd.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vrhadd.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 4, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.s32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin("vrhadd.u32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vrhadd.u32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vrhadd.u16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vrhadd.u8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vrhadd.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vrhadd.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vrhadd.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vrhadd.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vrhadd.u32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VCGT ----\n"); + TESTINSN_bin("vcgt.s32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vcgt.s32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 121); + TESTINSN_bin("vcgt.s32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vcgt.s16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vcgt.s8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vcgt.s32 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vcgt.s16 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vcgt.s8 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vcgt.s32 d0, d1, d2", d0, d1, i32, 120, d2, i32, 140); + TESTINSN_bin("vcgt.s16 d0, d1, d2", d0, d1, i32, 120, d2, i32, 140); + TESTINSN_bin("vcgt.s8 d0, d1, d2", d0, d1, i32, 120, d2, i32, 140); + TESTINSN_bin("vcgt.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 3, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 3, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 3, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 3); + TESTINSN_bin("vcgt.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vcgt.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vcgt.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 2, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 2, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 2, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.s32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin("vcgt.u32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vcgt.u32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vcgt.u16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vcgt.u8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vcgt.u32 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vcgt.u16 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vcgt.u8 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vcgt.u32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 140); + TESTINSN_bin("vcgt.u16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 140); + TESTINSN_bin("vcgt.u8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 140); + TESTINSN_bin("vcgt.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 3, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 3, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 3, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vcgt.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vcgt.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vcgt.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 2, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 2, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 2, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcgt.u32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VCGE ----\n"); + TESTINSN_bin("vcge.s32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vcge.s32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 121); + TESTINSN_bin("vcge.s32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vcge.s16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vcge.s8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vcge.s32 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vcge.s16 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vcge.s8 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vcge.s32 d0, d1, d2", d0, d1, i32, 120, d2, i32, 140); + TESTINSN_bin("vcge.s16 d0, d1, d2", d0, d1, i32, 120, d2, i32, 140); + TESTINSN_bin("vcge.s8 d0, d1, d2", d0, d1, i32, 120, d2, i32, 140); + TESTINSN_bin("vcge.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 3, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 3, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 3, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 3); + TESTINSN_bin("vcge.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vcge.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vcge.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 2, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 2, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 2, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.s32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin("vcge.u32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vcge.u32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vcge.u16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vcge.u8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vcge.u32 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vcge.u16 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vcge.u8 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vcge.u32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 140); + TESTINSN_bin("vcge.u16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 140); + TESTINSN_bin("vcge.u8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 140); + TESTINSN_bin("vcge.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 3, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 3, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 3, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vcge.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vcge.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vcge.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 2, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 2, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 2, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vcge.u32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VSHL (register) ----\n"); + TESTINSN_bin("vshl.s8 d0, d1, d2", d0, d1, i32, 24, d2, i32, 1); + TESTINSN_bin("vshl.s8 d8, d1, d12", d8, d1, i32, 24, d12, i32, 8); + TESTINSN_bin("vshl.s8 d10, d31, d7", d10, d31, i32, 24, d7, i32, 4); + TESTINSN_bin("vshl.s16 d3, d8, d11", d3, d8, i32, 14, d11, i32, 2); + TESTINSN_bin("vshl.s16 d5, d12, d14", d5, d12, i32, (1 << 30), d14, i32, 1); + TESTINSN_bin("vshl.s16 d15, d2, d1", d15, d2, i32, (1 << 30), d1, i32, 11); + TESTINSN_bin("vshl.s32 d9, d12, d19", d9, d12, i32, (1 << 31) + 2, d19, i32, 2); + TESTINSN_bin("vshl.s32 d11, d22, d0", d11, d22, i32, -1, d0, i32, 12); + TESTINSN_bin("vshl.s32 d5, d2, d3", d5, d2, i32, (1 << 30), d3, i32, 21); + TESTINSN_bin("vshl.s64 d15, d12, d4", d15, d12, i32, 5, d4, i32, 20); + TESTINSN_bin("vshl.s64 d8, d2, d4", d8, d2, i32, 15, d4, i32, 4); + TESTINSN_bin("vshl.s64 d5, d12, d4", d5, d12, i32, (1 << 31) + 1, d4, i32, 30); + TESTINSN_bin("vshl.s64 d15, d2, d4", d15, d2, i32, 0xffabcd59, d4, i32, 0xabcdefab); + TESTINSN_bin("vshl.s64 d8, d2, d4", d8, d2, i32, 15, d4, i32, 0x400bb5); + TESTINSN_bin("vshl.s64 d5, d12, d4", d5, d12, i32, (1 << 31) + 1, d4, i32, 0x30abcff); + TESTINSN_bin("vshl.u8 d0, d1, d2", d0, d1, i32, 24, d2, i32, 1); + TESTINSN_bin("vshl.u8 d8, d1, d12", d8, d1, i32, 24, d12, i32, 8); + TESTINSN_bin("vshl.u8 d10, d11, d7", d10, d11, i32, 24, d7, i32, 4); + TESTINSN_bin("vshl.u16 d3, d8, d11", d3, d8, i32, 14, d11, i32, 2); + TESTINSN_bin("vshl.u16 d5, d12, d14", d5, d12, i32, (1 << 30), d14, i32, 1); + TESTINSN_bin("vshl.u16 d15, d2, d1", d15, d2, i32, (1 << 30), d1, i32, 11); + TESTINSN_bin("vshl.u32 d9, d12, d15", d9, d12, i32, (1 << 31) + 2, d15, i32, 2); + TESTINSN_bin("vshl.u32 d11, d2, d0", d11, d2, i32, -1, d0, i32, 12); + TESTINSN_bin("vshl.u32 d5, d2, d3", d5, d2, i32, (1 << 30), d3, i32, 21); + TESTINSN_bin("vshl.u64 d15, d12, d4", d15, d12, i32, 5, d4, i32, 20); + TESTINSN_bin("vshl.u64 d8, d2, d4", d8, d2, i32, 15, d4, i32, 4); + TESTINSN_bin("vshl.u64 d5, d12, d4", d5, d12, i32, (1 << 31) + 1, d4, i32, 30); + TESTINSN_bin("vshl.u64 d15, d2, d4", d15, d2, i32, 0xffabcd59, d4, i32, 0xabcdefab); + TESTINSN_bin("vshl.u64 d8, d2, d4", d8, d2, i32, 15, d4, i32, 0x400bb5); + TESTINSN_bin("vshl.u64 d5, d12, d4", d5, d12, i32, (1 << 31) + 1, d4, i32, 0x30abcff); + + printf("---- VQSHL (register) ----\n"); + TESTINSN_bin_q("vqshl.s64 d0, d1, d2", d0, d1, i32, 1, d2, i32, 1); + TESTINSN_bin_q("vqshl.s64 d3, d4, d5", d3, d4, i32, -127, d5, i32, 1); + TESTINSN_bin_q("vqshl.s64 d3, d4, d5", d3, d4, i32, -127, d5, i32, -3); + TESTINSN_bin_q("vqshl.s64 d0, d1, d2", d0, d1, i32, 16, d2, i32, 14); + TESTINSN_bin_q("vqshl.s64 d13, d14, d31", d13, d14, i32, -17, d31, i32, -26); + TESTINSN_bin_q("vqshl.s64 d7, d8, d2", d7, d8, i32, 24, d2, i32, -60); + TESTINSN_bin_q("vqshl.s32 d3, d4, d15", d3, d4, i32, 127, d15, i32, -30); + TESTINSN_bin_q("vqshl.s32 d2, d8, d4", d2, d8, i32, -11, d4, i32, -4); + TESTINSN_bin_q("vqshl.s32 d12, d11, d13", d12, d11, i32, -120, d13, i32, -9); + TESTINSN_bin_q("vqshl.s32 d0, d1, d2", d0, d1, i32, 34, d2, i32, -7); + TESTINSN_bin_q("vqshl.s32 d9, d30, d11", d9, d30, i32, (1 << 31) + 8, d11, i32, -1); + TESTINSN_bin_q("vqshl.s32 d13, d3, d5", d13, d3, i32, (1 << 27), d5, i32, 3); + TESTINSN_bin_q("vqshl.s16 d11, d10, d2", d11, d10, i32, (1 << 31), d2, i32, -31); + TESTINSN_bin_q("vqshl.s16 d3, d14, d7", d3, d14, i32, (1 << 31), d7, i32, -3); + TESTINSN_bin_q("vqshl.s16 d0, d11, d2", d0, d11, i32, (1 << 31) + 256, d2, i32, -1); + TESTINSN_bin_q("vqshl.s16 d1, d2, d3", d1, d2, i32, (1 << 31) + 256, d3, i32, -31); + TESTINSN_bin_q("vqshl.s16 d3, d4, d5", d3, d4, i32, (1 << 31) + (1 << 29), d5, i32, -13); + TESTINSN_bin_q("vqshl.s16 d0, d15, d2", d0, d15, i32, 1, d2, i32, 30); + TESTINSN_bin_q("vqshl.s8 d2, d7, d11", d2, d7, i32, -1, d11, i32, 40); + TESTINSN_bin_q("vqshl.s8 d13, d1, d2", d13, d1, i32, -4, d2, i32, 30); + TESTINSN_bin_q("vqshl.s8 d3, d7, d5", d3, d7, i32, (1 << 31) + 11, d5, i32, 3); + TESTINSN_bin_q("vqshl.s8 d10, d11, d12", d10, d11, i32, (1 << 16), d12, i32, 16); + TESTINSN_bin_q("vqshl.s8 d6, d7, d8", d6, d7, i32, (1 << 30), d8, i32, 2); + TESTINSN_bin_q("vqshl.s8 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin_q("vqshl.u64 d0, d1, d2", d0, d1, i32, 1, d2, i32, 1); + TESTINSN_bin_q("vqshl.u64 d3, d4, d5", d3, d4, i32, -127, d5, i32, 1); + TESTINSN_bin_q("vqshl.u64 d3, d4, d5", d3, d4, i32, -127, d5, i32, -3); + TESTINSN_bin_q("vqshl.u64 d0, d1, d2", d0, d1, i32, 16, d2, i32, 14); + TESTINSN_bin_q("vqshl.u64 d13, d14, d15", d13, d14, i32, -17, d15, i32, -26); + TESTINSN_bin_q("vqshl.u64 d7, d8, d2", d7, d8, i32, 24, d2, i32, -60); + TESTINSN_bin_q("vqshl.u32 d3, d4, d15", d3, d4, i32, 127, d15, i32, -30); + TESTINSN_bin_q("vqshl.u32 d2, d8, d4", d2, d8, i32, -11, d4, i32, -4); + TESTINSN_bin_q("vqshl.u32 d12, d31, d13", d12, d31, i32, -120, d13, i32, -9); + TESTINSN_bin_q("vqshl.u32 d0, d1, d2", d0, d1, i32, 34, d2, i32, -7); + TESTINSN_bin_q("vqshl.u32 d9, d10, d11", d9, d10, i32, (1 << 31) + 8, d11, i32, -1); + TESTINSN_bin_q("vqshl.u32 d13, d3, d5", d13, d3, i32, (1 << 27), d5, i32, 3); + TESTINSN_bin_q("vqshl.u16 d11, d10, d2", d11, d10, i32, (1 << 31), d2, i32, -31); + TESTINSN_bin_q("vqshl.u16 d3, d14, d7", d3, d14, i32, (1 << 31), d7, i32, -3); + TESTINSN_bin_q("vqshl.u16 d0, d11, d2", d0, d11, i32, (1 << 31) + 256, d2, i32, -1); + TESTINSN_bin_q("vqshl.u16 d1, d2, d3", d1, d2, i32, (1 << 31) + 256, d3, i32, -31); + TESTINSN_bin_q("vqshl.u16 d3, d4, d5", d3, d4, i32, (1 << 31) + (1 << 29), d5, i32, -13); + TESTINSN_bin_q("vqshl.u16 d0, d15, d2", d0, d15, i32, 1, d2, i32, 30); + TESTINSN_bin_q("vqshl.u8 d2, d7, d11", d2, d7, i32, -1, d11, i32, 40); + TESTINSN_bin_q("vqshl.u8 d13, d1, d2", d13, d1, i32, -4, d2, i32, 30); + TESTINSN_bin_q("vqshl.u8 d3, d7, d5", d3, d7, i32, (1 << 31) + 11, d5, i32, 3); + TESTINSN_bin_q("vqshl.u8 d10, d11, d12", d10, d11, i32, (1 << 16), d12, i32, 16); + TESTINSN_bin_q("vqshl.u8 d6, d7, d8", d6, d7, i32, (1 << 30), d8, i32, 2); + TESTINSN_bin_q("vqshl.u8 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VQSHL / VQSHLU (immediate) ----\n"); + TESTINSN_un_q("vqshl.s64 d0, d1, #1", d0, d1, i32, 1); + TESTINSN_un_q("vqshl.s64 d31, d30, #1", d31, d30, i32, -127); + TESTINSN_un_q("vqshl.s64 d5, d4, #0", d5, d4, i32, -127); + TESTINSN_un_q("vqshl.s64 d5, d4, #63", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s64 d5, d4, #60", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s64 d5, d4, #59", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s64 d5, d4, #58", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s64 d5, d4, #17", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s64 d5, d4, #63", d5, d4, i32, -1); + TESTINSN_un_q("vqshl.s64 d5, d4, #60", d5, d4, i32, -1); + TESTINSN_un_q("vqshl.s64 d5, d4, #7", d5, d4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshl.s32 d10, d11, #1", d10, d11, i32, 1); + TESTINSN_un_q("vqshl.s32 d31, d30, #1", d31, d30, i32, -127); + TESTINSN_un_q("vqshl.s32 d5, d4, #0", d5, d4, i32, -127); + TESTINSN_un_q("vqshl.s32 d5, d4, #31", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s32 d5, d4, #28", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s32 d5, d4, #27", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s32 d5, d4, #26", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s32 d5, d4, #17", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s32 d5, d4, #31", d5, d4, i32, -1); + TESTINSN_un_q("vqshl.s32 d5, d4, #29", d5, d4, i32, -1); + TESTINSN_un_q("vqshl.s32 d5, d4, #7", d5, d4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshl.s16 d9, d8, #1", d9, d8, i32, 1); + TESTINSN_un_q("vqshl.s16 d31, d30, #1", d31, d30, i32, -127); + TESTINSN_un_q("vqshl.s16 d5, d4, #0", d5, d4, i32, -127); + TESTINSN_un_q("vqshl.s16 d9, d8, #15", d9, d8, i32, 16); + TESTINSN_un_q("vqshl.s16 d5, d4, #12", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s16 d5, d4, #11", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s16 d5, d4, #10", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s16 d5, d4, #4", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s16 d5, d4, #15", d5, d4, i32, -1); + TESTINSN_un_q("vqshl.s16 d5, d4, #12", d5, d4, i32, -1); + TESTINSN_un_q("vqshl.s16 d5, d4, #7", d5, d4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshl.s8 d0, d1, #1", d0, d1, i32, 1); + TESTINSN_un_q("vqshl.s8 d31, d30, #1", d31, d30, i32, -127); + TESTINSN_un_q("vqshl.s8 d5, d4, #0", d5, d4, i32, -127); + TESTINSN_un_q("vqshl.s8 d5, d4, #7", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s8 d25, d4, #4", d25, d4, i32, 16); + TESTINSN_un_q("vqshl.s8 d5, d4, #3", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s8 d5, d4, #2", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s8 d5, d4, #1", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.s8 d5, d4, #7", d5, d4, i32, -1); + TESTINSN_un_q("vqshl.s8 d5, d4, #5", d5, d4, i32, -1); + TESTINSN_un_q("vqshl.s8 d5, d4, #2", d5, d4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshl.u64 d0, d1, #1", d0, d1, i32, 1); + TESTINSN_un_q("vqshl.u64 d31, d30, #1", d31, d30, i32, -127); + TESTINSN_un_q("vqshl.u64 d5, d4, #0", d5, d4, i32, -127); + TESTINSN_un_q("vqshl.u64 d5, d4, #63", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u64 d5, d4, #60", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u64 d5, d4, #59", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u64 d5, d4, #58", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u64 d5, d4, #17", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u64 d5, d4, #63", d5, d4, i32, -1); + TESTINSN_un_q("vqshl.u64 d5, d4, #60", d5, d4, i32, -1); + TESTINSN_un_q("vqshl.u64 d5, d4, #7", d5, d4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshl.u32 d10, d11, #1", d10, d11, i32, 1); + TESTINSN_un_q("vqshl.u32 d31, d30, #1", d31, d30, i32, -127); + TESTINSN_un_q("vqshl.u32 d5, d4, #0", d5, d4, i32, -127); + TESTINSN_un_q("vqshl.u32 d5, d4, #31", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u32 d5, d4, #28", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u32 d5, d4, #27", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u32 d5, d4, #26", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u32 d5, d4, #17", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u32 d5, d4, #31", d5, d4, i32, -1); + TESTINSN_un_q("vqshl.u32 d5, d4, #29", d5, d4, i32, -1); + TESTINSN_un_q("vqshl.u32 d5, d4, #7", d5, d4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshl.u16 d9, d8, #1", d9, d8, i32, 1); + TESTINSN_un_q("vqshl.u16 d31, d30, #1", d31, d30, i32, -127); + TESTINSN_un_q("vqshl.u16 d5, d4, #0", d5, d4, i32, -127); + TESTINSN_un_q("vqshl.u16 d9, d8, #15", d9, d8, i32, 16); + TESTINSN_un_q("vqshl.u16 d5, d4, #12", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u16 d5, d4, #11", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u16 d5, d4, #10", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u16 d5, d4, #4", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u16 d5, d4, #15", d5, d4, i32, -1); + TESTINSN_un_q("vqshl.u16 d5, d4, #12", d5, d4, i32, -1); + TESTINSN_un_q("vqshl.u16 d5, d4, #7", d5, d4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshl.u8 d0, d1, #1", d0, d1, i32, 1); + TESTINSN_un_q("vqshl.u8 d31, d30, #1", d31, d30, i32, -127); + TESTINSN_un_q("vqshl.u8 d5, d4, #0", d5, d4, i32, -127); + TESTINSN_un_q("vqshl.u8 d5, d4, #7", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u8 d5, d4, #4", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u8 d5, d4, #3", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u8 d5, d4, #2", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u8 d5, d4, #1", d5, d4, i32, 16); + TESTINSN_un_q("vqshl.u8 d5, d4, #7", d5, d4, i32, -1); + TESTINSN_un_q("vqshl.u8 d5, d4, #5", d5, d4, i32, -1); + TESTINSN_un_q("vqshl.u8 d5, d4, #2", d5, d4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshlu.s64 d0, d1, #1", d0, d1, i32, 1); + TESTINSN_un_q("vqshlu.s64 d31, d30, #1", d31, d30, i32, -127); + TESTINSN_un_q("vqshlu.s64 d5, d4, #0", d5, d4, i32, -127); + TESTINSN_un_q("vqshlu.s64 d5, d4, #63", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s64 d5, d4, #60", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s64 d5, d4, #59", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s64 d5, d4, #58", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s64 d5, d4, #17", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s64 d5, d4, #63", d5, d4, i32, -1); + TESTINSN_un_q("vqshlu.s64 d5, d4, #60", d5, d4, i32, -1); + TESTINSN_un_q("vqshlu.s64 d5, d4, #7", d5, d4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshlu.s32 d10, d11, #1", d10, d11, i32, 1); + TESTINSN_un_q("vqshlu.s32 d31, d30, #1", d31, d30, i32, -127); + TESTINSN_un_q("vqshlu.s32 d5, d4, #0", d5, d4, i32, -127); + TESTINSN_un_q("vqshlu.s32 d5, d4, #31", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s32 d25, d24, #28", d25, d24, i32, 16); + TESTINSN_un_q("vqshlu.s32 d5, d4, #27", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s32 d5, d4, #26", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s32 d5, d4, #17", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s32 d5, d24, #31", d5, d24, i32, -1); + TESTINSN_un_q("vqshlu.s32 d5, d4, #29", d5, d4, i32, -1); + TESTINSN_un_q("vqshlu.s32 d5, d4, #7", d5, d4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshlu.s16 d9, d8, #1", d9, d8, i32, 1); + TESTINSN_un_q("vqshlu.s16 d31, d30, #1", d31, d30, i32, -127); + TESTINSN_un_q("vqshlu.s16 d5, d4, #0", d5, d4, i32, -127); + TESTINSN_un_q("vqshlu.s16 d9, d8, #15", d9, d8, i32, 16); + TESTINSN_un_q("vqshlu.s16 d5, d4, #12", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s16 d5, d4, #11", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s16 d5, d4, #10", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s16 d5, d4, #4", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s16 d15, d14, #15", d15, d14, i32, -1); + TESTINSN_un_q("vqshlu.s16 d5, d4, #12", d5, d4, i32, -1); + TESTINSN_un_q("vqshlu.s16 d5, d4, #7", d5, d4, i32, (1 << 31) + 2); + TESTINSN_un_q("vqshlu.s8 d0, d1, #1", d0, d1, i32, 1); + TESTINSN_un_q("vqshlu.s8 d31, d30, #1", d31, d30, i32, -127); + TESTINSN_un_q("vqshlu.s8 d5, d4, #0", d5, d4, i32, -127); + TESTINSN_un_q("vqshlu.s8 d5, d4, #7", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s8 d5, d4, #4", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s8 d5, d4, #3", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s8 d5, d4, #2", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s8 d5, d4, #1", d5, d4, i32, 16); + TESTINSN_un_q("vqshlu.s8 d5, d4, #7", d5, d4, i32, -1); + TESTINSN_un_q("vqshlu.s8 d5, d4, #5", d5, d4, i32, -1); + TESTINSN_un_q("vqshlu.s8 d5, d4, #2", d5, d4, i32, (1 << 31) + 2); + + printf("---- VQRSHL (register) ----\n"); + TESTINSN_bin_q("vqrshl.s64 d0, d1, d2", d0, d1, i32, 1, d2, i32, 1); + TESTINSN_bin_q("vqrshl.s64 d3, d4, d5", d3, d4, i32, -127, d5, i32, 1); + TESTINSN_bin_q("vqrshl.s64 d3, d4, d5", d3, d4, i32, -127, d5, i32, -3); + TESTINSN_bin_q("vqrshl.s64 d0, d1, d2", d0, d1, i32, 16, d2, i32, 14); + TESTINSN_bin_q("vqrshl.s64 d13, d14, d15", d13, d14, i32, -17, d15, i32, -26); + TESTINSN_bin_q("vqrshl.s64 d7, d8, d2", d7, d8, i32, 24, d2, i32, -60); + TESTINSN_bin_q("vqrshl.s32 d3, d4, d15", d3, d4, i32, 127, d15, i32, -30); + TESTINSN_bin_q("vqrshl.s32 d2, d8, d4", d2, d8, i32, -11, d4, i32, -4); + TESTINSN_bin_q("vqrshl.s32 d12, d11, d13", d12, d11, i32, -120, d13, i32, -9); + TESTINSN_bin_q("vqrshl.s32 d0, d1, d2", d0, d1, i32, 34, d2, i32, -7); + TESTINSN_bin_q("vqrshl.s32 d9, d10, d11", d9, d10, i32, (1 << 31) + 8, d11, i32, -1); + TESTINSN_bin_q("vqrshl.s32 d13, d3, d5", d13, d3, i32, (1 << 27), d5, i32, 3); + TESTINSN_bin_q("vqrshl.s16 d11, d10, d2", d11, d10, i32, (1 << 31), d2, i32, -31); + TESTINSN_bin_q("vqrshl.s16 d3, d14, d7", d3, d14, i32, (1 << 31), d7, i32, -3); + TESTINSN_bin_q("vqrshl.s16 d0, d31, d2", d0, d31, i32, (1 << 31) + 256, d2, i32, -1); + TESTINSN_bin_q("vqrshl.s16 d1, d2, d3", d1, d2, i32, (1 << 31) + 256, d3, i32, -31); + TESTINSN_bin_q("vqrshl.s16 d3, d4, d5", d3, d4, i32, (1 << 31) + (1 << 29), d5, i32, -13); + TESTINSN_bin_q("vqrshl.s16 d0, d15, d2", d0, d15, i32, 1, d2, i32, 30); + TESTINSN_bin_q("vqrshl.s8 d2, d7, d11", d2, d7, i32, 0xf, d11, i32, -1); + TESTINSN_bin_q("vqrshl.s16 d2, d7, d11", d2, d7, i32, 0xf, d11, i32, -1); + TESTINSN_bin_q("vqrshl.s32 d2, d7, d11", d2, d7, i32, 0xf, d11, i32, -1); + TESTINSN_bin_q("vqrshl.s8 d2, d7, d11", d2, d7, i32, -1, d11, i32, -1); + TESTINSN_bin_q("vqrshl.s16 d2, d7, d11", d2, d7, i32, -1, d11, i32, -1); + TESTINSN_bin_q("vqrshl.s32 d2, d7, d11", d2, d7, i32, -1, d11, i32, -1); + TESTINSN_bin_q("vqrshl.s8 d2, d7, d11", d2, d7, i32, -2, d11, i32, -1); + TESTINSN_bin_q("vqrshl.s16 d2, d7, d11", d2, d7, i32, -2, d11, i32, -1); + TESTINSN_bin_q("vqrshl.s32 d2, d7, d11", d2, d7, i32, -2, d11, i32, -1); + TESTINSN_bin_q("vqrshl.s8 d2, d7, d11", d2, d7, i32, -1, d11, i32, 0); + TESTINSN_bin_q("vqrshl.s16 d2, d7, d11", d2, d7, i32, -1, d11, i32, 0); + TESTINSN_bin_q("vqrshl.s32 d2, d7, d31", d2, d7, i32, -1, d31, i32, 0); + TESTINSN_bin_q("vqrshl.s8 d2, d7, d11", d2, d7, i32, -1, d11, i32, 40); + TESTINSN_bin_q("vqrshl.s8 d13, d1, d2", d13, d1, i32, -4, d2, i32, 30); + TESTINSN_bin_q("vqrshl.s8 d3, d7, d5", d3, d7, i32, (1 << 31) + 11, d5, i32, 3); + TESTINSN_bin_q("vqrshl.s8 d10, d11, d12", d10, d11, i32, (1 << 16), d12, i32, 16); + TESTINSN_bin_q("vqrshl.s8 d6, d7, d8", d6, d7, i32, (1 << 30), d8, i32, 2); + TESTINSN_bin_q("vqrshl.s8 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin_q("vqrshl.u64 d0, d1, d2", d0, d1, i32, 1, d2, i32, 1); + TESTINSN_bin_q("vqrshl.u64 d3, d4, d5", d3, d4, i32, -127, d5, i32, 1); + TESTINSN_bin_q("vqrshl.u64 d3, d4, d5", d3, d4, i32, -127, d5, i32, -3); + TESTINSN_bin_q("vqrshl.u64 d0, d1, d2", d0, d1, i32, 16, d2, i32, 14); + TESTINSN_bin_q("vqrshl.u64 d13, d14, d15", d13, d14, i32, -17, d15, i32, -26); + TESTINSN_bin_q("vqrshl.u64 d7, d8, d2", d7, d8, i32, 24, d2, i32, -60); + TESTINSN_bin_q("vqrshl.u32 d3, d4, d15", d3, d4, i32, 127, d15, i32, -30); + TESTINSN_bin_q("vqrshl.u32 d2, d8, d4", d2, d8, i32, -11, d4, i32, -4); + TESTINSN_bin_q("vqrshl.u32 d12, d11, d13", d12, d11, i32, -120, d13, i32, -9); + TESTINSN_bin_q("vqrshl.u32 d0, d1, d2", d0, d1, i32, 34, d2, i32, -7); + TESTINSN_bin_q("vqrshl.u32 d9, d10, d11", d9, d10, i32, (1 << 31) + 8, d11, i32, -1); + TESTINSN_bin_q("vqrshl.u32 d13, d3, d5", d13, d3, i32, (1 << 27), d5, i32, 3); + TESTINSN_bin_q("vqrshl.u16 d11, d10, d2", d11, d10, i32, (1 << 31), d2, i32, -31); + TESTINSN_bin_q("vqrshl.u16 d3, d14, d7", d3, d14, i32, (1 << 31), d7, i32, -3); + TESTINSN_bin_q("vqrshl.u16 d0, d31, d2", d0, d31, i32, (1 << 31) + 256, d2, i32, -1); + TESTINSN_bin_q("vqrshl.u16 d1, d2, d3", d1, d2, i32, (1 << 31) + 256, d3, i32, -31); + TESTINSN_bin_q("vqrshl.u16 d3, d4, d5", d3, d4, i32, (1 << 31) + (1 << 29), d5, i32, -13); + TESTINSN_bin_q("vqrshl.u16 d0, d15, d2", d0, d15, i32, 1, d2, i32, 30); + TESTINSN_bin_q("vqrshl.u8 d2, d7, d11", d2, d7, i32, -1, d11, i32, 40); + TESTINSN_bin_q("vqrshl.u8 d2, d7, d11", d2, d7, i32, -1, d11, i32, -1); + TESTINSN_bin_q("vqrshl.u8 d2, d7, d11", d2, d7, i32, 0xf, d11, i32, -1); + TESTINSN_bin_q("vqrshl.u16 d2, d7, d11", d2, d7, i32, 0xf, d11, i32, -1); + TESTINSN_bin_q("vqrshl.u32 d2, d7, d11", d2, d7, i32, 0xf, d11, i32, -1); + TESTINSN_bin_q("vqrshl.u8 d2, d7, d11", d2, d7, i32, -2, d11, i32, -1); + TESTINSN_bin_q("vqrshl.u16 d2, d7, d11", d2, d7, i32, -2, d11, i32, -1); + TESTINSN_bin_q("vqrshl.u32 d2, d7, d11", d2, d7, i32, -2, d11, i32, -1); + TESTINSN_bin_q("vqrshl.u8 d2, d7, d11", d2, d7, i32, -1, d11, i32, 0); + TESTINSN_bin_q("vqrshl.u16 d2, d7, d11", d2, d7, i32, -1, d11, i32, 0); + TESTINSN_bin_q("vqrshl.u32 d2, d7, d11", d2, d7, i32, -1, d11, i32, 0); + TESTINSN_bin_q("vqrshl.u8 d13, d1, d2", d13, d1, i32, -4, d2, i32, 30); + TESTINSN_bin_q("vqrshl.u8 d3, d7, d5", d3, d7, i32, (1 << 31) + 11, d5, i32, 3); + TESTINSN_bin_q("vqrshl.u8 d10, d11, d12", d10, d11, i32, (1 << 16), d12, i32, 16); + TESTINSN_bin_q("vqrshl.u8 d6, d7, d8", d6, d7, i32, (1 << 30), d8, i32, 2); + TESTINSN_bin_q("vqrshl.u8 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VRSHL (register) ----\n"); + TESTINSN_bin("vrshl.s64 d0, d1, d2", d0, d1, i32, 1, d2, i32, 1); + TESTINSN_bin("vrshl.s64 d3, d4, d5", d3, d4, i32, -127, d5, i32, 1); + TESTINSN_bin("vrshl.s64 d3, d4, d5", d3, d4, i32, -127, d5, i32, -3); + TESTINSN_bin("vrshl.s64 d0, d1, d2", d0, d1, i32, 16, d2, i32, 14); + TESTINSN_bin("vrshl.s64 d13, d14, d15", d13, d14, i32, -17, d15, i32, -26); + TESTINSN_bin("vrshl.s64 d7, d8, d2", d7, d8, i32, 24, d2, i32, -60); + TESTINSN_bin("vrshl.s32 d3, d4, d15", d3, d4, i32, 127, d15, i32, -30); + TESTINSN_bin("vrshl.s32 d2, d8, d4", d2, d8, i32, -11, d4, i32, -4); + TESTINSN_bin("vrshl.s32 d12, d11, d13", d12, d11, i32, -120, d13, i32, -9); + TESTINSN_bin("vrshl.s32 d0, d1, d2", d0, d1, i32, 34, d2, i32, -7); + TESTINSN_bin("vrshl.s32 d9, d10, d11", d9, d10, i32, (1 << 31) + 8, d11, i32, -1); + TESTINSN_bin("vrshl.s32 d13, d3, d5", d13, d3, i32, (1 << 27), d5, i32, 3); + TESTINSN_bin("vrshl.s16 d11, d10, d2", d11, d10, i32, (1 << 31), d2, i32, -31); + TESTINSN_bin("vrshl.s16 d3, d14, d7", d3, d14, i32, (1 << 31), d7, i32, -3); + TESTINSN_bin("vrshl.s16 d0, d11, d2", d0, d11, i32, (1 << 31) + 256, d2, i32, -1); + TESTINSN_bin("vrshl.s16 d1, d2, d3", d1, d2, i32, (1 << 31) + 256, d3, i32, -31); + TESTINSN_bin("vrshl.s16 d3, d4, d5", d3, d4, i32, (1 << 31) + (1 << 29), d5, i32, -13); + TESTINSN_bin("vrshl.s16 d0, d15, d2", d0, d15, i32, 1, d2, i32, 30); + TESTINSN_bin("vrshl.s8 d2, d7, d11", d2, d7, i32, 0xf, d11, i32, -1); + TESTINSN_bin("vrshl.s16 d2, d7, d11", d2, d7, i32, 0xf, d11, i32, -1); + TESTINSN_bin("vrshl.s32 d2, d7, d11", d2, d7, i32, 0xf, d11, i32, -1); + TESTINSN_bin("vrshl.s8 d2, d7, d31", d2, d7, i32, -1, d31, i32, -1); + TESTINSN_bin("vrshl.s16 d2, d7, d31", d2, d7, i32, -1, d31, i32, -1); + TESTINSN_bin("vrshl.s32 d2, d7, d31", d2, d7, i32, -1, d31, i32, -1); + TESTINSN_bin("vrshl.s8 d2, d7, d11", d2, d7, i32, -2, d11, i32, -1); + TESTINSN_bin("vrshl.s16 d2, d7, d11", d2, d7, i32, -2, d11, i32, -1); + TESTINSN_bin("vrshl.s32 d2, d7, d11", d2, d7, i32, -2, d11, i32, -1); + TESTINSN_bin("vrshl.s8 d2, d7, d11", d2, d7, i32, -1, d11, i32, 0); + TESTINSN_bin("vrshl.s16 d2, d7, d11", d2, d7, i32, -1, d11, i32, 0); + TESTINSN_bin("vrshl.s32 d2, d7, d11", d2, d7, i32, -1, d11, i32, 0); + TESTINSN_bin("vrshl.s8 d2, d7, d11", d2, d7, i32, -1, d11, i32, 40); + TESTINSN_bin("vrshl.s8 d13, d1, d2", d13, d1, i32, -4, d2, i32, 30); + TESTINSN_bin("vrshl.s8 d3, d7, d5", d3, d7, i32, (1 << 31) + 11, d5, i32, 3); + TESTINSN_bin("vrshl.s8 d10, d11, d12", d10, d11, i32, (1 << 16), d12, i32, 16); + TESTINSN_bin("vrshl.s8 d6, d7, d8", d6, d7, i32, (1 << 30), d8, i32, 2); + TESTINSN_bin("vrshl.s8 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin("vrshl.u64 d0, d1, d2", d0, d1, i32, 1, d2, i32, 1); + TESTINSN_bin("vrshl.u64 d3, d4, d5", d3, d4, i32, -127, d5, i32, 1); + TESTINSN_bin("vrshl.u64 d3, d4, d5", d3, d4, i32, -127, d5, i32, -3); + TESTINSN_bin("vrshl.u64 d0, d1, d2", d0, d1, i32, 16, d2, i32, 14); + TESTINSN_bin("vrshl.u64 d13, d14, d15", d13, d14, i32, -17, d15, i32, -26); + TESTINSN_bin("vrshl.u64 d7, d8, d2", d7, d8, i32, 24, d2, i32, -60); + TESTINSN_bin("vrshl.u32 d3, d4, d15", d3, d4, i32, 127, d15, i32, -30); + TESTINSN_bin("vrshl.u32 d2, d8, d4", d2, d8, i32, -11, d4, i32, -4); + TESTINSN_bin("vrshl.u32 d12, d11, d13", d12, d11, i32, -120, d13, i32, -9); + TESTINSN_bin("vrshl.u32 d0, d1, d2", d0, d1, i32, 34, d2, i32, -7); + TESTINSN_bin("vrshl.u32 d9, d10, d11", d9, d10, i32, (1 << 31) + 8, d11, i32, -1); + TESTINSN_bin("vrshl.u32 d13, d3, d5", d13, d3, i32, (1 << 27), d5, i32, 3); + TESTINSN_bin("vrshl.u16 d11, d10, d2", d11, d10, i32, (1 << 31), d2, i32, -31); + TESTINSN_bin("vrshl.u16 d3, d14, d7", d3, d14, i32, (1 << 31), d7, i32, -3); + TESTINSN_bin("vrshl.u16 d0, d31, d2", d0, d31, i32, (1 << 31) + 256, d2, i32, -1); + TESTINSN_bin("vrshl.u16 d1, d2, d3", d1, d2, i32, (1 << 31) + 256, d3, i32, -31); + TESTINSN_bin("vrshl.u16 d3, d4, d5", d3, d4, i32, (1 << 31) + (1 << 29), d5, i32, -13); + TESTINSN_bin("vrshl.u16 d0, d15, d2", d0, d15, i32, 1, d2, i32, 30); + TESTINSN_bin("vrshl.u8 d2, d7, d11", d2, d7, i32, -1, d11, i32, 40); + TESTINSN_bin("vrshl.u8 d2, d7, d11", d2, d7, i32, -1, d11, i32, -1); + TESTINSN_bin("vrshl.u8 d2, d7, d11", d2, d7, i32, 0xf, d11, i32, -1); + TESTINSN_bin("vrshl.u16 d2, d7, d11", d2, d7, i32, 0xf, d11, i32, -1); + TESTINSN_bin("vrshl.u32 d2, d7, d11", d2, d7, i32, 0xf, d11, i32, -1); + TESTINSN_bin("vrshl.u8 d2, d7, d11", d2, d7, i32, -1, d11, i32, -1); + TESTINSN_bin("vrshl.u16 d2, d7, d11", d2, d7, i32, -1, d11, i32, -1); + TESTINSN_bin("vrshl.u32 d2, d7, d11", d2, d7, i32, -1, d11, i32, -1); + TESTINSN_bin("vrshl.u8 d2, d7, d31", d2, d7, i32, -2, d31, i32, -1); + TESTINSN_bin("vrshl.u16 d2, d7, d31", d2, d7, i32, -2, d31, i32, -1); + TESTINSN_bin("vrshl.u32 d2, d7, d31", d2, d7, i32, -2, d31, i32, -1); + TESTINSN_bin("vrshl.u8 d13, d1, d2", d13, d1, i32, -4, d2, i32, 30); + TESTINSN_bin("vrshl.u8 d3, d7, d5", d3, d7, i32, (1 << 31) + 11, d5, i32, 3); + TESTINSN_bin("vrshl.u8 d10, d11, d12", d10, d11, i32, (1 << 16), d12, i32, 16); + TESTINSN_bin("vrshl.u8 d6, d7, d8", d6, d7, i32, (1 << 30), d8, i32, 2); + TESTINSN_bin("vrshl.u8 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VMAX (integer) ----\n"); + TESTINSN_bin("vmax.s32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 121); + TESTINSN_bin("vmax.s32 d0, d1, d2", d0, d1, i32, 250, d2, i32, 121); + TESTINSN_bin("vmax.s32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 140); + TESTINSN_bin("vmax.s16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vmax.s8 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vmax.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 3); + TESTINSN_bin("vmax.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vmax.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vmax.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 4, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.s32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin("vmax.u32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vmax.u32 d0, d1, d2", d0, d1, i32, 250, d2, i32, 120); + TESTINSN_bin("vmax.u32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 140); + TESTINSN_bin("vmax.u16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vmax.u8 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vmax.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vmax.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vmax.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vmax.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmax.u32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VMIN (integer) ----\n"); + TESTINSN_bin("vmin.s32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 121); + TESTINSN_bin("vmin.s32 d0, d1, d2", d0, d1, i32, 250, d2, i32, 121); + TESTINSN_bin("vmin.s32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vmin.s16 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vmin.s8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 140); + TESTINSN_bin("vmin.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 3); + TESTINSN_bin("vmin.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vmin.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vmin.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 4, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.s32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin("vmin.u32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vmin.u32 d0, d1, d2", d0, d1, i32, 250, d2, i32, 120); + TESTINSN_bin("vmin.u32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vmin.u16 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vmin.u8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 140); + TESTINSN_bin("vmin.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vmin.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vmin.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vmin.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vmin.u32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VABD ----\n"); + TESTINSN_bin("vabd.s32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vabd.s32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 121); + TESTINSN_bin("vabd.s32 d0, d1, d2", d0, d1, i32, 140, d2, i32, -120); + TESTINSN_bin("vabd.s16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vabd.s8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vabd.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.s8 d5, d7, d5", d5, d7, i32, -255, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, -200); + TESTINSN_bin("vabd.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 3); + TESTINSN_bin("vabd.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vabd.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vabd.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 4, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.s32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin("vabd.u32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vabd.u32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vabd.u16 d0, d1, d2", d0, d1, i32, -140, d2, i32, 120); + TESTINSN_bin("vabd.u8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vabd.u8 d5, d7, d5", d5, d7, i32, -255, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.u8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, -200); + TESTINSN_bin("vabd.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vabd.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vabd.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vabd.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vabd.u32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VABA ----\n"); + TESTINSN_bin("vaba.s32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vaba.s32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 121); + TESTINSN_bin("vaba.s32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vaba.s16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vaba.s8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vaba.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.s8 d5, d7, d5", d5, d7, i32, -255, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, -200); + TESTINSN_bin("vaba.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 3); + TESTINSN_bin("vaba.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vaba.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vaba.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 4, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.s32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin("vaba.u32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vaba.u32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vaba.u16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vaba.u8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vaba.u8 d5, d7, d5", d5, d7, i32, -255, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.u8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, -200); + TESTINSN_bin("vaba.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vaba.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vaba.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vaba.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vaba.u32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VTST ----\n"); + TESTINSN_bin("vtst.32 d0, d1, d2", d0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin("vtst.32 d3, d4, d5", d3, d4, i32, 140, d5, i32, 120); + TESTINSN_bin("vtst.16 d6, d7, d8", d6, d7, i32, 120, d8, i32, 120); + TESTINSN_bin("vtst.8 d9, d10, d12", d9, d10, i32, 140, d12, i32, 120); + TESTINSN_bin("vtst.8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vtst.16 d0, d1, d2", d0, d1, i32, (1 << 14) + 1, d2, i32, (1 << 14) + 1); + TESTINSN_bin("vtst.32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vtst.8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, 2); + TESTINSN_bin("vtst.16 d0, d1, d2", d0, d1, i32, (1 << 14) + 1, d2, i32, (1 << 14) + 1); + TESTINSN_bin("vtst.32 d0, d1, d2", d0, d1, i32, 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vtst.32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VCEQ ----\n"); + TESTINSN_bin("vceq.i32 d0, d1, d2", d0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin("vceq.i32 d3, d4, d5", d3, d4, i32, 140, d5, i32, 120); + TESTINSN_bin("vceq.i16 d6, d7, d8", d6, d7, i32, 120, d8, i32, 120); + TESTINSN_bin("vceq.i8 d9, d10, d12", d9, d10, i32, 140, d12, i32, 120); + TESTINSN_bin("vceq.i8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vceq.i16 d0, d1, d2", d0, d1, i32, (1 << 14) + 1, d2, i32, (1 << 14) + 1); + TESTINSN_bin("vceq.i32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vceq.i8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, 2); + TESTINSN_bin("vceq.i16 d0, d1, d2", d0, d1, i32, 1, d2, i32, (1 << 14) + 1); + TESTINSN_bin("vceq.i32 d0, d1, d2", d0, d1, i32, 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vceq.i32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VMLA ----\n"); + TESTINSN_bin("vmla.i32 d0, d1, d2", d0, d1, i32, -24, d2, i32, 120); + TESTINSN_bin("vmla.i32 d6, d7, d8", d6, d7, i32, 140, d8, i32, 120); + TESTINSN_bin("vmla.i16 d9, d11, d12", d9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin("vmla.i8 d0, d1, d2", d0, d1, i32, 140, d2, i32, -120); + TESTINSN_bin("vmla.i8 d10, d11, d12", d10, d11, i32, (1 << 5) + 1, d12, i32, (1 << 3) + 2); + TESTINSN_bin("vmla.i16 d4, d5, d6", d4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmla.i32 d7, d8, d9", d7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmla.i8 d10, d13, d12", d10, d13, i32, (1 << 5) + 1, d12, i32, (1 << 3) + 2); + TESTINSN_bin("vmla.i16 d4, d5, d6", d4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmla.i32 d7, d8, d9", d7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmla.i32 d10, d11, d15", d10, d11, i32, 24, d15, i32, -120); + + printf("---- VMLS ----\n"); + TESTINSN_bin("vmls.i32 d0, d1, d2", d0, d1, i32, -24, d2, i32, 120); + TESTINSN_bin("vmls.i32 d6, d7, d8", d6, d7, i32, 140, d8, i32, -120); + TESTINSN_bin("vmls.i16 d9, d11, d12", d9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin("vmls.i8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vmls.i8 d10, d11, d12", d10, d11, i32, (1 << 5) + 1, d12, i32, (1 << 3) + 2); + TESTINSN_bin("vmls.i16 d4, d5, d6", d4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmls.i32 d7, d8, d9", d7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmls.i8 d10, d13, d12", d10, d13, i32, (1 << 5) + 1, d12, i32, (1 << 3) + 2); + TESTINSN_bin("vmls.i16 d4, d5, d6", d4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmls.i32 d7, d8, d9", d7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmls.i32 d10, d11, d15", d10, d11, i32, -24, d15, i32, 120); + + printf("---- VMUL ----\n"); + TESTINSN_bin("vmul.i32 d0, d1, d2", d0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin("vmul.i32 d6, d7, d8", d6, d7, i32, 140, d8, i32, -120); + TESTINSN_bin("vmul.i16 d9, d11, d12", d9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin("vmul.i8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vmul.i8 d10, d11, d12", d10, d11, i32, (1 << 5) + 1, d12, i32, (1 << 3) + 2); + TESTINSN_bin("vmul.i16 d4, d5, d6", d4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmul.i32 d7, d8, d9", d7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmul.i8 d10, d11, d12", d10, d11, i32, (1 << 25) + 0xfeb2, d12, i32, (1 << 13) + 0xdf); + TESTINSN_bin("vmul.i16 d4, d5, d6", d4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmul.i32 d7, d8, d9", d7, d8, i32, (1 << 31), d9, i32, 12); + TESTINSN_bin("vmul.i8 d10, d13, d12", d10, d13, i32, (1 << 5) + 1, d12, i32, (1 << 3) + 2); + TESTINSN_bin("vmul.i16 d4, d5, d6", d4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmul.i32 d7, d8, d9", d7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin("vmul.i32 d10, d11, d15", d10, d11, i32, 24, d15, i32, 120); + TESTINSN_bin("vmul.p8 q0, q1, q2", q0, q1, i32, 3, q2, i32, 3); + TESTINSN_bin("vmul.p8 q0, q1, q2", q0, q1, i32, 12, q2, i8, 0x0f); + + printf("---- VMUL (by scalar) ----\n"); + TESTINSN_bin("vmul.i32 d0, d1, d4[0]", d0, d1, i32, 24, d4, i32, 120); + TESTINSN_bin("vmul.i32 d31, d8, d7[1]", d31, d8, i32, 140, d7, i32, -120); + TESTINSN_bin("vmul.i16 d30, d9, d7[3]", d30, d9, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin("vmul.i16 d4, d5, d6[2]", d4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmul.i32 d4, d8, d15[1]", d4, d8, i32, (1 << 31) + 1, d15, i32, (1 << 31) + 2); + TESTINSN_bin("vmul.i16 d4, d5, d6[0]", d4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmul.i32 d7, d8, d1[1]", d7, d8, i32, (1 << 31), d1, i16, 12); + TESTINSN_bin("vmul.i16 d4, d5, d6[0]", d4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmul.i32 d7, d8, d1[1]", d7, d8, i32, (1 << 31) + 1, d1, i32, (1 << 31) + 2); + + printf("---- VMLA (by scalar) ----\n"); + TESTINSN_bin("vmla.i32 d0, d1, d4[0]", d0, d1, i32, 24, d4, i32, 120); + TESTINSN_bin("vmla.i32 d31, d8, d7[1]", d31, d8, i32, 140, d7, i32, -120); + TESTINSN_bin("vmla.i16 d30, d9, d7[3]", d30, d9, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin("vmla.i16 d4, d5, d6[2]", d4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmla.i32 d4, d8, d15[1]", d4, d8, i32, (1 << 31) + 1, d15, i32, (1 << 31) + 2); + TESTINSN_bin("vmla.i16 d4, d5, d6[0]", d4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmla.i32 d7, d8, d1[1]", d7, d8, i32, (1 << 31), d1, i16, 12); + TESTINSN_bin("vmla.i16 d4, d5, d6[0]", d4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmla.i32 d7, d8, d1[1]", d7, d8, i32, (1 << 31) + 1, d1, i32, (1 << 31) + 2); + + printf("---- VMLS (by scalar) ----\n"); + TESTINSN_bin("vmls.i32 d0, d1, d4[0]", q0, q1, i32, 24, d4, i32, 120); + TESTINSN_bin("vmls.i32 d31, d8, d7[1]", d31, d8, i32, 140, d7, i32, -120); + TESTINSN_bin("vmls.i16 d30, d9, d7[3]", d30, d9, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin("vmls.i16 d4, d5, d6[2]", d4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmls.i32 d4, d8, d15[1]", d4, d8, i32, (1 << 31) + 1, d15, i32, (1 << 31) + 2); + TESTINSN_bin("vmls.i16 d4, d5, d6[0]", d4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmls.i32 d7, d8, d1[1]", d7, d8, i32, (1 << 31), d1, i16, 12); + TESTINSN_bin("vmls.i16 d4, d5, d6[0]", d4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin("vmls.i32 d7, d8, d1[1]", d7, d8, i32, (1 << 31) + 1, d1, i32, (1 << 31) + 2); + + printf("---- VRSHR ----\n"); + TESTINSN_un("vrshr.s8 d0, d1, #0", d0, d1, i32, -1); + TESTINSN_un("vrshr.s8 d0, d1, #1", d0, d1, i32, -1); + TESTINSN_un("vrshr.s16 d3, d4, #2", d3, d4, i32, -0x7c); + TESTINSN_un("vrshr.s32 d2, d5, #31", d2, d5, i32, -1); + TESTINSN_un("vrshr.s8 d6, d7, #7", d6, d7, i32, 0xffff); + TESTINSN_un("vrshr.s16 d8, d9, #12", d8, d9, i32, -10); + TESTINSN_un("vrshr.s32 d10, d11, #5", d10, d11, i32, 10234); + TESTINSN_un("vrshr.u8 d12, d13, #1", d12, d13, i32, -1); + TESTINSN_un("vrshr.u16 d14, d15, #11", d14, d15, i32, -1); + TESTINSN_un("vrshr.u32 d10, d11, #9", d10, d11, i32, 1000); + TESTINSN_un("vrshr.u8 d7, d13, #7", d7, d13, i32, -1); + TESTINSN_un("vrshr.u16 d8, d1, #5", d8, d1, i32, 0xabcf); + TESTINSN_un("vrshr.u32 d12, d3, #15", d12, d3, i32, -0x1b0); + TESTINSN_un("vrshr.u64 d0, d1, #42", d0, d1, i32, -1); + TESTINSN_un("vrshr.s64 d6, d7, #12", d6, d7, i32, 0xfac); + TESTINSN_un("vrshr.u64 d8, d4, #9", d8, d4, i32, 13560); + TESTINSN_un("vrshr.s64 d9, d12, #11", d9, d12, i32, 98710); + + printf("---- VRSRA ----\n"); + TESTINSN_un("vrsra.s8 d0, d1, #1", d0, d1, i32, -1); + TESTINSN_un("vrsra.s16 d3, d4, #2", d3, d4, i32, -0x7c); + TESTINSN_un("vrsra.s32 d2, d5, #31", d2, d5, i32, -1); + TESTINSN_un("vrsra.s8 d6, d7, #7", d6, d7, i32, 0xffff); + TESTINSN_un("vrsra.s16 d8, d9, #12", d8, d9, i32, -10); + TESTINSN_un("vrsra.s32 d10, d11, #5", d10, d11, i32, 10234); + TESTINSN_un("vrsra.u8 d12, d13, #1", d12, d13, i32, -1); + TESTINSN_un("vrsra.u16 d14, d15, #11", d14, d15, i32, -1); + TESTINSN_un("vrsra.u32 d10, d11, #9", d10, d11, i32, 1000); + TESTINSN_un("vrsra.u8 d7, d13, #7", d7, d13, i32, -1); + TESTINSN_un("vrsra.u16 d8, d1, #5", d8, d1, i32, 0xabcf); + TESTINSN_un("vrsra.u32 d12, d3, #15", d12, d3, i32, -0x1b0); + TESTINSN_un("vrsra.u64 d0, d1, #42", d0, d1, i32, -1); + TESTINSN_un("vrsra.s64 d6, d7, #12", d6, d7, i32, 0xfac); + TESTINSN_un("vrsra.u64 d8, d4, #9", d8, d4, i32, 13560); + TESTINSN_un("vrsra.s64 d9, d12, #11", d9, d12, i32, 98710); + + printf("---- VSHR ----\n"); + TESTINSN_un("vshr.s8 d0, d1, #0", d0, d1, i32, -1); + TESTINSN_un("vshr.s8 d0, d1, #1", d0, d1, i32, -1); + TESTINSN_un("vshr.s16 d3, d4, #2", d3, d4, i32, -0x7c); + TESTINSN_un("vshr.s32 d2, d5, #31", d2, d5, i32, -1); + TESTINSN_un("vshr.s8 d6, d7, #7", d6, d7, i32, 0xffff); + TESTINSN_un("vshr.s16 d8, d9, #12", d8, d9, i32, -10); + TESTINSN_un("vshr.s32 d10, d11, #5", d10, d11, i32, 10234); + TESTINSN_un("vshr.u8 d12, d13, #1", d12, d13, i32, -1); + TESTINSN_un("vshr.u16 d14, d15, #11", d14, d15, i32, -1); + TESTINSN_un("vshr.u32 d10, d11, #9", d10, d11, i32, 1000); + TESTINSN_un("vshr.u8 d7, d13, #7", d7, d13, i32, -1); + TESTINSN_un("vshr.u16 d8, d1, #5", d8, d1, i32, 0xabcf); + TESTINSN_un("vshr.u32 d12, d3, #15", d12, d3, i32, -0x1b0); + TESTINSN_un("vshr.u64 d0, d1, #42", d0, d1, i32, -1); + TESTINSN_un("vshr.s64 d6, d7, #12", d6, d7, i32, 0xfac); + TESTINSN_un("vshr.u64 d8, d4, #9", d8, d4, i32, 13560); + TESTINSN_un("vshr.s64 d9, d12, #11", d9, d12, i32, 98710); + + printf("---- VSRA ----\n"); + TESTINSN_un("vsra.s8 d0, d1, #1", d0, d1, i32, -1); + TESTINSN_un("vsra.s16 d3, d4, #2", d3, d4, i32, -0x7c); + TESTINSN_un("vsra.s32 d2, d5, #31", d2, d5, i32, -1); + TESTINSN_un("vsra.s8 d6, d7, #7", d6, d7, i32, 0xffff); + TESTINSN_un("vsra.s16 d8, d9, #12", d8, d9, i32, -10); + TESTINSN_un("vsra.s32 d10, d11, #5", d10, d11, i32, 10234); + TESTINSN_un("vsra.u8 d12, d13, #1", d12, d13, i32, -1); + TESTINSN_un("vsra.u16 d14, d15, #11", d14, d15, i32, -1); + TESTINSN_un("vsra.u32 d10, d11, #9", d10, d11, i32, 1000); + TESTINSN_un("vsra.u8 d7, d13, #7", d7, d13, i32, -1); + TESTINSN_un("vsra.u16 d8, d1, #5", d8, d1, i32, 0xabcf); + TESTINSN_un("vsra.u32 d12, d3, #15", d12, d3, i32, -0x1b0); + TESTINSN_un("vsra.u64 d0, d1, #42", d0, d1, i32, -1); + TESTINSN_un("vsra.s64 d6, d7, #12", d6, d7, i32, 0xfac); + TESTINSN_un("vsra.u64 d8, d4, #9", d8, d4, i32, 13560); + TESTINSN_un("vsra.s64 d9, d12, #11", d9, d12, i32, 98710); + + printf("---- VSRI ----\n"); + TESTINSN_un("vsri.16 d0, d1, #1", d0, d1, i32, -1); + TESTINSN_un("vsri.16 d3, d4, #2", d3, d4, i32, -0x7c); + TESTINSN_un("vsri.32 d2, d5, #31", d2, d5, i32, -1); + TESTINSN_un("vsri.8 d6, d7, #7", d6, d7, i32, 0xffff); + TESTINSN_un("vsri.16 d8, d9, #12", d8, d9, i32, -10); + TESTINSN_un("vsri.32 d10, d11, #5", d10, d11, i32, 10234); + TESTINSN_un("vsri.8 d12, d13, #1", d12, d13, i32, -1); + TESTINSN_un("vsri.16 d14, d15, #11", d14, d15, i32, -1); + TESTINSN_un("vsri.32 d10, d11, #9", d10, d11, i32, 1000); + TESTINSN_un("vsri.8 d7, d13, #7", d7, d13, i32, -1); + TESTINSN_un("vsri.16 d8, d1, #5", d8, d1, i32, 0xabcf); + TESTINSN_un("vsri.32 d12, d3, #15", d12, d3, i32, -0x1b0); + TESTINSN_un("vsri.64 d0, d1, #42", d0, d1, i32, -1); + TESTINSN_un("vsri.64 d6, d7, #12", d6, d7, i32, 0xfac); + TESTINSN_un("vsri.64 d8, d4, #9", d8, d4, i32, 13560); + TESTINSN_un("vsri.64 d9, d12, #11", d9, d12, i32, 98710); + + printf("---- VMOV (ARM core register to scalar) ----\n"); + TESTINSN_core_to_scalar("vmov.32 d0[0], r5", d0, r5, 13); + TESTINSN_core_to_scalar("vmov.32 d1[1], r3", d1, r3, 12); + TESTINSN_core_to_scalar("vmov.16 d0[0], r5", d0, r5, 13); + TESTINSN_core_to_scalar("vmov.16 d2[2], r6", d2, r6, 14); + TESTINSN_core_to_scalar("vmov.16 d3[3], r1", d3, r1, 17); + TESTINSN_core_to_scalar("vmov.8 d0[0], r5", d0, r5, 13); + TESTINSN_core_to_scalar("vmov.8 d0[1], r5", d0, r5, 13); + TESTINSN_core_to_scalar("vmov.8 d0[2], r5", d0, r5, 13); + TESTINSN_core_to_scalar("vmov.8 d0[3], r5", d0, r5, 13); + TESTINSN_core_to_scalar("vmov.8 d0[4], r5", d0, r5, 13); + TESTINSN_core_to_scalar("vmov.8 d0[5], r5", d0, r5, 13); + TESTINSN_core_to_scalar("vmov.8 d0[6], r5", d0, r5, 13); + TESTINSN_core_to_scalar("vmov.8 d31[7], r5", d31, r5, 13); + + printf("---- VMOV (scalar toARM core register) ----\n"); + TESTINSN_scalar_to_core("vmov.32 r5, d0[0]", r5, d0, i32, 0x11223344); + TESTINSN_scalar_to_core("vmov.32 r6, d5[1]", r6, d5, i32, 0x11223344); + TESTINSN_scalar_to_core("vmov.u16 r5, d31[0]", r5, d31, i32, 0x11223344); + TESTINSN_scalar_to_core("vmov.u16 r5, d30[1]", r5, d30, i32, 0x11223344); + TESTINSN_scalar_to_core("vmov.u16 r5, d31[2]", r5, d31, i32, 0x11223344); + TESTINSN_scalar_to_core("vmov.u16 r5, d31[3]", r5, d31, i32, 0x11223344); + TESTINSN_scalar_to_core("vmov.u8 r2, d4[0]", r2, d4, i32, 0x11223344); + TESTINSN_scalar_to_core("vmov.u8 r2, d4[1]", r2, d4, i32, 0x11223344); + TESTINSN_scalar_to_core("vmov.u8 r2, d4[2]", r2, d4, i32, 0x11223344); + TESTINSN_scalar_to_core("vmov.u8 r2, d4[3]", r2, d4, i32, 0x11223344); + TESTINSN_scalar_to_core("vmov.u8 r2, d4[4]", r2, d4, i32, 0x11223344); + TESTINSN_scalar_to_core("vmov.u8 r2, d4[5]", r2, d4, i32, 0x11223344); + TESTINSN_scalar_to_core("vmov.u8 r2, d4[6]", r2, d4, i32, 0x11223344); + TESTINSN_scalar_to_core("vmov.u8 r2, d4[7]", r2, d4, i32, 0x11223344); + TESTINSN_scalar_to_core("vmov.s16 r5, d31[0]", r5, d31, i8, 128); + TESTINSN_scalar_to_core("vmov.s16 r5, d30[1]", r5, d30, i8, 128); + TESTINSN_scalar_to_core("vmov.s16 r5, d31[2]", r5, d31, i8, 128); + TESTINSN_scalar_to_core("vmov.s16 r5, d31[3]", r5, d31, i8, 128); + TESTINSN_scalar_to_core("vmov.s8 r2, d4[0]", r2, d4, i8, 128); + TESTINSN_scalar_to_core("vmov.s8 r2, d4[1]", r2, d4, i8, 128); + TESTINSN_scalar_to_core("vmov.s8 r2, d4[2]", r2, d4, i8, 128); + TESTINSN_scalar_to_core("vmov.s8 r2, d4[3]", r2, d4, i8, 128); + TESTINSN_scalar_to_core("vmov.s8 r2, d4[4]", r2, d4, i8, 128); + TESTINSN_scalar_to_core("vmov.s8 r2, d4[5]", r2, d4, i8, 130); + TESTINSN_scalar_to_core("vmov.s8 r2, d4[6]", r2, d4, i8, 129); + TESTINSN_scalar_to_core("vmov.s8 r2, d4[7]", r2, d4, i8, 131); + + printf("---- VLD1 (multiple single elements) ----\n"); + TESTINSN_VLDn("vld1.8 {d0}", d0, d0, d0, d0); + TESTINSN_VLDn("vld1.16 {d0}", d0, d0, d0, d0); + TESTINSN_VLDn("vld1.32 {d0}", d0, d0, d0, d0); + TESTINSN_VLDn("vld1.64 {d0}", d0, d0, d0, d0); + TESTINSN_VLDn("vld1.8 {d9}", d9, d9, d9, d9); + TESTINSN_VLDn("vld1.16 {d17}", d17, d17, d17, d17); + TESTINSN_VLDn("vld1.32 {d31}", d31, d31, d31, d31); + TESTINSN_VLDn("vld1.64 {d14}", d14, d14, d14, d14); + TESTINSN_VLDn("vld1.8 {d0-d1}", d0, d1, d0, d1); + TESTINSN_VLDn("vld1.16 {d0-d1}", d0, d1, d0, d1); + TESTINSN_VLDn("vld1.32 {d5-d6}", d5, d6, d5, d6); + TESTINSN_VLDn("vld1.64 {d30-d31}", d30, d31, d30, d31); + TESTINSN_VLDn("vld1.8 {d0-d2}", d0, d1, d2, d0); + TESTINSN_VLDn("vld1.16 {d0-d2}", d0, d1, d2, d0); + TESTINSN_VLDn("vld1.32 {d0-d2}", d0, d1, d2, d0); + TESTINSN_VLDn("vld1.64 {d0-d2}", d0, d1, d2, d0); + TESTINSN_VLDn("vld1.8 {d0-d3}", d0, d1, d2, d3); + TESTINSN_VLDn("vld1.16 {d0-d3}", d0, d1, d2, d3); + TESTINSN_VLDn("vld1.32 {d0-d3}", d0, d1, d2, d3); + TESTINSN_VLDn("vld1.64 {d0-d3}", d0, d1, d2, d3); + + printf("---- VLD1 (single element to one lane) ----\n"); + TESTINSN_VLDn("vld1.32 {d0[0]}", d0, d0, d0, d0); + TESTINSN_VLDn("vld1.32 {d0[1]}", d0, d0, d0, d0); + TESTINSN_VLDn("vld1.16 {d1[0]}", d1, d1, d1, d1); + TESTINSN_VLDn("vld1.16 {d1[1]}", d1, d1, d1, d1); + TESTINSN_VLDn("vld1.16 {d1[2]}", d1, d1, d1, d1); + TESTINSN_VLDn("vld1.16 {d1[3]}", d1, d1, d1, d1); + TESTINSN_VLDn("vld1.8 {d0[7]}", d0, d0, d0, d0); + TESTINSN_VLDn("vld1.8 {d1[6]}", d1, d1, d1, d1); + TESTINSN_VLDn("vld1.8 {d0[5]}", d0, d0, d0, d0); + TESTINSN_VLDn("vld1.8 {d0[4]}", d0, d0, d0, d0); + TESTINSN_VLDn("vld1.8 {d20[3]}", d20, d20, d20, d20); + TESTINSN_VLDn("vld1.8 {d0[2]}", d0, d0, d0, d0); + TESTINSN_VLDn("vld1.8 {d17[1]}", d17, d17, d17, d17); + TESTINSN_VLDn("vld1.8 {d30[0]}", d30, d30, d30, d30); + + printf("---- VLD1 (single element to all lanes) ----\n"); + TESTINSN_VLDn("vld1.8 {d0[]}", d0, d0, d0, d0); + TESTINSN_VLDn("vld1.16 {d0[]}", d0, d0, d0, d0); + TESTINSN_VLDn("vld1.32 {d0[]}", d0, d0, d0, d0); + TESTINSN_VLDn("vld1.8 {d9[]}", d9, d9, d9, d9); + TESTINSN_VLDn("vld1.16 {d17[]}", d17, d17, d17, d17); + TESTINSN_VLDn("vld1.32 {d31[]}", d31, d31, d31, d31); + TESTINSN_VLDn("vld1.8 {d0[],d1[]}", d0, d1, d0, d1); + TESTINSN_VLDn("vld1.16 {d0[],d1[]}", d0, d1, d0, d1); + TESTINSN_VLDn("vld1.32 {d5[],d6[]}", d5, d6, d5, d6); + + printf("---- VLD2 (multiple 2-elements) ----\n"); + TESTINSN_VLDn("vld2.8 {d30-d31}", d30, d31, d30, d31); + TESTINSN_VLDn("vld2.16 {d0-d1}", d0, d1, d0, d1); + TESTINSN_VLDn("vld2.32 {d0-d1}", d0, d1, d0, d1); + TESTINSN_VLDn("vld2.8 {d10,d12}", d10, d12, d10, d12); + TESTINSN_VLDn("vld2.16 {d20,d22}", d20, d22, d20, d22); + TESTINSN_VLDn("vld2.32 {d0,d2}", d0, d2, d0, d2); + TESTINSN_VLDn("vld2.8 {d0-d3}", d0, d1, d2, d3); + TESTINSN_VLDn("vld2.16 {d20-d23}", d20, d21, d22, d23); + TESTINSN_VLDn("vld2.32 {d0-d3}", d0, d1, d2, d3); + + printf("---- VLD2 (single 2-element structure to one lane) ----\n"); + TESTINSN_VLDn("vld2.32 {d0[0],d1[0]}", d0, d1, d0, d1); + TESTINSN_VLDn("vld2.32 {d0[1],d1[1]}", d0, d1, d0, d1); + TESTINSN_VLDn("vld2.32 {d0[0],d2[0]}", d0, d2, d0, d2); + TESTINSN_VLDn("vld2.32 {d0[1],d2[1]}", d0, d2, d0, d2); + TESTINSN_VLDn("vld2.16 {d1[0],d2[0]}", d1, d2, d1, d2); + TESTINSN_VLDn("vld2.16 {d1[1],d2[1]}", d1, d2, d1, d2); + TESTINSN_VLDn("vld2.16 {d1[2],d2[2]}", d1, d2, d1, d2); + TESTINSN_VLDn("vld2.16 {d1[3],d2[3]}", d1, d2, d1, d2); + TESTINSN_VLDn("vld2.16 {d1[0],d3[0]}", d1, d3, d1, d3); + TESTINSN_VLDn("vld2.16 {d1[1],d3[1]}", d1, d3, d1, d3); + TESTINSN_VLDn("vld2.16 {d1[2],d3[2]}", d1, d3, d1, d3); + TESTINSN_VLDn("vld2.16 {d1[3],d3[3]}", d1, d3, d1, d3); + TESTINSN_VLDn("vld2.8 {d0[7],d1[7]}", d0, d1, d0, d1); + TESTINSN_VLDn("vld2.8 {d1[6],d2[6]}", d1, d2, d1, d2); + TESTINSN_VLDn("vld2.8 {d0[5],d1[5]}", d0, d1, d0, d1); + TESTINSN_VLDn("vld2.8 {d0[4],d1[4]}", d0, d1, d0, d1); + TESTINSN_VLDn("vld2.8 {d20[3],d21[3]}", d20, d21, d20, d21); + TESTINSN_VLDn("vld2.8 {d0[2],d1[2]}", d0, d1, d0, d1); + TESTINSN_VLDn("vld2.8 {d17[1],d18[1]}", d17, d18, d17, d18); + TESTINSN_VLDn("vld2.8 {d30[0],d31[0]}", d30, d31, d30, d31); + + printf("---- VLD2 (2-elements to all lanes) ----\n"); + TESTINSN_VLDn("vld2.8 {d0[],d1[]}", d0, d1, d0, d1); + TESTINSN_VLDn("vld2.16 {d0[],d1[]}", d0, d1, d0, d1); + TESTINSN_VLDn("vld2.32 {d0[],d1[]}", d0, d1, d0, d1); + TESTINSN_VLDn("vld2.8 {d9[],d11[]}", d9, d11, d9, d11); + TESTINSN_VLDn("vld2.16 {d17[],d18[]}", d17, d18, d17, d18); + TESTINSN_VLDn("vld2.32 {d30[],d31[]}", d30, d31, d30, d31); + TESTINSN_VLDn("vld2.8 {d0[],d2[]}", d0, d2, d0, d2); + TESTINSN_VLDn("vld2.16 {d0[],d2[]}", d0, d2, d0, d2); + TESTINSN_VLDn("vld2.32 {d5[],d7[]}", d5, d7, d5, d7); + + printf("---- VLD3 (multiple 3-elements) ----\n"); + TESTINSN_VLDn("vld3.8 {d20-d22}", d20, d21, d22, d20); + TESTINSN_VLDn("vld3.16 {d0-d2}", d0, d1, d2, d0); + TESTINSN_VLDn("vld3.32 {d0-d2}", d0, d1, d2, d0); + TESTINSN_VLDn("vld3.8 {d0,d2,d4}", d0, d2, d4, d0); + TESTINSN_VLDn("vld3.16 {d20,d22,d24}", d20, d22, d24, d20); + TESTINSN_VLDn("vld3.32 {d0,d2,d4}", d0, d2, d4, d0); + + printf("---- VLD3 (single 3-element structure to one lane) ----\n"); + TESTINSN_VLDn("vld3.32 {d0[0],d1[0],d2[0]}", d0, d1, d2, d1); + TESTINSN_VLDn("vld3.32 {d0[1],d1[1],d2[1]}", d0, d1, d2, d1); + TESTINSN_VLDn("vld3.32 {d0[0],d2[0],d4[0]}", d0, d2, d4, d2); + TESTINSN_VLDn("vld3.32 {d0[1],d2[1],d4[1]}", d0, d2, d4, d2); + TESTINSN_VLDn("vld3.16 {d1[0],d2[0],d3[0]}", d1, d2, d3, d2); + TESTINSN_VLDn("vld3.16 {d1[1],d2[1],d3[1]}", d1, d2, d3, d2); + TESTINSN_VLDn("vld3.16 {d1[2],d2[2],d3[2]}", d1, d2, d3, d2); + TESTINSN_VLDn("vld3.16 {d1[3],d2[3],d3[3]}", d1, d2, d3, d2); + TESTINSN_VLDn("vld3.16 {d1[0],d3[0],d5[0]}", d1, d3, d3, d5); + TESTINSN_VLDn("vld3.16 {d1[1],d3[1],d5[1]}", d1, d3, d3, d5); + TESTINSN_VLDn("vld3.16 {d1[2],d3[2],d5[2]}", d1, d3, d3, d5); + TESTINSN_VLDn("vld3.16 {d1[3],d3[3],d5[3]}", d1, d3, d3, d5); + TESTINSN_VLDn("vld3.8 {d0[7],d1[7],d2[7]}", d0, d1, d2, d1); + TESTINSN_VLDn("vld3.8 {d1[6],d2[6],d3[6]}", d1, d2, d3, d2); + TESTINSN_VLDn("vld3.8 {d0[5],d1[5],d2[5]}", d0, d1, d2, d1); + TESTINSN_VLDn("vld3.8 {d0[4],d1[4],d2[4]}", d0, d1, d2, d1); + TESTINSN_VLDn("vld3.8 {d20[3],d21[3],d22[3]}", d20, d21, d22, d21); + TESTINSN_VLDn("vld3.8 {d0[2],d1[2],d2[2]}", d0, d1, d2, d1); + TESTINSN_VLDn("vld3.8 {d17[1],d18[1],d19[1]}", d17, d18, d19, d18); + TESTINSN_VLDn("vld3.8 {d29[0],d30[0],d31[0]}", d30, d31, d29, d31); + + printf("---- VLD3 (3-elements to all lanes) ----\n"); + TESTINSN_VLDn("vld3.8 {d0[],d1[],d2[]}", d0, d1, d2, d1); + TESTINSN_VLDn("vld3.16 {d0[],d1[],d2[]}", d0, d1, d2, d1); + TESTINSN_VLDn("vld3.32 {d0[],d1[],d2[]}", d0, d1, d2, d1); + TESTINSN_VLDn("vld3.8 {d9[],d11[],d13[]}", d9, d11, d13, d11); + TESTINSN_VLDn("vld3.16 {d17[],d18[],d19[]}", d17, d18, d19, d18); + TESTINSN_VLDn("vld3.32 {d29[],d30[],d31[]}", d29, d30, d30, d31); + TESTINSN_VLDn("vld3.8 {d0[],d2[],d4[]}", d0, d2, d4, d2); + TESTINSN_VLDn("vld3.16 {d0[],d2[],d4[]}", d0, d2, d4, d2); + TESTINSN_VLDn("vld3.32 {d5[],d7[],d9[]}", d5, d7, d9, d7); + + printf("---- VLD4 (multiple 3-elements) ----\n"); + TESTINSN_VLDn("vld4.8 {d0-d3}", d0, d1, d2, d3); + TESTINSN_VLDn("vld4.16 {d20-d23}", d20, d21, d22, d23); + TESTINSN_VLDn("vld4.32 {d0-d3}", d0, d1, d2, d3); + TESTINSN_VLDn("vld4.8 {d0,d2,d4,d6}", d0, d2, d4, d6); + TESTINSN_VLDn("vld4.16 {d1,d3,d5,d7}", d1, d3, d5, d7); + TESTINSN_VLDn("vld4.32 {d20,d22,d24,d26}", d20, d22, d24, d26); + + printf("---- VLD4 (single 4-element structure to one lane) ----\n"); + TESTINSN_VLDn("vld4.32 {d0[0],d1[0],d2[0],d3[0]}", d0, d1, d2, d3); + TESTINSN_VLDn("vld4.32 {d0[1],d1[1],d2[1],d3[1]}", d0, d1, d2, d4); + TESTINSN_VLDn("vld4.32 {d0[0],d2[0],d4[0],d6[0]}", d0, d2, d4, d6); + TESTINSN_VLDn("vld4.32 {d0[1],d2[1],d4[1],d6[1]}", d0, d2, d4, d6); + TESTINSN_VLDn("vld4.16 {d1[0],d2[0],d3[0],d4[0]}", d1, d2, d3, d4); + TESTINSN_VLDn("vld4.16 {d1[1],d2[1],d3[1],d4[1]}", d1, d2, d3, d4); + TESTINSN_VLDn("vld4.16 {d1[2],d2[2],d3[2],d4[2]}", d1, d2, d3, d4); + TESTINSN_VLDn("vld4.16 {d1[3],d2[3],d3[3],d4[3]}", d1, d2, d3, d4); + TESTINSN_VLDn("vld4.16 {d1[0],d3[0],d5[0],d7[0]}", d1, d3, d5, d7); + TESTINSN_VLDn("vld4.16 {d1[1],d3[1],d5[1],d7[1]}", d1, d3, d5, d7); + TESTINSN_VLDn("vld4.16 {d1[2],d3[2],d5[2],d7[2]}", d1, d3, d5, d7); + TESTINSN_VLDn("vld4.16 {d1[3],d3[3],d5[3],d7[3]}", d1, d3, d5, d7); + TESTINSN_VLDn("vld4.8 {d0[7],d1[7],d2[7],d3[7]}", d0, d1, d2, d3); + TESTINSN_VLDn("vld4.8 {d1[6],d2[6],d3[6],d4[6]}", d1, d2, d3, d4); + TESTINSN_VLDn("vld4.8 {d0[5],d1[5],d2[5],d3[5]}", d0, d1, d2, d3); + TESTINSN_VLDn("vld4.8 {d0[4],d1[4],d2[4],d3[4]}", d0, d1, d2, d3); + TESTINSN_VLDn("vld4.8 {d20[3],d21[3],d22[3],d23[3]}", d20, d21, d22, d23); + TESTINSN_VLDn("vld4.8 {d0[2],d1[2],d2[2],d3[2]}", d0, d1, d2, d3); + TESTINSN_VLDn("vld4.8 {d17[1],d18[1],d19[1],d20[1]}", d17, d18, d19, d20); + TESTINSN_VLDn("vld4.8 {d28[0],d29[0],d30[0],d31[0]}", d28, d29, d30, d31); + + printf("---- VLD4 (4-elements to all lanes) ----\n"); + TESTINSN_VLDn("vld4.8 {d0[],d1[],d2[],d3[]}", d0, d1, d2, d3); + TESTINSN_VLDn("vld4.16 {d0[],d1[],d2[],d3[]}", d0, d1, d2, d3); + TESTINSN_VLDn("vld4.32 {d0[],d1[],d2[],d3[]}", d0, d1, d2, d3); + TESTINSN_VLDn("vld4.8 {d9[],d11[],d13[],d15[]}", d9, d11, d13, d15); + TESTINSN_VLDn("vld4.16 {d17[],d18[],d19[],d20[]}", d17, d18, d19, d20); + TESTINSN_VLDn("vld4.32 {d28[],d29[],d30[],d31[]}", d28, d29, d30, d31); + TESTINSN_VLDn("vld4.8 {d0[],d2[],d4[],d6[]}", d0, d2, d4, d6); + TESTINSN_VLDn("vld4.16 {d0[],d2[],d4[],d6[]}", d0, d2, d4, d6); + TESTINSN_VLDn("vld4.32 {d5[],d7[],d9[],d11[]}", d5, d7, d9, d11); + + printf("---- VST1 (multiple single elements) ----\n"); + TESTINSN_VSTn("vst1.8 {d0}", d0, d0, d0, d0); + TESTINSN_VSTn("vst1.16 {d0}", d0, d0, d0, d0); + TESTINSN_VSTn("vst1.32 {d0}", d0, d0, d0, d0); + TESTINSN_VSTn("vst1.64 {d0}", d0, d0, d0, d0); + TESTINSN_VSTn("vst1.8 {d9}", d9, d9, d9, d9); + TESTINSN_VSTn("vst1.16 {d17}", d17, d17, d17, d17); + TESTINSN_VSTn("vst1.32 {d31}", d31, d31, d31, d31); + TESTINSN_VSTn("vst1.64 {d14}", d14, d14, d14, d14); + TESTINSN_VSTn("vst1.8 {d0-d1}", d0, d1, d0, d1); + TESTINSN_VSTn("vst1.16 {d0-d1}", d0, d1, d0, d1); + TESTINSN_VSTn("vst1.32 {d5-d6}", d5, d6, d5, d6); + TESTINSN_VSTn("vst1.64 {d30-d31}", d30, d31, d30, d31); + TESTINSN_VSTn("vst1.8 {d0-d2}", d0, d1, d2, d0); + TESTINSN_VSTn("vst1.16 {d0-d2}", d0, d1, d2, d0); + TESTINSN_VSTn("vst1.32 {d0-d2}", d0, d1, d2, d0); + TESTINSN_VSTn("vst1.64 {d0-d2}", d0, d1, d2, d0); + TESTINSN_VSTn("vst1.8 {d0-d3}", d0, d1, d2, d3); + TESTINSN_VSTn("vst1.16 {d0-d3}", d0, d1, d2, d3); + TESTINSN_VSTn("vst1.32 {d0-d3}", d0, d1, d2, d3); + TESTINSN_VSTn("vst1.64 {d0-d3}", d0, d1, d2, d3); + + printf("---- VST1 (single element from one lane) ----\n"); + TESTINSN_VSTn("vst1.32 {d0[0]}", d0, d0, d0, d0); + TESTINSN_VSTn("vst1.32 {d0[1]}", d0, d0, d0, d0); + TESTINSN_VSTn("vst1.16 {d1[0]}", d1, d1, d1, d1); + TESTINSN_VSTn("vst1.16 {d1[1]}", d1, d1, d1, d1); + TESTINSN_VSTn("vst1.16 {d1[2]}", d1, d1, d1, d1); + TESTINSN_VSTn("vst1.16 {d1[3]}", d1, d1, d1, d1); + TESTINSN_VSTn("vst1.8 {d0[7]}", d0, d0, d0, d0); + TESTINSN_VSTn("vst1.8 {d1[6]}", d1, d1, d1, d1); + TESTINSN_VSTn("vst1.8 {d0[5]}", d0, d0, d0, d0); + TESTINSN_VSTn("vst1.8 {d0[4]}", d0, d0, d0, d0); + TESTINSN_VSTn("vst1.8 {d20[3]}", d20, d20, d20, d20); + TESTINSN_VSTn("vst1.8 {d0[2]}", d0, d0, d0, d0); + TESTINSN_VSTn("vst1.8 {d17[1]}", d17, d17, d17, d17); + TESTINSN_VSTn("vst1.8 {d30[0]}", d30, d30, d30, d30); + + printf("---- VST2 (multiple 2-elements) ----\n"); + TESTINSN_VSTn("vst2.8 {d30-d31}", d30, d31, d30, d31); + TESTINSN_VSTn("vst2.16 {d0-d1}", d0, d1, d0, d1); + TESTINSN_VSTn("vst2.32 {d0-d1}", d0, d1, d0, d1); + TESTINSN_VSTn("vst2.8 {d10,d12}", d10, d12, d10, d12); + TESTINSN_VSTn("vst2.16 {d20,d22}", d20, d22, d20, d22); + TESTINSN_VSTn("vst2.32 {d0,d2}", d0, d2, d0, d2); + TESTINSN_VSTn("vst2.8 {d0-d3}", d0, d1, d2, d3); + TESTINSN_VSTn("vst2.16 {d20-d23}", d20, d21, d22, d23); + TESTINSN_VSTn("vst2.32 {d0-d3}", d0, d1, d2, d3); + + printf("---- VST2 (single 2-element structure from one lane) ----\n"); + TESTINSN_VSTn("vst2.32 {d0[0],d1[0]}", d0, d1, d0, d1); + TESTINSN_VSTn("vst2.32 {d0[1],d1[1]}", d0, d1, d0, d1); + TESTINSN_VSTn("vst2.32 {d0[0],d2[0]}", d0, d2, d0, d2); + TESTINSN_VSTn("vst2.32 {d0[1],d2[1]}", d0, d2, d0, d2); + TESTINSN_VSTn("vst2.16 {d1[0],d2[0]}", d1, d2, d1, d2); + TESTINSN_VSTn("vst2.16 {d1[1],d2[1]}", d1, d2, d1, d2); + TESTINSN_VSTn("vst2.16 {d1[2],d2[2]}", d1, d2, d1, d2); + TESTINSN_VSTn("vst2.16 {d1[3],d2[3]}", d1, d2, d1, d2); + TESTINSN_VSTn("vst2.16 {d1[0],d3[0]}", d1, d3, d1, d3); + TESTINSN_VSTn("vst2.16 {d1[1],d3[1]}", d1, d3, d1, d3); + TESTINSN_VSTn("vst2.16 {d1[2],d3[2]}", d1, d3, d1, d3); + TESTINSN_VSTn("vst2.16 {d1[3],d3[3]}", d1, d3, d1, d3); + TESTINSN_VSTn("vst2.8 {d0[7],d1[7]}", d0, d1, d0, d1); + TESTINSN_VSTn("vst2.8 {d1[6],d2[6]}", d1, d2, d1, d2); + TESTINSN_VSTn("vst2.8 {d0[5],d1[5]}", d0, d1, d0, d1); + TESTINSN_VSTn("vst2.8 {d0[4],d1[4]}", d0, d1, d0, d1); + TESTINSN_VSTn("vst2.8 {d20[3],d21[3]}", d20, d21, d20, d21); + TESTINSN_VSTn("vst2.8 {d0[2],d1[2]}", d0, d1, d0, d1); + TESTINSN_VSTn("vst2.8 {d17[1],d18[1]}", d17, d18, d17, d18); + TESTINSN_VSTn("vst2.8 {d30[0],d31[0]}", d30, d31, d30, d31); + + printf("---- VST3 (multiple 3-elements) ----\n"); + TESTINSN_VSTn("vst3.8 {d20-d22}", d20, d21, d22, d20); + TESTINSN_VSTn("vst3.16 {d0-d2}", d0, d1, d2, d0); + TESTINSN_VSTn("vst3.32 {d0-d2}", d0, d1, d2, d0); + TESTINSN_VSTn("vst3.8 {d0,d2,d4}", d0, d2, d4, d0); + TESTINSN_VSTn("vst3.16 {d20,d22,d24}", d20, d22, d24, d20); + TESTINSN_VSTn("vst3.32 {d0,d2,d4}", d0, d2, d4, d0); + + printf("---- VST3 (single 3-element structure from one lane) ----\n"); + TESTINSN_VSTn("vst3.32 {d0[0],d1[0],d2[0]}", d0, d1, d2, d1); + TESTINSN_VSTn("vst3.32 {d0[1],d1[1],d2[1]}", d0, d1, d2, d1); + TESTINSN_VSTn("vst3.32 {d0[0],d2[0],d4[0]}", d0, d2, d4, d2); + TESTINSN_VSTn("vst3.32 {d0[1],d2[1],d4[1]}", d0, d2, d4, d2); + TESTINSN_VSTn("vst3.16 {d1[0],d2[0],d3[0]}", d1, d2, d3, d2); + TESTINSN_VSTn("vst3.16 {d1[1],d2[1],d3[1]}", d1, d2, d3, d2); + TESTINSN_VSTn("vst3.16 {d1[2],d2[2],d3[2]}", d1, d2, d3, d2); + TESTINSN_VSTn("vst3.16 {d1[3],d2[3],d3[3]}", d1, d2, d3, d2); + TESTINSN_VSTn("vst3.16 {d1[0],d3[0],d5[0]}", d1, d3, d3, d5); + TESTINSN_VSTn("vst3.16 {d1[1],d3[1],d5[1]}", d1, d3, d3, d5); + TESTINSN_VSTn("vst3.16 {d1[2],d3[2],d5[2]}", d1, d3, d3, d5); + TESTINSN_VSTn("vst3.16 {d1[3],d3[3],d5[3]}", d1, d3, d3, d5); + TESTINSN_VSTn("vst3.8 {d0[7],d1[7],d2[7]}", d0, d1, d2, d1); + TESTINSN_VSTn("vst3.8 {d1[6],d2[6],d3[6]}", d1, d2, d3, d2); + TESTINSN_VSTn("vst3.8 {d0[5],d1[5],d2[5]}", d0, d1, d2, d1); + TESTINSN_VSTn("vst3.8 {d0[4],d1[4],d2[4]}", d0, d1, d2, d1); + TESTINSN_VSTn("vst3.8 {d20[3],d21[3],d22[3]}", d20, d21, d22, d21); + TESTINSN_VSTn("vst3.8 {d0[2],d1[2],d2[2]}", d0, d1, d2, d1); + TESTINSN_VSTn("vst3.8 {d17[1],d18[1],d19[1]}", d17, d18, d19, d18); + TESTINSN_VSTn("vst3.8 {d29[0],d30[0],d31[0]}", d30, d31, d29, d31); + + printf("---- VST4 (multiple 4-elements) ----\n"); + TESTINSN_VSTn("vst4.8 {d0-d3}", d0, d1, d2, d3); + TESTINSN_VSTn("vst4.16 {d20-d23}", d20, d21, d22, d23); + TESTINSN_VSTn("vst4.32 {d0-d3}", d0, d1, d2, d3); + TESTINSN_VSTn("vst4.8 {d0,d2,d4,d6}", d0, d2, d4, d6); + TESTINSN_VSTn("vst4.16 {d1,d3,d5,d7}", d1, d3, d5, d7); + TESTINSN_VSTn("vst4.32 {d20,d22,d24,d26}", d20, d22, d24, d26); + + printf("---- VST4 (single 4-element structure from one lane) ----\n"); + TESTINSN_VSTn("vst4.32 {d0[0],d1[0],d2[0],d3[0]}", d0, d1, d2, d3); + TESTINSN_VSTn("vst4.32 {d0[1],d1[1],d2[1],d3[1]}", d0, d1, d2, d4); + TESTINSN_VSTn("vst4.32 {d0[0],d2[0],d4[0],d6[0]}", d0, d2, d4, d6); + TESTINSN_VSTn("vst4.32 {d0[1],d2[1],d4[1],d6[1]}", d0, d2, d4, d6); + TESTINSN_VSTn("vst4.16 {d1[0],d2[0],d3[0],d4[0]}", d1, d2, d3, d4); + TESTINSN_VSTn("vst4.16 {d1[1],d2[1],d3[1],d4[1]}", d1, d2, d3, d4); + TESTINSN_VSTn("vst4.16 {d1[2],d2[2],d3[2],d4[2]}", d1, d2, d3, d4); + TESTINSN_VSTn("vst4.16 {d1[3],d2[3],d3[3],d4[3]}", d1, d2, d3, d4); + TESTINSN_VSTn("vst4.16 {d1[0],d3[0],d5[0],d7[0]}", d1, d3, d5, d7); + TESTINSN_VSTn("vst4.16 {d1[1],d3[1],d5[1],d7[1]}", d1, d3, d5, d7); + TESTINSN_VSTn("vst4.16 {d1[2],d3[2],d5[2],d7[2]}", d1, d3, d5, d7); + TESTINSN_VSTn("vst4.16 {d1[3],d3[3],d5[3],d7[3]}", d1, d3, d5, d7); + TESTINSN_VSTn("vst4.8 {d0[7],d1[7],d2[7],d3[7]}", d0, d1, d2, d3); + TESTINSN_VSTn("vst4.8 {d1[6],d2[6],d3[6],d4[6]}", d1, d2, d3, d4); + TESTINSN_VSTn("vst4.8 {d0[5],d1[5],d2[5],d3[5]}", d0, d1, d2, d3); + TESTINSN_VSTn("vst4.8 {d0[4],d1[4],d2[4],d3[4]}", d0, d1, d2, d3); + TESTINSN_VSTn("vst4.8 {d20[3],d21[3],d22[3],d23[3]}", d20, d21, d22, d23); + TESTINSN_VSTn("vst4.8 {d0[2],d1[2],d2[2],d3[2]}", d0, d1, d2, d3); + TESTINSN_VSTn("vst4.8 {d17[1],d18[1],d19[1],d20[1]}", d17, d18, d19, d20); + TESTINSN_VSTn("vst4.8 {d28[0],d29[0],d30[0],d31[0]}", d28, d29, d30, d31); + + printf("---- VMOVN ----\n"); + TESTINSN_bin("vmovn.i32 d0, q0", d0, d0, i32, 0x32, d1, i32, 0x24); + TESTINSN_bin("vmovn.i16 d7, q5", d7, d10, i32, 0x32, d11, i32, 0x24); + TESTINSN_bin("vmovn.i64 d31, q0", d31, d0, i32, 0x32, d1, i32, 0x24); + TESTINSN_bin("vmovn.i32 d0, q0", d0, d0, i8, 0xff, d1, i8, 0xf0); + TESTINSN_bin("vmovn.i16 d7, q5", d7, d10, i16, 0xdead, d11, i16, 0xbeef); + TESTINSN_bin("vmovn.i64 d31, q0", d31, d0, i32, 0xff00fe0f, d1, i8, 0x24); + + printf("---- VQMOVN ----\n"); + TESTINSN_bin_q("vqmovn.u32 d0, q0", d0, d0, i32, 0x32, d1, i32, 0x24); + TESTINSN_bin_q("vqmovn.u16 d7, q5", d7, d10, i32, 0x32, d11, i32, 0x24); + TESTINSN_bin_q("vqmovn.u64 d31, q0", d31, d0, i32, 0x32, d1, i32, 0x24); + TESTINSN_bin_q("vqmovn.u32 d0, q0", d0, d0, i8, 0xff, d1, i8, 0xf0); + TESTINSN_bin_q("vqmovn.u16 d7, q5", d7, d10, i16, 0xdead, d11, i16, 0xbeef); + TESTINSN_bin_q("vqmovn.u64 d31, q0", d31, d0, i32, 0xff00fe0f, d1, i8, 0x24); + TESTINSN_bin_q("vqmovn.s32 d0, q0", d0, d0, i32, 0x32, d1, i32, 0x24); + TESTINSN_bin_q("vqmovn.s16 d7, q5", d7, d10, i32, 0x32, d11, i32, 0x24); + TESTINSN_bin_q("vqmovn.s64 d31, q0", d31, d0, i32, 0x32, d1, i32, 0x24); + TESTINSN_bin_q("vqmovn.s32 d0, q0", d0, d0, i8, 0xff, d1, i8, 0xf0); + TESTINSN_bin_q("vqmovn.s16 d7, q5", d7, d10, i16, 0xdead, d11, i16, 0xbeef); + TESTINSN_bin_q("vqmovn.s64 d31, q0", d31, d0, i32, 0xff00fe0f, d1, i8, 0x24); + TESTINSN_bin_q("vqmovn.s32 d0, q0", d0, d0, i8, 0xff, d1, i8, 0xff); + TESTINSN_bin_q("vqmovn.s16 d7, q5", d7, d10, i8, 0xff, d11, i16, 0xff); + TESTINSN_bin_q("vqmovn.s64 d31, q0", d31, d0, i8, 0xff, d1, i8, 0xff); + + printf("---- VQMOVN ----\n"); + TESTINSN_bin_q("vqmovun.s32 d0, q0", d0, d0, i32, 0x32, d1, i32, 0x24); + TESTINSN_bin_q("vqmovun.s16 d7, q5", d7, d10, i32, 0x32, d11, i32, 0x24); + TESTINSN_bin_q("vqmovun.s64 d31, q0", d31, d0, i32, 0x32, d1, i32, 0x24); + TESTINSN_bin_q("vqmovun.s32 d0, q0", d0, d0, i8, 0xff, d1, i8, 0xf0); + TESTINSN_bin_q("vqmovun.s16 d7, q5", d7, d10, i16, 0xdead, d11, i16, 0xbeef); + TESTINSN_bin_q("vqmovun.s64 d31, q0", d31, d0, i32, 0xff00fe0f, d1, i8, 0x24); + TESTINSN_bin_q("vqmovun.s32 d0, q0", d0, d0, i8, 0xff, d1, i8, 0xff); + TESTINSN_bin_q("vqmovun.s16 d7, q5", d7, d10, i8, 0xff, d11, i16, 0xff); + TESTINSN_bin_q("vqmovun.s64 d31, q0", d31, d0, i8, 0xff, d1, i8, 0xff); + + printf("---- VABS ----\n"); + TESTINSN_un("vabs.s32 d0, d1", d0, d1, i32, 0x73); + TESTINSN_un("vabs.s16 d15, d4", d15, d4, i32, 0x73); + TESTINSN_un("vabs.s8 d8, d7", d8, d7, i32, 0x73); + TESTINSN_un("vabs.s32 d0, d1", d0, d1, i32, 0xfe); + TESTINSN_un("vabs.s16 d31, d4", d31, d4, i32, 0xef); + TESTINSN_un("vabs.s8 d8, d7", d8, d7, i32, 0xde); + TESTINSN_un("vabs.s32 d0, d1", d0, d1, i16, 0xfe0a); + TESTINSN_un("vabs.s16 d15, d4", d15, d4, i16, 0xef0b); + TESTINSN_un("vabs.s8 d8, d7", d8, d7, i16, 0xde0c); + + printf("---- VQABS ----\n"); + TESTINSN_un_q("vqabs.s32 d0, d1", d0, d1, i32, 0x73); + TESTINSN_un_q("vqabs.s32 d0, d1", d0, d1, i32, 1 << 31); + TESTINSN_un_q("vqabs.s16 d0, d1", d0, d1, i32, 1 << 31); + TESTINSN_un_q("vqabs.s8 d0, d1", d0, d1, i32, 1 << 31); + TESTINSN_un_q("vqabs.s16 d15, d4", d15, d4, i32, 0x73); + TESTINSN_un_q("vqabs.s8 d8, d7", d8, d7, i32, 0x73); + TESTINSN_un_q("vqabs.s32 d0, d1", d0, d1, i32, 0xfe); + TESTINSN_un_q("vqabs.s16 d31, d4", d31, d4, i32, 0xef); + TESTINSN_un_q("vqabs.s8 d8, d7", d8, d7, i32, 0xde); + TESTINSN_un_q("vqabs.s32 d0, d1", d0, d1, i16, 0xfe0a); + TESTINSN_un_q("vqabs.s16 d15, d4", d15, d4, i16, 0xef0b); + TESTINSN_un_q("vqabs.s8 d8, d7", d8, d7, i16, 0xde0c); + + printf("---- VADDHN ----\n"); + TESTINSN_bin("vaddhn.i32 d0, q1, q1", d0, q1, i32, 0x73, q1, i32, 0x72); + TESTINSN_bin("vaddhn.i16 d0, q1, q2", d0, q1, i32, 0x73, q2, i32, 0x72); + TESTINSN_bin("vaddhn.i32 d0, q1, q2", d0, q1, i32, 0x73, q2, i32, 0x72); + TESTINSN_bin("vaddhn.i64 d0, q1, q2", d0, q1, i32, 0x73, q2, i32, 0x72); + TESTINSN_bin("vaddhn.i16 d0, q15, q2", d0, q15, i16, 0xef73, q2, i32, 0x0172); + TESTINSN_bin("vaddhn.i32 d31, q1, q2", d31, q1, i16, 0xef73, q2, i32, 0x0172); + TESTINSN_bin("vaddhn.i64 d0, q1, q8", d0, q1, i16, 0xef73, q8, i32, 0x0172); + TESTINSN_bin("vaddhn.i32 d0, q1, q1", d0, q1, i8, 0x73, q1, i32, 0x72); + TESTINSN_bin("vaddhn.i16 d0, q1, q2", d0, q1, i8, 0x73, q2, i32, 0x72); + TESTINSN_bin("vaddhn.i32 d0, q1, q2", d0, q1, i8, 0x73, q2, i32, 0x72); + TESTINSN_bin("vaddhn.i64 d0, q1, q2", d0, q1, i8, 0x73, q2, i32, 0x72); + + printf("---- VRADDHN ----\n"); + TESTINSN_bin("vraddhn.i32 d0, q1, q1", d0, q1, i32, 0x73, q1, i32, 0x72); + TESTINSN_bin("vraddhn.i16 d0, q1, q2", d0, q1, i32, 0x73, q2, i32, 0x72); + TESTINSN_bin("vraddhn.i32 d0, q1, q2", d0, q1, i32, 0x73, q2, i32, 0x72); + TESTINSN_bin("vraddhn.i64 d0, q1, q2", d0, q1, i32, 0x73, q2, i32, 0x72); + TESTINSN_bin("vraddhn.i16 d0, q15, q2", d0, q15, i16, 0xef73, q2, i32, 0x0172); + TESTINSN_bin("vraddhn.i32 d31, q1, q2", d31, q1, i16, 0xef73, q2, i32, 0x0172); + TESTINSN_bin("vraddhn.i64 d0, q1, q8", d0, q1, i16, 0xef73, q8, i32, 0x0172); + TESTINSN_bin("vraddhn.i32 d0, q1, q1", d0, q1, i8, 0x73, q1, i32, 0x72); + TESTINSN_bin("vraddhn.i16 d0, q1, q2", d0, q1, i8, 0x73, q2, i32, 0x72); + TESTINSN_bin("vraddhn.i32 d0, q1, q2", d0, q1, i8, 0x73, q2, i32, 0x72); + TESTINSN_bin("vraddhn.i64 d0, q1, q2", d0, q1, i8, 0x73, q2, i32, 0x72); + TESTINSN_bin("vraddhn.i16 d0, q15, q2", d0, q15, i16, 0xef73, q2, i32, 0x0102); + TESTINSN_bin("vraddhn.i32 d31, q1, q2", d31, q1, i16, 0xef73, q2, i32, 0x0102); + TESTINSN_bin("vraddhn.i64 d0, q1, q8", d0, q1, i16, 0xef73, q8, i32, 0x0102); + TESTINSN_bin("vraddhn.i32 d0, q1, q1", d0, q1, i8, 0x73, q1, i32, 0x02); + TESTINSN_bin("vraddhn.i16 d0, q1, q2", d0, q1, i8, 0x73, q2, i32, 0x02); + TESTINSN_bin("vraddhn.i32 d0, q1, q2", d0, q1, i8, 0x73, q2, i32, 0x02); + TESTINSN_bin("vraddhn.i64 d0, q1, q2", d0, q1, i8, 0x73, q2, i32, 0x02); + + printf("---- VSUBHN ----\n"); + TESTINSN_bin("vsubhn.i32 d0, q1, q1", d0, q1, i32, 0x73, q1, i32, 0x72); + TESTINSN_bin("vsubhn.i16 d0, q1, q2", d0, q1, i32, 0x73, q2, i32, 0x72); + TESTINSN_bin("vsubhn.i32 d0, q1, q2", d0, q1, i32, 0x73, q2, i32, 0x72); + TESTINSN_bin("vsubhn.i64 d0, q1, q2", d0, q1, i32, 0x73, q2, i32, 0x72); + TESTINSN_bin("vsubhn.i16 d0, q15, q2", d0, q15, i16, 0xef73, q2, i32, 0x0172); + TESTINSN_bin("vsubhn.i32 d31, q1, q2", d31, q1, i16, 0xef73, q2, i32, 0x0172); + TESTINSN_bin("vsubhn.i64 d0, q1, q8", d0, q1, i16, 0xef73, q8, i32, 0x0172); + TESTINSN_bin("vsubhn.i32 d0, q1, q1", d0, q1, i8, 0x73, q1, i32, 0x72); + TESTINSN_bin("vsubhn.i16 d0, q1, q2", d0, q1, i8, 0x73, q2, i32, 0x72); + TESTINSN_bin("vsubhn.i32 d0, q1, q2", d0, q1, i8, 0x73, q2, i32, 0x72); + TESTINSN_bin("vsubhn.i64 d0, q1, q2", d0, q1, i8, 0x73, q2, i32, 0x72); + + printf("---- VRSUBHN ----\n"); + TESTINSN_bin("vrsubhn.i32 d0, q1, q1", d0, q1, i32, 0x73, q1, i32, 0x72); + TESTINSN_bin("vrsubhn.i16 d0, q1, q2", d0, q1, i32, 0x73, q2, i32, 0x72); + TESTINSN_bin("vrsubhn.i32 d0, q1, q2", d0, q1, i32, 0x73, q2, i32, 0x72); + TESTINSN_bin("vrsubhn.i64 d0, q1, q2", d0, q1, i32, 0x73, q2, i32, 0x72); + TESTINSN_bin("vrsubhn.i16 d0, q15, q2", d0, q15, i16, 0xef73, q2, i32, 0x0172); + TESTINSN_bin("vrsubhn.i32 d31, q1, q2", d31, q1, i16, 0xef73, q2, i32, 0x0172); + TESTINSN_bin("vrsubhn.i64 d0, q1, q8", d0, q1, i16, 0xef73, q8, i32, 0x0172); + TESTINSN_bin("vrsubhn.i32 d0, q1, q1", d0, q1, i8, 0x73, q1, i32, 0x72); + TESTINSN_bin("vrsubhn.i16 d0, q1, q2", d0, q1, i8, 0x73, q2, i32, 0x72); + TESTINSN_bin("vrsubhn.i32 d0, q1, q2", d0, q1, i8, 0x73, q2, i32, 0x72); + TESTINSN_bin("vrsubhn.i64 d0, q1, q2", d0, q1, i8, 0x73, q2, i32, 0x72); + TESTINSN_bin("vrsubhn.i16 d0, q15, q2", d0, q15, i16, 0xef93, q2, i32, 0x0102); + TESTINSN_bin("vrsubhn.i32 d31, q1, q2", d31, q1, i16, 0xef93, q2, i32, 0x0102); + TESTINSN_bin("vrsubhn.i64 d0, q1, q8", d0, q1, i16, 0xef93, q8, i32, 0x0102); + TESTINSN_bin("vrsubhn.i32 d0, q1, q1", d0, q1, i8, 0x93, q1, i32, 0x02); + TESTINSN_bin("vrsubhn.i16 d0, q1, q2", d0, q1, i8, 0x93, q2, i32, 0x02); + TESTINSN_bin("vrsubhn.i32 d0, q1, q2", d0, q1, i8, 0x93, q2, i32, 0x02); + TESTINSN_bin("vrsubhn.i64 d0, q1, q2", d0, q1, i8, 0x93, q2, i32, 0x02); + + printf("---- VCEQ #0 ----\n"); + TESTINSN_un("vceq.i32 d0, d1, #0", d0, d1, i32, 0x21); + TESTINSN_un("vceq.i16 d2, d1, #0", d2, d1, i32, 0x21); + TESTINSN_un("vceq.i8 d10, d11, #0", d10, d11, i32, 0x21); + TESTINSN_un("vceq.i32 d0, d1, #0", d0, d1, i32, 0x0); + TESTINSN_un("vceq.i16 d2, d1, #0", d2, d1, i32, 0x0); + TESTINSN_un("vceq.i8 d10, d31, #0", d10, d31, i32, 0x0); + + printf("---- VCGT #0 ----\n"); + TESTINSN_un("vcgt.s32 d0, d1, #0", d0, d1, i32, 0x21); + TESTINSN_un("vcgt.s16 d2, d1, #0", d2, d1, i32, 0x21); + TESTINSN_un("vcgt.s8 d10, d31, #0", d10, d31, i32, 0x21); + TESTINSN_un("vcgt.s32 d0, d1, #0", d0, d1, i32, 0x0); + TESTINSN_un("vcgt.s16 d2, d1, #0", d2, d1, i32, 0x0); + TESTINSN_un("vcgt.s8 d10, d11, #0", d10, d11, i32, 0x0); + TESTINSN_un("vcgt.s32 d0, d1, #0", d0, d1, i8, 0xef); + TESTINSN_un("vcgt.s16 d2, d1, #0", d2, d1, i8, 0xed); + TESTINSN_un("vcgt.s8 d10, d11, #0", d10, d11, i8, 0xae); + + printf("---- VCGE #0 ----\n"); + TESTINSN_un("vcge.s32 d0, d1, #0", d0, d1, i32, 0x21); + TESTINSN_un("vcge.s16 d2, d1, #0", d2, d1, i32, 0x21); + TESTINSN_un("vcge.s8 d10, d11, #0", d10, d11, i32, 0x21); + TESTINSN_un("vcge.s32 d0, d1, #0", d0, d1, i32, 0x0); + TESTINSN_un("vcge.s16 d2, d1, #0", d2, d1, i32, 0x0); + TESTINSN_un("vcge.s8 d10, d31, #0", d10, d31, i32, 0x0); + TESTINSN_un("vcge.s32 d0, d1, #0", d0, d1, i8, 0xef); + TESTINSN_un("vcge.s16 d2, d1, #0", d2, d1, i8, 0xed); + TESTINSN_un("vcge.s8 d10, d11, #0", d10, d11, i8, 0xae); + TESTINSN_un("vcge.s32 d0, d1, #0", d0, d1, i32, 0xef); + TESTINSN_un("vcge.s16 d2, d1, #0", d2, d1, i32, 0xed); + TESTINSN_un("vcge.s8 d10, d11, #0", d10, d11, i32, 0xae); + + printf("---- VCLE #0 ----\n"); + TESTINSN_un("vcle.s32 d0, d1, #0", d0, d1, i32, 0x21); + TESTINSN_un("vcle.s16 d2, d1, #0", d2, d1, i32, 0x21); + TESTINSN_un("vcle.s8 d10, d11, #0", d10, d11, i32, 0x21); + TESTINSN_un("vcle.s32 d0, d1, #0", d0, d1, i32, 0x0); + TESTINSN_un("vcle.s16 d2, d1, #0", d2, d1, i32, 0x0); + TESTINSN_un("vcle.s8 d10, d31, #0", d10, d31, i32, 0x0); + TESTINSN_un("vcle.s32 d0, d1, #0", d0, d1, i8, 0xef); + TESTINSN_un("vcle.s16 d2, d1, #0", d2, d1, i8, 0xed); + TESTINSN_un("vcle.s8 d10, d11, #0", d10, d11, i8, 0xae); + + printf("---- VCLT #0 ----\n"); + TESTINSN_un("vclt.s32 d0, d1, #0", d0, d1, i32, 0x21); + TESTINSN_un("vclt.s16 d2, d1, #0", d2, d1, i32, 0x21); + TESTINSN_un("vclt.s8 d10, d11, #0", d10, d11, i32, 0x21); + TESTINSN_un("vclt.s32 d0, d1, #0", d0, d1, i32, 0x0); + TESTINSN_un("vclt.s16 d2, d1, #0", d2, d1, i32, 0x0); + TESTINSN_un("vclt.s8 d10, d11, #0", d10, d11, i32, 0x0); + TESTINSN_un("vclt.s32 d0, d1, #0", d0, d1, i8, 0xef); + TESTINSN_un("vclt.s16 d2, d1, #0", d2, d1, i8, 0xed); + TESTINSN_un("vclt.s8 d10, d31, #0", d10, d31, i8, 0xae); + TESTINSN_un("vclt.s32 d0, d1, #0", d0, d1, i32, 0xef); + TESTINSN_un("vclt.s16 d2, d1, #0", d2, d1, i32, 0xed); + TESTINSN_un("vclt.s8 d10, d11, #0", d10, d11, i32, 0xae); + + printf("---- VCNT ----\n"); + TESTINSN_un("vcnt.8 d0, d1", d0, d1, i32, 0xac3d25eb); + TESTINSN_un("vcnt.8 d11, d14", d11, d14, i32, 0xac3d25eb); + TESTINSN_un("vcnt.8 d6, d2", d6, d2, i32, 0xad0eb); + + printf("---- VCLS ----\n"); + TESTINSN_un("vcls.s8 d0, d1", d0, d1, i32, 0x21); + TESTINSN_un("vcls.s8 d30, d31", d30, d31, i8, 0x82); + TESTINSN_un("vcls.s16 d0, d1", d0, d1, i32, 0x21); + TESTINSN_un("vcls.s16 d31, d30", d31, d30, i8, 0x82); + TESTINSN_un("vcls.s32 d6, d1", d6, d1, i32, 0x21); + TESTINSN_un("vcls.s32 d30, d5", d30, d5, i8, 0x82); + TESTINSN_un("vcls.s8 d2, d4", d2, d4, i8, 0xff); + TESTINSN_un("vcls.s16 d2, d4", d2, d4, i8, 0xff); + TESTINSN_un("vcls.s32 d2, d4", d2, d4, i8, 0xff); + TESTINSN_un("vcls.s8 d2, d4", d2, d4, i16, 0xffef); + TESTINSN_un("vcls.s16 d2, d4", d2, d4, i16, 0xffef); + TESTINSN_un("vcls.s32 d2, d4", d2, d4, i16, 0xffef); + TESTINSN_un("vcls.s8 d2, d4", d2, d4, i8, 0x00); + TESTINSN_un("vcls.s16 d2, d4", d2, d4, i8, 0x00); + TESTINSN_un("vcls.s32 d2, d4", d2, d4, i8, 0x00); + TESTINSN_un("vcls.s8 d2, d4", d2, d4, i16, 0x00ef); + TESTINSN_un("vcls.s16 d2, d4", d2, d4, i16, 0x00ef); + TESTINSN_un("vcls.s32 d2, d4", d2, d4, i16, 0x00ef); + + printf("---- VCLZ ----\n"); + TESTINSN_un("vclz.i8 d0, d1", d0, d1, i32, 0x21); + TESTINSN_un("vclz.i8 d30, d31", d30, d31, i8, 0x82); + TESTINSN_un("vclz.i16 d0, d1", d0, d1, i32, 0x21); + TESTINSN_un("vclz.i16 d31, d30", d31, d30, i8, 0x82); + TESTINSN_un("vclz.i32 d6, d1", d6, d1, i32, 0x21); + TESTINSN_un("vclz.i32 d30, d5", d30, d5, i8, 0x82); + TESTINSN_un("vclz.i8 d2, d4", d2, d4, i8, 0xff); + TESTINSN_un("vclz.i16 d2, d4", d2, d4, i8, 0xff); + TESTINSN_un("vclz.i32 d2, d4", d2, d4, i8, 0xff); + TESTINSN_un("vclz.i8 d2, d4", d2, d4, i16, 0xffef); + TESTINSN_un("vclz.i16 d2, d4", d2, d4, i16, 0xffef); + TESTINSN_un("vclz.i32 d2, d4", d2, d4, i16, 0xffef); + TESTINSN_un("vclz.i8 d2, d4", d2, d4, i8, 0x00); + TESTINSN_un("vclz.i16 d2, d4", d2, d4, i8, 0x00); + TESTINSN_un("vclz.i32 d2, d4", d2, d4, i8, 0x00); + TESTINSN_un("vclz.i8 d2, d4", d2, d4, i16, 0x00ef); + TESTINSN_un("vclz.i16 d2, d4", d2, d4, i16, 0x00ef); + TESTINSN_un("vclz.i32 d2, d4", d2, d4, i16, 0x00ef); + + printf("---- VSLI ----\n"); + TESTINSN_un("vsli.16 d0, d1, #1", d0, d1, i32, 7); + TESTINSN_un("vsli.16 d3, d4, #2", d3, d4, i32, -0x7c); + TESTINSN_un("vsli.32 d2, d5, #31", d2, d5, i32, -1); + TESTINSN_un("vsli.8 d6, d7, #7", d6, d7, i32, 0xffff); + TESTINSN_un("vsli.16 d8, d9, #12", d8, d9, i32, -10); + TESTINSN_un("vsli.32 d10, d11, #5", d10, d11, i32, 10234); + TESTINSN_un("vsli.8 d12, d13, #1", d12, d13, i32, -1); + TESTINSN_un("vsli.16 d14, d15, #11", d14, d15, i32, -1); + TESTINSN_un("vsli.32 d10, d11, #9", d10, d11, i32, 1000); + TESTINSN_un("vsli.8 d7, d13, #7", d7, d13, i32, -1); + TESTINSN_un("vsli.16 d8, d1, #1", d8, d1, i32, 0xabcf); + TESTINSN_un("vsli.32 d12, d3, #15", d12, d3, i32, -0x1b0); + TESTINSN_un("vsli.64 d0, d1, #42", d0, d1, i32, -1); + TESTINSN_un("vsli.64 d6, d7, #12", d6, d7, i32, 0xfac); + TESTINSN_un("vsli.64 d8, d4, #9", d8, d4, i32, 13560); + TESTINSN_un("vsli.64 d9, d12, #11", d9, d12, i32, 98710); + + printf("---- VPADD ----\n"); + TESTINSN_bin("vpadd.i32 d0, d1, d2", d0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin("vpadd.i32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vpadd.i16 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vpadd.i8 d0, d1, d2", d0, d1, i32, 140, d2, i32, 120); + TESTINSN_bin("vpadd.i8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpadd.i16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpadd.i32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpadd.i32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VPADDL ----\n"); + TESTINSN_un("vpaddl.u32 d0, d1", d0, d1, i32, 24); + TESTINSN_un("vpaddl.u32 d0, d1", d0, d1, i32, 140); + TESTINSN_un("vpaddl.u16 d0, d1", d0, d1, i32, 140); + TESTINSN_un("vpaddl.u8 d0, d1", d0, d1, i32, 140); + TESTINSN_un("vpaddl.u8 d0, d1", d0, d1, i32, (1 << 31) + 1); + TESTINSN_un("vpaddl.u16 d0, d1", d0, d1, i32, (1 << 31) + 1); + TESTINSN_un("vpaddl.u32 d0, d1", d0, d1, i32, (1 << 31) + 1); + TESTINSN_un("vpaddl.u32 d10, d11", d10, d11, i32, 24); + TESTINSN_un("vpaddl.s32 d0, d1", d0, d1, i32, 24); + TESTINSN_un("vpaddl.s32 d0, d1", d0, d1, i32, 140); + TESTINSN_un("vpaddl.s16 d0, d1", d0, d1, i32, 140); + TESTINSN_un("vpaddl.s8 d0, d1", d0, d1, i32, 140); + TESTINSN_un("vpaddl.s8 d0, d1", d0, d1, i32, (1 << 31) + 1); + TESTINSN_un("vpaddl.s16 d0, d1", d0, d1, i32, (1 << 31) + 1); + TESTINSN_un("vpaddl.s32 d0, d1", d0, d1, i32, (1 << 31) + 1); + TESTINSN_un("vpaddl.s32 d10, d11", d10, d11, i32, 24); + + printf("---- VPADAL ----\n"); + TESTINSN_un("vpadal.u32 d0, d1", d0, d1, i32, 24); + TESTINSN_un("vpadal.u32 d0, d1", d0, d1, i32, 140); + TESTINSN_un("vpadal.u16 d0, d1", d0, d1, i32, 140); + TESTINSN_un("vpadal.u8 d0, d1", d0, d1, i8, 140); + TESTINSN_un("vpadal.u8 d0, d1", d0, d1, i32, (1 << 31) + 1); + TESTINSN_un("vpadal.u16 d0, d1", d0, d1, i32, (1 << 31) + 1); + TESTINSN_un("vpadal.u32 d0, d1", d0, d1, i32, (1 << 31) + 1); + TESTINSN_un("vpadal.u32 d10, d11", d10, d11, i32, 24); + TESTINSN_un("vpadal.s32 d0, d1", d0, d1, i32, 24); + TESTINSN_un("vpadal.s32 d0, d1", d0, d1, i32, 140); + TESTINSN_un("vpadal.s16 d0, d1", d0, d1, i32, 140); + TESTINSN_un("vpadal.s8 d0, d1", d0, d1, i8, 140); + TESTINSN_un("vpadal.s8 d0, d1", d0, d1, i32, (1 << 31) + 1); + TESTINSN_un("vpadal.s16 d0, d1", d0, d1, i32, (1 << 31) + 1); + TESTINSN_un("vpadal.s32 d0, d1", d0, d1, i32, (1 << 31) + 1); + TESTINSN_un("vpadal.s32 d10, d11", d10, d11, i32, 24); + + printf("---- VZIP ----\n"); + TESTINSN_dual("vzip.32 d0, d1", d0, i8, 0x12, d1, i8, 0x34); + TESTINSN_dual("vzip.16 d1, d0", d0, i8, 0x12, d1, i8, 0x34); + TESTINSN_dual("vzip.8 d10, d11", d10, i8, 0x12, d11, i8, 0x34); + TESTINSN_dual("vzip.32 d0, d1", d0, i32, 0x12345678, d1, i32, 0x0a0b0c0d); + TESTINSN_dual("vzip.16 d1, d0", d0, i32, 0x12345678, d1, i32, 0x0a0b0c0d); + TESTINSN_dual("vzip.8 d30, d31", d30, i32, 0x12345678, d31, i32, 0x0a0b0c0d); + + printf("---- VUZP ----\n"); + TESTINSN_dual("vuzp.32 d0, d1", d0, i8, 0x12, d1, i8, 0x34); + TESTINSN_dual("vuzp.16 d1, d0", d0, i8, 0x12, d1, i8, 0x34); + TESTINSN_dual("vuzp.8 d10, d11", d10, i8, 0x12, d11, i8, 0x34); + TESTINSN_dual("vuzp.32 d0, d1", d0, i32, 0x12345678, d1, i32, 0x0a0b0c0d); + TESTINSN_dual("vuzp.16 d1, d0", d0, i32, 0x12345678, d1, i32, 0x0a0b0c0d); + TESTINSN_dual("vuzp.8 d30, d31", d30, i32, 0x12345678, d31, i32, 0x0a0b0c0d); + + printf("---- VTRN ----\n"); + TESTINSN_dual("vtrn.32 d0, d1", d0, i8, 0x12, d1, i8, 0x34); + TESTINSN_dual("vtrn.16 d1, d0", d0, i8, 0x12, d1, i8, 0x34); + TESTINSN_dual("vtrn.8 d10, d11", d10, i8, 0x12, d11, i8, 0x34); + TESTINSN_dual("vtrn.32 d0, d1", d0, i32, 0x12345678, d1, i32, 0x0a0b0c0d); + TESTINSN_dual("vtrn.16 d1, d0", d0, i32, 0x12345678, d1, i32, 0x0a0b0c0d); + TESTINSN_dual("vtrn.8 d30, d31", d30, i32, 0x12345678, d31, i32, 0x0a0b0c0d); + + printf("---- VSWP ----\n"); + TESTINSN_dual("vswp d0, d1", d0, i8, 0x12, d1, i8, 0x34); + TESTINSN_dual("vswp d1, d0", d0, i8, 0x12, d1, i8, 0x34); + TESTINSN_dual("vswp d10, d11", d10, i8, 0x12, d11, i8, 0x34); + TESTINSN_dual("vswp d0, d1", d0, i32, 0x12345678, d1, i32, 0x0a0b0c0d); + TESTINSN_dual("vswp d1, d0", d0, i32, 0x12345678, d1, i32, 0x0a0b0c0d); + TESTINSN_dual("vswp d30, d31", d30, i32, 0x12345678, d31, i32, 0x0a0b0c0d); + + printf("---- VSHRN ----\n"); + TESTINSN_un("vshrn.i16 d0, q1, #1", d0, q1, i32, -1); + TESTINSN_un("vshrn.i16 d3, q4, #2", d3, q4, i32, -0x7c); + TESTINSN_un("vshrn.i32 d2, q5, #10", d2, q5, i32, -1); + TESTINSN_un("vshrn.i32 d2, q5, #1", d2, q5, i32, 0x7fffffff); + TESTINSN_un("vshrn.i64 d6, q7, #7", d6, q7, i32, 0xffff); + TESTINSN_un("vshrn.i16 d8, q9, #8", d8, q9, i32, -10); + TESTINSN_un("vshrn.i32 d10, q11, #5", d10, q11, i32, 10234); + TESTINSN_un("vshrn.i64 d12, q13, #1", d12, q13, i32, -1); + TESTINSN_un("vshrn.i16 d14, q15, #6", d14, q15, i32, -1); + TESTINSN_un("vshrn.i32 d10, q11, #9", d10, q11, i32, 1000); + TESTINSN_un("vshrn.i64 d7, q13, #7", d7, q13, i32, -1); + TESTINSN_un("vshrn.i16 d8, q1, #1", d8, q1, i32, 0xabcf); + TESTINSN_un("vshrn.i32 d12, q3, #15", d12, q3, i32, -0x1b0); + TESTINSN_un("vshrn.i64 d0, q1, #22", d0, q1, i32, -1); + TESTINSN_un("vshrn.i64 d6, q7, #12", d6, q7, i32, 0xfac); + TESTINSN_un("vshrn.i64 d8, q4, #9", d8, q4, i32, 13560); + TESTINSN_un("vshrn.i64 d9, q12, #11", d9, q12, i32, 98710); + + printf("---- VDUP ----\n"); + TESTINSN_un("vdup.8 d12, d2[0]", d12, d2, i32, 0xabc4657); + TESTINSN_un("vdup.8 d0, d3[2]", d0, d3, i32, 0x7a1b3); + TESTINSN_un("vdup.8 d1, d0[7]", d1, d0, i32, 0x713aaa); + TESTINSN_un("vdup.8 d10, d4[3]", d10, d4, i32, 0xaa713); + TESTINSN_un("vdup.8 d4, d28[4]", d4, d28, i32, 0x7b1c3); + TESTINSN_un("vdup.16 d17, d19[1]", d17, d19, i32, 0x713ffff); + TESTINSN_un("vdup.16 d15, d31[2]", d15, d31, i32, 0x7f00fa); + TESTINSN_un("vdup.16 d6, d2[0]", d6, d2, i32, 0xffabcde); + TESTINSN_un("vdup.16 d8, d22[3]", d8, d22, i32, 0x713); + TESTINSN_un("vdup.16 d9, d2[0]", d9, d2, i32, 0x713); + TESTINSN_un("vdup.32 d10, d17[1]", d10, d17, i32, 0x713); + TESTINSN_un("vdup.32 d15, d11[0]", d15, d11, i32, 0x3); + TESTINSN_un("vdup.32 d30, d29[1]", d30, d29, i32, 0xf00000aa); + TESTINSN_un("vdup.32 d22, d0[1]", d22, d0, i32, 0xf); + TESTINSN_un("vdup.32 d13, d13[0]", d13, d13, i32, -1); + + printf("---- VQDMULH ----\n"); + TESTINSN_bin_q("vqdmulh.s32 d0, d1, d2", d0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin_q("vqdmulh.s32 d6, d7, d8", d6, d7, i32, 140, d8, i32, -120); + TESTINSN_bin_q("vqdmulh.s16 d9, d11, d12", d9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin_q("vqdmulh.s16 d4, d5, d6", d4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmulh.s32 d7, d8, d9", d7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmulh.s16 d4, d5, d6", d4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmulh.s32 d7, d8, d9", d7, d8, i32, (1 << 31), d9, i32, 12); + TESTINSN_bin_q("vqdmulh.s16 d4, d5, d6", d4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmulh.s32 d7, d8, d9", d7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmulh.s32 d10, d11, d15", d10, d11, i32, 24, d15, i32, 120); + TESTINSN_bin_q("vqdmulh.s32 d10, d30, d31", d10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin_q("vqdmulh.s16 d10, d30, d31", d10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin_q("vqdmulh.s32 d10, d30, d31", d10, d30, i32, 1 << 30, d31, i32, 1 << 31); + TESTINSN_bin_q("vqdmulh.s16 d10, d30, d31", d10, d30, i32, 1 << 31, d31, i32, 1 << 30); + + printf("---- VQDMULH (by scalar) ----\n"); + TESTINSN_bin_q("vqdmulh.s32 d0, d1, d6[0]", d0, d1, i32, 24, d6, i32, 120); + TESTINSN_bin_q("vqdmulh.s32 d6, d7, d1[1]", d6, d7, i32, 140, d1, i32, -120); + TESTINSN_bin_q("vqdmulh.s16 d9, d11, d7[0]", d9, d11, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin_q("vqdmulh.s16 d4, d5, d6[0]", d4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmulh.s32 d7, d8, d9[1]", d7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmulh.s16 d4, d5, d6[1]", d4, d5, i32, (1 << 14) - 0xabcd, d6, i16, (1 << 13) + 2); + TESTINSN_bin_q("vqdmulh.s32 d7, d8, d9[0]", d7, d8, i32, (1 << 31), d9, i32, 12); + TESTINSN_bin_q("vqdmulh.s16 d4, d5, d6[2]", d4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqdmulh.s32 d7, d8, d9[0]", d7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqdmulh.s32 d10, d31, d15[0]", d10, d31, i32, 24, d15, i32, 120); + TESTINSN_bin_q("vqdmulh.s32 d10, d14, d15[1]", d10, d14, i32, 1 << 31, d7, i32, 1 << 31); + TESTINSN_bin_q("vqdmulh.s16 d10, d14, d7[3]", d10, d14, i32, 1 << 31, q15, i32, 1 << 31); + TESTINSN_bin_q("vqdmulh.s32 d10, d14, d15[1]", d10, d14, i32, 1 << 30, d15, i32, 1 << 31); + TESTINSN_bin_q("vqdmulh.s16 d31, d14, d7[1]", d31, d14, i32, 1 << 31, d7, i32, 1 << 30); + + printf("---- VSHRN ----\n"); + TESTINSN_un("vshrn.i64 d2, q2, #1", d2, q2, i32, 0xabc4657); + TESTINSN_un("vshrn.i64 d3, q3, #0", d3, q3, i32, 0x7a1b3); + TESTINSN_un("vshrn.i64 d1, q0, #3", d1, q0, i32, 0x713aaa); + TESTINSN_un("vshrn.i64 d0, q4, #5", d0, q4, i32, 0xaa713); + TESTINSN_un("vshrn.i64 d4, q8, #11", d4, q8, i32, 0x7b1c3); + TESTINSN_un("vshrn.i16 d7, q12, #6", d7, q12, i32, 0x713ffff); + TESTINSN_un("vshrn.i16 d15, q11, #2", d15, q11, i32, 0x7f00fa); + TESTINSN_un("vshrn.i16 d6, q2, #4", d6, q2, i32, 0xffabc); + TESTINSN_un("vshrn.i16 d8, q12, #3", d8, q12, i32, 0x713); + TESTINSN_un("vshrn.i16 d9, q2, #7", d9, q2, i32, 0x713); + TESTINSN_un("vshrn.i32 d10, q13, #2", d10, q13, i32, 0x713); + TESTINSN_un("vshrn.i32 d15, q11, #1", d15, q11, i32, 0x3); + TESTINSN_un("vshrn.i32 d10, q9, #5", d10, q9, i32, 0xf00000aa); + TESTINSN_un("vshrn.i32 d12, q0, #6", d12, q0, i32, 0xf); + TESTINSN_un("vshrn.i32 d13, q13, #2", d13, q13, i32, -1); + + printf("---- VQSHRN ----\n"); + TESTINSN_un_q("vqshrn.s16 d0, q1, #1", d0, q1, i32, -1); + TESTINSN_un_q("vqshrn.s16 d3, q4, #2", d3, q4, i32, -0x7c); + TESTINSN_un_q("vqshrn.s32 d2, q5, #10", d2, q5, i32, -1); + TESTINSN_un_q("vqshrn.s32 d2, q5, #1", d2, q5, i32, 0x7fffffff); + TESTINSN_un_q("vqshrn.s16 d2, q5, #1", d2, q5, i16, 0x7fff); + TESTINSN_un_q("vqshrn.s64 d6, q7, #7", d6, q7, i32, 0xffff); + TESTINSN_un_q("vqshrn.s16 d8, q9, #8", d8, q9, i32, -10); + TESTINSN_un_q("vqshrn.s32 d10, q11, #5", d10, q11, i32, 10234); + TESTINSN_un_q("vqshrn.s64 d12, q13, #1", d12, q13, i32, -1); + TESTINSN_un_q("vqshrn.s16 d14, q15, #6", d14, q15, i32, -1); + TESTINSN_un_q("vqshrn.s32 d10, q11, #9", d10, q11, i32, 1000); + TESTINSN_un_q("vqshrn.s64 d7, q13, #7", d7, q13, i32, -1); + TESTINSN_un_q("vqshrn.s16 d8, q1, #1", d8, q1, i32, 0xabcf); + TESTINSN_un_q("vqshrn.s32 d8, q1, #1", d8, q1, i32, 0xabcf); + TESTINSN_un_q("vqshrn.s32 d12, q3, #15", d12, q3, i32, -0x1b0); + TESTINSN_un_q("vqshrn.s64 d0, q1, #22", d0, q1, i32, -1); + TESTINSN_un_q("vqshrn.s64 d6, q7, #12", d6, q7, i32, 0xfac); + TESTINSN_un_q("vqshrn.s64 d8, q4, #9", d8, q4, i32, 13560); + TESTINSN_un_q("vqshrn.s64 d9, q12, #11", d9, q12, i32, 98710); + TESTINSN_un_q("vqshrn.u16 d0, q1, #1", d0, q1, i32, -1); + TESTINSN_un_q("vqshrn.u16 d3, q4, #2", d3, q4, i32, -0x7c); + TESTINSN_un_q("vqshrn.u32 d2, q5, #10", d2, q5, i32, -1); + TESTINSN_un_q("vqshrn.u32 d2, q5, #1", d2, q5, i32, 0x7fffffff); + TESTINSN_un_q("vqshrn.u16 d2, q5, #1", d2, q5, i16, 0x7fff); + TESTINSN_un_q("vqshrn.u64 d6, q7, #7", d6, q7, i32, 0xffff); + TESTINSN_un_q("vqshrn.u16 d8, q9, #8", d8, q9, i32, -10); + TESTINSN_un_q("vqshrn.u32 d10, q11, #5", d10, q11, i32, 10234); + TESTINSN_un_q("vqshrn.u64 d12, q13, #1", d12, q13, i32, -1); + TESTINSN_un_q("vqshrn.u16 d14, q15, #6", d14, q15, i32, -1); + TESTINSN_un_q("vqshrn.u32 d10, q11, #9", d10, q11, i32, 1000); + TESTINSN_un_q("vqshrn.u64 d7, q13, #7", d7, q13, i32, -1); + TESTINSN_un_q("vqshrn.u16 d8, q1, #1", d8, q1, i32, 0xabcf); + TESTINSN_un_q("vqshrn.u32 d8, q1, #1", d8, q1, i32, 0xabcf); + TESTINSN_un_q("vqshrn.u32 d12, q3, #15", d12, q3, i32, -0x1b0); + TESTINSN_un_q("vqshrn.u64 d0, q1, #22", d0, q1, i32, -1); + TESTINSN_un_q("vqshrn.u64 d6, q7, #12", d6, q7, i32, 0xfac); + TESTINSN_un_q("vqshrn.u64 d8, q4, #9", d8, q4, i32, 13560); + TESTINSN_un_q("vqshrn.u64 d9, q12, #11", d9, q12, i32, 98710); + + printf("---- VQSHRUN ----\n"); + TESTINSN_un_q("vqshrun.s16 d0, q1, #1", d0, q1, i32, -1); + TESTINSN_un_q("vqshrun.s16 d3, q4, #2", d3, q4, i32, -0x7c); + TESTINSN_un_q("vqshrun.s32 d2, q5, #10", d2, q5, i32, -1); + TESTINSN_un_q("vqshrun.s32 d2, q5, #1", d2, q5, i32, 0x7fffffff); + TESTINSN_un_q("vqshrun.s16 d2, q5, #1", d2, q5, i16, 0x7fff); + TESTINSN_un_q("vqshrun.s64 d6, q7, #7", d6, q7, i32, 0xffff); + TESTINSN_un_q("vqshrun.s16 d8, q9, #8", d8, q9, i32, -10); + TESTINSN_un_q("vqshrun.s32 d10, q11, #5", d10, q11, i32, 10234); + TESTINSN_un_q("vqshrun.s64 d12, q13, #1", d12, q13, i32, -1); + TESTINSN_un_q("vqshrun.s16 d14, q15, #6", d14, q15, i32, -1); + TESTINSN_un_q("vqshrun.s32 d10, q11, #9", d10, q11, i32, 1000); + TESTINSN_un_q("vqshrun.s64 d7, q13, #7", d7, q13, i32, -1); + TESTINSN_un_q("vqshrun.s16 d8, q1, #1", d8, q1, i32, 0xabcf); + TESTINSN_un_q("vqshrun.s32 d8, q1, #1", d8, q1, i32, 0xabcf); + TESTINSN_un_q("vqshrun.s32 d12, q3, #15", d12, q3, i32, -0x1b0); + TESTINSN_un_q("vqshrun.s64 d0, q1, #22", d0, q1, i32, -1); + TESTINSN_un_q("vqshrun.s64 d6, q7, #12", d6, q7, i32, 0xfac); + TESTINSN_un_q("vqshrun.s64 d8, q4, #9", d8, q4, i32, 13560); + TESTINSN_un_q("vqshrun.s64 d9, q12, #11", d9, q12, i32, 98710); + + printf("---- VQRSHRN ----\n"); + TESTINSN_un_q("vqrshrn.s16 d0, q1, #1", d0, q1, i32, -1); + TESTINSN_un_q("vqrshrn.s16 d3, q4, #2", d3, q4, i32, -0x7c); + TESTINSN_un_q("vqrshrn.s32 d2, q5, #10", d2, q5, i32, -1); + TESTINSN_un_q("vqrshrn.s32 d2, q5, #1", d2, q5, i32, 0x7fffffff); + TESTINSN_un_q("vqrshrn.s16 d2, q5, #1", d2, q5, i16, 0x7fff); + TESTINSN_un_q("vqrshrn.s64 d6, q7, #7", d6, q7, i32, 0xffff); + TESTINSN_un_q("vqrshrn.s16 d8, q9, #8", d8, q9, i32, -10); + TESTINSN_un_q("vqrshrn.s32 d10, q11, #5", d10, q11, i32, 10234); + TESTINSN_un_q("vqrshrn.s64 d12, q13, #1", d12, q13, i32, -1); + TESTINSN_un_q("vqrshrn.s16 d14, q15, #6", d14, q15, i32, -1); + TESTINSN_un_q("vqrshrn.s32 d10, q11, #9", d10, q11, i32, 1000); + TESTINSN_un_q("vqrshrn.s64 d7, q13, #7", d7, q13, i32, -1); + TESTINSN_un_q("vqrshrn.s16 d8, q1, #1", d8, q1, i32, 0xabcf); + TESTINSN_un_q("vqrshrn.s32 d8, q1, #1", d8, q1, i32, 0xabcf); + TESTINSN_un_q("vqrshrn.s32 d12, q3, #15", d12, q3, i32, -0x1b0); + TESTINSN_un_q("vqrshrn.s64 d0, q1, #22", d0, q1, i32, -1); + TESTINSN_un_q("vqrshrn.s64 d6, q7, #12", d6, q7, i32, 0xfac); + TESTINSN_un_q("vqrshrn.s64 d8, q4, #9", d8, q4, i32, 13560); + TESTINSN_un_q("vqrshrn.s64 d9, q12, #11", d9, q12, i32, 98710); + TESTINSN_un_q("vqrshrn.u16 d0, q1, #1", d0, q1, i32, -1); + TESTINSN_un_q("vqrshrn.u16 d3, q4, #2", d3, q4, i32, -0x7c); + TESTINSN_un_q("vqrshrn.u32 d2, q5, #10", d2, q5, i32, -1); + TESTINSN_un_q("vqrshrn.u32 d2, q5, #1", d2, q5, i32, 0x7fffffff); + TESTINSN_un_q("vqrshrn.u16 d2, q5, #1", d2, q5, i16, 0x7fff); + TESTINSN_un_q("vqrshrn.u64 d6, q7, #7", d6, q7, i32, 0xffff); + TESTINSN_un_q("vqrshrn.u16 d8, q9, #8", d8, q9, i32, -10); + TESTINSN_un_q("vqrshrn.u32 d10, q11, #5", d10, q11, i32, 10234); + TESTINSN_un_q("vqrshrn.u64 d12, q13, #1", d12, q13, i32, -1); + TESTINSN_un_q("vqrshrn.u16 d14, q15, #6", d14, q15, i32, -1); + TESTINSN_un_q("vqrshrn.u32 d10, q11, #9", d10, q11, i32, 1000); + TESTINSN_un_q("vqrshrn.u64 d7, q13, #7", d7, q13, i32, -1); + TESTINSN_un_q("vqrshrn.u16 d8, q1, #1", d8, q1, i32, 0xabcf); + TESTINSN_un_q("vqrshrn.u32 d8, q1, #1", d8, q1, i32, 0xabcf); + TESTINSN_un_q("vqrshrn.u32 d12, q3, #15", d12, q3, i32, -0x1b0); + TESTINSN_un_q("vqrshrn.u64 d0, q1, #22", d0, q1, i32, -1); + TESTINSN_un_q("vqrshrn.u64 d6, q7, #12", d6, q7, i32, 0xfac); + TESTINSN_un_q("vqrshrn.u64 d8, q4, #9", d8, q4, i32, 13560); + TESTINSN_un_q("vqrshrn.u64 d9, q12, #11", d9, q12, i32, 98710); + + printf("---- VQRSHRUN ----\n"); + TESTINSN_un_q("vqrshrun.s16 d0, q1, #1", d0, q1, i32, -1); + TESTINSN_un_q("vqrshrun.s16 d3, q4, #2", d3, q4, i32, -0x7c); + TESTINSN_un_q("vqrshrun.s32 d2, q5, #10", d2, q5, i32, -1); + TESTINSN_un_q("vqrshrun.s32 d2, q5, #1", d2, q5, i32, 0x7fffffff); + TESTINSN_un_q("vqrshrun.s16 d2, q5, #1", d2, q5, i16, 0x7fff); + TESTINSN_un_q("vqrshrun.s64 d6, q7, #7", d6, q7, i32, 0xffff); + TESTINSN_un_q("vqrshrun.s16 d8, q9, #8", d8, q9, i32, -10); + TESTINSN_un_q("vqrshrun.s32 d10, q11, #5", d10, q11, i32, 10234); + TESTINSN_un_q("vqrshrun.s64 d12, q13, #1", d12, q13, i32, -1); + TESTINSN_un_q("vqrshrun.s16 d14, q15, #6", d14, q15, i32, -1); + TESTINSN_un_q("vqrshrun.s32 d10, q11, #9", d10, q11, i32, 1000); + TESTINSN_un_q("vqrshrun.s64 d7, q13, #7", d7, q13, i32, -1); + TESTINSN_un_q("vqrshrun.s16 d8, q1, #1", d8, q1, i32, 0xabcf); + TESTINSN_un_q("vqrshrun.s32 d8, q1, #1", d8, q1, i32, 0xabcf); + TESTINSN_un_q("vqrshrun.s32 d12, q3, #15", d12, q3, i32, -0x1b0); + TESTINSN_un_q("vqrshrun.s64 d0, q1, #22", d0, q1, i32, -1); + TESTINSN_un_q("vqrshrun.s64 d6, q7, #12", d6, q7, i32, 0xfac); + TESTINSN_un_q("vqrshrun.s64 d8, q4, #9", d8, q4, i32, 13560); + TESTINSN_un_q("vqrshrun.s64 d9, q12, #11", d9, q12, i32, 98710); + + printf("---- VRSHRN ----\n"); + TESTINSN_un("vrshrn.i64 d2, q2, #1", d2, q2, i32, 0xabc4657); + TESTINSN_un("vrshrn.i64 d3, q3, #0", d3, q3, i32, 0x7a1b3); + TESTINSN_un("vrshrn.i64 d1, q0, #3", d1, q0, i32, 0x713aaa); + TESTINSN_un("vrshrn.i64 d0, q4, #5", d0, q4, i32, 0xaa713); + TESTINSN_un("vrshrn.i64 d4, q8, #11", d4, q8, i32, 0x7b1c3); + TESTINSN_un("vrshrn.i16 d7, q12, #6", d7, q12, i32, 0x713ffff); + TESTINSN_un("vrshrn.i16 d15, q11, #2", d15, q11, i32, 0x7f00fa); + TESTINSN_un("vrshrn.i16 d6, q2, #4", d6, q2, i32, 0xffabc); + TESTINSN_un("vrshrn.i16 d8, q12, #3", d8, q12, i32, 0x713); + TESTINSN_un("vrshrn.i16 d9, q2, #7", d9, q2, i32, 0x713); + TESTINSN_un("vrshrn.i32 d10, q13, #2", d10, q13, i32, 0x713); + TESTINSN_un("vrshrn.i32 d15, q11, #1", d15, q11, i32, 0x3); + TESTINSN_un("vrshrn.i32 d10, q9, #5", d10, q9, i32, 0xf00000aa); + TESTINSN_un("vrshrn.i32 d12, q0, #6", d12, q0, i32, 0xf); + TESTINSN_un("vrshrn.i32 d13, q13, #2", d13, q13, i32, -1); + + printf("---- VSHL (immediate) ----\n"); + TESTINSN_un("vshl.i64 d0, d1, #1", d0, d1, i32, 24); + TESTINSN_un("vshl.i64 d5, d2, #1", d5, d2, i32, (1 << 30)); + TESTINSN_un("vshl.i64 d9, d12, #2", d9, d12, i32, (1 << 31) + 2); + TESTINSN_un("vshl.i64 d11, d2, #12", d11, d2, i32, -1); + TESTINSN_un("vshl.i64 d15, d12, #63", d15, d12, i32, 5); + TESTINSN_un("vshl.i64 d5, d12, #62", d5, d12, i32, (1 << 31) + 1); + TESTINSN_un("vshl.i32 d0, d1, #1", d0, d1, i32, 24); + TESTINSN_un("vshl.i32 d5, d2, #1", d5, d2, i32, (1 << 30)); + TESTINSN_un("vshl.i32 d9, d12, #2", d9, d12, i32, (1 << 31) + 2); + TESTINSN_un("vshl.i32 d11, d2, #12", d11, d2, i32, -1); + TESTINSN_un("vshl.i32 d15, d12, #20", d15, d12, i32, 5); + TESTINSN_un("vshl.i32 d5, d12, #30", d5, d12, i32, (1 << 31) + 1); + TESTINSN_un("vshl.i16 d0, d1, #1", d0, d1, i16, 24); + TESTINSN_un("vshl.i16 d5, d2, #1", d5, d2, i32, (1 << 30)); + TESTINSN_un("vshl.i16 d9, d12, #2", d9, d12, i32, (1 << 31) + 2); + TESTINSN_un("vshl.i16 d11, d2, #12", d11, d2, i16, -1); + TESTINSN_un("vshl.i16 d15, d12, #3", d15, d12, i16, 5); + TESTINSN_un("vshl.i16 d5, d12, #14", d5, d12, i32, (1 << 31) + 1); + TESTINSN_un("vshl.i8 d0, d1, #1", d0, d1, i8, 24); + TESTINSN_un("vshl.i8 d5, d2, #1", d5, d2, i32, (1 << 30)); + TESTINSN_un("vshl.i8 d9, d12, #2", d9, d12, i32, (1 << 31) + 2); + TESTINSN_un("vshl.i8 d11, d2, #7", d11, d2, i8, -1); + TESTINSN_un("vshl.i8 d15, d12, #3", d15, d12, i8, 5); + TESTINSN_un("vshl.i8 d5, d12, #6", d5, d12, i32, (1 << 31) + 1); + + printf("---- VNEG ----\n"); + TESTINSN_un("vneg.s32 d0, d1", d0, d1, i32, 0x73); + TESTINSN_un("vneg.s16 d15, d4", d15, d4, i32, 0x73); + TESTINSN_un("vneg.s8 d8, d7", d8, d7, i32, 0x73); + TESTINSN_un("vneg.s32 d0, d1", d0, d1, i32, 0xfe); + TESTINSN_un("vneg.s16 d31, d4", d31, d4, i32, 0xef); + TESTINSN_un("vneg.s8 d8, d7", d8, d7, i32, 0xde); + TESTINSN_un("vneg.s32 d0, d1", d0, d1, i16, 0xfe0a); + TESTINSN_un("vneg.s16 d15, d4", d15, d4, i16, 0xef0b); + TESTINSN_un("vneg.s8 d8, d7", d8, d7, i16, 0xde0c); + + printf("---- VQNEG ----\n"); + TESTINSN_un_q("vqneg.s32 d0, d1", d0, d1, i32, 0x73); + TESTINSN_un_q("vqneg.s32 d0, d1", d0, d1, i32, 1 << 31); + TESTINSN_un_q("vqneg.s16 d0, d1", d0, d1, i32, 1 << 31); + TESTINSN_un_q("vqneg.s8 d0, d1", d0, d1, i32, 1 << 31); + TESTINSN_un_q("vqneg.s16 d15, d4", d15, d4, i32, 0x73); + TESTINSN_un_q("vqneg.s8 d8, d7", d8, d7, i32, 0x73); + TESTINSN_un_q("vqneg.s32 d0, d1", d0, d1, i32, 0xfe); + TESTINSN_un_q("vqneg.s16 d31, d4", d31, d4, i32, 0xef); + TESTINSN_un_q("vqneg.s8 d8, d7", d8, d7, i32, 0xde); + TESTINSN_un_q("vqneg.s32 d0, d1", d0, d1, i16, 0xfe0a); + TESTINSN_un_q("vqneg.s16 d15, d4", d15, d4, i16, 0xef0b); + TESTINSN_un_q("vqneg.s8 d8, d7", d8, d7, i16, 0xde0c); + + printf("---- VREV ----\n"); + TESTINSN_un("vrev64.8 d0, d1", d0, d1, i32, 0xaabbccdd); + TESTINSN_un("vrev64.16 d10, d31", d10, d31, i32, 0xaabbccdd); + TESTINSN_un("vrev64.32 d1, d14", d1, d14, i32, 0xaabbccdd); + TESTINSN_un("vrev32.8 d0, d1", d0, d1, i32, 0xaabbccdd); + TESTINSN_un("vrev32.16 d30, d15", d30, d15, i32, 0xaabbccdd); + TESTINSN_un("vrev16.8 d0, d1", d0, d1, i32, 0xaabbccdd); + + printf("---- VTBL ----\n"); + TESTINSN_tbl_1("vtbl.8 d0, {d2}, d1", d0, d1, i8, 0, d2, i32, 0x12345678); + TESTINSN_tbl_1("vtbl.8 d0, {d31}, d1", d0, d1, i8, 0x07, d31, i32, 0x12345678); + TESTINSN_tbl_1("vtbl.8 d0, {d20}, d1", d0, d1, i8, 1, d20, i32, 0x12345678); + TESTINSN_tbl_1("vtbl.8 d0, {d2}, d31", d0, d31, i8, 2, d2, i32, 0x12345678); + TESTINSN_tbl_1("vtbl.8 d30, {d2}, d1", d30, d1, i32, 0x07030501, d2, i32, 0x12345678); + TESTINSN_tbl_1("vtbl.8 d31, {d2}, d1", d31, d1, i16, 0x0104, d2, i32, 0x12345678); + TESTINSN_tbl_1("vtbl.8 d30, {d2}, d1", d30, d1, i32, 0x07080501, d2, i32, 0x12345678); + TESTINSN_tbl_1("vtbl.8 d30, {d2}, d1", d30, d1, i32, 0x07ed05ee, d2, i32, 0x12345678); + TESTINSN_tbl_2("vtbl.8 d0, {d2-d3}, d1", d0, d1, i8, 0, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbl.8 d0, {d1-d2}, d3", d0, d3, i8, 0xa, d1, i32, 0x12345678, d2, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbl.8 d0, {d30-d31}, d1", d0, d1, i8, 0xf, d30, i32, 0x12345678, d31, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbl.8 d0, {d22-d23}, d1", d0, d1, i8, 9, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbl.8 d0, {d22-d23}, d1", d0, d1, i8, 15, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbl.8 d0, {d22-d23}, d1", d0, d1, i8, 4, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbl.8 d0, {d22-d23}, d1", d0, d1, i8, 14, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbl.8 d0, {d22-d23}, d1", d0, d1, i8, 15, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbl.8 d30, {d2-d3}, d31", d30, d31, i32, 0x07030501, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbl.8 d30, {d2-d3}, d31", d30, d31, i32, 0x0c0a0501, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbl.8 d30, {d2-d3}, d31", d30, d31, i32, 0x070e0e01, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbl.8 d30, {d2-d3}, d31", d30, d31, i32, 0x0d130f01, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbl.8 d30, {d2-d3}, d31", d30, d31, i32, 0x07030511, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4); + TESTINSN_tbl_3("vtbl.8 d0, {d2-d4}, d1", d0, d1, i8, 0, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbl.8 d0, {d1-d3}, d10", d0, d10, i8, 0x11, d1, i32, 0x12345678, d2, i32, 0xa1a2a3a4, d3, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbl.8 d0, {d29-d31}, d1", d0, d1, i8, 0x17, d29, i32, 0x12345678, d30, i32, 0xa1a2a3a4, d31, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbl.8 d0, {d22-d24}, d1", d0, d1, i8, 9, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbl.8 d0, {d22-d24}, d1", d0, d1, i8, 15, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbl.8 d0, {d22-d24}, d1", d0, d1, i8, 4, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbl.8 d0, {d22-d24}, d1", d0, d1, i8, 16, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbl.8 d0, {d22-d24}, d1", d0, d1, i8, 17, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbl.8 d30, {d2-d4}, d31", d30, d31, i32, 0x0a031504, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbl.8 d30, {d2-d4}, d31", d30, d31, i32, 0x0c0a0501, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbl.8 d30, {d2-d4}, d31", d30, d31, i32, 0x170efe0f, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbl.8 d30, {d2-d4}, d31", d30, d31, i32, 0x0d130f11, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbl.8 d30, {d2-d4}, d31", d30, d31, i32, 0x070f1511, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd); + TESTINSN_tbl_4("vtbl.8 d0, {d2-d5}, d1", d0, d1, i8, 0, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd, d5, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbl.8 d0, {d1-d4}, d10", d0, d10, i8, 0x11, d1, i32, 0x12345678, d2, i32, 0xa1a2a3a4, d3, i32, 0xcacbcccd, d4, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbl.8 d0, {d28-d31}, d1", d0, d1, i8, 0x17, d28, i32, 0x12345678, d29, i32, 0xa1a2a3a4, d30, i32, 0xcacbcccd, d31, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbl.8 d0, {d22-d25}, d1", d0, d1, i8, 9, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd, d25, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbl.8 d0, {d22-d25}, d1", d0, d1, i8, 0x1a, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd, d25, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbl.8 d0, {d22-d25}, d1", d0, d1, i8, 4, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd, d25, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbl.8 d0, {d22-d25}, d1", d0, d1, i8, 0x16, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd, d25, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbl.8 d0, {d22-d25}, d1", d0, d1, i8, 0x1f, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd, d25, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbl.8 d30, {d2-d5}, d31", d30, d31, i32, 0x1a0315ff, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd, d5, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbl.8 d30, {d2-d5}, d31", d30, d31, i32, 0x0c0a0501, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd, d5, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbl.8 d30, {d2-d5}, d31", d30, d31, i32, 0x171efe0f, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd, d5, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbl.8 d30, {d2-d5}, d31", d30, d31, i32, 0x1d130f1a, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd, d5, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbl.8 d30, {d2-d5}, d31", d30, d31, i32, 0x17101c11, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd, d5, i32, 0xfefdfcfb); + + printf("---- VTBX ----\n"); + TESTINSN_tbl_1("vtbx.8 d0, {d2}, d1", d0, d1, i8, 0, d2, i32, 0x12345678); + TESTINSN_tbl_1("vtbx.8 d0, {d31}, d1", d0, d1, i8, 0x07, d31, i32, 0x12345678); + TESTINSN_tbl_1("vtbx.8 d0, {d20}, d1", d0, d1, i8, 1, d20, i32, 0x12345678); + TESTINSN_tbl_1("vtbx.8 d0, {d2}, d31", d0, d31, i8, 2, d2, i32, 0x12345678); + TESTINSN_tbl_1("vtbx.8 d30, {d2}, d1", d30, d1, i32, 0x07030501, d2, i32, 0x12345678); + TESTINSN_tbl_1("vtbx.8 d31, {d2}, d1", d31, d1, i16, 0x0104, d2, i32, 0x12345678); + TESTINSN_tbl_1("vtbx.8 d30, {d2}, d1", d30, d1, i32, 0x07080501, d2, i32, 0x12345678); + TESTINSN_tbl_1("vtbx.8 d30, {d2}, d1", d30, d1, i32, 0x07ed05ee, d2, i32, 0x12345678); + TESTINSN_tbl_2("vtbx.8 d0, {d2-d3}, d1", d0, d1, i8, 0, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbx.8 d0, {d1-d2}, d3", d0, d3, i8, 0xa, d1, i32, 0x12345678, d2, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbx.8 d0, {d30-d31}, d1", d0, d1, i8, 0xf, d30, i32, 0x12345678, d31, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbx.8 d0, {d22-d23}, d1", d0, d1, i8, 9, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbx.8 d0, {d22-d23}, d1", d0, d1, i8, 15, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbx.8 d0, {d22-d23}, d1", d0, d1, i8, 4, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbx.8 d0, {d22-d23}, d1", d0, d1, i8, 14, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbx.8 d0, {d22-d23}, d1", d0, d1, i8, 15, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbx.8 d30, {d2-d3}, d31", d30, d31, i32, 0x07030501, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbx.8 d30, {d2-d3}, d31", d30, d31, i32, 0x0c0a0501, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbx.8 d30, {d2-d3}, d31", d30, d31, i32, 0x070e0e01, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbx.8 d30, {d2-d3}, d31", d30, d31, i32, 0x0d130f01, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4); + TESTINSN_tbl_2("vtbx.8 d30, {d2-d3}, d31", d30, d31, i32, 0x07030511, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4); + TESTINSN_tbl_3("vtbx.8 d0, {d2-d4}, d1", d0, d1, i8, 0, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbx.8 d0, {d1-d3}, d10", d0, d10, i8, 0x11, d1, i32, 0x12345678, d2, i32, 0xa1a2a3a4, d3, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbx.8 d0, {d29-d31}, d1", d0, d1, i8, 0x17, d29, i32, 0x12345678, d30, i32, 0xa1a2a3a4, d31, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbx.8 d0, {d22-d24}, d1", d0, d1, i8, 9, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbx.8 d0, {d22-d24}, d1", d0, d1, i8, 15, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbx.8 d0, {d22-d24}, d1", d0, d1, i8, 4, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbx.8 d0, {d22-d24}, d1", d0, d1, i8, 16, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbx.8 d0, {d22-d24}, d1", d0, d1, i8, 17, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbx.8 d30, {d2-d4}, d31", d30, d31, i32, 0x0a031504, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbx.8 d30, {d2-d4}, d31", d30, d31, i32, 0x0c0a0501, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbx.8 d30, {d2-d4}, d31", d30, d31, i32, 0x170efe0f, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbx.8 d30, {d2-d4}, d31", d30, d31, i32, 0x0d130f11, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd); + TESTINSN_tbl_3("vtbx.8 d30, {d2-d4}, d31", d30, d31, i32, 0x070f1511, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd); + TESTINSN_tbl_4("vtbx.8 d0, {d2-d5}, d1", d0, d1, i8, 0, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd, d5, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbx.8 d0, {d1-d4}, d10", d0, d10, i8, 0x11, d1, i32, 0x12345678, d2, i32, 0xa1a2a3a4, d3, i32, 0xcacbcccd, d4, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbx.8 d0, {d28-d31}, d1", d0, d1, i8, 0x17, d28, i32, 0x12345678, d29, i32, 0xa1a2a3a4, d30, i32, 0xcacbcccd, d31, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbx.8 d0, {d22-d25}, d1", d0, d1, i8, 9, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd, d25, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbx.8 d0, {d22-d25}, d1", d0, d1, i8, 0x1a, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd, d25, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbx.8 d0, {d22-d25}, d1", d0, d1, i8, 4, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd, d25, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbx.8 d0, {d22-d25}, d1", d0, d1, i8, 0x16, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd, d25, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbx.8 d0, {d22-d25}, d1", d0, d1, i8, 0x1f, d22, i32, 0x12345678, d23, i32, 0xa1a2a3a4, d24, i32, 0xcacbcccd, d25, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbx.8 d30, {d2-d5}, d31", d30, d31, i32, 0x1a0315ff, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd, d5, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbx.8 d30, {d2-d5}, d31", d30, d31, i32, 0x0c0a0501, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd, d5, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbx.8 d30, {d2-d5}, d31", d30, d31, i32, 0x171efe0f, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd, d5, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbx.8 d30, {d2-d5}, d31", d30, d31, i32, 0x1d130f1a, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd, d5, i32, 0xfefdfcfb); + TESTINSN_tbl_4("vtbx.8 d30, {d2-d5}, d31", d30, d31, i32, 0x17101c11, d2, i32, 0x12345678, d3, i32, 0xa1a2a3a4, d4, i32, 0xcacbcccd, d5, i32, 0xfefdfcfb); + + printf("---- VPMAX (integer) ----\n"); + TESTINSN_bin("vpmax.s32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 121); + TESTINSN_bin("vpmax.s32 d0, d1, d2", d0, d1, i32, 250, d2, i32, 121); + TESTINSN_bin("vpmax.s32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 140); + TESTINSN_bin("vpmax.s16 d0, d1, d2", d0, d1, i32, 0x01200140, d2, i32, 120); + TESTINSN_bin("vpmax.s8 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vpmax.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vpmax.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmax.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmax.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 3); + TESTINSN_bin("vpmax.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vpmax.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vpmax.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 4, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vpmax.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmax.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmax.s32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin("vpmax.u32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vpmax.u32 d0, d1, d2", d0, d1, i32, 250, d2, i32, 120); + TESTINSN_bin("vpmax.u32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 140); + TESTINSN_bin("vpmax.u16 d0, d1, d2", d0, d1, i32, 0x01200140, d2, i32, 120); + TESTINSN_bin("vpmax.u8 d0, d1, d2", d0, d1, i32, 0x01202120, d2, i32, 120); + TESTINSN_bin("vpmax.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmax.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmax.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmax.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vpmax.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vpmax.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vpmax.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmax.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmax.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmax.u32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VPMIN (integer) ----\n"); + TESTINSN_bin("vpmin.s32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 121); + TESTINSN_bin("vpmin.s32 d0, d1, d2", d0, d1, i32, 250, d2, i32, 121); + TESTINSN_bin("vpmin.s32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 140); + TESTINSN_bin("vpmin.s16 d0, d1, d2", d0, d1, i32, 0x01200140, d2, i32, 120); + TESTINSN_bin("vpmin.s8 d0, d1, d2", d0, d1, i32, 120, d2, i32, 120); + TESTINSN_bin("vpmin.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vpmin.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmin.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmin.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 1, d5, i32, (1 << 31) + 3); + TESTINSN_bin("vpmin.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vpmin.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vpmin.s8 d5, d7, d5", d5, d7, i32, (1 << 31) + 4, d5, i32, (1 << 31) + 2); + TESTINSN_bin("vpmin.s16 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmin.s32 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmin.s32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + TESTINSN_bin("vpmin.u32 d0, d1, d2", d0, d1, i32, 25, d2, i32, 120); + TESTINSN_bin("vpmin.u32 d0, d1, d2", d0, d1, i32, 250, d2, i32, 120); + TESTINSN_bin("vpmin.u32 d0, d1, d2", d0, d1, i32, 140, d2, i32, 140); + TESTINSN_bin("vpmin.u16 d0, d1, d2", d0, d1, i32, 0x01200140, d2, i32, 120); + TESTINSN_bin("vpmin.u8 d0, d1, d2", d0, d1, i32, 0x01202120, d2, i32, 120); + TESTINSN_bin("vpmin.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmin.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmin.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmin.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vpmin.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vpmin.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 1, d2, i32, (1 << 31) + 3); + TESTINSN_bin("vpmin.u8 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmin.u16 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmin.u32 d0, d1, d2", d0, d1, i32, (1 << 31) + 4, d2, i32, (1 << 31) + 2); + TESTINSN_bin("vpmin.u32 d10, d11, d12", d10, d11, i32, 24, d12, i32, 120); + + printf("---- VQRDMULH ----\n"); + TESTINSN_bin_q("vqrdmulh.s32 d0, d1, d2", d0, d1, i32, 24, d2, i32, 120); + TESTINSN_bin_q("vqrdmulh.s32 d6, d7, d8", d6, d7, i32, 140, d8, i32, -120); + TESTINSN_bin_q("vqrdmulh.s16 d9, d11, d12", d9, d11, i32, 0x140, d12, i32, 0x120); + TESTINSN_bin_q("vqrdmulh.s16 d4, d5, d6", d4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqrdmulh.s32 d7, d8, d9", d7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqrdmulh.s16 d4, d5, d6", d4, d5, i32, (1 << 14) - 0xabcd, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqrdmulh.s32 d7, d8, d9", d7, d8, i32, (1 << 31), d9, i32, 12); + TESTINSN_bin_q("vqrdmulh.s16 d4, d5, d6", d4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqrdmulh.s32 d7, d8, d9", d7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqrdmulh.s32 d10, d11, d15", d10, d11, i32, 24, d15, i32, 120); + TESTINSN_bin_q("vqrdmulh.s32 d10, d30, d31", d10, d30, i32, 1 << 31, d31, i32, 1 << 31); + TESTINSN_bin_q("vqrdmulh.s16 d10, d30, d31", d10, d30, i32, 1 << 31, d31, i32, (1 << 31) + 1); + TESTINSN_bin_q("vqrdmulh.s32 d10, d30, d31", d10, d30, i32, 1 << 30, d31, i32, 1 << 31); + TESTINSN_bin_q("vqrdmulh.s16 d10, d30, d31", d10, d30, i32, 1 << 31, d31, i32, 1 << 30); + + printf("---- VQRDMULH (by scalar) ----\n"); + TESTINSN_bin_q("vqrdmulh.s32 d0, d1, d6[0]", d0, d1, i32, 24, d6, i32, 120); + TESTINSN_bin_q("vqrdmulh.s32 d6, d7, d1[1]", d6, d7, i32, 140, d1, i32, -120); + TESTINSN_bin_q("vqrdmulh.s16 d9, d11, d7[0]", d9, d11, i32, 0x140, d7, i32, 0x120); + TESTINSN_bin_q("vqrdmulh.s16 d4, d5, d6[0]", d4, d5, i32, (1 << 14) + 1, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqrdmulh.s32 d7, d8, d9[1]", d7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqrdmulh.s16 d4, d5, d6[1]", d4, d5, i32, (1 << 14) - 0xabcd, d6, i16, (1 << 13) + 2); + TESTINSN_bin_q("vqrdmulh.s32 d7, d8, d9[0]", d7, d8, i32, (1 << 31), d9, i32, 12); + TESTINSN_bin_q("vqrdmulh.s16 d4, d5, d6[2]", d4, d5, i32, (1 << 28) + 0xfe, d6, i32, (1 << 13) + 2); + TESTINSN_bin_q("vqrdmulh.s32 d7, d8, d9[0]", d7, d8, i32, (1 << 31) + 1, d9, i32, (1 << 31) + 2); + TESTINSN_bin_q("vqrdmulh.s32 d10, d31, d15[0]", d10, d31, i32, 24, d15, i32, 120); + TESTINSN_bin_q("vqrdmulh.s32 d10, d14, d15[1]", d10, d14, i32, 1 << 31, d7, i32, 1 << 31); + TESTINSN_bin_q("vqrdmulh.s16 d10, d14, d7[3]", d10, d14, i32, 1 << 31, q15, i32, (1 << 31) + 1); + TESTINSN_bin_q("vqrdmulh.s32 d10, d14, d15[1]", d10, d14, i32, 1 << 30, d15, i32, 1 << 31); + TESTINSN_bin_q("vqrdmulh.s16 d31, d14, d7[1]", d31, d14, i32, 1 << 31, d7, i32, 1 << 30); + + printf("---- VADD (fp) ----\n"); + TESTINSN_bin("vadd.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin("vadd.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin("vadd.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin("vadd.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin("vadd.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin("vadd.f32 d3, d4, d5", d3, d4, i32, f2u(24.87556), d5, i32, f2u(1346.0004)); + TESTINSN_bin("vadd.f32 d10, d11, d2", d10, d11, i32, f2u(48755.7), d2, i32, f2u(1089.2)); + TESTINSN_bin("vadd.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin("vadd.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin("vadd.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin("vadd.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin("vadd.f32 d10, d11, d2", d10, d11, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin("vadd.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin("vadd.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin("vadd.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin("vadd.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin("vadd.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin("vadd.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vadd.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VSUB (fp) ----\n"); + TESTINSN_bin("vsub.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin("vsub.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin("vsub.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin("vsub.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin("vsub.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin("vsub.f32 d3, d4, d5", d3, d4, i32, f2u(24), d5, i32, f2u(1346)); + TESTINSN_bin("vsub.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(1089)); + TESTINSN_bin("vsub.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin("vsub.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin("vsub.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin("vsub.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin("vsub.f32 d10, d11, d2", d10, d11, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin("vsub.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin("vsub.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin("vsub.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin("vsub.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin("vsub.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin("vsub.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vsub.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VMUL (fp) ----\n"); + TESTINSN_bin("vmul.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin("vmul.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin("vmul.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin("vmul.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin("vmul.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin("vmul.f32 d3, d4, d5", d3, d4, i32, f2u(24), d5, i32, f2u(1346)); + TESTINSN_bin("vmul.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(1089)); + TESTINSN_bin("vmul.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin("vmul.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin("vmul.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin("vmul.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin("vmul.f32 d10, d11, d2", d10, d11, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin("vmul.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin("vmul.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin("vmul.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin("vmul.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin("vmul.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin("vmul.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vmul.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VMLA (fp) ----\n"); + TESTINSN_bin_f("vmla.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin_f("vmla.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin_f("vmla.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin_f("vmla.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin_f("vmla.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin_f("vmla.f32 d3, d4, d5", d3, d4, i32, f2u(24), d5, i32, f2u(1346)); + TESTINSN_bin_f("vmla.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(1089)); + TESTINSN_bin_f("vmla.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin_f("vmla.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin_f("vmla.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin_f("vmla.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin_f("vmla.f32 d10, d11, d2", d10, d11, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin_f("vmla.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin_f("vmla.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin_f("vmla.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin_f("vmla.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin_f("vmla.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin_f("vmla.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VMLA (fp by scalar) ----\n"); + TESTINSN_bin_f("vmla.f32 d0, d1, d4[0]", d0, d1, i32, f2u(24), d4, i32, f2u(120)); + TESTINSN_bin_f("vmla.f32 d31, d8, d7[1]", d31, d8, i32, f2u(140), d7, i32, f2u(-120)); + TESTINSN_bin_f("vmla.f32 d4, d8, d15[1]", d4, d8, i32, (1 << 31) + 1, d15, i32, (1 << 31) + 2); + TESTINSN_bin_f("vmla.f32 d7, d8, d1[1]", d7, d8, i32, (1 << 31), d1, i16, 12); + TESTINSN_bin_f("vmla.f32 d17, d8, d1[1]", d17, d8, i32, (1 << 31) + 1, d1, i32, (1 << 31) + 2); + TESTINSN_bin_f("vmla.f32 d7, d8, d1[0]", d7, d8, i32, f2u(1e22), d1, i32, f2u(1e-19)); + TESTINSN_bin_f("vmla.f32 d7, d24, d1[0]", d7, d24, i32, f2u(1e12), d1, i32, f2u(1e11)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmla.f32 d0, d1, d2[0]", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VMLS (fp) ----\n"); + TESTINSN_bin_f("vmls.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin_f("vmls.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin_f("vmls.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin_f("vmls.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin_f("vmls.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin_f("vmls.f32 d3, d4, d5", d3, d4, i32, f2u(24), d5, i32, f2u(1346)); + TESTINSN_bin_f("vmls.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(1089)); + TESTINSN_bin_f("vmls.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin_f("vmls.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin_f("vmls.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin_f("vmls.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin_f("vmls.f32 d10, d11, d2", d10, d11, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin_f("vmls.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin_f("vmls.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin_f("vmls.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin_f("vmls.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin_f("vmls.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin_f("vmls.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VMLS (fp by scalar) ----\n"); + TESTINSN_bin_f("vmls.f32 d0, d1, d4[0]", d0, d1, i32, f2u(24), d4, i32, f2u(120)); + TESTINSN_bin_f("vmls.f32 d31, d8, d7[1]", d31, d8, i32, f2u(140), d7, i32, f2u(-120)); + TESTINSN_bin_f("vmls.f32 d4, d8, d15[1]", d4, d8, i32, (1 << 31) + 1, d15, i32, (1 << 31) + 2); + TESTINSN_bin_f("vmls.f32 d7, d8, d1[1]", d7, d8, i32, (1 << 31), d1, i16, 12); + TESTINSN_bin_f("vmls.f32 d17, d8, d1[1]", d17, d8, i32, (1 << 31) + 1, d1, i32, (1 << 31) + 2); + TESTINSN_bin_f("vmls.f32 d7, d8, d1[0]", d7, d8, i32, f2u(1e22), d1, i32, f2u(1e-19)); + TESTINSN_bin_f("vmls.f32 d7, d24, d1[0]", d7, d24, i32, f2u(1e12), d1, i32, f2u(1e11)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin_f("vmls.f32 d0, d1, d2[0]", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VABD (fp) ----\n"); + TESTINSN_bin("vabd.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin("vabd.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin("vabd.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin("vabd.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin("vabd.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin("vabd.f32 d3, d4, d5", d3, d4, i32, f2u(24), d5, i32, f2u(1346)); + TESTINSN_bin("vabd.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(1089)); + TESTINSN_bin("vabd.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin("vabd.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin("vabd.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin("vabd.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin("vabd.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin("vabd.f32 d10, d11, d2", d10, d11, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin("vabd.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin("vabd.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin("vabd.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin("vabd.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin("vabd.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin("vabd.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin("vabd.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + + printf("---- VPADD (fp) ----\n"); + TESTINSN_bin("vpadd.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin("vpadd.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin("vpadd.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin("vpadd.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin("vpadd.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin("vpadd.f32 d3, d4, d5", d3, d4, i32, f2u(24), d5, i32, f2u(1346)); + TESTINSN_bin("vpadd.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(1089)); + TESTINSN_bin("vpadd.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin("vpadd.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin("vpadd.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin("vpadd.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin("vpadd.f32 d10, d11, d2", d10, d11, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin("vpadd.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin("vpadd.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin("vpadd.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin("vpadd.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin("vpadd.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin("vpadd.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vpadd.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VCVT (integer <-> fp) ----\n"); + TESTINSN_un("vcvt.u32.f32 d0, d1", d0, d1, i32, f2u(3.2)); + TESTINSN_un("vcvt.u32.f32 d10, d11", d10, d11, i32, f2u(3e22)); + TESTINSN_un("vcvt.u32.f32 d15, d4", d15, d4, i32, f2u(3e9)); + TESTINSN_un("vcvt.u32.f32 d15, d4", d15, d4, i32, f2u(-0.5)); + TESTINSN_un("vcvt.u32.f32 d15, d4", d15, d4, i32, f2u(-7.1)); + TESTINSN_un("vcvt.u32.f32 d12, d8", d12, d8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vcvt.u32.f32 d12, d8", d12, d8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vcvt.s32.f32 d0, d1", d0, d1, i32, f2u(3.2)); + TESTINSN_un("vcvt.s32.f32 d20, d21", d20, d21, i32, f2u(3e22)); + TESTINSN_un("vcvt.s32.f32 d15, d4", d15, d4, i32, f2u(3e9)); + TESTINSN_un("vcvt.s32.f32 d15, d4", d15, d4, i32, f2u(-0.5)); + TESTINSN_un("vcvt.s32.f32 d15, d4", d15, d4, i32, f2u(-7.1)); + TESTINSN_un("vcvt.s32.f32 d12, d8", d12, d8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vcvt.s32.f32 d12, d8", d12, d8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vcvt.f32.u32 d0, d1", d0, d1, i32, 7); + TESTINSN_un("vcvt.f32.u32 d10, d11", d10, d11, i32, 1 << 31); + TESTINSN_un("vcvt.f32.u32 d0, d1", d0, d1, i32, (1U << 31) + 1); + TESTINSN_un("vcvt.f32.u32 d24, d26", d24, d26, i32, (1U << 31) - 1); + TESTINSN_un("vcvt.f32.u32 d0, d14", d0, d14, i32, 0x30a0bcef); + TESTINSN_un("vcvt.f32.s32 d0, d1", d0, d1, i32, 7); + TESTINSN_un("vcvt.f32.s32 d30, d31", d30, d31, i32, 1 << 31); + TESTINSN_un("vcvt.f32.s32 d0, d1", d0, d1, i32, (1U << 31) + 1); + TESTINSN_un("vcvt.f32.s32 d0, d1", d0, d1, i32, (1U << 31) - 1); + TESTINSN_un("vcvt.u32.f32 d0, d1", d0, d1, i32, f2u(NAN)); + TESTINSN_un("vcvt.u32.f32 d0, d1", d0, d1, i32, f2u(0.0)); + TESTINSN_un("vcvt.u32.f32 d0, d1", d0, d1, i32, f2u(INFINITY)); + TESTINSN_un("vcvt.u32.f32 d0, d1", d0, d1, i32, f2u(-INFINITY)); + TESTINSN_un("vcvt.s32.f32 d0, d1", d0, d1, i32, f2u(NAN)); + TESTINSN_un("vcvt.s32.f32 d0, d1", d0, d1, i32, f2u(0.0)); + TESTINSN_un("vcvt.s32.f32 d0, d1", d0, d1, i32, f2u(INFINITY)); + TESTINSN_un("vcvt.s32.f32 d0, d1", d0, d1, i32, f2u(-INFINITY)); + + printf("---- VCVT (fixed <-> fp) ----\n"); + TESTINSN_un("vcvt.u32.f32 d0, d1, #3", d0, d1, i32, f2u(3.2)); + TESTINSN_un("vcvt.u32.f32 d10, d11, #1", d10, d11, i32, f2u(3e22)); + TESTINSN_un("vcvt.u32.f32 d15, d4, #32", d15, d4, i32, f2u(3e9)); + TESTINSN_un("vcvt.u32.f32 d15, d4, #7", d15, d4, i32, f2u(-0.5)); + TESTINSN_un("vcvt.u32.f32 d15, d4, #4", d15, d4, i32, f2u(-7.1)); + TESTINSN_un("vcvt.u32.f32 d12, d8, #3", d12, d8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vcvt.u32.f32 d12, d8, #3", d12, d8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vcvt.s32.f32 d0, d1, #5", d0, d1, i32, f2u(3.2)); + TESTINSN_un("vcvt.s32.f32 d20, d21, #1", d20, d21, i32, f2u(3e22)); + TESTINSN_un("vcvt.s32.f32 d15, d4, #8", d15, d4, i32, f2u(3e9)); + TESTINSN_un("vcvt.s32.f32 d15, d4, #2", d15, d4, i32, f2u(-0.5)); + TESTINSN_un("vcvt.s32.f32 d15, d4, #1", d15, d4, i32, f2u(-7.1)); + TESTINSN_un("vcvt.s32.f32 d12, d8, #2", d12, d8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vcvt.s32.f32 d12, d8, #2", d12, d8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vcvt.f32.u32 d0, d1, #5", d0, d1, i32, 7); + TESTINSN_un("vcvt.f32.u32 d10, d11, #9", d10, d11, i32, 1 << 31); + TESTINSN_un("vcvt.f32.u32 d0, d1, #4", d0, d1, i32, (1U << 31) + 1); + TESTINSN_un("vcvt.f32.u32 d24, d26, #6", d24, d26, i32, (1U << 31) - 1); + TESTINSN_un("vcvt.f32.u32 d0, d14, #5", d0, d14, i32, 0x30a0bcef); + TESTINSN_un("vcvt.f32.s32 d0, d1, #12", d0, d1, i32, 7); + TESTINSN_un("vcvt.f32.s32 d30, d31, #8", d30, d31, i32, 1 << 31); + TESTINSN_un("vcvt.f32.s32 d0, d1, #1", d0, d1, i32, (1U << 31) + 1); + TESTINSN_un("vcvt.f32.s32 d0, d1, #6", d0, d1, i32, (1U << 31) - 1); + TESTINSN_un("vcvt.f32.s32 d0, d14, #2", d0, d14, i32, 0x30a0bcef); + TESTINSN_un("vcvt.u32.f32 d0, d1, #3", d0, d1, i32, f2u(NAN)); + TESTINSN_un("vcvt.u32.f32 d0, d1, #3", d0, d1, i32, f2u(0.0)); + TESTINSN_un("vcvt.u32.f32 d0, d1, #3", d0, d1, i32, f2u(INFINITY)); + TESTINSN_un("vcvt.u32.f32 d0, d1, #3", d0, d1, i32, f2u(-INFINITY)); + TESTINSN_un("vcvt.s32.f32 d0, d1, #3", d0, d1, i32, f2u(NAN)); + TESTINSN_un("vcvt.s32.f32 d0, d1, #3", d0, d1, i32, f2u(0.0)); + TESTINSN_un("vcvt.s32.f32 d0, d1, #3", d0, d1, i32, f2u(INFINITY)); + TESTINSN_un("vcvt.s32.f32 d0, d1, #3", d0, d1, i32, f2u(-INFINITY)); + + printf("---- VMAX (fp) ----\n"); + TESTINSN_bin("vmax.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin("vmax.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin("vmax.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin("vmax.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin("vmax.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin("vmax.f32 d3, d4, d5", d3, d4, i32, f2u(24.87556), d5, i32, f2u(1346.0004)); + TESTINSN_bin("vmax.f32 d10, d11, d2", d10, d11, i32, f2u(48755.7), d2, i32, f2u(1089.2)); + TESTINSN_bin("vmax.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin("vmax.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin("vmax.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin("vmax.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin("vmax.f32 d10, d11, d2", d10, d11, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin("vmax.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin("vmax.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin("vmax.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin("vmax.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin("vmax.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin("vmax.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(0), d2, i32, f2u(0)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(1.0/1024.0), d2, i32, f2u(-1.0/1024.0)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(-1.0/1024.0), d2, i32, f2u(1.0/1024.0)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(2342+1.0/1024.0), d2, i32, f2u(2342-1.0/1024.0)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(-2342+1.0/1024.0), d2, i32, f2u(-2342-1.0/1024.0)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(89276+1.0/1024.0), d2, i32, f2u(98276+1.0/1024.0)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vmax.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VMIN (fp) ----\n"); + TESTINSN_bin("vmin.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin("vmin.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin("vmin.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin("vmin.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin("vmin.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin("vmin.f32 d3, d4, d5", d3, d4, i32, f2u(24.87556), d5, i32, f2u(1346.0004)); + TESTINSN_bin("vmin.f32 d10, d11, d2", d10, d11, i32, f2u(48755.7), d2, i32, f2u(1089.2)); + TESTINSN_bin("vmin.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin("vmin.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin("vmin.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin("vmin.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin("vmin.f32 d10, d11, d2", d10, d11, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin("vmin.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin("vmin.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin("vmin.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin("vmin.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin("vmin.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin("vmin.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(0), d2, i32, f2u(0)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(1.0/1024.0), d2, i32, f2u(-1.0/1024.0)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(-1.0/1024.0), d2, i32, f2u(1.0/1024.0)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(2342+1.0/1024.0), d2, i32, f2u(2342-1.0/1024.0)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(-2342+1.0/1024.0), d2, i32, f2u(-2342-1.0/1024.0)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(89276+1.0/1024.0), d2, i32, f2u(98276+1.0/1024.0)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vmin.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VPMAX (fp) ----\n"); + TESTINSN_bin("vpmax.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin("vpmax.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin("vpmax.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin("vpmax.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin("vpmax.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin("vpmax.f32 d3, d4, d5", d3, d4, i32, f2u(24.87556), d5, i32, f2u(1346.0004)); + TESTINSN_bin("vpmax.f32 d10, d11, d2", d10, d11, i32, f2u(48755.7), d2, i32, f2u(1089.2)); + TESTINSN_bin("vpmax.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin("vpmax.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin("vpmax.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin("vpmax.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin("vpmax.f32 d10, d11, d2", d10, d11, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin("vpmax.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin("vpmax.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin("vpmax.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin("vpmax.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin("vpmax.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin("vpmax.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(0), d2, i32, f2u(0)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(1.0/1024.0), d2, i32, f2u(-1.0/1024.0)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(-1.0/1024.0), d2, i32, f2u(1.0/1024.0)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(2342+1.0/1024.0), d2, i32, f2u(2342-1.0/1024.0)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(-2342+1.0/1024.0), d2, i32, f2u(-2342-1.0/1024.0)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(89276+1.0/1024.0), d2, i32, f2u(98276+1.0/1024.0)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vpmax.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VPMIN (fp) ----\n"); + TESTINSN_bin("vpmin.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin("vpmin.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin("vpmin.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin("vpmin.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin("vpmin.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin("vpmin.f32 d3, d4, d5", d3, d4, i32, f2u(24.87556), d5, i32, f2u(1346.0004)); + TESTINSN_bin("vpmin.f32 d10, d11, d2", d10, d11, i32, f2u(48755.7), d2, i32, f2u(1089.2)); + TESTINSN_bin("vpmin.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin("vpmin.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin("vpmin.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin("vpmin.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin("vpmin.f32 d10, d11, d2", d10, d11, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin("vpmin.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin("vpmin.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin("vpmin.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin("vpmin.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin("vpmin.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin("vpmin.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(0), d2, i32, f2u(0)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(1.0/1024.0), d2, i32, f2u(-1.0/1024.0)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(-1.0/1024.0), d2, i32, f2u(1.0/1024.0)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(2342+1.0/1024.0), d2, i32, f2u(2342-1.0/1024.0)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(-2342+1.0/1024.0), d2, i32, f2u(-2342-1.0/1024.0)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(89276+1.0/1024.0), d2, i32, f2u(98276+1.0/1024.0)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vpmin.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VRECPE ----\n"); + TESTINSN_un("vrecpe.u32 d0, d1", d0, d1, i32, f2u(3.2)); + TESTINSN_un("vrecpe.u32 d0, d1", d0, d1, i32, f2u(-653.2)); + TESTINSN_un("vrecpe.u32 d10, d11", d10, d11, i32, f2u(3e22)); + TESTINSN_un("vrecpe.u32 d15, d4", d15, d4, i32, f2u(3e9)); + TESTINSN_un("vrecpe.u32 d15, d4", d15, d4, i32, f2u(-0.5)); + TESTINSN_un("vrecpe.u32 d15, d4", d15, d4, i32, f2u(-7.1)); + TESTINSN_un("vrecpe.u32 d12, d8", d12, d8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vrecpe.u32 d12, d8", d12, d8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vrecpe.u32 d0, d1", d0, d1, i32, f2u(3.2)); + TESTINSN_un("vrecpe.u32 d10, d11", d10, d11, i32, f2u(3e22)); + TESTINSN_un("vrecpe.u32 d15, d4", d15, d4, i32, f2u(3e9)); + TESTINSN_un("vrecpe.f32 d15, d4", d15, d4, i32, f2u(-0.5)); + TESTINSN_un("vrecpe.f32 d15, d4", d15, d4, i32, f2u(-7.1)); + TESTINSN_un("vrecpe.f32 d12, d8", d12, d8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vrecpe.f32 d12, d8", d12, d8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vrecpe.f32 d0, d1", d0, d1, i32, 7); + TESTINSN_un("vrecpe.f32 d10, d11", d10, d11, i32, 1 << 31); + TESTINSN_un("vrecpe.f32 d0, d1", d0, d1, i32, (1U << 31) + 1); + TESTINSN_un("vrecpe.f32 d0, d1", d0, d1, i32, (1U << 31) - 1); + TESTINSN_un("vrecpe.f32 d0, d14", d0, d14, i32, 0x30a0bcef); + TESTINSN_un("vrecpe.f32 d0, d1", d0, d1, i32, 7); + TESTINSN_un("vrecpe.f32 d10, d11", d10, d11, i32, 1 << 31); + TESTINSN_un("vrecpe.f32 d0, d1", d0, d1, i32, (1U << 31) + 1); + TESTINSN_un("vrecpe.f32 d0, d1", d0, d1, i32, (1U << 31) - 1); + TESTINSN_un("vrecpe.f32 d0, d14", d0, d14, i32, 0x30a0bcef); + TESTINSN_un("vrecpe.f32 d0, d1", d0, d1, i32, f2u(NAN)); + TESTINSN_un("vrecpe.f32 d0, d1", d0, d1, i32, f2u(0.0)); + TESTINSN_un("vrecpe.f32 d0, d1", d0, d1, i32, f2u(INFINITY)); + TESTINSN_un("vrecpe.f32 d0, d1", d0, d1, i32, f2u(-INFINITY)); + + printf("---- VRECPS ----\n"); + TESTINSN_bin("vrecps.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin("vrecps.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin("vrecps.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin("vrecps.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin("vrecps.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin("vrecps.f32 d3, d4, d5", d3, d4, i32, f2u(24), d5, i32, f2u(1346)); + TESTINSN_bin("vrecps.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(1089)); + TESTINSN_bin("vrecps.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin("vrecps.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin("vrecps.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin("vrecps.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin("vrecps.f32 d10, d11, d2", d10, d11, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin("vrecps.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin("vrecps.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin("vrecps.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin("vrecps.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin("vrecps.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin("vrecps.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vrecps.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VABS (fp) ----\n"); + TESTINSN_un("vabs.f32 d0, d1", d0, d1, i32, f2u(3.2)); + TESTINSN_un("vabs.f32 d10, d11", d10, d11, i32, f2u(3e22)); + TESTINSN_un("vabs.f32 d15, d4", d15, d4, i32, f2u(3e9)); + TESTINSN_un("vabs.f32 d15, d4", d15, d4, i32, f2u(-0.5)); + TESTINSN_un("vabs.f32 d15, d4", d15, d4, i32, f2u(-7.1)); + TESTINSN_un("vabs.f32 d12, d8", d12, d8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vabs.f32 d12, d8", d12, d8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vabs.f32 d0, d1", d0, d1, i32, f2u(3.2)); + TESTINSN_un("vabs.f32 d10, d11", d10, d11, i32, f2u(3e22)); + TESTINSN_un("vabs.f32 d15, d4", d15, d4, i32, f2u(3e9)); + TESTINSN_un("vabs.f32 d15, d4", d15, d4, i32, f2u(-0.5)); + TESTINSN_un("vabs.f32 d15, d4", d15, d4, i32, f2u(-7.1)); + TESTINSN_un("vabs.f32 d12, d8", d12, d8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vabs.f32 d12, d8", d12, d8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vabs.f32 d0, d1", d0, d1, i32, 7); + TESTINSN_un("vabs.f32 d10, d11", d10, d11, i32, 1 << 31); + TESTINSN_un("vabs.f32 d0, d1", d0, d1, i32, (1U << 31) + 1); + TESTINSN_un("vabs.f32 d0, d1", d0, d1, i32, (1U << 31) - 1); + TESTINSN_un("vabs.f32 d0, d14", d0, d14, i32, 0x30a0bcef); + TESTINSN_un("vabs.f32 d0, d1", d0, d1, i32, 7); + TESTINSN_un("vabs.f32 d10, d11", d10, d11, i32, 1 << 31); + TESTINSN_un("vabs.f32 d0, d1", d0, d1, i32, (1U << 31) + 1); + TESTINSN_un("vabs.f32 d0, d1", d0, d1, i32, (1U << 31) - 1); + TESTINSN_un("vabs.f32 d0, d14", d0, d14, i32, 0x30a0bcef); + TESTINSN_un("vabs.f32 d0, d1", d0, d1, i32, f2u(NAN)); + TESTINSN_un("vabs.f32 d0, d1", d0, d1, i32, f2u(0.0)); + TESTINSN_un("vabs.f32 d0, d1", d0, d1, i32, f2u(INFINITY)); + TESTINSN_un("vabs.f32 d0, d1", d0, d1, i32, f2u(-INFINITY)); + + printf("---- VCGT (fp) ----\n"); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(0.5), d2, i32, f2u(-0.5)); + TESTINSN_bin("vcgt.f32 d2, d15, d12", d2, d15, i32, f2u(-0.53), d12, i32, f2u(0.52)); + TESTINSN_bin("vcgt.f32 d15, d7, d8", d15, d7, i32, f2u(231.45), d7, i32, f2u(231.45)); + TESTINSN_bin("vcgt.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin("vcgt.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin("vcgt.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin("vcgt.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin("vcgt.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin("vcgt.f32 d3, d4, d5", d3, d4, i32, f2u(24.87556), d5, i32, f2u(1346.0004)); + TESTINSN_bin("vcgt.f32 d10, d31, d2", d10, d31, i32, f2u(48755.7), d2, i32, f2u(1089.2)); + TESTINSN_bin("vcgt.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin("vcgt.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin("vcgt.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin("vcgt.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin("vcgt.f32 d20, d21, d2", d20, d21, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin("vcgt.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin("vcgt.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin("vcgt.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin("vcgt.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin("vcgt.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin("vcgt.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(0), d2, i32, f2u(0)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(1.0/1024.0), d2, i32, f2u(-1.0/1024.0)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(-1.0/1024.0), d2, i32, f2u(1.0/1024.0)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(2342+1.0/1024.0), d2, i32, f2u(2342-1.0/1024.0)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(-2342+1.0/1024.0), d2, i32, f2u(-2342-1.0/1024.0)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(89276+1.0/1024.0), d2, i32, f2u(98276+1.0/1024.0)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vcgt.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VCGE (fp) ----\n"); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(0.5), d2, i32, f2u(-0.5)); + TESTINSN_bin("vcge.f32 d2, d15, d12", d2, d15, i32, f2u(-0.53), d12, i32, f2u(0.52)); + TESTINSN_bin("vcge.f32 d15, d7, d8", d15, d7, i32, f2u(231.45), d7, i32, f2u(231.45)); + TESTINSN_bin("vcge.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin("vcge.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin("vcge.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin("vcge.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin("vcge.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin("vcge.f32 d3, d4, d5", d3, d4, i32, f2u(24.87556), d5, i32, f2u(1346.0004)); + TESTINSN_bin("vcge.f32 d10, d31, d2", d10, d31, i32, f2u(48755.7), d2, i32, f2u(1089.2)); + TESTINSN_bin("vcge.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin("vcge.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin("vcge.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin("vcge.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin("vcge.f32 d20, d21, d2", d20, d21, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin("vcge.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin("vcge.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin("vcge.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin("vcge.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin("vcge.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin("vcge.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(0), d2, i32, f2u(0)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(1.0/1024.0), d2, i32, f2u(-1.0/1024.0)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(-1.0/1024.0), d2, i32, f2u(1.0/1024.0)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(2342+1.0/1024.0), d2, i32, f2u(2342-1.0/1024.0)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(-2342+1.0/1024.0), d2, i32, f2u(-2342-1.0/1024.0)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(89276+1.0/1024.0), d2, i32, f2u(98276+1.0/1024.0)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vcge.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VACGT (fp) ----\n"); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(0.5), d2, i32, f2u(-0.5)); + TESTINSN_bin("vacgt.f32 d2, d15, d12", d2, d15, i32, f2u(-0.53), d12, i32, f2u(0.52)); + TESTINSN_bin("vacgt.f32 d15, d7, d8", d15, d7, i32, f2u(231.45), d7, i32, f2u(231.45)); + TESTINSN_bin("vacgt.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin("vacgt.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin("vacgt.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin("vacgt.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin("vacgt.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin("vacgt.f32 d3, d4, d5", d3, d4, i32, f2u(24.87556), d5, i32, f2u(1346.0004)); + TESTINSN_bin("vacgt.f32 d10, d31, d2", d10, d31, i32, f2u(48755.7), d2, i32, f2u(1089.2)); + TESTINSN_bin("vacgt.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin("vacgt.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin("vacgt.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin("vacgt.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin("vacgt.f32 d20, d21, d2", d20, d21, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin("vacgt.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin("vacgt.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin("vacgt.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin("vacgt.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin("vacgt.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin("vacgt.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(0), d2, i32, f2u(0)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(1.0/1024.0), d2, i32, f2u(-1.0/1024.0)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(-1.0/1024.0), d2, i32, f2u(1.0/1024.0)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(2342+1.0/1024.0), d2, i32, f2u(2342-1.0/1024.0)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(-2342+1.0/1024.0), d2, i32, f2u(-2342-1.0/1024.0)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(89276+1.0/1024.0), d2, i32, f2u(98276+1.0/1024.0)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vacgt.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VACGE (fp) ----\n"); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(0.5), d2, i32, f2u(-0.5)); + TESTINSN_bin("vacge.f32 d2, d15, d12", d2, d15, i32, f2u(-0.53), d12, i32, f2u(0.52)); + TESTINSN_bin("vacge.f32 d15, d7, d8", d15, d7, i32, f2u(231.45), d7, i32, f2u(231.45)); + TESTINSN_bin("vacge.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin("vacge.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin("vacge.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin("vacge.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin("vacge.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin("vacge.f32 d3, d4, d5", d3, d4, i32, f2u(24.87556), d5, i32, f2u(1346.0004)); + TESTINSN_bin("vacge.f32 d10, d31, d2", d10, d31, i32, f2u(48755.7), d2, i32, f2u(1089.2)); + TESTINSN_bin("vacge.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin("vacge.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin("vacge.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin("vacge.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin("vacge.f32 d20, d21, d2", d20, d21, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin("vacge.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin("vacge.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin("vacge.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin("vacge.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin("vacge.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin("vacge.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(0), d2, i32, f2u(0)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(1.0/1024.0), d2, i32, f2u(-1.0/1024.0)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(-1.0/1024.0), d2, i32, f2u(1.0/1024.0)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(2342+1.0/1024.0), d2, i32, f2u(2342-1.0/1024.0)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(-2342+1.0/1024.0), d2, i32, f2u(-2342-1.0/1024.0)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(89276+1.0/1024.0), d2, i32, f2u(98276+1.0/1024.0)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vacge.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VCEQ (fp) ----\n"); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(0.5), d2, i32, f2u(-0.5)); + TESTINSN_bin("vceq.f32 d2, d15, d12", d2, d15, i32, f2u(-0.53), d12, i32, f2u(0.52)); + TESTINSN_bin("vceq.f32 d15, d7, d8", d15, d7, i32, f2u(231.45), d7, i32, f2u(231.45)); + TESTINSN_bin("vceq.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin("vceq.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin("vceq.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin("vceq.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin("vceq.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin("vceq.f32 d3, d4, d5", d3, d4, i32, f2u(24.87556), d5, i32, f2u(1346.0004)); + TESTINSN_bin("vceq.f32 d10, d31, d2", d10, d31, i32, f2u(48755.7), d2, i32, f2u(1089.2)); + TESTINSN_bin("vceq.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin("vceq.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin("vceq.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin("vceq.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin("vceq.f32 d20, d21, d2", d20, d21, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin("vceq.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin("vceq.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin("vceq.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin("vceq.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin("vceq.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin("vceq.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(0), d2, i32, f2u(0)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(1.0/1024.0), d2, i32, f2u(-1.0/1024.0)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(-1.0/1024.0), d2, i32, f2u(1.0/1024.0)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(2342+1.0/1024.0), d2, i32, f2u(2342-1.0/1024.0)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(-2342+1.0/1024.0), d2, i32, f2u(-2342-1.0/1024.0)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(89276+1.0/1024.0), d2, i32, f2u(98276+1.0/1024.0)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vceq.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VCEQ (fp) #0 ----\n"); + TESTINSN_un("vceq.f32 d0, d1, #0", d0, d1, i32, 0x01000000); + TESTINSN_un("vceq.f32 d0, d1, #0", d0, d1, i32, 0x1); + TESTINSN_un("vceq.f32 d2, d1, #0", d2, d1, i32, 1 << 31); + TESTINSN_un("vceq.f32 d2, d1, #0", d2, d1, i32, f2u(23.04)); + TESTINSN_un("vceq.f32 d2, d31, #0", d2, d31, i32, f2u(-23.04)); + TESTINSN_un("vceq.f32 d30, d15, #0", d30, d15, i32, 0x0); + TESTINSN_un("vceq.f32 d0, d1, #0", d0, d1, i32, f2u(NAN)); + TESTINSN_un("vceq.f32 d0, d1, #0", d0, d1, i32, f2u(0.0)); + TESTINSN_un("vceq.f32 d0, d1, #0", d0, d1, i32, f2u(INFINITY)); + TESTINSN_un("vceq.f32 d0, d1, #0", d0, d1, i32, f2u(-INFINITY)); + + printf("---- VCGT (fp) #0 ----\n"); + TESTINSN_un("vcgt.f32 d0, d1, #0", d0, d1, i32, 0x01000000); + TESTINSN_un("vcgt.f32 d0, d1, #0", d0, d1, i32, 0x1); + TESTINSN_un("vcgt.f32 d2, d1, #0", d2, d1, i32, 1 << 31); + TESTINSN_un("vcgt.f32 d2, d1, #0", d2, d1, i32, f2u(23.04)); + TESTINSN_un("vcgt.f32 d2, d31, #0", d2, d31, i32, f2u(-23.04)); + TESTINSN_un("vcgt.f32 d30, d15, #0", d30, d15, i32, 0x0); + TESTINSN_un("vcgt.f32 d0, d1, #0", d0, d1, i32, f2u(NAN)); + TESTINSN_un("vcgt.f32 d0, d1, #0", d0, d1, i32, f2u(0.0)); + TESTINSN_un("vcgt.f32 d0, d1, #0", d0, d1, i32, f2u(INFINITY)); + TESTINSN_un("vcgt.f32 d0, d1, #0", d0, d1, i32, f2u(-INFINITY)); + + printf("---- VCLT (fp) #0 ----\n"); + TESTINSN_un("vclt.f32 d0, d1, #0", d0, d1, i32, 0x01000000); + TESTINSN_un("vclt.f32 d0, d1, #0", d0, d1, i32, 0x1); + TESTINSN_un("vclt.f32 d2, d1, #0", d2, d1, i32, 1 << 31); + TESTINSN_un("vclt.f32 d2, d1, #0", d2, d1, i32, f2u(23.04)); + TESTINSN_un("vclt.f32 d2, d31, #0", d2, d31, i32, f2u(-23.04)); + TESTINSN_un("vclt.f32 d30, d15, #0", d30, d15, i32, 0x0); + TESTINSN_un("vclt.f32 d0, d1, #0", d0, d1, i32, f2u(NAN)); + TESTINSN_un("vclt.f32 d0, d1, #0", d0, d1, i32, f2u(0.0)); + TESTINSN_un("vclt.f32 d0, d1, #0", d0, d1, i32, f2u(INFINITY)); + TESTINSN_un("vclt.f32 d0, d1, #0", d0, d1, i32, f2u(-INFINITY)); + + printf("---- VCGE (fp) #0 ----\n"); + TESTINSN_un("vcge.f32 d0, d1, #0", d0, d1, i32, 0x01000000); + TESTINSN_un("vcge.f32 d0, d1, #0", d0, d1, i32, 0x1); + TESTINSN_un("vcge.f32 d2, d1, #0", d2, d1, i32, 1 << 31); + TESTINSN_un("vcge.f32 d2, d1, #0", d2, d1, i32, f2u(23.04)); + TESTINSN_un("vcge.f32 d2, d31, #0", d2, d31, i32, f2u(-23.04)); + TESTINSN_un("vcge.f32 d30, d15, #0", d30, d15, i32, 0x0); + TESTINSN_un("vcle.f32 d0, d1, #0", d0, d1, i32, f2u(NAN)); + TESTINSN_un("vcle.f32 d0, d1, #0", d0, d1, i32, f2u(0.0)); + TESTINSN_un("vcle.f32 d0, d1, #0", d0, d1, i32, f2u(INFINITY)); + TESTINSN_un("vcle.f32 d0, d1, #0", d0, d1, i32, f2u(-INFINITY)); + + printf("---- VCLE (fp) #0 ----\n"); + TESTINSN_un("vcle.f32 d0, d1, #0", d0, d1, i32, 0x01000000); + TESTINSN_un("vcle.f32 d0, d1, #0", d0, d1, i32, 0x1); + TESTINSN_un("vcle.f32 d2, d1, #0", d2, d1, i32, 1 << 31); + TESTINSN_un("vcle.f32 d2, d1, #0", d2, d1, i32, f2u(23.04)); + TESTINSN_un("vcle.f32 d2, d31, #0", d2, d31, i32, f2u(-23.04)); + TESTINSN_un("vcle.f32 d30, d15, #0", d30, d15, i32, 0x0); + TESTINSN_un("vcle.f32 d0, d1, #0", d0, d1, i32, f2u(NAN)); + TESTINSN_un("vcle.f32 d0, d1, #0", d0, d1, i32, f2u(0.0)); + TESTINSN_un("vcle.f32 d0, d1, #0", d0, d1, i32, f2u(INFINITY)); + TESTINSN_un("vcle.f32 d0, d1, #0", d0, d1, i32, f2u(-INFINITY)); + + printf("---- VNEG (fp) ----\n"); + TESTINSN_un("vneg.f32 d0, d1", d0, d1, i32, 0x01000000); + TESTINSN_un("vneg.f32 d0, d1", d0, d1, i32, 0x1); + TESTINSN_un("vneg.f32 d2, d1", d2, d1, i32, 1 << 31); + TESTINSN_un("vneg.f32 d2, d1", d2, d1, i32, f2u(23.04)); + TESTINSN_un("vneg.f32 d2, d31", d2, d31, i32, f2u(-23.04)); + TESTINSN_un("vneg.f32 d30, d15", d30, d15, i32, 0x0); + TESTINSN_un("vneg.f32 d0, d1", d0, d1, i32, f2u(NAN)); + TESTINSN_un("vneg.f32 d0, d1", d0, d1, i32, f2u(0.0)); + TESTINSN_un("vneg.f32 d0, d1", d0, d1, i32, f2u(INFINITY)); + TESTINSN_un("vneg.f32 d0, d1", d0, d1, i32, f2u(-INFINITY)); + + printf("---- VRSQRTS ----\n"); + TESTINSN_bin("vrsqrts.f32 d0, d5, d2", d0, d5, i32, f2u(23.04), d2, i32, f2u(-45.5687)); + TESTINSN_bin("vrsqrts.f32 d3, d4, d5", d3, d4, i32, f2u(-347856.475), d5, i32, f2u(1346)); + TESTINSN_bin("vrsqrts.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(-45786.476)); + TESTINSN_bin("vrsqrts.f32 d9, d5, d7", d9, d5, i32, f2u(95867.76), d7, i32, f2u(17065)); + TESTINSN_bin("vrsqrts.f32 d0, d5, d2", d0, d5, i32, f2u(-45667.24), d2, i32, f2u(-248562.76)); + TESTINSN_bin("vrsqrts.f32 d3, d4, d5", d3, d4, i32, f2u(24), d5, i32, f2u(1346)); + TESTINSN_bin("vrsqrts.f32 d10, d11, d2", d10, d11, i32, f2u(48755), d2, i32, f2u(1089)); + TESTINSN_bin("vrsqrts.f32 d9, d5, d7", d9, d5, i32, f2u(214), d7, i32, f2u(1752065)); + TESTINSN_bin("vrsqrts.f32 d0, d11, d12", d0, d11, i32, f2u(356047.56), d12, i32, f2u(5867.009)); + TESTINSN_bin("vrsqrts.f32 d7, d1, d6", d7, d1, i32, f2u(34.00046), d6, i32, f2u(0.0024575)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(2754), d2, i32, f2u(107)); + TESTINSN_bin("vrsqrts.f32 d3, d4, d5", d3, d4, i32, f2u(874), d5, i32, f2u(1384.6)); + TESTINSN_bin("vrsqrts.f32 d10, d11, d2", d10, d11, i32, f2u(487.587), d2, i32, f2u(109)); + TESTINSN_bin("vrsqrts.f32 d9, d5, d7", d9, d5, i32, f2u(2146), d7, i32, f2u(1752)); + TESTINSN_bin("vrsqrts.f32 d0, d11, d12", d0, d11, i32, f2u(-56.25), d12, i32, f2u(-5786.47)); + TESTINSN_bin("vrsqrts.f32 d7, d1, d6", d7, d1, i32, f2u(456.2489562), d6, i32, f2u(-7.2945676)); + TESTINSN_bin("vrsqrts.f32 d0, d5, d2", d0, d5, i32, f2u(532.987), d2, i32, f2u(-0.0045876)); + TESTINSN_bin("vrsqrts.f32 d10, d13, d15", d10, d13, i32, f2u(-485.2457), d15, i32, f2u(-567.245)); + TESTINSN_bin("vrsqrts.f32 d10, d13, d15", d10, d13, i32, f2u(278456.45), d15, i32, f2u(8756.0076)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(876988654), d2, i32, f2u(1224808797)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(NAN)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(1.0)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(0.0)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(NAN), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(NAN)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(1.0)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(0.0)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(0.0), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(INFINITY), d2, i32, f2u(-INFINITY)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(NAN)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(1.0)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(0.0)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(INFINITY)); + TESTINSN_bin("vrsqrts.f32 d0, d1, d2", d0, d1, i32, f2u(-INFINITY), d2, i32, f2u(-INFINITY)); + + printf("---- VRSQRTE (fp) ----\n"); + TESTINSN_un("vrsqrte.f32 d0, d1", d0, d1, i32, f2u(3.2)); + TESTINSN_un("vrsqrte.f32 d10, d11", d10, d11, i32, f2u(3e22)); + TESTINSN_un("vrsqrte.f32 d15, d4", d15, d4, i32, f2u(3e9)); + TESTINSN_un("vrsqrte.f32 d15, d4", d15, d4, i32, f2u(-0.5)); + TESTINSN_un("vrsqrte.f32 d15, d4", d15, d4, i32, f2u(-7.1)); + TESTINSN_un("vrsqrte.f32 d12, d8", d12, d8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vrsqrte.f32 d12, d8", d12, d8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vrsqrte.f32 d0, d1", d0, d1, i32, f2u(3.2)); + TESTINSN_un("vrsqrte.f32 d10, d11", d10, d11, i32, f2u(3e22)); + TESTINSN_un("vrsqrte.f32 d15, d4", d15, d4, i32, f2u(3e9)); + TESTINSN_un("vrsqrte.f32 d15, d4", d15, d4, i32, f2u(-0.5)); + TESTINSN_un("vrsqrte.f32 d15, d4", d15, d4, i32, f2u(-7.1)); + TESTINSN_un("vrsqrte.f32 d12, d8", d12, d8, i32, f2u(8.0 - 1.0/1024.0)); + TESTINSN_un("vrsqrte.f32 d12, d8", d12, d8, i32, f2u(-8.0 + 1.0/1024.0)); + TESTINSN_un("vrsqrte.f32 d0, d1", d0, d1, i32, 7); + TESTINSN_un("vrsqrte.f32 d10, d11", d10, d11, i32, 1 << 31); + TESTINSN_un("vrsqrte.f32 d0, d1", d0, d1, i32, (1U << 31) + 1); + TESTINSN_un("vrsqrte.f32 d0, d1", d0, d1, i32, (1U << 31) - 1); + TESTINSN_un("vrsqrte.f32 d0, d14", d0, d14, i32, 0x30a0bcef); + TESTINSN_un("vrsqrte.f32 d0, d1", d0, d1, i32, 7); + TESTINSN_un("vrsqrte.f32 d10, d11", d10, d11, i32, 1 << 31); + TESTINSN_un("vrsqrte.f32 d0, d1", d0, d1, i32, (1U << 31) + 1); + TESTINSN_un("vrsqrte.f32 d0, d1", d0, d1, i32, (1U << 31) - 1); + TESTINSN_un("vrsqrte.f32 d0, d14", d0, d14, i32, 0x30a0bcef); + TESTINSN_un("vrsqrte.f32 d0, d1", d0, d1, i32, f2u(NAN)); + TESTINSN_un("vrsqrte.f32 d0, d1", d0, d1, i32, f2u(0.0)); + TESTINSN_un("vrsqrte.f32 d0, d1", d0, d1, i32, f2u(INFINITY)); + TESTINSN_un("vrsqrte.f32 d0, d1", d0, d1, i32, f2u(-INFINITY)); + + return 0; +} diff --git a/none/tests/arm/v6intThumb.c b/none/tests/arm/v6intThumb.c new file mode 100644 index 0000000000..a1961e8b0b --- /dev/null +++ b/none/tests/arm/v6intThumb.c @@ -0,0 +1,5403 @@ + +/* How to compile: + gcc -O -g -Wall -mcpu=cortex-a8 -o testarmv6int testarmv6int.c +*/ + +#include + +static int gen_cvin(cvin) +{ + int r = ((cvin & 2) ? (1<<29) : 0) | ((cvin & 1) ? (1<<28) : 0); + r |= (1 << 31) | (1 << 30); + return r; +} + +/* test macros to generate and output the result of a single instruction */ + + +// 1 registers in the insn, zero args: rD = op() +#define TESTINST1(instruction, RD, cvin) \ +{ \ + unsigned int out; \ + unsigned int cpsr; \ +\ + __asm__ volatile( \ + "msr cpsr_f, %2;" \ + instruction ";" \ + "mov %0," #RD ";" \ + "mrs %1,cpsr;" \ + : "=&r" (out), "=&r" (cpsr) \ + : "r" (gen_cvin(cvin)) \ + : #RD, "cc", "memory" \ + ); \ + printf("%s :: rd 0x%08x, c:v-in %d, cpsr 0x%08x %c%c%c%c\n", \ + instruction, out, \ + cvin, \ + cpsr & 0xffff0000, \ + ((1<<31) & cpsr) ? 'N' : ' ', \ + ((1<<30) & cpsr) ? 'Z' : ' ', \ + ((1<<29) & cpsr) ? 'C' : ' ', \ + ((1<<28) & cpsr) ? 'V' : ' ' \ + ); \ +} + + + +// 1 registers in the insn, one args: rD = op(rD) +#define TESTINST1x(instruction, RDval, RD, cvin) \ +{ \ + unsigned int out; \ + unsigned int cpsr; \ +\ + __asm__ volatile( \ + "msr cpsr_f, %2;" \ + "mov " #RD ",%3;" \ + instruction ";" \ + "mov %0," #RD ";" \ + "mrs %1,cpsr;" \ + : "=&r" (out), "=&r" (cpsr) \ + : "r" (gen_cvin(cvin)), "r"(RDval) \ + : #RD, "cc", "memory" \ + ); \ + printf("%s :: rd 0x%08x, c:v-in %d, cpsr 0x%08x %c%c%c%c\n", \ + instruction, out, \ + cvin, \ + cpsr & 0xffff0000, \ + ((1<<31) & cpsr) ? 'N' : ' ', \ + ((1<<30) & cpsr) ? 'Z' : ' ', \ + ((1<<29) & cpsr) ? 'C' : ' ', \ + ((1<<28) & cpsr) ? 'V' : ' ' \ + ); \ +} + +// 2 registers in the insn, one arg: rD = op(rM) +#define TESTINST2(instruction, RMval, RD, RM, cvin) \ +{ \ + unsigned int out; \ + unsigned int cpsr; \ +\ + __asm__ volatile( \ + "msr cpsr_f, %3;" \ + "mov " #RM ",%2;" \ + /* set #RD to 0x55555555 so we can see which parts get overwritten */ \ + "mov " #RD ", #0x55" "\n\t" \ + "orr " #RD "," #RD "," #RD ", LSL #8" "\n\t" \ + "orr " #RD "," #RD "," #RD ", LSL #16" "\n\t" \ + instruction ";" \ + "mov %0," #RD ";" \ + "mrs %1,cpsr;" \ + : "=&r" (out), "=&r" (cpsr) \ + : "r" (RMval), "r" (gen_cvin(cvin)) \ + : #RD, #RM, "cc", "memory" \ + ); \ + printf("%s :: rd 0x%08x rm 0x%08x, c:v-in %d, cpsr 0x%08x %c%c%c%c\n", \ + instruction, out, RMval, \ + cvin, \ + cpsr & 0xffff0000, \ + ((1<<31) & cpsr) ? 'N' : ' ', \ + ((1<<30) & cpsr) ? 'Z' : ' ', \ + ((1<<29) & cpsr) ? 'C' : ' ', \ + ((1<<28) & cpsr) ? 'V' : ' ' \ + ); \ +} + + +// 2 registers in the insn, two args: rD = op(rD, rM) +#define TESTINST2x(instruction, RDval, RMval, RD, RM, cvin) \ +{ \ + unsigned int out; \ + unsigned int cpsr; \ +\ + __asm__ volatile( \ + "msr cpsr_f, %3;" \ + "mov " #RM ",%2;" \ + "mov " #RD ",%4;" \ + instruction ";" \ + "mov %0," #RD ";" \ + "mrs %1,cpsr;" \ + : "=&r" (out), "=&r" (cpsr) \ + : "r" (RMval), "r" (gen_cvin(cvin)), "r"(RDval) \ + : #RD, #RM, "cc", "memory" \ + ); \ + printf("%s :: rd 0x%08x rm 0x%08x, c:v-in %d, cpsr 0x%08x %c%c%c%c\n", \ + instruction, out, RMval, \ + cvin, \ + cpsr & 0xffff0000, \ + ((1<<31) & cpsr) ? 'N' : ' ', \ + ((1<<30) & cpsr) ? 'Z' : ' ', \ + ((1<<29) & cpsr) ? 'C' : ' ', \ + ((1<<28) & cpsr) ? 'V' : ' ' \ + ); \ +} + + + +#define TESTINST3(instruction, RMval, RNval, RD, RM, RN, cvin) \ +{ \ + unsigned int out; \ + unsigned int cpsr; \ +\ + __asm__ volatile( \ + "msr cpsr_f, %4;" \ + "mov " #RM ",%2;" \ + "mov " #RN ",%3;" \ + instruction ";" \ + "mov %0," #RD ";" \ + "mrs %1,cpsr;" \ + : "=&r" (out), "=&r" (cpsr) \ + : "r" (RMval), "r" (RNval), "r" (gen_cvin(cvin)) \ + : #RD, #RM, #RN, "cc", "memory" \ + ); \ + printf("%s :: rd 0x%08x rm 0x%08x, rn 0x%08x, c:v-in %d, cpsr 0x%08x %c%c%c%c\n", \ + instruction, out, RMval, RNval, \ + cvin, \ + cpsr & 0xffff0000, \ + ((1<<31) & cpsr) ? 'N' : ' ', \ + ((1<<30) & cpsr) ? 'Z' : ' ', \ + ((1<<29) & cpsr) ? 'C' : ' ', \ + ((1<<28) & cpsr) ? 'V' : ' ' \ + ); \ +} + +#define TESTINST4(instruction, RMval, RNval, RSval, RD, RM, RN, RS, cvin) \ +{ \ + unsigned int out; \ + unsigned int cpsr; \ +\ + __asm__ volatile( \ + "msr cpsr_f, %5;" \ + "mov " #RM ",%2;" \ + "mov " #RN ",%3;" \ + "mov " #RS ",%4;" \ + instruction ";" \ + "mov %0," #RD ";" \ + "mrs %1,cpsr;" \ + : "=&r" (out), "=&r" (cpsr) \ + : "r" (RMval), "r" (RNval), "r" (RSval), "r" (gen_cvin(cvin)) \ + : #RD, #RM, #RN, #RS, "cc", "memory" \ + ); \ + printf("%s :: rd 0x%08x rm 0x%08x, rn 0x%08x rs 0x%08x, c:v-in %d, cpsr 0x%08x %c%c%c%c\n", \ + instruction, out, RMval, RNval, RSval, \ + cvin, \ + cpsr & 0xffff0000, \ + ((1<<31) & cpsr) ? 'N' : ' ', \ + ((1<<30) & cpsr) ? 'Z' : ' ', \ + ((1<<29) & cpsr) ? 'C' : ' ', \ + ((1<<28) & cpsr) ? 'V' : ' ' \ + ); \ +} + +#define TESTINST4_2OUT(instruction, RDval, RD2val, RMval, RSval, RD, RD2, RM, RS, cvin) \ +{ \ + unsigned int out; \ + unsigned int out2; \ + unsigned int cpsr; \ +\ + __asm__ volatile( \ + "msr cpsr_f, %7;" \ + "mov " #RD ",%3;" \ + "mov " #RD2 ",%4;" \ + "mov " #RM ",%5;" \ + "mov " #RS ",%6;" \ + instruction ";" \ + "mov %0," #RD ";" \ + "mov %1," #RD2 ";" \ + "mrs %2,cpsr;" \ + : "=&r" (out), "=&r" (out2), "=&r" (cpsr) \ + : "r" (RDval), "r" (RD2val), "r" (RMval), "r" (RSval), "r" (gen_cvin(cvin)) \ + : #RD, #RD2, #RM, #RS, "cc", "memory" \ + ); \ + printf("%s :: rd 0x%08x rd2 0x%08x, rm 0x%08x rs 0x%08x, c:v-in %d, cpsr 0x%08x %c%c%c%c\n", \ + instruction, out, out2, RMval, RSval, \ + cvin, \ + cpsr & 0xffff0000, \ + ((1<<31) & cpsr) ? 'N' : ' ', \ + ((1<<30) & cpsr) ? 'Z' : ' ', \ + ((1<<29) & cpsr) ? 'C' : ' ', \ + ((1<<28) & cpsr) ? 'V' : ' ' \ + ); \ +} + +/* helpers */ +#define NOCARRY { int cv = 0; { +#define TESTCARRY { int cv = 0; for (cv = 0; cv < 4; cv++) { +#define TESTCARRYEND }} + +//////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////// + +static int old_main(void) +{ + + printf("MOV\n"); + TESTINST2("mov r0, r1", 1, r0, r1, 0); + TESTINST2("cpy r0, r1", 1, r0, r1, 0); + TESTINST2("mov r0, #0", 0, r0, r1, 0); + TESTINST2("mov r0, #1", 0, r0, r1, 0); + TESTCARRY + TESTINST2("movs r0, r1", 1, r0, r1, cv); + TESTINST2("movs r0, r1", 0, r0, r1, cv); + TESTINST2("movs r0, r1", 0x80000000, r0, r1, cv); + TESTINST2("movs r0, #0", 0, r0, r1, cv); + TESTINST2("movs r0, #1", 0, r0, r1, cv); + TESTCARRYEND + + printf("MVN\n"); + TESTINST2("mvn r0, r1", 1, r0, r1, 0); + TESTCARRY + TESTINST2("mvns r0, r1", 1, r0, r1, cv); + TESTINST2("mvns r0, r1", 0, r0, r1, cv); + TESTINST2("mvns r0, r1", 0x80000000, r0, r1, cv); + TESTCARRYEND + + printf("ADD\n"); + TESTINST3("adds r0, r1, r2", 0, 0, r0, r1, r2, 0); + TESTINST3("adds r0, r1, r2", 0, 1, r0, r1, r2, 0); + TESTINST3("adds r0, r1, r2", 1, 0, r0, r1, r2, 0); + TESTINST3("adds r0, r1, r2", 1, 1, r0, r1, r2, 0); + TESTINST3("adds r0, r1, r2", 0, -1, r0, r1, r2, 0); + TESTINST3("adds r0, r1, r2", 1, -1, r0, r1, r2, 0); + TESTINST3("adds r0, r1, r2", 0x7fffffff, 1, r0, r1, r2, 0); + TESTINST3("adds r0, r1, r2", 0x80000000, -1, r0, r1, r2, 0); + TESTINST3("adds r0, r1, r2", 0x80000000, 0, r0, r1, r2, 0); + + printf("ADC\n"); + TESTINST3("adcs r0, r1, r2", 0, 0, r0, r1, r2, 0); + TESTINST3("adcs r0, r1, r2", 0, 0, r0, r1, r2, 1); + + printf("LSL\n"); + TESTINST3("lsl r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0); + TESTINST3("lsl r0, r1, r2", 0xffffffff, 1, r0, r1, r2, 0); + TESTINST3("lsl r0, r1, r2", 0xffffffff, 2, r0, r1, r2, 0); + TESTINST3("lsl r0, r1, r2", 0xffffffff, 31, r0, r1, r2, 0); + TESTINST3("lsl r0, r1, r2", 0xffffffff, 32, r0, r1, r2, 0); + TESTINST3("lsl r0, r1, r2", 0xffffffff, 33, r0, r1, r2, 0); + TESTINST3("lsl r0, r1, r2", 0xffffffff, 63, r0, r1, r2, 0); + TESTINST3("lsl r0, r1, r2", 0xffffffff, 64, r0, r1, r2, 0); + TESTINST3("lsl r0, r1, r2", 0xffffffff, 255, r0, r1, r2, 0); + TESTINST3("lsl r0, r1, r2", 0xffffffff, 256, r0, r1, r2, 0); + + TESTINST3("lsl r0, r1, r2", 0x1, 0, r0, r1, r2, 0); + TESTINST3("lsl r0, r1, r2", 0x1, 1, r0, r1, r2, 0); + TESTINST3("lsl r0, r1, r2", 0x1, 31, r0, r1, r2, 0); + TESTINST3("lsl r0, r1, r2", 0x2, 31, r0, r1, r2, 0); + + printf("LSLS\n"); + TESTCARRY + TESTINST3("lsls r0, r1, r2", 0xffffffff, 0, r0, r1, r2, cv); + TESTINST3("lsls r0, r1, r2", 0xffffffff, 1, r0, r1, r2, cv); + TESTINST3("lsls r0, r1, r2", 0xffffffff, 2, r0, r1, r2, cv); + TESTINST3("lsls r0, r1, r2", 0xffffffff, 31, r0, r1, r2, cv); + TESTINST3("lsls r0, r1, r2", 0xffffffff, 32, r0, r1, r2, cv); + TESTINST3("lsls r0, r1, r2", 0xffffffff, 33, r0, r1, r2, cv); + TESTINST3("lsls r0, r1, r2", 0xffffffff, 63, r0, r1, r2, cv); + TESTINST3("lsls r0, r1, r2", 0xffffffff, 64, r0, r1, r2, cv); + TESTINST3("lsls r0, r1, r2", 0xffffffff, 255, r0, r1, r2, cv); + TESTINST3("lsls r0, r1, r2", 0xffffffff, 256, r0, r1, r2, cv); + TESTINST3("lsls r0, r1, r2", 0x1, 0, r0, r1, r2, cv); + TESTINST3("lsls r0, r1, r2", 0x1, 1, r0, r1, r2, cv); + TESTINST3("lsls r0, r1, r2", 0x1, 31, r0, r1, r2, cv); + TESTINST3("lsls r0, r1, r2", 0x2, 31, r0, r1, r2, cv); + TESTCARRYEND + + printf("LSL immediate\n"); + TESTCARRY + TESTINST2("lsl r0, r1, #0", 0xffffffff, r0, r1, cv); + TESTINST2("lsl r0, r1, #1", 0xffffffff, r0, r1, cv); + TESTINST2("lsl r0, r1, #31", 0xffffffff, r0, r1, cv); + TESTINST2("lsl r0, r1, #0", 0x1, r0, r1, cv); + TESTINST2("lsl r0, r1, #1", 0x1, r0, r1, cv); + TESTINST2("lsl r0, r1, #31", 0x1, r0, r1, cv); + TESTINST2("lsl r0, r1, #31", 0x2, r0, r1, cv); + TESTCARRYEND + + printf("LSLS immediate\n"); + TESTCARRY + TESTINST2("lsls r0, r1, #0", 0xffffffff, r0, r1, cv); + TESTINST2("lsls r0, r1, #1", 0xffffffff, r0, r1, cv); + TESTINST2("lsls r0, r1, #31", 0xffffffff, r0, r1, cv); + TESTINST2("lsls r0, r1, #0", 0x1, r0, r1, cv); + TESTINST2("lsls r0, r1, #1", 0x1, r0, r1, cv); + TESTINST2("lsls r0, r1, #31", 0x1, r0, r1, cv); + TESTINST2("lsls r0, r1, #31", 0x2, r0, r1, cv); + TESTCARRYEND + + printf("LSR\n"); + TESTINST3("lsr r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0); + TESTINST3("lsr r0, r1, r2", 0xffffffff, 1, r0, r1, r2, 0); + TESTINST3("lsr r0, r1, r2", 0xffffffff, 2, r0, r1, r2, 0); + TESTINST3("lsr r0, r1, r2", 0xffffffff, 31, r0, r1, r2, 0); + TESTINST3("lsr r0, r1, r2", 0xffffffff, 32, r0, r1, r2, 0); + TESTINST3("lsr r0, r1, r2", 0xffffffff, 33, r0, r1, r2, 0); + TESTINST3("lsr r0, r1, r2", 0xffffffff, 63, r0, r1, r2, 0); + TESTINST3("lsr r0, r1, r2", 0xffffffff, 64, r0, r1, r2, 0); + TESTINST3("lsr r0, r1, r2", 0xffffffff, 255, r0, r1, r2, 0); + TESTINST3("lsr r0, r1, r2", 0xffffffff, 256, r0, r1, r2, 0); + + printf("LSRS\n"); + TESTCARRY + TESTINST3("lsrs r0, r1, r2", 0xffffffff, 0, r0, r1, r2, cv); + TESTINST3("lsrs r0, r1, r2", 0xffffffff, 1, r0, r1, r2, cv); + TESTINST3("lsrs r0, r1, r2", 0xffffffff, 2, r0, r1, r2, cv); + TESTINST3("lsrs r0, r1, r2", 0xffffffff, 31, r0, r1, r2, cv); + TESTINST3("lsrs r0, r1, r2", 0xffffffff, 32, r0, r1, r2, cv); + TESTINST3("lsrs r0, r1, r2", 0xffffffff, 33, r0, r1, r2, cv); + TESTINST3("lsrs r0, r1, r2", 0xffffffff, 63, r0, r1, r2, cv); + TESTINST3("lsrs r0, r1, r2", 0xffffffff, 64, r0, r1, r2, cv); + TESTINST3("lsrs r0, r1, r2", 0xffffffff, 255, r0, r1, r2, cv); + TESTCARRYEND + + printf("LSR immediate\n"); + TESTINST2("lsr r0, r1, #0", 0xffffffff, r0, r1, 0); + TESTINST2("lsr r0, r1, #1", 0xffffffff, r0, r1, 0); + TESTINST2("lsr r0, r1, #31", 0xffffffff, r0, r1, 0); + TESTINST2("lsr r0, r1, #32", 0xffffffff, r0, r1, 0); + TESTINST2("lsr r0, r1, #16", 0x00010000, r0, r1, 0); + TESTINST2("lsr r0, r1, #17", 0x00010000, r0, r1, 0); + TESTINST2("lsr r0, r1, #18", 0x00010000, r0, r1, 0); + + printf("LSRS immediate\n"); + TESTCARRY + TESTINST2("lsrs r0, r1, #0", 0xffffffff, r0, r1, cv); + TESTINST2("lsrs r0, r1, #1", 0xffffffff, r0, r1, cv); + TESTINST2("lsrs r0, r1, #31", 0xffffffff, r0, r1, cv); + TESTINST2("lsrs r0, r1, #32", 0xffffffff, r0, r1, cv); + TESTINST2("lsrs r0, r1, #16", 0x00010000, r0, r1, cv); + TESTINST2("lsrs r0, r1, #17", 0x00010000, r0, r1, cv); + TESTINST2("lsrs r0, r1, #18", 0x00010000, r0, r1, cv); + TESTCARRYEND + + printf("ASR\n"); + TESTCARRY + TESTINST3("asr r0, r1, r2", 0xffffffff, 0, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0xffffffff, 1, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0xffffffff, 2, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0xffffffff, 31, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0xffffffff, 32, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0xffffffff, 33, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0xffffffff, 63, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0xffffffff, 64, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0xffffffff, 255, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0xffffffff, 256, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0x7fffffff, 0, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0x7fffffff, 1, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0x7fffffff, 2, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0x7fffffff, 31, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0x7fffffff, 32, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0x7fffffff, 33, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0x7fffffff, 63, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0x7fffffff, 64, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0x7fffffff, 255, r0, r1, r2, cv); + TESTINST3("asr r0, r1, r2", 0x7fffffff, 256, r0, r1, r2, cv); + TESTCARRYEND + + printf("ASRS\n"); + TESTCARRY + TESTINST3("asrs r0, r1, r2", 0xffffffff, 0, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0xffffffff, 1, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0xffffffff, 2, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0xffffffff, 31, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0xffffffff, 32, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0xffffffff, 33, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0xffffffff, 63, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0xffffffff, 64, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0xffffffff, 255, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0xffffffff, 256, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0x7fffffff, 0, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0x7fffffff, 1, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0x7fffffff, 2, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0x7fffffff, 31, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0x7fffffff, 32, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0x7fffffff, 33, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0x7fffffff, 63, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0x7fffffff, 64, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0x7fffffff, 255, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0x7fffffff, 256, r0, r1, r2, cv); + TESTCARRYEND + + TESTCARRY + TESTINST3("asrs r0, r1, r2", 0x8, 0, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0x8, 1, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0x8, 2, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0x8, 3, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0x8, 4, r0, r1, r2, cv); + TESTINST3("asrs r0, r1, r2", 0x8, 5, r0, r1, r2, cv); + TESTCARRYEND + + TESTINST3("asrs r0, r1, r2", 0x80000001, 1, r0, r1, r2, 0); + TESTINST3("asrs r0, r1, r2", 0x80000001, 2, r0, r1, r2, 0); + + printf("ASR immediate\n"); + TESTINST2("asr r0, r1, #0", 0xffffffff, r0, r1, 0); + TESTINST2("asr r0, r1, #1", 0xffffffff, r0, r1, 0); + TESTINST2("asr r0, r1, #31", 0xffffffff, r0, r1, 0); + TESTINST2("asr r0, r1, #32", 0xffffffff, r0, r1, 0); + TESTINST2("asr r0, r1, #0", 0x7fffffff, r0, r1, 0); + TESTINST2("asr r0, r1, #1", 0x7fffffff, r0, r1, 0); + TESTINST2("asr r0, r1, #31", 0x7fffffff, r0, r1, 0); + TESTINST2("asr r0, r1, #32", 0x7fffffff, r0, r1, 0); + TESTINST2("asr r0, r1, #16", 0x00010000, r0, r1, 0); + TESTINST2("asr r0, r1, #17", 0x00010000, r0, r1, 0); + TESTINST2("asr r0, r1, #18", 0x00010000, r0, r1, 0); + + printf("ASRS immediate\n"); + TESTCARRY + TESTINST2("asrs r0, r1, #0", 0xffffffff, r0, r1, cv); + TESTINST2("asrs r0, r1, #1", 0xffffffff, r0, r1, cv); + TESTINST2("asrs r0, r1, #31", 0xffffffff, r0, r1, cv); + TESTINST2("asrs r0, r1, #32", 0xffffffff, r0, r1, cv); + TESTINST2("asrs r0, r1, #0", 0x7fffffff, r0, r1, cv); + TESTINST2("asrs r0, r1, #1", 0x7fffffff, r0, r1, cv); + TESTINST2("asrs r0, r1, #31", 0x7fffffff, r0, r1, cv); + TESTINST2("asrs r0, r1, #32", 0x7fffffff, r0, r1, cv); + TESTINST2("asrs r0, r1, #16", 0x00010000, r0, r1, cv); + TESTINST2("asrs r0, r1, #17", 0x00010000, r0, r1, cv); + TESTINST2("asrs r0, r1, #18", 0x00010000, r0, r1, cv); + TESTCARRYEND + +#if 0 + printf("ROR\n"); + TESTCARRY + TESTINST3("ror r0, r1, r2", 0x00088000, 0, r0, r1, r2, cv); + TESTINST3("ror r0, r1, r2", 0x80088000, 1, r0, r1, r2, cv); + TESTINST3("ror r0, r1, r2", 0x00088000, 1, r0, r1, r2, cv); + TESTINST3("ror r0, r1, r2", 0x00088000, 2, r0, r1, r2, cv); + TESTINST3("ror r0, r1, r2", 0x00088000, 31, r0, r1, r2, cv); + TESTINST3("ror r0, r1, r2", 0x00088000, 32, r0, r1, r2, cv); + TESTINST3("ror r0, r1, r2", 0x00088000, 33, r0, r1, r2, cv); + TESTINST3("ror r0, r1, r2", 0x00088000, 63, r0, r1, r2, cv); + TESTINST3("ror r0, r1, r2", 0x00088000, 64, r0, r1, r2, cv); + TESTINST3("ror r0, r1, r2", 0x00088000, 255, r0, r1, r2, cv); + TESTINST3("ror r0, r1, r2", 0x00088000, 256, r0, r1, r2, cv); + TESTINST3("ror r0, r1, r2", 0x80088000, 256, r0, r1, r2, cv); + TESTINST3("ror r0, r1, r2", 0x00088000, 257, r0, r1, r2, cv); + TESTCARRYEND + + printf("RORS\n"); + TESTCARRY + TESTINST3("rors r0, r1, r2", 0x00088000, 0, r0, r1, r2, cv); + TESTINST3("rors r0, r1, r2", 0x80088000, 0, r0, r1, r2, cv); + TESTINST3("rors r0, r1, r2", 0x00088000, 1, r0, r1, r2, cv); + TESTINST3("rors r0, r1, r2", 0x00088000, 2, r0, r1, r2, cv); + TESTINST3("rors r0, r1, r2", 0x00088000, 31, r0, r1, r2, cv); + TESTINST3("rors r0, r1, r2", 0x00088000, 32, r0, r1, r2, cv); + TESTINST3("rors r0, r1, r2", 0x00088000, 33, r0, r1, r2, cv); + TESTINST3("rors r0, r1, r2", 0x00088000, 63, r0, r1, r2, cv); + TESTINST3("rors r0, r1, r2", 0x00088000, 64, r0, r1, r2, cv); + TESTINST3("rors r0, r1, r2", 0x00088000, 255, r0, r1, r2, cv); + TESTINST3("rors r0, r1, r2", 0x00088000, 256, r0, r1, r2, cv); + TESTINST3("rors r0, r1, r2", 0x80088000, 256, r0, r1, r2, cv); + TESTINST3("rors r0, r1, r2", 0x00088000, 257, r0, r1, r2, cv); + TESTCARRYEND + + printf("ROR immediate\n"); + TESTCARRY + TESTINST2("ror r0, r1, #0", 0x00088000, r0, r1, cv); + TESTINST2("ror r0, r1, #1", 0x00088000, r0, r1, cv); + TESTINST2("ror r0, r1, #31", 0x00088000, r0, r1, cv); + TESTINST2("ror r0, r1, #16", 0x00010000, r0, r1, cv); + TESTINST2("ror r0, r1, #17", 0x00010000, r0, r1, cv); + TESTINST2("ror r0, r1, #18", 0x00010000, r0, r1, cv); + TESTCARRYEND + + printf("RORS immediate\n"); + TESTCARRY + TESTINST2("rors r0, r1, #0", 0x00088000, r0, r1, cv); + TESTINST2("rors r0, r1, #1", 0x00088000, r0, r1, cv); + TESTINST2("rors r0, r1, #31", 0x00088000, r0, r1, cv); + TESTINST2("rors r0, r1, #16", 0x00010000, r0, r1, cv); + TESTINST2("rors r0, r1, #17", 0x00010000, r0, r1, cv); + TESTINST2("rors r0, r1, #18", 0x00010000, r0, r1, cv); + TESTCARRYEND +#endif +#if 0 + printf("shift with barrel shifter\n"); + TESTCARRY + TESTINST4("add r0, r1, r2, lsl r3", 0, 0xffffffff, 0, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, lsl r3", 0, 0xffffffff, 1, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, lsl r3", 0, 0xffffffff, 31, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, lsl r3", 0, 0xffffffff, 32, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, lsl r3", 0, 0xffffffff, 255, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, lsl r3", 0, 0xffffffff, 256, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, lsr r3", 0, 0xffffffff, 0, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, lsr r3", 0, 0xffffffff, 1, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, lsr r3", 0, 0xffffffff, 31, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, lsr r3", 0, 0xffffffff, 32, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, lsr r3", 0, 0xffffffff, 255, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, lsr r3", 0, 0xffffffff, 256, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, asr r3", 0, 0x7fffffff, 0, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, asr r3", 0, 0x7fffffff, 1, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, asr r3", 0, 0x7fffffff, 31, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, asr r3", 0, 0x7fffffff, 32, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, asr r3", 0, 0x7fffffff, 255, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, asr r3", 0, 0x7fffffff, 256, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, lsr r3", 0, 0xffffffff, 256, r0, r1, r2, r3, cv); + TESTCARRYEND + + TESTCARRY + TESTINST4("add r0, r1, r2, asr r3", 0, 0x8, 0, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, asr r3", 0, 0x8, 1, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, asr r3", 0, 0x8, 2, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, asr r3", 0, 0x8, 3, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, asr r3", 0, 0x8, 4, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, asr r3", 0, 0x8, 5, r0, r1, r2, r3, cv); + TESTCARRYEND + + TESTCARRY + TESTINST4("add r0, r1, r2, ror r3", 0, 0x00088000, 0, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, ror r3", 0, 0x80088000, 0, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, ror r3", 0, 0x00088000, 1, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, ror r3", 0, 0x00088000, 31, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, ror r3", 0, 0x00088000, 32, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, ror r3", 0, 0x00088000, 255, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, ror r3", 0, 0x00088000, 256, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, ror r3", 0, 0x80088000, 256, r0, r1, r2, r3, cv); + TESTINST4("add r0, r1, r2, ror r3", 0, 0x00088000, 257, r0, r1, r2, r3, cv); + TESTCARRYEND +#endif +#if 0 + TESTCARRY + TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 0, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 1, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 31, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 32, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 255, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 256, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 0, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 1, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 31, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 32, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 255, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 256, r0, r1, r2, r3, cv); + + TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 0, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, ror r3", 0, 0x80088000, 0, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 1, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 31, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 32, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 255, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 256, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, ror r3", 0, 0x80088000, 256, r0, r1, r2, r3, cv); + TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 257, r0, r1, r2, r3, cv); + TESTCARRYEND +#endif + +#if 0 + TESTCARRY + TESTINST4("adcs r0, r1, r2, lsl r3", 0, 0xffffffff, 0, r0, r1, r2, r3, cv); + TESTINST4("adcs r0, r1, r2, lsr r3", 0, 0xffffffff, 0, r0, r1, r2, r3, cv); + TESTINST4("adcs r0, r1, r2, lsl r3", 0, 0xffffffff, 1, r0, r1, r2, r3, cv); + TESTINST4("adcs r0, r1, r2, lsr r3", 0, 0xffffffff, 1, r0, r1, r2, r3, cv); + TESTCARRYEND +#endif + + printf("MUL\n"); + TESTINST3("mul r0, r1, r2", 0, 0, r0, r1, r2, 0); + TESTINST3("mul r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0); + TESTINST3("mul r0, r1, r2", 0, 0xffffffff, r0, r1, r2, 0); + TESTINST3("mul r0, r1, r2", 0xffffffff, 0xffffffff, r0, r1, r2, 0); + TESTINST3("mul r0, r1, r2", 0x7fffffff, 0x7fffffff, r0, r1, r2, 0); + TESTINST3("mul r0, r1, r2", 0x0000ffff, 0x0000ffff, r0, r1, r2, 0); + +#if 0 + printf("MULS\n"); + TESTINST3("muls r0, r1, r2", 0, 0, r0, r1, r2, 0); + TESTINST3("muls r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0); + TESTINST3("muls r0, r1, r2", 0, 0xffffffff, r0, r1, r2, 0); + TESTINST3("muls r0, r1, r2", 0xffffffff, 0xffffffff, r0, r1, r2, 0); + TESTINST3("muls r0, r1, r2", 0x7fffffff, 0x7fffffff, r0, r1, r2, 0); + TESTINST3("muls r0, r1, r2", 0x0000ffff, 0x0000ffff, r0, r1, r2, 0); +#endif + + printf("MLA\n"); + TESTINST4("mla r0, r1, r2, r3", 0, 0, 1, r0, r1, r2, r3, 0); + TESTINST4("mla r0, r1, r2, r3", 0xffffffff, 0, 1, r0, r1, r2, r3, 0); + TESTINST4("mla r0, r1, r2, r3", 0, 0xffffffff, 1, r0, r1, r2, r3, 0); + TESTINST4("mla r0, r1, r2, r3", 0xffffffff, 0xffffffff, 1, r0, r1, r2, r3, 0); + TESTINST4("mla r0, r1, r2, r3", 0x7fffffff, 0x7fffffff, 1, r0, r1, r2, r3, 0); + TESTINST4("mla r0, r1, r2, r3", 0x0000ffff, 0x0000ffff, 1, r0, r1, r2, r3, 0); + +#if 0 + printf("MLAS\n"); + TESTINST4("mlas r0, r1, r2, r3", 0, 0, 1, r0, r1, r2, r3, 0); + TESTINST4("mlas r0, r1, r2, r3", 0xffffffff, 0, 1, r0, r1, r2, r3, 0); + TESTINST4("mlas r0, r1, r2, r3", 0, 0xffffffff, 1, r0, r1, r2, r3, 0); + TESTINST4("mlas r0, r1, r2, r3", 0xffffffff, 0xffffffff, 1, r0, r1, r2, r3, 0); + TESTINST4("mlas r0, r1, r2, r3", 0x7fffffff, 0x7fffffff, 1, r0, r1, r2, r3, 0); + TESTINST4("mlas r0, r1, r2, r3", 0x0000ffff, 0x0000ffff, 1, r0, r1, r2, r3, 0); +#endif + + printf("MLS\n"); + TESTINST4("mls r0, r1, r2, r3", 0, 0, 1, r0, r1, r2, r3, 0); + TESTINST4("mls r0, r1, r2, r3", 0xffffffff, 0, 1, r0, r1, r2, r3, 0); + TESTINST4("mls r0, r1, r2, r3", 0, 0xffffffff, 1, r0, r1, r2, r3, 0); + TESTINST4("mls r0, r1, r2, r3", 0xffffffff, 0xffffffff, 1, r0, r1, r2, r3, 0); + TESTINST4("mls r0, r1, r2, r3", 0x7fffffff, 0x7fffffff, 1, r0, r1, r2, r3, 0); + TESTINST4("mls r0, r1, r2, r3", 0x0000ffff, 0x0000ffff, 1, r0, r1, r2, r3, 0); + + printf("UMULL\n"); + TESTINST4_2OUT("umull r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umull r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umull r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umull r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umull r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umull r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0); +#if 0 + TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0); +#endif + printf("SMULL\n"); + TESTINST4_2OUT("smull r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smull r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smull r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smull r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smull r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smull r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0); +#if 0 + TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0); +#endif + +#if 0 + printf("UMLAL\n"); + TESTINST4_2OUT("umlal r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umlal r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umlal r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umlal r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umlal r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umlal r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umlal r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umlal r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umlal r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0); +#endif +#if 0 + TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umlals r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0); + TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0); +#endif +#if 0 + printf("SMLAL\n"); + TESTINST4_2OUT("smlal r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smlal r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smlal r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smlal r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smlal r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smlal r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smlal r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smlal r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smlal r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0); +#endif +#if 0 + TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smlals r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0); + TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0); +#endif + printf("CLZ\n"); + TESTCARRY + TESTINST2("clz r0, r1", 0, r0, r1, cv); + TESTINST2("clz r0, r1", 1, r0, r1, cv); + TESTINST2("clz r0, r1", 0x10, r0, r1, cv); + TESTINST2("clz r0, r1", 0xffffffff, r0, r1, cv); + TESTCARRYEND + + printf("extend instructions\n"); + TESTINST2("uxtb r0, r1", 0, r0, r1, 0); + TESTINST2("uxtb r0, r1", 1, r0, r1, 0); + TESTINST2("uxtb r0, r1", 0xff, r0, r1, 0); + TESTINST2("uxtb r0, r1", 0xffffffff, r0, r1, 0); + TESTINST2("sxtb r0, r1", 0, r0, r1, 0); + TESTINST2("sxtb r0, r1", 1, r0, r1, 0); + TESTINST2("sxtb r0, r1", 0xff, r0, r1, 0); + TESTINST2("sxtb r0, r1", 0xffffffff, r0, r1, 0); + + TESTINST2("uxth r0, r1", 0, r0, r1, 0); + TESTINST2("uxth r0, r1", 1, r0, r1, 0); + TESTINST2("uxth r0, r1", 0xffff, r0, r1, 0); + TESTINST2("uxth r0, r1", 0xffffffff, r0, r1, 0); + TESTINST2("sxth r0, r1", 0, r0, r1, 0); + TESTINST2("sxth r0, r1", 1, r0, r1, 0); + TESTINST2("sxth r0, r1", 0x7fff, r0, r1, 0); + TESTINST2("sxth r0, r1", 0xffff, r0, r1, 0); + TESTINST2("sxth r0, r1", 0x10ffff, r0, r1, 0); + TESTINST2("sxth r0, r1", 0x107fff, r0, r1, 0); + TESTINST2("sxth r0, r1", 0xffffffff, r0, r1, 0); + + TESTINST2("uxtb r0, r1, ror #0", 0x000000ff, r0, r1, 0); + TESTINST2("uxtb r0, r1, ror #8", 0x000000ff, r0, r1, 0); + TESTINST2("uxtb r0, r1, ror #8", 0x0000ff00, r0, r1, 0); + TESTINST2("uxtb r0, r1, ror #16", 0x00ff0000, r0, r1, 0); + TESTINST2("uxtb r0, r1, ror #24", 0xff000000, r0, r1, 0); +#if 0 + TESTINST2("uxtb16 r0, r1", 0xffffffff, r0, r1, 0); + TESTINST2("uxtb16 r0, r1, ror #16", 0x0000ffff, r0, r1, 0); + TESTINST2("sxtb16 r0, r1", 0xffffffff, r0, r1, 0); + TESTINST2("sxtb16 r0, r1", 0x00ff00ff, r0, r1, 0); + TESTINST2("sxtb16 r0, r1", 0x007f007f, r0, r1, 0); +#endif + printf("------------ BFI ------------\n"); + + /* bfi rDst, rSrc, #lsb-in-dst, #number-of-bits-to-copy */ + TESTINST2("bfi r0, r1, #0, #11", 0xAAAAAAAA, r0, r1, 0); + TESTINST2("bfi r0, r1, #1, #11", 0xAAAAAAAA, r0, r1, 0); + TESTINST2("bfi r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0); + + TESTINST2("bfi r0, r1, #19, #11", 0xFFFFFFFF, r0, r1, 0); + TESTINST2("bfi r0, r1, #20, #11", 0xFFFFFFFF, r0, r1, 0); + TESTINST2("bfi r0, r1, #21, #11", 0xFFFFFFFF, r0, r1, 0); + + TESTINST2("bfi r0, r1, #0, #32", 0xFFFFFFFF, r0, r1, 0); + TESTINST2("bfi r0, r1, #1, #31", 0xFFFFFFFF, r0, r1, 0); + + TESTINST2("bfi r0, r1, #29, #3", 0xFFFFFFFF, r0, r1, 0); + TESTINST2("bfi r0, r1, #30, #2", 0xFFFFFFFF, r0, r1, 0); + TESTINST2("bfi r0, r1, #31, #1", 0xFFFFFFFF, r0, r1, 0); + + printf("------------ BFC ------------\n"); + + /* bfi rDst, #lsb-in-dst, #number-of-bits-to-copy */ + TESTINST2("bfc r0, #0, #11", 0xAAAAAAAA, r0, r1, 0); + TESTINST2("bfc r0, #1, #11", 0xAAAAAAAA, r0, r1, 0); + TESTINST2("bfc r0, #2, #11", 0xAAAAAAAA, r0, r1, 0); + + TESTINST2("bfc r0, #19, #11", 0xFFFFFFFF, r0, r1, 0); + TESTINST2("bfc r0, #20, #11", 0xFFFFFFFF, r0, r1, 0); + TESTINST2("bfc r0, #21, #11", 0xFFFFFFFF, r0, r1, 0); + + TESTINST2("bfc r0, #0, #32", 0xFFFFFFFF, r0, r1, 0); + TESTINST2("bfc r0, #1, #31", 0xFFFFFFFF, r0, r1, 0); + + TESTINST2("bfc r0, #29, #3", 0xFFFFFFFF, r0, r1, 0); + TESTINST2("bfc r0, #30, #2", 0xFFFFFFFF, r0, r1, 0); + TESTINST2("bfc r0, #31, #1", 0xFFFFFFFF, r0, r1, 0); + + printf("------------ SBFX ------------\n"); + + /* sbfx rDst, rSrc, #lsb, #width */ + TESTINST2("sbfx r0, r1, #0, #1", 0x00000000, r0, r1, 0); + TESTINST2("sbfx r0, r1, #0, #1", 0x00000001, r0, r1, 0); + TESTINST2("sbfx r0, r1, #1, #1", 0x00000000, r0, r1, 0); + TESTINST2("sbfx r0, r1, #1, #1", 0x00000001, r0, r1, 0); + TESTINST2("sbfx r0, r1, #1, #1", 0x00000002, r0, r1, 0); + TESTINST2("sbfx r0, r1, #1, #1", 0x00000003, r0, r1, 0); + + TESTINST2("sbfx r0, r1, #0, #2", 0x00000000, r0, r1, 0); + TESTINST2("sbfx r0, r1, #0, #2", 0x00000001, r0, r1, 0); + TESTINST2("sbfx r0, r1, #1, #2", 0x00000000, r0, r1, 0); + TESTINST2("sbfx r0, r1, #1, #2", 0x00000001, r0, r1, 0); + TESTINST2("sbfx r0, r1, #1, #2", 0x00000002, r0, r1, 0); + TESTINST2("sbfx r0, r1, #1, #2", 0x00000003, r0, r1, 0); + + TESTINST2("sbfx r0, r1, #0, #11", 0xAAAAAAAA, r0, r1, 0); + TESTINST2("sbfx r0, r1, #1, #11", 0xAAAAAAAA, r0, r1, 0); + TESTINST2("sbfx r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0); + + TESTINST2("sbfx r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0); + + TESTINST2("sbfx r0, r1, #31, #1", 0xAAAAAAAA, r0, r1, 0); + TESTINST2("sbfx r0, r1, #30, #2", 0xAAAAAAAA, r0, r1, 0); + + printf("------------ UBFX ------------\n"); + + /* ubfx rDst, rSrc, #lsb, #width */ + TESTINST2("ubfx r0, r1, #0, #1", 0x00000000, r0, r1, 0); + TESTINST2("ubfx r0, r1, #0, #1", 0x00000001, r0, r1, 0); + TESTINST2("ubfx r0, r1, #1, #1", 0x00000000, r0, r1, 0); + TESTINST2("ubfx r0, r1, #1, #1", 0x00000001, r0, r1, 0); + TESTINST2("ubfx r0, r1, #1, #1", 0x00000002, r0, r1, 0); + TESTINST2("ubfx r0, r1, #1, #1", 0x00000003, r0, r1, 0); + + TESTINST2("ubfx r0, r1, #0, #2", 0x00000000, r0, r1, 0); + TESTINST2("ubfx r0, r1, #0, #2", 0x00000001, r0, r1, 0); + TESTINST2("ubfx r0, r1, #1, #2", 0x00000000, r0, r1, 0); + TESTINST2("ubfx r0, r1, #1, #2", 0x00000001, r0, r1, 0); + TESTINST2("ubfx r0, r1, #1, #2", 0x00000002, r0, r1, 0); + TESTINST2("ubfx r0, r1, #1, #2", 0x00000003, r0, r1, 0); + + TESTINST2("ubfx r0, r1, #0, #11", 0xAAAAAAAA, r0, r1, 0); + TESTINST2("ubfx r0, r1, #1, #11", 0xAAAAAAAA, r0, r1, 0); + TESTINST2("ubfx r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0); + + TESTINST2("ubfx r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0); + + TESTINST2("ubfx r0, r1, #31, #1", 0xAAAAAAAA, r0, r1, 0); + TESTINST2("ubfx r0, r1, #30, #2", 0xAAAAAAAA, r0, r1, 0); + + printf("------------ SMULL{B,T}{B,T} ------------\n"); + /* SMULxx rD, rN, rM */ + + TESTINST3("smulbb r0, r1, r2", 0x00030000, 0x00040000, r0, r1, r2, 0); + TESTINST3("smulbb r0, r1, r2", 0x00030001, 0x00040002, r0, r1, r2, 0); + TESTINST3("smulbb r0, r1, r2", 0x00038001, 0x00047fff, r0, r1, r2, 0); + TESTINST3("smulbb r0, r1, r2", 0x00037fff, 0x00047fff, r0, r1, r2, 0); + TESTINST3("smulbb r0, r1, r2", 0x0003ffff, 0x0004ffff, r0, r1, r2, 0); + + printf("------------ SXTAB ------------\n"); + TESTINST3("sxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("sxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("sxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("sxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182819, + r0, r1, r2, 0); + + TESTINST3("sxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182899, + r0, r1, r2, 0); + TESTINST3("sxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182899, + r0, r1, r2, 0); + TESTINST3("sxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182899, + r0, r1, r2, 0); + TESTINST3("sxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182899, + r0, r1, r2, 0); +#if 0 + printf("------------ SXTAB16 ------------\n"); + TESTINST3("sxtab16 r0, r1, r2, ROR #24", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("sxtab16 r0, r1, r2, ROR #16", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("sxtab16 r0, r1, r2, ROR #8", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("sxtab16 r0, r1, r2, ROR #0", 0x31415927, 0x27182819, + r0, r1, r2, 0); + + TESTINST3("sxtab16 r0, r1, r2, ROR #24", 0x31415927, 0x27182899, + r0, r1, r2, 0); + TESTINST3("sxtab16 r0, r1, r2, ROR #16", 0x31415927, 0x27182899, + r0, r1, r2, 0); + TESTINST3("sxtab16 r0, r1, r2, ROR #8", 0x31415927, 0x27182899, + r0, r1, r2, 0); + TESTINST3("sxtab16 r0, r1, r2, ROR #0", 0x31415927, 0x27182899, + r0, r1, r2, 0); +#endif + printf("------------ UXTAB ------------\n"); + TESTINST3("uxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("uxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("uxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("uxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182819, + r0, r1, r2, 0); + + TESTINST3("uxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182899, + r0, r1, r2, 0); + TESTINST3("uxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182899, + r0, r1, r2, 0); + TESTINST3("uxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182899, + r0, r1, r2, 0); + TESTINST3("uxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182899, + r0, r1, r2, 0); +#if 0 + printf("------------ UXTAB16 ------------\n"); + TESTINST3("uxtab16 r0, r1, r2, ROR #24", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("uxtab16 r0, r1, r2, ROR #16", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("uxtab16 r0, r1, r2, ROR #8", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("uxtab16 r0, r1, r2, ROR #0", 0x31415927, 0x27182819, + r0, r1, r2, 0); + + TESTINST3("uxtab16 r0, r1, r2, ROR #24", 0x31415927, 0x27182899, + r0, r1, r2, 0); + TESTINST3("uxtab16 r0, r1, r2, ROR #16", 0x31415927, 0x27182899, + r0, r1, r2, 0); + TESTINST3("uxtab16 r0, r1, r2, ROR #8", 0x31415927, 0x27182899, + r0, r1, r2, 0); + TESTINST3("uxtab16 r0, r1, r2, ROR #0", 0x31415927, 0x27182899, + r0, r1, r2, 0); +#endif + printf("------------ SXTAH ------------\n"); + TESTINST3("sxtah r0, r1, r2, ROR #24", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("sxtah r0, r1, r2, ROR #16", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("sxtah r0, r1, r2, ROR #8 ", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("sxtah r0, r1, r2, ROR #0 ", 0x31415927, 0x27182819, + r0, r1, r2, 0); + + TESTINST3("sxtah r0, r1, r2, ROR #24", 0x31415927, 0x27189819, + r0, r1, r2, 0); + TESTINST3("sxtah r0, r1, r2, ROR #16", 0x31415927, 0x27189819, + r0, r1, r2, 0); + TESTINST3("sxtah r0, r1, r2, ROR #8 ", 0x31415927, 0x27189819, + r0, r1, r2, 0); + TESTINST3("sxtah r0, r1, r2, ROR #0 ", 0x31415927, 0x27189819, + r0, r1, r2, 0); + + printf("------------ UXTAH ------------\n"); + TESTINST3("uxtah r0, r1, r2, ROR #24", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("uxtah r0, r1, r2, ROR #16", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("uxtah r0, r1, r2, ROR #8 ", 0x31415927, 0x27182819, + r0, r1, r2, 0); + TESTINST3("uxtah r0, r1, r2, ROR #0 ", 0x31415927, 0x27182819, + r0, r1, r2, 0); + + TESTINST3("uxtah r0, r1, r2, ROR #24", 0x31415927, 0x27189819, + r0, r1, r2, 0); + TESTINST3("uxtah r0, r1, r2, ROR #16", 0x31415927, 0x27189819, + r0, r1, r2, 0); + TESTINST3("uxtah r0, r1, r2, ROR #8 ", 0x31415927, 0x27189819, + r0, r1, r2, 0); + TESTINST3("uxtah r0, r1, r2, ROR #0 ", 0x31415927, 0x27189819, + r0, r1, r2, 0); +#if 0 + printf("------------ PLD/PLDW (begin) ------------\n"); + /* These don't have any effect on the architected state, so, + uh, there's no result values to check. Just _do_ some of + them and check Valgrind's instruction decoder eats them up + without complaining. */ + { int alocal; + printf("pld reg +/- imm12 cases\n"); + __asm__ __volatile__( "pld [%0, #128]" : :/*in*/"r"(&alocal) ); + __asm__ __volatile__( "pld [%0, #-128]" : :/*in*/"r"(&alocal) ); + __asm__ __volatile__( "pld [r15, #-128]" : :/*in*/"r"(&alocal) ); + + // apparently pldw is v7 only + //__asm__ __volatile__( "pldw [%0, #128]" : :/*in*/"r"(&alocal) ); + //__asm__ __volatile__( "pldw [%0, #-128]" : :/*in*/"r"(&alocal) ); + //__asm__ __volatile__( "pldw [r15, #128]" : :/*in*/"r"(&alocal) ); + + printf("pld reg +/- shifted reg cases\n"); + __asm__ __volatile__( "pld [%0, %1]" : : /*in*/"r"(&alocal), "r"(0) ); + __asm__ __volatile__( "pld [%0, %1, LSL #1]" : : /*in*/"r"(&alocal), "r"(0) ); +#if 0 + __asm__ __volatile__( "pld [%0, %1, LSR #1]" : : /*in*/"r"(&alocal), "r"(0) ); + __asm__ __volatile__( "pld [%0, %1, ASR #1]" : : /*in*/"r"(&alocal), "r"(0) ); + __asm__ __volatile__( "pld [%0, %1, ROR #1]" : : /*in*/"r"(&alocal), "r"(0) ); + __asm__ __volatile__( "pld [%0, %1, RRX]" : : /*in*/"r"(&alocal), "r"(0) ); +#endif + } + printf("------------ PLD/PLDW (done) ------------\n"); +#endif + + return 0; +} + + +//////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////// + + +int main ( void ) +{ + // 16 bit instructions + + printf("CMP-16 0x10a\n"); + TESTCARRY + TESTINST3("cmp r3, r6", 0, 0, r6/*fake*/, r3, r6, 0); + TESTINST3("cmp r3, r6", 1, 0, r6/*fake*/, r3, r6, 0); + TESTINST3("cmp r3, r6", 0, 1, r6/*fake*/, r3, r6, 0); + TESTINST3("cmp r3, r6", -1, 0, r6/*fake*/, r3, r6, 0); + TESTINST3("cmp r3, r6", 0, -1, r6/*fake*/, r3, r6, 0); + TESTINST3("cmp r3, r6", 0, 0x80000000, r6/*fake*/, r3, r6, 0); + TESTINST3("cmp r3, r6", 0x80000000, 0, r6/*fake*/, r3, r6, 0); + TESTCARRYEND + + printf("CMN-16 0x10a\n"); + TESTCARRY + TESTINST3("cmn r3, r6", 0, 0, r6/*fake*/, r3, r6, 0); + TESTINST3("cmn r3, r6", 1, 0, r6/*fake*/, r3, r6, 0); + TESTINST3("cmn r3, r6", 0, 1, r6/*fake*/, r3, r6, 0); + TESTINST3("cmn r3, r6", -1, 0, r6/*fake*/, r3, r6, 0); + TESTINST3("cmn r3, r6", 0, -1, r6/*fake*/, r3, r6, 0); + TESTINST3("cmn r3, r6", 0, 0x80000000, r6/*fake*/, r3, r6, 0); + TESTINST3("cmn r3, r6", 0x80000000, 0, r6/*fake*/, r3, r6, 0); + TESTCARRYEND + + printf("TST-16 0x108\n"); + TESTCARRY + TESTINST3("tst r3, r6", 0, 0, r6/*fake*/, r3, r6, cv); + TESTINST3("tst r3, r6", 1, 0, r6/*fake*/, r3, r6, cv); + TESTINST3("tst r3, r6", 0, 1, r6/*fake*/, r3, r6, cv); + TESTINST3("tst r3, r6", 1, 1, r6/*fake*/, r3, r6, cv); + TESTINST3("tst r3, r6", -1, 0, r6/*fake*/, r3, r6, cv); + TESTINST3("tst r3, r6", 0, -1, r6/*fake*/, r3, r6, cv); + TESTINST3("tst r3, r6", -1, -1, r6/*fake*/, r3, r6, cv); + TESTCARRYEND + + printf("NEGS-16 0x109\n"); + TESTINST2("negs r0, r1", 1, r0, r1, 0); + TESTCARRY + TESTINST2("negs r0, r1", 1, r0, r1, cv); + TESTINST2("negs r0, r1", 0, r0, r1, cv); + TESTINST2("negs r0, r1", 0x80000000, r0, r1, cv); + TESTINST2("negs r0, r1", 0x80000001, r0, r1, cv); + TESTINST2("negs r0, r1", 0xFFFFFFFF, r0, r1, cv); + TESTINST2("negs r0, r1", 0x7FFFFFFF, r0, r1, cv); + TESTCARRYEND + + printf("MVNS-16 0x10F\n"); + TESTINST2("mvns r0, r1", 1, r0, r1, 0); + TESTCARRY + TESTINST2("mvns r0, r1", 1, r0, r1, cv); + TESTINST2("mvns r0, r1", 0, r0, r1, cv); + TESTINST2("mvns r0, r1", 0x80000000, r0, r1, cv); + TESTINST2("mvns r0, r1", 0x80000001, r0, r1, cv); + TESTINST2("mvns r0, r1", 0xFFFFFFFF, r0, r1, cv); + TESTINST2("mvns r0, r1", 0x7FFFFFFF, r0, r1, cv); + TESTCARRYEND + + printf("ORRS-16 0x10C\n"); + TESTCARRY + TESTINST2x("orrs r1, r2", 0x31415927, 0x27181728, r1, r2, cv); + TESTINST2x("orrs r1, r2", 0x00000000, 0x00000000, r1, r2, cv); + TESTINST2x("orrs r1, r2", 0x00000001, 0x00000000, r1, r2, cv); + TESTINST2x("orrs r1, r2", 0x00000000, 0x00000001, r1, r2, cv); + TESTINST2x("orrs r1, r2", 0x80000000, 0x00000000, r1, r2, cv); + TESTINST2x("orrs r1, r2", 0x00000000, 0x80000000, r1, r2, cv); + TESTINST2x("orrs r1, r2", 0x80000000, 0x80000000, r1, r2, cv); + TESTCARRYEND + + printf("ANDS-16 0x100\n"); + TESTCARRY + TESTINST2x("ands r1, r2", 0x31415927, 0x27181728, r1, r2, cv); + TESTINST2x("ands r1, r2", 0x00000000, 0x00000000, r1, r2, cv); + TESTINST2x("ands r1, r2", 0x00000001, 0x00000000, r1, r2, cv); + TESTINST2x("ands r1, r2", 0x00000000, 0x00000001, r1, r2, cv); + TESTINST2x("ands r1, r2", 0x80000000, 0x00000000, r1, r2, cv); + TESTINST2x("ands r1, r2", 0x00000000, 0x80000000, r1, r2, cv); + TESTINST2x("ands r1, r2", 0x80000000, 0x80000000, r1, r2, cv); + TESTCARRYEND + + printf("EORS-16 0x101\n"); + TESTCARRY + TESTINST2x("eors r1, r2", 0x31415927, 0x27181728, r1, r2, cv); + TESTINST2x("eors r1, r2", 0x00000000, 0x00000000, r1, r2, cv); + TESTINST2x("eors r1, r2", 0x00000001, 0x00000000, r1, r2, cv); + TESTINST2x("eors r1, r2", 0x00000000, 0x00000001, r1, r2, cv); + TESTINST2x("eors r1, r2", 0x80000000, 0x00000000, r1, r2, cv); + TESTINST2x("eors r1, r2", 0x00000000, 0x80000000, r1, r2, cv); + TESTINST2x("eors r1, r2", 0x80000000, 0x80000000, r1, r2, cv); + TESTCARRYEND + + printf("MULS-16 0x10d\n"); + TESTCARRY + TESTINST2x("muls r1, r2", 0x31415927, 0x27181728, r1, r2, cv); + TESTINST2x("muls r1, r2", 0x00000000, 0x00000000, r1, r2, cv); + TESTINST2x("muls r1, r2", 0x00000001, 0x00000000, r1, r2, cv); + TESTINST2x("muls r1, r2", 0x00000000, 0x00000001, r1, r2, cv); + TESTINST2x("muls r1, r2", 0x80000000, 0x00000000, r1, r2, cv); + TESTINST2x("muls r1, r2", 0x00000000, 0x80000000, r1, r2, cv); + TESTINST2x("muls r1, r2", 0x80000000, 0x80000000, r1, r2, cv); + TESTCARRYEND + + printf("BICS-16 0x10E\n"); + TESTCARRY + TESTINST2x("bics r1, r2", 0x31415927, 0x27181728, r1, r2, cv); + TESTINST2x("bics r1, r2", 0x00000000, 0x00000000, r1, r2, cv); + TESTINST2x("bics r1, r2", 0x00000001, 0x00000000, r1, r2, cv); + TESTINST2x("bics r1, r2", 0x00000000, 0x00000001, r1, r2, cv); + TESTINST2x("bics r1, r2", 0x80000000, 0x00000000, r1, r2, cv); + TESTINST2x("bics r1, r2", 0x00000000, 0x80000000, r1, r2, cv); + TESTINST2x("bics r1, r2", 0x80000000, 0x80000000, r1, r2, cv); + TESTCARRYEND + + printf("ADCS-16 0x105\n"); + TESTCARRY + TESTINST2x("adcs r1, r2", 0x31415927, 0x27181728, r1, r2, cv); + TESTINST2x("adcs r1, r2", 0x00000000, 0x00000000, r1, r2, cv); + TESTINST2x("adcs r1, r2", 0x00000001, 0x00000000, r1, r2, cv); + TESTINST2x("adcs r1, r2", 0x00000000, 0x00000001, r1, r2, cv); + TESTINST2x("adcs r1, r2", 0x80000000, 0x00000000, r1, r2, cv); + TESTINST2x("adcs r1, r2", 0x00000000, 0x80000000, r1, r2, cv); + TESTINST2x("adcs r1, r2", 0x80000000, 0x80000000, r1, r2, cv); + TESTCARRYEND + + printf("SBCS-16 0x100\n"); + TESTCARRY + TESTINST2x("sbcs r1, r2", 0x31415927, 0x27181728, r1, r2, cv); + TESTINST2x("sbcs r1, r2", 0x00000000, 0x00000000, r1, r2, cv); + TESTINST2x("sbcs r1, r2", 0x00000001, 0x00000000, r1, r2, cv); + TESTINST2x("sbcs r1, r2", 0x00000000, 0x00000001, r1, r2, cv); + TESTINST2x("sbcs r1, r2", 0x80000000, 0x00000000, r1, r2, cv); + TESTINST2x("sbcs r1, r2", 0x00000000, 0x80000000, r1, r2, cv); + TESTINST2x("sbcs r1, r2", 0x80000000, 0x80000000, r1, r2, cv); + TESTCARRYEND + + printf("UXTB-16 0x2CB\n"); + TESTCARRY + TESTINST2("uxtb r1, r2", 0x31415927, r1, r2, cv); + TESTINST2("uxtb r1, r2", 0x31415997, r1, r2, cv); + TESTCARRYEND + + printf("SXTB-16 0x2C9\n"); + TESTCARRY + TESTINST2("sxtb r1, r2", 0x31415927, r1, r2, cv); + TESTINST2("sxtb r1, r2", 0x31415997, r1, r2, cv); + TESTCARRYEND + + printf("UXTH-16 0x2CA\n"); + TESTCARRY + TESTINST2("uxth r1, r2", 0x31415927, r1, r2, cv); + TESTINST2("uxth r1, r2", 0x31419597, r1, r2, cv); + TESTCARRYEND + + printf("SXTH-16 0x2C8\n"); + TESTCARRY + TESTINST2("sxth r1, r2", 0x31415927, r1, r2, cv); + TESTINST2("sxth r1, r2", 0x31419597, r1, r2, cv); + TESTCARRYEND + + printf("LSLS-16 0x102\n"); + TESTCARRY + TESTINST2x("lsls r1, r2", 0x31415927, 0x00000000, r1, r2, cv); + TESTINST2x("lsls r1, r2", 0x31415927, 0x00000001, r1, r2, cv); + TESTINST2x("lsls r1, r2", 0x31415927, 0x00000002, r1, r2, cv); + TESTINST2x("lsls r1, r2", 0x31415927, 0x0000000F, r1, r2, cv); + TESTINST2x("lsls r1, r2", 0x31415927, 0x00000010, r1, r2, cv); + TESTINST2x("lsls r1, r2", 0x31415927, 0x0000001F, r1, r2, cv); + TESTINST2x("lsls r1, r2", 0x31415927, 0x00000020, r1, r2, cv); + TESTINST2x("lsls r1, r2", 0x31415927, 0x00000021, r1, r2, cv); + TESTCARRYEND + + printf("LSRS-16 0x103\n"); + TESTCARRY + TESTINST2x("lsrs r1, r2", 0x31415927, 0x00000000, r1, r2, cv); + TESTINST2x("lsrs r1, r2", 0x31415927, 0x00000001, r1, r2, cv); + TESTINST2x("lsrs r1, r2", 0x31415927, 0x00000002, r1, r2, cv); + TESTINST2x("lsrs r1, r2", 0x31415927, 0x0000000F, r1, r2, cv); + TESTINST2x("lsrs r1, r2", 0x31415927, 0x00000010, r1, r2, cv); + TESTINST2x("lsrs r1, r2", 0x31415927, 0x0000001F, r1, r2, cv); + TESTINST2x("lsrs r1, r2", 0x31415927, 0x00000020, r1, r2, cv); + TESTINST2x("lsrs r1, r2", 0x31415927, 0x00000021, r1, r2, cv); + TESTCARRYEND + + printf("ASRS-16 0x104\n"); + TESTCARRY + TESTINST2x("asrs r1, r2", 0x31415927, 0x00000000, r1, r2, cv); + TESTINST2x("asrs r1, r2", 0x91415927, 0x00000001, r1, r2, cv); + TESTINST2x("asrs r1, r2", 0x31415927, 0x00000002, r1, r2, cv); + TESTINST2x("asrs r1, r2", 0x91415927, 0x0000000F, r1, r2, cv); + TESTINST2x("asrs r1, r2", 0x31415927, 0x00000010, r1, r2, cv); + TESTINST2x("asrs r1, r2", 0x91415927, 0x0000001F, r1, r2, cv); + TESTINST2x("asrs r1, r2", 0x31415927, 0x00000020, r1, r2, cv); + TESTINST2x("asrs r1, r2", 0x91415927, 0x00000021, r1, r2, cv); + TESTCARRYEND + + printf("RORS-16 0x107\n"); + TESTCARRY + TESTINST2x("rors r1, r2", 0x31415927, 0x00000000, r1, r2, cv); + TESTINST2x("rors r1, r2", 0x31415927, 0x00000001, r1, r2, cv); + TESTINST2x("rors r1, r2", 0x31415927, 0x00000002, r1, r2, cv); + TESTINST2x("rors r1, r2", 0x31415927, 0x0000000F, r1, r2, cv); + TESTINST2x("rors r1, r2", 0x31415927, 0x00000010, r1, r2, cv); + TESTINST2x("rors r1, r2", 0x31415927, 0x0000001F, r1, r2, cv); + TESTINST2x("rors r1, r2", 0x31415927, 0x00000020, r1, r2, cv); + TESTINST2x("rors r1, r2", 0x31415927, 0x00000021, r1, r2, cv); + TESTCARRYEND + + printf("ADD(HI)-16\n"); + TESTCARRY + TESTINST2x("add r5, r12", 0x31415927, 0x12345678, r5, r12, cv); + TESTINST2x("add r4, r9 ", 0x31415927, 0x12345678, r4, r9, cv); + TESTCARRYEND + + printf("CMP(HI)-16 0x10a\n"); + TESTCARRY + TESTINST3("cmp r5, r12", 0, 0, r12/*fake*/, r5, r12, 0); + TESTINST3("cmp r5, r12", 1, 0, r12/*fake*/, r5, r12, 0); + TESTINST3("cmp r5, r12", 0, 1, r12/*fake*/, r5, r12, 0); + TESTINST3("cmp r5, r12", -1, 0, r12/*fake*/, r5, r12, 0); + TESTINST3("cmp r5, r12", 0, -1, r12/*fake*/, r5, r12, 0); + TESTINST3("cmp r5, r12", 0, 0x80000000, r12/*fake*/, r5, r12, 0); + TESTINST3("cmp r5, r12", 0x80000000, 0, r12/*fake*/, r5, r12, 0); + TESTCARRYEND + + printf("MOV(HI)-16\n"); + TESTCARRY + TESTINST2x("mov r5, r12", 0x31415927, 0x12345678, r5, r12, cv); + TESTINST2x("mov r4, r9 ", 0x31415927, 0x12345678, r4, r9, cv); + TESTCARRYEND + + printf("ADDS-16 Rd, Rn, #imm3\n"); + TESTCARRY + TESTINST2x("adds r1, r2, #1", 0x31415927, 0x27181728, r1, r2, cv); + TESTINST2x("adds r1, r2, #7", 0x31415927, 0x97181728, r1, r2, cv); + TESTCARRYEND + + printf("ADDS-16 Rd, Rn, Rm\n"); + TESTCARRY + TESTINST3("adds r1, r2, r3", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adds r1, r2, r3", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adds r1, r2, r3", 0, 0, r1, r2, r3, cv); + TESTINST3("adds r1, r2, r3", 1, 0, r1, r2, r3, cv); + TESTINST3("adds r1, r2, r3", 0, 1, r1, r2, r3, cv); + TESTINST3("adds r1, r2, r3", -1, 0, r1, r2, r3, cv); + TESTINST3("adds r1, r2, r3", 0, -1, r1, r2, r3, cv); + TESTINST3("adds r1, r2, r3", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds r1, r2, r3", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adds r1, r2, r3", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds r1, r2, r3", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds r1, r2, r3", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds r1, r2, r3", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTCARRYEND + + printf("SUBS-16 Rd, Rn, Rm\n"); + TESTCARRY + TESTINST3("subs r1, r2, r3", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("subs r1, r2, r3", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("subs r1, r2, r3", 0, 0, r1, r2, r3, cv); + TESTINST3("subs r1, r2, r3", 1, 0, r1, r2, r3, cv); + TESTINST3("subs r1, r2, r3", 0, 1, r1, r2, r3, cv); + TESTINST3("subs r1, r2, r3", -1, 0, r1, r2, r3, cv); + TESTINST3("subs r1, r2, r3", 0, -1, r1, r2, r3, cv); + TESTINST3("subs r1, r2, r3", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs r1, r2, r3", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("subs r1, r2, r3", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs r1, r2, r3", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs r1, r2, r3", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs r1, r2, r3", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTCARRYEND + + printf("ADDS-16 Rn, #uimm8\n"); + TESTCARRY + TESTINST1x("adds r1, #0 ", 0x31415927, r1, cv); + TESTINST1x("adds r1, #255", 0x31415927, r1, cv); + TESTINST1x("adds r1, #0 ", 0x91415927, r1, cv); + TESTINST1x("adds r1, #255", 0x91415927, r1, cv); + TESTCARRYEND + + printf("SUBS-16 Rn, #uimm8\n"); + TESTCARRY + TESTINST1x("subs r1, #0 ", 0x31415927, r1, cv); + TESTINST1x("subs r1, #255", 0x31415927, r1, cv); + TESTINST1x("subs r1, #0 ", 0x91415927, r1, cv); + TESTINST1x("subs r1, #255", 0x91415927, r1, cv); + TESTCARRYEND + + printf("CMP-16 Rn, #uimm8\n"); + TESTCARRY + TESTINST1x("cmp r1, #0x80 ", 0x00000080, r1, cv); + TESTINST1x("cmp r1, #0x7f ", 0x00000080, r1, cv); + TESTINST1x("cmp r1, #0x81 ", 0x00000080, r1, cv); + TESTINST1x("cmp r1, #0x80 ", 0xffffff80, r1, cv); + TESTINST1x("cmp r1, #0x7f ", 0xffffff80, r1, cv); + TESTINST1x("cmp r1, #0x81 ", 0xffffff80, r1, cv); + TESTINST1x("cmp r1, #0x01 ", 0x80000000, r1, cv); + TESTCARRYEND + + printf("MOVS-16 Rn, #uimm8\n"); + TESTCARRY + TESTINST1x("movs r1, #0 ", 0x31415927, r1, cv); + TESTINST1x("movs r1, #0x7f", 0x31415927, r1, cv); + TESTINST1x("movs r1, #0x80", 0x31415927, r1, cv); + TESTINST1x("movs r1, #0x81", 0x31415927, r1, cv); + TESTINST1x("movs r1, #0xff", 0x31415927, r1, cv); + TESTCARRYEND + + printf("LSLS-16 Rd, Rm, imm5\n"); + TESTCARRY + TESTINST2("lsls r1, r2, #0 ", 0x31415927, r1, r2, cv); + TESTINST2("lsls r1, r2, #1 ", 0x31415927, r1, r2, cv); + TESTINST2("lsls r1, r2, #2 ", 0x31415927, r1, r2, cv); + TESTINST2("lsls r1, r2, #0xF ", 0x31415927, r1, r2, cv); + TESTINST2("lsls r1, r2, #0x10", 0x31415927, r1, r2, cv); + TESTINST2("lsls r1, r2, #0x1F", 0x31415927, r1, r2, cv); + TESTCARRYEND + + printf("LSRS-16 Rd, Rm, imm5\n"); + TESTCARRY + TESTINST2("lsrs r1, r2, #0 ", 0x31415927, r1, r2, cv); + TESTINST2("lsrs r1, r2, #1 ", 0x31415927, r1, r2, cv); + TESTINST2("lsrs r1, r2, #2 ", 0x31415927, r1, r2, cv); + TESTINST2("lsrs r1, r2, #0xF ", 0x31415927, r1, r2, cv); + TESTINST2("lsrs r1, r2, #0x10", 0x31415927, r1, r2, cv); + TESTINST2("lsrs r1, r2, #0x1F", 0x31415927, r1, r2, cv); + TESTCARRYEND + + printf("ASRS-16 Rd, Rm, imm5\n"); + TESTCARRY + TESTINST2("asrs r1, r2, #0 ", 0x31415927, r1, r2, cv); + TESTINST2("asrs r1, r2, #1 ", 0x91415927, r1, r2, cv); + TESTINST2("asrs r1, r2, #2 ", 0x31415927, r1, r2, cv); + TESTINST2("asrs r1, r2, #0xF ", 0x91415927, r1, r2, cv); + TESTINST2("asrs r1, r2, #0x10", 0x31415927, r1, r2, cv); + TESTINST2("asrs r1, r2, #0x1F", 0x91415927, r1, r2, cv); + TESTCARRYEND + + // 32 bit instructions + + printf("(T3) ADD{S}.W Rd, Rn, #constT [allegedly]\n"); + TESTCARRY + TESTINST2("adds.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("adds.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("adds.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("adds.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("adds.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("adds.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("adds.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("adds.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("adds.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("adds.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("adds.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("adds.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("adds.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTINST2("add.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("add.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("add.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("add.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("add.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("add.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("add.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("add.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("add.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("add.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("add.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("add.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("add.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTCARRYEND + + printf("(T3) CMP.W Rn, #constT [allegedly]\n"); + TESTCARRY + TESTINST1x("cmp.w r1, #0xffffffff", 0x31415927, r1, cv); + TESTINST1x("cmp.w r1, #0xee00ee00", 0x31415927, r1, cv); + TESTINST1x("cmp.w r1, #255 ", 0, r1, cv); + TESTINST1x("cmp.w r1, #0 ", 1, r1, cv); + TESTINST1x("cmp.w r1, #1 ", 0, r1, cv); + TESTINST1x("cmp.w r1, #0 ", -1, r1, cv); + TESTINST1x("cmp.w r1, #-1 ", 0, r1, cv); + TESTINST1x("cmp.w r1, #0x80000000", 0, r1, cv); + TESTINST1x("cmp.w r1, #0 ", 0x80000000, r1, cv); + TESTINST1x("cmp.w r1, #0x80000000", 0x80000000, r1, cv); + TESTINST1x("cmp.w r1, #0x80000000", 0x7fffffff, r1, cv); + TESTINST1x("cmp.w r1, #0xff000000", 0x80000000, r1, cv); + TESTINST1x("cmp.w r1, #0x0dd00000", 0x7fffffff, r1, cv); + TESTCARRYEND + + printf("(T3) CMN.W Rn, #constT [allegedly]\n"); + TESTCARRY + TESTINST1x("cmn.w r1, #0xffffffff", 0x31415927, r1, cv); + TESTINST1x("cmn.w r1, #0xee00ee00", 0x31415927, r1, cv); + TESTINST1x("cmn.w r1, #255 ", 0, r1, cv); + TESTINST1x("cmn.w r1, #0 ", 1, r1, cv); + TESTINST1x("cmn.w r1, #1 ", 0, r1, cv); + TESTINST1x("cmn.w r1, #0 ", -1, r1, cv); + TESTINST1x("cmn.w r1, #-1 ", 0, r1, cv); + TESTINST1x("cmn.w r1, #0x80000000", 0, r1, cv); + TESTINST1x("cmn.w r1, #0 ", 0x80000000, r1, cv); + TESTINST1x("cmn.w r1, #0x80000000", 0x80000000, r1, cv); + TESTINST1x("cmn.w r1, #0x80000000", 0x7fffffff, r1, cv); + TESTINST1x("cmn.w r1, #0xff000000", 0x80000000, r1, cv); + TESTINST1x("cmn.w r1, #0x0dd00000", 0x7fffffff, r1, cv); + TESTCARRYEND + + printf("(T3) TST.W Rn, #constT [allegedly]\n"); + TESTCARRY + TESTINST1x("tst.w r1, #0xffffffff", 0x31415927, r1, cv); + TESTINST1x("tst.w r1, #0xee00ee00", 0x31415927, r1, cv); + TESTINST1x("tst.w r1, #255 ", 0, r1, cv); + TESTINST1x("tst.w r1, #0 ", 1, r1, cv); + TESTINST1x("tst.w r1, #1 ", 0, r1, cv); + TESTINST1x("tst.w r1, #0 ", -1, r1, cv); + TESTINST1x("tst.w r1, #-1 ", 0, r1, cv); + TESTINST1x("tst.w r1, #0x80000000", 0, r1, cv); + TESTINST1x("tst.w r1, #0 ", 0x80000000, r1, cv); + TESTINST1x("tst.w r1, #0x80000000", 0x80000000, r1, cv); + TESTINST1x("tst.w r1, #0x80000000", 0x7fffffff, r1, cv); + TESTINST1x("tst.w r1, #0xff000000", 0x80000000, r1, cv); + TESTINST1x("tst.w r1, #0x0dd00000", 0x7fffffff, r1, cv); + TESTCARRYEND + + printf("(T3) TEQ.W Rn, #constT [allegedly]\n"); + TESTCARRY + TESTINST1x("teq.w r1, #0xffffffff", 0x31415927, r1, cv); + TESTINST1x("teq.w r1, #0xee00ee00", 0x31415927, r1, cv); + TESTINST1x("teq.w r1, #255 ", 0, r1, cv); + TESTINST1x("teq.w r1, #0 ", 1, r1, cv); + TESTINST1x("teq.w r1, #1 ", 0, r1, cv); + TESTINST1x("teq.w r1, #0 ", -1, r1, cv); + TESTINST1x("teq.w r1, #-1 ", 0, r1, cv); + TESTINST1x("teq.w r1, #0x80000000", 0, r1, cv); + TESTINST1x("teq.w r1, #0 ", 0x80000000, r1, cv); + TESTINST1x("teq.w r1, #0x80000000", 0x80000000, r1, cv); + TESTINST1x("teq.w r1, #0x80000000", 0x7fffffff, r1, cv); + TESTINST1x("teq.w r1, #0xff000000", 0x80000000, r1, cv); + TESTINST1x("teq.w r1, #0x0dd00000", 0x7fffffff, r1, cv); + TESTCARRYEND + + printf("(T3) SUB{S}.W Rd, Rn, #constT [allegedly]\n"); + TESTCARRY + TESTINST2("subs.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("subs.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("subs.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("subs.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("subs.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("subs.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("subs.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("subs.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("subs.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("subs.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("subs.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("subs.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("subs.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTINST2("sub.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("sub.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("sub.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("sub.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("sub.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("sub.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("sub.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("sub.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("sub.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("sub.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("sub.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("sub.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("sub.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTCARRYEND + + printf("(T3) RSB{S}.W Rd, Rn, #constT [allegedly]\n"); + TESTCARRY + TESTINST2("rsbs.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("rsbs.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("rsbs.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("rsbs.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("rsbs.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("rsbs.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("rsbs.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("rsbs.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("rsbs.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("rsbs.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("rsbs.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("rsbs.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("rsbs.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTINST2("rsb.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("rsb.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("rsb.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("rsb.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("rsb.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("rsb.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("rsb.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("rsb.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("rsb.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("rsb.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("rsb.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("rsb.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("rsb.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTCARRYEND + + printf("(T3) ADC{S}.W Rd, Rn, #constT [allegedly]\n"); + TESTCARRY + TESTINST2("adcs.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("adcs.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("adcs.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("adcs.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("adcs.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("adcs.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("adcs.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("adcs.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("adcs.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("adcs.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("adcs.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("adcs.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("adcs.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTINST2("adc.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("adc.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("adc.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("adc.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("adc.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("adc.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("adc.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("adc.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("adc.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("adc.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("adc.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("adc.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("adc.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTCARRYEND + + printf("(T3) SBC{S}.W Rd, Rn, #constT [allegedly]\n"); + TESTCARRY + TESTINST2("sbcs.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("sbcs.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("sbcs.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("sbcs.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("sbcs.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("sbcs.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("sbcs.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("sbcs.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("sbcs.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("sbcs.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("sbcs.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("sbcs.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("sbcs.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTINST2("sbc.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("sbc.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("sbc.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("sbc.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("sbc.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("sbc.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("sbc.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("sbc.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("sbc.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("sbc.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("sbc.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("sbc.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("sbc.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTCARRYEND + + printf("(T3) AND{S}.W Rd, Rn, #constT [allegedly]\n"); + TESTCARRY + TESTINST2("ands.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("ands.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("ands.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("ands.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("ands.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("ands.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("ands.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("ands.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("ands.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("ands.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("ands.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("ands.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("ands.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTINST2("and.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("and.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("and.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("and.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("and.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("and.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("and.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("and.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("and.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("and.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("and.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("and.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("and.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTCARRYEND + + printf("(T3) ORR{S}.W Rd, Rn, #constT [allegedly]\n"); + TESTCARRY + TESTINST2("orrs.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("orrs.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("orrs.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("orrs.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("orrs.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("orrs.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("orrs.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("orrs.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("orrs.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("orrs.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("orrs.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("orrs.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("orrs.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTINST2("orr.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("orr.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("orr.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("orr.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("orr.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("orr.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("orr.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("orr.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("orr.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("orr.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("orr.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("orr.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("orr.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTCARRYEND + + printf("(T3) EOR{S}.W Rd, Rn, #constT [allegedly]\n"); + TESTCARRY + TESTINST2("eors.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("eors.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("eors.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("eors.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("eors.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("eors.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("eors.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("eors.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("eors.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("eors.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("eors.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("eors.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("eors.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTINST2("eor.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("eor.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("eor.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("eor.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("eor.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("eor.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("eor.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("eor.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("eor.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("eor.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("eor.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("eor.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("eor.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTCARRYEND + + printf("(T3) BIC{S}.W Rd, Rn, #constT [allegedly]\n"); + TESTCARRY + TESTINST2("bics.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("bics.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("bics.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("bics.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("bics.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("bics.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("bics.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("bics.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("bics.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("bics.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("bics.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("bics.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("bics.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTINST2("bic.w r1, r2, #0xffffffff", 0x31415927, r1, r2, cv); + TESTINST2("bic.w r1, r2, #0xee00ee00", 0x31415927, r1, r2, cv); + TESTINST2("bic.w r1, r2, #255 ", 0, r1, r2, cv); + TESTINST2("bic.w r1, r2, #0 ", 1, r1, r2, cv); + TESTINST2("bic.w r1, r2, #1 ", 0, r1, r2, cv); + TESTINST2("bic.w r1, r2, #0 ", -1, r1, r2, cv); + TESTINST2("bic.w r1, r2, #-1 ", 0, r1, r2, cv); + TESTINST2("bic.w r1, r2, #0x80000000", 0, r1, r2, cv); + TESTINST2("bic.w r1, r2, #0 ", 0x80000000, r1, r2, cv); + TESTINST2("bic.w r1, r2, #0x80000000", 0x80000000, r1, r2, cv); + TESTINST2("bic.w r1, r2, #0x80000000", 0x7fffffff, r1, r2, cv); + TESTINST2("bic.w r1, r2, #0xff000000", 0x80000000, r1, r2, cv); + TESTINST2("bic.w r1, r2, #0x0dd00000", 0x7fffffff, r1, r2, cv); + TESTCARRYEND + + printf("ADD{S}.W Rd, Rn, Rm, {shift}\n"); + TESTCARRY + TESTINST3("adds.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adds.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("add.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTCARRYEND + + printf("SUBB{S}.W Rd, Rn, Rm, {shift}\n"); + TESTCARRY + TESTINST3("subs.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("subs.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sub.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTCARRYEND + + printf("RSB{S}.W Rd, Rn, Rm, {shift}\n"); + TESTCARRY + TESTINST3("rsbs.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsbs.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("rsb.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTCARRYEND + + printf("ADC{S}.W Rd, Rn, Rm, {shift}\n"); + TESTCARRY + TESTINST3("adcs.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adcs.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("adc.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTCARRYEND + + printf("SBC{S}.W Rd, Rn, Rm, {shift}\n"); + TESTCARRY + TESTINST3("sbcs.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbcs.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("sbc.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTCARRYEND + +#if 0 + printf("XXX{S}.W Rd, Rn, Rm, {shift}\n"); + TESTCARRY + TESTINST3("xxxs.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxxs.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("xxx.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTCARRYEND +#endif + + printf("AND{S}.W Rd, Rn, Rm, {shift}\n"); + TESTCARRY + TESTINST3("ands.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("ands.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("and.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTCARRYEND + + printf("ORR{S}.W Rd, Rn, Rm, {shift}\n"); + TESTCARRY + TESTINST3("orrs.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orrs.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("orr.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTCARRYEND + + printf("EOR{S}.W Rd, Rn, Rm, {shift}\n"); + TESTCARRY + TESTINST3("eors.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eors.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("eor.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTCARRYEND + + printf("BIC{S}.W Rd, Rn, Rm, {shift}\n"); + TESTCARRY + TESTINST3("bics.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #0 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #1 ", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #15", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #31", 0x31415927, 0x27181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #0 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #1 ", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #15", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #31", 0x31415927, 0x97181728, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #15", 0, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #31", 0, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #0 ", 0, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #1 ", 0, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #15", 0, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #31", 0, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #15", 1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #31", 1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #0 ", 1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #1 ", 1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #15", 1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #31", 1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #15", 0, 1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #31", 0, 1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #0 ", 0, 1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #1 ", 0, 1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #15", 0, 1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #31", 0, 1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #15", -1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #31", -1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #0 ", -1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #1 ", -1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #15", -1, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #31", -1, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #15", 0, -1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #31", 0, -1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #0 ", 0, -1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #1 ", 0, -1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #15", 0, -1, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #31", 0, -1, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #0 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #1 ", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #15", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #31", 0, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #0 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #1 ", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #15", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #31", 0x80000000, 0, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #0 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #1 ", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #15", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #31", 0x80000000, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #15", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #31", 0x7fffffff, 0x80000000, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #0 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #1 ", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #15", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #31", 0x80000000, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bics.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsl #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, lsr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #0 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #1 ", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #15", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTINST3("bic.w r1, r2, r3, asr #31", 0x7fffffff, 0x7fffffff, r1, r2, r3, cv); + TESTCARRYEND + + printf("(T?) LSL{S}.W Rd, Rn, Rm\n"); + TESTCARRY + TESTINST3("lsls.w r1, r2, r3", 0x31415927, 0x00000000, r1, r2, r3, cv); + TESTINST3("lsls.w r1, r2, r3", 0x31415927, 0x00000001, r1, r2, r3, cv); + TESTINST3("lsls.w r1, r2, r3", 0x31415927, 0x00000002, r1, r2, r3, cv); + TESTINST3("lsls.w r1, r2, r3", 0x31415927, 0x0000000F, r1, r2, r3, cv); + TESTINST3("lsls.w r1, r2, r3", 0x31415927, 0x00000010, r1, r2, r3, cv); + TESTINST3("lsls.w r1, r2, r3", 0x31415927, 0x0000001F, r1, r2, r3, cv); + TESTINST3("lsls.w r1, r2, r3", 0x31415927, 0x00000020, r1, r2, r3, cv); + TESTINST3("lsls.w r1, r2, r3", 0x31415927, 0x00000021, r1, r2, r3, cv); + TESTINST3("lsl.w r1, r2, r3", 0x31415927, 0x00000000, r1, r2, r3, cv); + TESTINST3("lsl.w r1, r2, r3", 0x31415927, 0x00000001, r1, r2, r3, cv); + TESTINST3("lsl.w r1, r2, r3", 0x31415927, 0x00000002, r1, r2, r3, cv); + TESTINST3("lsl.w r1, r2, r3", 0x31415927, 0x0000000F, r1, r2, r3, cv); + TESTINST3("lsl.w r1, r2, r3", 0x31415927, 0x00000010, r1, r2, r3, cv); + TESTINST3("lsl.w r1, r2, r3", 0x31415927, 0x0000001F, r1, r2, r3, cv); + TESTINST3("lsl.w r1, r2, r3", 0x31415927, 0x00000020, r1, r2, r3, cv); + TESTINST3("lsl.w r1, r2, r3", 0x31415927, 0x00000021, r1, r2, r3, cv); + TESTCARRYEND + + printf("(T?) LSR{S}.W Rd, Rn, Rm\n"); + TESTCARRY + TESTINST3("lsrs.w r1, r2, r3", 0x31415927, 0x00000000, r1, r2, r3, cv); + TESTINST3("lsrs.w r1, r2, r3", 0x31415927, 0x00000001, r1, r2, r3, cv); + TESTINST3("lsrs.w r1, r2, r3", 0x31415927, 0x00000002, r1, r2, r3, cv); + TESTINST3("lsrs.w r1, r2, r3", 0x31415927, 0x0000000F, r1, r2, r3, cv); + TESTINST3("lsrs.w r1, r2, r3", 0x31415927, 0x00000010, r1, r2, r3, cv); + TESTINST3("lsrs.w r1, r2, r3", 0x31415927, 0x0000001F, r1, r2, r3, cv); + TESTINST3("lsrs.w r1, r2, r3", 0x31415927, 0x00000020, r1, r2, r3, cv); + TESTINST3("lsrs.w r1, r2, r3", 0x31415927, 0x00000021, r1, r2, r3, cv); + TESTINST3("lsr.w r1, r2, r3", 0x31415927, 0x00000000, r1, r2, r3, cv); + TESTINST3("lsr.w r1, r2, r3", 0x31415927, 0x00000001, r1, r2, r3, cv); + TESTINST3("lsr.w r1, r2, r3", 0x31415927, 0x00000002, r1, r2, r3, cv); + TESTINST3("lsr.w r1, r2, r3", 0x31415927, 0x0000000F, r1, r2, r3, cv); + TESTINST3("lsr.w r1, r2, r3", 0x31415927, 0x00000010, r1, r2, r3, cv); + TESTINST3("lsr.w r1, r2, r3", 0x31415927, 0x0000001F, r1, r2, r3, cv); + TESTINST3("lsr.w r1, r2, r3", 0x31415927, 0x00000020, r1, r2, r3, cv); + TESTINST3("lsr.w r1, r2, r3", 0x31415927, 0x00000021, r1, r2, r3, cv); + TESTCARRYEND + + printf("(T?) ASR{S}.W Rd, Rn, Rm\n"); + TESTCARRY + TESTINST3("asrs.w r1, r2, r3", 0x31415927, 0x00000000, r1, r2, r3, cv); + TESTINST3("asrs.w r1, r2, r3", 0x91415927, 0x00000001, r1, r2, r3, cv); + TESTINST3("asrs.w r1, r2, r3", 0x31415927, 0x00000002, r1, r2, r3, cv); + TESTINST3("asrs.w r1, r2, r3", 0x91415927, 0x0000000F, r1, r2, r3, cv); + TESTINST3("asrs.w r1, r2, r3", 0x31415927, 0x00000010, r1, r2, r3, cv); + TESTINST3("asrs.w r1, r2, r3", 0x91415927, 0x0000001F, r1, r2, r3, cv); + TESTINST3("asrs.w r1, r2, r3", 0x31415927, 0x00000020, r1, r2, r3, cv); + TESTINST3("asrs.w r1, r2, r3", 0x91415927, 0x00000021, r1, r2, r3, cv); + TESTINST3("asr.w r1, r2, r3", 0x31415927, 0x00000000, r1, r2, r3, cv); + TESTINST3("asr.w r1, r2, r3", 0x91415927, 0x00000001, r1, r2, r3, cv); + TESTINST3("asr.w r1, r2, r3", 0x31415927, 0x00000002, r1, r2, r3, cv); + TESTINST3("asr.w r1, r2, r3", 0x91415927, 0x0000000F, r1, r2, r3, cv); + TESTINST3("asr.w r1, r2, r3", 0x31415927, 0x00000010, r1, r2, r3, cv); + TESTINST3("asr.w r1, r2, r3", 0x91415927, 0x0000001F, r1, r2, r3, cv); + TESTINST3("asr.w r1, r2, r3", 0x31415927, 0x00000020, r1, r2, r3, cv); + TESTINST3("asr.w r1, r2, r3", 0x91415927, 0x00000021, r1, r2, r3, cv); + TESTCARRYEND + +#if 0 + // not handled by vex + printf("(T?) ROR{S}.W Rd, Rn, Rm\n"); + TESTCARRY + TESTINST3("rors.w r1, r2, r3", 0x31415927, 0x00000000, r1, r2, r3, cv); + TESTINST3("rors.w r1, r2, r3", 0x31415927, 0x00000001, r1, r2, r3, cv); + TESTINST3("rors.w r1, r2, r3", 0x31415927, 0x00000002, r1, r2, r3, cv); + TESTINST3("rors.w r1, r2, r3", 0x31415927, 0x0000000F, r1, r2, r3, cv); + TESTINST3("rors.w r1, r2, r3", 0x31415927, 0x00000010, r1, r2, r3, cv); + TESTINST3("rors.w r1, r2, r3", 0x31415927, 0x0000001F, r1, r2, r3, cv); + TESTINST3("rors.w r1, r2, r3", 0x31415927, 0x00000020, r1, r2, r3, cv); + TESTINST3("rors.w r1, r2, r3", 0x31415927, 0x00000021, r1, r2, r3, cv); + TESTINST3("ror.w r1, r2, r3", 0x31415927, 0x00000000, r1, r2, r3, cv); + TESTINST3("ror.w r1, r2, r3", 0x31415927, 0x00000001, r1, r2, r3, cv); + TESTINST3("ror.w r1, r2, r3", 0x31415927, 0x00000002, r1, r2, r3, cv); + TESTINST3("ror.w r1, r2, r3", 0x31415927, 0x0000000F, r1, r2, r3, cv); + TESTINST3("ror.w r1, r2, r3", 0x31415927, 0x00000010, r1, r2, r3, cv); + TESTINST3("ror.w r1, r2, r3", 0x31415927, 0x0000001F, r1, r2, r3, cv); + TESTINST3("ror.w r1, r2, r3", 0x31415927, 0x00000020, r1, r2, r3, cv); + TESTINST3("ror.w r1, r2, r3", 0x31415927, 0x00000021, r1, r2, r3, cv); + TESTCARRYEND +#endif + + printf("MVN{S}.W Rd, Rn, shift, and MOV{S}.W ditto\n"); + TESTCARRY + TESTINST2("lsls.w r1, r2, #0 ", 0x7fffffff, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #1 ", 0x7fffffff, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #15", 0x7fffffff, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #31", 0x7fffffff, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #0 ", 0x7fffffff, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #1 ", 0x7fffffff, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #15", 0x7fffffff, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #31", 0x7fffffff, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #0 ", 0x7fffffff, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #1 ", 0x7fffffff, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #15", 0x7fffffff, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #31", 0x7fffffff, r1, r2, cv); + TESTINST2("rors.w r1, r2, #0 ", 0x7fffffff, r1, r2, cv); + TESTINST2("rors.w r1, r2, #1 ", 0x7fffffff, r1, r2, cv); + TESTINST2("rors.w r1, r2, #15", 0x7fffffff, r1, r2, cv); + TESTINST2("rors.w r1, r2, #31", 0x7fffffff, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #0 ", 0x7fffffff, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #1 ", 0x7fffffff, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #15", 0x7fffffff, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #31", 0x7fffffff, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #0 ", 0x7fffffff, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #1 ", 0x7fffffff, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #15", 0x7fffffff, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #31", 0x7fffffff, r1, r2, cv); + TESTINST2("asr.w r1, r2, #0 ", 0x7fffffff, r1, r2, cv); + TESTINST2("asr.w r1, r2, #1 ", 0x7fffffff, r1, r2, cv); + TESTINST2("asr.w r1, r2, #15", 0x7fffffff, r1, r2, cv); + TESTINST2("asr.w r1, r2, #31", 0x7fffffff, r1, r2, cv); + TESTINST2("ror.w r1, r2, #0 ", 0x7fffffff, r1, r2, cv); + TESTINST2("ror.w r1, r2, #1 ", 0x7fffffff, r1, r2, cv); + TESTINST2("ror.w r1, r2, #15", 0x7fffffff, r1, r2, cv); + TESTINST2("ror.w r1, r2, #31", 0x7fffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #0 ", 0x7fffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #1 ", 0x7fffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #15", 0x7fffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #31", 0x7fffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #0 ", 0x7fffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #1 ", 0x7fffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #15", 0x7fffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #31", 0x7fffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #0 ", 0x7fffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #1 ", 0x7fffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #15", 0x7fffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #31", 0x7fffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #0 ", 0x7fffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #1 ", 0x7fffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #15", 0x7fffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #31", 0x7fffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #0 ", 0x7fffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #1 ", 0x7fffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #15", 0x7fffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #31", 0x7fffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #0 ", 0x7fffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #1 ", 0x7fffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #15", 0x7fffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #31", 0x7fffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #0 ", 0x7fffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #1 ", 0x7fffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #15", 0x7fffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #31", 0x7fffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #0 ", 0x7fffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #1 ", 0x7fffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #15", 0x7fffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #31", 0x7fffffff, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #0 ", 0x00000000, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #1 ", 0x00000000, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #15", 0x00000000, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #31", 0x00000000, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #0 ", 0x00000000, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #1 ", 0x00000000, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #15", 0x00000000, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #31", 0x00000000, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #0 ", 0x00000000, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #1 ", 0x00000000, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #15", 0x00000000, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #31", 0x00000000, r1, r2, cv); + TESTINST2("rors.w r1, r2, #0 ", 0x00000000, r1, r2, cv); + TESTINST2("rors.w r1, r2, #1 ", 0x00000000, r1, r2, cv); + TESTINST2("rors.w r1, r2, #15", 0x00000000, r1, r2, cv); + TESTINST2("rors.w r1, r2, #31", 0x00000000, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #0 ", 0x00000000, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #1 ", 0x00000000, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #15", 0x00000000, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #31", 0x00000000, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #0 ", 0x00000000, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #1 ", 0x00000000, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #15", 0x00000000, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #31", 0x00000000, r1, r2, cv); + TESTINST2("asr.w r1, r2, #0 ", 0x00000000, r1, r2, cv); + TESTINST2("asr.w r1, r2, #1 ", 0x00000000, r1, r2, cv); + TESTINST2("asr.w r1, r2, #15", 0x00000000, r1, r2, cv); + TESTINST2("asr.w r1, r2, #31", 0x00000000, r1, r2, cv); + TESTINST2("ror.w r1, r2, #0 ", 0x00000000, r1, r2, cv); + TESTINST2("ror.w r1, r2, #1 ", 0x00000000, r1, r2, cv); + TESTINST2("ror.w r1, r2, #15", 0x00000000, r1, r2, cv); + TESTINST2("ror.w r1, r2, #31", 0x00000000, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #0 ", 0x00000000, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #1 ", 0x00000000, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #15", 0x00000000, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #31", 0x00000000, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #0 ", 0x00000000, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #1 ", 0x00000000, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #15", 0x00000000, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #31", 0x00000000, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #0 ", 0x00000000, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #1 ", 0x00000000, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #15", 0x00000000, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #31", 0x00000000, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #0 ", 0x00000000, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #1 ", 0x00000000, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #15", 0x00000000, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #31", 0x00000000, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #0 ", 0x00000000, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #1 ", 0x00000000, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #15", 0x00000000, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #31", 0x00000000, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #0 ", 0x00000000, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #1 ", 0x00000000, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #15", 0x00000000, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #31", 0x00000000, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #0 ", 0x00000000, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #1 ", 0x00000000, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #15", 0x00000000, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #31", 0x00000000, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #0 ", 0x00000000, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #1 ", 0x00000000, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #15", 0x00000000, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #31", 0x00000000, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #0 ", 0x00000001, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #1 ", 0x00000001, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #15", 0x00000001, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #31", 0x00000001, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #0 ", 0x00000001, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #1 ", 0x00000001, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #15", 0x00000001, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #31", 0x00000001, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #0 ", 0x00000001, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #1 ", 0x00000001, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #15", 0x00000001, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #31", 0x00000001, r1, r2, cv); + TESTINST2("rors.w r1, r2, #0 ", 0x00000001, r1, r2, cv); + TESTINST2("rors.w r1, r2, #1 ", 0x00000001, r1, r2, cv); + TESTINST2("rors.w r1, r2, #15", 0x00000001, r1, r2, cv); + TESTINST2("rors.w r1, r2, #31", 0x00000001, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #0 ", 0x00000001, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #1 ", 0x00000001, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #15", 0x00000001, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #31", 0x00000001, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #0 ", 0x00000001, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #1 ", 0x00000001, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #15", 0x00000001, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #31", 0x00000001, r1, r2, cv); + TESTINST2("asr.w r1, r2, #0 ", 0x00000001, r1, r2, cv); + TESTINST2("asr.w r1, r2, #1 ", 0x00000001, r1, r2, cv); + TESTINST2("asr.w r1, r2, #15", 0x00000001, r1, r2, cv); + TESTINST2("asr.w r1, r2, #31", 0x00000001, r1, r2, cv); + TESTINST2("ror.w r1, r2, #0 ", 0x00000001, r1, r2, cv); + TESTINST2("ror.w r1, r2, #1 ", 0x00000001, r1, r2, cv); + TESTINST2("ror.w r1, r2, #15", 0x00000001, r1, r2, cv); + TESTINST2("ror.w r1, r2, #31", 0x00000001, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #0 ", 0x00000001, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #1 ", 0x00000001, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #15", 0x00000001, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #31", 0x00000001, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #0 ", 0x00000001, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #1 ", 0x00000001, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #15", 0x00000001, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #31", 0x00000001, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #0 ", 0x00000001, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #1 ", 0x00000001, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #15", 0x00000001, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #31", 0x00000001, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #0 ", 0x00000001, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #1 ", 0x00000001, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #15", 0x00000001, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #31", 0x00000001, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #0 ", 0x00000001, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #1 ", 0x00000001, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #15", 0x00000001, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #31", 0x00000001, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #0 ", 0x00000001, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #1 ", 0x00000001, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #15", 0x00000001, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #31", 0x00000001, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #0 ", 0x00000001, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #1 ", 0x00000001, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #15", 0x00000001, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #31", 0x00000001, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #0 ", 0x00000001, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #1 ", 0x00000001, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #15", 0x00000001, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #31", 0x00000001, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #0 ", 0x9218abcd, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #1 ", 0x9218abcd, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #15", 0x9218abcd, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #31", 0x9218abcd, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #0 ", 0x9218abcd, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #1 ", 0x9218abcd, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #15", 0x9218abcd, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #31", 0x9218abcd, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #0 ", 0x9218abcd, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #1 ", 0x9218abcd, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #15", 0x9218abcd, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #31", 0x9218abcd, r1, r2, cv); + TESTINST2("rors.w r1, r2, #0 ", 0x9218abcd, r1, r2, cv); + TESTINST2("rors.w r1, r2, #1 ", 0x9218abcd, r1, r2, cv); + TESTINST2("rors.w r1, r2, #15", 0x9218abcd, r1, r2, cv); + TESTINST2("rors.w r1, r2, #31", 0x9218abcd, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #0 ", 0x9218abcd, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #1 ", 0x9218abcd, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #15", 0x9218abcd, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #31", 0x9218abcd, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #0 ", 0x9218abcd, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #1 ", 0x9218abcd, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #15", 0x9218abcd, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #31", 0x9218abcd, r1, r2, cv); + TESTINST2("asr.w r1, r2, #0 ", 0x9218abcd, r1, r2, cv); + TESTINST2("asr.w r1, r2, #1 ", 0x9218abcd, r1, r2, cv); + TESTINST2("asr.w r1, r2, #15", 0x9218abcd, r1, r2, cv); + TESTINST2("asr.w r1, r2, #31", 0x9218abcd, r1, r2, cv); + TESTINST2("ror.w r1, r2, #0 ", 0x9218abcd, r1, r2, cv); + TESTINST2("ror.w r1, r2, #1 ", 0x9218abcd, r1, r2, cv); + TESTINST2("ror.w r1, r2, #15", 0x9218abcd, r1, r2, cv); + TESTINST2("ror.w r1, r2, #31", 0x9218abcd, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #0 ", 0x9218abcd, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #1 ", 0x9218abcd, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #15", 0x9218abcd, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #31", 0x9218abcd, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #0 ", 0x9218abcd, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #1 ", 0x9218abcd, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #15", 0x9218abcd, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #31", 0x9218abcd, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #0 ", 0x9218abcd, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #1 ", 0x9218abcd, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #15", 0x9218abcd, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #31", 0x9218abcd, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #0 ", 0x9218abcd, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #1 ", 0x9218abcd, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #15", 0x9218abcd, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #31", 0x9218abcd, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #0 ", 0x9218abcd, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #1 ", 0x9218abcd, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #15", 0x9218abcd, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #31", 0x9218abcd, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #0 ", 0x9218abcd, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #1 ", 0x9218abcd, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #15", 0x9218abcd, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #31", 0x9218abcd, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #0 ", 0x9218abcd, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #1 ", 0x9218abcd, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #15", 0x9218abcd, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #31", 0x9218abcd, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #0 ", 0x9218abcd, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #1 ", 0x9218abcd, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #15", 0x9218abcd, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #31", 0x9218abcd, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #0 ", 0xffffffff, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #1 ", 0xffffffff, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #15", 0xffffffff, r1, r2, cv); + TESTINST2("lsls.w r1, r2, #31", 0xffffffff, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #0 ", 0xffffffff, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #1 ", 0xffffffff, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #15", 0xffffffff, r1, r2, cv); + TESTINST2("lsrs.w r1, r2, #31", 0xffffffff, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #0 ", 0xffffffff, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #1 ", 0xffffffff, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #15", 0xffffffff, r1, r2, cv); + TESTINST2("asrs.w r1, r2, #31", 0xffffffff, r1, r2, cv); + TESTINST2("rors.w r1, r2, #0 ", 0xffffffff, r1, r2, cv); + TESTINST2("rors.w r1, r2, #1 ", 0xffffffff, r1, r2, cv); + TESTINST2("rors.w r1, r2, #15", 0xffffffff, r1, r2, cv); + TESTINST2("rors.w r1, r2, #31", 0xffffffff, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #0 ", 0xffffffff, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #1 ", 0xffffffff, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #15", 0xffffffff, r1, r2, cv); + TESTINST2("lsl.w r1, r2, #31", 0xffffffff, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #0 ", 0xffffffff, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #1 ", 0xffffffff, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #15", 0xffffffff, r1, r2, cv); + TESTINST2("lsr.w r1, r2, #31", 0xffffffff, r1, r2, cv); + TESTINST2("asr.w r1, r2, #0 ", 0xffffffff, r1, r2, cv); + TESTINST2("asr.w r1, r2, #1 ", 0xffffffff, r1, r2, cv); + TESTINST2("asr.w r1, r2, #15", 0xffffffff, r1, r2, cv); + TESTINST2("asr.w r1, r2, #31", 0xffffffff, r1, r2, cv); + TESTINST2("ror.w r1, r2, #0 ", 0xffffffff, r1, r2, cv); + TESTINST2("ror.w r1, r2, #1 ", 0xffffffff, r1, r2, cv); + TESTINST2("ror.w r1, r2, #15", 0xffffffff, r1, r2, cv); + TESTINST2("ror.w r1, r2, #31", 0xffffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #0 ", 0xffffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #1 ", 0xffffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #15", 0xffffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsl #31", 0xffffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #0 ", 0xffffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #1 ", 0xffffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #15", 0xffffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, lsr #31", 0xffffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #0 ", 0xffffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #1 ", 0xffffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #15", 0xffffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, asr #31", 0xffffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #0 ", 0xffffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #1 ", 0xffffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #15", 0xffffffff, r1, r2, cv); + TESTINST2("mvns.w r1, r2, ror #31", 0xffffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #0 ", 0xffffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #1 ", 0xffffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #15", 0xffffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsl #31", 0xffffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #0 ", 0xffffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #1 ", 0xffffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #15", 0xffffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, lsr #31", 0xffffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #0 ", 0xffffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #1 ", 0xffffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #15", 0xffffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, asr #31", 0xffffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #0 ", 0xffffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #1 ", 0xffffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #15", 0xffffffff, r1, r2, cv); + TESTINST2("mvn.w r1, r2, ror #31", 0xffffffff, r1, r2, cv); + TESTCARRYEND + + printf("(T?) TST.W Rn, Rm, {shift}\n"); + TESTCARRY + TESTINST2x("tst.w r1, r2, lsl #1", 0x11223344, 0x99887766, r1, r2, cv); + TESTINST2x("tst.w r1, r2, lsr #1", 0x11223344, 0x99887766, r1, r2, cv); + TESTINST2x("tst.w r1, r2, asr #1", 0x11223344, 0x99887766, r1, r2, cv); + TESTINST2x("tst.w r1, r2, ror #1", 0x11223344, 0x99887766, r1, r2, cv); + TESTINST2x("tst.w r1, r2, lsl #1", 0x11223344, 0x00000000, r1, r2, cv); + TESTINST2x("tst.w r1, r2, lsr #1", 0x11223344, 0x00000000, r1, r2, cv); + TESTINST2x("tst.w r1, r2, asr #1", 0x11223344, 0x00000000, r1, r2, cv); + TESTINST2x("tst.w r1, r2, ror #1", 0x11223344, 0x00000000, r1, r2, cv); + TESTINST2x("tst.w r1, r2, lsl #1", 0x91223344, 0x40000000, r1, r2, cv); + TESTINST2x("tst.w r1, r2, lsr #1", 0x91223344, 0x40000000, r1, r2, cv); + TESTINST2x("tst.w r1, r2, asr #1", 0x91223344, 0x80000000, r1, r2, cv); + TESTINST2x("tst.w r1, r2, ror #1", 0x91223344, 0x00000001, r1, r2, cv); + TESTCARRYEND + + printf("(T?) TEQ.W Rn, Rm, {shift}\n"); + TESTCARRY + TESTINST2x("teq.w r1, r2, lsl #1", 0x11223344, 0x99887766, r1, r2, cv); + TESTINST2x("teq.w r1, r2, lsr #1", 0x11223344, 0x99887766, r1, r2, cv); + TESTINST2x("teq.w r1, r2, asr #1", 0x11223344, 0x99887766, r1, r2, cv); + TESTINST2x("teq.w r1, r2, ror #1", 0x11223344, 0x99887766, r1, r2, cv); + TESTINST2x("teq.w r1, r2, lsl #1", 0x11223344, 0x00000000, r1, r2, cv); + TESTINST2x("teq.w r1, r2, lsr #1", 0x11223344, 0x00000000, r1, r2, cv); + TESTINST2x("teq.w r1, r2, asr #1", 0x11223344, 0x00000000, r1, r2, cv); + TESTINST2x("teq.w r1, r2, ror #1", 0x11223344, 0x00000000, r1, r2, cv); + TESTINST2x("teq.w r1, r2, lsl #1", 0x91223344, 0x40000000, r1, r2, cv); + TESTINST2x("teq.w r1, r2, lsr #1", 0x91223344, 0x40000000, r1, r2, cv); + TESTINST2x("teq.w r1, r2, asr #1", 0x91223344, 0x80000000, r1, r2, cv); + TESTINST2x("teq.w r1, r2, ror #1", 0x91223344, 0x00000001, r1, r2, cv); + TESTCARRYEND + + printf("(T?) CMP.W Rn, Rm, {shift}\n"); + TESTCARRY + TESTINST2x("cmp.w r1, r2, lsl #1", 0x11223344, 0x99887766, r1, r2, cv); + TESTINST2x("cmp.w r1, r2, lsr #1", 0x11223344, 0x99887766, r1, r2, cv); + TESTINST2x("cmp.w r1, r2, asr #1", 0x11223344, 0x99887766, r1, r2, cv); + TESTINST2x("cmp.w r1, r2, ror #1", 0x11223344, 0x99887766, r1, r2, cv); + TESTINST2x("cmp.w r1, r2, lsl #1", 0x11223344, 0x00000000, r1, r2, cv); + TESTINST2x("cmp.w r1, r2, lsr #1", 0x11223344, 0x00000000, r1, r2, cv); + TESTINST2x("cmp.w r1, r2, asr #1", 0x11223344, 0x00000000, r1, r2, cv); + TESTINST2x("cmp.w r1, r2, ror #1", 0x11223344, 0x00000000, r1, r2, cv); + TESTINST2x("cmp.w r1, r2, lsl #1", 0x91223344, 0x40000000, r1, r2, cv); + TESTINST2x("cmp.w r1, r2, lsr #1", 0x91223344, 0x40000000, r1, r2, cv); + TESTINST2x("cmp.w r1, r2, asr #1", 0x91223344, 0x80000000, r1, r2, cv); + TESTINST2x("cmp.w r1, r2, ror #1", 0x91223344, 0x00000001, r1, r2, cv); + TESTINST2x("cmp.w r1, r2, lsr #2", 0x15555555, 0x55555555, r1, r2, cv); + TESTINST2x("cmp.w r1, r2, ror #1", 0x55555555, 0xaaaaaaaa, r1, r2, cv); + TESTCARRYEND + + printf("(T?) CMN.W Rn, Rm, {shift}\n"); + TESTCARRY + TESTINST2x("cmn.w r1, r2, lsl #1", 0x11223344, 0x99887766, r1, r2, cv); + TESTINST2x("cmn.w r1, r2, lsr #1", 0x11223344, 0x99887766, r1, r2, cv); + TESTINST2x("cmn.w r1, r2, asr #1", 0x11223344, 0x99887766, r1, r2, cv); + TESTINST2x("cmn.w r1, r2, ror #1", 0x11223344, 0x99887766, r1, r2, cv); + TESTINST2x("cmn.w r1, r2, lsl #1", 0x11223344, 0x00000000, r1, r2, cv); + TESTINST2x("cmn.w r1, r2, lsr #1", 0x11223344, 0x00000000, r1, r2, cv); + TESTINST2x("cmn.w r1, r2, asr #1", 0x11223344, 0x00000000, r1, r2, cv); + TESTINST2x("cmn.w r1, r2, ror #1", 0x11223344, 0x00000000, r1, r2, cv); + TESTINST2x("cmn.w r1, r2, lsl #1", 0x91223344, 0x40000000, r1, r2, cv); + TESTINST2x("cmn.w r1, r2, lsr #1", 0x91223344, 0x40000000, r1, r2, cv); + TESTINST2x("cmn.w r1, r2, asr #1", 0x91223344, 0x80000000, r1, r2, cv); + TESTINST2x("cmn.w r1, r2, ror #1", 0x91223344, 0x00000001, r1, r2, cv); + TESTINST2x("cmn.w r1, r2, lsr #2", 0x15555555, 0x55555555, r1, r2, cv); + TESTINST2x("cmn.w r1, r2, ror #1", 0x55555555, 0xaaaaaaaa, r1, r2, cv); + TESTCARRYEND + + printf("(T2) MOV{S}.W Rd, #constT\n"); + TESTCARRY + TESTINST1("movs.w r9, 0x00000000", r9, cv); + TESTINST1("movs.w r9, 0x000000FF", r9, cv); + TESTINST1("movs.w r9, 0x0000007F", r9, cv); + TESTINST1("movs.w r9, 0x00FF00FF", r9, cv); + TESTINST1("movs.w r9, 0x007F007F", r9, cv); + TESTINST1("movs.w r9, 0x43434343", r9, cv); + TESTINST1("movs.w r9, 0x93939393", r9, cv); + TESTINST1("movs.w r9, 0x93000000", r9, cv); + TESTINST1("movs.w r9, 0x43000000", r9, cv); + TESTINST1("movs.w r9, 0x09300000", r9, cv); + TESTINST1("movs.w r9, 0x04300000", r9, cv); + TESTINST1("movs.w r9, 0x00930000", r9, cv); + TESTINST1("movs.w r9, 0x00430000", r9, cv); + TESTINST1("movs.w r9, 0x00000930", r9, cv); + TESTINST1("movs.w r9, 0x00000430", r9, cv); + TESTINST1("movs.w r9, 0x00000093", r9, cv); + TESTINST1("movs.w r9, 0x00000043", r9, cv); + TESTINST1("mov.w r9, 0x00000000", r9, cv); + TESTINST1("mov.w r9, 0x000000FF", r9, cv); + TESTINST1("mov.w r9, 0x0000007F", r9, cv); + TESTINST1("mov.w r9, 0x00FF00FF", r9, cv); + TESTINST1("mov.w r9, 0x007F007F", r9, cv); + TESTINST1("mov.w r9, 0x43434343", r9, cv); + TESTINST1("mov.w r9, 0x93939393", r9, cv); + TESTINST1("mov.w r9, 0x93000000", r9, cv); + TESTINST1("mov.w r9, 0x43000000", r9, cv); + TESTINST1("mov.w r9, 0x09300000", r9, cv); + TESTINST1("mov.w r9, 0x04300000", r9, cv); + TESTINST1("mov.w r9, 0x00930000", r9, cv); + TESTINST1("mov.w r9, 0x00430000", r9, cv); + TESTINST1("mov.w r9, 0x00000930", r9, cv); + TESTINST1("mov.w r9, 0x00000430", r9, cv); + TESTINST1("mov.w r9, 0x00000093", r9, cv); + TESTINST1("mov.w r9, 0x00000043", r9, cv); + TESTCARRYEND + + printf("(T2) MVN{S}.W Rd, #constT\n"); + TESTCARRY + TESTINST1("mvns.w r9, 0x00000000", r9, cv); + TESTINST1("mvns.w r9, 0x000000FF", r9, cv); + TESTINST1("mvns.w r9, 0x0000007F", r9, cv); + TESTINST1("mvns.w r9, 0x00FF00FF", r9, cv); + TESTINST1("mvns.w r9, 0x007F007F", r9, cv); + TESTINST1("mvns.w r9, 0x43434343", r9, cv); + TESTINST1("mvns.w r9, 0x93939393", r9, cv); + TESTINST1("mvns.w r9, 0x93000000", r9, cv); + TESTINST1("mvns.w r9, 0x43000000", r9, cv); + TESTINST1("mvns.w r9, 0x09300000", r9, cv); + TESTINST1("mvns.w r9, 0x04300000", r9, cv); + TESTINST1("mvns.w r9, 0x00930000", r9, cv); + TESTINST1("mvns.w r9, 0x00430000", r9, cv); + TESTINST1("mvns.w r9, 0x00000930", r9, cv); + TESTINST1("mvns.w r9, 0x00000430", r9, cv); + TESTINST1("mvns.w r9, 0x00000093", r9, cv); + TESTINST1("mvns.w r9, 0x00000043", r9, cv); + TESTINST1("mvn.w r9, 0x00000000", r9, cv); + TESTINST1("mvn.w r9, 0x000000FF", r9, cv); + TESTINST1("mvn.w r9, 0x0000007F", r9, cv); + TESTINST1("mvn.w r9, 0x00FF00FF", r9, cv); + TESTINST1("mvn.w r9, 0x007F007F", r9, cv); + TESTINST1("mvn.w r9, 0x43434343", r9, cv); + TESTINST1("mvn.w r9, 0x93939393", r9, cv); + TESTINST1("mvn.w r9, 0x93000000", r9, cv); + TESTINST1("mvn.w r9, 0x43000000", r9, cv); + TESTINST1("mvn.w r9, 0x09300000", r9, cv); + TESTINST1("mvn.w r9, 0x04300000", r9, cv); + TESTINST1("mvn.w r9, 0x00930000", r9, cv); + TESTINST1("mvn.w r9, 0x00430000", r9, cv); + TESTINST1("mvn.w r9, 0x00000930", r9, cv); + TESTINST1("mvn.w r9, 0x00000430", r9, cv); + TESTINST1("mvn.w r9, 0x00000093", r9, cv); + TESTINST1("mvn.w r9, 0x00000043", r9, cv); + TESTCARRYEND + + // plus whatever stuff we can throw in from the old ARM test program + old_main(); + + return 0; +}