518217 Add PHMINPOSUW SSE4.1 support for x86
518218 Add PMULDQ SSE4.1 support for x86
518220 Add ROUNDPS, ROUNDSS, ROUNDPD, ROUNDSD SSE4.1 support for x86
+518221 Implement PMOVSXBW SSE4.1 for x86
520482 Advertise POPCNT on x86 via CPUID
520753 Advertise LZCNT via CPUID for x86 (32-bit) clients
520856 unhandled instruction bytes: 0x2E 0xFF 0x14 0x85
goto decode_success;
}
+ /* 66 0F 38 20 /r = PMOVSXBW xmm1, xmm2/m64
+ Packed Move with Sign Extend from Byte to Word (XMM) */
+ if (sz == 2
+ && insn[0] == 0x0F && insn[1] == 0x38
+ && insn[2] == 0x20) {
+ IRTemp srcVec = newTemp(Ity_V128);
+ modrm = insn[3];
+ UInt rG = gregOfRM(modrm);
+
+ if (epartIsReg(modrm)) {
+ UInt rE = eregOfRM(modrm);
+ assign( srcVec, getXMMReg(rE) );
+ DIP("pmovsxbw %s,%s\n", nameXMMReg(rE), nameXMMReg(rG));
+ delta += 1 + 3;
+ } else {
+ addr = disAMode( &alen, sorb, delta+3, dis_buf );
+ assign( srcVec,
+ unop( Iop_64UtoV128, loadLE( Ity_I64, mkexpr(addr) ) ) );
+ DIP("pmovsxbw %s,%s\n", dis_buf, nameXMMReg(rG));
+ delta += alen + 3;
+ }
+
+ putXMMReg( rG, binop(Iop_SarN16x8,
+ binop(Iop_ShlN16x8,
+ binop(Iop_InterleaveLO8x16,
+ IRExpr_Const(IRConst_V128(0)),
+ mkexpr(srcVec)),
+ mkU8(8)),
+ mkU8(8)) );
+
+ goto decode_success;
+ }
+
/* 66 0F 3A 0B /r ib = ROUNDSD imm8, xmm2/m64, xmm1
66 0F 3A 0A /r ib = ROUNDSS imm8, xmm2/m32, xmm1
*/
DO_imm_r_to_mandrscalar("extractps", 3, src, "d");
}
-
-void test_PMOVSXBW ( void )
-{
- V128 src, dst;
- Int i;
- for (i = 0; i < 10; i++) {
- randV128(&src);
- randV128(&dst);
- DO_mandr_r("pmovsxbw", src, dst);
- }
-}
-
void test_PMOVSXBD ( void )
{
V128 src, dst;
}
}
+static inline void test_PMOVSXBW ( void )
+{
+ V128 src, dst;
+ Int i;
+ for (i = 0; i < 10; i++) {
+ randV128(&src);
+ randV128(&dst);
+ DO_mandr_r("pmovsxbw", src, dst);
+ }
+}
+
#endif /* __SSE4_COMMON_H */
test_ROUNDPS_w_mxcsr_rounding();
test_PMULDQ();
test_PCMPGTQ();
+ test_PMOVSXBW();
return 0;
}
m pcmpgtq ffffffffffffffff0000000000000000 fffffffffffffffe0000000000000001 0000000000000000ffffffffffffffff
r pcmpgtq ffffffffffffffff0000000000000000 ffffffffffffffff0000000000000000 00000000000000000000000000000000
m pcmpgtq ffffffffffffffff0000000000000000 ffffffffffffffff0000000000000000 00000000000000000000000000000000
+r pmovsxbw 72464063d004536cde86ffa4bafd5cb2 68c8176ba4f520fd2ceec4454cf556b4 ffdeff86ffffffa4ffbafffd005cffb2
+m pmovsxbw 72464063d004536cde86ffa4bafd5cb2 68c8176ba4f520fd2ceec4454cf556b4 ffdeff86ffffffa4ffbafffd005cffb2
+r pmovsxbw 2c1f39c2b3c27f4e9ff2315b8b9efbc6 7bc417e7004de803045a45338b28525e ff9ffff20031005bff8bff9efffbffc6
+m pmovsxbw 2c1f39c2b3c27f4e9ff2315b8b9efbc6 7bc417e7004de803045a45338b28525e ff9ffff20031005bff8bff9efffbffc6
+r pmovsxbw f08ffeb670d8b2230451df7b3f254252 06bc206ec50515132d60c0417b8794d7 00040051ffdf007b003f002500420052
+m pmovsxbw f08ffeb670d8b2230451df7b3f254252 06bc206ec50515132d60c0417b8794d7 00040051ffdf007b003f002500420052
+r pmovsxbw 1ae38aaba3d52998e87186f2f29fef83 66fd2e6c8ea8e5d882ccb15c381eda4a ffe80071ff86fff2fff2ff9fffefff83
+m pmovsxbw 1ae38aaba3d52998e87186f2f29fef83 66fd2e6c8ea8e5d882ccb15c381eda4a ffe80071ff86fff2fff2ff9fffefff83
+r pmovsxbw 0665da0eea422058271ca1abc117bc84 f5d33d4ef8c392fee16a956edffadde4 0027001cffa1ffabffc10017ffbcff84
+m pmovsxbw 0665da0eea422058271ca1abc117bc84 f5d33d4ef8c392fee16a956edffadde4 0027001cffa1ffabffc10017ffbcff84
+r pmovsxbw 0f61e849deadd2109c1fac92c7996682 108a4a7e9fe158332505e6658c265cd1 ff9c001fffacff92ffc7ff990066ff82
+m pmovsxbw 0f61e849deadd2109c1fac92c7996682 108a4a7e9fe158332505e6658c265cd1 ff9c001fffacff92ffc7ff990066ff82
+r pmovsxbw 9325b2ca1da17c6c254623942132a8a8 146d506a1d8e7521296a222c5aae123d 002500460023ff9400210032ffa8ffa8
+m pmovsxbw 9325b2ca1da17c6c254623942132a8a8 146d506a1d8e7521296a222c5aae123d 002500460023ff9400210032ffa8ffa8
+r pmovsxbw edfc33fc43ab5a179d5c839beaed4023 5bca4b7d10572374cb65c5af659fba52 ff9d005cff83ff9bffeaffed00400023
+m pmovsxbw edfc33fc43ab5a179d5c839beaed4023 5bca4b7d10572374cb65c5af659fba52 ff9d005cff83ff9bffeaffed00400023
+r pmovsxbw 7931674aeb55a7bedf2f47943fd6e81f 42eb372214c79fd9e6c249daca04113f ffdf002f0047ff94003fffd6ffe8001f
+m pmovsxbw 7931674aeb55a7bedf2f47943fd6e81f 42eb372214c79fd9e6c249daca04113f ffdf002f0047ff94003fffd6ffe8001f
+r pmovsxbw 92114b22b12ea10cc989eb6c3bfa5cc7 251d11c7c46b24fc554d2c99a5e9d22e ffc9ff89ffeb006c003bfffa005cffc7
+m pmovsxbw 92114b22b12ea10cc989eb6c3bfa5cc7 251d11c7c46b24fc554d2c99a5e9d22e ffc9ff89ffeb006c003bfffa005cffc7