From: Nicholas Nethercote Date: Wed, 11 Feb 2004 23:33:29 +0000 (+0000) Subject: Heroic patch from Tom Hughes: X-Git-Tag: svn/VALGRIND_2_1_1~66 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4c8ecb23c35022bbd8e54579084100a21cf9e8de;p=thirdparty%2Fvalgrind.git Heroic patch from Tom Hughes: This patch adds translation tests for most of the basic x86 instructions and fixes a few missing/broken instructions to work properly. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2242 --- diff --git a/coregrind/vg_from_ucode.c b/coregrind/vg_from_ucode.c index bb24e69aea..859d098a5e 100644 --- a/coregrind/vg_from_ucode.c +++ b/coregrind/vg_from_ucode.c @@ -4217,7 +4217,7 @@ static void emitUInstr ( UCodeBlock* cb, Int i, break; case SSE2a1_MemRd: - vg_assert(u->size == 4 || u->size == 16); + vg_assert(u->size == 4 || u->size == 8 || u->size == 16); vg_assert(u->tag1 == Lit16); vg_assert(u->tag2 == Lit16); vg_assert(u->tag3 == RealReg); diff --git a/coregrind/vg_helpers.S b/coregrind/vg_helpers.S index d5a8e87e8a..291c88b87d 100644 --- a/coregrind/vg_helpers.S +++ b/coregrind/vg_helpers.S @@ -315,13 +315,66 @@ VG_(helper_DAA): ret +/* Similarly, do %ax = AAS(%ax). */ +.global VG_(helper_AAS) +VG_(helper_AAS): + pushl %eax + movl 8(%esp), %eax + aas + movl %eax, 8(%esp) + popl %eax + ret + + +/* Similarly, do %ax = AAA(%ax). */ +.global VG_(helper_AAA) +VG_(helper_AAA): + pushl %eax + movl 8(%esp), %eax + aaa + movl %eax, 8(%esp) + popl %eax + ret + + +/* Similarly, do %ax = AAD(%ax). */ +.global VG_(helper_AAD) +VG_(helper_AAD): + pushl %eax + movl 8(%esp), %eax + aad + movl %eax, 8(%esp) + popl %eax + ret + + +/* Similarly, do %ax = AAM(%ax). */ +.global VG_(helper_AAM) +VG_(helper_AAM): + pushl %eax + movl 8(%esp), %eax + aam + movl %eax, 8(%esp) + popl %eax + ret + + /* Bit scan forwards/reverse. Sets flags (??). On entry: value, replaced by result RA <- %esp */ -.global VG_(helper_bsr) -VG_(helper_bsr): +.global VG_(helper_bsrw) +VG_(helper_bsrw): + pushl %eax + movw 12(%esp), %ax + bsrw 8(%esp), %ax + movw %ax, 12(%esp) + popl %eax + ret + +.global VG_(helper_bsrl) +VG_(helper_bsrl): pushl %eax movl 12(%esp), %eax bsrl 8(%esp), %eax @@ -329,8 +382,17 @@ VG_(helper_bsr): popl %eax ret -.global VG_(helper_bsf) -VG_(helper_bsf): +.global VG_(helper_bsfw) +VG_(helper_bsfw): + pushl %eax + movw 12(%esp), %ax + bsfw 8(%esp), %ax + movw %ax, 12(%esp) + popl %eax + ret + +.global VG_(helper_bsfl) +VG_(helper_bsfl): pushl %eax movl 12(%esp), %eax bsfl 8(%esp), %eax @@ -448,7 +510,7 @@ VG_(helper_STD): popl %eax ret -/* Clear/set the carry flag. */ +/* Clear/set/complement the carry flag. */ .global VG_(helper_CLC) VG_(helper_CLC): clc @@ -459,6 +521,11 @@ VG_(helper_STC): stc ret +.global VG_(helper_CMC) +VG_(helper_CMC): + cmc + ret + /* Signed 32-to-64 multiply. */ .globl VG_(helper_imul_32_64) VG_(helper_imul_32_64): diff --git a/coregrind/vg_include.h b/coregrind/vg_include.h index c2d46b4d81..f69969925d 100644 --- a/coregrind/vg_include.h +++ b/coregrind/vg_include.h @@ -1656,6 +1656,7 @@ extern void VG_(helper_get_dirflag); extern void VG_(helper_CLC); extern void VG_(helper_STC); +extern void VG_(helper_CMC); extern void VG_(helper_shldl); extern void VG_(helper_shldw); @@ -1668,14 +1669,20 @@ extern void VG_(helper_OUT); extern void VG_(helper_RDTSC); extern void VG_(helper_CPUID); -extern void VG_(helper_bsf); -extern void VG_(helper_bsr); +extern void VG_(helper_bsfw); +extern void VG_(helper_bsfl); +extern void VG_(helper_bsrw); +extern void VG_(helper_bsrl); extern void VG_(helper_fstsw_AX); extern void VG_(helper_SAHF); extern void VG_(helper_LAHF); extern void VG_(helper_DAS); extern void VG_(helper_DAA); +extern void VG_(helper_AAS); +extern void VG_(helper_AAA); +extern void VG_(helper_AAD); +extern void VG_(helper_AAM); extern void VG_(helper_cmpxchg8b); diff --git a/coregrind/vg_main.c b/coregrind/vg_main.c index 08a6fe4575..f4f95bab93 100644 --- a/coregrind/vg_main.c +++ b/coregrind/vg_main.c @@ -2143,6 +2143,7 @@ Int VGOFF_(helper_STD) = INVALID_OFFSET; Int VGOFF_(helper_get_dirflag) = INVALID_OFFSET; Int VGOFF_(helper_CLC) = INVALID_OFFSET; Int VGOFF_(helper_STC) = INVALID_OFFSET; +Int VGOFF_(helper_CMC) = INVALID_OFFSET; Int VGOFF_(helper_shldl) = INVALID_OFFSET; Int VGOFF_(helper_shldw) = INVALID_OFFSET; Int VGOFF_(helper_shrdl) = INVALID_OFFSET; @@ -2152,13 +2153,19 @@ Int VGOFF_(helper_OUT) = INVALID_OFFSET; Int VGOFF_(helper_RDTSC) = INVALID_OFFSET; Int VGOFF_(helper_CPUID) = INVALID_OFFSET; Int VGOFF_(helper_BSWAP) = INVALID_OFFSET; -Int VGOFF_(helper_bsf) = INVALID_OFFSET; -Int VGOFF_(helper_bsr) = INVALID_OFFSET; +Int VGOFF_(helper_bsfw) = INVALID_OFFSET; +Int VGOFF_(helper_bsfl) = INVALID_OFFSET; +Int VGOFF_(helper_bsrw) = INVALID_OFFSET; +Int VGOFF_(helper_bsrl) = INVALID_OFFSET; Int VGOFF_(helper_fstsw_AX) = INVALID_OFFSET; Int VGOFF_(helper_SAHF) = INVALID_OFFSET; Int VGOFF_(helper_LAHF) = INVALID_OFFSET; Int VGOFF_(helper_DAS) = INVALID_OFFSET; Int VGOFF_(helper_DAA) = INVALID_OFFSET; +Int VGOFF_(helper_AAS) = INVALID_OFFSET; +Int VGOFF_(helper_AAA) = INVALID_OFFSET; +Int VGOFF_(helper_AAD) = INVALID_OFFSET; +Int VGOFF_(helper_AAM) = INVALID_OFFSET; Int VGOFF_(helper_cmpxchg8b) = INVALID_OFFSET; Int VGOFF_(helper_undefined_instruction) = INVALID_OFFSET; @@ -2437,17 +2444,21 @@ static void init_baseBlock ( Addr client_eip, Addr esp_at_startup ) HELPER(get_dirflag); HELPER(CLC); HELPER(STC); + HELPER(CMC); HELPER(shldl); HELPER(shldw); HELPER(shrdl); HELPER(shrdw); HELPER(RDTSC); HELPER(CPUID); - HELPER(bsf); HELPER(bsr); + HELPER(bsfw); HELPER(bsfl); + HELPER(bsrw); HELPER(bsrl); HELPER(fstsw_AX); HELPER(SAHF); HELPER(LAHF); HELPER(DAS); HELPER(DAA); + HELPER(AAS); HELPER(AAA); + HELPER(AAD); HELPER(AAM); HELPER(IN); HELPER(OUT); HELPER(cmpxchg8b); diff --git a/coregrind/vg_to_ucode.c b/coregrind/vg_to_ucode.c index ae06d21e74..0b4f59d633 100644 --- a/coregrind/vg_to_ucode.c +++ b/coregrind/vg_to_ucode.c @@ -2687,10 +2687,7 @@ Addr dis_bt_G_E ( UCodeBlock* cb, Int t_addr, t_bitno, t_mask, t_fetched, t_esp, temp, lit; - /* 2 and 4 are actually possible. */ vg_assert(sz == 2 || sz == 4); - /* We only handle 4. */ - vg_assert(sz == 4); t_addr = t_bitno = t_mask = t_fetched = t_esp = temp = INVALID_TEMPREG; @@ -2704,18 +2701,24 @@ Addr dis_bt_G_E ( UCodeBlock* cb, uInstr2(cb, GET, sz, ArchReg, gregOfRM(modrm), TempReg, t_bitno); + if (sz == 2) { + uInstr1(cb, WIDEN, 4, TempReg, t_bitno); + LAST_UINSTR(cb).extra4b = 2; + LAST_UINSTR(cb).signed_widen = False; + } + if (epartIsReg(modrm)) { eip++; /* Get it onto the client's stack. */ t_esp = newTemp(cb); t_addr = newTemp(cb); uInstr2(cb, GET, 4, ArchReg, R_ESP, TempReg, t_esp); - uInstr2(cb, SUB, sz, Literal, 0, TempReg, t_esp); + uInstr2(cb, SUB, 4, Literal, 0, TempReg, t_esp); uLiteral(cb, sz); uInstr2(cb, PUT, 4, TempReg, t_esp, ArchReg, R_ESP); uInstr2(cb, GET, sz, ArchReg, eregOfRM(modrm), TempReg, temp); uInstr2(cb, STORE, sz, TempReg, temp, TempReg, t_esp); - /* Make ta point at it. */ + /* Make t_addr point at it. */ uInstr2(cb, MOV, 4, TempReg, t_esp, TempReg, t_addr); /* Mask out upper bits of the shift amount, since we're doing a reg. */ @@ -2728,7 +2731,7 @@ Addr dis_bt_G_E ( UCodeBlock* cb, eip += HI8(pair); } - /* At this point: ta points to the address being operated on. If + /* At this point: t_addr points to the address being operated on. If it was a reg, we will have pushed it onto the client's stack. t_bitno is the bit number, suitable masked in the case of a reg. */ @@ -2738,12 +2741,12 @@ Addr dis_bt_G_E ( UCodeBlock* cb, uInstr2(cb, SAR, 4, Literal, 0, TempReg, temp); uLiteral(cb, 3); uInstr2(cb, ADD, 4, TempReg, temp, TempReg, t_addr); - /* ta now holds effective address */ + /* t_addr now holds effective address */ uInstr2(cb, MOV, 4, Literal, 0, TempReg, lit); uLiteral(cb, 7); uInstr2(cb, AND, 4, TempReg, lit, TempReg, t_bitno); - /* bitno contains offset of bit within byte */ + /* t_bitno contains offset of bit within byte */ if (op != BtOpNone) { t_mask = newTemp(cb); @@ -2751,7 +2754,7 @@ Addr dis_bt_G_E ( UCodeBlock* cb, uLiteral(cb, 1); uInstr2(cb, SHL, 4, TempReg, t_bitno, TempReg, t_mask); } - /* mask is now a suitable byte mask */ + /* t_mask is now a suitable byte mask */ uInstr2(cb, LOAD, 1, TempReg, t_addr, TempReg, t_fetched); if (op != BtOpNone) { @@ -2781,20 +2784,20 @@ Addr dis_bt_G_E ( UCodeBlock* cb, uInstr2(cb, MOV, 4, Literal, 0, TempReg, lit); uLiteral(cb, 1); uInstr2(cb, AND, 4, TempReg, lit, TempReg, t_fetched); - /* fetched is now 1 or 0 */ + /* t_fetched is now 1 or 0 */ /* NEG is a handy way to convert zero/nonzero into the carry flag. */ uInstr1(cb, NEG, 4, TempReg, t_fetched); setFlagsFromUOpcode(cb, NEG); - /* fetched is now in carry flag */ + /* t_fetched is now in carry flag */ /* Move reg operand from stack back to reg */ if (epartIsReg(modrm)) { /* t_esp still points at it. */ uInstr2(cb, LOAD, sz, TempReg, t_esp, TempReg, temp); uInstr2(cb, PUT, sz, TempReg, temp, ArchReg, eregOfRM(modrm)); - uInstr2(cb, ADD, sz, Literal, 0, TempReg, t_esp); + uInstr2(cb, ADD, 4, Literal, 0, TempReg, t_esp); uLiteral(cb, sz); uInstr2(cb, PUT, 4, TempReg, t_esp, ArchReg, R_ESP); } @@ -2821,9 +2824,12 @@ Addr dis_bs_E_G ( UCodeBlock* cb, Bool isReg; vg_assert(sz == 2 || sz == 4); - vg_assert(sz==4); - helper = fwds ? VGOFF_(helper_bsf) : VGOFF_(helper_bsr); + if (fwds) + helper = sz == 2 ? VGOFF_(helper_bsfw) : VGOFF_(helper_bsfl); + else + helper = sz == 2 ? VGOFF_(helper_bsrw) : VGOFF_(helper_bsrl); + modrm = getUChar(eip); t1 = newTemp(cb); t = newTemp(cb); @@ -4201,7 +4207,7 @@ static Addr disInstr ( UCodeBlock* cb, Addr eip, Bool* isEnd ) /* PSHUFW */ if (sz == 4 && insn[0] == 0x0F && insn[1] == 0x70) { - eip = dis_SSE2_reg_or_mem_Imm8 ( cb, sorb, eip+2, 16, + eip = dis_SSE2_reg_or_mem_Imm8 ( cb, sorb, eip+2, 8, "pshufw", insn[0], insn[1] ); goto decode_success; @@ -5289,13 +5295,53 @@ static Addr disInstr ( UCodeBlock* cb, Addr eip, Bool* isEnd ) uInstr1(cb, PUSH, 4, TempReg, t1); uInstr1(cb, CALLM, 0, Lit16, opc == 0x27 ? VGOFF_(helper_DAA) : VGOFF_(helper_DAS) ); - uFlagsRWU(cb, FlagsAC, FlagsOSZACP, FlagsEmpty); + uFlagsRWU(cb, FlagsAC, FlagsSZACP, FlagO); uInstr1(cb, POP, 4, TempReg, t1); uInstr0(cb, CALLM_E, 0); uInstr2(cb, PUT, 1, TempReg, t1, ArchReg, R_AL); DIP(opc == 0x27 ? "daa\n" : "das\n"); break; + case 0x37: /* AAA */ + case 0x3F: /* AAS */ + t1 = newTemp(cb); + uInstr2(cb, GET, 2, ArchReg, R_EAX, TempReg, t1); + /* Widen %AL to 32 bits, so it's all defined when we push it. */ + uInstr1(cb, WIDEN, 4, TempReg, t1); + LAST_UINSTR(cb).extra4b = 2; + LAST_UINSTR(cb).signed_widen = False; + uInstr0(cb, CALLM_S, 0); + uInstr1(cb, PUSH, 4, TempReg, t1); + uInstr1(cb, CALLM, 0, Lit16, + opc == 0x37 ? VGOFF_(helper_AAA) : VGOFF_(helper_AAS) ); + uFlagsRWU(cb, FlagA, FlagsAC, FlagsEmpty); + uInstr1(cb, POP, 4, TempReg, t1); + uInstr0(cb, CALLM_E, 0); + uInstr2(cb, PUT, 2, TempReg, t1, ArchReg, R_EAX); + DIP(opc == 0x37 ? "aaa\n" : "aas\n"); + break; + + case 0xD4: /* AAM */ + case 0xD5: /* AAD */ + d32 = getUChar(eip); eip++; + if (d32 != 10) VG_(core_panic)("disInstr: AAM/AAD but base not 10 !"); + t1 = newTemp(cb); + uInstr2(cb, GET, 2, ArchReg, R_EAX, TempReg, t1); + /* Widen %AX to 32 bits, so it's all defined when we push it. */ + uInstr1(cb, WIDEN, 4, TempReg, t1); + LAST_UINSTR(cb).extra4b = 2; + LAST_UINSTR(cb).signed_widen = False; + uInstr0(cb, CALLM_S, 0); + uInstr1(cb, PUSH, 4, TempReg, t1); + uInstr1(cb, CALLM, 0, Lit16, + opc == 0xD4 ? VGOFF_(helper_AAM) : VGOFF_(helper_AAD) ); + uFlagsRWU(cb, FlagsEmpty, FlagsSZP, FlagsEmpty); + uInstr1(cb, POP, 4, TempReg, t1); + uInstr0(cb, CALLM_E, 0); + uInstr2(cb, PUT, 2, TempReg, t1, ArchReg, R_EAX); + DIP(opc == 0xD4 ? "aam\n" : "aad\n"); + break; + /* ------------------------ CWD/CDQ -------------------- */ case 0x98: /* CBW */ @@ -5654,6 +5700,9 @@ static Addr disInstr ( UCodeBlock* cb, Addr eip, Bool* isEnd ) case 0x1C: /* SBB Ib, AL */ eip = dis_op_imm_A(cb, 1, SBB, True, eip, "sbb" ); break; + case 0x1D: /* SBB Iv, eAX */ + eip = dis_op_imm_A(cb, sz, SBB, True, eip, "sbb" ); + break; case 0x24: /* AND Ib, AL */ eip = dis_op_imm_A(cb, 1, AND, True, eip, "and" ); @@ -5778,6 +5827,9 @@ static Addr disInstr ( UCodeBlock* cb, Addr eip, Bool* isEnd ) eip = dis_op2_G_E ( cb, sorb, ADC, True, sz, eip, "adc" ); break; + case 0x18: /* SBB Gb,Eb */ + eip = dis_op2_G_E ( cb, sorb, SBB, True, 1, eip, "sbb" ); + break; case 0x19: /* SBB Gv,Ev */ eip = dis_op2_G_E ( cb, sorb, SBB, True, sz, eip, "sbb" ); break; @@ -6095,11 +6147,19 @@ static Addr disInstr ( UCodeBlock* cb, Addr eip, Bool* isEnd ) case 0xF9: /* STC */ uInstr0(cb, CALLM_S, 0); uInstr1(cb, CALLM, 0, Lit16, VGOFF_(helper_STC)); - uFlagsRWU(cb, FlagsEmpty, FlagC, FlagsOSZCP); + uFlagsRWU(cb, FlagsEmpty, FlagC, FlagsOSZAP); uInstr0(cb, CALLM_E, 0); DIP("stc\n"); break; + case 0xF5: /* CMC */ + uInstr0(cb, CALLM_S, 0); + uInstr1(cb, CALLM, 0, Lit16, VGOFF_(helper_CMC)); + uFlagsRWU(cb, FlagC, FlagC, FlagsOSZAP); + uInstr0(cb, CALLM_E, 0); + DIP("cmc\n"); + break; + case 0xF2: { /* REPNE prefix insn */ Addr eip_orig = eip - 1; vg_assert(sorb == 0); @@ -6685,6 +6745,9 @@ static Addr disInstr ( UCodeBlock* cb, Addr eip, Bool* isEnd ) /* =-=-=-=-=-=-=-=-=- CMPXCHG -=-=-=-=-=-=-=-=-=-= */ + case 0xC0: /* XADD Gb,Eb */ + eip = dis_xadd_G_E ( cb, sorb, 1, eip ); + break; case 0xC1: /* XADD Gv,Ev */ eip = dis_xadd_G_E ( cb, sorb, sz, eip ); break; diff --git a/coregrind/vg_translate.c b/coregrind/vg_translate.c index 58e70def34..faaf8776ba 100644 --- a/coregrind/vg_translate.c +++ b/coregrind/vg_translate.c @@ -567,7 +567,7 @@ Bool VG_(saneUInstr) ( Bool beforeRA, Bool beforeLiveness, UInstr* u ) /* Fields checked: lit32 size flags_r/w tag1 tag2 tag3 (rest) */ case SSE2a_MemWr: return LIT0 && SZsse2 && CC0 && Ls1 && Ls2 && TR3 && XOTHER; case SSE2a_MemRd: return LIT0 && SZsse2 && CCa && Ls1 && Ls2 && TR3 && XOTHER; - case SSE2a1_MemRd: return LIT0 && SZ416 && CC0 && Ls1 && Ls2 && TR3 && XOTHER; + case SSE2a1_MemRd: return LIT0 && SZsse3 && CC0 && Ls1 && Ls2 && TR3 && XOTHER; case SSE2g_RegWr: return LIT0 && SZ4 && CC0 && Ls1 && Ls2 && TR3 && XOTHER; case SSE2g1_RegWr: return LIT8 && SZ4 && CC0 && Ls1 && Ls2 && TR3 && XOTHER; case SSE2e1_RegRd: return LIT8 && SZ2 && CC0 && Ls1 && Ls2 && TR3 && XOTHER; diff --git a/include/vg_skin.h.base b/include/vg_skin.h.base index dd61569fb6..c294a45680 100644 --- a/include/vg_skin.h.base +++ b/include/vg_skin.h.base @@ -931,6 +931,7 @@ typedef UChar FlagSet; #define FlagsOSACP (FlagO | FlagS | FlagA | FlagC | FlagP) #define FlagsSZACP ( FlagS | FlagZ | FlagA | FlagC | FlagP) #define FlagsSZAP ( FlagS | FlagZ | FlagA | FlagP) +#define FlagsSZP ( FlagS | FlagZ | FlagP) #define FlagsZCP ( FlagZ | FlagC | FlagP) #define FlagsOC (FlagO | FlagC ) #define FlagsAC ( FlagA | FlagC ) @@ -1185,6 +1186,7 @@ extern Int VGOFF_(helper_get_dirflag); extern Int VGOFF_(helper_CLC); extern Int VGOFF_(helper_STC); +extern Int VGOFF_(helper_CMC); extern Int VGOFF_(helper_shldl); extern Int VGOFF_(helper_shldw); @@ -1197,14 +1199,20 @@ extern Int VGOFF_(helper_CPUID); extern Int VGOFF_(helper_IN); extern Int VGOFF_(helper_OUT); -extern Int VGOFF_(helper_bsf); -extern Int VGOFF_(helper_bsr); +extern Int VGOFF_(helper_bsfw); +extern Int VGOFF_(helper_bsfl); +extern Int VGOFF_(helper_bsrw); +extern Int VGOFF_(helper_bsrl); extern Int VGOFF_(helper_fstsw_AX); extern Int VGOFF_(helper_SAHF); extern Int VGOFF_(helper_LAHF); extern Int VGOFF_(helper_DAS); extern Int VGOFF_(helper_DAA); +extern Int VGOFF_(helper_AAS); +extern Int VGOFF_(helper_AAA); +extern Int VGOFF_(helper_AAD); +extern Int VGOFF_(helper_AAM); extern Int VGOFF_(helper_cmpxchg8b); diff --git a/memcheck/mc_translate.c b/memcheck/mc_translate.c index 8f24e2af83..fc62ba91e1 100644 --- a/memcheck/mc_translate.c +++ b/memcheck/mc_translate.c @@ -718,9 +718,9 @@ static UCodeBlock* memcheck_instrument ( UCodeBlock* cb_in ) Noticed by Kevin Ryde */ /* sk_assert(u_in->flags_w != FlagsEmpty); */ - qs = getOperandShadow(cb, u_in->size, u_in->tag1, u_in->val1); + qs = getOperandShadow(cb, 1, u_in->tag1, u_in->val1); /* We can safely modify qs; cast it to 0-size. */ - create_PCast(cb, u_in->size, 0, qs); + create_PCast(cb, 1, 0, qs); qd = SHADOW(u_in->val2); create_PCast(cb, u_in->size, 0, qd); /* qs is cast-to-0(shift count#), and qd is cast-to-0(value#). */ @@ -1086,7 +1086,7 @@ static UCodeBlock* memcheck_instrument ( UCodeBlock* cb_in ) case SSE3e1_RegRd: sk_assert(u_in->tag3 == TempReg); - if (u_in->opcode == SSE3e1_RegRd) { + if (u_in->opcode == SSE2e1_RegRd || u_in->opcode == SSE3e1_RegRd) { sk_assert(u_in->size == 2); } else { sk_assert(u_in->size == 4); @@ -1111,7 +1111,8 @@ static UCodeBlock* memcheck_instrument ( UCodeBlock* cb_in ) case SSE3a_MemWr: case SSE2a_MemWr: case SSE2a_MemRd: - case SSE3a1_MemRd: { + case SSE3a1_MemRd: + case SSE2a1_MemRd: { Bool is_load; Int t_size; @@ -1121,6 +1122,7 @@ static UCodeBlock* memcheck_instrument ( UCodeBlock* cb_in ) t_size = INVALID_TEMPREG; is_load = u_in->opcode==SSE2a_MemRd || u_in->opcode==SSE3a_MemRd + || u_in->opcode==SSE2a1_MemRd || u_in->opcode==SSE3a1_MemRd; sk_assert(u_in->tag3 == TempReg); diff --git a/none/tests/Makefile.am b/none/tests/Makefile.am index 1e503c131c..3821150c55 100644 --- a/none/tests/Makefile.am +++ b/none/tests/Makefile.am @@ -24,7 +24,10 @@ EXTRA_DIST = $(noinst_SCRIPTS) \ fpu_lazy_eflags.vgtest \ fucomip.stderr.exp fucomip.vgtest \ gxx304.stderr.exp gxx304.vgtest \ + insn_basic.stderr.exp insn_basic.stdout.exp insn_basic.vgtest \ + insn_cmov.stderr.exp insn_cmov.stdout.exp insn_cmov.vgtest \ insn_mmx.stderr.exp insn_mmx.stdout.exp insn_mmx.vgtest \ + insn_mmxext.stderr.exp insn_mmxext.stdout.exp insn_mmxext.vgtest \ insn_sse.stderr.exp insn_sse.stdout.exp insn_sse.vgtest \ insn_sse2.stderr.exp insn_sse2.stdout.exp insn_sse2.vgtest \ map_unmap.stdout.exp map_unmap.vgtest \ @@ -51,7 +54,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \ check_PROGRAMS = \ args bitfield1 bt_everything bt_literal coolo_strlen \ cpuid dastest discard exec-sigmask floored fork fpu_lazy_eflags \ - fucomip insn_mmx insn_sse insn_sse2 \ + fucomip insn_basic insn_cmov insn_mmx insn_mmxext insn_sse insn_sse2 \ munmap_exe map_unmap mremap rcl_assert \ rcrl readline1 resolv seg_override sha1_test shortpush shorts smc1 \ tls.so tls2.so tls pth_blockedsig \ @@ -76,8 +79,14 @@ floored_SOURCES = floored.c floored_LDADD = -lm fpu_lazy_eflags_SOURCES = fpu_lazy_eflags.c fucomip_SOURCES = fucomip.c +insn_basic_SOURCES = insn_basic.def +insn_basic_LDADD = -lm +insn_cmov_SOURCES = insn_cmov.def +insn_cmov_LDADD = -lm insn_mmx_SOURCES = insn_mmx.def insn_mmx_LDADD = -lm +insn_mmxext_SOURCES = insn_mmxext.def +insn_mmxext_LDADD = -lm insn_sse_SOURCES = insn_sse.def insn_sse_LDADD = -lm insn_sse2_SOURCES = insn_sse2.def @@ -122,5 +131,13 @@ gxx304_SOURCES = gxx304.cpp # must be built with these flags -- bug only occurred with them fpu_lazy_eflags.o: CFLAGS += -O2 -mcpu=pentiumpro -march=pentiumpro +# rebuild instruction tests if test generator changes +insn_basic.c: gen_insn_test.pl +insn_cmov.c: gen_insn_test.pl +insn_mmx.c: gen_insn_test.pl +insn_mmxext.c: gen_insn_test.pl +insn_sse.c: gen_insn_test.pl +insn_sse2.c: gen_insn_test.pl + .def.c: $(PERL) gen_insn_test.pl < $< > $@ diff --git a/none/tests/gen_insn_test.pl b/none/tests/gen_insn_test.pl index 42f902b3d9..363e71b877 100644 --- a/none/tests/gen_insn_test.pl +++ b/none/tests/gen_insn_test.pl @@ -4,13 +4,17 @@ use strict; use warnings; our %ArgTypes = ( - r => "reg_t", + r8 => "reg8_t", + r16 => "reg16_t", + r32 => "reg32_t", mm => "mm_reg_t", xmm => "xmm_reg_t", - m32 => "reg_t", + m8 => "reg8_t", + m16 => "reg16_t", + m32 => "reg32_t", m64 => "mm_reg_t", m128 => "xmm_reg_t", - eflags => "reg_t" + eflags => "reg32_t" ); our %SubTypeFormats = ( @@ -39,7 +43,34 @@ our %SubTypeSuffixes = ( pd => "" ); -our @IntRegs = ( "eax", "ebx", "ecx", "edx" ); +our %RegNums = ( + al => 0, ax => 0, eax => 0, + bl => 1, bx => 1, ebx => 1, + cl => 2, cx => 2, ecx => 2, + dl => 3, dx => 3, edx => 3, + ah => 4, + bh => 5, + ch => 6, + dh => 7 + ); + +our %RegTypes = ( + al => "r8", ah => "r8", ax => "r16", eax => "r32", + bl => "r8", bh => "r8", bx => "r16", ebx => "r32", + cl => "r8", ch => "r8", cx => "r16", ecx => "r32", + dl => "r8", dh => "r8", dx => "r16", edx => "r32" + ); + +our @IntRegs = ( + { r8 => "al", r16 => "ax", r32 => "eax" }, + { r8 => "bl", r16 => "bx", r32 => "ebx" }, + { r8 => "cl", r16 => "cx", r32 => "ecx" }, + { r8 => "dl", r16 => "dx", r32 => "edx" }, + { r8 => "ah" }, + { r8 => "bh" }, + { r8 => "ch" }, + { r8 => "dh" } + ); print < @@ -49,10 +80,26 @@ print < typedef union { + char sb[1]; + unsigned char ub[1]; +} reg8_t; + +typedef union { + char sb[2]; + unsigned char ub[2]; + short sw[1]; + unsigned short uw[1]; +} reg16_t; + +typedef union { + char sb[4]; + unsigned char ub[4]; + short sw[2]; + unsigned short uw[2]; long int sd[1]; unsigned long int ud[1]; float ps[1]; -} reg_t; +} reg32_t; typedef union { char sb[8]; @@ -106,9 +153,22 @@ while (<>) { next if /^#/; - my @args = split(/\s+/, $_); - my $insn = shift @args; - my $result = pop @args; + my $insn; + my $presets; + my $args; + my $results; + + if (/^(\S+)\s+(?:(\S+(?:\s+\S+)*)\s+:\s+)?((?:\S+\s+)*)=>\s+(\S+(?:\s+\S+)*)$/) + { + $insn = $1; + $presets = $2 || ""; + $args = $3; + $results = $4; + } + else + { + die "Can't parse test $_"; + } $tests{$insn}++; @@ -119,25 +179,103 @@ while (<>) print qq|static void $test(void)\n|; print qq|\{\n|; - my $argc = 0; - my @argtypes; - my @argsubtypes; - my @argindexes; - my @argvalues; + my @intregs = @IntRegs; + my @mmregs = map { "mm$_" } (0 .. 7); + my @xmmregs = map { "xmm$_" } (0 .. 7); + + my @presets; + my $presetc = 0; + my $eflagsmask; + my $eflagsset; - foreach my $arg (@args) + foreach my $preset (split(/\s+/, $presets)) + { + if ($preset =~ /^([abcd][lh]|[abcd]x|e[abcd]x)\.(sb|ub|sw|uw|sd|ud|sq|uq|ps|pd)\[([^\]]+)\]$/) + { + my $name = "preset$presetc"; + my $type = $RegTypes{$1}; + my $regnum = $RegNums{$1}; + my $register = $intregs[$regnum]; + my $subtype = $2; + my @values = split(/,/, $3); + + die "Register $1 already used" unless defined($register); + + my $preset = { + name => $name, + type => $type, + subtype => $subtype, + register => $register + }; + + delete($intregs[$regnum]); + + push @presets, $preset; + + print qq| $ArgTypes{$type} $name = \{|; + + my $valuec = 0; + + foreach my $value (@values) { - if ($arg =~ /^(r|mm|xmm|m32|m64|m128)\.(sb|ub|sw|uw|sd|ud|sq|uq|ps|pd)\[([^\]]+)\]$/) + print qq|,| if $valuec > 0; + print qq| .$subtype\[$valuec\] = $value$SubTypeSuffixes{$subtype}|; + $valuec++; + } + + print qq| \};\n|; + + $presetc++; + } + elsif ($preset =~ /^(eflags)\[([^\]]+)\]$/) { my $type = $1; + my @values = split(/,/, $2); + + $values[0] = oct($values[0]) if $values[0] =~ /^0/; + $values[1] = oct($values[1]) if $values[1] =~ /^0/; + + $eflagsmask = sprintf "0x%x", ~$values[0]; + $eflagsset = sprintf "0x%x", $values[1]; + } + else + { + die "Can't parse preset $preset"; + } + } + + my @args; + my $argc = 0; + + foreach my $arg (split(/\s+/, $args)) + { + my $name = "arg$argc"; + + if ($arg =~ /^([abcd]l|[abcd]x|e[abcd]x|r8|r16|r32|mm|xmm|m8|m16|m32|m64|m128)\.(sb|ub|sw|uw|sd|ud|sq|uq|ps|pd)\[([^\]]+)\]$/) + { + my $type = $RegTypes{$1} || $1; + my $regnum = $RegNums{$1}; + my $register = $intregs[$regnum] if defined($regnum); my $subtype = $2; my @values = split(/,/, $3); - push @argtypes, $type; - push @argsubtypes, $subtype; - push @argvalues, undef; + die "Register $1 already used" if defined($regnum) && !defined($register); + + my $arg = { + name => $name, + type => $type, + subtype => $subtype + }; + + if (defined($register)) + { + $arg->{register} = $register; + delete($intregs[$regnum]); + } - print qq| $ArgTypes{$type} arg$argc = \{|; + push @args, $arg; + + print qq| $ArgTypes{$type} $name = \{|; my $valuec = 0; @@ -150,14 +288,17 @@ while (<>) print qq| \};\n|; } - elsif ($arg =~ /^(imm8)\[([^\]]+)\]$/) + elsif ($arg =~ /^(imm8|imm16|imm32)\[([^\]]+)\]$/) { my $type = $1; my $value = $2; - push @argtypes, $type; - push @argsubtypes, undef; - push @argvalues, $value; + my $arg = { + type => $type, + value => $value + }; + + push @args, $arg; } else { @@ -167,31 +308,111 @@ while (<>) $argc++; } - my $resultarg; - my $resulttype; - my $resultsubtype; - my @resultvalues; + foreach my $arg (@presets, @args) + { + if ($arg->{type} =~ /^(r8|r16|r32|m8|m16|m32)$/) + { + while (!exists($arg->{register}) || !defined($arg->{register})) + { + $arg->{register} = shift @intregs; + } + + $arg->{register} = $arg->{register}->{$arg->{type}}; + } + elsif ($arg->{type} =~ /^(mm|m64)$/) + { + $arg->{register} = shift @mmregs; + } + elsif ($arg->{type} =~ /^(xmm|m128)$/) + { + $arg->{register} = shift @xmmregs; + } + } + + my @results; + my $resultc = 0; + + foreach my $result (split(/\s+/, $results)) + { + my $name = "result$resultc"; if ($result =~ /^(\d+)\.(sb|ub|sw|uw|sd|ud|sq|uq|ps|pd)\[([^\]]+)\]$/) { - $resultarg = $1; - $resulttype = $argtypes[$resultarg]; - $resultsubtype = $2; - @resultvalues = split(/,/, $3); + my $index = $1; + my $type = $args[$index]->{type}; + my $subtype = $2; + my @values = split(/,/, $3); + + die "Argument $index not specified" unless exists($args[$index]); + + my $result = { + name => $name, + type => $type, + subtype => $subtype, + arg => $args[$index], + register => $args[$index]->{register}, + values => [ @values ] + }; + + push @results, $result; + + print qq| $ArgTypes{$type} $name|; + print qq| = arg$index| if $type =~ /^m(8|16|32|64|128)$/; + print qq|;\n|; + + $args[$index]->{result} = $result; + } + elsif ($result =~ /^([abcd][lh]|[abcd]x|e[abcd]x)\.(sb|ub|sw|uw|sd|ud|sq|uq|ps|pd)\[([^\]]+)\]$/) + { + my $register = $1; + my $type = $RegTypes{$register}; + my $subtype = $2; + my @values = split(/,/, $3); + + my $result = { + name => $name, + type => $type, + subtype => $subtype, + register => $register, + values => [ @values ] + }; + + push @results, $result; + + print qq| $ArgTypes{$type} $name;\n|; } elsif ($result =~ /^eflags\[([^\]]+)\]$/) { - $resultarg = -1; - $resulttype = "eflags"; - $resultsubtype = "ud"; - @resultvalues = split(/,/, $1); + my @values = split(/,/, $1); + + $values[0] = oct($values[0]) if $values[0] =~ /^0/; + $values[1] = oct($values[1]) if $values[1] =~ /^0/; + + my $result = { + name => $name, + type => "eflags", + subtype => "ud", + values => [ map { sprintf "0x%x", $_ } @values ] + }; + + push @results, $result; + + print qq| $ArgTypes{eflags} $name;\n|; + + if (!defined($eflagsmask) && !defined($eflagsset)) + { + $eflagsmask = sprintf "0x%x", ~$values[0]; + $eflagsset = sprintf "0x%x", $values[0] & ~$values[1]; + } } else { die "Can't parse result $result"; } - print qq| $ArgTypes{$resulttype} result;\n|; + $resultc++; + } + print qq| char state\[108\];\n|; print qq|\n|; print qq| if (sigsetjmp(catchpoint, 1) == 0)\n|; @@ -199,73 +420,65 @@ while (<>) print qq| asm\(\n|; print qq| \"fsave %\[state\]\\n\"\n|; - foreach my $arg (0 .. $#args) + foreach my $arg (@presets, @args) { - if ($argtypes[$arg] eq "r") + if ($arg->{type} eq "r8") { - print qq| \"movl %\[arg$arg\], %%$IntRegs[$arg]\\n\"\n|; + print qq| \"movb %\[$arg->{name}\], %%$arg->{register}\\n\"\n|; } - elsif ($argtypes[$arg] eq "mm") + elsif ($arg->{type} eq "r16") { - print qq| \"movq %\[arg$arg\], %%mm$arg\\n\"\n|; + print qq| \"movw %\[$arg->{name}\], %%$arg->{register}\\n\"\n|; } - elsif ($argtypes[$arg] eq "xmm") + elsif ($arg->{type} eq "r32") { - print qq| \"movlps 0%\[arg$arg\], %%xmm$arg\\n\"\n|; - print qq| \"movhps 8%\[arg$arg\], %%xmm$arg\\n\"\n|; + print qq| \"movl %\[$arg->{name}\], %%$arg->{register}\\n\"\n|; } - } - - if ($resulttype eq "m32") + elsif ($arg->{type} eq "mm") { - print qq| \"movl %\[arg$resultarg\], %%$IntRegs[$resultarg]\\n\"\n|; - print qq| \"movl %%$IntRegs[$resultarg], %\[result\]\\n\"\n|; + print qq| \"movq %\[$arg->{name}\], %%$arg->{register}\\n\"\n|; } - elsif ($resulttype eq "m64") + elsif ($arg->{type} eq "xmm") { - print qq| \"movq %\[arg$resultarg\], %%mm$resultarg\\n\"\n|; - print qq| \"movq %%mm$resultarg, %\[result\]\\n\"\n|; + print qq| \"movlps 0%\[$arg->{name}\], %%$arg->{register}\\n\"\n|; + print qq| \"movhps 8%\[$arg->{name}\], %%$arg->{register}\\n\"\n|; + } } - elsif ($resulttype eq "m128") + + if (defined($eflagsmask) || defined($eflagsset)) { - print qq| \"movlps 0%\[arg$resultarg\], %%xmm$resultarg\\n\"\n|; - print qq| \"movhps 8%\[arg$resultarg\], %%xmm$resultarg\\n\"\n|; - print qq| \"movlps %%xmm$resultarg, 0%\[result\]\\n\"\n|; - print qq| \"movhps %%xmm$resultarg, 8%\[result\]\\n\"\n|; + print qq| \"pushfl\\n\"\n|; + print qq| \"andl \$$eflagsmask, (%%esp)\\n\"\n| if defined($eflagsmask); + print qq| \"orl \$$eflagsset, (%%esp)\\n\"\n| if defined($eflagsset); + print qq| \"popfl\\n\"\n|; } print qq| \"$insn|; my $prefix = " "; - foreach my $arg (0 .. $#args) - { - if ($argtypes[$arg] eq "r") - { - print qq|$prefix%%$IntRegs[$arg]|; - } - elsif ($argtypes[$arg] eq "mm") + foreach my $arg (@args) { - print qq|$prefix%%mm$arg|; - } - elsif ($argtypes[$arg] eq "xmm") + next if $arg->{type} eq "eflags"; + + if ($arg->{type} =~ /^(r8|r16|r32|mm|xmm)$/) { - print qq|$prefix%%xmm$arg|; + print qq|$prefix%%$arg->{register}|; } - elsif ($argtypes[$arg] eq "m32" || $argtypes[$arg] eq "m64" || $argtypes[$arg] eq "m128") + elsif ($arg->{type} =~ /^(m(8|16|32|64|128))$/) { - if ($arg == $resultarg) + if (exists($arg->{result})) { - print qq|$prefix%\[result\]|; + print qq|$prefix%\[$arg->{result}->{name}\]|; } else { - print qq|$prefix%\[arg$arg\]|; + print qq|$prefix%\[$arg->{name}\]|; } } - elsif ($argtypes[$arg] eq "imm8") + elsif ($arg->{type} =~ /^imm(8|16|32)$/) { - print qq|$prefix\$$argvalues[$arg]|; + print qq|$prefix\$$arg->{value}|; } $prefix = ", "; @@ -273,77 +486,82 @@ while (<>) print qq|\\n\"\n|; - if ($resulttype eq "r") + foreach my $result (@results) { - print qq| \"movl %%$IntRegs[$resultarg], %\[result\]\\n\"\n|; + if ($result->{type} eq "r8") + { + print qq| \"movb %%$result->{register}, %\[$result->{name}\]\\n\"\n|; + } + elsif ($result->{type} eq "r16") + { + print qq| \"movw %%$result->{register}, %\[$result->{name}\]\\n\"\n|; } - elsif ($resulttype eq "mm") + elsif ($result->{type} eq "r32") { - print qq| \"movq %%mm$resultarg, %\[result\]\\n\"\n|; + print qq| \"movl %%$result->{register}, %\[$result->{name}\]\\n\"\n|; } - elsif ($resulttype eq "xmm") + elsif ($result->{type} eq "mm") { - print qq| \"movlps %%xmm$resultarg, 0%\[result\]\\n\"\n|; - print qq| \"movhps %%xmm$resultarg, 8%\[result\]\\n\"\n|; + print qq| \"movq %%$result->{register}, %\[$result->{name}\]\\n\"\n|; } - elsif ($resulttype eq "eflags") + elsif ($result->{type} eq "xmm") + { + print qq| \"movlps %%$result->{register}, 0%\[$result->{name}\]\\n\"\n|; + print qq| \"movhps %%$result->{register}, 8%\[$result->{name}\]\\n\"\n|; + } + elsif ($result->{type} eq "eflags") { print qq| \"pushfl\\n\"\n|; - print qq| \"popl %\[result\]\\n\"\n|; + print qq| \"popl %\[$result->{name}\]\\n\"\n|; + } } - print qq| \"emms\\n\"\n|; print qq| \"frstor %\[state\]\\n\"\n|; print qq| :|; - if ($resulttype eq "m32" || $resulttype eq "m64" || - $resulttype eq "m128" || $resulttype eq "eflags") + $prefix = " "; + + foreach my $result (@results) + { + if ($result->{type} =~ /^(m(8|16|32|64|128)|eflags)$/) { - print qq| \[result\] \"=m\" \(result\)|; + print qq|$prefix\[$result->{name}\] \"=m\" \($result->{name}\)|; + $prefix = ", "; + } } print qq|\n|; $prefix = " : "; - foreach my $arg (0 .. $#args) + foreach my $arg (@presets, @args) { - if (!defined($argvalues[$arg])) + if (defined($arg->{name})) { - print qq|$prefix\[arg$arg\] \"m\" \(arg$arg\)|; + print qq|$prefix\[$arg->{name}\] \"m\" \($arg->{name}\)|; $prefix = ", "; } } - if ($resulttype eq "r" || $resulttype eq "mm" || - $resulttype eq "xmm" || $resulttype eq "elags") + foreach my $result (@results) { - print qq|$prefix\[result\] \"m\" \(result\)|; + if ($result->{type} =~ /^(r(8|16|32)|mm|xmm)$/) + { + print qq|$prefix\[$result->{name}\] \"m\" \($result->{name}\)|; + $prefix = ", "; + } } - print qq|, \[state\] \"m\" \(state[0]\)\n|; + print qq|$prefix\[state\] \"m\" \(state[0]\)\n|; $prefix = " : "; - foreach my $arg (0 .. $#args) - { - if ($argtypes[$arg] eq "r" || - ($arg == $resultarg && $argtypes[$arg] eq "m32")) - { - print qq|$prefix\"$IntRegs[$arg]\"|; - $prefix = ", "; - } - elsif ($argtypes[$arg] eq "mm" || - ($arg == $resultarg && $argtypes[$arg] eq "m64")) + foreach my $arg (@presets, @args) { - print qq|$prefix\"mm$arg\"|; - $prefix = ", "; - } - elsif ($argtypes[$arg] eq "xmm" || - ($arg == $resultarg && $argtypes[$arg] eq "m128")) + if ($arg->{register}) { - print qq|$prefix\"xmm$arg\"|; + print qq|$prefix\"$arg->{register}\"|; $prefix = ", "; } } @@ -355,33 +573,43 @@ while (<>) print qq| if \(|; - if ($resulttype eq "eflags") + $prefix = ""; + + foreach my $result (@results) { - print qq|\(result.ud[0] & $resultvalues[0]UL\) == $resultvalues[1]UL|; + my $type = $result->{type}; + my $subtype = $result->{subtype}; + my $suffix = $SubTypeSuffixes{$subtype}; + my @values = @{$result->{values}}; + + if ($type eq "eflags") + { + print qq|${prefix}\($result->{name}.ud[0] & $values[0]UL\) == $values[1]UL|; } else { - $prefix = " "; - - foreach my $value (0 .. $#resultvalues) + foreach my $value (0 .. $#values) { - if ($resultsubtype eq "ps") + if ($subtype eq "ps") { - print qq|${prefix}eq_float(result.$resultsubtype\[$value\], $resultvalues[$value]$SubTypeSuffixes{$resultsubtype})|; + print qq|${prefix}eq_float($result->{name}.$subtype\[$value\], $values[$value]$suffix)|; } - elsif ($resultsubtype eq "pd") + elsif ($subtype eq "pd") { - print qq|${prefix}eq_double(result.$resultsubtype\[$value\], $resultvalues[$value]$SubTypeSuffixes{$resultsubtype})|; + print qq|${prefix}eq_double($result->{name}.$subtype\[$value\], $values[$value]$suffix)|; } else { - print qq|${prefix}result.$resultsubtype\[$value\] == $resultvalues[$value]$SubTypeSuffixes{$resultsubtype}|; + print qq|${prefix}$result->{name}.$subtype\[$value\] == $values[$value]$suffix|; } $prefix = " && "; } } + $prefix = " &&\n "; + } + print qq| \)\n|; print qq| \{\n|; print qq| printf("$test ... ok\\n");\n|; @@ -390,15 +618,23 @@ while (<>) print qq| \{\n|; print qq| printf("$test ... not ok\\n");\n|; - if ($resulttype eq "eflags") + foreach my $result (@results) + { + my $type = $result->{type}; + my $subtype = $result->{subtype}; + my $suffix = $SubTypeSuffixes{$subtype}; + my @values = @{$result->{values}}; + + if ($type eq "eflags") { - print qq| printf(" eflags & 0x%lx = 0x%lx (expected 0x%lx)\\n", $resultvalues[0]UL, result.ud\[0\] & $resultvalues[0]UL, $resultvalues[1]UL);\n|; + print qq| printf(" eflags & 0x%lx = 0x%lx (expected 0x%lx)\\n", $values[0]UL, $result->{name}.ud\[0\] & $values[0]UL, $values[1]UL);\n|; } else { - foreach my $value (0 .. $#resultvalues) + foreach my $value (0 .. $#values) { - print qq| printf(" $resultsubtype\[$value\] = $SubTypeFormats{$resultsubtype} (expected $SubTypeFormats{$resultsubtype})\\n", result.$resultsubtype\[$value\], $resultvalues[$value]$SubTypeSuffixes{$resultsubtype});\n|; + print qq| printf(" $result->{name}.$subtype\[$value\] = $SubTypeFormats{$subtype} (expected $SubTypeFormats{$subtype})\\n", $result->{name}.$subtype\[$value\], $values[$value]$suffix);\n|; + } } } diff --git a/none/tests/insn_mmx.def b/none/tests/insn_mmx.def index a0b1c4abaf..7f6c7fb387 100644 --- a/none/tests/insn_mmx.def +++ b/none/tests/insn_mmx.def @@ -1,103 +1,103 @@ -movd r.sd[1234] mm.sd[1111,2222] 1.sd[1234,0] -movd m32.sd[1234] mm.sd[1111,2222] 1.sd[1234,0] -movd mm.sd[1234,2222] r.sd[1111] 1.sd[1234] -movd mm.sd[1234,2222] m32.sd[1111] 1.sd[1234] -movq mm.uq[0x012345678abcdef] mm.uq[0x1212121234343434] 1.uq[0x012345678abcdef] -movq m64.uq[0x012345678abcdef] mm.uq[0x1212121234343434] 1.uq[0x012345678abcdef] -movq mm.uq[0x012345678abcdef] m64.uq[0x1212121234343434] 1.uq[0x012345678abcdef] -packssdw mm.sd[12345,123456] mm.sd[-12345,-123456] 1.sw[-12345,-32768,12345,32767] -packssdw m64.sd[12345,123456] mm.sd[-12345,-123456] 1.sw[-12345,-32768,12345,32767] -packsswb mm.sw[123,-123,1234,-1234] mm.sw[21,-21,321,-321] 1.sb[21,-21,127,-128,123,-123,127,-128] -packsswb m64.sw[123,-123,1234,-1234] mm.sw[21,-21,321,-321] 1.sb[21,-21,127,-128,123,-123,127,-128] -packuswb mm.sw[123,-123,1234,-1234] mm.sw[21,-21,321,-321] 1.ub[21,0,255,0,123,0,255,0] -packuswb m64.sw[123,-123,1234,-1234] mm.sw[21,-21,321,-321] 1.ub[21,0,255,0,123,0,255,0] -paddb mm.sb[12,34,56,78,21,43,65,87] mm.sb[8,7,6,5,4,3,2,1] 1.sb[20,41,62,83,25,46,67,88] -paddb m64.sb[12,34,56,78,21,43,65,87] mm.sb[8,7,6,5,4,3,2,1] 1.sb[20,41,62,83,25,46,67,88] -paddd mm.sd[12345678,87654321] mm.sd[8765,4321] 1.sd[12354443,87658642] -paddd m64.sd[12345678,87654321] mm.sd[8765,4321] 1.sd[12354443,87658642] -paddsb mm.sb[25,-25,50,-50,100,-100,125,-125] mm.sb[40,-40,30,-30,20,-20,10,-10] 1.sb[65,-65,80,-80,120,-120,127,-128] -paddsb m64.sb[25,-25,50,-50,100,-100,125,-125] mm.sb[40,-40,30,-30,20,-20,10,-10] 1.sb[65,-65,80,-80,120,-120,127,-128] -paddsw mm.sw[12345,-12345,32145,-32145] mm.sw[32145,-32145,-12345,12345] 1.sw[32767,-32768,19800,-19800] -paddsw m64.sw[12345,-12345,32145,-32145] mm.sw[32145,-32145,-12345,12345] 1.sw[32767,-32768,19800,-19800] -paddusb mm.ub[25,50,75,100,125,150,175,200] mm.ub[10,20,30,40,50,60,70,80] 1.ub[35,70,105,140,175,210,245,255] -paddusb m64.ub[25,50,75,100,125,150,175,200] mm.ub[10,20,30,40,50,60,70,80] 1.ub[35,70,105,140,175,210,245,255] -paddusw mm.uw[22222,33333,44444,55555] mm.uw[6666,7777,8888,9999] 1.uw[28888,41110,53332,65535] -paddusw m64.uw[22222,33333,44444,55555] mm.uw[6666,7777,8888,9999] 1.uw[28888,41110,53332,65535] -paddw mm.sw[1234,5678,4321,8765] mm.sw[87,65,43,21] 1.sw[1321,5743,4364,8786] -paddw m64.sw[1234,5678,4321,8765] mm.sw[87,65,43,21] 1.sw[1321,5743,4364,8786] -pand mm.uq[0xfdb97531eca86420] mm.uq[0x0123456789abcdef] 1.uq[0x0121452188a84420] -pand m64.uq[0xfdb97531eca86420] mm.uq[0x0123456789abcdef] 1.uq[0x0121452188a84420] -pandn mm.uq[0xfdb97531eca86420] mm.uq[0x0123456789abcdef] 1.uq[0xfc98301064002000] -pandn m64.uq[0xfdb97531eca86420] mm.uq[0x0123456789abcdef] 1.uq[0xfc98301064002000] -pcmpeqb mm.ub[11,22,33,44,55,66,77,88] mm.ub[11,11,33,33,55,55,77,77] 1.ub[0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00] -pcmpeqb m64.ub[11,22,33,44,55,66,77,88] mm.ub[11,11,33,33,55,55,77,77] 1.ub[0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00] -pcmpeqd mm.ud[11223344,55667788] mm.ud[11223344,11223344] 1.ud[0xffffffff,0x00000000] -pcmpeqd m64.ud[11223344,55667788] mm.ud[11223344,11223344] 1.ud[0xffffffff,0x00000000] -pcmpeqw mm.uw[1122,3344,5566,7788] mm.uw[1122,1122,5566,5566] 1.uw[0xffff,0x0000,0xffff,0x0000] -pcmpeqw m64.uw[1122,3344,5566,7788] mm.uw[1122,1122,5566,5566] 1.uw[0xffff,0x0000,0xffff,0x0000] -pcmpgtb mm.sb[-77,-55,-33,-11,11,33,55,77] mm.sb[77,55,33,11,-11,-33,-55,-77] 1.ub[0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00] -pcmpgtb m64.sb[-77,-55,-33,-11,11,33,55,77] mm.sb[77,55,33,11,-11,-33,-55,-77] 1.ub[0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00] -pcmpgtd mm.sd[-11111111,11111111] mm.sd[11111111,-11111111] 1.ud[0xffffffff,0x00000000] -pcmpgtd m64.sd[-11111111,11111111] mm.sd[11111111,-11111111] 1.ud[0xffffffff,0x00000000] -pcmpgtw mm.sw[-3333,-1111,1111,3333] mm.sw[3333,1111,-1111,-3333] 1.uw[0xffff,0xffff,0x0000,0x0000] -pcmpgtw m64.sw[-3333,-1111,1111,3333] mm.sw[3333,1111,-1111,-3333] 1.uw[0xffff,0xffff,0x0000,0x0000] -pmaddwd mm.sw[1234,5678,-4321,-8765] mm.sw[1111,-2222,3333,-4444] 1.sd[-11245542,24549767] -pmaddwd m64.sw[1234,5678,-4321,-8765] mm.sw[1111,-2222,3333,-4444] 1.sd[-11245542,24549767] -pmulhw mm.sw[1111,2222,-1111,-2222] mm.sw[3333,-4444,3333,-4444] 1.uw[0x0038,0xff69,0xffc7,0x0096] -pmulhw m64.sw[1111,2222,-1111,-2222] mm.sw[3333,-4444,3333,-4444] 1.uw[0x0038,0xff69,0xffc7,0x0096] -pmullw mm.sw[1111,2222,-1111,-2222] mm.sw[3333,-4444,3333,-4444] 1.uw[0x80b3,0x5378,0x7f4d,0xac88] -pmullw m64.sw[1111,2222,-1111,-2222] mm.sw[3333,-4444,3333,-4444] 1.uw[0x80b3,0x5378,0x7f4d,0xac88] -por mm.uq[0xfdb97531eca86420] mm.uq[0x0123456789abcdef] 1.uq[0xfdbb7577edabedef] -por m64.uq[0xfdb97531eca86420] mm.uq[0x0123456789abcdef] 1.uq[0xfdbb7577edabedef] -pslld imm8[4] mm.ud[0x01234567,0x89abcdef] 1.ud[0x12345670,0x9abcdef0] -pslld mm.uq[4] mm.ud[0x01234567,0x89abcdef] 1.ud[0x12345670,0x9abcdef0] -pslld m64.uq[4] mm.ud[0x01234567,0x89abcdef] 1.ud[0x12345670,0x9abcdef0] -psllq imm8[4] mm.uq[0x0123456789abcdef] 1.uq[0x123456789abcdef0] -psllq mm.uq[4] mm.uq[0x0123456789abcdef] 1.uq[0x123456789abcdef0] -psllq m64.uq[4] mm.uq[0x0123456789abcdef] 1.uq[0x123456789abcdef0] -psllw imm8[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x1230,0x5670,0x9ab0,0xdef0] -psllw mm.uq[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x1230,0x5670,0x9ab0,0xdef0] -psllw m64.uq[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x1230,0x5670,0x9ab0,0xdef0] -psrad imm8[4] mm.ud[0x01234567,0x89abcdef] 1.ud[0x00123456,0xf89abcde] -psrad mm.uq[4] mm.ud[0x01234567,0x89abcdef] 1.ud[0x00123456,0xf89abcde] -psrad m64.uq[4] mm.ud[0x01234567,0x89abcdef] 1.ud[0x00123456,0xf89abcde] -psraw imm8[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x0012,0x0456,0xf89a,0xfcde] -psraw mm.uq[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x0012,0x0456,0xf89a,0xfcde] -psraw m64.uq[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x0012,0x0456,0xf89a,0xfcde] -psrld imm8[4] mm.ud[0x01234567,0x89abcdef] 1.ud[0x00123456,0x089abcde] -psrld mm.uq[4] mm.ud[0x01234567,0x89abcdef] 1.ud[0x00123456,0x089abcde] -psrld m64.uq[4] mm.ud[0x01234567,0x89abcdef] 1.ud[0x00123456,0x089abcde] -psrlq imm8[4] mm.uq[0x0123456789abcdef] 1.uq[0x00123456789abcde] -psrlq mm.uq[4] mm.uq[0x0123456789abcdef] 1.uq[0x00123456789abcde] -psrlq m64.uq[4] mm.uq[0x0123456789abcdef] 1.uq[0x00123456789abcde] -psrlw imm8[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x0012,0x0456,0x089a,0x0cde] -psrlw mm.uq[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x0012,0x0456,0x089a,0x0cde] -psrlw m64.uq[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x0012,0x0456,0x089a,0x0cde] -psubb mm.sb[8,7,6,5,4,3,2,1] mm.sb[12,34,56,78,21,43,65,87] 1.sb[4,27,50,73,17,40,63,86] -psubb m64.sb[8,7,6,5,4,3,2,1] mm.sb[12,34,56,78,21,43,65,87] 1.sb[4,27,50,73,17,40,63,86] -psubd mm.sd[8765,4321] mm.sd[12345678,87654321] 1.sd[12336913,87650000] -psubd m64.sd[8765,4321] mm.sd[12345678,87654321] 1.sd[12336913,87650000] -psubsb mm.sb[-50,50,-40,40,-30,30,-20,20] mm.sb[25,-25,50,-50,100,-100,125,-125] 1.sb[75,-75,90,-90,127,-128,127,-128] -psubsb m64.sb[-50,50,-40,40,-30,30,-20,20] mm.sb[25,-25,50,-50,100,-100,125,-125] 1.sb[75,-75,90,-90,127,-128,127,-128] -psubsw mm.sw[-32145,32145,12345,-12345] mm.sw[12345,-12345,32145,-32145] 1.sw[32767,-32768,19800,-19800] -psubsw m64.sw[-32145,32145,12345,-12345] mm.sw[12345,-12345,32145,-32145] 1.sw[32767,-32768,19800,-19800] -psubusb mm.ub[11,22,33,44,55,66,77,88] mm.ub[88,77,66,55,44,33,22,11] 1.ub[77,55,33,11,0,0,0,0] -psubusb m64.ub[11,22,33,44,55,66,77,88] mm.ub[88,77,66,55,44,33,22,11] 1.ub[77,55,33,11,0,0,0,0] -psubusw mm.uw[1122,3344,5566,7788] mm.uw[8877,6655,4433,2211] 1.uw[7755,3311,0,0] -psubusw m64.uw[1122,3344,5566,7788] mm.uw[8877,6655,4433,2211] 1.uw[7755,3311,0,0] -psubw mm.sw[87,65,43,21] mm.sw[1234,5678,4321,8765] 1.sw[1147,5613,4278,8744] -psubw m64.sw[87,65,43,21] mm.sw[1234,5678,4321,8765] 1.sw[1147,5613,4278,8744] -punpckhbw mm.ub[12,34,56,78,21,43,65,87] mm.ub[11,22,33,44,55,66,77,88] 1.ub[55,21,66,43,77,65,88,87] -punpckhbw m64.ub[12,34,56,78,21,43,65,87] mm.ub[11,22,33,44,55,66,77,88] 1.ub[55,21,66,43,77,65,88,87] -punpckhdq mm.ud[12345678,21436587] mm.ud[11223344,55667788] 1.ud[55667788,21436587] -punpckhdq m64.ud[12345678,21436587] mm.ud[11223344,55667788] 1.ud[55667788,21436587] -punpckhwd mm.uw[1234,5678,2143,6587] mm.uw[1122,3344,5566,7788] 1.uw[5566,2143,7788,6587] -punpckhwd m64.uw[1234,5678,2143,6587] mm.uw[1122,3344,5566,7788] 1.uw[5566,2143,7788,6587] -punpcklbw mm.ub[12,34,56,78,21,43,65,87] mm.ub[11,22,33,44,55,66,77,88] 1.ub[11,12,22,34,33,56,44,78] -punpcklbw m64.ub[12,34,56,78,21,43,65,87] mm.ub[11,22,33,44,55,66,77,88] 1.ub[11,12,22,34,33,56,44,78] -punpckldq mm.ud[12345678,21436587] mm.ud[11223344,55667788] 1.ud[11223344,12345678] -punpckldq m64.ud[12345678,21436587] mm.ud[11223344,55667788] 1.ud[11223344,12345678] -punpcklwd mm.uw[1234,5678,2143,6587] mm.uw[1122,3344,5566,7788] 1.uw[1122,1234,3344,5678] -punpcklwd m64.uw[1234,5678,2143,6587] mm.uw[1122,3344,5566,7788] 1.uw[1122,1234,3344,5678] -pxor mm.uq[0xfdb97531eca86420] mm.uq[0x0123456789abcdef] 1.uq[0xfc9a30566503a9cf] -pxor m64.uq[0xfdb97531eca86420] mm.uq[0x0123456789abcdef] 1.uq[0xfc9a30566503a9cf] +movd r32.sd[1234] mm.sd[1111,2222] => 1.sd[1234,0] +movd m32.sd[1234] mm.sd[1111,2222] => 1.sd[1234,0] +movd mm.sd[1234,2222] r32.sd[1111] => 1.sd[1234] +movd mm.sd[1234,2222] m32.sd[1111] => 1.sd[1234] +movq mm.uq[0x012345678abcdef] mm.uq[0x1212121234343434] => 1.uq[0x012345678abcdef] +movq m64.uq[0x012345678abcdef] mm.uq[0x1212121234343434] => 1.uq[0x012345678abcdef] +movq mm.uq[0x012345678abcdef] m64.uq[0x1212121234343434] => 1.uq[0x012345678abcdef] +packssdw mm.sd[12345,123456] mm.sd[-12345,-123456] => 1.sw[-12345,-32768,12345,32767] +packssdw m64.sd[12345,123456] mm.sd[-12345,-123456] => 1.sw[-12345,-32768,12345,32767] +packsswb mm.sw[123,-123,1234,-1234] mm.sw[21,-21,321,-321] => 1.sb[21,-21,127,-128,123,-123,127,-128] +packsswb m64.sw[123,-123,1234,-1234] mm.sw[21,-21,321,-321] => 1.sb[21,-21,127,-128,123,-123,127,-128] +packuswb mm.sw[123,-123,1234,-1234] mm.sw[21,-21,321,-321] => 1.ub[21,0,255,0,123,0,255,0] +packuswb m64.sw[123,-123,1234,-1234] mm.sw[21,-21,321,-321] => 1.ub[21,0,255,0,123,0,255,0] +paddb mm.sb[12,34,56,78,21,43,65,87] mm.sb[8,7,6,5,4,3,2,1] => 1.sb[20,41,62,83,25,46,67,88] +paddb m64.sb[12,34,56,78,21,43,65,87] mm.sb[8,7,6,5,4,3,2,1] => 1.sb[20,41,62,83,25,46,67,88] +paddd mm.sd[12345678,87654321] mm.sd[8765,4321] => 1.sd[12354443,87658642] +paddd m64.sd[12345678,87654321] mm.sd[8765,4321] => 1.sd[12354443,87658642] +paddsb mm.sb[25,-25,50,-50,100,-100,125,-125] mm.sb[40,-40,30,-30,20,-20,10,-10] => 1.sb[65,-65,80,-80,120,-120,127,-128] +paddsb m64.sb[25,-25,50,-50,100,-100,125,-125] mm.sb[40,-40,30,-30,20,-20,10,-10] => 1.sb[65,-65,80,-80,120,-120,127,-128] +paddsw mm.sw[12345,-12345,32145,-32145] mm.sw[32145,-32145,-12345,12345] => 1.sw[32767,-32768,19800,-19800] +paddsw m64.sw[12345,-12345,32145,-32145] mm.sw[32145,-32145,-12345,12345] => 1.sw[32767,-32768,19800,-19800] +paddusb mm.ub[25,50,75,100,125,150,175,200] mm.ub[10,20,30,40,50,60,70,80] => 1.ub[35,70,105,140,175,210,245,255] +paddusb m64.ub[25,50,75,100,125,150,175,200] mm.ub[10,20,30,40,50,60,70,80] => 1.ub[35,70,105,140,175,210,245,255] +paddusw mm.uw[22222,33333,44444,55555] mm.uw[6666,7777,8888,9999] => 1.uw[28888,41110,53332,65535] +paddusw m64.uw[22222,33333,44444,55555] mm.uw[6666,7777,8888,9999] => 1.uw[28888,41110,53332,65535] +paddw mm.sw[1234,5678,4321,8765] mm.sw[87,65,43,21] => 1.sw[1321,5743,4364,8786] +paddw m64.sw[1234,5678,4321,8765] mm.sw[87,65,43,21] => 1.sw[1321,5743,4364,8786] +pand mm.uq[0xfdb97531eca86420] mm.uq[0x0123456789abcdef] => 1.uq[0x0121452188a84420] +pand m64.uq[0xfdb97531eca86420] mm.uq[0x0123456789abcdef] => 1.uq[0x0121452188a84420] +pandn mm.uq[0xfdb97531eca86420] mm.uq[0x0123456789abcdef] => 1.uq[0xfc98301064002000] +pandn m64.uq[0xfdb97531eca86420] mm.uq[0x0123456789abcdef] => 1.uq[0xfc98301064002000] +pcmpeqb mm.ub[11,22,33,44,55,66,77,88] mm.ub[11,11,33,33,55,55,77,77] => 1.ub[0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00] +pcmpeqb m64.ub[11,22,33,44,55,66,77,88] mm.ub[11,11,33,33,55,55,77,77] => 1.ub[0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00] +pcmpeqd mm.ud[11223344,55667788] mm.ud[11223344,11223344] => 1.ud[0xffffffff,0x00000000] +pcmpeqd m64.ud[11223344,55667788] mm.ud[11223344,11223344] => 1.ud[0xffffffff,0x00000000] +pcmpeqw mm.uw[1122,3344,5566,7788] mm.uw[1122,1122,5566,5566] => 1.uw[0xffff,0x0000,0xffff,0x0000] +pcmpeqw m64.uw[1122,3344,5566,7788] mm.uw[1122,1122,5566,5566] => 1.uw[0xffff,0x0000,0xffff,0x0000] +pcmpgtb mm.sb[-77,-55,-33,-11,11,33,55,77] mm.sb[77,55,33,11,-11,-33,-55,-77] => 1.ub[0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00] +pcmpgtb m64.sb[-77,-55,-33,-11,11,33,55,77] mm.sb[77,55,33,11,-11,-33,-55,-77] => 1.ub[0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00] +pcmpgtd mm.sd[-11111111,11111111] mm.sd[11111111,-11111111] => 1.ud[0xffffffff,0x00000000] +pcmpgtd m64.sd[-11111111,11111111] mm.sd[11111111,-11111111] => 1.ud[0xffffffff,0x00000000] +pcmpgtw mm.sw[-3333,-1111,1111,3333] mm.sw[3333,1111,-1111,-3333] => 1.uw[0xffff,0xffff,0x0000,0x0000] +pcmpgtw m64.sw[-3333,-1111,1111,3333] mm.sw[3333,1111,-1111,-3333] => 1.uw[0xffff,0xffff,0x0000,0x0000] +pmaddwd mm.sw[1234,5678,-4321,-8765] mm.sw[1111,-2222,3333,-4444] => 1.sd[-11245542,24549767] +pmaddwd m64.sw[1234,5678,-4321,-8765] mm.sw[1111,-2222,3333,-4444] => 1.sd[-11245542,24549767] +pmulhw mm.sw[1111,2222,-1111,-2222] mm.sw[3333,-4444,3333,-4444] => 1.uw[0x0038,0xff69,0xffc7,0x0096] +pmulhw m64.sw[1111,2222,-1111,-2222] mm.sw[3333,-4444,3333,-4444] => 1.uw[0x0038,0xff69,0xffc7,0x0096] +pmullw mm.sw[1111,2222,-1111,-2222] mm.sw[3333,-4444,3333,-4444] => 1.uw[0x80b3,0x5378,0x7f4d,0xac88] +pmullw m64.sw[1111,2222,-1111,-2222] mm.sw[3333,-4444,3333,-4444] => 1.uw[0x80b3,0x5378,0x7f4d,0xac88] +por mm.uq[0xfdb97531eca86420] mm.uq[0x0123456789abcdef] => 1.uq[0xfdbb7577edabedef] +por m64.uq[0xfdb97531eca86420] mm.uq[0x0123456789abcdef] => 1.uq[0xfdbb7577edabedef] +pslld imm8[4] mm.ud[0x01234567,0x89abcdef] => 1.ud[0x12345670,0x9abcdef0] +pslld mm.uq[4] mm.ud[0x01234567,0x89abcdef] => 1.ud[0x12345670,0x9abcdef0] +pslld m64.uq[4] mm.ud[0x01234567,0x89abcdef] => 1.ud[0x12345670,0x9abcdef0] +psllq imm8[4] mm.uq[0x0123456789abcdef] => 1.uq[0x123456789abcdef0] +psllq mm.uq[4] mm.uq[0x0123456789abcdef] => 1.uq[0x123456789abcdef0] +psllq m64.uq[4] mm.uq[0x0123456789abcdef] => 1.uq[0x123456789abcdef0] +psllw imm8[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x1230,0x5670,0x9ab0,0xdef0] +psllw mm.uq[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x1230,0x5670,0x9ab0,0xdef0] +psllw m64.uq[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x1230,0x5670,0x9ab0,0xdef0] +psrad imm8[4] mm.ud[0x01234567,0x89abcdef] => 1.ud[0x00123456,0xf89abcde] +psrad mm.uq[4] mm.ud[0x01234567,0x89abcdef] => 1.ud[0x00123456,0xf89abcde] +psrad m64.uq[4] mm.ud[0x01234567,0x89abcdef] => 1.ud[0x00123456,0xf89abcde] +psraw imm8[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x0012,0x0456,0xf89a,0xfcde] +psraw mm.uq[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x0012,0x0456,0xf89a,0xfcde] +psraw m64.uq[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x0012,0x0456,0xf89a,0xfcde] +psrld imm8[4] mm.ud[0x01234567,0x89abcdef] => 1.ud[0x00123456,0x089abcde] +psrld mm.uq[4] mm.ud[0x01234567,0x89abcdef] => 1.ud[0x00123456,0x089abcde] +psrld m64.uq[4] mm.ud[0x01234567,0x89abcdef] => 1.ud[0x00123456,0x089abcde] +psrlq imm8[4] mm.uq[0x0123456789abcdef] => 1.uq[0x00123456789abcde] +psrlq mm.uq[4] mm.uq[0x0123456789abcdef] => 1.uq[0x00123456789abcde] +psrlq m64.uq[4] mm.uq[0x0123456789abcdef] => 1.uq[0x00123456789abcde] +psrlw imm8[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x0012,0x0456,0x089a,0x0cde] +psrlw mm.uq[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x0012,0x0456,0x089a,0x0cde] +psrlw m64.uq[4] mm.uw[0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x0012,0x0456,0x089a,0x0cde] +psubb mm.sb[8,7,6,5,4,3,2,1] mm.sb[12,34,56,78,21,43,65,87] => 1.sb[4,27,50,73,17,40,63,86] +psubb m64.sb[8,7,6,5,4,3,2,1] mm.sb[12,34,56,78,21,43,65,87] => 1.sb[4,27,50,73,17,40,63,86] +psubd mm.sd[8765,4321] mm.sd[12345678,87654321] => 1.sd[12336913,87650000] +psubd m64.sd[8765,4321] mm.sd[12345678,87654321] => 1.sd[12336913,87650000] +psubsb mm.sb[-50,50,-40,40,-30,30,-20,20] mm.sb[25,-25,50,-50,100,-100,125,-125] => 1.sb[75,-75,90,-90,127,-128,127,-128] +psubsb m64.sb[-50,50,-40,40,-30,30,-20,20] mm.sb[25,-25,50,-50,100,-100,125,-125] => 1.sb[75,-75,90,-90,127,-128,127,-128] +psubsw mm.sw[-32145,32145,12345,-12345] mm.sw[12345,-12345,32145,-32145] => 1.sw[32767,-32768,19800,-19800] +psubsw m64.sw[-32145,32145,12345,-12345] mm.sw[12345,-12345,32145,-32145] => 1.sw[32767,-32768,19800,-19800] +psubusb mm.ub[11,22,33,44,55,66,77,88] mm.ub[88,77,66,55,44,33,22,11] => 1.ub[77,55,33,11,0,0,0,0] +psubusb m64.ub[11,22,33,44,55,66,77,88] mm.ub[88,77,66,55,44,33,22,11] => 1.ub[77,55,33,11,0,0,0,0] +psubusw mm.uw[1122,3344,5566,7788] mm.uw[8877,6655,4433,2211] => 1.uw[7755,3311,0,0] +psubusw m64.uw[1122,3344,5566,7788] mm.uw[8877,6655,4433,2211] => 1.uw[7755,3311,0,0] +psubw mm.sw[87,65,43,21] mm.sw[1234,5678,4321,8765] => 1.sw[1147,5613,4278,8744] +psubw m64.sw[87,65,43,21] mm.sw[1234,5678,4321,8765] => 1.sw[1147,5613,4278,8744] +punpckhbw mm.ub[12,34,56,78,21,43,65,87] mm.ub[11,22,33,44,55,66,77,88] => 1.ub[55,21,66,43,77,65,88,87] +punpckhbw m64.ub[12,34,56,78,21,43,65,87] mm.ub[11,22,33,44,55,66,77,88] => 1.ub[55,21,66,43,77,65,88,87] +punpckhdq mm.ud[12345678,21436587] mm.ud[11223344,55667788] => 1.ud[55667788,21436587] +punpckhdq m64.ud[12345678,21436587] mm.ud[11223344,55667788] => 1.ud[55667788,21436587] +punpckhwd mm.uw[1234,5678,2143,6587] mm.uw[1122,3344,5566,7788] => 1.uw[5566,2143,7788,6587] +punpckhwd m64.uw[1234,5678,2143,6587] mm.uw[1122,3344,5566,7788] => 1.uw[5566,2143,7788,6587] +punpcklbw mm.ub[12,34,56,78,21,43,65,87] mm.ub[11,22,33,44,55,66,77,88] => 1.ub[11,12,22,34,33,56,44,78] +punpcklbw m64.ub[12,34,56,78,21,43,65,87] mm.ub[11,22,33,44,55,66,77,88] => 1.ub[11,12,22,34,33,56,44,78] +punpckldq mm.ud[12345678,21436587] mm.ud[11223344,55667788] => 1.ud[11223344,12345678] +punpckldq m64.ud[12345678,21436587] mm.ud[11223344,55667788] => 1.ud[11223344,12345678] +punpcklwd mm.uw[1234,5678,2143,6587] mm.uw[1122,3344,5566,7788] => 1.uw[1122,1234,3344,5678] +punpcklwd m64.uw[1234,5678,2143,6587] mm.uw[1122,3344,5566,7788] => 1.uw[1122,1234,3344,5678] +pxor mm.uq[0xfdb97531eca86420] mm.uq[0x0123456789abcdef] => 1.uq[0xfc9a30566503a9cf] +pxor m64.uq[0xfdb97531eca86420] mm.uq[0x0123456789abcdef] => 1.uq[0xfc9a30566503a9cf] diff --git a/none/tests/insn_sse.def b/none/tests/insn_sse.def index b2374105c2..b3d9edc928 100644 --- a/none/tests/insn_sse.def +++ b/none/tests/insn_sse.def @@ -1,141 +1,141 @@ -addps xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[44.44,33.33,22.22,11.11] 1.ps[56.78,90.11,65.43,98.76] -addps m128.ps[12.34,56.78,43.21,87.65] xmm.ps[44.44,33.33,22.22,11.11] 1.ps[56.78,90.11,65.43,98.76] -addss xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[44.44,33.33,22.22,11.11] 1.ps[56.78,33.33,22.22,11.11] -addss m128.ps[12.34,56.78,43.21,87.65] xmm.ps[44.44,33.33,22.22,11.11] 1.ps[56.78,33.33,22.22,11.11] -andnps xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfc98301064002000,0x00020046010389cf] -andnps m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfc98301064002000,0x00020046010389cf] -andps xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0x0121452188a84420,0x0121452188a84420] -andps m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0x0121452188a84420,0x0121452188a84420] -cmpeqps xmm.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5678,234.5679,234.5678,234.5679] 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] -cmpeqps m128.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5678,234.5679,234.5678,234.5679] 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] -cmpeqss xmm.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5678,0.0,0.0,0.0] 1.ud[0xffffffff,0,0,0] -cmpeqss m128.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5679,0.0,0.0,0.0] 1.ud[0x00000000,0,0,0] -cmpleps xmm.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5678,234.5679,234.5678,234.5679] 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] -cmpleps m128.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5678,234.5679,234.5678,234.5679] 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] -cmpless xmm.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5678,0.0,0.0,0.0] 1.ud[0xffffffff,0,0,0] -cmpless m128.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5679,0.0,0.0,0.0] 1.ud[0x00000000,0,0,0] -cmpltps xmm.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5677,234.5679,234.5677,234.5679] 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] -cmpltps m128.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5677,234.5679,234.5677,234.5679] 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] -cmpltss xmm.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5676,0.0,0.0,0.0] 1.ud[0xffffffff,0,0,0] -cmpltss m128.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5679,0.0,0.0,0.0] 1.ud[0x00000000,0,0,0] -cmpneqps xmm.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5679,234.5678,234.5679,234.5678] 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] -cmpneqps m128.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5679,234.5678,234.5679,234.5678] 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] -cmpneqss xmm.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5679,0.0,0.0,0.0] 1.ud[0xffffffff,0,0,0] -cmpneqss m128.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5678,0.0,0.0,0.0] 1.ud[0x00000000,0,0,0] -cmpnleps xmm.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5679,234.5678,234.5679,234.5678] 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] -cmpnleps m128.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5679,234.5678,234.5679,234.5678] 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] -cmpnless xmm.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5679,0.0,0.0,0.0] 1.ud[0xffffffff,0,0,0] -cmpnless m128.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5678,0.0,0.0,0.0] 1.ud[0x00000000,0,0,0] -cmpnltps xmm.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5679,234.5677,234.5679,234.5677] 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] -cmpnltps m128.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5679,234.5677,234.5679,234.5677] 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] -cmpnltss xmm.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5679,0.0,0.0,0.0] 1.ud[0xffffffff,0,0,0] -cmpnltss m128.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5676,0.0,0.0,0.0] 1.ud[0x00000000,0,0,0] -comiss xmm.ps[234.5678,0.0] xmm.ps[234.5679,0.0] eflags[0x8d5,0x000] -comiss m32.ps[234.5678] xmm.ps[234.5679,0.0] eflags[0x8d5,0x000] -comiss xmm.ps[234.5678,0.0] xmm.ps[234.5677,0.0] eflags[0x8d5,0x001] -comiss m32.ps[234.5678] xmm.ps[234.5677,0.0] eflags[0x8d5,0x001] -comiss xmm.ps[234.5678,0.0] xmm.ps[234.5678,0.0] eflags[0x8d5,0x040] -comiss m32.ps[234.5678] xmm.ps[234.5678,0.0] eflags[0x8d5,0x040] -cvtpi2ps mm.sd[1234,5678] xmm.ps[1.1,2.2,3.3,4.4] 1.ps[1234.0,5678.0,3.3,4.4] -cvtpi2ps m64.sd[1234,5678] xmm.ps[1.1,2.2,3.3,4.4] 1.ps[1234.0,5678.0,3.3,4.4] -cvtps2pi xmm.ps[12.34,56.78,1.11,2.22] mm.sd[1,2] 1.sd[12,57] -cvtps2pi m128.ps[12.34,56.78,1.11,2.22] mm.sd[1,2] 1.sd[12,57] -cvtsi2ss r.sd[12] xmm.ps[1.11,2.22,3.33,4.44] 1.ps[12.0,2.22,3.33,4.44] -cvtsi2ss m32.sd[12] xmm.ps[1.11,2.22,3.33,4.44] 1.ps[12.0,2.22,3.33,4.44] -cvtss2si xmm.ps[12.34,56.78,43.21,87.65] r.sd[99] 1.sd[12] -cvtss2si m128.ps[56.78,12.34,87.65,43.21] r.sd[99] 1.sd[57] -cvttps2pi xmm.ps[12.34,56.78,1.11,2.22] mm.sd[1,2] 1.sd[12,56] -cvttps2pi m128.ps[12.34,56.78,1.11,2.22] mm.sd[1,2] 1.sd[12,56] -cvttss2si xmm.ps[12.34,56.78,43.21,87.65] r.sd[99] 1.sd[12] -cvttss2si m128.ps[56.78,12.34,87.65,43.21] r.sd[99] 1.sd[56] -divps xmm.ps[2.0,3.0,4.0,5.0] xmm.ps[24.68,3.69,48.48,55.55] 1.ps[12.34,1.23,12.12,11.11] -divps m128.ps[2.0,3.0,4.0,5.0] xmm.ps[24.68,3.69,48.48,55.55] 1.ps[12.34,1.23,12.12,11.11] -divss xmm.ps[2.0,3.0,4.0,5.0] xmm.ps[24.68,3.69,48.48,55.55] 1.ps[12.34,3.69,48.48,55.55] -divss m128.ps[2.0,3.0,4.0,5.0] xmm.ps[24.68,3.69,48.48,55.55] 1.ps[12.34,3.69,48.48,55.55] -maxps xmm.ps[2.22,4.44,6.66,8.88] xmm.ps[7.77,5.55,3.33,1.11] 1.ps[7.77,5.55,6.66,8.88] -maxps m128.ps[2.22,4.44,6.66,8.88] xmm.ps[7.77,5.55,3.33,1.11] 1.ps[7.77,5.55,6.66,8.88] -maxss xmm.ps[2.22,4.44,6.66,8.88] xmm.ps[7.77,5.55,3.33,1.11] 1.ps[7.77,5.55,3.33,1.11] -maxss m128.ps[8.88,6.66,4.44,2.22] xmm.ps[1.11,3.33,5.55,7.77] 1.ps[8.88,3.33,5.55,7.77] -minps xmm.ps[2.22,4.44,6.66,8.88] xmm.ps[7.77,5.55,3.33,1.11] 1.ps[2.22,4.44,3.33,1.11] -minps m128.ps[2.22,4.44,6.66,8.88] xmm.ps[7.77,5.55,3.33,1.11] 1.ps[2.22,4.44,3.33,1.11] -minss xmm.ps[2.22,4.44,6.66,8.88] xmm.ps[7.77,5.55,3.33,1.11] 1.ps[2.22,5.55,3.33,1.11] -minss m128.ps[8.88,6.66,4.44,2.22] xmm.ps[1.11,3.33,5.55,7.77] 1.ps[1.11,3.33,5.55,7.77] -movaps xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[11.11,22.22,33.33,44.44] 1.ps[12.34,56.78,43.21,87.65] -movaps m128.ps[12.34,56.78,43.21,87.65] xmm.ps[11.11,22.22,33.33,44.44] 1.ps[12.34,56.78,43.21,87.65] -movhlps xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[11.11,22.22,33.33,44.44] 1.ps[43.21,87.65,33.33,44.44] -movhps m64.ps[12.34,56.78] xmm.ps[11.11,22.22,33.33,44.44] 1.ps[11.11,22.22,12.34,56.78] -movhps xmm.ps[12.34,56.78,43.21,87.65] m64.ps[11.11,22.22] 1.ps[43.21,87.65] -movlhps xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[11.11,22.22,33.33,44.44] 1.ps[11.11,22.22,12.34,56.78] -movlps m64.ps[12.34,56.78] xmm.ps[11.11,22.22,33.33,44.44] 1.ps[12.34,56.78,33.33,44.44] -movlps xmm.ps[12.34,56.78,43.21,87.65] m64.ps[11.11,22.22] 1.ps[12.34,56.78] -movmskps xmm.ps[12.34,-56.78,43.21,-87.65] r.sd[0] 1.sd[10] -movntps xmm.ps[12.34,56.78,43.21,87.65] m128.ps[11.11,22.22,33.33,44.44] 1.ps[12.34,56.78,43.21,87.65] -movntq mm.uq[0x0123456789abcdef] m64.uq[0x1212121234343434] 1.uq[0x0123456789abcdef] -movss xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[11.11,22.22,33.33,44.44] 1.ps[12.34,22.22,33.33,44.44] -movss m32.ps[12.34] xmm.ps[11.11,22.22,33.33,44.44] 1.ps[12.34,0.0,0.0,0.0] -movss xmm.ps[12.34,56.78,43.21,87.65] m32.ps[11.11] 1.ps[12.34] -movups xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[11.11,22.22,33.33,44.44] 1.ps[12.34,56.78,43.21,87.65] -movups m128.ps[12.34,56.78,43.21,87.65] xmm.ps[11.11,22.22,33.33,44.44] 1.ps[12.34,56.78,43.21,87.65] -mulps xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[5.0,4.0,3.0,2.0] 1.ps[61.70,227.12,129.63,175.30] -mulps m128.ps[12.34,56.78,43.21,87.65] xmm.ps[5.0,4.0,3.0,2.0] 1.ps[61.70,227.12,129.63,175.30] -mulss xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[5.0,4.0,3.0,2.0] 1.ps[61.70,4.0,3.0,2.0] -mulss m128.ps[12.34,56.78,43.21,87.65] xmm.ps[5.0,4.0,3.0,2.0] 1.ps[61.70,4.0,3.0,2.0] -orps xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfdbb7577edabedef,0xfdbb7577edabedef] -orps m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfdbb7577edabedef,0xfdbb7577edabedef] -pavgb mm.ub[11,22,33,44,55,66,77,88] mm.ub[15,25,35,45,55,65,75,85] 1.ub[13,24,34,45,55,66,76,87] -pavgb m64.ub[11,22,33,44,55,66,77,88] mm.ub[15,25,35,45,55,65,75,85] 1.ub[13,24,34,45,55,66,76,87] -pavgw mm.uw[1122,3344,5566,7788] mm.uw[1525,3545,5565,7585] 1.uw[1324,3445,5566,7687] -pavgw m64.uw[1122,3344,5566,7788] mm.uw[1525,3545,5565,7585] 1.uw[1324,3445,5566,7687] -pextrw imm8[0] mm.uw[1234,5678,4321,8765] r.ud[0xffffffff] 2.ud[1234] -pextrw imm8[1] mm.uw[1234,5678,4321,8765] r.ud[0xffffffff] 2.ud[5678] -pextrw imm8[2] mm.uw[1234,5678,4321,8765] r.ud[0xffffffff] 2.ud[4321] -pextrw imm8[3] mm.uw[1234,5678,4321,8765] r.ud[0xffffffff] 2.ud[8765] -pinsrw imm8[0] r.ud[0xffffffff] mm.uw[1234,5678,4321,8765] 2.uw[65535,5678,4321,8765] -pinsrw imm8[1] r.ud[0xffffffff] mm.uw[1234,5678,4321,8765] 2.uw[1234,65535,4321,8765] -pinsrw imm8[2] r.ud[0xffffffff] mm.uw[1234,5678,4321,8765] 2.uw[1234,5678,65535,8765] -pinsrw imm8[3] r.ud[0xffffffff] mm.uw[1234,5678,4321,8765] 2.uw[1234,5678,4321,65535] -pmaxsw mm.sw[-1,2,-3,4] mm.sw[2,-3,4,-5] 1.sw[2,2,4,4] -pmaxsw m64.sw[-1,2,-3,4] mm.sw[2,-3,4,-5] 1.sw[2,2,4,4] -pmaxub mm.ub[1,2,3,4,5,6,7,8] mm.ub[8,7,6,5,4,3,2,1] 1.ub[8,7,6,5,5,6,7,8] -pmaxub m64.ub[1,2,3,4,5,6,7,8] mm.ub[8,7,6,5,4,3,2,1] 1.ub[8,7,6,5,5,6,7,8] -pminsw mm.sw[-1,2,-3,4] mm.sw[2,-3,4,-5] 1.sw[-1,-3,-3,-5] -pminsw m64.sw[-1,2,-3,4] mm.sw[2,-3,4,-5] 1.sw[-1,-3,-3,-5] -pminub mm.ub[1,2,3,4,5,6,7,8] mm.ub[8,7,6,5,4,3,2,1] 1.ub[1,2,3,4,4,3,2,1] -pminub m64.ub[1,2,3,4,5,6,7,8] mm.ub[8,7,6,5,4,3,2,1] 1.ub[1,2,3,4,4,3,2,1] -pmovmskb mm.uq[0x8000000080008088] r.ud[0] 1.ud[0x8b] -pmulhuw mm.uw[1111,2222,3333,4444] mm.uw[5555,6666,7777,8888] 1.uw[0x005e,0x00e2,0x018b,0x025a] -pmulhuw m64.uw[1111,2222,3333,4444] mm.uw[5555,6666,7777,8888] 1.uw[0x005e,0x00e2,0x018b,0x025a] -psadbw mm.ub[1,2,3,4,5,6,7,8] mm.ub[8,7,6,5,4,3,2,1] 1.sw[32,0,0,0] -psadbw m64.ub[1,2,3,4,5,6,7,8] mm.ub[8,7,6,5,4,3,2,1] 1.sw[32,0,0,0] -pshufw imm8[0x1b] mm.sw[11,22,33,44] mm.sw[0,0,0,0] 2.sw[44,33,22,11] -pshufw imm8[0x1b] m64.sw[11,22,33,44] mm.sw[0,0,0,0] 2.sw[44,33,22,11] -rcpps xmm.ps[2.0,4.0,0.5,0.25] xmm.ps[1.11,2.22,3.33,4.44] 1.ps[0.5,0.25,2.0,4.0] -rcpps m128.ps[2.0,4.0,0.5,0.25] xmm.ps[1.11,2.22,3.33,4.44] 1.ps[0.5,0.25,2.0,4.0] -rcpss xmm.ps[2.0,4.0,0.5,0.25] xmm.ps[1.11,2.22,3.33,4.44] 1.ps[0.5,2.22,3.33,4.44] -rcpss m128.ps[2.0,4.0,0.5,0.25] xmm.ps[1.11,2.22,3.33,4.44] 1.ps[0.5,2.22,3.33,4.44] -rsqrtps xmm.ps[4.0,16.0,25.0,64.0] xmm.ps[1.11,2.22,3.33,4.44] 1.ps[0.499878,0.249939,0.199982,0.124969] -rsqrtps m128.ps[4.0,16.0,25.0,64.0] xmm.ps[1.11,2.22,3.33,4.44] 1.ps[0.499878,0.249939,0.199982,0.124969] -rsqrtss xmm.ps[16.0,5.55,6.66,7.77] xmm.ps[1.11,2.22,3.33,4.44] 1.ps[0.249939,2.22,3.33,4.44] -rsqrtss m128.ps[16.0,5.55,6.66,7.77] xmm.ps[1.11,2.22,3.33,4.44] 1.ps[0.249939,2.22,3.33,4.44] -shufps imm8[0xe4] xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[12.34,56.78,43.21,87.65] 2.ps[12.34,56.78,43.21,87.65] -shufps imm8[0xb1] m128.ps[12.34,56.78,43.21,87.65] xmm.ps[12.34,56.78,43.21,87.65] 2.ps[56.78,12.34,87.65,43.21] -sqrtps xmm.ps[16.0,25.0,36.0,49.0] xmm.ps[1.11,2.22,3.33,4.44] 1.ps[4.0,5.0,6.0,7.0] -sqrtps m128.ps[16.0,25.0,36.0,49.0] xmm.ps[1.11,2.22,3.33,4.44] 1.ps[4.0,5.0,6.0,7.0] -sqrtss xmm.ps[16.0,5.55,6.66,7.77] xmm.ps[1.11,2.22,3.33,4.44] 1.ps[4.0,2.22,3.33,4.44] -sqrtss m128.ps[16.0,5.55,6.66,7.77] xmm.ps[1.11,2.22,3.33,4.44] 1.ps[4.0,2.22,3.33,4.44] -subps xmm.ps[12.34,56.77,43.21,87.65] xmm.ps[44.0,33.0,22.0,11.0] 1.ps[31.66,-23.77,-21.21,-76.65] -subps m128.ps[12.34,56.77,43.21,87.65] xmm.ps[44.0,33.0,22.0,11.0] 1.ps[31.66,-23.77,-21.21,-76.65] -subss xmm.ps[12.34,56.77,43.21,87.65] xmm.ps[44.0,33.0,22.0,11.0] 1.ps[31.66,33.0,22.0,11.0] -subss m128.ps[12.34,56.77,43.21,87.65] xmm.ps[44.0,33.0,22.0,11.0] 1.ps[31.66,33.0,22.0,11.0] -ucomiss xmm.ps[234.5678,0.0] xmm.ps[234.5679,0.0] eflags[0x8d5,0x000] -ucomiss m32.ps[234.5678] xmm.ps[234.5679,0.0] eflags[0x8d5,0x000] -ucomiss xmm.ps[234.5678,0.0] xmm.ps[234.5677,0.0] eflags[0x8d5,0x001] -ucomiss m32.ps[234.5678] xmm.ps[234.5677,0.0] eflags[0x8d5,0x001] -ucomiss xmm.ps[234.5678,0.0] xmm.ps[234.5678,0.0] eflags[0x8d5,0x040] -ucomiss m32.ps[234.5678] xmm.ps[234.5678,0.0] eflags[0x8d5,0x040] -unpckhps xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[11.22,33.44,55.66,77.88] 1.ps[55.66,43.21,77.88,87.65] -unpckhps m128.ps[12.34,56.78,43.21,87.65] xmm.ps[11.22,33.44,55.66,77.88] 1.ps[55.66,43.21,77.88,87.65] -unpcklps xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[11.22,33.44,55.66,77.88] 1.ps[11.22,12.34,33.44,56.78] -unpcklps m128.ps[12.34,56.78,43.21,87.65] xmm.ps[11.22,33.44,55.66,77.88] 1.ps[11.22,12.34,33.44,56.78] -xorps xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfc9a30566503a9cf,0xfc9a30566503a9cf] -xorps m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfc9a30566503a9cf,0xfc9a30566503a9cf] +addps xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[44.44,33.33,22.22,11.11] => 1.ps[56.78,90.11,65.43,98.76] +addps m128.ps[12.34,56.78,43.21,87.65] xmm.ps[44.44,33.33,22.22,11.11] => 1.ps[56.78,90.11,65.43,98.76] +addss xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[44.44,33.33,22.22,11.11] => 1.ps[56.78,33.33,22.22,11.11] +addss m128.ps[12.34,56.78,43.21,87.65] xmm.ps[44.44,33.33,22.22,11.11] => 1.ps[56.78,33.33,22.22,11.11] +andnps xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfc98301064002000,0x00020046010389cf] +andnps m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfc98301064002000,0x00020046010389cf] +andps xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0x0121452188a84420,0x0121452188a84420] +andps m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0x0121452188a84420,0x0121452188a84420] +cmpeqps xmm.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5678,234.5679,234.5678,234.5679] => 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] +cmpeqps m128.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5678,234.5679,234.5678,234.5679] => 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] +cmpeqss xmm.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5678,0.0,0.0,0.0] => 1.ud[0xffffffff,0,0,0] +cmpeqss m128.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5679,0.0,0.0,0.0] => 1.ud[0x00000000,0,0,0] +cmpleps xmm.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5678,234.5679,234.5678,234.5679] => 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] +cmpleps m128.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5678,234.5679,234.5678,234.5679] => 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] +cmpless xmm.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5678,0.0,0.0,0.0] => 1.ud[0xffffffff,0,0,0] +cmpless m128.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5679,0.0,0.0,0.0] => 1.ud[0x00000000,0,0,0] +cmpltps xmm.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5677,234.5679,234.5677,234.5679] => 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] +cmpltps m128.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5677,234.5679,234.5677,234.5679] => 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] +cmpltss xmm.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5676,0.0,0.0,0.0] => 1.ud[0xffffffff,0,0,0] +cmpltss m128.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5679,0.0,0.0,0.0] => 1.ud[0x00000000,0,0,0] +cmpneqps xmm.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5679,234.5678,234.5679,234.5678] => 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] +cmpneqps m128.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5679,234.5678,234.5679,234.5678] => 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] +cmpneqss xmm.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5679,0.0,0.0,0.0] => 1.ud[0xffffffff,0,0,0] +cmpneqss m128.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5678,0.0,0.0,0.0] => 1.ud[0x00000000,0,0,0] +cmpnleps xmm.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5679,234.5678,234.5679,234.5678] => 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] +cmpnleps m128.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5679,234.5678,234.5679,234.5678] => 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] +cmpnless xmm.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5679,0.0,0.0,0.0] => 1.ud[0xffffffff,0,0,0] +cmpnless m128.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5678,0.0,0.0,0.0] => 1.ud[0x00000000,0,0,0] +cmpnltps xmm.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5679,234.5677,234.5679,234.5677] => 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] +cmpnltps m128.ps[234.5678,234.5678,234.5678,234.5678] xmm.ps[234.5679,234.5677,234.5679,234.5677] => 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] +cmpnltss xmm.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5679,0.0,0.0,0.0] => 1.ud[0xffffffff,0,0,0] +cmpnltss m128.ps[1234.5678,0.0,0.0,0.0] xmm.ps[1234.5676,0.0,0.0,0.0] => 1.ud[0x00000000,0,0,0] +comiss xmm.ps[234.5678,0.0] xmm.ps[234.5679,0.0] => eflags[0x8d5,0x000] +comiss m32.ps[234.5678] xmm.ps[234.5679,0.0] => eflags[0x8d5,0x000] +comiss xmm.ps[234.5678,0.0] xmm.ps[234.5677,0.0] => eflags[0x8d5,0x001] +comiss m32.ps[234.5678] xmm.ps[234.5677,0.0] => eflags[0x8d5,0x001] +comiss xmm.ps[234.5678,0.0] xmm.ps[234.5678,0.0] => eflags[0x8d5,0x040] +comiss m32.ps[234.5678] xmm.ps[234.5678,0.0] => eflags[0x8d5,0x040] +cvtpi2ps mm.sd[1234,5678] xmm.ps[1.1,2.2,3.3,4.4] => 1.ps[1234.0,5678.0,3.3,4.4] +cvtpi2ps m64.sd[1234,5678] xmm.ps[1.1,2.2,3.3,4.4] => 1.ps[1234.0,5678.0,3.3,4.4] +cvtps2pi xmm.ps[12.34,56.78,1.11,2.22] mm.sd[1,2] => 1.sd[12,57] +cvtps2pi m128.ps[12.34,56.78,1.11,2.22] mm.sd[1,2] => 1.sd[12,57] +cvtsi2ss r32.sd[12] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[12.0,2.22,3.33,4.44] +cvtsi2ss m32.sd[12] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[12.0,2.22,3.33,4.44] +cvtss2si xmm.ps[12.34,56.78,43.21,87.65] r32.sd[99] => 1.sd[12] +cvtss2si m128.ps[56.78,12.34,87.65,43.21] r32.sd[99] => 1.sd[57] +cvttps2pi xmm.ps[12.34,56.78,1.11,2.22] mm.sd[1,2] => 1.sd[12,56] +cvttps2pi m128.ps[12.34,56.78,1.11,2.22] mm.sd[1,2] => 1.sd[12,56] +cvttss2si xmm.ps[12.34,56.78,43.21,87.65] r32.sd[99] => 1.sd[12] +cvttss2si m128.ps[56.78,12.34,87.65,43.21] r32.sd[99] => 1.sd[56] +divps xmm.ps[2.0,3.0,4.0,5.0] xmm.ps[24.68,3.69,48.48,55.55] => 1.ps[12.34,1.23,12.12,11.11] +divps m128.ps[2.0,3.0,4.0,5.0] xmm.ps[24.68,3.69,48.48,55.55] => 1.ps[12.34,1.23,12.12,11.11] +divss xmm.ps[2.0,3.0,4.0,5.0] xmm.ps[24.68,3.69,48.48,55.55] => 1.ps[12.34,3.69,48.48,55.55] +divss m128.ps[2.0,3.0,4.0,5.0] xmm.ps[24.68,3.69,48.48,55.55] => 1.ps[12.34,3.69,48.48,55.55] +maxps xmm.ps[2.22,4.44,6.66,8.88] xmm.ps[7.77,5.55,3.33,1.11] => 1.ps[7.77,5.55,6.66,8.88] +maxps m128.ps[2.22,4.44,6.66,8.88] xmm.ps[7.77,5.55,3.33,1.11] => 1.ps[7.77,5.55,6.66,8.88] +maxss xmm.ps[2.22,4.44,6.66,8.88] xmm.ps[7.77,5.55,3.33,1.11] => 1.ps[7.77,5.55,3.33,1.11] +maxss m128.ps[8.88,6.66,4.44,2.22] xmm.ps[1.11,3.33,5.55,7.77] => 1.ps[8.88,3.33,5.55,7.77] +minps xmm.ps[2.22,4.44,6.66,8.88] xmm.ps[7.77,5.55,3.33,1.11] => 1.ps[2.22,4.44,3.33,1.11] +minps m128.ps[2.22,4.44,6.66,8.88] xmm.ps[7.77,5.55,3.33,1.11] => 1.ps[2.22,4.44,3.33,1.11] +minss xmm.ps[2.22,4.44,6.66,8.88] xmm.ps[7.77,5.55,3.33,1.11] => 1.ps[2.22,5.55,3.33,1.11] +minss m128.ps[8.88,6.66,4.44,2.22] xmm.ps[1.11,3.33,5.55,7.77] => 1.ps[1.11,3.33,5.55,7.77] +movaps xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[11.11,22.22,33.33,44.44] => 1.ps[12.34,56.78,43.21,87.65] +movaps m128.ps[12.34,56.78,43.21,87.65] xmm.ps[11.11,22.22,33.33,44.44] => 1.ps[12.34,56.78,43.21,87.65] +movhlps xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[11.11,22.22,33.33,44.44] => 1.ps[43.21,87.65,33.33,44.44] +movhps m64.ps[12.34,56.78] xmm.ps[11.11,22.22,33.33,44.44] => 1.ps[11.11,22.22,12.34,56.78] +movhps xmm.ps[12.34,56.78,43.21,87.65] m64.ps[11.11,22.22] => 1.ps[43.21,87.65] +movlhps xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[11.11,22.22,33.33,44.44] => 1.ps[11.11,22.22,12.34,56.78] +movlps m64.ps[12.34,56.78] xmm.ps[11.11,22.22,33.33,44.44] => 1.ps[12.34,56.78,33.33,44.44] +movlps xmm.ps[12.34,56.78,43.21,87.65] m64.ps[11.11,22.22] => 1.ps[12.34,56.78] +movmskps xmm.ps[12.34,-56.78,43.21,-87.65] r32.sd[0] => 1.sd[10] +movntps xmm.ps[12.34,56.78,43.21,87.65] m128.ps[11.11,22.22,33.33,44.44] => 1.ps[12.34,56.78,43.21,87.65] +movntq mm.uq[0x0123456789abcdef] m64.uq[0x1212121234343434] => 1.uq[0x0123456789abcdef] +movss xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[11.11,22.22,33.33,44.44] => 1.ps[12.34,22.22,33.33,44.44] +movss m32.ps[12.34] xmm.ps[11.11,22.22,33.33,44.44] => 1.ps[12.34,0.0,0.0,0.0] +movss xmm.ps[12.34,56.78,43.21,87.65] m32.ps[11.11] => 1.ps[12.34] +movups xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[11.11,22.22,33.33,44.44] => 1.ps[12.34,56.78,43.21,87.65] +movups m128.ps[12.34,56.78,43.21,87.65] xmm.ps[11.11,22.22,33.33,44.44] => 1.ps[12.34,56.78,43.21,87.65] +mulps xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[5.0,4.0,3.0,2.0] => 1.ps[61.70,227.12,129.63,175.30] +mulps m128.ps[12.34,56.78,43.21,87.65] xmm.ps[5.0,4.0,3.0,2.0] => 1.ps[61.70,227.12,129.63,175.30] +mulss xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[5.0,4.0,3.0,2.0] => 1.ps[61.70,4.0,3.0,2.0] +mulss m128.ps[12.34,56.78,43.21,87.65] xmm.ps[5.0,4.0,3.0,2.0] => 1.ps[61.70,4.0,3.0,2.0] +orps xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfdbb7577edabedef,0xfdbb7577edabedef] +orps m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfdbb7577edabedef,0xfdbb7577edabedef] +pavgb mm.ub[11,22,33,44,55,66,77,88] mm.ub[15,25,35,45,55,65,75,85] => 1.ub[13,24,34,45,55,66,76,87] +pavgb m64.ub[11,22,33,44,55,66,77,88] mm.ub[15,25,35,45,55,65,75,85] => 1.ub[13,24,34,45,55,66,76,87] +pavgw mm.uw[1122,3344,5566,7788] mm.uw[1525,3545,5565,7585] => 1.uw[1324,3445,5566,7687] +pavgw m64.uw[1122,3344,5566,7788] mm.uw[1525,3545,5565,7585] => 1.uw[1324,3445,5566,7687] +pextrw imm8[0] mm.uw[1234,5678,4321,8765] r32.ud[0xffffffff] => 2.ud[1234] +pextrw imm8[1] mm.uw[1234,5678,4321,8765] r32.ud[0xffffffff] => 2.ud[5678] +pextrw imm8[2] mm.uw[1234,5678,4321,8765] r32.ud[0xffffffff] => 2.ud[4321] +pextrw imm8[3] mm.uw[1234,5678,4321,8765] r32.ud[0xffffffff] => 2.ud[8765] +pinsrw imm8[0] r32.ud[0xffffffff] mm.uw[1234,5678,4321,8765] => 2.uw[65535,5678,4321,8765] +pinsrw imm8[1] r32.ud[0xffffffff] mm.uw[1234,5678,4321,8765] => 2.uw[1234,65535,4321,8765] +pinsrw imm8[2] r32.ud[0xffffffff] mm.uw[1234,5678,4321,8765] => 2.uw[1234,5678,65535,8765] +pinsrw imm8[3] r32.ud[0xffffffff] mm.uw[1234,5678,4321,8765] => 2.uw[1234,5678,4321,65535] +pmaxsw mm.sw[-1,2,-3,4] mm.sw[2,-3,4,-5] => 1.sw[2,2,4,4] +pmaxsw m64.sw[-1,2,-3,4] mm.sw[2,-3,4,-5] => 1.sw[2,2,4,4] +pmaxub mm.ub[1,2,3,4,5,6,7,8] mm.ub[8,7,6,5,4,3,2,1] => 1.ub[8,7,6,5,5,6,7,8] +pmaxub m64.ub[1,2,3,4,5,6,7,8] mm.ub[8,7,6,5,4,3,2,1] => 1.ub[8,7,6,5,5,6,7,8] +pminsw mm.sw[-1,2,-3,4] mm.sw[2,-3,4,-5] => 1.sw[-1,-3,-3,-5] +pminsw m64.sw[-1,2,-3,4] mm.sw[2,-3,4,-5] => 1.sw[-1,-3,-3,-5] +pminub mm.ub[1,2,3,4,5,6,7,8] mm.ub[8,7,6,5,4,3,2,1] => 1.ub[1,2,3,4,4,3,2,1] +pminub m64.ub[1,2,3,4,5,6,7,8] mm.ub[8,7,6,5,4,3,2,1] => 1.ub[1,2,3,4,4,3,2,1] +pmovmskb mm.uq[0x8000000080008088] r32.ud[0] => 1.ud[0x8b] +pmulhuw mm.uw[1111,2222,3333,4444] mm.uw[5555,6666,7777,8888] => 1.uw[0x005e,0x00e2,0x018b,0x025a] +pmulhuw m64.uw[1111,2222,3333,4444] mm.uw[5555,6666,7777,8888] => 1.uw[0x005e,0x00e2,0x018b,0x025a] +psadbw mm.ub[1,2,3,4,5,6,7,8] mm.ub[8,7,6,5,4,3,2,1] => 1.sw[32,0,0,0] +psadbw m64.ub[1,2,3,4,5,6,7,8] mm.ub[8,7,6,5,4,3,2,1] => 1.sw[32,0,0,0] +pshufw imm8[0x1b] mm.sw[11,22,33,44] mm.sw[0,0,0,0] => 2.sw[44,33,22,11] +pshufw imm8[0x1b] m64.sw[11,22,33,44] mm.sw[0,0,0,0] => 2.sw[44,33,22,11] +rcpps xmm.ps[2.0,4.0,0.5,0.25] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[0.5,0.25,2.0,4.0] +rcpps m128.ps[2.0,4.0,0.5,0.25] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[0.5,0.25,2.0,4.0] +rcpss xmm.ps[2.0,4.0,0.5,0.25] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[0.5,2.22,3.33,4.44] +rcpss m128.ps[2.0,4.0,0.5,0.25] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[0.5,2.22,3.33,4.44] +rsqrtps xmm.ps[4.0,16.0,25.0,64.0] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[0.499878,0.249939,0.199982,0.124969] +rsqrtps m128.ps[4.0,16.0,25.0,64.0] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[0.499878,0.249939,0.199982,0.124969] +rsqrtss xmm.ps[16.0,5.55,6.66,7.77] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[0.249939,2.22,3.33,4.44] +rsqrtss m128.ps[16.0,5.55,6.66,7.77] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[0.249939,2.22,3.33,4.44] +shufps imm8[0xe4] xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[12.34,56.78,43.21,87.65] => 2.ps[12.34,56.78,43.21,87.65] +shufps imm8[0xb1] m128.ps[12.34,56.78,43.21,87.65] xmm.ps[12.34,56.78,43.21,87.65] => 2.ps[56.78,12.34,87.65,43.21] +sqrtps xmm.ps[16.0,25.0,36.0,49.0] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[4.0,5.0,6.0,7.0] +sqrtps m128.ps[16.0,25.0,36.0,49.0] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[4.0,5.0,6.0,7.0] +sqrtss xmm.ps[16.0,5.55,6.66,7.77] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[4.0,2.22,3.33,4.44] +sqrtss m128.ps[16.0,5.55,6.66,7.77] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[4.0,2.22,3.33,4.44] +subps xmm.ps[12.34,56.77,43.21,87.65] xmm.ps[44.0,33.0,22.0,11.0] => 1.ps[31.66,-23.77,-21.21,-76.65] +subps m128.ps[12.34,56.77,43.21,87.65] xmm.ps[44.0,33.0,22.0,11.0] => 1.ps[31.66,-23.77,-21.21,-76.65] +subss xmm.ps[12.34,56.77,43.21,87.65] xmm.ps[44.0,33.0,22.0,11.0] => 1.ps[31.66,33.0,22.0,11.0] +subss m128.ps[12.34,56.77,43.21,87.65] xmm.ps[44.0,33.0,22.0,11.0] => 1.ps[31.66,33.0,22.0,11.0] +ucomiss xmm.ps[234.5678,0.0] xmm.ps[234.5679,0.0] => eflags[0x8d5,0x000] +ucomiss m32.ps[234.5678] xmm.ps[234.5679,0.0] => eflags[0x8d5,0x000] +ucomiss xmm.ps[234.5678,0.0] xmm.ps[234.5677,0.0] => eflags[0x8d5,0x001] +ucomiss m32.ps[234.5678] xmm.ps[234.5677,0.0] => eflags[0x8d5,0x001] +ucomiss xmm.ps[234.5678,0.0] xmm.ps[234.5678,0.0] => eflags[0x8d5,0x040] +ucomiss m32.ps[234.5678] xmm.ps[234.5678,0.0] => eflags[0x8d5,0x040] +unpckhps xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[11.22,33.44,55.66,77.88] => 1.ps[55.66,43.21,77.88,87.65] +unpckhps m128.ps[12.34,56.78,43.21,87.65] xmm.ps[11.22,33.44,55.66,77.88] => 1.ps[55.66,43.21,77.88,87.65] +unpcklps xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[11.22,33.44,55.66,77.88] => 1.ps[11.22,12.34,33.44,56.78] +unpcklps m128.ps[12.34,56.78,43.21,87.65] xmm.ps[11.22,33.44,55.66,77.88] => 1.ps[11.22,12.34,33.44,56.78] +xorps xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfc9a30566503a9cf,0xfc9a30566503a9cf] +xorps m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfc9a30566503a9cf,0xfc9a30566503a9cf] diff --git a/none/tests/insn_sse2.def b/none/tests/insn_sse2.def index 4aa6d7f813..442fff3956 100644 --- a/none/tests/insn_sse2.def +++ b/none/tests/insn_sse2.def @@ -1,292 +1,292 @@ -addpd xmm.pd[1234.5678,8765.4321] xmm.pd[2222.2222,1111.1111] 1.pd[3456.79,9876.5432] -addpd m128.pd[1234.5678,8765.4321] xmm.pd[2222.2222,1111.1111] 1.pd[3456.79,9876.5432] -addsd xmm.pd[1234.5678,8765.4321] xmm.pd[2222.2222,1111.1111] 1.pd[3456.79,1111.1111] -addsd m128.pd[1234.5678,8765.4321] xmm.pd[2222.2222,1111.1111] 1.pd[3456.79,1111.1111] -andpd xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0x0121452188a84420,0x0121452188a84420] -andpd m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0x0121452188a84420,0x0121452188a84420] -andnpd xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfc98301064002000,0x00020046010389cf] -andnpd m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfc98301064002000,0x00020046010389cf] -cmpeqpd xmm.pd[1234.5678,1234.5678] xmm.pd[1234.5678,1234.5679] 1.uq[0xffffffffffffffff,0x0000000000000000] -cmpeqpd m128.pd[1234.5678,1234.5678] xmm.pd[1234.5678,1234.5679] 1.uq[0xffffffffffffffff,0x0000000000000000] -cmpltpd xmm.pd[1234.5678,1234.5678] xmm.pd[1234.5677,1234.5679] 1.uq[0xffffffffffffffff,0x0000000000000000] -cmpltpd m128.pd[1234.5678,1234.5678] xmm.pd[1234.5677,1234.5679] 1.uq[0xffffffffffffffff,0x0000000000000000] -cmplepd xmm.pd[1234.5678,1234.5678] xmm.pd[1234.5678,1234.5679] 1.uq[0xffffffffffffffff,0x0000000000000000] -cmplepd m128.pd[1234.5678,1234.5678] xmm.pd[1234.5678,1234.5679] 1.uq[0xffffffffffffffff,0x0000000000000000] -cmpneqpd xmm.pd[1234.5678,1234.5678] xmm.pd[1234.5679,1234.5678] 1.uq[0xffffffffffffffff,0x0000000000000000] -cmpneqpd m128.pd[1234.5678,1234.5678] xmm.pd[1234.5679,1234.5678] 1.uq[0xffffffffffffffff,0x0000000000000000] -cmpnltpd xmm.pd[1234.5678,1234.5678] xmm.pd[1234.5679,1234.5677] 1.uq[0xffffffffffffffff,0x0000000000000000] -cmpnltpd m128.pd[1234.5678,1234.5678] xmm.pd[1234.5679,1234.5677] 1.uq[0xffffffffffffffff,0x0000000000000000] -cmpnlepd xmm.pd[1234.5678,1234.5678] xmm.pd[1234.5679,1234.5678] 1.uq[0xffffffffffffffff,0x0000000000000000] -cmpnlepd m128.pd[1234.5678,1234.5678] xmm.pd[1234.5679,1234.5678] 1.uq[0xffffffffffffffff,0x0000000000000000] -cmpeqsd xmm.pd[1234.5678,0.0] xmm.pd[1234.5678,0.0] 1.uq[0xffffffffffffffff,0] -cmpeqsd m128.pd[1234.5678,0.0] xmm.pd[1234.5679,0.0] 1.uq[0x0000000000000000,0] -cmpltsd xmm.pd[1234.5678,0.0] xmm.pd[1234.5677,0.0] 1.uq[0xffffffffffffffff,0] -cmpltsd m128.pd[1234.5678,0.0] xmm.pd[1234.5679,0.0] 1.uq[0x0000000000000000,0] -cmplesd xmm.pd[1234.5678,0.0] xmm.pd[1234.5678,0.0] 1.uq[0xffffffffffffffff,0] -cmplesd m128.pd[1234.5678,0.0] xmm.pd[1234.5679,0.0] 1.uq[0x0000000000000000,0] -cmpneqsd xmm.pd[1234.5678,0.0] xmm.pd[1234.5679,0.0] 1.uq[0xffffffffffffffff,0] -cmpneqsd m128.pd[1234.5678,0.0] xmm.pd[1234.5678,0.0] 1.uq[0x0000000000000000,0] -cmpnltsd xmm.pd[1234.5678,0.0] xmm.pd[1234.5679,0.0] 1.uq[0xffffffffffffffff,0] -cmpnltsd m128.pd[1234.5678,0.0] xmm.pd[1234.5677,0.0] 1.uq[0x0000000000000000,0] -cmpnlesd xmm.pd[1234.5678,0.0] xmm.pd[1234.5679,0.0] 1.uq[0xffffffffffffffff,0] -cmpnlesd m128.pd[1234.5678,0.0] xmm.pd[1234.5678,0.0] 1.uq[0x0000000000000000,0] -comisd xmm.pd[1234.5678,0.0] xmm.pd[1234.5679,0.0] eflags[0x8d5,0x000] -comisd xmm.pd[1234.5678,0.0] xmm.pd[1234.5677,0.0] eflags[0x8d5,0x001] -comisd xmm.pd[1234.5678,0.0] xmm.pd[1234.5678,0.0] eflags[0x8d5,0x040] -comisd m64.pd[1234.5678] xmm.pd[1234.5679,0.0] eflags[0x8d5,0x000] -comisd m64.pd[1234.5678] xmm.pd[1234.5677,0.0] eflags[0x8d5,0x001] -comisd m64.pd[1234.5678] xmm.pd[1234.5678,0.0] eflags[0x8d5,0x040] -cvtdq2pd xmm.sd[1234,5678,0,0] xmm.pd[0.0,0.0] 1.pd[1234.0,5678.0] -cvtdq2pd m128.sd[1234,5678,0,0] xmm.pd[0.0,0.0] 1.pd[1234.0,5678.0] -cvtdq2ps xmm.sd[1234,5678,-1234,-5678] xmm.ps[0.0,0.0,0.0,0.0] 1.ps[1234.0,5678.0,-1234.0,-5678.0] -cvtdq2ps m128.sd[1234,5678,-1234,-5678] xmm.ps[0.0,0.0,0.0,0.0] 1.ps[1234.0,5678.0,-1234.0,-5678.0] -cvtpd2dq xmm.pd[12.34,56.78] xmm.sd[1,2,3,4] 1.sd[12,57,0,0] -cvtpd2dq m128.pd[12.34,56.78] xmm.sd[1,2,3,4] 1.sd[12,57,0,0] -cvtpd2pi xmm.pd[12.34,56.78] mm.sd[1,2] 1.sd[12,57] -cvtpd2pi m128.pd[12.34,56.78] mm.sd[1,2] 1.sd[12,57] -cvtpd2ps xmm.pd[12.34,56.78] xmm.ps[1.1,2.2,3.3,4.4] 1.ps[12.34,56.78,0.0,0.0] -cvtpd2ps m128.pd[12.34,56.78] xmm.ps[1.1,2.2,3.3,4.4] 1.ps[12.34,56.78,0.0,0.0] -cvtpi2pd mm.sd[1234,5678] xmm.pd[1.1,2.2] 1.pd[1234.0,5678.0] -cvtpi2pd m64.sd[1234,5678] xmm.pd[1.1,2.2] 1.pd[1234.0,5678.0] -cvtps2dq xmm.ps[12.34,56.78,43.21,87.65] xmm.sd[1,2,3,4] 1.sd[12,57,43,88] -cvtps2dq m128.ps[12.34,56.78,43.21,87.65] xmm.sd[1,2,3,4] 1.sd[12,57,43,88] -cvtps2pd xmm.ps[12.34,56.78,1.1,2.2] xmm.pd[3.3,4.4] 1.pd[12.34,56.78] -cvtps2pd m128.ps[12.34,56.78,1.1,2.2] xmm.pd[3.3,4.4] 1.pd[12.34,56.78] -cvtsd2si xmm.pd[12.34,56.78] r.sd[99] 1.sd[12] -cvtsd2si m128.pd[56.78,12.34] r.sd[99] 1.sd[57] -cvtsd2ss xmm.pd[12.34,56.78] xmm.ps[1.11,2.22,3.33,4.44] 1.ps[12.34,2.22,3.33,4.44] -cvtsd2ss m128.pd[12.34,56.78] xmm.ps[1.11,2.22,3.33,4.44] 1.ps[12.34,2.22,3.33,4.44] -cvtsi2sd r.sd[12] xmm.pd[1.11,2.22] 1.pd[12.0,2.22] -cvtsi2sd m32.sd[12] xmm.pd[1.11,2.22] 1.pd[12.0,2.22] -cvtss2sd xmm.ps[12.34,3.33,4.44,5.55] xmm.pd[1.11,2.22] 1.pd[12.34,2.22] -cvtss2sd m128.ps[12.34,3.33,4.44,5.55] xmm.pd[1.11,2.22] 1.pd[12.34,2.22] -cvttpd2pi xmm.pd[12.34,56.78] mm.sd[1,2] 1.sd[12,56] -cvttpd2pi m128.pd[12.34,56.78] mm.sd[1,2] 1.sd[12,56] -cvttpd2dq xmm.pd[12.34,56.78] xmm.sd[1,2,3,4] 1.sd[12,56,0,0] -cvttpd2dq m128.pd[12.34,56.78] xmm.sd[1,2,3,4] 1.sd[12,56,0,0] -cvttps2dq xmm.ps[12.34,56.78,43.21,87.65] xmm.sd[1,2,3,4] 1.sd[12,56,43,87] -cvttps2dq m128.ps[12.34,56.78,43.21,87.65] xmm.sd[1,2,3,4] 1.sd[12,56,43,87] -cvttsd2si xmm.pd[12.34,56.78] r.sd[99] 1.sd[12] -cvttsd2si m128.pd[56.78,12.34] r.sd[99] 1.sd[56] -divpd xmm.pd[2.0,3.0] xmm.pd[24.68,3.69] 1.pd[12.34,1.23] -divpd m128.pd[2.0,3.0] xmm.pd[24.68,3.69] 1.pd[12.34,1.23] -divsd xmm.pd[2.0,3.0] xmm.pd[24.68,3.69] 1.pd[12.34,3.69] -divsd m128.pd[2.0,3.0] xmm.pd[24.68,3.69] 1.pd[12.34,3.69] -maxpd xmm.pd[22.222,44.444] xmm.pd[55.555,33.333] 1.pd[55.555,44.444] -maxpd m128.pd[22.222,44.444] xmm.pd[55.555,33.333] 1.pd[55.555,44.444] -maxsd xmm.pd[22.222,44.444] xmm.pd[55.555,33.333] 1.pd[55.555,33.333] -maxsd m128.pd[44.444,22.222] xmm.pd[33.333,55.555] 1.pd[44.444,55.555] -minpd xmm.pd[22.222,44.444] xmm.pd[55.555,33.333] 1.pd[22.222,33.333] -minpd m128.pd[22.222,44.444] xmm.pd[55.555,33.333] 1.pd[22.222,33.333] -minsd xmm.pd[22.222,44.444] xmm.pd[55.555,33.333] 1.pd[22.222,33.333] -minsd m128.pd[44.444,22.222] xmm.pd[33.333,55.555] 1.pd[33.333,55.555] -movapd xmm.pd[1234.5678,8765.4321] xmm.pd[1111.1111,2222.2222] 1.pd[1234.5678,8765.4321] -movapd m128.pd[1234.5678,8765.4321] xmm.pd[1111.1111,2222.2222] 1.pd[1234.5678,8765.4321] -movd r.sd[1234] xmm.sd[1111,2222,3333,4444] 1.sd[1234,0,0,0] -movd m32.sd[1234] xmm.sd[1111,2222,3333,4444] 1.sd[1234,0,0,0] -movd xmm.sd[1234,2222,3333,4444] r.sd[1111] 1.sd[1234] -movd xmm.sd[1234,2222,3333,4444] m32.sd[1111] 1.sd[1234] -movdqa xmm.uq[0x012345678abcdef,0xfedcba9876543210] xmm.uq[0x1212121234343434,0x5656565678787878] 1.uq[0x012345678abcdef,0xfedcba9876543210] -movdqa m128.uq[0x012345678abcdef,0xfedcba9876543210] xmm.uq[0x1212121234343434,0x5656565678787878] 1.uq[0x012345678abcdef,0xfedcba9876543210] -movdqa xmm.uq[0x012345678abcdef,0xfedcba9876543210] m128.uq[0x1212121234343434,0x5656565678787878] 1.uq[0x012345678abcdef,0xfedcba9876543210] -movdqu xmm.uq[0x012345678abcdef,0xfedcba9876543210] xmm.uq[0x1212121234343434,0x5656565678787878] 1.uq[0x012345678abcdef,0xfedcba9876543210] -movdqu m128.uq[0x012345678abcdef,0xfedcba9876543210] xmm.uq[0x1212121234343434,0x5656565678787878] 1.uq[0x012345678abcdef,0xfedcba9876543210] -movdqu xmm.uq[0x012345678abcdef,0xfedcba9876543210] m128.uq[0x1212121234343434,0x5656565678787878] 1.uq[0x012345678abcdef,0xfedcba9876543210] -movdq2q xmm.uq[0x012345678abcdef,0xfedcba9876543210] mm.uq[0x1212121234343434] 1.uq[0x012345678abcdef] -movhpd m64.pd[1234.5678] xmm.pd[1111.1111,2222.2222] 1.pd[1111.1111,1234.5678] -movhpd xmm.pd[1234.5678,8765.4321] m64.pd[1111.1111] 1.pd[8765.4321] -movlpd m64.pd[1234.5678] xmm.pd[1111.1111,2222.2222] 1.pd[1234.5678,2222.2222] -movlpd xmm.pd[1234.5678,8765.4321] m64.pd[1111.1111] 1.pd[1234.5678] -movmskpd xmm.pd[1234.5678,-1234.5678] r.sd[0] 1.sd[2] -movntdq xmm.uq[0x012345678abcdef,0xfedcba9876543210] m128.uq[0x1212121234343434,0x5656565678787878] 1.uq[0x012345678abcdef,0xfedcba9876543210] -movnti r.sd[12345678] m32.sd[11111111] 1.sd[12345678] -movntpd xmm.pd[1234.5678,8765.4321] m128.pd[1111.1111,2222.2222] 1.pd[1234.5678,8765.4321] -movq2dq mm.uq[0x012345678abcdef] xmm.uq[0x1212121234343434,0x5656565678787878] 1.uq[0x012345678abcdef,0] -movsd xmm.pd[1234.5678,8765.4321] xmm.pd[1111.1111,2222.2222] 1.pd[1234.5678,2222.2222] -movsd m64.pd[1234.5678] xmm.pd[1111.1111,2222.2222] 1.pd[1234.5678,0.0] -movsd xmm.pd[1234.5678,8765.4321] m64.pd[1111.1111] 1.pd[1234.5678] -movupd xmm.pd[1234.5678,8765.4321] xmm.pd[1111.1111,2222.2222] 1.pd[1234.5678,8765.4321] -movupd m128.pd[1234.5678,8765.4321] xmm.pd[1111.1111,2222.2222] 1.pd[1234.5678,8765.4321] -mulpd xmm.pd[1234.5678,8765.4321] xmm.pd[3.0,2.0] 1.pd[3703.7034,17530.8642] -mulpd m128.pd[1234.5678,8765.4321] xmm.pd[3.0,2.0] 1.pd[3703.7034,17530.8642] -mulsd xmm.pd[1234.5678,8765.4321] xmm.pd[3.0,2.0] 1.pd[3703.7034,2.0] -mulsd m128.pd[1234.5678,8765.4321] xmm.pd[3.0,2.0] 1.pd[3703.7034,2.0] -orpd xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfdbb7577edabedef,0xfdbb7577edabedef] -orpd m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfdbb7577edabedef,0xfdbb7577edabedef] -packssdw xmm.sd[12345,-12345,123456,-123456] xmm.sd[4321,-4321,54321,-54321] 1.sw[4321,-4321,32767,-32768,12345,-12345,32767,-32768] -packssdw m128.sd[12345,-12345,123456,-123456] xmm.sd[4321,-4321,54321,-54321] 1.sw[4321,-4321,32767,-32768,12345,-12345,32767,-32768] -packsswb xmm.sw[123,-123,1234,-1234,123,-123,1234,-1234] xmm.sw[21,-21,321,-321,21,-21,321,-321] 1.sb[21,-21,127,-128,21,-21,127,-128,123,-123,127,-128,123,-123,127,-128] -packsswb m128.sw[123,-123,1234,-1234,123,-123,1234,-1234] xmm.sw[21,-21,321,-321,21,-21,321,-321] 1.sb[21,-21,127,-128,21,-21,127,-128,123,-123,127,-128,123,-123,127,-128] -packuswb xmm.sw[123,-123,1234,-1234,123,-123,1234,-1234] xmm.sw[21,-21,321,-321,21,-21,321,-321] 1.ub[21,0,255,0,21,0,255,0,123,0,255,0,123,0,255,0] -packuswb m128.sw[123,-123,1234,-1234,123,-123,1234,-1234] xmm.sw[21,-21,321,-321,21,-21,321,-321] 1.ub[21,0,255,0,21,0,255,0,123,0,255,0,123,0,255,0] -paddb xmm.sb[12,34,56,78,21,43,65,87,12,34,56,78,21,43,65,87] xmm.sb[8,7,6,5,4,3,2,1,8,7,6,5,4,3,2,1] 1.sb[20,41,62,83,25,46,67,88,20,41,62,83,25,46,67,88] -paddb m128.sb[12,34,56,78,21,43,65,87,12,34,56,78,21,43,65,87] xmm.sb[8,7,6,5,4,3,2,1,8,7,6,5,4,3,2,1] 1.sb[20,41,62,83,25,46,67,88,20,41,62,83,25,46,67,88] -paddd xmm.sd[12345678,87654321,12345678,87654321] xmm.sd[8765,4321,8765,4321] 1.sd[12354443,87658642,12354443,87658642] -paddd m128.sd[12345678,87654321,12345678,87654321] xmm.sd[8765,4321,8765,4321] 1.sd[12354443,87658642,12354443,87658642] -paddq mm.sq[11111111] mm.sq[22222222] 1.sq[33333333] -paddq m64.sq[11111111] mm.sq[22222222] 1.sq[33333333] -paddq xmm.sq[11111111,22222222] xmm.sq[22222222,33333333] 1.sq[33333333,55555555] -paddq m128.sq[11111111,22222222] xmm.sq[22222222,33333333] 1.sq[33333333,55555555] -paddsb xmm.sb[25,-25,50,-50,100,-100,125,-125,25,-25,50,-50,100,-100,125,-125] xmm.sb[40,-40,30,-30,20,-20,10,-10,40,-40,30,-30,20,-20,10,-10] 1.sb[65,-65,80,-80,120,-120,127,-128,65,-65,80,-80,120,-120,127,-128] -paddsb m128.sb[25,-25,50,-50,100,-100,125,-125,25,-25,50,-50,100,-100,125,-125] xmm.sb[40,-40,30,-30,20,-20,10,-10,40,-40,30,-30,20,-20,10,-10] 1.sb[65,-65,80,-80,120,-120,127,-128,65,-65,80,-80,120,-120,127,-128] -paddsw xmm.sw[12345,-12345,32145,-32145,12345,-12345,32145,-32145] xmm.sw[32145,-32145,-12345,12345,32145,-32145,-12345,12345] 1.sw[32767,-32768,19800,-19800,32767,-32768,19800,-19800] -paddsw m128.sw[12345,-12345,32145,-32145,12345,-12345,32145,-32145] xmm.sw[32145,-32145,-12345,12345,32145,-32145,-12345,12345] 1.sw[32767,-32768,19800,-19800,32767,-32768,19800,-19800] -paddusb xmm.ub[25,50,75,100,125,150,175,200,25,50,75,100,125,150,175,200] xmm.ub[10,20,30,40,50,60,70,80,10,20,30,40,50,60,70,80] 1.ub[35,70,105,140,175,210,245,255,35,70,105,140,175,210,245,255] -paddusb m128.ub[25,50,75,100,125,150,175,200,25,50,75,100,125,150,175,200] xmm.ub[10,20,30,40,50,60,70,80,10,20,30,40,50,60,70,80] 1.ub[35,70,105,140,175,210,245,255,35,70,105,140,175,210,245,255] -paddusw xmm.uw[22222,33333,44444,55555,22222,33333,44444,55555] xmm.uw[6666,7777,8888,9999,6666,7777,8888,9999] 1.uw[28888,41110,53332,65535,28888,41110,53332,65535] -paddusw m128.uw[22222,33333,44444,55555,22222,33333,44444,55555] xmm.uw[6666,7777,8888,9999,6666,7777,8888,9999] 1.uw[28888,41110,53332,65535,28888,41110,53332,65535] -paddw xmm.sw[1234,5678,4321,8765,1234,5678,4321,8765] xmm.sw[87,65,43,21,87,65,43,21] 1.sw[1321,5743,4364,8786,1321,5743,4364,8786] -paddw m128.sw[1234,5678,4321,8765,1234,5678,4321,8765] xmm.sw[87,65,43,21,87,65,43,21] 1.sw[1321,5743,4364,8786,1321,5743,4364,8786] -pand xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0x0121452188a84420,0x0121452188a84420] -pand m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0x0121452188a84420,0x0121452188a84420] -pandn xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfc98301064002000,0x00020046010389cf] -pandn m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfc98301064002000,0x00020046010389cf] -pavgb xmm.ub[11,22,33,44,55,66,77,88,11,22,33,44,55,66,77,88] xmm.ub[15,25,35,45,55,65,75,85,15,25,35,45,55,65,75,85] 1.ub[13,24,34,45,55,66,76,87,13,24,34,45,55,66,76,87] -pavgb m128.ub[11,22,33,44,55,66,77,88,11,22,33,44,55,66,77,88] xmm.ub[15,25,35,45,55,65,75,85,15,25,35,45,55,65,75,85] 1.ub[13,24,34,45,55,66,76,87,13,24,34,45,55,66,76,87] -pavgw xmm.uw[1122,3344,5566,7788,1122,3344,5566,7788] xmm.uw[1525,3545,5565,7585,1525,3545,5565,7585] 1.uw[1324,3445,5566,7687,1324,3445,5566,7687] -pavgw m128.uw[1122,3344,5566,7788,1122,3344,5566,7788] xmm.uw[1525,3545,5565,7585,1525,3545,5565,7585] 1.uw[1324,3445,5566,7687,1324,3445,5566,7687] -pcmpeqb xmm.ub[11,22,33,44,55,66,77,88,11,22,33,44,55,66,77,88] xmm.ub[11,11,33,33,55,55,77,77,11,11,33,33,55,55,77,77] 1.ub[0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00] -pcmpeqb m128.ub[11,22,33,44,55,66,77,88,11,22,33,44,55,66,77,88] xmm.ub[11,11,33,33,55,55,77,77,11,11,33,33,55,55,77,77] 1.ub[0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00] -pcmpeqd xmm.ud[11223344,55667788,11223344,55667788] xmm.ud[11223344,11223344,11223344,11223344] 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] -pcmpeqd m128.ud[11223344,55667788,11223344,55667788] xmm.ud[11223344,11223344,11223344,11223344] 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] -pcmpeqw xmm.uw[1122,3344,5566,7788,1122,3344,5566,7788] xmm.uw[1122,1122,5566,5566,1122,1122,5566,5566] 1.uw[0xffff,0x0000,0xffff,0x0000,0xffff,0x0000,0xffff,0x0000] -pcmpeqw m128.uw[1122,3344,5566,7788,1122,3344,5566,7788] xmm.uw[1122,1122,5566,5566,1122,1122,5566,5566] 1.uw[0xffff,0x0000,0xffff,0x0000,0xffff,0x0000,0xffff,0x0000] -pcmpgtb xmm.sb[-77,-55,-33,-11,11,33,55,77,-77,-55,-33,-11,11,33,55,77] xmm.sb[77,55,33,11,-11,-33,-55,-77,77,55,33,11,-11,-33,-55,-77] 1.ub[0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00] -pcmpgtb m128.sb[-77,-55,-33,-11,11,33,55,77,-77,-55,-33,-11,11,33,55,77] xmm.sb[77,55,33,11,-11,-33,-55,-77,77,55,33,11,-11,-33,-55,-77] 1.ub[0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00] -pcmpgtd xmm.sd[-11111111,11111111,-11111111,11111111] xmm.sd[11111111,-11111111,11111111,-11111111] 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] -pcmpgtd m128.sd[-11111111,11111111,-11111111,11111111] xmm.sd[11111111,-11111111,11111111,-11111111] 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] -pcmpgtw xmm.sw[-3333,-1111,1111,3333,-3333,-1111,1111,3333] xmm.sw[3333,1111,-1111,-3333,3333,1111,-1111,-3333] 1.uw[0xffff,0xffff,0x0000,0x0000,0xffff,0xffff,0x0000,0x0000] -pcmpgtw m128.sw[-3333,-1111,1111,3333,-3333,-1111,1111,3333] xmm.sw[3333,1111,-1111,-3333,3333,1111,-1111,-3333] 1.uw[0xffff,0xffff,0x0000,0x0000,0xffff,0xffff,0x0000,0x0000] -pextrw imm8[0] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] r.ud[0xffffffff] 2.ud[1234] -pextrw imm8[1] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] r.ud[0xffffffff] 2.ud[5678] -pextrw imm8[2] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] r.ud[0xffffffff] 2.ud[4321] -pextrw imm8[3] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] r.ud[0xffffffff] 2.ud[8765] -pextrw imm8[4] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] r.ud[0xffffffff] 2.ud[1111] -pextrw imm8[5] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] r.ud[0xffffffff] 2.ud[2222] -pextrw imm8[6] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] r.ud[0xffffffff] 2.ud[3333] -pextrw imm8[7] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] r.ud[0xffffffff] 2.ud[4444] -pinsrw imm8[0] r.ud[0xffffffff] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] 2.uw[65535,5678,4321,8765,1111,2222,3333,4444] -pinsrw imm8[1] r.ud[0xffffffff] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] 2.uw[1234,65535,4321,8765,1111,2222,3333,4444] -pinsrw imm8[2] r.ud[0xffffffff] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] 2.uw[1234,5678,65535,8765,1111,2222,3333,4444] -pinsrw imm8[3] r.ud[0xffffffff] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] 2.uw[1234,5678,4321,65535,1111,2222,3333,4444] -pinsrw imm8[4] r.ud[0xffffffff] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] 2.uw[1234,5678,4321,8765,65535,2222,3333,4444] -pinsrw imm8[5] r.ud[0xffffffff] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] 2.uw[1234,5678,4321,8765,1111,65535,3333,4444] -pinsrw imm8[6] r.ud[0xffffffff] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] 2.uw[1234,5678,4321,8765,1111,2222,65535,4444] -pinsrw imm8[7] r.ud[0xffffffff] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] 2.uw[1234,5678,4321,8765,1111,2222,3333,65535] -pmaddwd xmm.sw[1234,5678,-4321,-8765,1234,5678,-4321,-8765] xmm.sw[1111,-2222,3333,-4444,1111,-2222,3333,-4444] 1.sd[-11245542,24549767,-11245542,24549767] -pmaddwd m128.sw[1234,5678,-4321,-8765,1234,5678,-4321,-8765] xmm.sw[1111,-2222,3333,-4444,1111,-2222,3333,-4444] 1.sd[-11245542,24549767,-11245542,24549767] -pmaxsw xmm.sw[-1,2,-3,4,-5,6,-7,8] xmm.sw[2,-3,4,-5,6,-7,8,-9] 1.sw[2,2,4,4,6,6,8,8] -pmaxsw m128.sw[-1,2,-3,4,-5,6,-7,8] xmm.sw[2,-3,4,-5,6,-7,8,-9] 1.sw[2,2,4,4,6,6,8,8] -pmaxub xmm.ub[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25] xmm.ub[25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10] 1.ub[25,24,23,22,21,20,19,18,18,19,20,21,22,23,24,25] -pmaxub m128.ub[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25] xmm.ub[25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10] 1.ub[25,24,23,22,21,20,19,18,18,19,20,21,22,23,24,25] -pminsw xmm.sw[-1,2,-3,4,-5,6,-7,8] xmm.sw[2,-3,4,-5,6,-7,8,-9] 1.sw[-1,-3,-3,-5,-5,-7,-7,-9] -pminsw m128.sw[-1,2,-3,4,-5,6,-7,8] xmm.sw[2,-3,4,-5,6,-7,8,-9] 1.sw[-1,-3,-3,-5,-5,-7,-7,-9] -pminub xmm.ub[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25] xmm.ub[25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10] 1.ub[10,11,12,13,14,15,16,17,17,16,15,14,13,12,11,10] -pminub m128.ub[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25] xmm.ub[25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10] 1.ub[10,11,12,13,14,15,16,17,17,16,15,14,13,12,11,10] -pmovmskb xmm.uq[0x8000000080008088,0x8000000080008088] r.ud[0] 1.ud[0x8b8b] -pmulhuw xmm.uw[1111,2222,3333,4444,5555,6666,7777,8888] xmm.uw[5555,6666,7777,8888,9999,1111,2222,3333] 1.uw[0x005e,0x00e2,0x018b,0x025a,0x034f,0x0071,0x0107,0x01c4] -pmulhuw m128.uw[1111,2222,3333,4444,5555,6666,7777,8888] xmm.uw[5555,6666,7777,8888,9999,1111,2222,3333] 1.uw[0x005e,0x00e2,0x018b,0x025a,0x034f,0x0071,0x0107,0x01c4] -pmulhw xmm.sw[1111,2222,-1111,-2222,1111,2222,-1111,-2222] xmm.sw[3333,-4444,3333,-4444,3333,-4444,3333,-4444] 1.uw[0x0038,0xff69,0xffc7,0x0096,0x0038,0xff69,0xffc7,0x0096] -pmulhw m128.sw[1111,2222,-1111,-2222,1111,2222,-1111,-2222] xmm.sw[3333,-4444,3333,-4444,3333,-4444,3333,-4444] 1.uw[0x0038,0xff69,0xffc7,0x0096,0x0038,0xff69,0xffc7,0x0096] -pmullw xmm.sw[1111,2222,-1111,-2222,1111,2222,-1111,-2222] xmm.sw[3333,-4444,3333,-4444,3333,-4444,3333,-4444] 1.uw[0x80b3,0x5378,0x7f4d,0xac88,0x80b3,0x5378,0x7f4d,0xac88] -pmullw m128.sw[1111,2222,-1111,-2222,1111,2222,-1111,-2222] xmm.sw[3333,-4444,3333,-4444,3333,-4444,3333,-4444] 1.uw[0x80b3,0x5378,0x7f4d,0xac88,0x80b3,0x5378,0x7f4d,0xac88] -pmuludq mm.ud[12345678,0] mm.ud[87654321,0] 1.uq[1082152022374638] -pmuludq m64.ud[12345678,0] mm.ud[87654321,0] 1.uq[1082152022374638] -pmuludq xmm.ud[12345678,0,87654321,0] xmm.ud[87654321,0,12345678,0] 1.uq[1082152022374638,1082152022374638] -pmuludq m128.ud[12345678,0,87654321,0] xmm.ud[87654321,0,12345678,0] 1.uq[1082152022374638,1082152022374638] -por xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfdbb7577edabedef,0xfdbb7577edabedef] -por m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfdbb7577edabedef,0xfdbb7577edabedef] -psadbw xmm.ub[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] xmm.ub[16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1] 1.sw[64,0,0,0,64,0,0,0] -psadbw m128.ub[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] xmm.ub[16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1] 1.sw[64,0,0,0,64,0,0,0] -pshufd imm8[0x1b] xmm.sd[1122,3344,5566,7788] xmm.sd[0,0,0,0] 2.sd[7788,5566,3344,1122] -pshufd imm8[0x1b] m128.sd[1122,3344,5566,7788] xmm.sd[0,0,0,0] 2.sd[7788,5566,3344,1122] -pshufhw imm8[0x1b] xmm.sw[11,22,33,44,55,66,77,88] xmm.sw[0,0,0,0,0,0,0,0] 2.sw[11,22,33,44,88,77,66,55] -pshufhw imm8[0x1b] m128.sw[11,22,33,44,55,66,77,88] xmm.sw[0,0,0,0,0,0,0,0] 2.sw[11,22,33,44,88,77,66,55] -pshuflw imm8[0x1b] xmm.sw[11,22,33,44,55,66,77,88] xmm.sw[0,0,0,0,0,0,0,0] 2.sw[44,33,22,11,55,66,77,88] -pshuflw imm8[0x1b] m128.sw[11,22,33,44,55,66,77,88] xmm.sw[0,0,0,0,0,0,0,0] 2.sw[44,33,22,11,55,66,77,88] -pslld imm8[4] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] 1.ud[0x12345670,0x9abcdef0,0x12345670,0x9abcdef0] -pslld xmm.uq[4,0] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] 1.ud[0x12345670,0x9abcdef0,0x12345670,0x9abcdef0] -pslld m128.uq[4,0] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] 1.ud[0x12345670,0x9abcdef0,0x12345670,0x9abcdef0] -pslldq imm8[4] xmm.uq[0x8899aabbccddeeff,0x0011223344556677] 1.uq[0xccddeeff00000000,0x445566778899aabb] -pslldq imm8[4] xmm.uq[0x8899aabbccddeeff,0x0011223344556677] 1.uq[0xccddeeff00000000,0x445566778899aabb] -psllq imm8[4] xmm.uq[0x0123456789abcdef,0x0123456789abcdef] 1.uq[0x123456789abcdef0,0x123456789abcdef0] -psllq xmm.uq[4,0] xmm.uq[0x0123456789abcdef,0x0123456789abcdef] 1.uq[0x123456789abcdef0,0x123456789abcdef0] -psllq m128.uq[4,0] xmm.uq[0x0123456789abcdef,0x0123456789abcdef] 1.uq[0x123456789abcdef0,0x123456789abcdef0] -psllw imm8[4] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x1230,0x5670,0x9ab0,0xdef0,0x1230,0x5670,0x9ab0,0xdef0] -psllw xmm.uq[4,0] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x1230,0x5670,0x9ab0,0xdef0,0x1230,0x5670,0x9ab0,0xdef0] -psllw m128.uq[4,0] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x1230,0x5670,0x9ab0,0xdef0,0x1230,0x5670,0x9ab0,0xdef0] -psrad imm8[4] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] 1.ud[0x00123456,0xf89abcde,0x00123456,0xf89abcde] -psrad xmm.uq[4,0] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] 1.ud[0x00123456,0xf89abcde,0x00123456,0xf89abcde] -psrad m128.uq[4,0] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] 1.ud[0x00123456,0xf89abcde,0x00123456,0xf89abcde] -psraw imm8[4] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x0012,0x0456,0xf89a,0xfcde,0x0012,0x0456,0xf89a,0xfcde] -psraw xmm.uq[4,0] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x0012,0x0456,0xf89a,0xfcde,0x0012,0x0456,0xf89a,0xfcde] -psraw m128.uq[4,0] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x0012,0x0456,0xf89a,0xfcde,0x0012,0x0456,0xf89a,0xfcde] -psrld imm8[4] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] 1.ud[0x00123456,0x089abcde,0x00123456,0x089abcde] -psrld xmm.uq[4,0] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] 1.ud[0x00123456,0x089abcde,0x00123456,0x089abcde] -psrld m128.uq[4,0] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] 1.ud[0x00123456,0x089abcde,0x00123456,0x089abcde] -psrldq imm8[4] xmm.uq[0x8899aabbccddeeff,0x0011223344556677] 1.uq[0x445566778899aabb,0x0000000000112233] -psrldq imm8[4] xmm.uq[0x8899aabbccddeeff,0x0011223344556677] 1.uq[0x445566778899aabb,0x0000000000112233] -psrlq imm8[4] xmm.uq[0x0123456789abcdef,0x0123456789abcdef] 1.uq[0x00123456789abcde,0x00123456789abcde] -psrlq xmm.uq[4,0] xmm.uq[0x0123456789abcdef,0x0123456789abcdef] 1.uq[0x00123456789abcde,0x00123456789abcde] -psrlq m128.uq[4,0] xmm.uq[0x0123456789abcdef,0x0123456789abcdef] 1.uq[0x00123456789abcde,0x00123456789abcde] -psrlw imm8[4] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x0012,0x0456,0x089a,0x0cde,0x0012,0x0456,0x089a,0x0cde] -psrlw xmm.uq[4,0] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x0012,0x0456,0x089a,0x0cde,0x0012,0x0456,0x089a,0x0cde] -psrlw m128.uq[4,0] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] 1.uw[0x0012,0x0456,0x089a,0x0cde,0x0012,0x0456,0x089a,0x0cde] -psubb xmm.sb[8,7,6,5,4,3,2,1,8,7,6,5,4,3,2,1] xmm.sb[12,34,56,78,21,43,65,87,12,34,56,78,21,43,65,87] 1.sb[4,27,50,73,17,40,63,86,4,27,50,73,17,40,63,86] -psubb m128.sb[8,7,6,5,4,3,2,1,8,7,6,5,4,3,2,1] xmm.sb[12,34,56,78,21,43,65,87,12,34,56,78,21,43,65,87] 1.sb[4,27,50,73,17,40,63,86,4,27,50,73,17,40,63,86] -psubd xmm.sd[8765,4321,8765,4321] xmm.sd[12345678,87654321,12345678,87654321] 1.sd[12336913,87650000,12336913,87650000] -psubd m128.sd[8765,4321,8765,4321] xmm.sd[12345678,87654321,12345678,87654321] 1.sd[12336913,87650000,12336913,87650000] -psubq mm.sq[11111111] mm.sq[33333333] 1.sq[22222222] -psubq m64.sq[11111111] mm.sq[33333333] 1.sq[22222222] -psubq xmm.sq[11111111,22222222] xmm.sq[55555555,33333333] 1.sq[44444444,11111111] -psubq m128.sq[11111111,22222222] xmm.sq[55555555,33333333] 1.sq[44444444,11111111] -psubsb xmm.sb[-50,50,-40,40,-30,30,-20,20,-50,50,-40,40,-30,30,-20,20] xmm.sb[25,-25,50,-50,100,-100,125,-125,25,-25,50,-50,100,-100,125,-125] 1.sb[75,-75,90,-90,127,-128,127,-128,75,-75,90,-90,127,-128,127,-128] -psubsb m128.sb[-50,50,-40,40,-30,30,-20,20,-50,50,-40,40,-30,30,-20,20] xmm.sb[25,-25,50,-50,100,-100,125,-125,25,-25,50,-50,100,-100,125,-125] 1.sb[75,-75,90,-90,127,-128,127,-128,75,-75,90,-90,127,-128,127,-128] -psubsw xmm.sw[-32145,32145,12345,-12345,-32145,32145,12345,-12345] xmm.sw[12345,-12345,32145,-32145,12345,-12345,32145,-32145] 1.sw[32767,-32768,19800,-19800,32767,-32768,19800,-19800] -psubsw m128.sw[-32145,32145,12345,-12345,-32145,32145,12345,-12345] xmm.sw[12345,-12345,32145,-32145,12345,-12345,32145,-32145] 1.sw[32767,-32768,19800,-19800,32767,-32768,19800,-19800] -psubusb xmm.ub[11,22,33,44,55,66,77,88,11,22,33,44,55,66,77,88] xmm.ub[88,77,66,55,44,33,22,11,88,77,66,55,44,33,22,11] 1.ub[77,55,33,11,0,0,0,0,77,55,33,11,0,0,0,0] -psubusb m128.ub[11,22,33,44,55,66,77,88,11,22,33,44,55,66,77,88] xmm.ub[88,77,66,55,44,33,22,11,88,77,66,55,44,33,22,11] 1.ub[77,55,33,11,0,0,0,0,77,55,33,11,0,0,0,0] -psubusw xmm.uw[1122,3344,5566,7788,1122,3344,5566,7788] xmm.uw[8877,6655,4433,2211,8877,6655,4433,2211] 1.uw[7755,3311,0,0,7755,3311,0,0] -psubusw m128.uw[1122,3344,5566,7788,1122,3344,5566,7788] xmm.uw[8877,6655,4433,2211,8877,6655,4433,2211] 1.uw[7755,3311,0,0,7755,3311,0,0] -psubw xmm.sw[87,65,43,21,87,65,43,21] xmm.sw[1234,5678,4321,8765,1234,5678,4321,8765] 1.sw[1147,5613,4278,8744,1147,5613,4278,8744] -psubw m128.sw[87,65,43,21,87,65,43,21] xmm.sw[1234,5678,4321,8765,1234,5678,4321,8765] 1.sw[1147,5613,4278,8744,1147,5613,4278,8744] -punpckhbw xmm.ub[12,34,56,78,21,43,65,87,78,56,34,12,87,65,43,21] xmm.ub[11,22,33,44,55,66,77,88,88,77,66,55,44,33,22,11] 1.ub[88,78,77,56,66,34,55,12,44,87,33,65,22,43,11,21] -punpckhbw m128.ub[12,34,56,78,21,43,65,87,78,56,34,12,87,65,43,21] xmm.ub[11,22,33,44,55,66,77,88,88,77,66,55,44,33,22,11] 1.ub[88,78,77,56,66,34,55,12,44,87,33,65,22,43,11,21] -punpckhdq xmm.ud[12345678,21436587,78563412,87654321] xmm.ud[11223344,55667788,88776655,44332211] 1.ud[88776655,78563412,44332211,87654321] -punpckhdq m128.ud[12345678,21436587,78563412,87654321] xmm.ud[11223344,55667788,88776655,44332211] 1.ud[88776655,78563412,44332211,87654321] -punpckhqdq xmm.uq[1234567821436587,7856341287654321] xmm.uq[1122334455667788,8877665544332211] 1.uq[8877665544332211,7856341287654321] -punpckhqdq m128.uq[1234567821436587,7856341287654321] xmm.uq[1122334455667788,8877665544332211] 1.uq[8877665544332211,7856341287654321] -punpckhwd xmm.uw[1234,5678,2143,6587,7856,3412,8765,4321] xmm.uw[1122,3344,5566,7788,8877,6655,4433,2211] 1.uw[8877,7856,6655,3412,4433,8765,2211,4321] -punpckhwd m128.uw[1234,5678,2143,6587,7856,3412,8765,4321] xmm.uw[1122,3344,5566,7788,8877,6655,4433,2211] 1.uw[8877,7856,6655,3412,4433,8765,2211,4321] -punpcklbw xmm.ub[12,34,56,78,21,43,65,87,78,56,34,12,87,65,43,21] xmm.ub[11,22,33,44,55,66,77,88,88,77,66,55,44,33,22,11] 1.ub[11,12,22,34,33,56,44,78,55,21,66,43,77,65,88,87] -punpcklbw m128.ub[12,34,56,78,21,43,65,87,78,56,34,12,87,65,43,21] xmm.ub[11,22,33,44,55,66,77,88,88,77,66,55,44,33,22,11] 1.ub[11,12,22,34,33,56,44,78,55,21,66,43,77,65,88,87] -punpckldq xmm.ud[12345678,21436587,78563412,87654321] xmm.ud[11223344,55667788,88776655,44332211] 1.ud[11223344,12345678,55667788,21436587] -punpckldq m128.ud[12345678,21436587,78563412,87654321] xmm.ud[11223344,55667788,88776655,44332211] 1.ud[11223344,12345678,55667788,21436587] -punpcklqdq xmm.uq[1234567821436587,7856341287654321] xmm.uq[1122334455667788,8877665544332211] 1.uq[1122334455667788,1234567821436587] -punpcklqdq m128.uq[1234567821436587,7856341287654321] xmm.uq[1122334455667788,8877665544332211] 1.uq[1122334455667788,1234567821436587] -punpcklwd xmm.uw[1234,5678,2143,6587,7856,3412,8765,4321] xmm.uw[1122,3344,5566,7788,8877,6655,4433,2211] 1.uw[1122,1234,3344,5678,5566,2143,7788,6587] -punpcklwd m128.uw[1234,5678,2143,6587,7856,3412,8765,4321] xmm.uw[1122,3344,5566,7788,8877,6655,4433,2211] 1.uw[1122,1234,3344,5678,5566,2143,7788,6587] -pxor xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfc9a30566503a9cf,0xfc9a30566503a9cf] -pxor m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfc9a30566503a9cf,0xfc9a30566503a9cf] -shufpd imm8[0x0] xmm.pd[1234.5678,8765.4321] xmm.pd[1234.5678,8765.4321] 2.pd[1234.5678,1234.5678] -shufpd imm8[0x3] m128.pd[1234.5678,8765.4321] xmm.pd[1234.5678,8765.4321] 2.pd[8765.4321,8765.4321] -sqrtpd xmm.pd[36.0,49.0] xmm.pd[1.11,2.22] 1.pd[6.0,7.0] -sqrtpd m128.pd[36.0,49.0] xmm.pd[1.11,2.22] 1.pd[6.0,7.0] -sqrtsd xmm.pd[36.0,5.55] xmm.pd[1.11,2.22] 1.pd[6.0,2.22] -sqrtsd m128.pd[36.0,5.55] xmm.pd[1.11,2.22] 1.pd[6.0,2.22] -subpd xmm.pd[1234.5678,8765.4321] xmm.pd[2222.0,1111.0] 1.pd[987.4322,-7654.4321] -subpd m128.pd[1234.5678,8765.4321] xmm.pd[2222.0,1111.0] 1.pd[987.4322,-7654.4321] -subsd xmm.pd[1234.5678,8765.4321] xmm.pd[2222.0,1111.0] 1.pd[987.4322,1111.0] -subsd m128.pd[1234.5678,8765.4321] xmm.pd[2222.0,1111.0] 1.pd[987.4322,1111.0] -ucomisd xmm.pd[1234.5678,0.0] xmm.pd[1234.5679,0.0] eflags[0x8d5,0x000] -ucomisd xmm.pd[1234.5678,0.0] xmm.pd[1234.5677,0.0] eflags[0x8d5,0x001] -ucomisd xmm.pd[1234.5678,0.0] xmm.pd[1234.5678,0.0] eflags[0x8d5,0x040] -ucomisd m64.pd[1234.5678] xmm.pd[1234.5679,0.0] eflags[0x8d5,0x000] -ucomisd m64.pd[1234.5678] xmm.pd[1234.5677,0.0] eflags[0x8d5,0x001] -ucomisd m64.pd[1234.5678] xmm.pd[1234.5678,0.0] eflags[0x8d5,0x040] -unpckhpd xmm.pd[1234.5678,8765.4321] xmm.pd[1122.3344,5566.7788] 1.pd[5566.7788,8765.4321] -unpckhpd m128.pd[1234.5678,8765.4321] xmm.pd[1122.3344,5566.7788] 1.pd[5566.7788,8765.4321] -unpcklpd xmm.pd[1234.5678,8765.4321] xmm.pd[1122.3344,5566.7788] 1.pd[1122.3344,1234.5678] -unpcklpd m128.pd[1234.5678,8765.4321] xmm.pd[1122.3344,5566.7788] 1.pd[1122.3344,1234.5678] -xorpd xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfc9a30566503a9cf,0xfc9a30566503a9cf] -xorpd m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] 1.uq[0xfc9a30566503a9cf,0xfc9a30566503a9cf] +addpd xmm.pd[1234.5678,8765.4321] xmm.pd[2222.2222,1111.1111] => 1.pd[3456.79,9876.5432] +addpd m128.pd[1234.5678,8765.4321] xmm.pd[2222.2222,1111.1111] => 1.pd[3456.79,9876.5432] +addsd xmm.pd[1234.5678,8765.4321] xmm.pd[2222.2222,1111.1111] => 1.pd[3456.79,1111.1111] +addsd m128.pd[1234.5678,8765.4321] xmm.pd[2222.2222,1111.1111] => 1.pd[3456.79,1111.1111] +andpd xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0x0121452188a84420,0x0121452188a84420] +andpd m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0x0121452188a84420,0x0121452188a84420] +andnpd xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfc98301064002000,0x00020046010389cf] +andnpd m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfc98301064002000,0x00020046010389cf] +cmpeqpd xmm.pd[1234.5678,1234.5678] xmm.pd[1234.5678,1234.5679] => 1.uq[0xffffffffffffffff,0x0000000000000000] +cmpeqpd m128.pd[1234.5678,1234.5678] xmm.pd[1234.5678,1234.5679] => 1.uq[0xffffffffffffffff,0x0000000000000000] +cmpltpd xmm.pd[1234.5678,1234.5678] xmm.pd[1234.5677,1234.5679] => 1.uq[0xffffffffffffffff,0x0000000000000000] +cmpltpd m128.pd[1234.5678,1234.5678] xmm.pd[1234.5677,1234.5679] => 1.uq[0xffffffffffffffff,0x0000000000000000] +cmplepd xmm.pd[1234.5678,1234.5678] xmm.pd[1234.5678,1234.5679] => 1.uq[0xffffffffffffffff,0x0000000000000000] +cmplepd m128.pd[1234.5678,1234.5678] xmm.pd[1234.5678,1234.5679] => 1.uq[0xffffffffffffffff,0x0000000000000000] +cmpneqpd xmm.pd[1234.5678,1234.5678] xmm.pd[1234.5679,1234.5678] => 1.uq[0xffffffffffffffff,0x0000000000000000] +cmpneqpd m128.pd[1234.5678,1234.5678] xmm.pd[1234.5679,1234.5678] => 1.uq[0xffffffffffffffff,0x0000000000000000] +cmpnltpd xmm.pd[1234.5678,1234.5678] xmm.pd[1234.5679,1234.5677] => 1.uq[0xffffffffffffffff,0x0000000000000000] +cmpnltpd m128.pd[1234.5678,1234.5678] xmm.pd[1234.5679,1234.5677] => 1.uq[0xffffffffffffffff,0x0000000000000000] +cmpnlepd xmm.pd[1234.5678,1234.5678] xmm.pd[1234.5679,1234.5678] => 1.uq[0xffffffffffffffff,0x0000000000000000] +cmpnlepd m128.pd[1234.5678,1234.5678] xmm.pd[1234.5679,1234.5678] => 1.uq[0xffffffffffffffff,0x0000000000000000] +cmpeqsd xmm.pd[1234.5678,0.0] xmm.pd[1234.5678,0.0] => 1.uq[0xffffffffffffffff,0] +cmpeqsd m128.pd[1234.5678,0.0] xmm.pd[1234.5679,0.0] => 1.uq[0x0000000000000000,0] +cmpltsd xmm.pd[1234.5678,0.0] xmm.pd[1234.5677,0.0] => 1.uq[0xffffffffffffffff,0] +cmpltsd m128.pd[1234.5678,0.0] xmm.pd[1234.5679,0.0] => 1.uq[0x0000000000000000,0] +cmplesd xmm.pd[1234.5678,0.0] xmm.pd[1234.5678,0.0] => 1.uq[0xffffffffffffffff,0] +cmplesd m128.pd[1234.5678,0.0] xmm.pd[1234.5679,0.0] => 1.uq[0x0000000000000000,0] +cmpneqsd xmm.pd[1234.5678,0.0] xmm.pd[1234.5679,0.0] => 1.uq[0xffffffffffffffff,0] +cmpneqsd m128.pd[1234.5678,0.0] xmm.pd[1234.5678,0.0] => 1.uq[0x0000000000000000,0] +cmpnltsd xmm.pd[1234.5678,0.0] xmm.pd[1234.5679,0.0] => 1.uq[0xffffffffffffffff,0] +cmpnltsd m128.pd[1234.5678,0.0] xmm.pd[1234.5677,0.0] => 1.uq[0x0000000000000000,0] +cmpnlesd xmm.pd[1234.5678,0.0] xmm.pd[1234.5679,0.0] => 1.uq[0xffffffffffffffff,0] +cmpnlesd m128.pd[1234.5678,0.0] xmm.pd[1234.5678,0.0] => 1.uq[0x0000000000000000,0] +comisd xmm.pd[1234.5678,0.0] xmm.pd[1234.5679,0.0] => eflags[0x8d5,0x000] +comisd xmm.pd[1234.5678,0.0] xmm.pd[1234.5677,0.0] => eflags[0x8d5,0x001] +comisd xmm.pd[1234.5678,0.0] xmm.pd[1234.5678,0.0] => eflags[0x8d5,0x040] +comisd m64.pd[1234.5678] xmm.pd[1234.5679,0.0] => eflags[0x8d5,0x000] +comisd m64.pd[1234.5678] xmm.pd[1234.5677,0.0] => eflags[0x8d5,0x001] +comisd m64.pd[1234.5678] xmm.pd[1234.5678,0.0] => eflags[0x8d5,0x040] +cvtdq2pd xmm.sd[1234,5678,0,0] xmm.pd[0.0,0.0] => 1.pd[1234.0,5678.0] +cvtdq2pd m128.sd[1234,5678,0,0] xmm.pd[0.0,0.0] => 1.pd[1234.0,5678.0] +cvtdq2ps xmm.sd[1234,5678,-1234,-5678] xmm.ps[0.0,0.0,0.0,0.0] => 1.ps[1234.0,5678.0,-1234.0,-5678.0] +cvtdq2ps m128.sd[1234,5678,-1234,-5678] xmm.ps[0.0,0.0,0.0,0.0] => 1.ps[1234.0,5678.0,-1234.0,-5678.0] +cvtpd2dq xmm.pd[12.34,56.78] xmm.sd[1,2,3,4] => 1.sd[12,57,0,0] +cvtpd2dq m128.pd[12.34,56.78] xmm.sd[1,2,3,4] => 1.sd[12,57,0,0] +cvtpd2pi xmm.pd[12.34,56.78] mm.sd[1,2] => 1.sd[12,57] +cvtpd2pi m128.pd[12.34,56.78] mm.sd[1,2] => 1.sd[12,57] +cvtpd2ps xmm.pd[12.34,56.78] xmm.ps[1.1,2.2,3.3,4.4] => 1.ps[12.34,56.78,0.0,0.0] +cvtpd2ps m128.pd[12.34,56.78] xmm.ps[1.1,2.2,3.3,4.4] => 1.ps[12.34,56.78,0.0,0.0] +cvtpi2pd mm.sd[1234,5678] xmm.pd[1.1,2.2] => 1.pd[1234.0,5678.0] +cvtpi2pd m64.sd[1234,5678] xmm.pd[1.1,2.2] => 1.pd[1234.0,5678.0] +cvtps2dq xmm.ps[12.34,56.78,43.21,87.65] xmm.sd[1,2,3,4] => 1.sd[12,57,43,88] +cvtps2dq m128.ps[12.34,56.78,43.21,87.65] xmm.sd[1,2,3,4] => 1.sd[12,57,43,88] +cvtps2pd xmm.ps[12.34,56.78,1.1,2.2] xmm.pd[3.3,4.4] => 1.pd[12.34,56.78] +cvtps2pd m128.ps[12.34,56.78,1.1,2.2] xmm.pd[3.3,4.4] => 1.pd[12.34,56.78] +cvtsd2si xmm.pd[12.34,56.78] r32.sd[99] => 1.sd[12] +cvtsd2si m128.pd[56.78,12.34] r32.sd[99] => 1.sd[57] +cvtsd2ss xmm.pd[12.34,56.78] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[12.34,2.22,3.33,4.44] +cvtsd2ss m128.pd[12.34,56.78] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[12.34,2.22,3.33,4.44] +cvtsi2sd r32.sd[12] xmm.pd[1.11,2.22] => 1.pd[12.0,2.22] +cvtsi2sd m32.sd[12] xmm.pd[1.11,2.22] => 1.pd[12.0,2.22] +cvtss2sd xmm.ps[12.34,3.33,4.44,5.55] xmm.pd[1.11,2.22] => 1.pd[12.34,2.22] +cvtss2sd m128.ps[12.34,3.33,4.44,5.55] xmm.pd[1.11,2.22] => 1.pd[12.34,2.22] +cvttpd2pi xmm.pd[12.34,56.78] mm.sd[1,2] => 1.sd[12,56] +cvttpd2pi m128.pd[12.34,56.78] mm.sd[1,2] => 1.sd[12,56] +cvttpd2dq xmm.pd[12.34,56.78] xmm.sd[1,2,3,4] => 1.sd[12,56,0,0] +cvttpd2dq m128.pd[12.34,56.78] xmm.sd[1,2,3,4] => 1.sd[12,56,0,0] +cvttps2dq xmm.ps[12.34,56.78,43.21,87.65] xmm.sd[1,2,3,4] => 1.sd[12,56,43,87] +cvttps2dq m128.ps[12.34,56.78,43.21,87.65] xmm.sd[1,2,3,4] => 1.sd[12,56,43,87] +cvttsd2si xmm.pd[12.34,56.78] r32.sd[99] => 1.sd[12] +cvttsd2si m128.pd[56.78,12.34] r32.sd[99] => 1.sd[56] +divpd xmm.pd[2.0,3.0] xmm.pd[24.68,3.69] => 1.pd[12.34,1.23] +divpd m128.pd[2.0,3.0] xmm.pd[24.68,3.69] => 1.pd[12.34,1.23] +divsd xmm.pd[2.0,3.0] xmm.pd[24.68,3.69] => 1.pd[12.34,3.69] +divsd m128.pd[2.0,3.0] xmm.pd[24.68,3.69] => 1.pd[12.34,3.69] +maxpd xmm.pd[22.222,44.444] xmm.pd[55.555,33.333] => 1.pd[55.555,44.444] +maxpd m128.pd[22.222,44.444] xmm.pd[55.555,33.333] => 1.pd[55.555,44.444] +maxsd xmm.pd[22.222,44.444] xmm.pd[55.555,33.333] => 1.pd[55.555,33.333] +maxsd m128.pd[44.444,22.222] xmm.pd[33.333,55.555] => 1.pd[44.444,55.555] +minpd xmm.pd[22.222,44.444] xmm.pd[55.555,33.333] => 1.pd[22.222,33.333] +minpd m128.pd[22.222,44.444] xmm.pd[55.555,33.333] => 1.pd[22.222,33.333] +minsd xmm.pd[22.222,44.444] xmm.pd[55.555,33.333] => 1.pd[22.222,33.333] +minsd m128.pd[44.444,22.222] xmm.pd[33.333,55.555] => 1.pd[33.333,55.555] +movapd xmm.pd[1234.5678,8765.4321] xmm.pd[1111.1111,2222.2222] => 1.pd[1234.5678,8765.4321] +movapd m128.pd[1234.5678,8765.4321] xmm.pd[1111.1111,2222.2222] => 1.pd[1234.5678,8765.4321] +movd r32.sd[1234] xmm.sd[1111,2222,3333,4444] => 1.sd[1234,0,0,0] +movd m32.sd[1234] xmm.sd[1111,2222,3333,4444] => 1.sd[1234,0,0,0] +movd xmm.sd[1234,2222,3333,4444] r32.sd[1111] => 1.sd[1234] +movd xmm.sd[1234,2222,3333,4444] m32.sd[1111] => 1.sd[1234] +movdqa xmm.uq[0x012345678abcdef,0xfedcba9876543210] xmm.uq[0x1212121234343434,0x5656565678787878] => 1.uq[0x012345678abcdef,0xfedcba9876543210] +movdqa m128.uq[0x012345678abcdef,0xfedcba9876543210] xmm.uq[0x1212121234343434,0x5656565678787878] => 1.uq[0x012345678abcdef,0xfedcba9876543210] +movdqa xmm.uq[0x012345678abcdef,0xfedcba9876543210] m128.uq[0x1212121234343434,0x5656565678787878] => 1.uq[0x012345678abcdef,0xfedcba9876543210] +movdqu xmm.uq[0x012345678abcdef,0xfedcba9876543210] xmm.uq[0x1212121234343434,0x5656565678787878] => 1.uq[0x012345678abcdef,0xfedcba9876543210] +movdqu m128.uq[0x012345678abcdef,0xfedcba9876543210] xmm.uq[0x1212121234343434,0x5656565678787878] => 1.uq[0x012345678abcdef,0xfedcba9876543210] +movdqu xmm.uq[0x012345678abcdef,0xfedcba9876543210] m128.uq[0x1212121234343434,0x5656565678787878] => 1.uq[0x012345678abcdef,0xfedcba9876543210] +movdq2q xmm.uq[0x012345678abcdef,0xfedcba9876543210] mm.uq[0x1212121234343434] => 1.uq[0x012345678abcdef] +movhpd m64.pd[1234.5678] xmm.pd[1111.1111,2222.2222] => 1.pd[1111.1111,1234.5678] +movhpd xmm.pd[1234.5678,8765.4321] m64.pd[1111.1111] => 1.pd[8765.4321] +movlpd m64.pd[1234.5678] xmm.pd[1111.1111,2222.2222] => 1.pd[1234.5678,2222.2222] +movlpd xmm.pd[1234.5678,8765.4321] m64.pd[1111.1111] => 1.pd[1234.5678] +movmskpd xmm.pd[1234.5678,-1234.5678] r32.sd[0] => 1.sd[2] +movntdq xmm.uq[0x012345678abcdef,0xfedcba9876543210] m128.uq[0x1212121234343434,0x5656565678787878] => 1.uq[0x012345678abcdef,0xfedcba9876543210] +movnti r32.sd[12345678] m32.sd[11111111] => 1.sd[12345678] +movntpd xmm.pd[1234.5678,8765.4321] m128.pd[1111.1111,2222.2222] => 1.pd[1234.5678,8765.4321] +movq2dq mm.uq[0x012345678abcdef] xmm.uq[0x1212121234343434,0x5656565678787878] => 1.uq[0x012345678abcdef,0] +movsd xmm.pd[1234.5678,8765.4321] xmm.pd[1111.1111,2222.2222] => 1.pd[1234.5678,2222.2222] +movsd m64.pd[1234.5678] xmm.pd[1111.1111,2222.2222] => 1.pd[1234.5678,0.0] +movsd xmm.pd[1234.5678,8765.4321] m64.pd[1111.1111] => 1.pd[1234.5678] +movupd xmm.pd[1234.5678,8765.4321] xmm.pd[1111.1111,2222.2222] => 1.pd[1234.5678,8765.4321] +movupd m128.pd[1234.5678,8765.4321] xmm.pd[1111.1111,2222.2222] => 1.pd[1234.5678,8765.4321] +mulpd xmm.pd[1234.5678,8765.4321] xmm.pd[3.0,2.0] => 1.pd[3703.7034,17530.8642] +mulpd m128.pd[1234.5678,8765.4321] xmm.pd[3.0,2.0] => 1.pd[3703.7034,17530.8642] +mulsd xmm.pd[1234.5678,8765.4321] xmm.pd[3.0,2.0] => 1.pd[3703.7034,2.0] +mulsd m128.pd[1234.5678,8765.4321] xmm.pd[3.0,2.0] => 1.pd[3703.7034,2.0] +orpd xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfdbb7577edabedef,0xfdbb7577edabedef] +orpd m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfdbb7577edabedef,0xfdbb7577edabedef] +packssdw xmm.sd[12345,-12345,123456,-123456] xmm.sd[4321,-4321,54321,-54321] => 1.sw[4321,-4321,32767,-32768,12345,-12345,32767,-32768] +packssdw m128.sd[12345,-12345,123456,-123456] xmm.sd[4321,-4321,54321,-54321] => 1.sw[4321,-4321,32767,-32768,12345,-12345,32767,-32768] +packsswb xmm.sw[123,-123,1234,-1234,123,-123,1234,-1234] xmm.sw[21,-21,321,-321,21,-21,321,-321] => 1.sb[21,-21,127,-128,21,-21,127,-128,123,-123,127,-128,123,-123,127,-128] +packsswb m128.sw[123,-123,1234,-1234,123,-123,1234,-1234] xmm.sw[21,-21,321,-321,21,-21,321,-321] => 1.sb[21,-21,127,-128,21,-21,127,-128,123,-123,127,-128,123,-123,127,-128] +packuswb xmm.sw[123,-123,1234,-1234,123,-123,1234,-1234] xmm.sw[21,-21,321,-321,21,-21,321,-321] => 1.ub[21,0,255,0,21,0,255,0,123,0,255,0,123,0,255,0] +packuswb m128.sw[123,-123,1234,-1234,123,-123,1234,-1234] xmm.sw[21,-21,321,-321,21,-21,321,-321] => 1.ub[21,0,255,0,21,0,255,0,123,0,255,0,123,0,255,0] +paddb xmm.sb[12,34,56,78,21,43,65,87,12,34,56,78,21,43,65,87] xmm.sb[8,7,6,5,4,3,2,1,8,7,6,5,4,3,2,1] => 1.sb[20,41,62,83,25,46,67,88,20,41,62,83,25,46,67,88] +paddb m128.sb[12,34,56,78,21,43,65,87,12,34,56,78,21,43,65,87] xmm.sb[8,7,6,5,4,3,2,1,8,7,6,5,4,3,2,1] => 1.sb[20,41,62,83,25,46,67,88,20,41,62,83,25,46,67,88] +paddd xmm.sd[12345678,87654321,12345678,87654321] xmm.sd[8765,4321,8765,4321] => 1.sd[12354443,87658642,12354443,87658642] +paddd m128.sd[12345678,87654321,12345678,87654321] xmm.sd[8765,4321,8765,4321] => 1.sd[12354443,87658642,12354443,87658642] +paddq mm.sq[11111111] mm.sq[22222222] => 1.sq[33333333] +paddq m64.sq[11111111] mm.sq[22222222] => 1.sq[33333333] +paddq xmm.sq[11111111,22222222] xmm.sq[22222222,33333333] => 1.sq[33333333,55555555] +paddq m128.sq[11111111,22222222] xmm.sq[22222222,33333333] => 1.sq[33333333,55555555] +paddsb xmm.sb[25,-25,50,-50,100,-100,125,-125,25,-25,50,-50,100,-100,125,-125] xmm.sb[40,-40,30,-30,20,-20,10,-10,40,-40,30,-30,20,-20,10,-10] => 1.sb[65,-65,80,-80,120,-120,127,-128,65,-65,80,-80,120,-120,127,-128] +paddsb m128.sb[25,-25,50,-50,100,-100,125,-125,25,-25,50,-50,100,-100,125,-125] xmm.sb[40,-40,30,-30,20,-20,10,-10,40,-40,30,-30,20,-20,10,-10] => 1.sb[65,-65,80,-80,120,-120,127,-128,65,-65,80,-80,120,-120,127,-128] +paddsw xmm.sw[12345,-12345,32145,-32145,12345,-12345,32145,-32145] xmm.sw[32145,-32145,-12345,12345,32145,-32145,-12345,12345] => 1.sw[32767,-32768,19800,-19800,32767,-32768,19800,-19800] +paddsw m128.sw[12345,-12345,32145,-32145,12345,-12345,32145,-32145] xmm.sw[32145,-32145,-12345,12345,32145,-32145,-12345,12345] => 1.sw[32767,-32768,19800,-19800,32767,-32768,19800,-19800] +paddusb xmm.ub[25,50,75,100,125,150,175,200,25,50,75,100,125,150,175,200] xmm.ub[10,20,30,40,50,60,70,80,10,20,30,40,50,60,70,80] => 1.ub[35,70,105,140,175,210,245,255,35,70,105,140,175,210,245,255] +paddusb m128.ub[25,50,75,100,125,150,175,200,25,50,75,100,125,150,175,200] xmm.ub[10,20,30,40,50,60,70,80,10,20,30,40,50,60,70,80] => 1.ub[35,70,105,140,175,210,245,255,35,70,105,140,175,210,245,255] +paddusw xmm.uw[22222,33333,44444,55555,22222,33333,44444,55555] xmm.uw[6666,7777,8888,9999,6666,7777,8888,9999] => 1.uw[28888,41110,53332,65535,28888,41110,53332,65535] +paddusw m128.uw[22222,33333,44444,55555,22222,33333,44444,55555] xmm.uw[6666,7777,8888,9999,6666,7777,8888,9999] => 1.uw[28888,41110,53332,65535,28888,41110,53332,65535] +paddw xmm.sw[1234,5678,4321,8765,1234,5678,4321,8765] xmm.sw[87,65,43,21,87,65,43,21] => 1.sw[1321,5743,4364,8786,1321,5743,4364,8786] +paddw m128.sw[1234,5678,4321,8765,1234,5678,4321,8765] xmm.sw[87,65,43,21,87,65,43,21] => 1.sw[1321,5743,4364,8786,1321,5743,4364,8786] +pand xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0x0121452188a84420,0x0121452188a84420] +pand m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0x0121452188a84420,0x0121452188a84420] +pandn xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfc98301064002000,0x00020046010389cf] +pandn m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfc98301064002000,0x00020046010389cf] +pavgb xmm.ub[11,22,33,44,55,66,77,88,11,22,33,44,55,66,77,88] xmm.ub[15,25,35,45,55,65,75,85,15,25,35,45,55,65,75,85] => 1.ub[13,24,34,45,55,66,76,87,13,24,34,45,55,66,76,87] +pavgb m128.ub[11,22,33,44,55,66,77,88,11,22,33,44,55,66,77,88] xmm.ub[15,25,35,45,55,65,75,85,15,25,35,45,55,65,75,85] => 1.ub[13,24,34,45,55,66,76,87,13,24,34,45,55,66,76,87] +pavgw xmm.uw[1122,3344,5566,7788,1122,3344,5566,7788] xmm.uw[1525,3545,5565,7585,1525,3545,5565,7585] => 1.uw[1324,3445,5566,7687,1324,3445,5566,7687] +pavgw m128.uw[1122,3344,5566,7788,1122,3344,5566,7788] xmm.uw[1525,3545,5565,7585,1525,3545,5565,7585] => 1.uw[1324,3445,5566,7687,1324,3445,5566,7687] +pcmpeqb xmm.ub[11,22,33,44,55,66,77,88,11,22,33,44,55,66,77,88] xmm.ub[11,11,33,33,55,55,77,77,11,11,33,33,55,55,77,77] => 1.ub[0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00] +pcmpeqb m128.ub[11,22,33,44,55,66,77,88,11,22,33,44,55,66,77,88] xmm.ub[11,11,33,33,55,55,77,77,11,11,33,33,55,55,77,77] => 1.ub[0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00] +pcmpeqd xmm.ud[11223344,55667788,11223344,55667788] xmm.ud[11223344,11223344,11223344,11223344] => 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] +pcmpeqd m128.ud[11223344,55667788,11223344,55667788] xmm.ud[11223344,11223344,11223344,11223344] => 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] +pcmpeqw xmm.uw[1122,3344,5566,7788,1122,3344,5566,7788] xmm.uw[1122,1122,5566,5566,1122,1122,5566,5566] => 1.uw[0xffff,0x0000,0xffff,0x0000,0xffff,0x0000,0xffff,0x0000] +pcmpeqw m128.uw[1122,3344,5566,7788,1122,3344,5566,7788] xmm.uw[1122,1122,5566,5566,1122,1122,5566,5566] => 1.uw[0xffff,0x0000,0xffff,0x0000,0xffff,0x0000,0xffff,0x0000] +pcmpgtb xmm.sb[-77,-55,-33,-11,11,33,55,77,-77,-55,-33,-11,11,33,55,77] xmm.sb[77,55,33,11,-11,-33,-55,-77,77,55,33,11,-11,-33,-55,-77] => 1.ub[0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00] +pcmpgtb m128.sb[-77,-55,-33,-11,11,33,55,77,-77,-55,-33,-11,11,33,55,77] xmm.sb[77,55,33,11,-11,-33,-55,-77,77,55,33,11,-11,-33,-55,-77] => 1.ub[0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00] +pcmpgtd xmm.sd[-11111111,11111111,-11111111,11111111] xmm.sd[11111111,-11111111,11111111,-11111111] => 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] +pcmpgtd m128.sd[-11111111,11111111,-11111111,11111111] xmm.sd[11111111,-11111111,11111111,-11111111] => 1.ud[0xffffffff,0x00000000,0xffffffff,0x00000000] +pcmpgtw xmm.sw[-3333,-1111,1111,3333,-3333,-1111,1111,3333] xmm.sw[3333,1111,-1111,-3333,3333,1111,-1111,-3333] => 1.uw[0xffff,0xffff,0x0000,0x0000,0xffff,0xffff,0x0000,0x0000] +pcmpgtw m128.sw[-3333,-1111,1111,3333,-3333,-1111,1111,3333] xmm.sw[3333,1111,-1111,-3333,3333,1111,-1111,-3333] => 1.uw[0xffff,0xffff,0x0000,0x0000,0xffff,0xffff,0x0000,0x0000] +pextrw imm8[0] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] r32.ud[0xffffffff] => 2.ud[1234] +pextrw imm8[1] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] r32.ud[0xffffffff] => 2.ud[5678] +pextrw imm8[2] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] r32.ud[0xffffffff] => 2.ud[4321] +pextrw imm8[3] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] r32.ud[0xffffffff] => 2.ud[8765] +pextrw imm8[4] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] r32.ud[0xffffffff] => 2.ud[1111] +pextrw imm8[5] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] r32.ud[0xffffffff] => 2.ud[2222] +pextrw imm8[6] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] r32.ud[0xffffffff] => 2.ud[3333] +pextrw imm8[7] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] r32.ud[0xffffffff] => 2.ud[4444] +pinsrw imm8[0] r32.ud[0xffffffff] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] => 2.uw[65535,5678,4321,8765,1111,2222,3333,4444] +pinsrw imm8[1] r32.ud[0xffffffff] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] => 2.uw[1234,65535,4321,8765,1111,2222,3333,4444] +pinsrw imm8[2] r32.ud[0xffffffff] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] => 2.uw[1234,5678,65535,8765,1111,2222,3333,4444] +pinsrw imm8[3] r32.ud[0xffffffff] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] => 2.uw[1234,5678,4321,65535,1111,2222,3333,4444] +pinsrw imm8[4] r32.ud[0xffffffff] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] => 2.uw[1234,5678,4321,8765,65535,2222,3333,4444] +pinsrw imm8[5] r32.ud[0xffffffff] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] => 2.uw[1234,5678,4321,8765,1111,65535,3333,4444] +pinsrw imm8[6] r32.ud[0xffffffff] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] => 2.uw[1234,5678,4321,8765,1111,2222,65535,4444] +pinsrw imm8[7] r32.ud[0xffffffff] xmm.uw[1234,5678,4321,8765,1111,2222,3333,4444] => 2.uw[1234,5678,4321,8765,1111,2222,3333,65535] +pmaddwd xmm.sw[1234,5678,-4321,-8765,1234,5678,-4321,-8765] xmm.sw[1111,-2222,3333,-4444,1111,-2222,3333,-4444] => 1.sd[-11245542,24549767,-11245542,24549767] +pmaddwd m128.sw[1234,5678,-4321,-8765,1234,5678,-4321,-8765] xmm.sw[1111,-2222,3333,-4444,1111,-2222,3333,-4444] => 1.sd[-11245542,24549767,-11245542,24549767] +pmaxsw xmm.sw[-1,2,-3,4,-5,6,-7,8] xmm.sw[2,-3,4,-5,6,-7,8,-9] => 1.sw[2,2,4,4,6,6,8,8] +pmaxsw m128.sw[-1,2,-3,4,-5,6,-7,8] xmm.sw[2,-3,4,-5,6,-7,8,-9] => 1.sw[2,2,4,4,6,6,8,8] +pmaxub xmm.ub[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25] xmm.ub[25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10] => 1.ub[25,24,23,22,21,20,19,18,18,19,20,21,22,23,24,25] +pmaxub m128.ub[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25] xmm.ub[25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10] => 1.ub[25,24,23,22,21,20,19,18,18,19,20,21,22,23,24,25] +pminsw xmm.sw[-1,2,-3,4,-5,6,-7,8] xmm.sw[2,-3,4,-5,6,-7,8,-9] => 1.sw[-1,-3,-3,-5,-5,-7,-7,-9] +pminsw m128.sw[-1,2,-3,4,-5,6,-7,8] xmm.sw[2,-3,4,-5,6,-7,8,-9] => 1.sw[-1,-3,-3,-5,-5,-7,-7,-9] +pminub xmm.ub[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25] xmm.ub[25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10] => 1.ub[10,11,12,13,14,15,16,17,17,16,15,14,13,12,11,10] +pminub m128.ub[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25] xmm.ub[25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10] => 1.ub[10,11,12,13,14,15,16,17,17,16,15,14,13,12,11,10] +pmovmskb xmm.uq[0x8000000080008088,0x8000000080008088] r32.ud[0] => 1.ud[0x8b8b] +pmulhuw xmm.uw[1111,2222,3333,4444,5555,6666,7777,8888] xmm.uw[5555,6666,7777,8888,9999,1111,2222,3333] => 1.uw[0x005e,0x00e2,0x018b,0x025a,0x034f,0x0071,0x0107,0x01c4] +pmulhuw m128.uw[1111,2222,3333,4444,5555,6666,7777,8888] xmm.uw[5555,6666,7777,8888,9999,1111,2222,3333] => 1.uw[0x005e,0x00e2,0x018b,0x025a,0x034f,0x0071,0x0107,0x01c4] +pmulhw xmm.sw[1111,2222,-1111,-2222,1111,2222,-1111,-2222] xmm.sw[3333,-4444,3333,-4444,3333,-4444,3333,-4444] => 1.uw[0x0038,0xff69,0xffc7,0x0096,0x0038,0xff69,0xffc7,0x0096] +pmulhw m128.sw[1111,2222,-1111,-2222,1111,2222,-1111,-2222] xmm.sw[3333,-4444,3333,-4444,3333,-4444,3333,-4444] => 1.uw[0x0038,0xff69,0xffc7,0x0096,0x0038,0xff69,0xffc7,0x0096] +pmullw xmm.sw[1111,2222,-1111,-2222,1111,2222,-1111,-2222] xmm.sw[3333,-4444,3333,-4444,3333,-4444,3333,-4444] => 1.uw[0x80b3,0x5378,0x7f4d,0xac88,0x80b3,0x5378,0x7f4d,0xac88] +pmullw m128.sw[1111,2222,-1111,-2222,1111,2222,-1111,-2222] xmm.sw[3333,-4444,3333,-4444,3333,-4444,3333,-4444] => 1.uw[0x80b3,0x5378,0x7f4d,0xac88,0x80b3,0x5378,0x7f4d,0xac88] +pmuludq mm.ud[12345678,0] mm.ud[87654321,0] => 1.uq[1082152022374638] +pmuludq m64.ud[12345678,0] mm.ud[87654321,0] => 1.uq[1082152022374638] +pmuludq xmm.ud[12345678,0,87654321,0] xmm.ud[87654321,0,12345678,0] => 1.uq[1082152022374638,1082152022374638] +pmuludq m128.ud[12345678,0,87654321,0] xmm.ud[87654321,0,12345678,0] => 1.uq[1082152022374638,1082152022374638] +por xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfdbb7577edabedef,0xfdbb7577edabedef] +por m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfdbb7577edabedef,0xfdbb7577edabedef] +psadbw xmm.ub[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] xmm.ub[16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1] => 1.sw[64,0,0,0,64,0,0,0] +psadbw m128.ub[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] xmm.ub[16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1] => 1.sw[64,0,0,0,64,0,0,0] +pshufd imm8[0x1b] xmm.sd[1122,3344,5566,7788] xmm.sd[0,0,0,0] => 2.sd[7788,5566,3344,1122] +pshufd imm8[0x1b] m128.sd[1122,3344,5566,7788] xmm.sd[0,0,0,0] => 2.sd[7788,5566,3344,1122] +pshufhw imm8[0x1b] xmm.sw[11,22,33,44,55,66,77,88] xmm.sw[0,0,0,0,0,0,0,0] => 2.sw[11,22,33,44,88,77,66,55] +pshufhw imm8[0x1b] m128.sw[11,22,33,44,55,66,77,88] xmm.sw[0,0,0,0,0,0,0,0] => 2.sw[11,22,33,44,88,77,66,55] +pshuflw imm8[0x1b] xmm.sw[11,22,33,44,55,66,77,88] xmm.sw[0,0,0,0,0,0,0,0] => 2.sw[44,33,22,11,55,66,77,88] +pshuflw imm8[0x1b] m128.sw[11,22,33,44,55,66,77,88] xmm.sw[0,0,0,0,0,0,0,0] => 2.sw[44,33,22,11,55,66,77,88] +pslld imm8[4] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] => 1.ud[0x12345670,0x9abcdef0,0x12345670,0x9abcdef0] +pslld xmm.uq[4,0] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] => 1.ud[0x12345670,0x9abcdef0,0x12345670,0x9abcdef0] +pslld m128.uq[4,0] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] => 1.ud[0x12345670,0x9abcdef0,0x12345670,0x9abcdef0] +pslldq imm8[4] xmm.uq[0x8899aabbccddeeff,0x0011223344556677] => 1.uq[0xccddeeff00000000,0x445566778899aabb] +pslldq imm8[4] xmm.uq[0x8899aabbccddeeff,0x0011223344556677] => 1.uq[0xccddeeff00000000,0x445566778899aabb] +psllq imm8[4] xmm.uq[0x0123456789abcdef,0x0123456789abcdef] => 1.uq[0x123456789abcdef0,0x123456789abcdef0] +psllq xmm.uq[4,0] xmm.uq[0x0123456789abcdef,0x0123456789abcdef] => 1.uq[0x123456789abcdef0,0x123456789abcdef0] +psllq m128.uq[4,0] xmm.uq[0x0123456789abcdef,0x0123456789abcdef] => 1.uq[0x123456789abcdef0,0x123456789abcdef0] +psllw imm8[4] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x1230,0x5670,0x9ab0,0xdef0,0x1230,0x5670,0x9ab0,0xdef0] +psllw xmm.uq[4,0] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x1230,0x5670,0x9ab0,0xdef0,0x1230,0x5670,0x9ab0,0xdef0] +psllw m128.uq[4,0] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x1230,0x5670,0x9ab0,0xdef0,0x1230,0x5670,0x9ab0,0xdef0] +psrad imm8[4] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] => 1.ud[0x00123456,0xf89abcde,0x00123456,0xf89abcde] +psrad xmm.uq[4,0] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] => 1.ud[0x00123456,0xf89abcde,0x00123456,0xf89abcde] +psrad m128.uq[4,0] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] => 1.ud[0x00123456,0xf89abcde,0x00123456,0xf89abcde] +psraw imm8[4] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x0012,0x0456,0xf89a,0xfcde,0x0012,0x0456,0xf89a,0xfcde] +psraw xmm.uq[4,0] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x0012,0x0456,0xf89a,0xfcde,0x0012,0x0456,0xf89a,0xfcde] +psraw m128.uq[4,0] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x0012,0x0456,0xf89a,0xfcde,0x0012,0x0456,0xf89a,0xfcde] +psrld imm8[4] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] => 1.ud[0x00123456,0x089abcde,0x00123456,0x089abcde] +psrld xmm.uq[4,0] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] => 1.ud[0x00123456,0x089abcde,0x00123456,0x089abcde] +psrld m128.uq[4,0] xmm.ud[0x01234567,0x89abcdef,0x01234567,0x89abcdef] => 1.ud[0x00123456,0x089abcde,0x00123456,0x089abcde] +psrldq imm8[4] xmm.uq[0x8899aabbccddeeff,0x0011223344556677] => 1.uq[0x445566778899aabb,0x0000000000112233] +psrldq imm8[4] xmm.uq[0x8899aabbccddeeff,0x0011223344556677] => 1.uq[0x445566778899aabb,0x0000000000112233] +psrlq imm8[4] xmm.uq[0x0123456789abcdef,0x0123456789abcdef] => 1.uq[0x00123456789abcde,0x00123456789abcde] +psrlq xmm.uq[4,0] xmm.uq[0x0123456789abcdef,0x0123456789abcdef] => 1.uq[0x00123456789abcde,0x00123456789abcde] +psrlq m128.uq[4,0] xmm.uq[0x0123456789abcdef,0x0123456789abcdef] => 1.uq[0x00123456789abcde,0x00123456789abcde] +psrlw imm8[4] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x0012,0x0456,0x089a,0x0cde,0x0012,0x0456,0x089a,0x0cde] +psrlw xmm.uq[4,0] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x0012,0x0456,0x089a,0x0cde,0x0012,0x0456,0x089a,0x0cde] +psrlw m128.uq[4,0] xmm.uw[0x0123,0x4567,0x89ab,0xcdef,0x0123,0x4567,0x89ab,0xcdef] => 1.uw[0x0012,0x0456,0x089a,0x0cde,0x0012,0x0456,0x089a,0x0cde] +psubb xmm.sb[8,7,6,5,4,3,2,1,8,7,6,5,4,3,2,1] xmm.sb[12,34,56,78,21,43,65,87,12,34,56,78,21,43,65,87] => 1.sb[4,27,50,73,17,40,63,86,4,27,50,73,17,40,63,86] +psubb m128.sb[8,7,6,5,4,3,2,1,8,7,6,5,4,3,2,1] xmm.sb[12,34,56,78,21,43,65,87,12,34,56,78,21,43,65,87] => 1.sb[4,27,50,73,17,40,63,86,4,27,50,73,17,40,63,86] +psubd xmm.sd[8765,4321,8765,4321] xmm.sd[12345678,87654321,12345678,87654321] => 1.sd[12336913,87650000,12336913,87650000] +psubd m128.sd[8765,4321,8765,4321] xmm.sd[12345678,87654321,12345678,87654321] => 1.sd[12336913,87650000,12336913,87650000] +psubq mm.sq[11111111] mm.sq[33333333] => 1.sq[22222222] +psubq m64.sq[11111111] mm.sq[33333333] => 1.sq[22222222] +psubq xmm.sq[11111111,22222222] xmm.sq[55555555,33333333] => 1.sq[44444444,11111111] +psubq m128.sq[11111111,22222222] xmm.sq[55555555,33333333] => 1.sq[44444444,11111111] +psubsb xmm.sb[-50,50,-40,40,-30,30,-20,20,-50,50,-40,40,-30,30,-20,20] xmm.sb[25,-25,50,-50,100,-100,125,-125,25,-25,50,-50,100,-100,125,-125] => 1.sb[75,-75,90,-90,127,-128,127,-128,75,-75,90,-90,127,-128,127,-128] +psubsb m128.sb[-50,50,-40,40,-30,30,-20,20,-50,50,-40,40,-30,30,-20,20] xmm.sb[25,-25,50,-50,100,-100,125,-125,25,-25,50,-50,100,-100,125,-125] => 1.sb[75,-75,90,-90,127,-128,127,-128,75,-75,90,-90,127,-128,127,-128] +psubsw xmm.sw[-32145,32145,12345,-12345,-32145,32145,12345,-12345] xmm.sw[12345,-12345,32145,-32145,12345,-12345,32145,-32145] => 1.sw[32767,-32768,19800,-19800,32767,-32768,19800,-19800] +psubsw m128.sw[-32145,32145,12345,-12345,-32145,32145,12345,-12345] xmm.sw[12345,-12345,32145,-32145,12345,-12345,32145,-32145] => 1.sw[32767,-32768,19800,-19800,32767,-32768,19800,-19800] +psubusb xmm.ub[11,22,33,44,55,66,77,88,11,22,33,44,55,66,77,88] xmm.ub[88,77,66,55,44,33,22,11,88,77,66,55,44,33,22,11] => 1.ub[77,55,33,11,0,0,0,0,77,55,33,11,0,0,0,0] +psubusb m128.ub[11,22,33,44,55,66,77,88,11,22,33,44,55,66,77,88] xmm.ub[88,77,66,55,44,33,22,11,88,77,66,55,44,33,22,11] => 1.ub[77,55,33,11,0,0,0,0,77,55,33,11,0,0,0,0] +psubusw xmm.uw[1122,3344,5566,7788,1122,3344,5566,7788] xmm.uw[8877,6655,4433,2211,8877,6655,4433,2211] => 1.uw[7755,3311,0,0,7755,3311,0,0] +psubusw m128.uw[1122,3344,5566,7788,1122,3344,5566,7788] xmm.uw[8877,6655,4433,2211,8877,6655,4433,2211] => 1.uw[7755,3311,0,0,7755,3311,0,0] +psubw xmm.sw[87,65,43,21,87,65,43,21] xmm.sw[1234,5678,4321,8765,1234,5678,4321,8765] => 1.sw[1147,5613,4278,8744,1147,5613,4278,8744] +psubw m128.sw[87,65,43,21,87,65,43,21] xmm.sw[1234,5678,4321,8765,1234,5678,4321,8765] => 1.sw[1147,5613,4278,8744,1147,5613,4278,8744] +punpckhbw xmm.ub[12,34,56,78,21,43,65,87,78,56,34,12,87,65,43,21] xmm.ub[11,22,33,44,55,66,77,88,88,77,66,55,44,33,22,11] => 1.ub[88,78,77,56,66,34,55,12,44,87,33,65,22,43,11,21] +punpckhbw m128.ub[12,34,56,78,21,43,65,87,78,56,34,12,87,65,43,21] xmm.ub[11,22,33,44,55,66,77,88,88,77,66,55,44,33,22,11] => 1.ub[88,78,77,56,66,34,55,12,44,87,33,65,22,43,11,21] +punpckhdq xmm.ud[12345678,21436587,78563412,87654321] xmm.ud[11223344,55667788,88776655,44332211] => 1.ud[88776655,78563412,44332211,87654321] +punpckhdq m128.ud[12345678,21436587,78563412,87654321] xmm.ud[11223344,55667788,88776655,44332211] => 1.ud[88776655,78563412,44332211,87654321] +punpckhqdq xmm.uq[1234567821436587,7856341287654321] xmm.uq[1122334455667788,8877665544332211] => 1.uq[8877665544332211,7856341287654321] +punpckhqdq m128.uq[1234567821436587,7856341287654321] xmm.uq[1122334455667788,8877665544332211] => 1.uq[8877665544332211,7856341287654321] +punpckhwd xmm.uw[1234,5678,2143,6587,7856,3412,8765,4321] xmm.uw[1122,3344,5566,7788,8877,6655,4433,2211] => 1.uw[8877,7856,6655,3412,4433,8765,2211,4321] +punpckhwd m128.uw[1234,5678,2143,6587,7856,3412,8765,4321] xmm.uw[1122,3344,5566,7788,8877,6655,4433,2211] => 1.uw[8877,7856,6655,3412,4433,8765,2211,4321] +punpcklbw xmm.ub[12,34,56,78,21,43,65,87,78,56,34,12,87,65,43,21] xmm.ub[11,22,33,44,55,66,77,88,88,77,66,55,44,33,22,11] => 1.ub[11,12,22,34,33,56,44,78,55,21,66,43,77,65,88,87] +punpcklbw m128.ub[12,34,56,78,21,43,65,87,78,56,34,12,87,65,43,21] xmm.ub[11,22,33,44,55,66,77,88,88,77,66,55,44,33,22,11] => 1.ub[11,12,22,34,33,56,44,78,55,21,66,43,77,65,88,87] +punpckldq xmm.ud[12345678,21436587,78563412,87654321] xmm.ud[11223344,55667788,88776655,44332211] => 1.ud[11223344,12345678,55667788,21436587] +punpckldq m128.ud[12345678,21436587,78563412,87654321] xmm.ud[11223344,55667788,88776655,44332211] => 1.ud[11223344,12345678,55667788,21436587] +punpcklqdq xmm.uq[1234567821436587,7856341287654321] xmm.uq[1122334455667788,8877665544332211] => 1.uq[1122334455667788,1234567821436587] +punpcklqdq m128.uq[1234567821436587,7856341287654321] xmm.uq[1122334455667788,8877665544332211] => 1.uq[1122334455667788,1234567821436587] +punpcklwd xmm.uw[1234,5678,2143,6587,7856,3412,8765,4321] xmm.uw[1122,3344,5566,7788,8877,6655,4433,2211] => 1.uw[1122,1234,3344,5678,5566,2143,7788,6587] +punpcklwd m128.uw[1234,5678,2143,6587,7856,3412,8765,4321] xmm.uw[1122,3344,5566,7788,8877,6655,4433,2211] => 1.uw[1122,1234,3344,5678,5566,2143,7788,6587] +pxor xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfc9a30566503a9cf,0xfc9a30566503a9cf] +pxor m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfc9a30566503a9cf,0xfc9a30566503a9cf] +shufpd imm8[0x0] xmm.pd[1234.5678,8765.4321] xmm.pd[1234.5678,8765.4321] => 2.pd[1234.5678,1234.5678] +shufpd imm8[0x3] m128.pd[1234.5678,8765.4321] xmm.pd[1234.5678,8765.4321] => 2.pd[8765.4321,8765.4321] +sqrtpd xmm.pd[36.0,49.0] xmm.pd[1.11,2.22] => 1.pd[6.0,7.0] +sqrtpd m128.pd[36.0,49.0] xmm.pd[1.11,2.22] => 1.pd[6.0,7.0] +sqrtsd xmm.pd[36.0,5.55] xmm.pd[1.11,2.22] => 1.pd[6.0,2.22] +sqrtsd m128.pd[36.0,5.55] xmm.pd[1.11,2.22] => 1.pd[6.0,2.22] +subpd xmm.pd[1234.5678,8765.4321] xmm.pd[2222.0,1111.0] => 1.pd[987.4322,-7654.4321] +subpd m128.pd[1234.5678,8765.4321] xmm.pd[2222.0,1111.0] => 1.pd[987.4322,-7654.4321] +subsd xmm.pd[1234.5678,8765.4321] xmm.pd[2222.0,1111.0] => 1.pd[987.4322,1111.0] +subsd m128.pd[1234.5678,8765.4321] xmm.pd[2222.0,1111.0] => 1.pd[987.4322,1111.0] +ucomisd xmm.pd[1234.5678,0.0] xmm.pd[1234.5679,0.0] => eflags[0x8d5,0x000] +ucomisd xmm.pd[1234.5678,0.0] xmm.pd[1234.5677,0.0] => eflags[0x8d5,0x001] +ucomisd xmm.pd[1234.5678,0.0] xmm.pd[1234.5678,0.0] => eflags[0x8d5,0x040] +ucomisd m64.pd[1234.5678] xmm.pd[1234.5679,0.0] => eflags[0x8d5,0x000] +ucomisd m64.pd[1234.5678] xmm.pd[1234.5677,0.0] => eflags[0x8d5,0x001] +ucomisd m64.pd[1234.5678] xmm.pd[1234.5678,0.0] => eflags[0x8d5,0x040] +unpckhpd xmm.pd[1234.5678,8765.4321] xmm.pd[1122.3344,5566.7788] => 1.pd[5566.7788,8765.4321] +unpckhpd m128.pd[1234.5678,8765.4321] xmm.pd[1122.3344,5566.7788] => 1.pd[5566.7788,8765.4321] +unpcklpd xmm.pd[1234.5678,8765.4321] xmm.pd[1122.3344,5566.7788] => 1.pd[1122.3344,1234.5678] +unpcklpd m128.pd[1234.5678,8765.4321] xmm.pd[1122.3344,5566.7788] => 1.pd[1122.3344,1234.5678] +xorpd xmm.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfc9a30566503a9cf,0xfc9a30566503a9cf] +xorpd m128.uq[0xfdb97531eca86420,0x0123456789abcdef] xmm.uq[0x0123456789abcdef,0xfdb97531eca86420] => 1.uq[0xfc9a30566503a9cf,0xfc9a30566503a9cf] diff --git a/tests/cputest.c b/tests/cputest.c index 9e4b0ca7bb..16248f0b7e 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -2,7 +2,7 @@ #include #include -static __inline__ void cpuid(int n, +static __inline__ void cpuid(unsigned int n, unsigned int *a, unsigned int *b, unsigned int *c, unsigned int *d) { @@ -15,30 +15,41 @@ static __inline__ void cpuid(int n, int main(int argc, char **argv) { + unsigned int level = 0; unsigned int mask = 0; unsigned int a; unsigned int b; unsigned int c; unsigned int d; - if ( argc == 2 ) - { - if ( strcmp( argv[1], "mmx" ) == 0 ) mask = 1 << 23; - else if ( strcmp( argv[1], "sse" ) == 0 ) mask = 1 << 25; - else if ( strcmp( argv[1], "sse2" ) == 0 ) mask = 1 << 26; + if ( argc == 2 ) { + if ( strcmp( argv[1], "cmov" ) == 0 ) { + level = 1; + mask = 1 << 15; + } else if ( strcmp( argv[1], "mmx" ) == 0 ) { + level = 1; + mask = 1 << 23; + } else if ( strcmp( argv[1], "mmxext" ) == 0 ) { + level = 0x80000001; + mask = 1 << 22; + } else if ( strcmp( argv[1], "sse" ) == 0 ) { + level = 1; + mask = 1 << 25; + } else if ( strcmp( argv[1], "sse2" ) == 0 ) { + level = 1; + mask = 1 << 26; + } } - if ( mask == 0 ) - { - fprintf( stderr, "usage: cputest [mmx|sse|sse2]\n" ); + if ( level == 0 || mask == 0 ) { + fprintf( stderr, "usage: cputest [cmov|mmx|mmxext|sse|sse2]\n" ); exit( 1 ); } - cpuid( 0, &a, &b, &c, &d ); + cpuid( level & 0x80000000, &a, &b, &c, &d ); - if ( a >= 1 ) - { - cpuid( 1, &a, &b, &c, &d ); + if ( a >= level ) { + cpuid( level, &a, &b, &c, &d ); if ( ( d & mask ) != 0 ) exit( 0 ); }