Changeset 39125 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Oct 27, 2011 10:40:17 AM (13 years ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r39078 r39125 2165 2165 { 2166 2166 return iemRaiseXcptOrInt(pIemCpu, 0, X86_XCPT_MF, IEM_XCPT_FLAGS_T_CPU_XCPT, 0, 0); 2167 } 2168 2169 2170 /** 2171 * Macro for calling iemCImplRaiseDivideError(). 2172 * 2173 * This enables us to add/remove arguments and force different levels of 2174 * inlining as we wish. 2175 * 2176 * @return Strict VBox status code. 2177 */ 2178 #define IEMOP_RAISE_DIVIDE_ERROR() IEM_MC_DEFER_TO_CIMPL_0(iemCImplRaiseDivideError) 2179 IEM_CIMPL_DEF_0(iemCImplRaiseDivideError) 2180 { 2181 NOREF(cbInstr); 2182 return iemRaiseXcptOrInt(pIemCpu, 0, X86_XCPT_DE, IEM_XCPT_FLAGS_T_CPU_XCPT, 0, 0); 2167 2183 } 2168 2184 -
trunk/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp.h
r39078 r39125 2962 2962 * Implements 'AAM'. 2963 2963 * 2964 * @param enmEffOpSize The effective operand size.2964 * @param bImm The immediate operand. Cannot be 0. 2965 2965 */ 2966 2966 IEM_CIMPL_DEF_1(iemCImpl_aam, uint8_t, bImm) 2967 2967 { 2968 2968 PCPUMCTX pCtx = pIemCpu->CTX_SUFF(pCtx); 2969 Assert(bImm != 0); /* #DE on 0 is handled in the decoder. */ 2969 2970 2970 2971 uint16_t const ax = pCtx->ax; … … 2979 2980 return VINF_SUCCESS; 2980 2981 } 2982 2981 2983 2982 2984 -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
r39078 r39125 7799 7799 else 7800 7800 { 7801 uint16_t offSeg16; IEM_OPCODE_GET_NEXT_U16(&offSeg16); 7801 uint16_t offSeg16; IEM_OPCODE_GET_NEXT_U16(&offSeg16); /** @todo add GET_NEXT_U16_ZX_U32 to reduce code size. */ 7802 7802 offSeg = offSeg16; 7803 7803 } … … 7846 7846 IEMOP_MNEMONIC("sahf"); 7847 7847 IEMOP_HLP_NO_LOCK_PREFIX(); 7848 IEMOP_HLP_NO_64BIT(); 7848 if ( pIemCpu->enmCpuMode == IEMMODE_64BIT 7849 && !IEM_IS_AMD_CPUID_FEATURE_PRESENT_ECX(X86_CPUID_AMD_FEATURE_ECX_LAHF_SAHF)) 7850 return IEMOP_RAISE_INVALID_OPCODE(); 7849 7851 IEM_MC_BEGIN(0, 2); 7850 7852 IEM_MC_LOCAL(uint32_t, u32Flags); … … 7852 7854 IEM_MC_FETCH_EFLAGS(EFlags); 7853 7855 IEM_MC_FETCH_GREG_U8_ZX_U32(u32Flags, X86_GREG_xSP/*=AH*/); 7854 IEM_MC_AND_LOCAL_U32(u32Flags, UINT32_C(0xd7));7856 IEM_MC_AND_LOCAL_U32(u32Flags, X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF); 7855 7857 IEM_MC_AND_LOCAL_U32(EFlags, UINT32_C(0xffffff00)); 7856 IEM_MC_OR_LOCAL_U32(u32Flags, UINT32_C(0x00000002));7858 IEM_MC_OR_LOCAL_U32(u32Flags, X86_EFL_1); 7857 7859 IEM_MC_OR_2LOCS_U32(EFlags, u32Flags); 7858 7860 IEM_MC_COMMIT_EFLAGS(EFlags); … … 7868 7870 IEMOP_MNEMONIC("lahf"); 7869 7871 IEMOP_HLP_NO_LOCK_PREFIX(); 7870 IEMOP_HLP_NO_64BIT(); 7872 if ( pIemCpu->enmCpuMode == IEMMODE_64BIT 7873 && !IEM_IS_AMD_CPUID_FEATURE_PRESENT_ECX(X86_CPUID_AMD_FEATURE_ECX_LAHF_SAHF)) 7874 return IEMOP_RAISE_INVALID_OPCODE(); 7871 7875 IEM_MC_BEGIN(0, 1); 7872 7876 IEM_MC_LOCAL(uint8_t, u8Flags); … … 9863 9867 IEMOP_HLP_NO_LOCK_PREFIX(); 9864 9868 IEMOP_HLP_NO_64BIT(); 9869 if (!bImm) 9870 return IEMOP_RAISE_DIVIDE_ERROR(); 9865 9871 return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_aam, bImm); 9866 9872 }
Note:
See TracChangeset
for help on using the changeset viewer.