diff --git a/gen/gen_code.cpp b/gen/gen_code.cpp index 5b6aa2c..1c1146c 100644 --- a/gen/gen_code.cpp +++ b/gen/gen_code.cpp @@ -1120,7 +1120,7 @@ void put() { 0xEB, "por", MM_0F | PP_66, true, -1, false, true }, { 0xF6, "psadbw", MM_0F | PP_66, true, -1, false, true }, - { 0x00, "pshufb", MM_0F38 | PP_66, false, -1, false, false }, + { 0x00, "pshufb", MM_0F38 | PP_66, true, -1, false, false }, { 0x08, "psignb", MM_0F38 | PP_66, true, -1, false, true }, { 0x09, "psignw", MM_0F38 | PP_66, true, -1, false, true }, @@ -1239,9 +1239,9 @@ void put() { 0x34, "pmovzxwq", MM_0F38 | PP_66, true, -1, false }, { 0x35, "pmovzxdq", MM_0F38 | PP_66, true, -1, false }, - { 0x70, "pshufd", MM_0F | PP_66, false, -1, true }, - { 0x70, "pshufhw", MM_0F | PP_F3, false, -1, true }, - { 0x70, "pshuflw", MM_0F | PP_F2, false, -1, true }, + { 0x70, "pshufd", MM_0F | PP_66, true, -1, true }, + { 0x70, "pshufhw", MM_0F | PP_F3, true, -1, true }, + { 0x70, "pshuflw", MM_0F | PP_F2, true, -1, true }, { 0x17, "ptest", MM_0F38 | PP_66, false, -1, false }, { 0x53, "rcpps", MM_0F, true, -1, false }, diff --git a/test/make_nm.cpp b/test/make_nm.cpp index 072126c..ebafdb1 100644 --- a/test/make_nm.cpp +++ b/test/make_nm.cpp @@ -1451,9 +1451,9 @@ class Test { { "vpermilpd", true }, { "vpermilps", true }, { "vaeskeygenassist", false }, - { "vpshufd", false }, - { "vpshufhw", false }, - { "vpshuflw", false }, + { "vpshufd", true }, + { "vpshufhw", true }, + { "vpshuflw", true }, }; for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) { const Tbl *p = &tbl[i]; @@ -1470,7 +1470,7 @@ class Test { } tbl[] = { { "vpermilpd", true }, { "vpermilps", true }, - { "vpshufb", false }, + { "vpshufb", true }, }; for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) { const Tbl *p = &tbl[i]; diff --git a/xbyak/xbyak_mnemonic.h b/xbyak/xbyak_mnemonic.h index 35bd975..827cbad 100644 --- a/xbyak/xbyak_mnemonic.h +++ b/xbyak/xbyak_mnemonic.h @@ -775,7 +775,7 @@ void vpor(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, void vpor(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xEB, true, -1); } void vpsadbw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xF6, true, -1); } void vpsadbw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xF6, true, -1); } -void vpshufb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x00, false, -1); } +void vpshufb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x00, true, -1); } void vpsignb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x08, true, -1); } void vpsignb(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x08, true, -1); } void vpsignw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x09, true, -1); } @@ -893,9 +893,9 @@ void vpmovzxbq(const Xmm& xm, const Operand& op) { opAVX_X_XM_IMM(xm, op, MM_0F3 void vpmovzxwd(const Xmm& xm, const Operand& op) { opAVX_X_XM_IMM(xm, op, MM_0F38 | PP_66, 0x33, true, -1); } void vpmovzxwq(const Xmm& xm, const Operand& op) { opAVX_X_XM_IMM(xm, op, MM_0F38 | PP_66, 0x34, true, -1); } void vpmovzxdq(const Xmm& xm, const Operand& op) { opAVX_X_XM_IMM(xm, op, MM_0F38 | PP_66, 0x35, true, -1); } -void vpshufd(const Xmm& xm, const Operand& op, uint8 imm) { opAVX_X_XM_IMM(xm, op, MM_0F | PP_66, 0x70, false, -1, imm); } -void vpshufhw(const Xmm& xm, const Operand& op, uint8 imm) { opAVX_X_XM_IMM(xm, op, MM_0F | PP_F3, 0x70, false, -1, imm); } -void vpshuflw(const Xmm& xm, const Operand& op, uint8 imm) { opAVX_X_XM_IMM(xm, op, MM_0F | PP_F2, 0x70, false, -1, imm); } +void vpshufd(const Xmm& xm, const Operand& op, uint8 imm) { opAVX_X_XM_IMM(xm, op, MM_0F | PP_66, 0x70, true, -1, imm); } +void vpshufhw(const Xmm& xm, const Operand& op, uint8 imm) { opAVX_X_XM_IMM(xm, op, MM_0F | PP_F3, 0x70, true, -1, imm); } +void vpshuflw(const Xmm& xm, const Operand& op, uint8 imm) { opAVX_X_XM_IMM(xm, op, MM_0F | PP_F2, 0x70, true, -1, imm); } void vptest(const Xmm& xm, const Operand& op) { opAVX_X_XM_IMM(xm, op, MM_0F38 | PP_66, 0x17, false, -1); } void vrcpps(const Xmm& xm, const Operand& op) { opAVX_X_XM_IMM(xm, op, MM_0F, 0x53, true, -1); } void vrsqrtps(const Xmm& xm, const Operand& op) { opAVX_X_XM_IMM(xm, op, MM_0F, 0x52, true, -1); }