Changeset 65609 in vbox
- Timestamp:
- Feb 3, 2017 8:21:16 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 113280
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
r65608 r65609 1985 1985 1986 1986 1987 /** Opcode 0x0f 0x28. */ 1988 FNIEMOP_DEF(iemOp_movaps_Vps_Wps__movapd_Vpd_Wpd) 1989 { 1990 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP)) 1991 IEMOP_MNEMONIC(movaps_r_mr, "movaps r,mr"); 1992 else 1993 IEMOP_MNEMONIC(movapd_r_mr, "movapd r,mr"); 1987 /** Opcode 0x0f 0x28 - vmovaps Vps, Wps */ 1988 FNIEMOP_DEF(iemOp_vmovaps_Vps_Wps) 1989 { 1990 IEMOP_MNEMONIC(movaps_r_mr, "movaps r,mr"); 1994 1991 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1995 1992 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 1998 1995 * Register, register. 1999 1996 */ 2000 IEMOP_HLP_DONE_DECODING_NO_LOCK_ REPZ_OR_REPNZ_PREFIXES();1997 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2001 1998 IEM_MC_BEGIN(0, 0); 2002 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP)) 2003 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 2004 else 2005 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1999 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 2006 2000 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 2007 2001 IEM_MC_COPY_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, … … 2020 2014 2021 2015 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 2022 IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); /** @todo check if this is delayed this long for REPZ/NZ */ 2023 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP)) 2024 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 2025 else 2026 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 2016 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2017 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 2027 2018 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 2028 2019 … … 2036 2027 } 2037 2028 2029 /** Opcode 0x66 0x0f 0x28 - vmovapd Vpd, Wpd */ 2030 FNIEMOP_DEF(iemOp_vmovapd_Vpd_Wpd) 2031 { 2032 IEMOP_MNEMONIC(movapd_r_mr, "movapd r,mr"); 2033 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2034 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 2035 { 2036 /* 2037 * Register, register. 2038 */ 2039 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2040 IEM_MC_BEGIN(0, 0); 2041 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 2042 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 2043 IEM_MC_COPY_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 2044 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 2045 IEM_MC_ADVANCE_RIP(); 2046 IEM_MC_END(); 2047 } 2048 else 2049 { 2050 /* 2051 * Register, memory. 2052 */ 2053 IEM_MC_BEGIN(0, 2); 2054 IEM_MC_LOCAL(uint128_t, uSrc); /** @todo optimize this one day... */ 2055 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 2056 2057 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 2058 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2059 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 2060 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 2061 2062 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2063 IEM_MC_STORE_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 2064 2065 IEM_MC_ADVANCE_RIP(); 2066 IEM_MC_END(); 2067 } 2068 return VINF_SUCCESS; 2069 } 2070 2071 /* Opcode 0xf3 0x0f 0x28 - invalid */ 2072 /* Opcode 0xf2 0x0f 0x28 - invalid */ 2038 2073 2039 2074 /** Opcode 0x0f 0x29. */ … … 7926 7961 /* 0x26 */ iemOp_mov_Td_Rd, iemOp_mov_Td_Rd, iemOp_mov_Td_Rd, iemOp_mov_Td_Rd, 7927 7962 /* 0x27 */ iemOp_Invalid, iemOp_Invalid, iemOp_Invalid, iemOp_Invalid, 7928 /* 0x28 */ iemOp_ movaps_Vps_Wps__movapd_Vpd_Wpd, iemOp_movaps_Vps_Wps__movapd_Vpd_Wpd, iemOp_InvalidNeedRM,iemOp_InvalidNeedRM,7963 /* 0x28 */ iemOp_vmovaps_Vps_Wps, iemOp_vmovapd_Vpd_Wpd, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 7929 7964 /* 0x29 */ iemOp_movaps_Wps_Vps__movapd_Wpd_Vpd, iemOp_movaps_Wps_Vps__movapd_Wpd_Vpd, iemOp_movntps_Mps_Vps__movntpd_Mpd_Vpd, iemOp_InvalidNeedRM, 7930 7965 /* 0x2a */ iemOp_cvtpi2ps_Vps_Qpi, iemOp_cvtpi2pd_Vpd_Qpi, iemOp_vcvtsi2ss_Vss_Hss_Ey, iemOp_vcvtsi2sd_Vsd_Hsd_Ey,
Note:
See TracChangeset
for help on using the changeset viewer.