Changeset 67009 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- May 22, 2017 12:07:05 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
r67007 r67009 2152 2152 /* Opcode VEX.0F 0x6f - invalid */ 2153 2153 2154 /** Opcode VEX.66.0F 0x6f - vmovdqa Vx, Wx */ 2155 FNIEMOP_STUB(iemOp_vmovdqa_Vx_Wx); 2156 //FNIEMOP_DEF(iemOp_vmovdqa_Vx_Wx) 2157 //{ 2158 // uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2159 // IEMOP_MNEMONIC(vmovdqa_Vdq_Wdq, "movdqa Vdq,Wdq"); 2160 // if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 2161 // { 2162 // /* 2163 // * Register, register. 2164 // */ 2165 // IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2166 // IEM_MC_BEGIN(0, 0); 2167 // IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 2168 // IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 2169 // IEM_MC_COPY_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 2170 // (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 2171 // IEM_MC_ADVANCE_RIP(); 2172 // IEM_MC_END(); 2173 // } 2174 // else 2175 // { 2176 // /* 2177 // * Register, memory. 2178 // */ 2179 // IEM_MC_BEGIN(0, 2); 2180 // IEM_MC_LOCAL(RTUINT128U, u128Tmp); 2181 // IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 2182 // 2183 // IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 2184 // IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2185 // IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 2186 // IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 2187 // IEM_MC_FETCH_MEM_U128_ALIGN_SSE(u128Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2188 // IEM_MC_STORE_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u128Tmp); 2189 // 2190 // IEM_MC_ADVANCE_RIP(); 2191 // IEM_MC_END(); 2192 // } 2193 // return VINF_SUCCESS; 2194 //} 2154 /** 2155 * @opcode 0x6f 2156 * @oppfx 0x66 2157 * @opcpuid avx 2158 * @opgroup og_avx_simdint_datamove 2159 * @opxcpttype 1 2160 * @optest op1=1 op2=2 -> op1=2 2161 * @optest op1=0 op2=-42 -> op1=-42 2162 * @oponly 2163 */ 2164 FNIEMOP_DEF(iemOp_vmovdqa_Vx_Wx) 2165 { 2166 IEMOP_MNEMONIC2(VEX_RM, VMOVDQA, vmovdqa, Vx_WO, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 2167 Assert(pVCpu->iem.s.uVexLength <= 1); 2168 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2169 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 2170 { 2171 /* 2172 * Register, register. 2173 */ 2174 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 2175 IEM_MC_BEGIN(0, 0); 2176 2177 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 2178 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); 2179 if (pVCpu->iem.s.uVexLength == 0) 2180 IEM_MC_COPY_YREG_U128_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 2181 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 2182 else 2183 IEM_MC_COPY_YREG_U256_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 2184 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 2185 IEM_MC_ADVANCE_RIP(); 2186 IEM_MC_END(); 2187 } 2188 else if (pVCpu->iem.s.uVexLength == 0) 2189 { 2190 /* 2191 * Register, memory128. 2192 */ 2193 IEM_MC_BEGIN(0, 2); 2194 IEM_MC_LOCAL(RTUINT128U, u128Tmp); 2195 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 2196 2197 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 2198 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 2199 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 2200 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); 2201 2202 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(u128Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2203 IEM_MC_STORE_YREG_U128_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u128Tmp); 2204 2205 IEM_MC_ADVANCE_RIP(); 2206 IEM_MC_END(); 2207 } 2208 else 2209 { 2210 /* 2211 * Register, memory256. 2212 */ 2213 IEM_MC_BEGIN(0, 2); 2214 IEM_MC_LOCAL(RTUINT256U, u256Tmp); 2215 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 2216 2217 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 2218 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 2219 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 2220 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); 2221 2222 IEM_MC_FETCH_MEM_U256_ALIGN_AVX(u256Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2223 IEM_MC_STORE_YREG_U256_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u256Tmp); 2224 2225 IEM_MC_ADVANCE_RIP(); 2226 IEM_MC_END(); 2227 } 2228 return VINF_SUCCESS; 2229 } 2195 2230 2196 2231 /** Opcode VEX.F3.0F 0x6f - vmovdqu Vx, Wx */
Note:
See TracChangeset
for help on using the changeset viewer.