VirtualBox

忽略:
時間撮記:
2022-10-14 上午09:29:44 (2 年 以前)
作者:
vboxsync
svn:sync-xref-src-repo-rev:
154126
訊息:

IEM: Added AES-NI instructions.

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f38.cpp.h

    r96454 r97153  
    259259        IEM_MC_REF_XREG_U128(puDst,             IEM_GET_MODRM_REG(pVCpu, bRm));
    260260        IEM_MC_CALL_SSE_AIMPL_2(pfnU128, puDst, puSrc);
     261
     262        IEM_MC_ADVANCE_RIP();
     263        IEM_MC_END();
     264    }
     265    return VINF_SUCCESS;
     266}
     267
     268
     269/**
     270 * Common worker for SSE-style AES-NI instructions of the form:
     271 *      aesxxx  xmm1, xmm2/mem128
     272 *
     273 * Proper alignment of the 128-bit operand is enforced.
     274 * Exceptions type 4. AES-NI cpuid checks.
     275 *
     276 * Unlike iemOpCommonSse41_FullFull_To_Full, the @a pfnU128 worker function
     277 * takes no FXSAVE state, just the operands.
     278 *
     279 * @sa  iemOpCommonSse2_FullFull_To_Full, iemOpCommonSsse3_FullFull_To_Full,
     280 *      iemOpCommonSse41_FullFull_To_Full, iemOpCommonSse42_FullFull_To_Full
     281 */
     282FNIEMOP_DEF_1(iemOpCommonAesNi_FullFull_To_Full, PFNIEMAIMPLMEDIAOPTF2U128, pfnU128)
     283{
     284    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     285    if (IEM_IS_MODRM_REG_MODE(bRm))
     286    {
     287        /*
     288         * Register, register.
     289         */
     290        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     291        IEM_MC_BEGIN(2, 0);
     292        IEM_MC_ARG(PRTUINT128U,                 puDst, 0);
     293        IEM_MC_ARG(PCRTUINT128U,                puSrc, 1);
     294        IEM_MC_MAYBE_RAISE_AESNI_RELATED_XCPT();
     295        IEM_MC_PREPARE_SSE_USAGE();
     296        IEM_MC_REF_XREG_U128(puDst,             IEM_GET_MODRM_REG(pVCpu, bRm));
     297        IEM_MC_REF_XREG_U128_CONST(puSrc,       IEM_GET_MODRM_RM(pVCpu, bRm));
     298        IEM_MC_CALL_VOID_AIMPL_2(pfnU128, puDst, puSrc);
     299        IEM_MC_ADVANCE_RIP();
     300        IEM_MC_END();
     301    }
     302    else
     303    {
     304        /*
     305         * Register, memory.
     306         */
     307        IEM_MC_BEGIN(2, 2);
     308        IEM_MC_ARG(PRTUINT128U,                 puDst,       0);
     309        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     310        IEM_MC_ARG_LOCAL_REF(PCRTUINT128U,      puSrc, uSrc, 1);
     311        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     312
     313        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     314        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     315        IEM_MC_MAYBE_RAISE_AESNI_RELATED_XCPT();
     316        IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     317
     318        IEM_MC_PREPARE_SSE_USAGE();
     319        IEM_MC_REF_XREG_U128(puDst,             IEM_GET_MODRM_REG(pVCpu, bRm));
     320        IEM_MC_CALL_VOID_AIMPL_2(pfnU128, puDst, puSrc);
    261321
    262322        IEM_MC_ADVANCE_RIP();
     
    13901450/*  Opcode 0x66 0x0f 0x38 0xd9 - invalid. */
    13911451/*  Opcode 0x66 0x0f 0x38 0xda - invalid. */
     1452
     1453
    13921454/** Opcode 0x66 0x0f 0x38 0xdb. */
    1393 FNIEMOP_STUB(iemOp_aesimc_Vdq_Wdq);
     1455FNIEMOP_DEF(iemOp_aesimc_Vdq_Wdq)
     1456{
     1457    IEMOP_MNEMONIC2(RM, AESIMC, aesimc, Vdq, Wdq, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     1458    return FNIEMOP_CALL_1(iemOpCommonAesNi_FullFull_To_Full,
     1459                          IEM_SELECT_HOST_OR_FALLBACK(fAesNi, iemAImpl_aesimc_u128, iemAImpl_aesimc_u128_fallback));
     1460}
     1461
     1462
    13941463/** Opcode 0x66 0x0f 0x38 0xdc. */
    1395 FNIEMOP_STUB(iemOp_aesenc_Vdq_Wdq);
     1464FNIEMOP_DEF(iemOp_aesenc_Vdq_Wdq)
     1465{
     1466    IEMOP_MNEMONIC2(RM, AESENC, aesenc, Vdq, Wdq, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     1467    return FNIEMOP_CALL_1(iemOpCommonAesNi_FullFull_To_Full,
     1468                          IEM_SELECT_HOST_OR_FALLBACK(fAesNi, iemAImpl_aesenc_u128, iemAImpl_aesenc_u128_fallback));
     1469}
     1470
     1471
    13961472/** Opcode 0x66 0x0f 0x38 0xdd. */
    1397 FNIEMOP_STUB(iemOp_aesenclast_Vdq_Wdq);
     1473FNIEMOP_DEF(iemOp_aesenclast_Vdq_Wdq)
     1474{
     1475    IEMOP_MNEMONIC2(RM, AESENCLAST, aesenclast, Vdq, Wdq, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     1476    return FNIEMOP_CALL_1(iemOpCommonAesNi_FullFull_To_Full,
     1477                          IEM_SELECT_HOST_OR_FALLBACK(fAesNi, iemAImpl_aesenclast_u128, iemAImpl_aesenclast_u128_fallback));
     1478}
     1479
     1480
    13981481/** Opcode 0x66 0x0f 0x38 0xde. */
    1399 FNIEMOP_STUB(iemOp_aesdec_Vdq_Wdq);
     1482FNIEMOP_DEF(iemOp_aesdec_Vdq_Wdq)
     1483{
     1484    IEMOP_MNEMONIC2(RM, AESDEC, aesdec, Vdq, Wdq, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     1485    return FNIEMOP_CALL_1(iemOpCommonAesNi_FullFull_To_Full,
     1486                          IEM_SELECT_HOST_OR_FALLBACK(fAesNi, iemAImpl_aesdec_u128, iemAImpl_aesdec_u128_fallback));
     1487}
     1488
     1489
    14001490/** Opcode 0x66 0x0f 0x38 0xdf. */
    1401 FNIEMOP_STUB(iemOp_aesdeclast_Vdq_Wdq);
     1491FNIEMOP_DEF(iemOp_aesdeclast_Vdq_Wdq)
     1492{
     1493    IEMOP_MNEMONIC2(RM, AESDECLAST, aesdeclast, Vdq, Wdq, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     1494    return FNIEMOP_CALL_1(iemOpCommonAesNi_FullFull_To_Full,
     1495                          IEM_SELECT_HOST_OR_FALLBACK(fAesNi, iemAImpl_aesdeclast_u128, iemAImpl_aesdeclast_u128_fallback));
     1496}
     1497
    14021498
    14031499/*  Opcode 0x66 0x0f 0x38 0xe0 - invalid. */
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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