Changeset 105306 in vbox for trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap3.cpp.h
- Timestamp:
- Jul 12, 2024 1:20:30 PM (5 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap3.cpp.h
r105302 r105306 483 483 484 484 /** Opcode VEX.66.0F3A 0x00. */ 485 FNIEMOP_STUB(iemOp_vpermq_Vqq_Wqq_Ib); 485 FNIEMOP_DEF(iemOp_vpermq_Vqq_Wqq_Ib) 486 { 487 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 488 if (IEM_IS_MODRM_REG_MODE(bRm)) 489 { 490 /* 491 * Register, register. 492 */ 493 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 494 IEM_MC_BEGIN(IEM_MC_F_NOT_286_OR_OLDER, 0); 495 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx2); 496 IEM_MC_LOCAL(RTUINT256U, uDst); 497 IEM_MC_LOCAL(RTUINT256U, uSrc); 498 IEM_MC_ARG_LOCAL_REF(PRTUINT256U, puDst, uDst, 0); 499 IEM_MC_ARG_LOCAL_REF(PCRTUINT256U, puSrc, uSrc, 1); 500 IEM_MC_ARG_CONST(uint8_t, bImmArg, /*=*/ bImm, 2); 501 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 502 IEM_MC_PREPARE_AVX_USAGE(); 503 IEM_MC_FETCH_YREG_U256(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); 504 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx2, iemAImpl_vpermq_u256, iemAImpl_vpermq_u256_fallback), 505 puDst, puSrc, bImmArg); 506 IEM_MC_STORE_YREG_U256_ZX_VLMAX(IEM_GET_MODRM_REG(pVCpu, bRm), uDst); 507 IEM_MC_ADVANCE_RIP_AND_FINISH(); 508 IEM_MC_END(); 509 } 510 else 511 { 512 /* 513 * Register, memory. 514 */ 515 IEM_MC_BEGIN(IEM_MC_F_NOT_286_OR_OLDER, 0); 516 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 517 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 518 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 519 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx2); 520 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 521 IEM_MC_PREPARE_AVX_USAGE(); 522 523 IEM_MC_LOCAL(RTUINT256U, uSrc); 524 IEM_MC_ARG_LOCAL_REF(PCRTUINT256U, puSrc, uSrc, 1); 525 IEM_MC_FETCH_MEM_U256_NO_AC(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 526 IEM_MC_LOCAL(RTUINT256U, uDst); 527 IEM_MC_ARG_LOCAL_REF(PRTUINT256U, puDst, uDst, 0); 528 IEM_MC_ARG_CONST(uint8_t, bImmArg, /*=*/ bImm, 2); 529 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx2, iemAImpl_vpermq_u256, iemAImpl_vpermq_u256_fallback), 530 puDst, puSrc, bImmArg); 531 IEM_MC_STORE_YREG_U256_ZX_VLMAX(IEM_GET_MODRM_REG(pVCpu, bRm), uDst); 532 IEM_MC_ADVANCE_RIP_AND_FINISH(); 533 IEM_MC_END(); 534 } 535 } 536 537 486 538 /** Opcode VEX.66.0F3A 0x01. */ 487 FNIEMOP_STUB(iemOp_vpermpd_Vqq_Wqq_Ib); 539 FNIEMOP_DEF(iemOp_vpermpd_Vqq_Wqq_Ib) 540 { 541 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 542 if (IEM_IS_MODRM_REG_MODE(bRm)) 543 { 544 /* 545 * Register, register. 546 */ 547 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 548 IEM_MC_BEGIN(IEM_MC_F_NOT_286_OR_OLDER, 0); 549 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx2); 550 IEM_MC_LOCAL(RTUINT256U, uDst); 551 IEM_MC_LOCAL(RTUINT256U, uSrc); 552 IEM_MC_ARG_LOCAL_REF(PRTUINT256U, puDst, uDst, 0); 553 IEM_MC_ARG_LOCAL_REF(PCRTUINT256U, puSrc, uSrc, 1); 554 IEM_MC_ARG_CONST(uint8_t, bImmArg, /*=*/ bImm, 2); 555 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 556 IEM_MC_PREPARE_AVX_USAGE(); 557 IEM_MC_FETCH_YREG_U256(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); 558 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx2, iemAImpl_vpermpd_u256, iemAImpl_vpermpd_u256_fallback), 559 puDst, puSrc, bImmArg); 560 IEM_MC_STORE_YREG_U256_ZX_VLMAX(IEM_GET_MODRM_REG(pVCpu, bRm), uDst); 561 IEM_MC_ADVANCE_RIP_AND_FINISH(); 562 IEM_MC_END(); 563 } 564 else 565 { 566 /* 567 * Register, memory. 568 */ 569 IEM_MC_BEGIN(IEM_MC_F_NOT_286_OR_OLDER, 0); 570 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 571 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 572 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 573 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx2); 574 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 575 IEM_MC_PREPARE_AVX_USAGE(); 576 577 IEM_MC_LOCAL(RTUINT256U, uSrc); 578 IEM_MC_ARG_LOCAL_REF(PCRTUINT256U, puSrc, uSrc, 1); 579 IEM_MC_FETCH_MEM_U256_NO_AC(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 580 IEM_MC_LOCAL(RTUINT256U, uDst); 581 IEM_MC_ARG_LOCAL_REF(PRTUINT256U, puDst, uDst, 0); 582 IEM_MC_ARG_CONST(uint8_t, bImmArg, /*=*/ bImm, 2); 583 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx2, iemAImpl_vpermpd_u256, iemAImpl_vpermpd_u256_fallback), 584 puDst, puSrc, bImmArg); 585 IEM_MC_STORE_YREG_U256_ZX_VLMAX(IEM_GET_MODRM_REG(pVCpu, bRm), uDst); 586 IEM_MC_ADVANCE_RIP_AND_FINISH(); 587 IEM_MC_END(); 588 } 589 } 488 590 489 591
Note:
See TracChangeset
for help on using the changeset viewer.