- 時間撮記:
- 2022-10-14 上午09:29:44 (2 年 以前)
- svn:sync-xref-src-repo-rev:
- 154126
- 檔案:
-
- 修改 1 筆資料
圖例:
- 未更動
- 新增
- 刪除
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f38.cpp.h
r96454 r97153 259 259 IEM_MC_REF_XREG_U128(puDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 260 260 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 */ 282 FNIEMOP_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); 261 321 262 322 IEM_MC_ADVANCE_RIP(); … … 1390 1450 /* Opcode 0x66 0x0f 0x38 0xd9 - invalid. */ 1391 1451 /* Opcode 0x66 0x0f 0x38 0xda - invalid. */ 1452 1453 1392 1454 /** Opcode 0x66 0x0f 0x38 0xdb. */ 1393 FNIEMOP_STUB(iemOp_aesimc_Vdq_Wdq); 1455 FNIEMOP_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 1394 1463 /** Opcode 0x66 0x0f 0x38 0xdc. */ 1395 FNIEMOP_STUB(iemOp_aesenc_Vdq_Wdq); 1464 FNIEMOP_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 1396 1472 /** Opcode 0x66 0x0f 0x38 0xdd. */ 1397 FNIEMOP_STUB(iemOp_aesenclast_Vdq_Wdq); 1473 FNIEMOP_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 1398 1481 /** Opcode 0x66 0x0f 0x38 0xde. */ 1399 FNIEMOP_STUB(iemOp_aesdec_Vdq_Wdq); 1482 FNIEMOP_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 1400 1490 /** Opcode 0x66 0x0f 0x38 0xdf. */ 1401 FNIEMOP_STUB(iemOp_aesdeclast_Vdq_Wdq); 1491 FNIEMOP_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 1402 1498 1403 1499 /* Opcode 0x66 0x0f 0x38 0xe0 - invalid. */
注意:
瀏覽 TracChangeset
來幫助您使用更動檢視器