Changeset 103909 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Mar 19, 2024 9:07:55 AM (9 months ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
r103735 r103909 5901 5901 5902 5902 ;; 5903 ; pextrw instruction.5904 ;5905 ; @param A0 Pointer to the 16bit output operand (output).5906 ; @param A1 Pointer to the media register size operand (input).5907 ; @param A2 The 8-bit immediate5908 ;5909 BEGINPROC_FASTCALL iemAImpl_pextrw_u64, 165910 PROLOGUE_3_ARGS5911 IEMIMPL_SSE_PROLOGUE5912 5913 movzx A2, A2_8 ; must clear top bits5914 movq mm0, A15915 lea T1, [.imm0 xWrtRIP]5916 %ifdef RT_WITH_IBT_BRANCH_PROTECTION_WITHOUT_NOTRACK5917 lea T0, [A2 + A2*8] ; sizeof(endbrxx+pextrw+ret) == 9: A2 * 95918 %else5919 lea T0, [A2 + A2*4] ; sizeof(pextrw+ret) == 5: A2 * 55920 %endif5921 lea T1, [T1 + T0]5922 IBT_NOTRACK5923 call T15924 mov word [A0], T0_165925 5926 IEMIMPL_SSE_EPILOGUE5927 EPILOGUE_3_ARGS5928 %assign bImm 05929 %rep 2565930 .imm %+ bImm:5931 IBT_ENDBRxx_WITHOUT_NOTRACK5932 pextrw T0_32, mm0, bImm5933 ret5934 %assign bImm bImm + 15935 %endrep5936 .immEnd: IEMCHECK_256_JUMP_ARRAY_SIZE (.immEnd - .imm0), 0x5005937 ENDPROC iemAImpl_pextrw_u645938 5939 BEGINPROC_FASTCALL iemAImpl_pextrw_u128, 165940 PROLOGUE_3_ARGS5941 IEMIMPL_SSE_PROLOGUE5942 5943 movzx A2, A2_8 ; must clear top bits5944 movdqu xmm0, [A1]5945 lea T1, [.imm0 xWrtRIP]5946 %ifdef RT_WITH_IBT_BRANCH_PROTECTION_WITHOUT_NOTRACK5947 lea T0, [A2 + A2*4] ; sizeof(endbrxx+pextrw+ret) == 10: A2 * 10 = (A2 * 5) * 25948 %else5949 lea T0, [A2 + A2*2] ; sizeof(pextrw+ret) == 6: A2 * 6 = (A2 * 3) * 25950 %endif5951 lea T1, [T1 + T0*2]5952 IBT_NOTRACK5953 call T15954 mov word [A0], T0_165955 5956 IEMIMPL_SSE_EPILOGUE5957 EPILOGUE_3_ARGS5958 %assign bImm 05959 %rep 2565960 .imm %+ bImm:5961 IBT_ENDBRxx_WITHOUT_NOTRACK5962 pextrw T0_32, xmm0, bImm5963 ret5964 %assign bImm bImm + 15965 %endrep5966 .immEnd: IEMCHECK_256_JUMP_ARRAY_SIZE (.immEnd - .imm0), 0x6005967 ENDPROC iemAImpl_pextrw_u1285968 5969 ;;5970 ; vpextrw instruction.5971 ;5972 ; @param A0 Pointer to the 16bit output operand (output).5973 ; @param A1 Pointer to the source media register size operand (input).5974 ; @param A2 The 8-bit immediate5975 ;5976 BEGINPROC_FASTCALL iemAImpl_vpextrw_u128, 165977 PROLOGUE_3_ARGS5978 IEMIMPL_SSE_PROLOGUE5979 5980 movzx A2, A2_8 ; must clear top bits5981 movdqu xmm0, [A1]5982 lea T1, [.imm0 xWrtRIP]5983 %ifdef RT_WITH_IBT_BRANCH_PROTECTION_WITHOUT_NOTRACK5984 lea T0, [A2 + A2*4] ; sizeof(endbrxx+vpextrw+ret) == 10: A2 * 10 = (A2 * 5) * 25985 %else5986 lea T0, [A2 + A2*2] ; sizeof(vpextrw+ret) == 6: A2 * 6 = (A2 * 3) * 25987 %endif5988 lea T1, [T1 + T0*2]5989 IBT_NOTRACK5990 call T15991 mov word [A0], T0_165992 5993 IEMIMPL_SSE_EPILOGUE5994 EPILOGUE_3_ARGS5995 %assign bImm 05996 %rep 2565997 .imm %+ bImm:5998 IBT_ENDBRxx_WITHOUT_NOTRACK5999 vpextrw T0_32, xmm0, bImm6000 ret6001 %assign bImm bImm + 16002 %endrep6003 .immEnd: IEMCHECK_256_JUMP_ARRAY_SIZE (.immEnd - .imm0), 0x6006004 ENDPROC iemAImpl_vpextrw_u1286005 6006 6007 ;;6008 5903 ; movmskp{s,d} SSE instruction template 6009 5904 ; -
trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp
r103745 r103909 18291 18291 18292 18292 /** 18293 * [V]PEXTRW18294 */18295 #ifdef IEM_WITHOUT_ASSEMBLY18296 IEM_DECL_IMPL_DEF(void, iemAImpl_pextrw_u64,(uint16_t *pu16Dst, uint64_t u64Src, uint8_t bEvil))18297 {18298 *pu16Dst = (uint16_t)(u64Src >> ((bEvil & 0x3) * 16));18299 }18300 18301 18302 IEM_DECL_IMPL_DEF(void, iemAImpl_pextrw_u128,(uint16_t *pu16Dst, PCRTUINT128U puSrc, uint8_t bEvil))18303 {18304 *pu16Dst = puSrc->au16[bEvil & 0x7];18305 }18306 18307 #endif18308 18309 IEM_DECL_IMPL_DEF(void, iemAImpl_vpextrw_u128_fallback,(uint16_t *pu16Dst, PCRTUINT128U puSrc, uint8_t bEvil))18310 {18311 *pu16Dst = puSrc->au16[bEvil & 0x7];18312 }18313 18314 18315 /**18316 18293 * [V]MOVMSKPS 18317 18294 */ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py
r103900 r103909 3096 3096 'IEM_MC_FETCH_MEM16_U8': (McBlock.parseMcGeneric, True, True, False, ), 3097 3097 'IEM_MC_FETCH_MEM32_U8': (McBlock.parseMcGeneric, True, True, False, ), 3098 'IEM_MC_FETCH_MREG_U16': (McBlock.parseMcGeneric, False, False, False, ), 3098 3099 'IEM_MC_FETCH_MREG_U32': (McBlock.parseMcGeneric, False, False, False, ), 3099 3100 'IEM_MC_FETCH_MREG_U64': (McBlock.parseMcGeneric, False, False, False, ), -
trunk/src/VBox/VMM/VMMAll/IEMAllInstTwoByte0f.cpp.h
r103778 r103909 7505 7505 IEM_MC_FPU_TO_MMX_MODE(); 7506 7506 7507 IEM_MC_FETCH_MREG_U32(u32Tmp, IEM_GET_MODRM_REG_8(bRm) );7507 IEM_MC_FETCH_MREG_U32(u32Tmp, IEM_GET_MODRM_REG_8(bRm), 0); 7508 7508 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_RM(pVCpu, bRm), u32Tmp); 7509 7509 … … 7523 7523 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 7524 7524 7525 IEM_MC_FETCH_MREG_U32(u32Tmp, IEM_GET_MODRM_REG_8(bRm) );7525 IEM_MC_FETCH_MREG_U32(u32Tmp, IEM_GET_MODRM_REG_8(bRm), 0); 7526 7526 IEM_MC_STORE_MEM_U32(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u32Tmp); 7527 7527 IEM_MC_FPU_TO_MMX_MODE(); … … 12548 12548 * Greg32, MMX, imm8. 12549 12549 */ 12550 IEM_MC_BEGIN( 3, 1, IEM_MC_F_NOT_286_OR_OLDER, 0);12550 IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER, 0); 12551 12551 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 12552 12552 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX_2_OR(fSse, fAmdMmxExts); 12553 IEM_MC_LOCAL(uint16_t, u16Dst); 12554 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Dst, u16Dst, 0); 12555 IEM_MC_ARG(uint64_t, u64Src, 1); 12556 IEM_MC_ARG_CONST(uint8_t, bImmArg, /*=*/ bImm, 2); 12553 IEM_MC_LOCAL(uint16_t, uValue); 12557 12554 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT(); 12558 12555 IEM_MC_PREPARE_FPU_USAGE(); 12559 12556 IEM_MC_FPU_TO_MMX_MODE(); 12560 IEM_MC_FETCH_MREG_U64(u64Src, IEM_GET_MODRM_RM_8(bRm)); 12561 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_pextrw_u64, pu16Dst, u64Src, bImmArg); 12562 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), u16Dst); 12557 IEM_MC_FETCH_MREG_U16(uValue, IEM_GET_MODRM_RM_8(bRm), bImm & 3); 12558 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), uValue); 12563 12559 IEM_MC_ADVANCE_RIP_AND_FINISH(); 12564 12560 IEM_MC_END(); … … 12580 12576 * Greg32, XMM, imm8. 12581 12577 */ 12582 IEM_MC_BEGIN( 3, 1, IEM_MC_F_NOT_286_OR_OLDER, 0);12578 IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER, 0); 12583 12579 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 12584 12580 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2); 12585 IEM_MC_LOCAL(uint16_t, u16Dst); 12586 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Dst, u16Dst, 0); 12587 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); 12588 IEM_MC_ARG_CONST(uint8_t, bImmArg, /*=*/ bImm, 2); 12581 IEM_MC_LOCAL(uint16_t, uValue); 12589 12582 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 12590 12583 IEM_MC_PREPARE_SSE_USAGE(); 12591 IEM_MC_REF_XREG_U128_CONST(puSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); 12592 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_pextrw_u128, pu16Dst, puSrc, bImmArg); 12593 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), u16Dst); 12584 IEM_MC_FETCH_XREG_U16(uValue, IEM_GET_MODRM_RM(pVCpu, bRm), bImm & 7); 12585 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), uValue); 12594 12586 IEM_MC_ADVANCE_RIP_AND_FINISH(); 12595 12587 IEM_MC_END(); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap1.cpp.h
r103787 r103909 4644 4644 /* Opcode VEX.F2.0F 0xc4 - invalid */ 4645 4645 4646 /* Opcode VEX.0F 0xc5 - inv lid */4646 /* Opcode VEX.0F 0xc5 - invalid */ 4647 4647 4648 4648 … … 4655 4655 { 4656 4656 /* 4657 * Register, register.4657 * greg32, XMM, imm8. 4658 4658 */ 4659 4659 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 4660 IEM_MC_BEGIN( 3, 1, IEM_MC_F_NOT_286_OR_OLDER, 0);4660 IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER, 0); 4661 4661 IEMOP_HLP_DONE_VEX_DECODING_L0_EX(fAvx); 4662 IEM_MC_LOCAL(uint16_t, u16Dst); 4663 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Dst, u16Dst, 0); 4664 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); 4665 IEM_MC_ARG_CONST(uint8_t, bImmArg, /*=*/ bImm, 2); 4662 IEM_MC_LOCAL(uint16_t, uValue); 4666 4663 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 4667 4664 IEM_MC_PREPARE_AVX_USAGE(); 4668 IEM_MC_REF_XREG_U128_CONST(puSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); 4669 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vpextrw_u128, iemAImpl_vpextrw_u128_fallback), 4670 pu16Dst, puSrc, bImmArg); 4671 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), u16Dst); 4665 IEM_MC_FETCH_XREG_U16(uValue, IEM_GET_MODRM_RM(pVCpu, bRm), bImm & 7); 4666 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), uValue); 4672 4667 IEM_MC_ADVANCE_RIP_AND_FINISH(); 4673 4668 IEM_MC_END(); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap3.cpp.h
r103900 r103909 537 537 /* Opcode VEX.66.0F3A 0x12 - invalid */ 538 538 /* Opcode VEX.66.0F3A 0x13 - invalid */ 539 /** Opcode VEX.66.0F3A 0x14. */ 540 FNIEMOP_STUB(iemOp_vpextrb_RdMb_Vdq_Ib); 539 540 541 /** Opcode VEX.66.0F3A 0x14 - vpextrb Eb, Vdq, Ib */ 542 FNIEMOP_DEF(iemOp_vpextrb_Eb_Vdq_Ib) 543 { 544 IEMOP_MNEMONIC3(VEX_MRI, VPEXTRB, vpextrb, Eb, Vdq, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_VEX_L_ZERO | IEMOPHINT_VEX_V_ZERO); /** @todo */ 545 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 546 if (IEM_IS_MODRM_REG_MODE(bRm)) 547 { 548 /* 549 * greg32, XMM, imm8. 550 */ 551 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 552 IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER, 0); 553 IEM_MC_LOCAL(uint8_t, uValue); 554 555 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 556 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 557 IEM_MC_PREPARE_AVX_USAGE(); 558 559 IEM_MC_FETCH_XREG_U8(uValue, IEM_GET_MODRM_REG(pVCpu, bRm), bImm & 15 /*a_iByte*/); 560 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_RM(pVCpu, bRm), uValue); 561 IEM_MC_ADVANCE_RIP_AND_FINISH(); 562 IEM_MC_END(); 563 } 564 else 565 { 566 /* 567 * [mem8], XMM, imm8. 568 */ 569 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 570 IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER, 0); 571 IEM_MC_LOCAL(uint8_t, uValue); 572 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 573 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 574 575 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 576 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 577 IEM_MC_PREPARE_AVX_USAGE(); 578 579 IEM_MC_FETCH_XREG_U8(uValue, IEM_GET_MODRM_REG(pVCpu, bRm), bImm & 15 /*a_iByte*/); 580 IEM_MC_STORE_MEM_U8(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uValue); 581 IEM_MC_ADVANCE_RIP_AND_FINISH(); 582 IEM_MC_END(); 583 } 584 } 541 585 542 586 … … 549 593 { 550 594 /* 551 * Register, register.595 * greg32, XMM, imm8. 552 596 */ 553 597 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 554 IEM_MC_BEGIN(3, 1, IEM_MC_F_NOT_286_OR_OLDER, 0); 598 IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER, 0); 599 IEM_MC_LOCAL(uint16_t, uValue); 600 555 601 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 556 602 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 557 603 IEM_MC_PREPARE_AVX_USAGE(); 558 IEM_MC_LOCAL(uint16_t, u16Dst); 559 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Dst, u16Dst, 0); 560 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); 561 IEM_MC_REF_XREG_U128_CONST(puSrc, IEM_GET_MODRM_REG(pVCpu, bRm)); 562 IEM_MC_ARG_CONST(uint8_t, bImmArg, /*=*/ bImm, 2); 563 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vpextrw_u128, iemAImpl_vpextrw_u128_fallback), 564 pu16Dst, puSrc, bImmArg); 565 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_RM(pVCpu, bRm), u16Dst); 604 605 IEM_MC_FETCH_XREG_U16(uValue, IEM_GET_MODRM_REG(pVCpu, bRm), bImm & 7); 606 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_RM(pVCpu, bRm), uValue); 566 607 IEM_MC_ADVANCE_RIP_AND_FINISH(); 567 608 IEM_MC_END(); … … 570 611 { 571 612 /* 572 * Memory, register.613 * [mem16], XMM, imm8. 573 614 */ 574 615 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 575 IEM_MC_BEGIN(3, 2, IEM_MC_F_NOT_286_OR_OLDER, 0); 576 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 616 IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER, 0); 617 IEM_MC_LOCAL(uint16_t, uValue); 618 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 577 619 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 578 620 … … 581 623 IEM_MC_PREPARE_AVX_USAGE(); 582 624 583 IEM_MC_LOCAL(uint16_t, u16Dst); 584 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Dst, u16Dst, 0); 585 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); 586 IEM_MC_REF_XREG_U128_CONST(puSrc, IEM_GET_MODRM_REG(pVCpu, bRm)); 587 IEM_MC_ARG_CONST(uint8_t, bImmArg, /*=*/ bImm, 2); 588 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vpextrw_u128, iemAImpl_vpextrw_u128_fallback), 589 pu16Dst, puSrc, bImmArg); 590 IEM_MC_STORE_MEM_U16(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u16Dst); 625 IEM_MC_FETCH_XREG_U16(uValue, IEM_GET_MODRM_REG(pVCpu, bRm), bImm & 7); 626 IEM_MC_STORE_MEM_U16(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uValue); 591 627 IEM_MC_ADVANCE_RIP_AND_FINISH(); 592 628 IEM_MC_END(); … … 595 631 596 632 597 /** Opcode VEX.66.0F3A 0x16. */ 598 FNIEMOP_STUB(iemOp_vpextrd_q_RdMw_Vdq_Ib); 633 /** Opcode VEX.66.0F3A 0x16 - vpextrd / vpextrq Eq / Ey, Vdq, Ib */ 634 FNIEMOP_DEF(iemOp_vpextrd_q_Ey_Vdq_Ib) 635 { 636 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 637 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) 638 { 639 IEMOP_MNEMONIC3(VEX_MRI, VPEXTRQ, vpextrq, Eq_WO, Vdq, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_ZERO); /** @todo */ 640 if (IEM_IS_MODRM_REG_MODE(bRm)) 641 { 642 /* 643 * greg64, XMM, imm8. 644 */ 645 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 646 IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER, 0); 647 IEM_MC_LOCAL(uint64_t, uValue); 648 649 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 650 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 651 IEM_MC_PREPARE_AVX_USAGE(); 652 653 IEM_MC_FETCH_XREG_U64(uValue, IEM_GET_MODRM_REG(pVCpu, bRm), bImm & 1); 654 IEM_MC_STORE_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm), uValue); 655 IEM_MC_ADVANCE_RIP_AND_FINISH(); 656 IEM_MC_END(); 657 } 658 else 659 { 660 /* 661 * [mem64], XMM, imm8. 662 */ 663 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 664 IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER, 0); 665 IEM_MC_LOCAL(uint64_t, uValue); 666 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 667 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1); 668 669 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 670 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 671 IEM_MC_PREPARE_AVX_USAGE(); 672 673 IEM_MC_FETCH_XREG_U64(uValue, IEM_GET_MODRM_REG(pVCpu, bRm), bImm & 1); 674 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uValue); 675 IEM_MC_ADVANCE_RIP_AND_FINISH(); 676 IEM_MC_END(); 677 } 678 } 679 else 680 { 681 /** 682 * @opdone 683 */ 684 IEMOP_MNEMONIC3(VEX_MRI, VPEXTRD, vpextrd, Ey, Vdq, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_ZERO); /** @todo */ 685 if (IEM_IS_MODRM_REG_MODE(bRm)) 686 { 687 /* 688 * greg32, XMM, imm8. 689 */ 690 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 691 IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER, 0); 692 IEM_MC_LOCAL(uint32_t, uValue); 693 694 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 695 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 696 IEM_MC_PREPARE_AVX_USAGE(); 697 698 IEM_MC_FETCH_XREG_U32(uValue, IEM_GET_MODRM_REG(pVCpu, bRm), bImm & 3); 699 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_RM(pVCpu, bRm), uValue); 700 IEM_MC_ADVANCE_RIP_AND_FINISH(); 701 IEM_MC_END(); 702 } 703 else 704 { 705 /* 706 * [mem32], XMM, imm8. 707 */ 708 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 709 IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER, 0); 710 IEM_MC_LOCAL(uint32_t, uValue); 711 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 712 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1); 713 714 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 715 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 716 IEM_MC_PREPARE_AVX_USAGE(); 717 718 IEM_MC_FETCH_XREG_U32(uValue, IEM_GET_MODRM_REG(pVCpu, bRm), bImm & 3); 719 IEM_MC_STORE_MEM_U32(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uValue); 720 IEM_MC_ADVANCE_RIP_AND_FINISH(); 721 IEM_MC_END(); 722 } 723 } 724 } 725 726 599 727 /** Opcode VEX.66.0F3A 0x17. */ 600 728 FNIEMOP_STUB(iemOp_vextractps_Ed_Vdq_Ib); … … 1417 1545 /* 0x12 */ IEMOP_X4(iemOp_InvalidNeedRMImm8), 1418 1546 /* 0x13 */ IEMOP_X4(iemOp_InvalidNeedRMImm8), 1419 /* 0x14 */ iemOp_InvalidNeedRMImm8, iemOp_vpextrb_ RdMb_Vdq_Ib,iemOp_InvalidNeedRMImm8, iemOp_InvalidNeedRMImm8,1547 /* 0x14 */ iemOp_InvalidNeedRMImm8, iemOp_vpextrb_Eb_Vdq_Ib, iemOp_InvalidNeedRMImm8, iemOp_InvalidNeedRMImm8, 1420 1548 /* 0x15 */ iemOp_InvalidNeedRMImm8, iemOp_vpextrw_Ew_Vdq_Ib, iemOp_InvalidNeedRMImm8, iemOp_InvalidNeedRMImm8, 1421 /* 0x16 */ iemOp_InvalidNeedRMImm8, iemOp_vpextrd_q_ RdMw_Vdq_Ib, iemOp_InvalidNeedRMImm8,iemOp_InvalidNeedRMImm8,1549 /* 0x16 */ iemOp_InvalidNeedRMImm8, iemOp_vpextrd_q_Ey_Vdq_Ib, iemOp_InvalidNeedRMImm8, iemOp_InvalidNeedRMImm8, 1422 1550 /* 0x17 */ iemOp_InvalidNeedRMImm8, iemOp_vextractps_Ed_Vdq_Ib, iemOp_InvalidNeedRMImm8, iemOp_InvalidNeedRMImm8, 1423 1551 /* 0x18 */ iemOp_InvalidNeedRMImm8, iemOp_vinsertf128_Vqq_Hqq_Wqq_Ib, iemOp_InvalidNeedRMImm8, iemOp_InvalidNeedRMImm8, -
trunk/src/VBox/VMM/VMMAll/IEMAllN8veLiveness.cpp
r103828 r103909 663 663 664 664 #define IEM_MC_FETCH_MREG_U64(a_u64Value, a_iMReg) NOP() 665 #define IEM_MC_FETCH_MREG_U32(a_u32Value, a_iMReg) NOP() 665 #define IEM_MC_FETCH_MREG_U32(a_u32Value, a_iMReg, a_iDWord) NOP() 666 #define IEM_MC_FETCH_MREG_U16(a_u16Value, a_iMReg, a_iWord) NOP() 666 667 #define IEM_MC_STORE_MREG_U64(a_iMReg, a_u64Value) NOP() 667 668 #define IEM_MC_STORE_MREG_U32_ZX_U64(a_iMReg, a_u32Value) NOP() -
trunk/src/VBox/VMM/VMMAll/IEMAllThrdPython.py
r103842 r103909 1762 1762 'IEM_MC_FETCH_MREG_U64': '__mreg64', 1763 1763 'IEM_MC_FETCH_MREG_U32': '__mreg32', 1764 'IEM_MC_FETCH_MREG_U16': '__mreg16', 1764 1765 'IEM_MC_STORE_MREG_U64': '__mreg64', 1765 1766 'IEM_MC_STORE_MREG_U32_ZX_U64': '__mreg32zx64',
Note:
See TracChangeset
for help on using the changeset viewer.