Changeset 66972 in vbox for trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
- Timestamp:
- May 19, 2017 11:29:45 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
r66968 r66972 958 958 * @optest op1=1 op2=2 -> op1=2 959 959 * @optest op1=0 op2=-42 -> op1=-42 960 * @oponly961 960 */ 962 961 FNIEMOP_DEF(iemOp_vmovlps_Mq_Vq) … … 993 992 * @opcpuid avx 994 993 * @optest -> 995 * @oponly996 994 */ 997 995 return IEMOP_RAISE_INVALID_OPCODE(); … … 1008 1006 * @optest op1=1 op2=2 -> op1=2 1009 1007 * @optest op1=0 op2=-42 -> op1=-42 1010 * @oponly1011 1008 */ 1012 1009 FNIEMOP_DEF(iemOp_vmovlpd_Mq_Vq) … … 1042 1039 * @opcpuid avx 1043 1040 * @optest -> 1044 * @oponly1045 1041 */ 1046 1042 return IEMOP_RAISE_INVALID_OPCODE(); … … 1095 1091 /* Opcode VEX.0F 0x27 - invalid */ 1096 1092 1097 /** Opcode VEX.0F 0x28 - vmovaps Vps, Wps */ 1098 FNIEMOP_STUB(iemOp_vmovaps_Vps_Wps); 1099 //FNIEMOP_DEF(iemOp_vmovaps_Vps_Wps) 1100 //{ 1101 // IEMOP_MNEMONIC(vmovaps_Vps_Wps, "vmovaps Vps,Wps"); 1102 // uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1103 // if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 1104 // { 1105 // /* 1106 // * Register, register. 1107 // */ 1108 // IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1109 // IEM_MC_BEGIN(0, 0); 1110 // IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1111 // IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1112 // IEM_MC_COPY_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 1113 // (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 1114 // IEM_MC_ADVANCE_RIP(); 1115 // IEM_MC_END(); 1116 // } 1117 // else 1118 // { 1119 // /* 1120 // * Register, memory. 1121 // */ 1122 // IEM_MC_BEGIN(0, 2); 1123 // IEM_MC_LOCAL(RTUINT128U, uSrc); /** @todo optimize this one day... */ 1124 // IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1125 // 1126 // IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1127 // IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1128 // IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1129 // IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1130 // 1131 // IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1132 // IEM_MC_STORE_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 1133 // 1134 // IEM_MC_ADVANCE_RIP(); 1135 // IEM_MC_END(); 1136 // } 1137 // return VINF_SUCCESS; 1138 //} 1093 /** 1094 * @opcode 0x28 1095 * @oppfx none 1096 * @opcpuid avx 1097 * @opgroup og_avx_pcksclr_datamove 1098 * @opxcpttype 1 1099 * @optest op1=1 op2=2 -> op1=2 1100 * @optest op1=0 op2=-42 -> op1=-42 1101 */ 1102 FNIEMOP_DEF(iemOp_vmovaps_Vps_Wps) 1103 { 1104 IEMOP_MNEMONIC2(VEX_RM, VMOVAPS, vmovaps, Vps_WO, Wps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 1105 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1106 Assert(pVCpu->iem.s.uVexLength <= 1); 1107 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 1108 { 1109 /* 1110 * Register, register. 1111 */ 1112 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 1113 IEM_MC_BEGIN(1, 0); 1114 1115 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 1116 IEM_MC_PREPARE_AVX_USAGE(); 1117 if (pVCpu->iem.s.uVexLength == 0) 1118 IEM_MC_COPY_YREG_U128_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 1119 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 1120 else 1121 IEM_MC_COPY_YREG_U256_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 1122 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 1123 IEM_MC_ADVANCE_RIP(); 1124 IEM_MC_END(); 1125 } 1126 else 1127 { 1128 /* 1129 * Register, memory. 1130 */ 1131 if (pVCpu->iem.s.uVexLength == 0) 1132 { 1133 IEM_MC_BEGIN(0, 2); 1134 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1135 IEM_MC_LOCAL(RTUINT128U, uSrc); 1136 1137 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1138 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 1139 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 1140 IEM_MC_PREPARE_AVX_USAGE(); 1141 1142 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1143 IEM_MC_STORE_YREG_U128_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 1144 1145 IEM_MC_ADVANCE_RIP(); 1146 IEM_MC_END(); 1147 } 1148 else 1149 { 1150 IEM_MC_BEGIN(0, 2); 1151 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1152 IEM_MC_LOCAL(RTUINT256U, uSrc); 1153 1154 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1155 IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV(); 1156 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 1157 IEM_MC_PREPARE_AVX_USAGE(); 1158 1159 IEM_MC_FETCH_MEM_U256_ALIGN_AVX(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1160 IEM_MC_STORE_YREG_U256_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 1161 1162 IEM_MC_ADVANCE_RIP(); 1163 IEM_MC_END(); 1164 } 1165 } 1166 return VINF_SUCCESS; 1167 } 1168 1169 1139 1170 1140 1171 /** Opcode VEX.66.0F 0x28 - vmovapd Vpd, Wpd */
Note:
See TracChangeset
for help on using the changeset viewer.