- Timestamp:
- May 2, 2017 11:36:57 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r66744 r66745 1148 1148 1149 1149 1150 /** Opcode 0xf2 0x0f 0x10 - movsd Vx, Wsd */ 1151 FNIEMOP_STUB(iemOp_movsd_Vx_Wsd); 1150 /** 1151 * @opcode 0x10 1152 * @oppfx 0xf2 1153 * @opcpuid sse2 1154 * @opgroup og_sse2_pcksclr_datamove 1155 * @opxcpttype 5 1156 * @optest op1=1 op2=2 -> op1=2 1157 * @optest op1=0 op2=-42 -> op1=-42 1158 */ 1159 FNIEMOP_DEF(iemOp_movsd_Vx_Wsd) 1160 { 1161 IEMOP_MNEMONIC2(RM, MOVSD, movsd, VsdZxReg, Wsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 1162 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1163 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 1164 { 1165 /* 1166 * Register, register. 1167 */ 1168 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1169 IEM_MC_BEGIN(0, 1); 1170 IEM_MC_LOCAL(uint64_t, uSrc); 1171 1172 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1173 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1174 IEM_MC_FETCH_XREG_U64(uSrc, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 1175 IEM_MC_STORE_XREG_U64_ZX_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 1176 1177 IEM_MC_ADVANCE_RIP(); 1178 IEM_MC_END(); 1179 } 1180 else 1181 { 1182 /* 1183 * Memory, register. 1184 */ 1185 IEM_MC_BEGIN(0, 2); 1186 IEM_MC_LOCAL(uint64_t, uSrc); 1187 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1188 1189 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1190 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1191 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1192 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1193 1194 IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1195 IEM_MC_STORE_XREG_U64_ZX_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 1196 1197 IEM_MC_ADVANCE_RIP(); 1198 IEM_MC_END(); 1199 } 1200 return VINF_SUCCESS; 1201 } 1152 1202 1153 1203
Note:
See TracChangeset
for help on using the changeset viewer.

