Changeset 66303 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Mar 28, 2017 2:22:58 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 114231
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r66283 r66303 161 161 'Ew': ( 'IDX_UseModRM', 'rm', '%Ew', 'Ew', ), 162 162 'Ev': ( 'IDX_UseModRM', 'rm', '%Ev', 'Ev', ), 163 'Wsd': ( 'IDX_UseModRM', 'rm', '%Wsd', 'Wsd', ), 164 'Wps': ( 'IDX_UseModRM', 'rm', '%Wps', 'Wps', ), 163 'Wsd': ( 'IDX_UseModRM', 'rm', '%Wsd', 'Wsd', ), 164 'Wps': ( 'IDX_UseModRM', 'rm', '%Wps', 'Wps', ), 165 'Wpd': ( 'IDX_UseModRM', 'rm', '%Wpd', 'Wpd', ), 165 166 166 167 # ModR/M.rm - memory only. … … 173 174 'Vsd': ( 'IDX_UseModRM', 'reg', '%Vsd', 'Vsd', ), 174 175 'Vps': ( 'IDX_UseModRM', 'reg', '%Vps', 'Vps', ), 176 'Vpd': ( 'IDX_UseModRM', 'reg', '%Vpd', 'Vpd', ), 175 177 176 178 # Immediate values. -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r66283 r66303 1079 1079 * @opcode 0x11 1080 1080 * @oppfx none 1081 * @opcpuid sse 1082 * @opgroup og_sse2_pcksclr_datamov 1083 * @opxcpttype 4UA 1084 * @optest op1=1 op2=2 -> op1=2 1085 * @optest op1=0 op2=-42 -> op1=-42 1086 * @oponlytest 1087 */ 1088 FNIEMOP_DEF(iemOp_vmovups_Wps_Vps) 1089 { 1090 IEMOP_MNEMONIC2(MR, MOVUPS, movups, Wps, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 1091 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1092 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 1093 { 1094 /* 1095 * Register, register. 1096 */ 1097 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1098 IEM_MC_BEGIN(0, 0); 1099 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1100 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1101 IEM_MC_COPY_XREG_U128((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1102 ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1103 IEM_MC_ADVANCE_RIP(); 1104 IEM_MC_END(); 1105 } 1106 else 1107 { 1108 /* 1109 * Memory, register. 1110 */ 1111 IEM_MC_BEGIN(0, 2); 1112 IEM_MC_LOCAL(uint128_t, uSrc); /** @todo optimize this one day... */ 1113 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1114 1115 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1116 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1117 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1118 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 1119 1120 IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1121 IEM_MC_STORE_MEM_U128(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 1122 1123 IEM_MC_ADVANCE_RIP(); 1124 IEM_MC_END(); 1125 } 1126 return VINF_SUCCESS; 1127 } 1128 1129 1130 /** 1131 * @opcode 0x11 1132 * @oppfx 0x66 1081 1133 * @opcpuid sse2 1082 1134 * @opgroup og_sse2_pcksclr_datamov … … 1086 1138 * @oponlytest 1087 1139 */ 1088 FNIEMOP_DEF(iemOp_vmovup s_Wps_Vps)1089 { 1090 IEMOP_MNEMONIC2(MR, MOVUP S, movups, Wps, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);1140 FNIEMOP_DEF(iemOp_vmovupd_Wpd_Vpd) 1141 { 1142 IEMOP_MNEMONIC2(MR, MOVUPD, movupd, Wpd, Vpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 1091 1143 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1092 1144 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 1097 1149 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1098 1150 IEM_MC_BEGIN(0, 0); 1099 IEM_MC_MAYBE_RAISE_SSE _RELATED_XCPT();1151 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1100 1152 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1101 1153 IEM_MC_COPY_XREG_U128((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, … … 1115 1167 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1116 1168 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1117 IEM_MC_MAYBE_RAISE_SSE _RELATED_XCPT();1169 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1118 1170 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 1119 1171 … … 1127 1179 } 1128 1180 1129 1130 /** Opcode 0x66 0x0f 0x11 - vmovupd Wpd,Vpd */1131 FNIEMOP_STUB(iemOp_vmovupd_Wpd_Vpd);1132 1181 1133 1182 /** Opcode 0xf3 0x0f 0x11 - vmovss Wss, Hx, Vss */
Note:
See TracChangeset
for help on using the changeset viewer.