Changeset 66888 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- May 15, 2017 10:14:54 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
r66886 r66888 123 123 } 124 124 return VINF_SUCCESS; 125 126 125 } 127 126 128 /** Opcode VEX.66.0F 0x10 - vmovupd Vpd, Wpd */ 129 FNIEMOP_STUB(iemOp_vmovupd_Vpd_Wpd); 127 128 /** 129 * @opcode 0x10 130 * @oppfx 0x66 131 * @opcpuid avx 132 * @opgroup og_avx_simdfp_datamove 133 * @opxcpttype 4UA 134 * @optest op1=1 op2=2 -> op1=2 135 * @optest op1=0 op2=-22 -> op1=-22 136 * @oponly 137 */ 138 FNIEMOP_DEF(iemOp_vmovupd_Vpd_Wpd) 139 { 140 IEMOP_MNEMONIC2(VEX_RM, VMOVUPD, vmovupd, Vpd_WO, Wpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 141 Assert(pVCpu->iem.s.uVexLength <= 1); 142 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 143 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 144 { 145 /* 146 * Register, register. 147 */ 148 IEMOP_HLP_DONE_DECODING_NO_AVX_PREFIX_AND_NO_VVVV(); 149 IEM_MC_BEGIN(0, 0); 150 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 151 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); 152 if (pVCpu->iem.s.uVexLength == 0) 153 IEM_MC_COPY_YREG_U128_ZX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 154 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 155 else 156 IEM_MC_COPY_YREG_U256_ZX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 157 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 158 IEM_MC_ADVANCE_RIP(); 159 IEM_MC_END(); 160 } 161 else if (pVCpu->iem.s.uVexLength == 0) 162 { 163 /* 164 * 128-bit: Memory, register. 165 */ 166 IEM_MC_BEGIN(0, 2); 167 IEM_MC_LOCAL(RTUINT128U, uSrc); 168 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 169 170 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 171 IEMOP_HLP_DONE_DECODING_NO_AVX_PREFIX_AND_NO_VVVV(); 172 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 173 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); 174 175 IEM_MC_FETCH_MEM_U128(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 176 IEM_MC_STORE_YREG_U128_ZX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 177 178 IEM_MC_ADVANCE_RIP(); 179 IEM_MC_END(); 180 } 181 else 182 { 183 /* 184 * 256-bit: Memory, register. 185 */ 186 IEM_MC_BEGIN(0, 2); 187 IEM_MC_LOCAL(RTUINT256U, uSrc); 188 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 189 190 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 191 IEMOP_HLP_DONE_DECODING_NO_AVX_PREFIX_AND_NO_VVVV(); 192 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 193 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); 194 195 IEM_MC_FETCH_MEM_U256(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 196 IEM_MC_STORE_YREG_U256_ZX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 197 198 IEM_MC_ADVANCE_RIP(); 199 IEM_MC_END(); 200 } 201 return VINF_SUCCESS; 202 203 } 130 204 131 205
Note:
See TracChangeset
for help on using the changeset viewer.