Changeset 66888 in vbox
- Timestamp:
- May 15, 2017 10:14:54 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/disopcode.h
r66886 r66888 745 745 OP_VSTMXCSR, 746 746 OP_VMOVUPS, 747 OP_VMOVUPD, 747 748 /** @} */ 748 749 /** @name VT-x instructions -
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 -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c
r66886 r66888 2144 2144 2145 2145 2146 static unsigned Bs3Cg1EncodeNext_VEX_MODRM_Vps_WO_Wps (PBS3CG1STATE pThis, unsigned iEncoding)2146 static unsigned Bs3Cg1EncodeNext_VEX_MODRM_Vps_WO_Wps__OR__VEX_MODRM_Vpd_WO_Wpd(PBS3CG1STATE pThis, unsigned iEncoding) 2147 2147 { 2148 2148 unsigned off; … … 2578 2578 #ifdef BS3CG1_WITH_VEX 2579 2579 case BS3CG1ENC_VEX_MODRM_Vps_WO_Wps: 2580 return Bs3Cg1EncodeNext_VEX_MODRM_Vps_WO_Wps(pThis, iEncoding); 2580 case BS3CG1ENC_VEX_MODRM_Vpd_WO_Wpd: 2581 return Bs3Cg1EncodeNext_VEX_MODRM_Vps_WO_Wps__OR__VEX_MODRM_Vpd_WO_Wpd(pThis, iEncoding); 2581 2582 2582 2583 case BS3CG1ENC_VEX_MODRM_Md_WO: … … 2816 2817 2817 2818 case BS3CG1ENC_VEX_MODRM_Vps_WO_Wps: 2819 case BS3CG1ENC_VEX_MODRM_Vpd_WO_Wpd: 2818 2820 pThis->iRmOp = 1; 2819 2821 pThis->iRegOp = 0; -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1.h
r66886 r66888 142 142 143 143 BS3CG1ENC_VEX_MODRM_Vps_WO_Wps, 144 BS3CG1ENC_VEX_MODRM_Vpd_WO_Wpd, 144 145 BS3CG1ENC_VEX_MODRM_Md_WO, 145 146
Note:
See TracChangeset
for help on using the changeset viewer.