Changeset 95441 in vbox for trunk/src/VBox
- Timestamp:
- Jun 29, 2022 10:40:14 PM (3 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
r95403 r95441 3597 3597 %endmacro 3598 3598 3599 IEMIMPL_MEDIA_F2 pand 3600 IEMIMPL_MEDIA_F2 pandn 3601 IEMIMPL_MEDIA_F2 por 3599 3602 IEMIMPL_MEDIA_F2 pxor 3600 3603 IEMIMPL_MEDIA_F2 pcmpeqb … … 3833 3836 %endmacro 3834 3837 3838 IEMIMPL_MEDIA_F3 vpand 3839 IEMIMPL_MEDIA_F3 vpandn 3840 IEMIMPL_MEDIA_F3 vpor 3835 3841 IEMIMPL_MEDIA_F3 vpxor 3836 3842 -
trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp
r95403 r95441 7071 7071 } 7072 7072 7073 #endif /* IEM_WITHOUT_ASSEMBLY */ 7074 7075 7076 /* 7077 * PAND / VPAND / PANDPS / VPANDPS / PANDPD / VPANDPD 7078 */ 7079 #ifdef IEM_WITHOUT_ASSEMBLY 7080 7081 IEM_DECL_IMPL_DEF(void, iemAImpl_pand_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc)) 7082 { 7083 RT_NOREF(pFpuState); 7084 *puDst &= *puSrc; 7085 } 7086 7087 7088 IEM_DECL_IMPL_DEF(void, iemAImpl_pand_u128,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc)) 7089 { 7090 RT_NOREF(pFpuState); 7091 puDst->au64[0] &= puSrc->au64[0]; 7092 puDst->au64[1] &= puSrc->au64[1]; 7093 } 7094 7095 #endif 7096 7097 IEM_DECL_IMPL_DEF(void, iemAImpl_vpand_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst, 7098 PCRTUINT128U puSrc1, PCRTUINT128U puSrc2)) 7099 { 7100 RT_NOREF(pExtState); 7101 puDst->au64[0] = puSrc1->au64[0] & puSrc2->au64[0]; 7102 puDst->au64[1] = puSrc1->au64[1] & puSrc2->au64[1]; 7103 } 7104 7105 7106 IEM_DECL_IMPL_DEF(void, iemAImpl_vpand_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst, 7107 PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)) 7108 { 7109 RT_NOREF(pExtState); 7110 puDst->au64[0] = puSrc1->au64[0] & puSrc2->au64[0]; 7111 puDst->au64[1] = puSrc1->au64[1] & puSrc2->au64[1]; 7112 puDst->au64[2] = puSrc1->au64[2] & puSrc2->au64[2]; 7113 puDst->au64[3] = puSrc1->au64[3] & puSrc2->au64[3]; 7114 } 7115 7116 7117 /* 7118 * PANDN / VPANDN / PANDNPS / VPANDNPS / PANDNPD / VPANDNPD 7119 */ 7120 #ifdef IEM_WITHOUT_ASSEMBLY 7121 7122 IEM_DECL_IMPL_DEF(void, iemAImpl_pandn_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc)) 7123 { 7124 RT_NOREF(pFpuState); 7125 *puDst = ~*puDst & *puSrc; 7126 } 7127 7128 7129 IEM_DECL_IMPL_DEF(void, iemAImpl_pandn_u128,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc)) 7130 { 7131 RT_NOREF(pFpuState); 7132 puDst->au64[0] = ~puDst->au64[0] & puSrc->au64[0]; 7133 puDst->au64[1] = ~puDst->au64[1] & puSrc->au64[1]; 7134 } 7135 7136 #endif 7137 7138 IEM_DECL_IMPL_DEF(void, iemAImpl_vpandn_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst, 7139 PCRTUINT128U puSrc1, PCRTUINT128U puSrc2)) 7140 { 7141 RT_NOREF(pExtState); 7142 puDst->au64[0] = ~puSrc1->au64[0] & puSrc2->au64[0]; 7143 puDst->au64[1] = ~puSrc1->au64[1] & puSrc2->au64[1]; 7144 } 7145 7146 7147 IEM_DECL_IMPL_DEF(void, iemAImpl_vpandn_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst, 7148 PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)) 7149 { 7150 RT_NOREF(pExtState); 7151 puDst->au64[0] = ~puSrc1->au64[0] & puSrc2->au64[0]; 7152 puDst->au64[1] = ~puSrc1->au64[1] & puSrc2->au64[1]; 7153 puDst->au64[2] = ~puSrc1->au64[2] & puSrc2->au64[2]; 7154 puDst->au64[3] = ~puSrc1->au64[3] & puSrc2->au64[3]; 7155 } 7156 7157 7158 /* 7159 * POR / VPOR / PORPS / VPORPS / PORPD / VPORPD 7160 */ 7161 #ifdef IEM_WITHOUT_ASSEMBLY 7162 7163 IEM_DECL_IMPL_DEF(void, iemAImpl_por_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc)) 7164 { 7165 RT_NOREF(pFpuState); 7166 *puDst |= *puSrc; 7167 } 7168 7169 7170 IEM_DECL_IMPL_DEF(void, iemAImpl_por_u128,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc)) 7171 { 7172 RT_NOREF(pFpuState); 7173 puDst->au64[0] |= puSrc->au64[0]; 7174 puDst->au64[1] |= puSrc->au64[1]; 7175 } 7176 7177 #endif 7178 7179 IEM_DECL_IMPL_DEF(void, iemAImpl_vpor_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst, 7180 PCRTUINT128U puSrc1, PCRTUINT128U puSrc2)) 7181 { 7182 RT_NOREF(pExtState); 7183 puDst->au64[0] = puSrc1->au64[0] | puSrc2->au64[0]; 7184 puDst->au64[1] = puSrc1->au64[1] | puSrc2->au64[1]; 7185 } 7186 7187 7188 IEM_DECL_IMPL_DEF(void, iemAImpl_vpor_u256_fallback,(PX86XSAVEAREA pExtState, PRTUINT256U puDst, 7189 PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)) 7190 { 7191 RT_NOREF(pExtState); 7192 puDst->au64[0] = puSrc1->au64[0] | puSrc2->au64[0]; 7193 puDst->au64[1] = puSrc1->au64[1] | puSrc2->au64[1]; 7194 puDst->au64[2] = puSrc1->au64[2] | puSrc2->au64[2]; 7195 puDst->au64[3] = puSrc1->au64[3] | puSrc2->au64[3]; 7196 } 7197 7073 7198 7074 7199 /* 7075 7200 * PXOR / VPXOR / PXORPS / VPXORPS / PXORPD / VPXORPD 7076 7201 */ 7202 #ifdef IEM_WITHOUT_ASSEMBLY 7077 7203 7078 7204 IEM_DECL_IMPL_DEF(void, iemAImpl_pxor_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc)) … … 7090 7216 } 7091 7217 7092 #endif /* IEM_WITHOUT_ASSEMBLY */7218 #endif 7093 7219 7094 7220 IEM_DECL_IMPL_DEF(void, iemAImpl_vpxor_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst, … … 7111 7237 } 7112 7238 7239 7240 /* 7241 * 7242 */ 7243 7113 7244 #ifdef IEM_WITHOUT_ASSEMBLY 7114 7245 -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsInterpretOnly.cpp
r95403 r95441 910 910 IEM_STATIC const IEMOPMEDIAF1H1 g_iemAImpl_punpckhqdq = { NULL, iemAImpl_punpckhqdq_u128 }; 911 911 912 /** Function table for the PAND instruction */ 913 IEM_STATIC const IEMOPMEDIAF2 g_iemAImpl_pand = { iemAImpl_pand_u64, iemAImpl_pand_u128 }; 914 /** Function table for the PANDN instruction */ 915 IEM_STATIC const IEMOPMEDIAF2 g_iemAImpl_pandn = { iemAImpl_pandn_u64, iemAImpl_pandn_u128 }; 916 /** Function table for the POR instruction */ 917 IEM_STATIC const IEMOPMEDIAF2 g_iemAImpl_por = { iemAImpl_por_u64, iemAImpl_por_u128 }; 912 918 /** Function table for the PXOR instruction */ 913 919 IEM_STATIC const IEMOPMEDIAF2 g_iemAImpl_pxor = { iemAImpl_pxor_u64, iemAImpl_pxor_u128 }; … … 921 927 # ifndef IEM_WITHOUT_ASSEMBLY 922 928 /** Function table for the VPXOR instruction */ 929 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpand = { iemAImpl_vpand_u128, iemAImpl_vpand_u256 }; 930 /** Function table for the VPXORN instruction */ 931 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpandn = { iemAImpl_vpandn_u128, iemAImpl_vpandn_u256 }; 932 /** Function table for the VPOR instruction */ 933 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpor = { iemAImpl_vpor_u128, iemAImpl_vpor_u256 }; 934 /** Function table for the VPXOR instruction */ 923 935 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpxor = { iemAImpl_vpxor_u128, iemAImpl_vpxor_u256 }; 924 936 # endif 937 /** Function table for the VPAND instruction, software fallback. */ 938 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpand_fallback = { iemAImpl_vpand_u128_fallback, iemAImpl_vpand_u256_fallback }; 939 /** Function table for the VPANDN instruction, software fallback. */ 940 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpandn_fallback= { iemAImpl_vpandn_u128_fallback, iemAImpl_vpandn_u256_fallback }; 941 /** Function table for the VPOR instruction, software fallback. */ 942 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpor_fallback = { iemAImpl_vpor_u128_fallback, iemAImpl_vpor_u256_fallback }; 925 943 /** Function table for the VPXOR instruction, software fallback. */ 926 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpxor_fallback = { iemAImpl_vpxor_u128_fallback, iemAImpl_vpxor_u256_fallback };944 IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpxor_fallback = { iemAImpl_vpxor_u128_fallback, iemAImpl_vpxor_u256_fallback }; 927 945 928 946 #endif /* !TST_IEM_CHECK_MC */ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r95403 r95441 3028 3028 /* Opcode 0xf2 0x0f 0x53 - invalid */ 3029 3029 3030 3030 3031 /** Opcode 0x0f 0x54 - andps Vps, Wps */ 3031 FNIEMOP_STUB(iemOp_andps_Vps_Wps); 3032 FNIEMOP_DEF(iemOp_andps_Vps_Wps) 3033 { 3034 IEMOP_MNEMONIC2(RM, ANDPS, andps, Vps, Wps, DISOPTYPE_HARMLESS, 0); 3035 return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pand); 3036 } 3037 3038 3032 3039 /** Opcode 0x66 0x0f 0x54 - andpd Vpd, Wpd */ 3033 FNIEMOP_STUB(iemOp_andpd_Vpd_Wpd); 3040 FNIEMOP_DEF(iemOp_andpd_Vpd_Wpd) 3041 { 3042 IEMOP_MNEMONIC2(RM, ANDPD, andpd, Vpd, Wpd, DISOPTYPE_HARMLESS, 0); 3043 return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pand); 3044 } 3045 3046 3034 3047 /* Opcode 0xf3 0x0f 0x54 - invalid */ 3035 3048 /* Opcode 0xf2 0x0f 0x54 - invalid */ 3036 3049 3050 3037 3051 /** Opcode 0x0f 0x55 - andnps Vps, Wps */ 3038 FNIEMOP_STUB(iemOp_andnps_Vps_Wps); 3052 FNIEMOP_DEF(iemOp_andnps_Vps_Wps) 3053 { 3054 IEMOP_MNEMONIC2(RM, ANDNPS, andnps, Vps, Wps, DISOPTYPE_HARMLESS, 0); 3055 return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pandn); 3056 } 3057 3058 3039 3059 /** Opcode 0x66 0x0f 0x55 - andnpd Vpd, Wpd */ 3040 FNIEMOP_STUB(iemOp_andnpd_Vpd_Wpd); 3060 FNIEMOP_DEF(iemOp_andnpd_Vpd_Wpd) 3061 { 3062 IEMOP_MNEMONIC2(RM, ANDNPD, andnpd, Vpd, Wpd, DISOPTYPE_HARMLESS, 0); 3063 return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pandn); 3064 } 3065 3066 3041 3067 /* Opcode 0xf3 0x0f 0x55 - invalid */ 3042 3068 /* Opcode 0xf2 0x0f 0x55 - invalid */ 3043 3069 3070 3044 3071 /** Opcode 0x0f 0x56 - orps Vps, Wps */ 3045 FNIEMOP_STUB(iemOp_orps_Vps_Wps); 3072 FNIEMOP_DEF(iemOp_orps_Vps_Wps) 3073 { 3074 IEMOP_MNEMONIC2(RM, ORPS, orps, Vps, Wps, DISOPTYPE_HARMLESS, 0); 3075 return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_por); 3076 } 3077 3078 3046 3079 /** Opcode 0x66 0x0f 0x56 - orpd Vpd, Wpd */ 3047 FNIEMOP_STUB(iemOp_orpd_Vpd_Wpd); 3080 FNIEMOP_DEF(iemOp_orpd_Vpd_Wpd) 3081 { 3082 IEMOP_MNEMONIC2(RM, ORPD, orpd, Vpd, Wpd, DISOPTYPE_HARMLESS, 0); 3083 return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_por); 3084 } 3085 3086 3048 3087 /* Opcode 0xf3 0x0f 0x56 - invalid */ 3049 3088 /* Opcode 0xf2 0x0f 0x56 - invalid */ … … 9384 9423 9385 9424 /** Opcode 0x0f 0xdb - pand Pq, Qq */ 9386 FNIEMOP_STUB(iemOp_pand_Pq_Qq); 9387 /** Opcode 0x66 0x0f 0xdb - pand Vx, W */ 9388 FNIEMOP_STUB(iemOp_pand_Vx_W); 9425 FNIEMOP_DEF(iemOp_pand_Pq_Qq) 9426 { 9427 IEMOP_MNEMONIC2(RM, PAND, pand, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 9428 return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full, &g_iemAImpl_pand); 9429 } 9430 9431 9432 /** Opcode 0x66 0x0f 0xdb - pand Vx, Wx */ 9433 FNIEMOP_DEF(iemOp_pand_Vx_Wx) 9434 { 9435 IEMOP_MNEMONIC2(RM, PAND, pand, Vx, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 9436 return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pand); 9437 } 9438 9439 9389 9440 /* Opcode 0xf3 0x0f 0xdb - invalid */ 9390 9441 /* Opcode 0xf2 0x0f 0xdb - invalid */ … … 9411 9462 /* Opcode 0xf2 0x0f 0xde - invalid */ 9412 9463 9464 9413 9465 /** Opcode 0x0f 0xdf - pandn Pq, Qq */ 9414 FNIEMOP_STUB(iemOp_pandn_Pq_Qq); 9466 FNIEMOP_DEF(iemOp_pandn_Pq_Qq) 9467 { 9468 IEMOP_MNEMONIC2(RM, PANDN, pandn, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 9469 return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full, &g_iemAImpl_pandn); 9470 } 9471 9472 9415 9473 /** Opcode 0x66 0x0f 0xdf - pandn Vx, Wx */ 9416 FNIEMOP_STUB(iemOp_pandn_Vx_Wx); 9474 FNIEMOP_DEF(iemOp_pandn_Vx_Wx) 9475 { 9476 IEMOP_MNEMONIC2(RM, PANDN, pandn, Vx, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 9477 return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pandn); 9478 } 9479 9480 9417 9481 /* Opcode 0xf3 0x0f 0xdf - invalid */ 9418 9482 /* Opcode 0xf2 0x0f 0xdf - invalid */ … … 9588 9652 /* Opcode 0xf2 0x0f 0xea - invalid */ 9589 9653 9654 9590 9655 /** Opcode 0x0f 0xeb - por Pq, Qq */ 9591 FNIEMOP_STUB(iemOp_por_Pq_Qq); 9656 FNIEMOP_DEF(iemOp_por_Pq_Qq) 9657 { 9658 IEMOP_MNEMONIC2(RM, POR, por, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 9659 return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full, &g_iemAImpl_por); 9660 } 9661 9662 9592 9663 /** Opcode 0x66 0x0f 0xeb - por Vx, W */ 9593 FNIEMOP_STUB(iemOp_por_Vx_W); 9664 FNIEMOP_DEF(iemOp_por_Vx_W) 9665 { 9666 IEMOP_MNEMONIC2(RM, POR, por, Vx, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 9667 return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_por); 9668 } 9669 9670 9594 9671 /* Opcode 0xf3 0x0f 0xeb - invalid */ 9595 9672 /* Opcode 0xf2 0x0f 0xeb - invalid */ … … 9620 9697 FNIEMOP_DEF(iemOp_pxor_Pq_Qq) 9621 9698 { 9622 IEMOP_MNEMONIC (pxor, "pxor");9699 IEMOP_MNEMONIC2(RM, PXOR, pxor, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 9623 9700 return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full, &g_iemAImpl_pxor); 9624 9701 } … … 9628 9705 FNIEMOP_DEF(iemOp_pxor_Vx_Wx) 9629 9706 { 9630 IEMOP_MNEMONIC (pxor_Vx_Wx, "pxor");9707 IEMOP_MNEMONIC2(RM, PXOR, pxor, Vx, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 9631 9708 return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pxor); 9632 9709 } 9710 9633 9711 9634 9712 /* Opcode 0xf3 0x0f 0xef - invalid */ … … 9990 10068 /* 0xd9 */ iemOp_psubusw_Pq_Qq, iemOp_psubusw_Vx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 9991 10069 /* 0xda */ iemOp_pminub_Pq_Qq, iemOp_pminub_Vx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 9992 /* 0xdb */ iemOp_pand_Pq_Qq, iemOp_pand_Vx_W ,iemOp_InvalidNeedRM, iemOp_InvalidNeedRM,10070 /* 0xdb */ iemOp_pand_Pq_Qq, iemOp_pand_Vx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 9993 10071 /* 0xdc */ iemOp_paddusb_Pq_Qq, iemOp_paddusb_Vx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 9994 10072 /* 0xdd */ iemOp_paddusw_Pq_Qq, iemOp_paddusw_Vx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
r95403 r95441 29 29 * - vpxxx ymm0, ymm1, ymm2/mem256 30 30 * 31 * Exceptions type 4. AVX 2 cpuid checks.31 * Exceptions type 4. AVX cpuid check for 128-bit operation, AVX2 for 256-bit. 32 32 */ 33 FNIEMOP_DEF_1(iemOpCommonAvx 2_Vx_Hx_Wx, PCIEMOPMEDIAF3, pImpl)33 FNIEMOP_DEF_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, PCIEMOPMEDIAF3, pImpl) 34 34 { 35 35 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); … … 39 39 * Register, register. 40 40 */ 41 IEMOP_HLP_DONE_VEX_DECODING();42 41 if (pVCpu->iem.s.uVexLength) 43 42 { 43 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2); 44 44 IEM_MC_BEGIN(4, 3); 45 45 IEM_MC_LOCAL(RTUINT256U, uDst); … … 61 61 else 62 62 { 63 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 63 64 IEM_MC_BEGIN(4, 0); 64 65 IEM_MC_IMPLICIT_AVX_AIMPL_ARGS(); … … 95 96 96 97 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 97 IEMOP_HLP_DONE_VEX_DECODING ();98 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2); 98 99 IEM_MC_MAYBE_RAISE_AVX2_RELATED_XCPT(); 99 100 IEM_MC_PREPARE_AVX_USAGE(); … … 118 119 119 120 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 120 IEMOP_HLP_DONE_VEX_DECODING ();121 IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx); 121 122 IEM_MC_MAYBE_RAISE_AVX2_RELATED_XCPT(); 122 123 IEM_MC_PREPARE_AVX_USAGE(); … … 1798 1799 /* Opcode VEX.F2.0F 0x53 - invalid */ 1799 1800 1801 1800 1802 /** Opcode VEX.0F 0x54 - vandps Vps, Hps, Wps */ 1801 FNIEMOP_STUB(iemOp_vandps_Vps_Hps_Wps); 1803 FNIEMOP_DEF(iemOp_vandps_Vps_Hps_Wps) 1804 { 1805 IEMOP_MNEMONIC3(VEX_RVM, VANDPS, vandps, Vps, Hps, Wps, DISOPTYPE_HARMLESS, 0); 1806 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 1807 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpand, &g_iemAImpl_vpand_fallback)); 1808 } 1809 1810 1802 1811 /** Opcode VEX.66.0F 0x54 - vandpd Vpd, Hpd, Wpd */ 1803 FNIEMOP_STUB(iemOp_vandpd_Vpd_Hpd_Wpd); 1812 FNIEMOP_DEF(iemOp_vandpd_Vpd_Hpd_Wpd) 1813 { 1814 IEMOP_MNEMONIC3(VEX_RVM, VANDPD, vandpd, Vpd, Hpd, Wpd, DISOPTYPE_HARMLESS, 0); 1815 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 1816 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpand, &g_iemAImpl_vpand_fallback)); 1817 } 1818 1819 1804 1820 /* Opcode VEX.F3.0F 0x54 - invalid */ 1805 1821 /* Opcode VEX.F2.0F 0x54 - invalid */ 1806 1822 1823 1807 1824 /** Opcode VEX.0F 0x55 - vandnps Vps, Hps, Wps */ 1808 FNIEMOP_STUB(iemOp_vandnps_Vps_Hps_Wps); 1825 FNIEMOP_DEF(iemOp_vandnps_Vps_Hps_Wps) 1826 { 1827 IEMOP_MNEMONIC3(VEX_RVM, VANDNPS, vandnps, Vps, Hps, Wps, DISOPTYPE_HARMLESS, 0); 1828 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 1829 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpandn, &g_iemAImpl_vpandn_fallback)); 1830 } 1831 1832 1809 1833 /** Opcode VEX.66.0F 0x55 - vandnpd Vpd, Hpd, Wpd */ 1810 FNIEMOP_STUB(iemOp_vandnpd_Vpd_Hpd_Wpd); 1834 FNIEMOP_DEF(iemOp_vandnpd_Vpd_Hpd_Wpd) 1835 { 1836 IEMOP_MNEMONIC3(VEX_RVM, VANDNPD, vandnpd, Vpd, Hpd, Wpd, DISOPTYPE_HARMLESS, 0); 1837 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 1838 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpandn, &g_iemAImpl_vpandn_fallback)); 1839 } 1840 1841 1811 1842 /* Opcode VEX.F3.0F 0x55 - invalid */ 1812 1843 /* Opcode VEX.F2.0F 0x55 - invalid */ 1813 1844 1814 1845 /** Opcode VEX.0F 0x56 - vorps Vps, Hps, Wps */ 1815 FNIEMOP_STUB(iemOp_vorps_Vps_Hps_Wps); 1846 FNIEMOP_DEF(iemOp_vorps_Vps_Hps_Wps) 1847 { 1848 IEMOP_MNEMONIC3(VEX_RVM, VORPS, vorps, Vps, Hps, Wps, DISOPTYPE_HARMLESS, 0); 1849 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 1850 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpor, &g_iemAImpl_vpor_fallback)); 1851 } 1852 1853 1816 1854 /** Opcode VEX.66.0F 0x56 - vorpd Vpd, Hpd, Wpd */ 1817 FNIEMOP_STUB(iemOp_vorpd_Vpd_Hpd_Wpd); 1855 FNIEMOP_DEF(iemOp_vorpd_Vpd_Hpd_Wpd) 1856 { 1857 IEMOP_MNEMONIC3(VEX_RVM, VORPD, vorpd, Vpd, Hpd, Wpd, DISOPTYPE_HARMLESS, 0); 1858 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 1859 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpor, &g_iemAImpl_vpor_fallback)); 1860 } 1861 1862 1818 1863 /* Opcode VEX.F3.0F 0x56 - invalid */ 1819 1864 /* Opcode VEX.F2.0F 0x56 - invalid */ … … 1824 1869 { 1825 1870 IEMOP_MNEMONIC3(VEX_RVM, VXORPS, vxorps, Vps, Hps, Wps, DISOPTYPE_HARMLESS, 0); 1826 return FNIEMOP_CALL_1(iemOpCommonAvx 2_Vx_Hx_Wx,1871 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 1827 1872 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpxor, &g_iemAImpl_vpxor_fallback)); 1828 1873 } … … 1833 1878 { 1834 1879 IEMOP_MNEMONIC3(VEX_RVM, VXORPD, vxorpd, Vpd, Hpd, Wpd, DISOPTYPE_HARMLESS, 0); 1835 return FNIEMOP_CALL_1(iemOpCommonAvx 2_Vx_Hx_Wx,1880 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 1836 1881 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpxor, &g_iemAImpl_vpxor_fallback)); 1837 1882 } … … 3540 3585 3541 3586 /* Opcode VEX.0F 0xdb - invalid */ 3542 /** Opcode VEX.66.0F 0xdb - vpand Vx, Hx, W */ 3543 FNIEMOP_STUB(iemOp_vpand_Vx_Hx_W); 3587 3588 3589 /** Opcode VEX.66.0F 0xdb - vpand Vx, Hx, Wx */ 3590 FNIEMOP_DEF(iemOp_vpand_Vx_Hx_Wx) 3591 { 3592 IEMOP_MNEMONIC3(VEX_RVM, VPAND, vpand, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0); 3593 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 3594 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpand, &g_iemAImpl_vpand_fallback)); 3595 } 3596 3597 3544 3598 /* Opcode VEX.F3.0F 0xdb - invalid */ 3545 3599 /* Opcode VEX.F2.0F 0xdb - invalid */ … … 3564 3618 3565 3619 /* Opcode VEX.0F 0xdf - invalid */ 3620 3621 3566 3622 /** Opcode VEX.66.0F 0xdf - vpandn Vx, Hx, Wx */ 3567 FNIEMOP_STUB(iemOp_vpandn_Vx_Hx_Wx); 3623 FNIEMOP_DEF(iemOp_vpandn_Vx_Hx_Wx) 3624 { 3625 IEMOP_MNEMONIC3(VEX_RVM, VPANDN, vpandn, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0); 3626 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 3627 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpandn, &g_iemAImpl_vpandn_fallback)); 3628 } 3629 3630 3568 3631 /* Opcode VEX.F3.0F 0xdf - invalid */ 3569 3632 /* Opcode VEX.F2.0F 0xdf - invalid */ … … 3711 3774 3712 3775 /* Opcode VEX.0F 0xeb - invalid */ 3713 /** Opcode VEX.66.0F 0xeb - vpor Vx, Hx, W */ 3714 FNIEMOP_STUB(iemOp_vpor_Vx_Hx_W); 3776 3777 3778 /** Opcode VEX.66.0F 0xeb - vpor Vx, Hx, Wx */ 3779 FNIEMOP_DEF(iemOp_vpor_Vx_Hx_Wx) 3780 { 3781 IEMOP_MNEMONIC3(VEX_RVM, VPOR, vpor, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0); 3782 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 3783 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpor, &g_iemAImpl_vpor_fallback)); 3784 } 3785 3786 3787 3715 3788 /* Opcode VEX.F3.0F 0xeb - invalid */ 3716 3789 /* Opcode VEX.F2.0F 0xeb - invalid */ … … 3741 3814 { 3742 3815 IEMOP_MNEMONIC3(VEX_RVM, VPXOR, vpxor, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0); 3743 return FNIEMOP_CALL_1(iemOpCommonAvx 2_Vx_Hx_Wx,3816 return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, 3744 3817 IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpxor, &g_iemAImpl_vpxor_fallback)); 3745 3818 } … … 4084 4157 /* 0xd9 */ iemOp_InvalidNeedRM, iemOp_vpsubusw_Vx_Hx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 4085 4158 /* 0xda */ iemOp_InvalidNeedRM, iemOp_vpminub_Vx_Hx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 4086 /* 0xdb */ iemOp_InvalidNeedRM, iemOp_vpand_Vx_Hx_W ,iemOp_InvalidNeedRM, iemOp_InvalidNeedRM,4159 /* 0xdb */ iemOp_InvalidNeedRM, iemOp_vpand_Vx_Hx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 4087 4160 /* 0xdc */ iemOp_InvalidNeedRM, iemOp_vpaddusb_Vx_Hx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 4088 4161 /* 0xdd */ iemOp_InvalidNeedRM, iemOp_vpaddusw_Vx_Hx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, … … 4101 4174 /* 0xe9 */ iemOp_InvalidNeedRM, iemOp_vpsubsw_Vx_Hx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 4102 4175 /* 0xea */ iemOp_InvalidNeedRM, iemOp_vpminsw_Vx_Hx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 4103 /* 0xeb */ iemOp_InvalidNeedRM, iemOp_vpor_Vx_Hx_W ,iemOp_InvalidNeedRM, iemOp_InvalidNeedRM,4176 /* 0xeb */ iemOp_InvalidNeedRM, iemOp_vpor_Vx_Hx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 4104 4177 /* 0xec */ iemOp_InvalidNeedRM, iemOp_vpaddsb_Vx_Hx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 4105 4178 /* 0xed */ iemOp_InvalidNeedRM, iemOp_vpaddsw_Vx_Hx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, -
trunk/src/VBox/VMM/include/IEMInternal.h
r95410 r95441 1744 1744 typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLMEDIAF3U256,(PX86XSAVEAREA pExtState, PRTUINT256U puDst, PCRTUINT256U puSrc1, PCRTUINT256U puSrc2)); 1745 1745 typedef FNIEMAIMPLMEDIAF3U256 *PFNIEMAIMPLMEDIAF3U256; 1746 FNIEMAIMPLMEDIAF2U64 iemAImpl_pxor_u64, iemAImpl_pcmpeqb_u64, iemAImpl_pcmpeqw_u64, iemAImpl_pcmpeqd_u64; 1747 FNIEMAIMPLMEDIAF2U128 iemAImpl_pxor_u128, iemAImpl_pcmpeqb_u128, iemAImpl_pcmpeqw_u128, iemAImpl_pcmpeqd_u128; 1748 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpxor_u128, iemAImpl_vpxor_u128_fallback; 1749 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpxor_u256, iemAImpl_vpxor_u256_fallback; 1746 FNIEMAIMPLMEDIAF2U64 iemAImpl_pand_u64, iemAImpl_pandn_u64, iemAImpl_por_u64, iemAImpl_pxor_u64; 1747 FNIEMAIMPLMEDIAF2U64 iemAImpl_pcmpeqb_u64, iemAImpl_pcmpeqw_u64, iemAImpl_pcmpeqd_u64; 1748 FNIEMAIMPLMEDIAF2U128 iemAImpl_pand_u128, iemAImpl_pandn_u128, iemAImpl_por_u128, iemAImpl_pxor_u128; 1749 FNIEMAIMPLMEDIAF2U128 iemAImpl_pcmpeqb_u128, iemAImpl_pcmpeqw_u128, iemAImpl_pcmpeqd_u128; 1750 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpand_u128, iemAImpl_vpand_u128_fallback; 1751 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpandn_u128, iemAImpl_vpandn_u128_fallback; 1752 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpor_u128, iemAImpl_vpor_u128_fallback; 1753 FNIEMAIMPLMEDIAF3U128 iemAImpl_vpxor_u128, iemAImpl_vpxor_u128_fallback; 1754 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpand_u256, iemAImpl_vpand_u256_fallback; 1755 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpandn_u256, iemAImpl_vpandn_u256_fallback; 1756 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpor_u256, iemAImpl_vpor_u256_fallback; 1757 FNIEMAIMPLMEDIAF3U256 iemAImpl_vpxor_u256, iemAImpl_vpxor_u256_fallback; 1750 1758 /** @} */ 1751 1759 -
trunk/src/VBox/VMM/include/IEMOpHlp.h
r94768 r95441 420 420 /** 421 421 * Done decoding VEX instruction, raise \#UD exception if any lock, rex, repz, 422 * repnz or size prefixes are present, if in real or v8086 mode, or if the 423 * a_fFeature is present in the guest CPU. 424 */ 425 #define IEMOP_HLP_DONE_VEX_DECODING_EX(a_fFeature) \ 426 do \ 427 { \ 428 if (RT_LIKELY( !( pVCpu->iem.s.fPrefixes \ 429 & (IEM_OP_PRF_LOCK | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ | IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REX)) \ 430 && !IEM_IS_REAL_OR_V86_MODE(pVCpu) \ 431 && IEM_GET_GUEST_CPU_FEATURES(pVCpu)->a_fFeature)) \ 432 { /* likely */ } \ 433 else \ 434 return IEMOP_RAISE_INVALID_LOCK_PREFIX(); \ 435 } while (0) 436 437 /** 438 * Done decoding VEX instruction, raise \#UD exception if any lock, rex, repz, 422 439 * repnz or size prefixes are present, or if in real or v8086 mode. 423 440 */ -
trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp
r95421 r95441 130 130 #define IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX() do { } while (0) 131 131 #define IEMOP_HLP_DONE_VEX_DECODING() do { } while (0) 132 #define IEMOP_HLP_DONE_VEX_DECODING_EX(a_fFeature) do { } while (0) 132 133 #define IEMOP_HLP_DONE_VEX_DECODING_L0() do { } while (0) 133 134 #define IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV() do { } while (0) … … 227 228 IEMOPMEDIAF1H1 g_iemAImpl_punpckhdq; 228 229 IEMOPMEDIAF1H1 g_iemAImpl_punpckhqdq; 230 IEMOPMEDIAF2 g_iemAImpl_pand; 231 IEMOPMEDIAF2 g_iemAImpl_pandn; 232 IEMOPMEDIAF2 g_iemAImpl_por; 229 233 IEMOPMEDIAF2 g_iemAImpl_pxor; 230 234 IEMOPMEDIAF2 g_iemAImpl_pcmpeqb;
Note:
See TracChangeset
for help on using the changeset viewer.