Changeset 103926 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Mar 19, 2024 8:53:10 PM (11 months ago)
- svn:sync-xref-src-repo-rev:
- 162300
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap3.cpp.h
r103924 r103926 1053 1053 IEM_MC_BEGIN(4, 4, IEM_MC_F_NOT_286_OR_OLDER, 0); 1054 1054 IEMOP_HLP_DONE_VEX_DECODING_W0_EX(fAvx); 1055 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 1056 IEM_MC_PREPARE_AVX_USAGE(); 1055 1057 IEM_MC_LOCAL(RTUINT256U, uDst); 1058 IEM_MC_ARG_LOCAL_REF(PRTUINT256U, puDst, uDst, 0); 1056 1059 IEM_MC_LOCAL(RTUINT256U, uSrc1); 1060 IEM_MC_ARG_LOCAL_REF(PCRTUINT256U, puSrc1, uSrc1, 1); 1061 IEM_MC_FETCH_YREG_U256(uSrc1, IEM_GET_EFFECTIVE_VVVV(pVCpu)); 1057 1062 IEM_MC_LOCAL(RTUINT256U, uSrc2); 1063 IEM_MC_ARG_LOCAL_REF(PCRTUINT256U, puSrc2, uSrc2, 2); 1064 IEM_MC_FETCH_YREG_U256(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); 1058 1065 IEM_MC_LOCAL(RTUINT256U, uSrc3); 1059 IEM_MC_ARG_LOCAL_REF(PRTUINT256U, puDst, uDst, 0);1060 IEM_MC_ARG_LOCAL_REF(PCRTUINT256U, puSrc1, uSrc1, 1);1061 IEM_MC_ARG_LOCAL_REF(PCRTUINT256U, puSrc2, uSrc2, 2);1062 1066 IEM_MC_ARG_LOCAL_REF(PCRTUINT256U, puSrc3, uSrc3, 3); 1063 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 1064 IEM_MC_PREPARE_AVX_USAGE(); 1065 IEM_MC_FETCH_YREG_U256(uSrc1, IEM_GET_EFFECTIVE_VVVV(pVCpu)); 1066 IEM_MC_FETCH_YREG_U256(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); 1067 IEM_MC_FETCH_YREG_U256(uSrc3, IEM_GET_IMM8_REG(pVCpu, bOp4)); 1067 IEM_MC_FETCH_YREG_U256(uSrc3, IEM_GET_IMM8_REG(pVCpu, bOp4)); 1068 1068 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnU256, puDst, puSrc1, puSrc2, puSrc3); 1069 1069 IEM_MC_STORE_YREG_U256_ZX_VLMAX(IEM_GET_MODRM_REG(pVCpu, bRm), uDst); … … 1075 1075 IEM_MC_BEGIN(4, 0, IEM_MC_F_NOT_286_OR_OLDER, 0); 1076 1076 IEMOP_HLP_DONE_VEX_DECODING_W0_EX(fAvx); 1077 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1078 IEM_MC_ARG(PCRTUINT128U, puSrc1, 1); 1079 IEM_MC_ARG(PCRTUINT128U, puSrc2, 2); 1080 IEM_MC_ARG(PCRTUINT128U, puSrc3, 3); 1081 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 1082 IEM_MC_PREPARE_AVX_USAGE(); 1083 IEM_MC_REF_XREG_U128(puDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1084 IEM_MC_REF_XREG_U128_CONST(puSrc1, IEM_GET_EFFECTIVE_VVVV(pVCpu)); 1085 IEM_MC_REF_XREG_U128_CONST(puSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); 1086 IEM_MC_REF_XREG_U128_CONST(puSrc3, IEM_GET_IMM8_REG(pVCpu, bOp4)); 1087 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnU128, puDst, puSrc1, puSrc2, puSrc3); 1088 IEM_MC_CLEAR_YREG_128_UP( IEM_GET_MODRM_REG(pVCpu, bRm)); 1089 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1090 IEM_MC_END(); 1091 } 1092 } 1093 else 1094 { 1095 /* 1096 * Register, memory. 1097 */ 1098 if (pVCpu->iem.s.uVexLength) 1099 { 1100 IEM_MC_BEGIN(4, 5, IEM_MC_F_NOT_286_OR_OLDER, 0); 1101 IEM_MC_LOCAL(RTUINT256U, uDst); 1102 IEM_MC_LOCAL(RTUINT256U, uSrc1); 1103 IEM_MC_LOCAL(RTUINT256U, uSrc2); 1104 IEM_MC_LOCAL(RTUINT256U, uSrc3); 1105 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1106 IEM_MC_ARG_LOCAL_REF(PRTUINT256U, puDst, uDst, 0); 1107 IEM_MC_ARG_LOCAL_REF(PCRTUINT256U, puSrc1, uSrc1, 1); 1108 IEM_MC_ARG_LOCAL_REF(PCRTUINT256U, puSrc2, uSrc2, 2); 1109 IEM_MC_ARG_LOCAL_REF(PCRTUINT256U, puSrc3, uSrc3, 3); 1110 1111 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1112 uint8_t bOp4; IEM_OPCODE_GET_NEXT_U8(&bOp4); 1113 1114 IEMOP_HLP_DONE_VEX_DECODING_W0_EX(fAvx); 1115 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 1116 IEM_MC_PREPARE_AVX_USAGE(); 1117 1118 IEM_MC_FETCH_MEM_U256_NO_AC(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1119 IEM_MC_FETCH_YREG_U256(uSrc1, IEM_GET_EFFECTIVE_VVVV(pVCpu)); 1120 IEM_MC_FETCH_YREG_U256(uSrc3, IEM_GET_IMM8_REG(pVCpu, bOp4)); 1121 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnU256, puDst, puSrc1, puSrc2, puSrc3); 1122 IEM_MC_STORE_YREG_U256_ZX_VLMAX( IEM_GET_MODRM_REG(pVCpu, bRm), uDst); 1123 1124 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1125 IEM_MC_END(); 1126 } 1127 else 1128 { 1129 IEM_MC_BEGIN(4, 2, IEM_MC_F_NOT_286_OR_OLDER, 0); 1130 IEM_MC_LOCAL(RTUINT128U, uSrc2); 1131 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1132 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1133 IEM_MC_ARG(PCRTUINT128U, puSrc1, 1); 1134 IEM_MC_ARG_LOCAL_REF(PCRTUINT128U, puSrc2, uSrc2, 2); 1135 IEM_MC_ARG(PCRTUINT128U, puSrc3, 3); 1136 1137 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1138 uint8_t bOp4; IEM_OPCODE_GET_NEXT_U8(&bOp4); 1139 1140 IEMOP_HLP_DONE_VEX_DECODING_W0_EX(fAvx); 1141 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 1142 IEM_MC_PREPARE_AVX_USAGE(); 1143 1144 IEM_MC_FETCH_MEM_U128_NO_AC(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1077 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 1078 IEM_MC_PREPARE_AVX_USAGE(); 1079 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1145 1080 IEM_MC_REF_XREG_U128(puDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1081 IEM_MC_ARG(PCRTUINT128U, puSrc1, 1); 1146 1082 IEM_MC_REF_XREG_U128_CONST(puSrc1, IEM_GET_EFFECTIVE_VVVV(pVCpu)); 1083 IEM_MC_ARG(PCRTUINT128U, puSrc2, 2); 1084 IEM_MC_REF_XREG_U128_CONST(puSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); 1085 IEM_MC_ARG(PCRTUINT128U, puSrc3, 3); 1147 1086 IEM_MC_REF_XREG_U128_CONST(puSrc3, IEM_GET_IMM8_REG(pVCpu, bOp4)); 1148 1087 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnU128, puDst, puSrc1, puSrc2, puSrc3); 1149 1088 IEM_MC_CLEAR_YREG_128_UP( IEM_GET_MODRM_REG(pVCpu, bRm)); 1089 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1090 IEM_MC_END(); 1091 } 1092 } 1093 else 1094 { 1095 /* 1096 * Register, memory. 1097 */ 1098 if (pVCpu->iem.s.uVexLength) 1099 { 1100 IEM_MC_BEGIN(4, 5, IEM_MC_F_NOT_286_OR_OLDER, 0); 1101 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1102 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1103 uint8_t bOp4; IEM_OPCODE_GET_NEXT_U8(&bOp4); 1104 IEMOP_HLP_DONE_VEX_DECODING_W0_EX(fAvx); 1105 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 1106 IEM_MC_PREPARE_AVX_USAGE(); 1107 1108 IEM_MC_LOCAL(RTUINT256U, uSrc2); 1109 IEM_MC_ARG_LOCAL_REF(PCRTUINT256U, puSrc2, uSrc2, 2); 1110 IEM_MC_FETCH_MEM_U256_NO_AC(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1111 1112 IEM_MC_LOCAL(RTUINT256U, uSrc1); 1113 IEM_MC_FETCH_YREG_U256(uSrc1, IEM_GET_EFFECTIVE_VVVV(pVCpu)); 1114 IEM_MC_ARG_LOCAL_REF(PCRTUINT256U, puSrc1, uSrc1, 1); 1115 IEM_MC_LOCAL(RTUINT256U, uSrc3); 1116 IEM_MC_ARG_LOCAL_REF(PCRTUINT256U, puSrc3, uSrc3, 3); 1117 IEM_MC_FETCH_YREG_U256(uSrc3, IEM_GET_IMM8_REG(pVCpu, bOp4)); 1118 IEM_MC_LOCAL(RTUINT256U, uDst); 1119 IEM_MC_ARG_LOCAL_REF(PRTUINT256U, puDst, uDst, 0); 1120 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnU256, puDst, puSrc1, puSrc2, puSrc3); 1121 IEM_MC_STORE_YREG_U256_ZX_VLMAX( IEM_GET_MODRM_REG(pVCpu, bRm), uDst); 1122 1123 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1124 IEM_MC_END(); 1125 } 1126 else 1127 { 1128 IEM_MC_BEGIN(4, 2, IEM_MC_F_NOT_286_OR_OLDER, 0); 1129 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1130 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1131 uint8_t bOp4; IEM_OPCODE_GET_NEXT_U8(&bOp4); 1132 IEMOP_HLP_DONE_VEX_DECODING_W0_EX(fAvx); 1133 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 1134 IEM_MC_PREPARE_AVX_USAGE(); 1135 1136 IEM_MC_LOCAL(RTUINT128U, uSrc2); 1137 IEM_MC_ARG_LOCAL_REF(PCRTUINT128U, puSrc2, uSrc2, 2); 1138 IEM_MC_FETCH_MEM_U128_NO_AC(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1139 1140 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1141 IEM_MC_REF_XREG_U128(puDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1142 IEM_MC_ARG(PCRTUINT128U, puSrc1, 1); 1143 IEM_MC_REF_XREG_U128_CONST(puSrc1, IEM_GET_EFFECTIVE_VVVV(pVCpu)); 1144 IEM_MC_ARG(PCRTUINT128U, puSrc3, 3); 1145 IEM_MC_REF_XREG_U128_CONST(puSrc3, IEM_GET_IMM8_REG(pVCpu, bOp4)); 1146 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnU128, puDst, puSrc1, puSrc2, puSrc3); 1147 IEM_MC_CLEAR_YREG_128_UP( IEM_GET_MODRM_REG(pVCpu, bRm)); 1150 1148 1151 1149 IEM_MC_ADVANCE_RIP_AND_FINISH();
Note:
See TracChangeset
for help on using the changeset viewer.