Changeset 100731 in vbox for trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h
- Timestamp:
- Jul 28, 2023 10:22:22 PM (19 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h
r100714 r100731 792 792 IEMOP_HLP_NO_64BIT(); 793 793 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 794 IEM_MC_DEFER_TO_CIMPL_2_RET(IEM_CIMPL_F_BRANCH_INDIR | IEM_CIMPL_F_END_TB/*?*/, 794 /** @todo eliminate END_TB here */ 795 IEM_MC_DEFER_TO_CIMPL_2_RET(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_FAR | IEM_CIMPL_F_END_TB, 795 796 iemCImpl_pop_Sreg, X86_SREG_CS, pVCpu->iem.s.enmEffOpSize); 796 797 } … … 5018 5019 */ 5019 5020 uint8_t const iSegReg = IEM_GET_MODRM_REG_8(bRm); 5020 if ( 5021 if (iSegReg > X86_SREG_GS) 5021 5022 IEMOP_RAISE_INVALID_OPCODE_RET(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */ 5022 5023 … … 5159 5160 */ 5160 5161 uint8_t const iSegReg = IEM_GET_MODRM_REG_8(bRm); 5162 /** @todo r=bird: What does 8086 do here wrt CS? */ 5161 5163 if ( iSegReg == X86_SREG_CS 5162 5164 || iSegReg > X86_SREG_GS) … … 5682 5684 uint16_t u16Sel; IEM_OPCODE_GET_NEXT_U16(&u16Sel); 5683 5685 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5684 IEM_MC_DEFER_TO_CIMPL_3_RET(IEM_CIMPL_F_BRANCH_UNCOND | IEM_CIMPL_F_MODE | IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT, 5686 IEM_MC_DEFER_TO_CIMPL_3_RET(IEM_CIMPL_F_BRANCH_DIRECT | IEM_CIMPL_F_BRANCH_FAR 5687 | IEM_CIMPL_F_MODE | IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT, 5685 5688 iemCImpl_callf, u16Sel, off32Seg, pVCpu->iem.s.enmEffOpSize); 5686 5689 } … … 7207 7210 { 7208 7211 case IEMMODE_16BIT: 7209 IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_BRANCH_INDIR , iemCImpl_retn_iw_16, u16Imm);7212 IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_BRANCH_INDIRECT, iemCImpl_retn_iw_16, u16Imm); 7210 7213 case IEMMODE_32BIT: 7211 IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_BRANCH_INDIR , iemCImpl_retn_iw_32, u16Imm);7214 IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_BRANCH_INDIRECT, iemCImpl_retn_iw_32, u16Imm); 7212 7215 case IEMMODE_64BIT: 7213 IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_BRANCH_INDIR , iemCImpl_retn_iw_64, u16Imm);7216 IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_BRANCH_INDIRECT, iemCImpl_retn_iw_64, u16Imm); 7214 7217 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 7215 7218 } … … 7228 7231 { 7229 7232 case IEMMODE_16BIT: 7230 IEM_MC_DEFER_TO_CIMPL_0_RET(IEM_CIMPL_F_BRANCH_INDIR , iemCImpl_retn_16);7233 IEM_MC_DEFER_TO_CIMPL_0_RET(IEM_CIMPL_F_BRANCH_INDIRECT, iemCImpl_retn_16); 7231 7234 case IEMMODE_32BIT: 7232 IEM_MC_DEFER_TO_CIMPL_0_RET(IEM_CIMPL_F_BRANCH_INDIR , iemCImpl_retn_32);7235 IEM_MC_DEFER_TO_CIMPL_0_RET(IEM_CIMPL_F_BRANCH_INDIRECT, iemCImpl_retn_32); 7233 7236 case IEMMODE_64BIT: 7234 IEM_MC_DEFER_TO_CIMPL_0_RET(IEM_CIMPL_F_BRANCH_INDIR , iemCImpl_retn_64);7237 IEM_MC_DEFER_TO_CIMPL_0_RET(IEM_CIMPL_F_BRANCH_INDIRECT, iemCImpl_retn_64); 7235 7238 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 7236 7239 } … … 7516 7519 uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); 7517 7520 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7518 IEM_MC_DEFER_TO_CIMPL_2_RET(IEM_CIMPL_F_MODE | IEM_CIMPL_F_BRANCH_INDIR, iemCImpl_retf, pVCpu->iem.s.enmEffOpSize, u16Imm); 7521 IEM_MC_DEFER_TO_CIMPL_2_RET(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_FAR | IEM_CIMPL_F_MODE, 7522 iemCImpl_retf, pVCpu->iem.s.enmEffOpSize, u16Imm); 7519 7523 } 7520 7524 … … 7527 7531 IEMOP_MNEMONIC(retf, "retf"); 7528 7532 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7529 IEM_MC_DEFER_TO_CIMPL_2_RET(IEM_CIMPL_F_MODE | IEM_CIMPL_F_BRANCH_INDIR, iemCImpl_retf, pVCpu->iem.s.enmEffOpSize, 0); 7533 IEM_MC_DEFER_TO_CIMPL_2_RET(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_FAR | IEM_CIMPL_F_MODE, 7534 iemCImpl_retf, pVCpu->iem.s.enmEffOpSize, 0); 7530 7535 } 7531 7536 … … 7538 7543 IEMOP_MNEMONIC(int3, "int3"); 7539 7544 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7540 IEM_MC_DEFER_TO_CIMPL_2_RET(IEM_CIMPL_F_MODE | IEM_CIMPL_F_BRANCH_INDIR | IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_RFLAGS, 7545 IEM_MC_DEFER_TO_CIMPL_2_RET(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_FAR 7546 | IEM_CIMPL_F_MODE | IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_RFLAGS, 7541 7547 iemCImpl_int, X86_XCPT_BP, IEMINT_INT3); 7542 7548 } … … 7551 7557 uint8_t u8Int; IEM_OPCODE_GET_NEXT_U8(&u8Int); 7552 7558 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7553 IEM_MC_DEFER_TO_CIMPL_2_RET(IEM_CIMPL_F_MODE | IEM_CIMPL_F_BRANCH_INDIR | IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_RFLAGS, 7559 IEM_MC_DEFER_TO_CIMPL_2_RET(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_FAR 7560 | IEM_CIMPL_F_MODE | IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_RFLAGS, 7554 7561 iemCImpl_int, u8Int, IEMINT_INTN); 7555 7562 } … … 7563 7570 IEMOP_MNEMONIC(into, "into"); 7564 7571 IEMOP_HLP_NO_64BIT(); 7565 IEM_MC_DEFER_TO_CIMPL_2_RET(IEM_CIMPL_F_MODE | IEM_CIMPL_F_BRANCH_INDIR | IEM_CIMPL_F_BRANCH_COND | IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_RFLAGS, 7572 IEM_MC_DEFER_TO_CIMPL_2_RET(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_FAR | IEM_CIMPL_F_BRANCH_CONDITIONAL 7573 | IEM_CIMPL_F_MODE | IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_RFLAGS, 7566 7574 iemCImpl_int, X86_XCPT_OF, IEMINT_INTO); 7567 7575 } … … 7575 7583 IEMOP_MNEMONIC(iret, "iret"); 7576 7584 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7577 IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_MODE | IEM_CIMPL_F_BRANCH_INDIR | IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT, 7585 IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_FAR 7586 | IEM_CIMPL_F_MODE | IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT, 7578 7587 iemCImpl_iret, pVCpu->iem.s.enmEffOpSize); 7579 7588 } … … 11484 11493 { 11485 11494 uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); 11486 IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_BRANCH_ UNCOND, iemCImpl_call_rel_16, (int16_t)u16Imm);11495 IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_BRANCH_RELATIVE, iemCImpl_call_rel_16, (int16_t)u16Imm); 11487 11496 } 11488 11497 … … 11490 11499 { 11491 11500 uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); 11492 IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_BRANCH_ UNCOND, iemCImpl_call_rel_32, (int32_t)u32Imm);11501 IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_BRANCH_RELATIVE, iemCImpl_call_rel_32, (int32_t)u32Imm); 11493 11502 } 11494 11503 … … 11496 11505 { 11497 11506 uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm); 11498 IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_BRANCH_ UNCOND, iemCImpl_call_rel_64, u64Imm);11507 IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_BRANCH_RELATIVE, iemCImpl_call_rel_64, u64Imm); 11499 11508 } 11500 11509 … … 11555 11564 uint16_t u16Sel; IEM_OPCODE_GET_NEXT_U16(&u16Sel); 11556 11565 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11557 IEM_MC_DEFER_TO_CIMPL_3_RET(IEM_CIMPL_F_BRANCH_UNCOND | IEM_CIMPL_F_MODE | IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT, 11566 IEM_MC_DEFER_TO_CIMPL_3_RET(IEM_CIMPL_F_BRANCH_DIRECT | IEM_CIMPL_F_BRANCH_FAR 11567 | IEM_CIMPL_F_MODE | IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT, 11558 11568 iemCImpl_FarJmp, u16Sel, off32Seg, pVCpu->iem.s.enmEffOpSize); 11559 11569 } … … 11641 11651 IEMOP_HLP_MIN_386(); 11642 11652 /** @todo testcase! */ 11643 IEM_MC_DEFER_TO_CIMPL_2_RET(IEM_CIMPL_F_MODE | IEM_CIMPL_F_BRANCH_INDIR | IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_RFLAGS, 11653 IEM_MC_DEFER_TO_CIMPL_2_RET(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_FAR 11654 | IEM_CIMPL_F_MODE | IEM_CIMPL_F_VMEXIT | IEM_CIMPL_F_RFLAGS, 11644 11655 iemCImpl_int, X86_XCPT_DB, IEMINT_INT1); 11645 11656 } … … 12640 12651 IEM_MC_ARG(uint16_t, u16Target, 0); 12641 12652 IEM_MC_FETCH_GREG_U16(u16Target, IEM_GET_MODRM_RM(pVCpu, bRm)); 12642 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIR , iemCImpl_call_16, u16Target);12653 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT, iemCImpl_call_16, u16Target); 12643 12654 IEM_MC_END(); 12644 12655 break; … … 12649 12660 IEM_MC_ARG(uint32_t, u32Target, 0); 12650 12661 IEM_MC_FETCH_GREG_U32(u32Target, IEM_GET_MODRM_RM(pVCpu, bRm)); 12651 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIR , iemCImpl_call_32, u32Target);12662 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT, iemCImpl_call_32, u32Target); 12652 12663 IEM_MC_END(); 12653 12664 break; … … 12658 12669 IEM_MC_ARG(uint64_t, u64Target, 0); 12659 12670 IEM_MC_FETCH_GREG_U64(u64Target, IEM_GET_MODRM_RM(pVCpu, bRm)); 12660 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIR , iemCImpl_call_64, u64Target);12671 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT, iemCImpl_call_64, u64Target); 12661 12672 IEM_MC_END(); 12662 12673 break; … … 12677 12688 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12678 12689 IEM_MC_FETCH_MEM_U16(u16Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 12679 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIR , iemCImpl_call_16, u16Target);12690 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT, iemCImpl_call_16, u16Target); 12680 12691 IEM_MC_END(); 12681 12692 break; … … 12688 12699 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12689 12700 IEM_MC_FETCH_MEM_U32(u32Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 12690 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIR , iemCImpl_call_32, u32Target);12701 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT, iemCImpl_call_32, u32Target); 12691 12702 IEM_MC_END(); 12692 12703 break; … … 12699 12710 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12700 12711 IEM_MC_FETCH_MEM_U64(u64Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 12701 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIR , iemCImpl_call_64, u64Target);12712 IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_BRANCH_INDIRECT, iemCImpl_call_64, u64Target); 12702 12713 IEM_MC_END(); 12703 12714 break; … … 12735 12746 IEM_MC_FETCH_MEM_U16(offSeg, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \ 12736 12747 IEM_MC_FETCH_MEM_U16_DISP(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, 2); \ 12737 IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_BRANCH_INDIR | IEM_CIMPL_F_MODE | IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT, \ 12748 IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_FAR \ 12749 | IEM_CIMPL_F_MODE | IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT, \ 12738 12750 a_fnCImpl, u16Sel, offSeg, enmEffOpSize); \ 12739 12751 IEM_MC_END(); \ … … 12750 12762 IEM_MC_FETCH_MEM_U32(offSeg, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \ 12751 12763 IEM_MC_FETCH_MEM_U16_DISP(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, 4); \ 12752 IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_BRANCH_INDIR | IEM_CIMPL_F_MODE | IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT, \ 12764 IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_FAR \ 12765 | IEM_CIMPL_F_MODE | IEM_CIMPL_F_RFLAGS | IEM_CIMPL_F_VMEXIT, \ 12753 12766 a_fnCImpl, u16Sel, offSeg, enmEffOpSize); \ 12754 12767 IEM_MC_END(); \ … … 12766 12779 IEM_MC_FETCH_MEM_U64(offSeg, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \ 12767 12780 IEM_MC_FETCH_MEM_U16_DISP(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, 8); \ 12768 IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_BRANCH_INDIR | IEM_CIMPL_F_MODE /* no gates */, \12781 IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_BRANCH_INDIRECT | IEM_CIMPL_F_BRANCH_FAR | IEM_CIMPL_F_MODE /* no gates */, \ 12769 12782 a_fnCImpl, u16Sel, offSeg, enmEffOpSize); \ 12770 12783 IEM_MC_END(); \
Note:
See TracChangeset
for help on using the changeset viewer.