diff --git a/src/asmjit/x86/x86assembler.cpp b/src/asmjit/x86/x86assembler.cpp index cc228d9..8bf7365 100644 --- a/src/asmjit/x86/x86assembler.cpp +++ b/src/asmjit/x86/x86assembler.cpp @@ -2837,6 +2837,10 @@ CaseExtRm: isign3 &= 0x3F; goto CaseVexRm; + case X86Inst::kEncodingVexRm_Wx: + ADD_REX_W(X86Reg::isGpq(o0) | X86Reg::isGpq(o1)); + goto CaseVexRm; + case X86Inst::kEncodingVexRm_Lx: opCode |= x86OpCodeLBySize(o0.getSize() | o1.getSize()); ASMJIT_FALLTHROUGH; diff --git a/src/asmjit/x86/x86inst.cpp b/src/asmjit/x86/x86inst.cpp index 7cefa90..42cdbaa 100644 --- a/src/asmjit/x86/x86inst.cpp +++ b/src/asmjit/x86/x86inst.cpp @@ -970,14 +970,14 @@ const X86Inst X86InstDB::instData[] = { INST(Vcvtps2uqq , VexRm_Lx , V(660F00,79,_,x,_,0,3,HV ), 0 , 0 , 0 , 3475, 289, 123, 0 ), INST(Vcvtqq2pd , VexRm_Lx , V(F30F00,E6,_,x,_,1,4,FV ), 0 , 0 , 0 , 3486, 284, 123, 0 ), INST(Vcvtqq2ps , VexRm_Lx , V(000F00,5B,_,x,_,1,4,FV ), 0 , 0 , 0 , 3496, 285, 123, 0 ), - INST(Vcvtsd2si , VexRm , V(F20F00,2D,_,I,x,x,3,T1F), 0 , 0 , 0 , 3506, 291, 117, 11), + INST(Vcvtsd2si , VexRm_Wx , V(F20F00,2D,_,I,x,x,3,T1F), 0 , 0 , 0 , 3506, 291, 117, 11), INST(Vcvtsd2ss , VexRvm , V(F20F00,5A,_,I,I,1,3,T1S), 0 , 0 , 0 , 3516, 248, 117, 12), - INST(Vcvtsd2usi , VexRm , V(F20F00,79,_,I,_,x,3,T1F), 0 , 0 , 0 , 3526, 292, 65 , 0 ), - INST(Vcvtsi2sd , VexRvm , V(F20F00,2A,_,I,x,x,2,T1W), 0 , 0 , 0 , 3537, 293, 117, 13), - INST(Vcvtsi2ss , VexRvm , V(F30F00,2A,_,I,x,x,2,T1W), 0 , 0 , 0 , 3547, 293, 117, 13), + INST(Vcvtsd2usi , VexRm_Wx , V(F20F00,79,_,I,_,x,3,T1F), 0 , 0 , 0 , 3526, 292, 65 , 0 ), + INST(Vcvtsi2sd , VexRvm_Wx , V(F20F00,2A,_,I,x,x,2,T1W), 0 , 0 , 0 , 3537, 293, 117, 13), + INST(Vcvtsi2ss , VexRvm_Wx , V(F30F00,2A,_,I,x,x,2,T1W), 0 , 0 , 0 , 3547, 293, 117, 13), INST(Vcvtss2sd , VexRvm , V(F30F00,5A,_,I,I,0,2,T1S), 0 , 0 , 0 , 3557, 294, 117, 13), - INST(Vcvtss2si , VexRm , V(F20F00,2D,_,I,x,x,2,T1F), 0 , 0 , 0 , 3567, 295, 117, 14), - INST(Vcvtss2usi , VexRm , V(F30F00,79,_,I,_,x,2,T1F), 0 , 0 , 0 , 3577, 296, 65 , 0 ), + INST(Vcvtss2si , VexRm_Wx , V(F30F00,2D,_,I,x,x,2,T1F), 0 , 0 , 0 , 3567, 295, 117, 14), + INST(Vcvtss2usi , VexRm_Wx , V(F30F00,79,_,I,_,x,2,T1F), 0 , 0 , 0 , 3577, 296, 65 , 0 ), INST(Vcvttpd2dq , VexRm_Lx , V(660F00,E6,_,x,I,1,4,FV ), 0 , 0 , 0 , 3588, 297, 116, 15), INST(Vcvttpd2qq , VexRm_Lx , V(660F00,7A,_,x,_,1,4,FV ), 0 , 0 , 0 , 3599, 298, 120, 0 ), INST(Vcvttpd2udq , VexRm_Lx , V(000F00,78,_,x,_,1,4,FV ), 0 , 0 , 0 , 3610, 299, 120, 0 ), @@ -986,16 +986,16 @@ const X86Inst X86InstDB::instData[] = { INST(Vcvttps2qq , VexRm_Lx , V(660F00,7A,_,x,_,0,3,HV ), 0 , 0 , 0 , 3645, 301, 123, 0 ), INST(Vcvttps2udq , VexRm_Lx , V(000F00,78,_,x,_,0,4,FV ), 0 , 0 , 0 , 3656, 302, 120, 0 ), INST(Vcvttps2uqq , VexRm_Lx , V(660F00,78,_,x,_,0,3,HV ), 0 , 0 , 0 , 3668, 301, 123, 0 ), - INST(Vcvttsd2si , VexRm , V(F20F00,2C,_,I,x,x,3,T1F), 0 , 0 , 0 , 3680, 303, 117, 17), - INST(Vcvttsd2usi , VexRm , V(F20F00,78,_,I,_,x,3,T1F), 0 , 0 , 0 , 3691, 304, 65 , 0 ), - INST(Vcvttss2si , VexRm , V(F30F00,2C,_,I,x,x,2,T1F), 0 , 0 , 0 , 3703, 305, 117, 18), - INST(Vcvttss2usi , VexRm , V(F30F00,78,_,I,_,x,2,T1F), 0 , 0 , 0 , 3714, 306, 65 , 0 ), + INST(Vcvttsd2si , VexRm_Wx , V(F20F00,2C,_,I,x,x,3,T1F), 0 , 0 , 0 , 3680, 303, 117, 17), + INST(Vcvttsd2usi , VexRm_Wx , V(F20F00,78,_,I,_,x,3,T1F), 0 , 0 , 0 , 3691, 304, 65 , 0 ), + INST(Vcvttss2si , VexRm_Wx , V(F30F00,2C,_,I,x,x,2,T1F), 0 , 0 , 0 , 3703, 305, 117, 18), + INST(Vcvttss2usi , VexRm_Wx , V(F30F00,78,_,I,_,x,2,T1F), 0 , 0 , 0 , 3714, 306, 65 , 0 ), INST(Vcvtudq2pd , VexRm_Lx , V(F30F00,7A,_,x,_,0,3,HV ), 0 , 0 , 0 , 3726, 307, 120, 0 ), INST(Vcvtudq2ps , VexRm_Lx , V(F20F00,7A,_,x,_,0,4,FV ), 0 , 0 , 0 , 3737, 290, 120, 0 ), INST(Vcvtuqq2pd , VexRm_Lx , V(F30F00,7A,_,x,_,1,4,FV ), 0 , 0 , 0 , 3748, 284, 123, 0 ), INST(Vcvtuqq2ps , VexRm_Lx , V(F20F00,7A,_,x,_,1,4,FV ), 0 , 0 , 0 , 3759, 285, 123, 0 ), - INST(Vcvtusi2sd , VexRvm , V(F20F00,7B,_,I,_,x,2,T1W), 0 , 0 , 0 , 3770, 308, 65 , 0 ), - INST(Vcvtusi2ss , VexRvm , V(F30F00,7B,_,I,_,x,2,T1W), 0 , 0 , 0 , 3781, 308, 65 , 0 ), + INST(Vcvtusi2sd , VexRvm_Wx , V(F20F00,7B,_,I,_,x,2,T1W), 0 , 0 , 0 , 3770, 308, 65 , 0 ), + INST(Vcvtusi2ss , VexRvm_Wx , V(F30F00,7B,_,I,_,x,2,T1W), 0 , 0 , 0 , 3781, 308, 65 , 0 ), INST(Vdbpsadbw , VexRvmi_Lx , V(660F3A,42,_,x,_,0,4,FVM), 0 , 0 , 0 , 3792, 309, 122, 0 ), INST(Vdivpd , VexRvm_Lx , V(660F00,5E,_,x,I,1,4,FV ), 0 , 0 , 0 , 3802, 246, 116, 19), INST(Vdivps , VexRvm_Lx , V(000F00,5E,_,x,I,0,4,FV ), 0 , 0 , 0 , 3809, 247, 116, 19), diff --git a/src/asmjit/x86/x86inst.h b/src/asmjit/x86/x86inst.h index 4f55ef3..4f6d493 100644 --- a/src/asmjit/x86/x86inst.h +++ b/src/asmjit/x86/x86inst.h @@ -1566,6 +1566,7 @@ struct X86Inst { kEncodingVexMri_Lx, //!< VEX|EVEX [MRI] (propagates VEX|EVEX.L if YMM used). kEncodingVexRm, //!< VEX|EVEX [RM]. kEncodingVexRm_ZDI, //!< VEX|EVEX [RM]. + kEncodingVexRm_Wx, //!< VEX|EVEX [RM] (propagates VEX|EVEX.W if GPQ used). kEncodingVexRm_Lx, //!< VEX|EVEX [RM] (propagates VEX|EVEX.L if YMM used). kEncodingVexRm_VM, //!< VEX|EVEX [RM] (propagates VEX|EVEX.L, VSIB support). kEncodingVexRm_T1_4X, //!< EVEX [RM] (used by NN instructions that use RM-T1_4X encoding).