VirtualBox

Changeset 95441 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Jun 29, 2022 10:40:14 PM (3 years ago)
Author:
vboxsync
Message:

VMM/IEM: [v]andps, [v]andpd, [v]pand, [v]andnps, [v]andnpd, [v]pandn, [v]orps, [v]orpd, and [v]por. bugref:9898

Location:
trunk/src/VBox/VMM
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm

    r95403 r95441  
    35973597%endmacro
    35983598
     3599IEMIMPL_MEDIA_F2 pand
     3600IEMIMPL_MEDIA_F2 pandn
     3601IEMIMPL_MEDIA_F2 por
    35993602IEMIMPL_MEDIA_F2 pxor
    36003603IEMIMPL_MEDIA_F2 pcmpeqb
     
    38333836%endmacro
    38343837
     3838IEMIMPL_MEDIA_F3 vpand
     3839IEMIMPL_MEDIA_F3 vpandn
     3840IEMIMPL_MEDIA_F3 vpor
    38353841IEMIMPL_MEDIA_F3 vpxor
    38363842
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp

    r95403 r95441  
    70717071}
    70727072
     7073#endif /* IEM_WITHOUT_ASSEMBLY */
     7074
     7075
     7076/*
     7077 * PAND / VPAND / PANDPS / VPANDPS / PANDPD / VPANDPD
     7078 */
     7079#ifdef IEM_WITHOUT_ASSEMBLY
     7080
     7081IEM_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
     7088IEM_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
     7097IEM_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
     7106IEM_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
     7122IEM_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
     7129IEM_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
     7138IEM_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
     7147IEM_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
     7163IEM_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
     7170IEM_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
     7179IEM_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
     7188IEM_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
    70737198
    70747199/*
    70757200 * PXOR / VPXOR / PXORPS / VPXORPS / PXORPD / VPXORPD
    70767201 */
     7202#ifdef IEM_WITHOUT_ASSEMBLY
    70777203
    70787204IEM_DECL_IMPL_DEF(void, iemAImpl_pxor_u64,(PCX86FXSTATE pFpuState, uint64_t *puDst, uint64_t const *puSrc))
     
    70907216}
    70917217
    7092 #endif /* IEM_WITHOUT_ASSEMBLY */
     7218#endif
    70937219
    70947220IEM_DECL_IMPL_DEF(void, iemAImpl_vpxor_u128_fallback,(PX86XSAVEAREA pExtState, PRTUINT128U puDst,
     
    71117237}
    71127238
     7239
     7240/*
     7241 *
     7242 */
     7243
    71137244#ifdef IEM_WITHOUT_ASSEMBLY
    71147245
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsInterpretOnly.cpp

    r95403 r95441  
    910910IEM_STATIC const IEMOPMEDIAF1H1 g_iemAImpl_punpckhqdq = { NULL, iemAImpl_punpckhqdq_u128 };
    911911
     912/** Function table for the PAND instruction */
     913IEM_STATIC const IEMOPMEDIAF2 g_iemAImpl_pand         = { iemAImpl_pand_u64,       iemAImpl_pand_u128 };
     914/** Function table for the PANDN instruction */
     915IEM_STATIC const IEMOPMEDIAF2 g_iemAImpl_pandn        = { iemAImpl_pandn_u64,      iemAImpl_pandn_u128 };
     916/** Function table for the POR instruction */
     917IEM_STATIC const IEMOPMEDIAF2 g_iemAImpl_por          = { iemAImpl_por_u64,        iemAImpl_por_u128 };
    912918/** Function table for the PXOR instruction */
    913919IEM_STATIC const IEMOPMEDIAF2 g_iemAImpl_pxor         = { iemAImpl_pxor_u64,       iemAImpl_pxor_u128 };
     
    921927# ifndef IEM_WITHOUT_ASSEMBLY
    922928/** Function table for the VPXOR instruction */
     929IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpand          = { iemAImpl_vpand_u128,   iemAImpl_vpand_u256 };
     930/** Function table for the VPXORN instruction */
     931IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpandn         = { iemAImpl_vpandn_u128,  iemAImpl_vpandn_u256 };
     932/** Function table for the VPOR instruction */
     933IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpor           = { iemAImpl_vpor_u128,    iemAImpl_vpor_u256 };
     934/** Function table for the VPXOR instruction */
    923935IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpxor          = { iemAImpl_vpxor_u128,   iemAImpl_vpxor_u256 };
    924936# endif
     937/** Function table for the VPAND instruction, software fallback. */
     938IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpand_fallback = { iemAImpl_vpand_u128_fallback,  iemAImpl_vpand_u256_fallback };
     939/** Function table for the VPANDN instruction, software fallback. */
     940IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpandn_fallback= { iemAImpl_vpandn_u128_fallback, iemAImpl_vpandn_u256_fallback };
     941/** Function table for the VPOR instruction, software fallback. */
     942IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpor_fallback  = { iemAImpl_vpor_u128_fallback,   iemAImpl_vpor_u256_fallback };
    925943/** 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 };
     944IEM_STATIC const IEMOPMEDIAF3 g_iemAImpl_vpxor_fallback = { iemAImpl_vpxor_u128_fallback,  iemAImpl_vpxor_u256_fallback };
    927945
    928946#endif /* !TST_IEM_CHECK_MC */
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r95403 r95441  
    30283028/*  Opcode 0xf2 0x0f 0x53 - invalid */
    30293029
     3030
    30303031/** Opcode      0x0f 0x54 - andps Vps, Wps */
    3031 FNIEMOP_STUB(iemOp_andps_Vps_Wps);
     3032FNIEMOP_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
    30323039/** Opcode 0x66 0x0f 0x54 - andpd Vpd, Wpd */
    3033 FNIEMOP_STUB(iemOp_andpd_Vpd_Wpd);
     3040FNIEMOP_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
    30343047/*  Opcode 0xf3 0x0f 0x54 - invalid */
    30353048/*  Opcode 0xf2 0x0f 0x54 - invalid */
    30363049
     3050
    30373051/** Opcode      0x0f 0x55 - andnps Vps, Wps */
    3038 FNIEMOP_STUB(iemOp_andnps_Vps_Wps);
     3052FNIEMOP_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
    30393059/** Opcode 0x66 0x0f 0x55 - andnpd Vpd, Wpd */
    3040 FNIEMOP_STUB(iemOp_andnpd_Vpd_Wpd);
     3060FNIEMOP_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
    30413067/*  Opcode 0xf3 0x0f 0x55 - invalid */
    30423068/*  Opcode 0xf2 0x0f 0x55 - invalid */
    30433069
     3070
    30443071/** Opcode      0x0f 0x56 - orps Vps, Wps */
    3045 FNIEMOP_STUB(iemOp_orps_Vps_Wps);
     3072FNIEMOP_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
    30463079/** Opcode 0x66 0x0f 0x56 - orpd Vpd, Wpd */
    3047 FNIEMOP_STUB(iemOp_orpd_Vpd_Wpd);
     3080FNIEMOP_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
    30483087/*  Opcode 0xf3 0x0f 0x56 - invalid */
    30493088/*  Opcode 0xf2 0x0f 0x56 - invalid */
     
    93849423
    93859424/** 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);
     9425FNIEMOP_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 */
     9433FNIEMOP_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
    93899440/*  Opcode 0xf3 0x0f 0xdb - invalid */
    93909441/*  Opcode 0xf2 0x0f 0xdb - invalid */
     
    94119462/*  Opcode 0xf2 0x0f 0xde - invalid */
    94129463
     9464
    94139465/** Opcode      0x0f 0xdf - pandn Pq, Qq */
    9414 FNIEMOP_STUB(iemOp_pandn_Pq_Qq);
     9466FNIEMOP_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
    94159473/** Opcode 0x66 0x0f 0xdf - pandn Vx, Wx */
    9416 FNIEMOP_STUB(iemOp_pandn_Vx_Wx);
     9474FNIEMOP_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
    94179481/*  Opcode 0xf3 0x0f 0xdf - invalid */
    94189482/*  Opcode 0xf2 0x0f 0xdf - invalid */
     
    95889652/*  Opcode 0xf2 0x0f 0xea - invalid */
    95899653
     9654
    95909655/** Opcode      0x0f 0xeb - por Pq, Qq */
    9591 FNIEMOP_STUB(iemOp_por_Pq_Qq);
     9656FNIEMOP_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
    95929663/** Opcode 0x66 0x0f 0xeb - por Vx, W */
    9593 FNIEMOP_STUB(iemOp_por_Vx_W);
     9664FNIEMOP_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
    95949671/*  Opcode 0xf3 0x0f 0xeb - invalid */
    95959672/*  Opcode 0xf2 0x0f 0xeb - invalid */
     
    96209697FNIEMOP_DEF(iemOp_pxor_Pq_Qq)
    96219698{
    9622     IEMOP_MNEMONIC(pxor, "pxor");
     9699    IEMOP_MNEMONIC2(RM, PXOR, pxor, Pq, Qq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    96239700    return FNIEMOP_CALL_1(iemOpCommonMmx_FullFull_To_Full, &g_iemAImpl_pxor);
    96249701}
     
    96289705FNIEMOP_DEF(iemOp_pxor_Vx_Wx)
    96299706{
    9630     IEMOP_MNEMONIC(pxor_Vx_Wx, "pxor");
     9707    IEMOP_MNEMONIC2(RM, PXOR, pxor, Vx, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES);
    96319708    return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, &g_iemAImpl_pxor);
    96329709}
     9710
    96339711
    96349712/*  Opcode 0xf3 0x0f 0xef - invalid */
     
    999010068    /* 0xd9 */  iemOp_psubusw_Pq_Qq,        iemOp_psubusw_Vx_Wx,        iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    999110069    /* 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,
    999310071    /* 0xdc */  iemOp_paddusb_Pq_Qq,        iemOp_paddusb_Vx_Wx,        iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    999410072    /* 0xdd */  iemOp_paddusw_Pq_Qq,        iemOp_paddusw_Vx_Wx,        iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h

    r95403 r95441  
    2929 *     - vpxxx    ymm0, ymm1, ymm2/mem256
    3030 *
    31  * Exceptions type 4. AVX2 cpuid checks.
     31 * Exceptions type 4. AVX cpuid check for 128-bit operation, AVX2 for 256-bit.
    3232 */
    33 FNIEMOP_DEF_1(iemOpCommonAvx2_Vx_Hx_Wx, PCIEMOPMEDIAF3, pImpl)
     33FNIEMOP_DEF_1(iemOpCommonAvxAvx2_Vx_Hx_Wx, PCIEMOPMEDIAF3, pImpl)
    3434{
    3535    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     
    3939         * Register, register.
    4040         */
    41         IEMOP_HLP_DONE_VEX_DECODING();
    4241        if (pVCpu->iem.s.uVexLength)
    4342        {
     43            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2);
    4444            IEM_MC_BEGIN(4, 3);
    4545            IEM_MC_LOCAL(RTUINT256U,            uDst);
     
    6161        else
    6262        {
     63            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    6364            IEM_MC_BEGIN(4, 0);
    6465            IEM_MC_IMPLICIT_AVX_AIMPL_ARGS();
     
    9596
    9697            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    97             IEMOP_HLP_DONE_VEX_DECODING();
     98            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx2);
    9899            IEM_MC_MAYBE_RAISE_AVX2_RELATED_XCPT();
    99100            IEM_MC_PREPARE_AVX_USAGE();
     
    118119
    119120            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    120             IEMOP_HLP_DONE_VEX_DECODING();
     121            IEMOP_HLP_DONE_VEX_DECODING_EX(fAvx);
    121122            IEM_MC_MAYBE_RAISE_AVX2_RELATED_XCPT();
    122123            IEM_MC_PREPARE_AVX_USAGE();
     
    17981799/*  Opcode VEX.F2.0F 0x53 - invalid */
    17991800
     1801
    18001802/** Opcode VEX.0F 0x54 - vandps Vps, Hps, Wps */
    1801 FNIEMOP_STUB(iemOp_vandps_Vps_Hps_Wps);
     1803FNIEMOP_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
    18021811/** Opcode VEX.66.0F 0x54 - vandpd Vpd, Hpd, Wpd */
    1803 FNIEMOP_STUB(iemOp_vandpd_Vpd_Hpd_Wpd);
     1812FNIEMOP_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
    18041820/*  Opcode VEX.F3.0F 0x54 - invalid */
    18051821/*  Opcode VEX.F2.0F 0x54 - invalid */
    18061822
     1823
    18071824/** Opcode VEX.0F 0x55 - vandnps Vps, Hps, Wps */
    1808 FNIEMOP_STUB(iemOp_vandnps_Vps_Hps_Wps);
     1825FNIEMOP_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
    18091833/** Opcode VEX.66.0F 0x55 - vandnpd Vpd, Hpd, Wpd */
    1810 FNIEMOP_STUB(iemOp_vandnpd_Vpd_Hpd_Wpd);
     1834FNIEMOP_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
    18111842/*  Opcode VEX.F3.0F 0x55 - invalid */
    18121843/*  Opcode VEX.F2.0F 0x55 - invalid */
    18131844
    18141845/** Opcode VEX.0F 0x56 - vorps Vps, Hps, Wps */
    1815 FNIEMOP_STUB(iemOp_vorps_Vps_Hps_Wps);
     1846FNIEMOP_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
    18161854/** Opcode VEX.66.0F 0x56 - vorpd Vpd, Hpd, Wpd */
    1817 FNIEMOP_STUB(iemOp_vorpd_Vpd_Hpd_Wpd);
     1855FNIEMOP_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
    18181863/*  Opcode VEX.F3.0F 0x56 - invalid */
    18191864/*  Opcode VEX.F2.0F 0x56 - invalid */
     
    18241869{
    18251870    IEMOP_MNEMONIC3(VEX_RVM, VXORPS, vxorps, Vps, Hps, Wps, DISOPTYPE_HARMLESS, 0);
    1826     return FNIEMOP_CALL_1(iemOpCommonAvx2_Vx_Hx_Wx,
     1871    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx,
    18271872                          IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpxor, &g_iemAImpl_vpxor_fallback));
    18281873}
     
    18331878{
    18341879    IEMOP_MNEMONIC3(VEX_RVM, VXORPD, vxorpd, Vpd, Hpd, Wpd, DISOPTYPE_HARMLESS, 0);
    1835     return FNIEMOP_CALL_1(iemOpCommonAvx2_Vx_Hx_Wx,
     1880    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx,
    18361881                          IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpxor, &g_iemAImpl_vpxor_fallback));
    18371882}
     
    35403585
    35413586/*  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 */
     3590FNIEMOP_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
    35443598/*  Opcode VEX.F3.0F 0xdb - invalid */
    35453599/*  Opcode VEX.F2.0F 0xdb - invalid */
     
    35643618
    35653619/*  Opcode VEX.0F 0xdf - invalid */
     3620
     3621
    35663622/** Opcode VEX.66.0F 0xdf - vpandn Vx, Hx, Wx */
    3567 FNIEMOP_STUB(iemOp_vpandn_Vx_Hx_Wx);
     3623FNIEMOP_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
    35683631/*  Opcode VEX.F3.0F 0xdf - invalid */
    35693632/*  Opcode VEX.F2.0F 0xdf - invalid */
     
    37113774
    37123775/*  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 */
     3779FNIEMOP_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
    37153788/*  Opcode VEX.F3.0F 0xeb - invalid */
    37163789/*  Opcode VEX.F2.0F 0xeb - invalid */
     
    37413814{
    37423815    IEMOP_MNEMONIC3(VEX_RVM, VPXOR, vpxor, Vx, Hx, Wx, DISOPTYPE_HARMLESS, 0);
    3743     return FNIEMOP_CALL_1(iemOpCommonAvx2_Vx_Hx_Wx,
     3816    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Hx_Wx,
    37443817                          IEM_SELECT_HOST_OR_FALLBACK(fAvx2, &g_iemAImpl_vpxor, &g_iemAImpl_vpxor_fallback));
    37453818}
     
    40844157    /* 0xd9 */  iemOp_InvalidNeedRM,        iemOp_vpsubusw_Vx_Hx_Wx,    iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    40854158    /* 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,
    40874160    /* 0xdc */  iemOp_InvalidNeedRM,        iemOp_vpaddusb_Vx_Hx_Wx,    iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    40884161    /* 0xdd */  iemOp_InvalidNeedRM,        iemOp_vpaddusw_Vx_Hx_Wx,    iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
     
    41014174    /* 0xe9 */  iemOp_InvalidNeedRM,        iemOp_vpsubsw_Vx_Hx_Wx,     iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    41024175    /* 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,
    41044177    /* 0xec */  iemOp_InvalidNeedRM,        iemOp_vpaddsb_Vx_Hx_Wx,     iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
    41054178    /* 0xed */  iemOp_InvalidNeedRM,        iemOp_vpaddsw_Vx_Hx_Wx,     iemOp_InvalidNeedRM,        iemOp_InvalidNeedRM,
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r95410 r95441  
    17441744typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLMEDIAF3U256,(PX86XSAVEAREA pExtState, PRTUINT256U puDst, PCRTUINT256U puSrc1, PCRTUINT256U puSrc2));
    17451745typedef 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;
     1746FNIEMAIMPLMEDIAF2U64  iemAImpl_pand_u64, iemAImpl_pandn_u64, iemAImpl_por_u64, iemAImpl_pxor_u64;
     1747FNIEMAIMPLMEDIAF2U64  iemAImpl_pcmpeqb_u64,  iemAImpl_pcmpeqw_u64,  iemAImpl_pcmpeqd_u64;
     1748FNIEMAIMPLMEDIAF2U128 iemAImpl_pand_u128, iemAImpl_pandn_u128, iemAImpl_por_u128, iemAImpl_pxor_u128;
     1749FNIEMAIMPLMEDIAF2U128 iemAImpl_pcmpeqb_u128, iemAImpl_pcmpeqw_u128, iemAImpl_pcmpeqd_u128;
     1750FNIEMAIMPLMEDIAF3U128 iemAImpl_vpand_u128,  iemAImpl_vpand_u128_fallback;
     1751FNIEMAIMPLMEDIAF3U128 iemAImpl_vpandn_u128, iemAImpl_vpandn_u128_fallback;
     1752FNIEMAIMPLMEDIAF3U128 iemAImpl_vpor_u128,   iemAImpl_vpor_u128_fallback;
     1753FNIEMAIMPLMEDIAF3U128 iemAImpl_vpxor_u128,  iemAImpl_vpxor_u128_fallback;
     1754FNIEMAIMPLMEDIAF3U256 iemAImpl_vpand_u256,  iemAImpl_vpand_u256_fallback;
     1755FNIEMAIMPLMEDIAF3U256 iemAImpl_vpandn_u256, iemAImpl_vpandn_u256_fallback;
     1756FNIEMAIMPLMEDIAF3U256 iemAImpl_vpor_u256,   iemAImpl_vpor_u256_fallback;
     1757FNIEMAIMPLMEDIAF3U256 iemAImpl_vpxor_u256,  iemAImpl_vpxor_u256_fallback;
    17501758/** @} */
    17511759
  • trunk/src/VBox/VMM/include/IEMOpHlp.h

    r94768 r95441  
    420420/**
    421421 * 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,
    422439 * repnz or size prefixes are present, or if in real or v8086 mode.
    423440 */
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r95421 r95441  
    130130#define IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX()            do { } while (0)
    131131#define IEMOP_HLP_DONE_VEX_DECODING()                       do { } while (0)
     132#define IEMOP_HLP_DONE_VEX_DECODING_EX(a_fFeature)          do { } while (0)
    132133#define IEMOP_HLP_DONE_VEX_DECODING_L0()                    do { } while (0)
    133134#define IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV()               do { } while (0)
     
    227228IEMOPMEDIAF1H1 g_iemAImpl_punpckhdq;
    228229IEMOPMEDIAF1H1 g_iemAImpl_punpckhqdq;
     230IEMOPMEDIAF2 g_iemAImpl_pand;
     231IEMOPMEDIAF2 g_iemAImpl_pandn;
     232IEMOPMEDIAF2 g_iemAImpl_por;
    229233IEMOPMEDIAF2 g_iemAImpl_pxor;
    230234IEMOPMEDIAF2 g_iemAImpl_pcmpeqb;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette