Changeset 65778 in vbox
- Timestamp:
- Feb 13, 2017 5:38:28 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 113502
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
r65773 r65778 549 549 550 550 551 /** Invalid opcode where intel requires Mod R/M sequence. */ 552 FNIEMOP_DEF(iemOp_InvalidNeedRM) 553 { 554 IEMOP_MNEMONIC(InvalidNeedRM, "InvalidNeedRM"); 551 /** Invalid with RM byte where intel requires 8-byte immediate. 552 * Intel will also need SIB and displacement if bRm indicates memory. */ 553 FNIEMOPRM_DEF(iemOp_InvalidWithRMNeedImm8) 554 { 555 IEMOP_MNEMONIC(InvalidWithRMNeedImm8, "InvalidWithRMNeedImm8"); 555 556 if (pVCpu->iem.s.enmCpuVendor == CPUMCPUVENDOR_INTEL) 556 557 { 557 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); RT_NOREF(bRm);558 558 #ifndef TST_IEM_CHECK_MC 559 559 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) … … 565 565 } 566 566 #endif 567 uint8_t bImm8; IEM_OPCODE_GET_NEXT_U8(&bImm8); RT_NOREF(bRm); 567 568 IEMOP_HLP_DONE_DECODING(); 568 569 } … … 571 572 572 573 573 /** Invalid opcode where intel requires Mod R/M sequence and 8-byte 574 * immediate. */ 575 FNIEMOP_DEF(iemOp_InvalidNeedRMImm8) 576 { 577 IEMOP_MNEMONIC(InvalidNeedRMImm8, "InvalidNeedRMImm8"); 574 /** Invalid opcode where intel requires Mod R/M sequence. */ 575 FNIEMOP_DEF(iemOp_InvalidNeedRM) 576 { 577 IEMOP_MNEMONIC(InvalidNeedRM, "InvalidNeedRM"); 578 578 if (pVCpu->iem.s.enmCpuVendor == CPUMCPUVENDOR_INTEL) 579 579 { 580 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);RT_NOREF(bRm);580 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); RT_NOREF(bRm); 581 581 #ifndef TST_IEM_CHECK_MC 582 582 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) … … 588 588 } 589 589 #endif 590 IEMOP_HLP_DONE_DECODING(); 591 } 592 return IEMOP_RAISE_INVALID_OPCODE(); 593 } 594 595 596 /** Invalid opcode where intel requires Mod R/M sequence and 8-byte 597 * immediate. */ 598 FNIEMOP_DEF(iemOp_InvalidNeedRMImm8) 599 { 600 IEMOP_MNEMONIC(InvalidNeedRMImm8, "InvalidNeedRMImm8"); 601 if (pVCpu->iem.s.enmCpuVendor == CPUMCPUVENDOR_INTEL) 602 { 603 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); RT_NOREF(bRm); 604 #ifndef TST_IEM_CHECK_MC 605 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 606 { 607 RTGCPTR GCPtrEff; 608 VBOXSTRICTRC rcStrict = iemOpHlpCalcRmEffAddr(pVCpu, bRm, 0, &GCPtrEff); 609 if (rcStrict != VINF_SUCCESS) 610 return rcStrict; 611 } 612 #endif 590 613 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); RT_NOREF(bImm); 591 614 IEMOP_HLP_DONE_DECODING(); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r65775 r65778 2943 2943 { 2944 2944 /** @todo decode imm8? */ 2945 /* /0 */ IEMOP_X4(iemOp_InvalidWithRM ),2946 /* /1 */ IEMOP_X4(iemOp_InvalidWithRM ),2947 /* /2 */ iemOp_Grp12_psrlw_Nq_Ib, iemOp_Grp12_vpsrlw_Hx_Ux_Ib, iemOp_InvalidWithRM, iemOp_InvalidWithRM,2948 /* /3 */ IEMOP_X4(iemOp_InvalidWithRM ),2949 /* /4 */ iemOp_Grp12_psraw_Nq_Ib, iemOp_Grp12_vpsraw_Hx_Ux_Ib, iemOp_InvalidWithRM, iemOp_InvalidWithRM,2950 /* /5 */ IEMOP_X4(iemOp_InvalidWithRM ),2951 /* /6 */ iemOp_Grp12_psllw_Nq_Ib, iemOp_Grp12_vpsllw_Hx_Ux_Ib, iemOp_InvalidWithRM, iemOp_InvalidWithRM,2952 /* /7 */ IEMOP_X4(iemOp_InvalidWithRM )2945 /* /0 */ IEMOP_X4(iemOp_InvalidWithRMNeedImm8), 2946 /* /1 */ IEMOP_X4(iemOp_InvalidWithRMNeedImm8), 2947 /* /2 */ iemOp_Grp12_psrlw_Nq_Ib, iemOp_Grp12_vpsrlw_Hx_Ux_Ib, iemOp_InvalidWithRMNeedImm8, iemOp_InvalidWithRMNeedImm8, 2948 /* /3 */ IEMOP_X4(iemOp_InvalidWithRMNeedImm8), 2949 /* /4 */ iemOp_Grp12_psraw_Nq_Ib, iemOp_Grp12_vpsraw_Hx_Ux_Ib, iemOp_InvalidWithRMNeedImm8, iemOp_InvalidWithRMNeedImm8, 2950 /* /5 */ IEMOP_X4(iemOp_InvalidWithRMNeedImm8), 2951 /* /6 */ iemOp_Grp12_psllw_Nq_Ib, iemOp_Grp12_vpsllw_Hx_Ux_Ib, iemOp_InvalidWithRMNeedImm8, iemOp_InvalidWithRMNeedImm8, 2952 /* /7 */ IEMOP_X4(iemOp_InvalidWithRMNeedImm8) 2953 2953 }; 2954 2954 … … 2962 2962 return FNIEMOP_CALL_1(g_apfnGroup12RegReg[ ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) * 4 2963 2963 + pVCpu->iem.s.idxPrefix], bRm); 2964 /** @todo decode SIB, disp, Ib? */ 2965 return IEMOP_RAISE_INVALID_OPCODE(); 2964 return FNIEMOP_CALL_1(iemOp_InvalidWithRMNeedImm8, bRm); 2966 2965 } 2967 2966 … … 2992 2991 { 2993 2992 /** @todo decode imm8? */ 2994 /* /0 */ IEMOP_X4(iemOp_InvalidWithRM ),2995 /* /1 */ IEMOP_X4(iemOp_InvalidWithRM ),2996 /* /2 */ iemOp_Grp13_psrld_Nq_Ib, iemOp_Grp13_vpsrld_Hx_Ux_Ib, iemOp_InvalidWithRM, iemOp_InvalidWithRM,2997 /* /3 */ IEMOP_X4(iemOp_InvalidWithRM ),2998 /* /4 */ iemOp_Grp13_psrad_Nq_Ib, iemOp_Grp13_vpsrad_Hx_Ux_Ib, iemOp_InvalidWithRM, iemOp_InvalidWithRM,2999 /* /5 */ IEMOP_X4(iemOp_InvalidWithRM ),3000 /* /6 */ iemOp_Grp13_pslld_Nq_Ib, iemOp_Grp13_vpslld_Hx_Ux_Ib, iemOp_InvalidWithRM, iemOp_InvalidWithRM,3001 /* /7 */ IEMOP_X4(iemOp_InvalidWithRM )2993 /* /0 */ IEMOP_X4(iemOp_InvalidWithRMNeedImm8), 2994 /* /1 */ IEMOP_X4(iemOp_InvalidWithRMNeedImm8), 2995 /* /2 */ iemOp_Grp13_psrld_Nq_Ib, iemOp_Grp13_vpsrld_Hx_Ux_Ib, iemOp_InvalidWithRMNeedImm8, iemOp_InvalidWithRMNeedImm8, 2996 /* /3 */ IEMOP_X4(iemOp_InvalidWithRMNeedImm8), 2997 /* /4 */ iemOp_Grp13_psrad_Nq_Ib, iemOp_Grp13_vpsrad_Hx_Ux_Ib, iemOp_InvalidWithRMNeedImm8, iemOp_InvalidWithRMNeedImm8, 2998 /* /5 */ IEMOP_X4(iemOp_InvalidWithRMNeedImm8), 2999 /* /6 */ iemOp_Grp13_pslld_Nq_Ib, iemOp_Grp13_vpslld_Hx_Ux_Ib, iemOp_InvalidWithRMNeedImm8, iemOp_InvalidWithRMNeedImm8, 3000 /* /7 */ IEMOP_X4(iemOp_InvalidWithRMNeedImm8) 3002 3001 }; 3003 3002 … … 3010 3009 return FNIEMOP_CALL_1(g_apfnGroup13RegReg[ ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) * 4 3011 3010 + pVCpu->iem.s.idxPrefix], bRm); 3012 /** @todo decode SIB, disp, Ib? */ 3013 return IEMOP_RAISE_INVALID_OPCODE(); 3011 return FNIEMOP_CALL_1(iemOp_InvalidWithRMNeedImm8, bRm); 3014 3012 } 3015 3013 … … 3039 3037 { 3040 3038 /** @todo decode imm8? */ 3041 /* /0 */ IEMOP_X4(iemOp_InvalidWithRM ),3042 /* /1 */ IEMOP_X4(iemOp_InvalidWithRM ),3043 /* /2 */ iemOp_Grp14_psrlq_Nq_Ib, iemOp_Grp14_vpsrlq_Hx_Ux_Ib, iemOp_InvalidWithRM, iemOp_InvalidWithRM,3044 /* /3 */ iemOp_InvalidWithRM , iemOp_Grp14_vpsrldq_Hx_Ux_Ib, iemOp_InvalidWithRM, iemOp_InvalidWithRM,3045 /* /4 */ IEMOP_X4(iemOp_InvalidWithRM ),3046 /* /5 */ IEMOP_X4(iemOp_InvalidWithRM ),3047 /* /6 */ iemOp_Grp14_psllq_Nq_Ib, iemOp_Grp14_vpsllq_Hx_Ux_Ib, iemOp_InvalidWithRM, iemOp_InvalidWithRM,3048 /* /7 */ iemOp_InvalidWithRM , iemOp_Grp14_vpslldq_Hx_Ux_Ib, iemOp_InvalidWithRM, iemOp_InvalidWithRM,3039 /* /0 */ IEMOP_X4(iemOp_InvalidWithRMNeedImm8), 3040 /* /1 */ IEMOP_X4(iemOp_InvalidWithRMNeedImm8), 3041 /* /2 */ iemOp_Grp14_psrlq_Nq_Ib, iemOp_Grp14_vpsrlq_Hx_Ux_Ib, iemOp_InvalidWithRMNeedImm8, iemOp_InvalidWithRMNeedImm8, 3042 /* /3 */ iemOp_InvalidWithRMNeedImm8, iemOp_Grp14_vpsrldq_Hx_Ux_Ib, iemOp_InvalidWithRMNeedImm8, iemOp_InvalidWithRMNeedImm8, 3043 /* /4 */ IEMOP_X4(iemOp_InvalidWithRMNeedImm8), 3044 /* /5 */ IEMOP_X4(iemOp_InvalidWithRMNeedImm8), 3045 /* /6 */ iemOp_Grp14_psllq_Nq_Ib, iemOp_Grp14_vpsllq_Hx_Ux_Ib, iemOp_InvalidWithRMNeedImm8, iemOp_InvalidWithRMNeedImm8, 3046 /* /7 */ iemOp_InvalidWithRMNeedImm8, iemOp_Grp14_vpslldq_Hx_Ux_Ib, iemOp_InvalidWithRMNeedImm8, iemOp_InvalidWithRMNeedImm8, 3049 3047 }; 3050 3048 … … 3058 3056 return FNIEMOP_CALL_1(g_apfnGroup14RegReg[ ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) * 4 3059 3057 + pVCpu->iem.s.idxPrefix], bRm); 3060 /** @todo decode SIB, disp, Ib? */ 3061 return IEMOP_RAISE_INVALID_OPCODE(); 3058 return FNIEMOP_CALL_1(iemOp_InvalidWithRMNeedImm8, bRm); 3062 3059 } 3063 3060
Note:
See TracChangeset
for help on using the changeset viewer.