Changeset 100591 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Jul 15, 2023 1:20:13 AM (17 months ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r100277 r100591 4931 4931 * @param pVCpu The cross context virtual CPU structure of the calling thread. 4932 4932 * @param pResult The FPU operation result to push. 4933 */ 4934 void iemFpuPushResult(PVMCPUCC pVCpu, PIEMFPURESULT pResult) RT_NOEXCEPT 4933 * @param uFpuOpcode The FPU opcode value. 4934 */ 4935 void iemFpuPushResult(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint16_t uFpuOpcode) RT_NOEXCEPT 4935 4936 { 4936 4937 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 4937 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);4938 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 4938 4939 iemFpuMaybePushResult(pVCpu, pResult, pFpuCtx); 4939 4940 } … … 4948 4949 * @param iEffSeg The effective segment register. 4949 4950 * @param GCPtrEff The effective address relative to @a iEffSeg. 4950 */ 4951 void iemFpuPushResultWithMemOp(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iEffSeg, RTGCPTR GCPtrEff) RT_NOEXCEPT 4951 * @param uFpuOpcode The FPU opcode value. 4952 */ 4953 void iemFpuPushResultWithMemOp(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iEffSeg, RTGCPTR GCPtrEff, 4954 uint16_t uFpuOpcode) RT_NOEXCEPT 4952 4955 { 4953 4956 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 4954 4957 iemFpuUpdateDP(pVCpu, pFpuCtx, iEffSeg, GCPtrEff); 4955 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);4958 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 4956 4959 iemFpuMaybePushResult(pVCpu, pResult, pFpuCtx); 4957 4960 } … … 4964 4967 * @param pVCpu The cross context virtual CPU structure of the calling thread. 4965 4968 * @param pResult The FPU operation result to store and push. 4966 */ 4967 void iemFpuPushResultTwo(PVMCPUCC pVCpu, PIEMFPURESULTTWO pResult) RT_NOEXCEPT 4969 * @param uFpuOpcode The FPU opcode value. 4970 */ 4971 void iemFpuPushResultTwo(PVMCPUCC pVCpu, PIEMFPURESULTTWO pResult, uint16_t uFpuOpcode) RT_NOEXCEPT 4968 4972 { 4969 4973 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 4970 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);4974 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 4971 4975 4972 4976 /* Update FSW and bail if there are pending exceptions afterwards. */ … … 5023 5027 * @param pResult The result to store. 5024 5028 * @param iStReg Which FPU register to store it in. 5025 */ 5026 void iemFpuStoreResult(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iStReg) RT_NOEXCEPT 5029 * @param uFpuOpcode The FPU opcode value. 5030 */ 5031 void iemFpuStoreResult(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iStReg, uint16_t uFpuOpcode) RT_NOEXCEPT 5027 5032 { 5028 5033 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5029 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5034 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5030 5035 iemFpuStoreResultOnly(pVCpu, pFpuCtx, pResult, iStReg); 5031 5036 } … … 5039 5044 * @param pResult The result to store. 5040 5045 * @param iStReg Which FPU register to store it in. 5041 */ 5042 void iemFpuStoreResultThenPop(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iStReg) RT_NOEXCEPT 5046 * @param uFpuOpcode The FPU opcode value. 5047 */ 5048 void iemFpuStoreResultThenPop(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iStReg, uint16_t uFpuOpcode) RT_NOEXCEPT 5043 5049 { 5044 5050 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5045 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5051 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5046 5052 iemFpuStoreResultOnly(pVCpu, pFpuCtx, pResult, iStReg); 5047 5053 iemFpuMaybePopOne(pFpuCtx); … … 5058 5064 * @param iEffSeg The effective memory operand selector register. 5059 5065 * @param GCPtrEff The effective memory operand offset. 5066 * @param uFpuOpcode The FPU opcode value. 5060 5067 */ 5061 5068 void iemFpuStoreResultWithMemOp(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iStReg, 5062 uint8_t iEffSeg, RTGCPTR GCPtrEff ) RT_NOEXCEPT5069 uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT 5063 5070 { 5064 5071 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5065 5072 iemFpuUpdateDP(pVCpu, pFpuCtx, iEffSeg, GCPtrEff); 5066 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5073 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5067 5074 iemFpuStoreResultOnly(pVCpu, pFpuCtx, pResult, iStReg); 5068 5075 } … … 5078 5085 * @param iEffSeg The effective memory operand selector register. 5079 5086 * @param GCPtrEff The effective memory operand offset. 5087 * @param uFpuOpcode The FPU opcode value. 5080 5088 */ 5081 5089 void iemFpuStoreResultWithMemOpThenPop(PVMCPUCC pVCpu, PIEMFPURESULT pResult, 5082 uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff ) RT_NOEXCEPT5090 uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT 5083 5091 { 5084 5092 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5085 5093 iemFpuUpdateDP(pVCpu, pFpuCtx, iEffSeg, GCPtrEff); 5086 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5094 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5087 5095 iemFpuStoreResultOnly(pVCpu, pFpuCtx, pResult, iStReg); 5088 5096 iemFpuMaybePopOne(pFpuCtx); … … 5094 5102 * 5095 5103 * @param pVCpu The cross context virtual CPU structure of the calling thread. 5096 */ 5097 void iemFpuUpdateOpcodeAndIp(PVMCPUCC pVCpu) RT_NOEXCEPT 5104 * @param uFpuOpcode The FPU opcode value. 5105 */ 5106 void iemFpuUpdateOpcodeAndIp(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT 5098 5107 { 5099 5108 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5100 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5109 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5101 5110 } 5102 5111 … … 5107 5116 * @param pVCpu The cross context virtual CPU structure of the calling thread. 5108 5117 * @param u16FSW The FSW from the current instruction. 5109 */ 5110 void iemFpuUpdateFSW(PVMCPUCC pVCpu, uint16_t u16FSW) RT_NOEXCEPT 5118 * @param uFpuOpcode The FPU opcode value. 5119 */ 5120 void iemFpuUpdateFSW(PVMCPUCC pVCpu, uint16_t u16FSW, uint16_t uFpuOpcode) RT_NOEXCEPT 5111 5121 { 5112 5122 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5113 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5123 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5114 5124 iemFpuUpdateFSWOnly(pVCpu, pFpuCtx, u16FSW); 5115 5125 } … … 5121 5131 * @param pVCpu The cross context virtual CPU structure of the calling thread. 5122 5132 * @param u16FSW The FSW from the current instruction. 5123 */ 5124 void iemFpuUpdateFSWThenPop(PVMCPUCC pVCpu, uint16_t u16FSW) RT_NOEXCEPT 5133 * @param uFpuOpcode The FPU opcode value. 5134 */ 5135 void iemFpuUpdateFSWThenPop(PVMCPUCC pVCpu, uint16_t u16FSW, uint16_t uFpuOpcode) RT_NOEXCEPT 5125 5136 { 5126 5137 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5127 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5138 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5128 5139 iemFpuUpdateFSWOnly(pVCpu, pFpuCtx, u16FSW); 5129 5140 iemFpuMaybePopOne(pFpuCtx); … … 5138 5149 * @param iEffSeg The effective memory operand selector register. 5139 5150 * @param GCPtrEff The effective memory operand offset. 5140 */ 5141 void iemFpuUpdateFSWWithMemOp(PVMCPUCC pVCpu, uint16_t u16FSW, uint8_t iEffSeg, RTGCPTR GCPtrEff) RT_NOEXCEPT 5151 * @param uFpuOpcode The FPU opcode value. 5152 */ 5153 void iemFpuUpdateFSWWithMemOp(PVMCPUCC pVCpu, uint16_t u16FSW, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT 5142 5154 { 5143 5155 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5144 5156 iemFpuUpdateDP(pVCpu, pFpuCtx, iEffSeg, GCPtrEff); 5145 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5157 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5146 5158 iemFpuUpdateFSWOnly(pVCpu, pFpuCtx, u16FSW); 5147 5159 } … … 5153 5165 * @param pVCpu The cross context virtual CPU structure of the calling thread. 5154 5166 * @param u16FSW The FSW from the current instruction. 5155 */ 5156 void iemFpuUpdateFSWThenPopPop(PVMCPUCC pVCpu, uint16_t u16FSW) RT_NOEXCEPT 5167 * @param uFpuOpcode The FPU opcode value. 5168 */ 5169 void iemFpuUpdateFSWThenPopPop(PVMCPUCC pVCpu, uint16_t u16FSW, uint16_t uFpuOpcode) RT_NOEXCEPT 5157 5170 { 5158 5171 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5159 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5172 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5160 5173 iemFpuUpdateFSWOnly(pVCpu, pFpuCtx, u16FSW); 5161 5174 iemFpuMaybePopOne(pFpuCtx); … … 5171 5184 * @param iEffSeg The effective memory operand selector register. 5172 5185 * @param GCPtrEff The effective memory operand offset. 5173 */ 5174 void iemFpuUpdateFSWWithMemOpThenPop(PVMCPUCC pVCpu, uint16_t u16FSW, uint8_t iEffSeg, RTGCPTR GCPtrEff) RT_NOEXCEPT 5186 * @param uFpuOpcode The FPU opcode value. 5187 */ 5188 void iemFpuUpdateFSWWithMemOpThenPop(PVMCPUCC pVCpu, uint16_t u16FSW, uint8_t iEffSeg, RTGCPTR GCPtrEff, 5189 uint16_t uFpuOpcode) RT_NOEXCEPT 5175 5190 { 5176 5191 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5177 5192 iemFpuUpdateDP(pVCpu, pFpuCtx, iEffSeg, GCPtrEff); 5178 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5193 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5179 5194 iemFpuUpdateFSWOnly(pVCpu, pFpuCtx, u16FSW); 5180 5195 iemFpuMaybePopOne(pFpuCtx); … … 5222 5237 * with QNaN if \#IS is not masked. Specify 5223 5238 * UINT8_MAX if none (like for fcom). 5224 */ 5225 void iemFpuStackUnderflow(PVMCPUCC pVCpu, uint8_t iStReg) RT_NOEXCEPT 5239 * @param uFpuOpcode The FPU opcode value. 5240 */ 5241 void iemFpuStackUnderflow(PVMCPUCC pVCpu, uint8_t iStReg, uint16_t uFpuOpcode) RT_NOEXCEPT 5226 5242 { 5227 5243 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5228 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5244 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5229 5245 iemFpuStackUnderflowOnly(pVCpu, pFpuCtx, iStReg); 5230 5246 } 5231 5247 5232 5248 5233 void iemFpuStackUnderflowWithMemOp(PVMCPUCC pVCpu, uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff ) RT_NOEXCEPT5249 void iemFpuStackUnderflowWithMemOp(PVMCPUCC pVCpu, uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT 5234 5250 { 5235 5251 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5236 5252 iemFpuUpdateDP(pVCpu, pFpuCtx, iEffSeg, GCPtrEff); 5237 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5253 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5238 5254 iemFpuStackUnderflowOnly(pVCpu, pFpuCtx, iStReg); 5239 5255 } 5240 5256 5241 5257 5242 void iemFpuStackUnderflowThenPop(PVMCPUCC pVCpu, uint8_t iStReg ) RT_NOEXCEPT5258 void iemFpuStackUnderflowThenPop(PVMCPUCC pVCpu, uint8_t iStReg, uint16_t uFpuOpcode) RT_NOEXCEPT 5243 5259 { 5244 5260 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5245 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5261 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5246 5262 iemFpuStackUnderflowOnly(pVCpu, pFpuCtx, iStReg); 5247 5263 iemFpuMaybePopOne(pFpuCtx); … … 5249 5265 5250 5266 5251 void iemFpuStackUnderflowWithMemOpThenPop(PVMCPUCC pVCpu, uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff) RT_NOEXCEPT 5267 void iemFpuStackUnderflowWithMemOpThenPop(PVMCPUCC pVCpu, uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff, 5268 uint16_t uFpuOpcode) RT_NOEXCEPT 5252 5269 { 5253 5270 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5254 5271 iemFpuUpdateDP(pVCpu, pFpuCtx, iEffSeg, GCPtrEff); 5255 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5272 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5256 5273 iemFpuStackUnderflowOnly(pVCpu, pFpuCtx, iStReg); 5257 5274 iemFpuMaybePopOne(pFpuCtx); … … 5259 5276 5260 5277 5261 void iemFpuStackUnderflowThenPopPop(PVMCPUCC pVCpu ) RT_NOEXCEPT5278 void iemFpuStackUnderflowThenPopPop(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT 5262 5279 { 5263 5280 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5264 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5281 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5265 5282 iemFpuStackUnderflowOnly(pVCpu, pFpuCtx, UINT8_MAX); 5266 5283 iemFpuMaybePopOne(pFpuCtx); … … 5269 5286 5270 5287 5271 void iemFpuStackPushUnderflow(PVMCPUCC pVCpu ) RT_NOEXCEPT5288 void iemFpuStackPushUnderflow(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT 5272 5289 { 5273 5290 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5274 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5291 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5275 5292 5276 5293 if (pFpuCtx->FCW & X86_FCW_IM) … … 5296 5313 5297 5314 5298 void iemFpuStackPushUnderflowTwo(PVMCPUCC pVCpu ) RT_NOEXCEPT5315 void iemFpuStackPushUnderflowTwo(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT 5299 5316 { 5300 5317 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5301 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5318 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5302 5319 5303 5320 if (pFpuCtx->FCW & X86_FCW_IM) … … 5360 5377 * @param pVCpu The cross context virtual CPU structure of the calling thread. 5361 5378 */ 5362 void iemFpuStackPushOverflow(PVMCPUCC pVCpu ) RT_NOEXCEPT5379 void iemFpuStackPushOverflow(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT 5363 5380 { 5364 5381 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5365 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5382 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5366 5383 iemFpuStackPushOverflowOnly(pVCpu, pFpuCtx); 5367 5384 } … … 5375 5392 * @param GCPtrEff The effective memory operand offset. 5376 5393 */ 5377 void iemFpuStackPushOverflowWithMemOp(PVMCPUCC pVCpu, uint8_t iEffSeg, RTGCPTR GCPtrEff ) RT_NOEXCEPT5394 void iemFpuStackPushOverflowWithMemOp(PVMCPUCC pVCpu, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT 5378 5395 { 5379 5396 PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87; 5380 5397 iemFpuUpdateDP(pVCpu, pFpuCtx, iEffSeg, GCPtrEff); 5381 iemFpuUpdateOpcodeAndIpWorker (pVCpu, pFpuCtx);5398 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode); 5382 5399 iemFpuStackPushOverflowOnly(pVCpu, pFpuCtx); 5383 5400 } -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h
r100231 r100591 8061 8061 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, IEM_GET_MODRM_RM_8(bRm)) { 8062 8062 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pFpuRes, pr80Value1, pr80Value2); 8063 IEM_MC_STORE_FPU_RESULT(FpuRes, 0 );8063 IEM_MC_STORE_FPU_RESULT(FpuRes, 0, pVCpu->iem.s.uFpuOpcode); 8064 8064 } IEM_MC_ELSE() { 8065 IEM_MC_FPU_STACK_UNDERFLOW(0 );8065 IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode); 8066 8066 } IEM_MC_ENDIF(); 8067 8067 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8093 8093 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, IEM_GET_MODRM_RM_8(bRm)) { 8094 8094 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pu16Fsw, pr80Value1, pr80Value2); 8095 IEM_MC_UPDATE_FSW(u16Fsw );8095 IEM_MC_UPDATE_FSW(u16Fsw, pVCpu->iem.s.uFpuOpcode); 8096 8096 } IEM_MC_ELSE() { 8097 IEM_MC_FPU_STACK_UNDERFLOW(UINT8_MAX );8097 IEM_MC_FPU_STACK_UNDERFLOW(UINT8_MAX, pVCpu->iem.s.uFpuOpcode); 8098 8098 } IEM_MC_ENDIF(); 8099 8099 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8125 8125 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, IEM_GET_MODRM_RM_8(bRm)) { 8126 8126 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pu16Fsw, pr80Value1, pr80Value2); 8127 IEM_MC_UPDATE_FSW_THEN_POP(u16Fsw );8127 IEM_MC_UPDATE_FSW_THEN_POP(u16Fsw, pVCpu->iem.s.uFpuOpcode); 8128 8128 } IEM_MC_ELSE() { 8129 IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(UINT8_MAX );8129 IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(UINT8_MAX, pVCpu->iem.s.uFpuOpcode); 8130 8130 } IEM_MC_ENDIF(); 8131 8131 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8226 8226 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 8227 8227 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pFpuRes, pr80Value1, pr32Val2); 8228 IEM_MC_STORE_FPU_RESULT(FpuRes, 0 );8228 IEM_MC_STORE_FPU_RESULT(FpuRes, 0, pVCpu->iem.s.uFpuOpcode); 8229 8229 } IEM_MC_ELSE() { 8230 IEM_MC_FPU_STACK_UNDERFLOW(0 );8230 IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode); 8231 8231 } IEM_MC_ENDIF(); 8232 8232 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8275 8275 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 8276 8276 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fcom_r80_by_r32, pu16Fsw, pr80Value1, pr32Val2); 8277 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );8277 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 8278 8278 } IEM_MC_ELSE() { 8279 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );8279 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 8280 8280 } IEM_MC_ENDIF(); 8281 8281 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8308 8308 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 8309 8309 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fcom_r80_by_r32, pu16Fsw, pr80Value1, pr32Val2); 8310 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );8310 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 8311 8311 } IEM_MC_ELSE() { 8312 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );8312 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 8313 8313 } IEM_MC_ENDIF(); 8314 8314 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8410 8410 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 8411 8411 IEM_MC_FETCH_MEM_R32(r32Val, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 8412 8413 8412 IEM_MC_PREPARE_FPU_USAGE(); 8414 8413 IEM_MC_IF_FPUREG_IS_EMPTY(7) { 8415 8414 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fld_r80_from_r32, pFpuRes, pr32Val); 8416 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );8415 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 8417 8416 } IEM_MC_ELSE() { 8418 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc );8417 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 8419 8418 } IEM_MC_ENDIF(); 8420 8419 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8445 8444 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r32, pu16Fsw, pr32Dst, pr80Value); 8446 8445 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr32Dst, IEM_ACCESS_DATA_W, u16Fsw); 8447 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst );8446 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 8448 8447 } IEM_MC_ELSE() { 8449 8448 IEM_MC_IF_FCW_IM() { … … 8451 8450 IEM_MC_MEM_COMMIT_AND_UNMAP(pr32Dst, IEM_ACCESS_DATA_W); 8452 8451 } IEM_MC_ENDIF(); 8453 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst );8452 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 8454 8453 } IEM_MC_ENDIF(); 8455 8454 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8480 8479 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r32, pu16Fsw, pr32Dst, pr80Value); 8481 8480 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr32Dst, IEM_ACCESS_DATA_W, u16Fsw); 8482 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst );8481 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 8483 8482 } IEM_MC_ELSE() { 8484 8483 IEM_MC_IF_FCW_IM() { … … 8486 8485 IEM_MC_MEM_COMMIT_AND_UNMAP(pr32Dst, IEM_ACCESS_DATA_W); 8487 8486 } IEM_MC_ENDIF(); 8488 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst );8487 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 8489 8488 } IEM_MC_ENDIF(); 8490 8489 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8577 8576 /** @todo Testcase: looks like FNOP leaves FOP alone but updates FPUIP. Could be 8578 8577 * intel optimizations. Investigate. */ 8579 IEM_MC_UPDATE_FPU_OPCODE_IP( );8578 IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode); 8580 8579 IEM_MC_ADVANCE_RIP_AND_FINISH(); /* C0-C3 are documented as undefined, we leave them unmodified. */ 8581 8580 IEM_MC_END(); … … 8600 8599 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, IEM_GET_MODRM_RM_8(bRm)) { 8601 8600 IEM_MC_SET_FPU_RESULT(FpuRes, 0 /*FSW*/, pr80Value); 8602 IEM_MC_PUSH_FPU_RESULT(FpuRes );8601 IEM_MC_PUSH_FPU_RESULT(FpuRes, pVCpu->iem.s.uFpuOpcode); 8603 8602 } IEM_MC_ELSE() { 8604 IEM_MC_FPU_STACK_PUSH_UNDERFLOW( );8603 IEM_MC_FPU_STACK_PUSH_UNDERFLOW(pVCpu->iem.s.uFpuOpcode); 8605 8604 } IEM_MC_ENDIF(); 8606 8605 … … 8631 8630 IEM_MC_SET_FPU_RESULT(FpuRes, X86_FSW_C1, pr80Value2); 8632 8631 IEM_MC_STORE_FPUREG_R80_SRC_REF(IEM_GET_MODRM_RM_8(bRm), pr80Value1); 8633 IEM_MC_STORE_FPU_RESULT(FpuRes, 0 );8632 IEM_MC_STORE_FPU_RESULT(FpuRes, 0, pVCpu->iem.s.uFpuOpcode); 8634 8633 } IEM_MC_ELSE() { 8635 8634 IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_FPU, iemCImpl_fxch_underflow, iStReg, uFpuOpcode); … … 8658 8657 IEM_MC_PREPARE_FPU_USAGE(); 8659 8658 IEM_MC_IF_FPUREG_NOT_EMPTY(0) { 8660 IEM_MC_UPDATE_FSW_THEN_POP(u16Fsw );8659 IEM_MC_UPDATE_FSW_THEN_POP(u16Fsw, pVCpu->iem.s.uFpuOpcode); 8661 8660 } IEM_MC_ELSE() { 8662 IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(0 );8661 IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(0, pVCpu->iem.s.uFpuOpcode); 8663 8662 } IEM_MC_ENDIF(); 8664 8663 … … 8677 8676 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 8678 8677 IEM_MC_SET_FPU_RESULT(FpuRes, 0 /*FSW*/, pr80Value); 8679 IEM_MC_STORE_FPU_RESULT_THEN_POP(FpuRes, iDstReg );8678 IEM_MC_STORE_FPU_RESULT_THEN_POP(FpuRes, iDstReg, pVCpu->iem.s.uFpuOpcode); 8680 8679 } IEM_MC_ELSE() { 8681 IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(iDstReg );8680 IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(iDstReg, pVCpu->iem.s.uFpuOpcode); 8682 8681 } IEM_MC_ENDIF(); 8683 8682 … … 8708 8707 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 8709 8708 IEM_MC_CALL_FPU_AIMPL_2(pfnAImpl, pFpuRes, pr80Value); 8710 IEM_MC_STORE_FPU_RESULT(FpuRes, 0 );8709 IEM_MC_STORE_FPU_RESULT(FpuRes, 0, pVCpu->iem.s.uFpuOpcode); 8711 8710 } IEM_MC_ELSE() { 8712 IEM_MC_FPU_STACK_UNDERFLOW(0 );8711 IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode); 8713 8712 } IEM_MC_ENDIF(); 8714 8713 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8750 8749 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 8751 8750 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_ftst_r80, pu16Fsw, pr80Value); 8752 IEM_MC_UPDATE_FSW(u16Fsw );8751 IEM_MC_UPDATE_FSW(u16Fsw, pVCpu->iem.s.uFpuOpcode); 8753 8752 } IEM_MC_ELSE() { 8754 IEM_MC_FPU_STACK_UNDERFLOW(UINT8_MAX );8753 IEM_MC_FPU_STACK_UNDERFLOW(UINT8_MAX, pVCpu->iem.s.uFpuOpcode); 8755 8754 } IEM_MC_ENDIF(); 8756 8755 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8776 8775 IEM_MC_REF_FPUREG(pr80Value, 0); 8777 8776 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fxam_r80, pu16Fsw, pr80Value); 8778 IEM_MC_UPDATE_FSW(u16Fsw );8777 IEM_MC_UPDATE_FSW(u16Fsw, pVCpu->iem.s.uFpuOpcode); 8779 8778 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8780 8779 … … 8801 8800 IEM_MC_IF_FPUREG_IS_EMPTY(7) { 8802 8801 IEM_MC_CALL_FPU_AIMPL_1(pfnAImpl, pFpuRes); 8803 IEM_MC_PUSH_FPU_RESULT(FpuRes );8802 IEM_MC_PUSH_FPU_RESULT(FpuRes, pVCpu->iem.s.uFpuOpcode); 8804 8803 } IEM_MC_ELSE() { 8805 IEM_MC_FPU_STACK_PUSH_OVERFLOW( );8804 IEM_MC_FPU_STACK_PUSH_OVERFLOW(pVCpu->iem.s.uFpuOpcode); 8806 8805 } IEM_MC_ENDIF(); 8807 8806 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8903 8902 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, IEM_GET_MODRM_RM_8(bRm), pr80Value2, 0) { 8904 8903 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pFpuRes, pr80Value1, pr80Value2); 8905 IEM_MC_STORE_FPU_RESULT_THEN_POP(FpuRes, IEM_GET_MODRM_RM_8(bRm) );8904 IEM_MC_STORE_FPU_RESULT_THEN_POP(FpuRes, IEM_GET_MODRM_RM_8(bRm), pVCpu->iem.s.uFpuOpcode); 8906 8905 } IEM_MC_ELSE() { 8907 IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(IEM_GET_MODRM_RM_8(bRm) );8906 IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(IEM_GET_MODRM_RM_8(bRm), pVCpu->iem.s.uFpuOpcode); 8908 8907 } IEM_MC_ENDIF(); 8909 8908 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8941 8940 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 8942 8941 IEM_MC_CALL_FPU_AIMPL_2(pfnAImpl, pFpuResTwo, pr80Value); 8943 IEM_MC_PUSH_FPU_RESULT_TWO(FpuResTwo );8942 IEM_MC_PUSH_FPU_RESULT_TWO(FpuResTwo, pVCpu->iem.s.uFpuOpcode); 8944 8943 } IEM_MC_ELSE() { 8945 IEM_MC_FPU_STACK_PUSH_UNDERFLOW_TWO( );8944 IEM_MC_FPU_STACK_PUSH_UNDERFLOW_TWO(pVCpu->iem.s.uFpuOpcode); 8946 8945 } IEM_MC_ENDIF(); 8947 8946 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 8999 8998 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 9000 8999 IEM_MC_FPU_STACK_DEC_TOP(); 9001 IEM_MC_UPDATE_FSW_CONST(0 );9000 IEM_MC_UPDATE_FSW_CONST(0, pVCpu->iem.s.uFpuOpcode); 9002 9001 9003 9002 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9022 9021 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 9023 9022 IEM_MC_FPU_STACK_INC_TOP(); 9024 IEM_MC_UPDATE_FSW_CONST(0 );9023 IEM_MC_UPDATE_FSW_CONST(0, pVCpu->iem.s.uFpuOpcode); 9025 9024 9026 9025 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9194 9193 IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN); 9195 9194 } IEM_MC_ENDIF(); 9196 IEM_MC_UPDATE_FPU_OPCODE_IP( );9195 IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode); 9197 9196 } IEM_MC_ELSE() { 9198 IEM_MC_FPU_STACK_UNDERFLOW(0 );9197 IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode); 9199 9198 } IEM_MC_ENDIF(); 9200 9199 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9221 9220 IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN); 9222 9221 } IEM_MC_ENDIF(); 9223 IEM_MC_UPDATE_FPU_OPCODE_IP( );9222 IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode); 9224 9223 } IEM_MC_ELSE() { 9225 IEM_MC_FPU_STACK_UNDERFLOW(0 );9224 IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode); 9226 9225 } IEM_MC_ENDIF(); 9227 9226 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9248 9247 IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN); 9249 9248 } IEM_MC_ENDIF(); 9250 IEM_MC_UPDATE_FPU_OPCODE_IP( );9249 IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode); 9251 9250 } IEM_MC_ELSE() { 9252 IEM_MC_FPU_STACK_UNDERFLOW(0 );9251 IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode); 9253 9252 } IEM_MC_ENDIF(); 9254 9253 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9275 9274 IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN); 9276 9275 } IEM_MC_ENDIF(); 9277 IEM_MC_UPDATE_FPU_OPCODE_IP( );9276 IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode); 9278 9277 } IEM_MC_ELSE() { 9279 IEM_MC_FPU_STACK_UNDERFLOW(0 );9278 IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode); 9280 9279 } IEM_MC_ENDIF(); 9281 9280 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9307 9306 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, 1) { 9308 9307 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pu16Fsw, pr80Value1, pr80Value2); 9309 IEM_MC_UPDATE_FSW_THEN_POP_POP(u16Fsw );9308 IEM_MC_UPDATE_FSW_THEN_POP_POP(u16Fsw, pVCpu->iem.s.uFpuOpcode); 9310 9309 } IEM_MC_ELSE() { 9311 IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP_POP( );9310 IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP_POP(pVCpu->iem.s.uFpuOpcode); 9312 9311 } IEM_MC_ENDIF(); 9313 9312 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9352 9351 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 9353 9352 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pFpuRes, pr80Value1, pi32Val2); 9354 IEM_MC_STORE_FPU_RESULT(FpuRes, 0 );9353 IEM_MC_STORE_FPU_RESULT(FpuRes, 0, pVCpu->iem.s.uFpuOpcode); 9355 9354 } IEM_MC_ELSE() { 9356 IEM_MC_FPU_STACK_UNDERFLOW(0 );9355 IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode); 9357 9356 } IEM_MC_ENDIF(); 9358 9357 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9401 9400 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 9402 9401 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_ficom_r80_by_i32, pu16Fsw, pr80Value1, pi32Val2); 9403 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );9402 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 9404 9403 } IEM_MC_ELSE() { 9405 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );9404 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 9406 9405 } IEM_MC_ENDIF(); 9407 9406 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9434 9433 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 9435 9434 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_ficom_r80_by_i32, pu16Fsw, pr80Value1, pi32Val2); 9436 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );9435 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 9437 9436 } IEM_MC_ELSE() { 9438 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );9437 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 9439 9438 } IEM_MC_ENDIF(); 9440 9439 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9541 9540 IEM_MC_IF_FPUREG_IS_EMPTY(7) { 9542 9541 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fild_r80_from_i32, pFpuRes, pi32Val); 9543 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );9542 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 9544 9543 } IEM_MC_ELSE() { 9545 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc );9544 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 9546 9545 } IEM_MC_ENDIF(); 9547 9546 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9572 9571 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fistt_r80_to_i32, pu16Fsw, pi32Dst, pr80Value); 9573 9572 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi32Dst, IEM_ACCESS_DATA_W, u16Fsw); 9574 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst );9573 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 9575 9574 } IEM_MC_ELSE() { 9576 9575 IEM_MC_IF_FCW_IM() { … … 9578 9577 IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W); 9579 9578 } IEM_MC_ENDIF(); 9580 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst );9579 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 9581 9580 } IEM_MC_ENDIF(); 9582 9581 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9607 9606 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i32, pu16Fsw, pi32Dst, pr80Value); 9608 9607 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi32Dst, IEM_ACCESS_DATA_W, u16Fsw); 9609 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst );9608 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 9610 9609 } IEM_MC_ELSE() { 9611 9610 IEM_MC_IF_FCW_IM() { … … 9613 9612 IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W); 9614 9613 } IEM_MC_ENDIF(); 9615 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst );9614 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 9616 9615 } IEM_MC_ENDIF(); 9617 9616 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9642 9641 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i32, pu16Fsw, pi32Dst, pr80Value); 9643 9642 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi32Dst, IEM_ACCESS_DATA_W, u16Fsw); 9644 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst );9643 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 9645 9644 } IEM_MC_ELSE() { 9646 9645 IEM_MC_IF_FCW_IM() { … … 9648 9647 IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W); 9649 9648 } IEM_MC_ENDIF(); 9650 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst );9649 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 9651 9650 } IEM_MC_ENDIF(); 9652 9651 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9678 9677 IEM_MC_IF_FPUREG_IS_EMPTY(7) { 9679 9678 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fld_r80_from_r80, pFpuRes, pr80Val); 9680 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );9679 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 9681 9680 } IEM_MC_ELSE() { 9682 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc );9681 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 9683 9682 } IEM_MC_ENDIF(); 9684 9683 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9709 9708 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r80, pu16Fsw, pr80Dst, pr80Value); 9710 9709 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr80Dst, IEM_ACCESS_DATA_W, u16Fsw); 9711 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst );9710 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 9712 9711 } IEM_MC_ELSE() { 9713 9712 IEM_MC_IF_FCW_IM() { … … 9715 9714 IEM_MC_MEM_COMMIT_AND_UNMAP(pr80Dst, IEM_ACCESS_DATA_W); 9716 9715 } IEM_MC_ENDIF(); 9717 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst );9716 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 9718 9717 } IEM_MC_ENDIF(); 9719 9718 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9740 9739 IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN); 9741 9740 } IEM_MC_ENDIF(); 9742 IEM_MC_UPDATE_FPU_OPCODE_IP( );9741 IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode); 9743 9742 } IEM_MC_ELSE() { 9744 IEM_MC_FPU_STACK_UNDERFLOW(0 );9743 IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode); 9745 9744 } IEM_MC_ENDIF(); 9746 9745 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9767 9766 IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN); 9768 9767 } IEM_MC_ENDIF(); 9769 IEM_MC_UPDATE_FPU_OPCODE_IP( );9768 IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode); 9770 9769 } IEM_MC_ELSE() { 9771 IEM_MC_FPU_STACK_UNDERFLOW(0 );9770 IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode); 9772 9771 } IEM_MC_ENDIF(); 9773 9772 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9794 9793 IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN); 9795 9794 } IEM_MC_ENDIF(); 9796 IEM_MC_UPDATE_FPU_OPCODE_IP( );9795 IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode); 9797 9796 } IEM_MC_ELSE() { 9798 IEM_MC_FPU_STACK_UNDERFLOW(0 );9797 IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode); 9799 9798 } IEM_MC_ENDIF(); 9800 9799 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9821 9820 IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN); 9822 9821 } IEM_MC_ENDIF(); 9823 IEM_MC_UPDATE_FPU_OPCODE_IP( );9822 IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode); 9824 9823 } IEM_MC_ELSE() { 9825 IEM_MC_FPU_STACK_UNDERFLOW(0 );9824 IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode); 9826 9825 } IEM_MC_ENDIF(); 9827 9826 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10004 10003 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, IEM_GET_MODRM_RM_8(bRm), pr80Value2, 0) { 10005 10004 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pFpuRes, pr80Value1, pr80Value2); 10006 IEM_MC_STORE_FPU_RESULT(FpuRes, IEM_GET_MODRM_RM_8(bRm) );10005 IEM_MC_STORE_FPU_RESULT(FpuRes, IEM_GET_MODRM_RM_8(bRm), pVCpu->iem.s.uFpuOpcode); 10007 10006 } IEM_MC_ELSE() { 10008 IEM_MC_FPU_STACK_UNDERFLOW(IEM_GET_MODRM_RM_8(bRm) );10007 IEM_MC_FPU_STACK_UNDERFLOW(IEM_GET_MODRM_RM_8(bRm), pVCpu->iem.s.uFpuOpcode); 10009 10008 } IEM_MC_ENDIF(); 10010 10009 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10088 10087 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Factor1, 0) { 10089 10088 IEM_MC_CALL_FPU_AIMPL_3(pfnImpl, pFpuRes, pr80Factor1, pr64Factor2); 10090 IEM_MC_STORE_FPU_RESULT_MEM_OP(FpuRes, 0, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );10089 IEM_MC_STORE_FPU_RESULT_MEM_OP(FpuRes, 0, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 10091 10090 } IEM_MC_ELSE() { 10092 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(0, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );10091 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(0, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 10093 10092 } IEM_MC_ENDIF(); 10094 10093 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10137 10136 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 10138 10137 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fcom_r80_by_r64, pu16Fsw, pr80Value1, pr64Val2); 10139 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );10138 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 10140 10139 } IEM_MC_ELSE() { 10141 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );10140 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 10142 10141 } IEM_MC_ENDIF(); 10143 10142 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10170 10169 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 10171 10170 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fcom_r80_by_r64, pu16Fsw, pr80Value1, pr64Val2); 10172 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );10171 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 10173 10172 } IEM_MC_ELSE() { 10174 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );10173 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 10175 10174 } IEM_MC_ENDIF(); 10176 10175 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10274 10273 IEM_MC_IF_FPUREG_IS_EMPTY(7) { 10275 10274 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fld_r80_from_r64, pFpuRes, pr64Val); 10276 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );10275 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 10277 10276 } IEM_MC_ELSE() { 10278 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc );10277 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 10279 10278 } IEM_MC_ENDIF(); 10280 10279 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10305 10304 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fistt_r80_to_i64, pu16Fsw, pi64Dst, pr80Value); 10306 10305 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi64Dst, IEM_ACCESS_DATA_W, u16Fsw); 10307 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst );10306 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 10308 10307 } IEM_MC_ELSE() { 10309 10308 IEM_MC_IF_FCW_IM() { … … 10311 10310 IEM_MC_MEM_COMMIT_AND_UNMAP(pi64Dst, IEM_ACCESS_DATA_W); 10312 10311 } IEM_MC_ENDIF(); 10313 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst );10312 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 10314 10313 } IEM_MC_ENDIF(); 10315 10314 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10340 10339 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r64, pu16Fsw, pr64Dst, pr80Value); 10341 10340 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr64Dst, IEM_ACCESS_DATA_W, u16Fsw); 10342 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst );10341 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 10343 10342 } IEM_MC_ELSE() { 10344 10343 IEM_MC_IF_FCW_IM() { … … 10346 10345 IEM_MC_MEM_COMMIT_AND_UNMAP(pr64Dst, IEM_ACCESS_DATA_W); 10347 10346 } IEM_MC_ENDIF(); 10348 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst );10347 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 10349 10348 } IEM_MC_ENDIF(); 10350 10349 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10377 10376 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r64, pu16Fsw, pr64Dst, pr80Value); 10378 10377 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr64Dst, IEM_ACCESS_DATA_W, u16Fsw); 10379 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst );10378 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 10380 10379 } IEM_MC_ELSE() { 10381 10380 IEM_MC_IF_FCW_IM() { … … 10383 10382 IEM_MC_MEM_COMMIT_AND_UNMAP(pr64Dst, IEM_ACCESS_DATA_W); 10384 10383 } IEM_MC_ENDIF(); 10385 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst );10384 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 10386 10385 } IEM_MC_ENDIF(); 10387 10386 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10466 10465 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 10467 10466 IEM_MC_FPU_STACK_FREE(IEM_GET_MODRM_RM_8(bRm)); 10468 IEM_MC_UPDATE_FPU_OPCODE_IP( );10467 IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode); 10469 10468 10470 10469 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10488 10487 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 10489 10488 IEM_MC_SET_FPU_RESULT(FpuRes, 0 /*FSW*/, pr80Value); 10490 IEM_MC_STORE_FPU_RESULT(FpuRes, IEM_GET_MODRM_RM_8(bRm) );10489 IEM_MC_STORE_FPU_RESULT(FpuRes, IEM_GET_MODRM_RM_8(bRm), pVCpu->iem.s.uFpuOpcode); 10491 10490 } IEM_MC_ELSE() { 10492 IEM_MC_FPU_STACK_UNDERFLOW(IEM_GET_MODRM_RM_8(bRm) );10491 IEM_MC_FPU_STACK_UNDERFLOW(IEM_GET_MODRM_RM_8(bRm), pVCpu->iem.s.uFpuOpcode); 10493 10492 } IEM_MC_ENDIF(); 10494 10493 … … 10637 10636 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 10638 10637 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pFpuRes, pr80Value1, pi16Val2); 10639 IEM_MC_STORE_FPU_RESULT(FpuRes, 0 );10638 IEM_MC_STORE_FPU_RESULT(FpuRes, 0, pVCpu->iem.s.uFpuOpcode); 10640 10639 } IEM_MC_ELSE() { 10641 IEM_MC_FPU_STACK_UNDERFLOW(0 );10640 IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode); 10642 10641 } IEM_MC_ENDIF(); 10643 10642 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10686 10685 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 10687 10686 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_ficom_r80_by_i16, pu16Fsw, pr80Value1, pi16Val2); 10688 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );10687 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 10689 10688 } IEM_MC_ELSE() { 10690 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );10689 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 10691 10690 } IEM_MC_ENDIF(); 10692 10691 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10719 10718 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 10720 10719 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_ficom_r80_by_i16, pu16Fsw, pr80Value1, pi16Val2); 10721 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );10720 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 10722 10721 } IEM_MC_ELSE() { 10723 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );10722 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 10724 10723 } IEM_MC_ENDIF(); 10725 10724 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10818 10817 IEM_MC_FPU_STACK_FREE(IEM_GET_MODRM_RM_8(bRm)); 10819 10818 IEM_MC_FPU_STACK_INC_TOP(); 10820 IEM_MC_UPDATE_FPU_OPCODE_IP( );10819 IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode); 10821 10820 10822 10821 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10884 10883 IEM_MC_IF_FPUREG_IS_EMPTY(7) { 10885 10884 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fild_r80_from_i16, pFpuRes, pi16Val); 10886 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );10885 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 10887 10886 } IEM_MC_ELSE() { 10888 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc );10887 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 10889 10888 } IEM_MC_ENDIF(); 10890 10889 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10915 10914 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fistt_r80_to_i16, pu16Fsw, pi16Dst, pr80Value); 10916 10915 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi16Dst, IEM_ACCESS_DATA_W, u16Fsw); 10917 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst );10916 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 10918 10917 } IEM_MC_ELSE() { 10919 10918 IEM_MC_IF_FCW_IM() { … … 10921 10920 IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W); 10922 10921 } IEM_MC_ENDIF(); 10923 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst );10922 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 10924 10923 } IEM_MC_ENDIF(); 10925 10924 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10950 10949 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i16, pu16Fsw, pi16Dst, pr80Value); 10951 10950 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi16Dst, IEM_ACCESS_DATA_W, u16Fsw); 10952 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst );10951 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 10953 10952 } IEM_MC_ELSE() { 10954 10953 IEM_MC_IF_FCW_IM() { … … 10956 10955 IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W); 10957 10956 } IEM_MC_ENDIF(); 10958 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst );10957 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 10959 10958 } IEM_MC_ENDIF(); 10960 10959 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10985 10984 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i16, pu16Fsw, pi16Dst, pr80Value); 10986 10985 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi16Dst, IEM_ACCESS_DATA_W, u16Fsw); 10987 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst );10986 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 10988 10987 } IEM_MC_ELSE() { 10989 10988 IEM_MC_IF_FCW_IM() { … … 10991 10990 IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W); 10992 10991 } IEM_MC_ENDIF(); 10993 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst );10992 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 10994 10993 } IEM_MC_ENDIF(); 10995 10994 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11021 11020 IEM_MC_IF_FPUREG_IS_EMPTY(7) { 11022 11021 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fld_r80_from_d80, pFpuRes, pd80Val); 11023 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );11022 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 11024 11023 } IEM_MC_ELSE() { 11025 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc );11024 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 11026 11025 } IEM_MC_ENDIF(); 11027 11026 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11053 11052 IEM_MC_IF_FPUREG_IS_EMPTY(7) { 11054 11053 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fild_r80_from_i64, pFpuRes, pi64Val); 11055 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc );11054 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 11056 11055 } IEM_MC_ELSE() { 11057 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc );11056 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, pVCpu->iem.s.uFpuOpcode); 11058 11057 } IEM_MC_ENDIF(); 11059 11058 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11084 11083 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_d80, pu16Fsw, pd80Dst, pr80Value); 11085 11084 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pd80Dst, IEM_ACCESS_DATA_W, u16Fsw); 11086 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst );11085 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 11087 11086 } IEM_MC_ELSE() { 11088 11087 IEM_MC_IF_FCW_IM() { … … 11090 11089 IEM_MC_MEM_COMMIT_AND_UNMAP(pd80Dst, IEM_ACCESS_DATA_W); 11091 11090 } IEM_MC_ENDIF(); 11092 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst );11091 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 11093 11092 } IEM_MC_ENDIF(); 11094 11093 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11119 11118 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i64, pu16Fsw, pi64Dst, pr80Value); 11120 11119 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi64Dst, IEM_ACCESS_DATA_W, u16Fsw); 11121 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst );11120 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 11122 11121 } IEM_MC_ELSE() { 11123 11122 IEM_MC_IF_FCW_IM() { … … 11125 11124 IEM_MC_MEM_COMMIT_AND_UNMAP(pi64Dst, IEM_ACCESS_DATA_W); 11126 11125 } IEM_MC_ENDIF(); 11127 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst );11126 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 11128 11127 } IEM_MC_ENDIF(); 11129 11128 IEM_MC_ADVANCE_RIP_AND_FINISH(); -
trunk/src/VBox/VMM/include/IEMInline.h
r100266 r100591 2843 2843 2844 2844 2845 #ifndef IEM_WITH_OPAQUE_DECODER_STATE2846 /**2847 * Updates the FOP, FPU.CS and FPUIP registers.2848 *2849 * @param pVCpu The cross context virtual CPU structure of the calling thread.2850 * @param pFpuCtx The FPU context.2851 */2852 DECLINLINE(void) iemFpuUpdateOpcodeAndIpWorker(PVMCPUCC pVCpu, PX86FXSTATE pFpuCtx) RT_NOEXCEPT2853 {2854 Assert(pVCpu->iem.s.uFpuOpcode != UINT16_MAX);2855 iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, pVCpu->iem.s.uFpuOpcode);2856 }2857 #endif /* !IEM_WITH_OPAQUE_DECODER_STATE */2858 2859 2860 2845 /** 2861 2846 * Marks the specified stack register as free (for FFREE). -
trunk/src/VBox/VMM/include/IEMInternal.h
r100305 r100591 4256 4256 /** @name FPU access and helpers. 4257 4257 * @{ */ 4258 void iemFpuPushResult(PVMCPUCC pVCpu, PIEMFPURESULT pResult ) RT_NOEXCEPT;4259 void iemFpuPushResultWithMemOp(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iEffSeg, RTGCPTR GCPtrEff ) RT_NOEXCEPT;4260 void iemFpuPushResultTwo(PVMCPUCC pVCpu, PIEMFPURESULTTWO pResult ) RT_NOEXCEPT;4261 void iemFpuStoreResult(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iStReg ) RT_NOEXCEPT;4262 void iemFpuStoreResultThenPop(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iStReg ) RT_NOEXCEPT;4258 void iemFpuPushResult(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint16_t uFpuOpcode) RT_NOEXCEPT; 4259 void iemFpuPushResultWithMemOp(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT; 4260 void iemFpuPushResultTwo(PVMCPUCC pVCpu, PIEMFPURESULTTWO pResult, uint16_t uFpuOpcode) RT_NOEXCEPT; 4261 void iemFpuStoreResult(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iStReg, uint16_t uFpuOpcode) RT_NOEXCEPT; 4262 void iemFpuStoreResultThenPop(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iStReg, uint16_t uFpuOpcode) RT_NOEXCEPT; 4263 4263 void iemFpuStoreResultWithMemOp(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iStReg, 4264 uint8_t iEffSeg, RTGCPTR GCPtrEff ) RT_NOEXCEPT;4264 uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT; 4265 4265 void iemFpuStoreResultWithMemOpThenPop(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iStReg, 4266 uint8_t iEffSeg, RTGCPTR GCPtrEff ) RT_NOEXCEPT;4267 void iemFpuUpdateOpcodeAndIp(PVMCPUCC pVCpu ) RT_NOEXCEPT;4268 void iemFpuUpdateFSW(PVMCPUCC pVCpu, uint16_t u16FSW ) RT_NOEXCEPT;4269 void iemFpuUpdateFSWThenPop(PVMCPUCC pVCpu, uint16_t u16FSW ) RT_NOEXCEPT;4270 void iemFpuUpdateFSWWithMemOp(PVMCPUCC pVCpu, uint16_t u16FSW, uint8_t iEffSeg, RTGCPTR GCPtrEff ) RT_NOEXCEPT;4271 void iemFpuUpdateFSWThenPopPop(PVMCPUCC pVCpu, uint16_t u16FSW ) RT_NOEXCEPT;4272 void iemFpuUpdateFSWWithMemOpThenPop(PVMCPUCC pVCpu, uint16_t u16FSW, uint8_t iEffSeg, RTGCPTR GCPtrEff ) RT_NOEXCEPT;4273 void iemFpuStackUnderflow(PVMCPUCC pVCpu, uint8_t iStReg ) RT_NOEXCEPT;4274 void iemFpuStackUnderflowWithMemOp(PVMCPUCC pVCpu, uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff ) RT_NOEXCEPT;4275 void iemFpuStackUnderflowThenPop(PVMCPUCC pVCpu, uint8_t iStReg ) RT_NOEXCEPT;4276 void iemFpuStackUnderflowWithMemOpThenPop(PVMCPUCC pVCpu, uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff ) RT_NOEXCEPT;4277 void iemFpuStackUnderflowThenPopPop(PVMCPUCC pVCpu ) RT_NOEXCEPT;4278 void iemFpuStackPushUnderflow(PVMCPUCC pVCpu ) RT_NOEXCEPT;4279 void iemFpuStackPushUnderflowTwo(PVMCPUCC pVCpu ) RT_NOEXCEPT;4280 void iemFpuStackPushOverflow(PVMCPUCC pVCpu ) RT_NOEXCEPT;4281 void iemFpuStackPushOverflowWithMemOp(PVMCPUCC pVCpu, uint8_t iEffSeg, RTGCPTR GCPtrEff ) RT_NOEXCEPT;4266 uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT; 4267 void iemFpuUpdateOpcodeAndIp(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT; 4268 void iemFpuUpdateFSW(PVMCPUCC pVCpu, uint16_t u16FSW, uint16_t uFpuOpcode) RT_NOEXCEPT; 4269 void iemFpuUpdateFSWThenPop(PVMCPUCC pVCpu, uint16_t u16FSW, uint16_t uFpuOpcode) RT_NOEXCEPT; 4270 void iemFpuUpdateFSWWithMemOp(PVMCPUCC pVCpu, uint16_t u16FSW, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT; 4271 void iemFpuUpdateFSWThenPopPop(PVMCPUCC pVCpu, uint16_t u16FSW, uint16_t uFpuOpcode) RT_NOEXCEPT; 4272 void iemFpuUpdateFSWWithMemOpThenPop(PVMCPUCC pVCpu, uint16_t u16FSW, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT; 4273 void iemFpuStackUnderflow(PVMCPUCC pVCpu, uint8_t iStReg, uint16_t uFpuOpcode) RT_NOEXCEPT; 4274 void iemFpuStackUnderflowWithMemOp(PVMCPUCC pVCpu, uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT; 4275 void iemFpuStackUnderflowThenPop(PVMCPUCC pVCpu, uint8_t iStReg, uint16_t uFpuOpcode) RT_NOEXCEPT; 4276 void iemFpuStackUnderflowWithMemOpThenPop(PVMCPUCC pVCpu, uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT; 4277 void iemFpuStackUnderflowThenPopPop(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT; 4278 void iemFpuStackPushUnderflow(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT; 4279 void iemFpuStackPushUnderflowTwo(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT; 4280 void iemFpuStackPushOverflow(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT; 4281 void iemFpuStackPushOverflowWithMemOp(PVMCPUCC pVCpu, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT; 4282 4282 /** @} */ 4283 4283 -
trunk/src/VBox/VMM/include/IEMMc.h
r100579 r100591 1465 1465 1466 1466 /** Pushes FPU result onto the stack. */ 1467 #define IEM_MC_PUSH_FPU_RESULT(a_FpuData ) \1468 iemFpuPushResult(pVCpu, &a_FpuData )1467 #define IEM_MC_PUSH_FPU_RESULT(a_FpuData, a_uFpuOpcode) \ 1468 iemFpuPushResult(pVCpu, &a_FpuData, a_uFpuOpcode) 1469 1469 /** Pushes FPU result onto the stack and sets the FPUDP. */ 1470 #define IEM_MC_PUSH_FPU_RESULT_MEM_OP(a_FpuData, a_iEffSeg, a_GCPtrEff ) \1471 iemFpuPushResultWithMemOp(pVCpu, &a_FpuData, a_iEffSeg, a_GCPtrEff )1470 #define IEM_MC_PUSH_FPU_RESULT_MEM_OP(a_FpuData, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) \ 1471 iemFpuPushResultWithMemOp(pVCpu, &a_FpuData, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) 1472 1472 1473 1473 /** Replaces ST0 with value one and pushes value 2 onto the FPU stack. */ 1474 #define IEM_MC_PUSH_FPU_RESULT_TWO(a_FpuDataTwo ) \1475 iemFpuPushResultTwo(pVCpu, &a_FpuDataTwo )1474 #define IEM_MC_PUSH_FPU_RESULT_TWO(a_FpuDataTwo, a_uFpuOpcode) \ 1475 iemFpuPushResultTwo(pVCpu, &a_FpuDataTwo, a_uFpuOpcode) 1476 1476 1477 1477 /** Stores FPU result in a stack register. */ 1478 #define IEM_MC_STORE_FPU_RESULT(a_FpuData, a_iStReg ) \1479 iemFpuStoreResult(pVCpu, &a_FpuData, a_iStReg )1478 #define IEM_MC_STORE_FPU_RESULT(a_FpuData, a_iStReg, a_uFpuOpcode) \ 1479 iemFpuStoreResult(pVCpu, &a_FpuData, a_iStReg, a_uFpuOpcode) 1480 1480 /** Stores FPU result in a stack register and pops the stack. */ 1481 #define IEM_MC_STORE_FPU_RESULT_THEN_POP(a_FpuData, a_iStReg ) \1482 iemFpuStoreResultThenPop(pVCpu, &a_FpuData, a_iStReg )1481 #define IEM_MC_STORE_FPU_RESULT_THEN_POP(a_FpuData, a_iStReg, a_uFpuOpcode) \ 1482 iemFpuStoreResultThenPop(pVCpu, &a_FpuData, a_iStReg, a_uFpuOpcode) 1483 1483 /** Stores FPU result in a stack register and sets the FPUDP. */ 1484 #define IEM_MC_STORE_FPU_RESULT_MEM_OP(a_FpuData, a_iStReg, a_iEffSeg, a_GCPtrEff ) \1485 iemFpuStoreResultWithMemOp(pVCpu, &a_FpuData, a_iStReg, a_iEffSeg, a_GCPtrEff )1484 #define IEM_MC_STORE_FPU_RESULT_MEM_OP(a_FpuData, a_iStReg, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) \ 1485 iemFpuStoreResultWithMemOp(pVCpu, &a_FpuData, a_iStReg, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) 1486 1486 /** Stores FPU result in a stack register, sets the FPUDP, and pops the 1487 1487 * stack. */ 1488 #define IEM_MC_STORE_FPU_RESULT_WITH_MEM_OP_THEN_POP(a_FpuData, a_iStReg, a_iEffSeg, a_GCPtrEff ) \1489 iemFpuStoreResultWithMemOpThenPop(pVCpu, &a_FpuData, a_iStReg, a_iEffSeg, a_GCPtrEff )1488 #define IEM_MC_STORE_FPU_RESULT_WITH_MEM_OP_THEN_POP(a_FpuData, a_iStReg, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) \ 1489 iemFpuStoreResultWithMemOpThenPop(pVCpu, &a_FpuData, a_iStReg, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) 1490 1490 1491 1491 /** Only update the FOP, FPUIP, and FPUCS. (For FNOP.) */ 1492 #define IEM_MC_UPDATE_FPU_OPCODE_IP( ) \1493 iemFpuUpdateOpcodeAndIp(pVCpu )1492 #define IEM_MC_UPDATE_FPU_OPCODE_IP(a_uFpuOpcode) \ 1493 iemFpuUpdateOpcodeAndIp(pVCpu, a_uFpuOpcode) 1494 1494 /** Free a stack register (for FFREE and FFREEP). */ 1495 1495 #define IEM_MC_FPU_STACK_FREE(a_iStReg) \ … … 1503 1503 1504 1504 /** Updates the FSW, FOP, FPUIP, and FPUCS. */ 1505 #define IEM_MC_UPDATE_FSW(a_u16FSW ) \1506 iemFpuUpdateFSW(pVCpu, a_u16FSW )1505 #define IEM_MC_UPDATE_FSW(a_u16FSW, a_uFpuOpcode) \ 1506 iemFpuUpdateFSW(pVCpu, a_u16FSW, a_uFpuOpcode) 1507 1507 /** Updates the FSW with a constant value as well as FOP, FPUIP, and FPUCS. */ 1508 #define IEM_MC_UPDATE_FSW_CONST(a_u16FSW ) \1509 iemFpuUpdateFSW(pVCpu, a_u16FSW )1508 #define IEM_MC_UPDATE_FSW_CONST(a_u16FSW, a_uFpuOpcode) \ 1509 iemFpuUpdateFSW(pVCpu, a_u16FSW, a_uFpuOpcode) 1510 1510 /** Updates the FSW, FOP, FPUIP, FPUCS, FPUDP, and FPUDS. */ 1511 #define IEM_MC_UPDATE_FSW_WITH_MEM_OP(a_u16FSW, a_iEffSeg, a_GCPtrEff ) \1512 iemFpuUpdateFSWWithMemOp(pVCpu, a_u16FSW, a_iEffSeg, a_GCPtrEff )1511 #define IEM_MC_UPDATE_FSW_WITH_MEM_OP(a_u16FSW, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) \ 1512 iemFpuUpdateFSWWithMemOp(pVCpu, a_u16FSW, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) 1513 1513 /** Updates the FSW, FOP, FPUIP, and FPUCS, and then pops the stack. */ 1514 #define IEM_MC_UPDATE_FSW_THEN_POP(a_u16FSW ) \1515 iemFpuUpdateFSWThenPop(pVCpu, a_u16FSW )1514 #define IEM_MC_UPDATE_FSW_THEN_POP(a_u16FSW, a_uFpuOpcode) \ 1515 iemFpuUpdateFSWThenPop(pVCpu, a_u16FSW, a_uFpuOpcode) 1516 1516 /** Updates the FSW, FOP, FPUIP, FPUCS, FPUDP and FPUDS, and then pops the 1517 1517 * stack. */ 1518 #define IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(a_u16FSW, a_iEffSeg, a_GCPtrEff ) \1519 iemFpuUpdateFSWWithMemOpThenPop(pVCpu, a_u16FSW, a_iEffSeg, a_GCPtrEff )1518 #define IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(a_u16FSW, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) \ 1519 iemFpuUpdateFSWWithMemOpThenPop(pVCpu, a_u16FSW, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) 1520 1520 /** Updates the FSW, FOP, FPUIP, and FPUCS, and then pops the stack twice. */ 1521 #define IEM_MC_UPDATE_FSW_THEN_POP_POP(a_u16FSW ) \1522 iemFpuUpdateFSWThenPopPop(pVCpu, a_u16FSW )1521 #define IEM_MC_UPDATE_FSW_THEN_POP_POP(a_u16FSW, a_uFpuOpcode) \ 1522 iemFpuUpdateFSWThenPopPop(pVCpu, a_u16FSW, a_uFpuOpcode) 1523 1523 1524 1524 /** Raises a FPU stack underflow exception. Sets FPUIP, FPUCS and FOP. */ 1525 #define IEM_MC_FPU_STACK_UNDERFLOW(a_iStDst ) \1526 iemFpuStackUnderflow(pVCpu, a_iStDst )1525 #define IEM_MC_FPU_STACK_UNDERFLOW(a_iStDst, a_uFpuOpcode) \ 1526 iemFpuStackUnderflow(pVCpu, a_iStDst, a_uFpuOpcode) 1527 1527 /** Raises a FPU stack underflow exception. Sets FPUIP, FPUCS and FOP. Pops 1528 1528 * stack. */ 1529 #define IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(a_iStDst ) \1530 iemFpuStackUnderflowThenPop(pVCpu, a_iStDst )1529 #define IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(a_iStDst, a_uFpuOpcode) \ 1530 iemFpuStackUnderflowThenPop(pVCpu, a_iStDst, a_uFpuOpcode) 1531 1531 /** Raises a FPU stack underflow exception. Sets FPUIP, FPUCS, FOP, FPUDP and 1532 1532 * FPUDS. */ 1533 #define IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(a_iStDst, a_iEffSeg, a_GCPtrEff ) \1534 iemFpuStackUnderflowWithMemOp(pVCpu, a_iStDst, a_iEffSeg, a_GCPtrEff )1533 #define IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(a_iStDst, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) \ 1534 iemFpuStackUnderflowWithMemOp(pVCpu, a_iStDst, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) 1535 1535 /** Raises a FPU stack underflow exception. Sets FPUIP, FPUCS, FOP, FPUDP and 1536 1536 * FPUDS. Pops stack. */ 1537 #define IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(a_iStDst, a_iEffSeg, a_GCPtrEff ) \1538 iemFpuStackUnderflowWithMemOpThenPop(pVCpu, a_iStDst, a_iEffSeg, a_GCPtrEff )1537 #define IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(a_iStDst, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) \ 1538 iemFpuStackUnderflowWithMemOpThenPop(pVCpu, a_iStDst, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) 1539 1539 /** Raises a FPU stack underflow exception. Sets FPUIP, FPUCS and FOP. Pops 1540 1540 * stack twice. */ 1541 #define IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP_POP( ) \1542 iemFpuStackUnderflowThenPopPop(pVCpu )1541 #define IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP_POP(a_uFpuOpcode) \ 1542 iemFpuStackUnderflowThenPopPop(pVCpu, a_uFpuOpcode) 1543 1543 /** Raises a FPU stack underflow exception for an instruction pushing a result 1544 1544 * value onto the stack. Sets FPUIP, FPUCS and FOP. */ 1545 #define IEM_MC_FPU_STACK_PUSH_UNDERFLOW( ) \1546 iemFpuStackPushUnderflow(pVCpu )1545 #define IEM_MC_FPU_STACK_PUSH_UNDERFLOW(a_uFpuOpcode) \ 1546 iemFpuStackPushUnderflow(pVCpu, a_uFpuOpcode) 1547 1547 /** Raises a FPU stack underflow exception for an instruction pushing a result 1548 1548 * value onto the stack and replacing ST0. Sets FPUIP, FPUCS and FOP. */ 1549 #define IEM_MC_FPU_STACK_PUSH_UNDERFLOW_TWO( ) \1550 iemFpuStackPushUnderflowTwo(pVCpu )1549 #define IEM_MC_FPU_STACK_PUSH_UNDERFLOW_TWO(a_uFpuOpcode) \ 1550 iemFpuStackPushUnderflowTwo(pVCpu, a_uFpuOpcode) 1551 1551 1552 1552 /** Raises a FPU stack overflow exception as part of a push attempt. Sets 1553 1553 * FPUIP, FPUCS and FOP. */ 1554 #define IEM_MC_FPU_STACK_PUSH_OVERFLOW( ) \1555 iemFpuStackPushOverflow(pVCpu )1554 #define IEM_MC_FPU_STACK_PUSH_OVERFLOW(a_uFpuOpcode) \ 1555 iemFpuStackPushOverflow(pVCpu, a_uFpuOpcode) 1556 1556 /** Raises a FPU stack overflow exception as part of a push attempt. Sets 1557 1557 * FPUIP, FPUCS, FOP, FPUDP and FPUDS. */ 1558 #define IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(a_iEffSeg, a_GCPtrEff ) \1559 iemFpuStackPushOverflowWithMemOp(pVCpu, a_iEffSeg, a_GCPtrEff )1558 #define IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) \ 1559 iemFpuStackPushOverflowWithMemOp(pVCpu, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) 1560 1560 /** Prepares for using the FPU state. 1561 1561 * Ensures that we can use the host FPU in the current context (RC+R0. -
trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp
r100579 r100591 931 931 do { (void)fFpuHost; (void)fFpuWrite; CHK_CALL_ARG(a0, 0); CHK_CALL_ARG(a1, 1); CHK_CALL_ARG(a2, 2); (void)fMcBegin; } while (0) 932 932 #define IEM_MC_SET_FPU_RESULT(a_FpuData, a_FSW, a_pr80Value) do { (void)fFpuWrite; (void)fMcBegin; } while (0) 933 #define IEM_MC_PUSH_FPU_RESULT(a_FpuData) do { (void)fFpuWrite; (void)fMcBegin; } while (0) 934 #define IEM_MC_PUSH_FPU_RESULT_MEM_OP(a_FpuData, a_iEffSeg, a_GCPtrEff) do { (void)fFpuWrite; (void)fMcBegin; } while (0) 935 #define IEM_MC_PUSH_FPU_RESULT_TWO(a_FpuDataTwo) do { (void)fFpuWrite; (void)fMcBegin; } while (0) 936 #define IEM_MC_STORE_FPU_RESULT(a_FpuData, a_iStReg) do { (void)fFpuWrite; (void)fMcBegin; } while (0) 937 #define IEM_MC_STORE_FPU_RESULT_THEN_POP(a_FpuData, a_iStReg) do { (void)fFpuWrite; (void)fMcBegin; } while (0) 938 #define IEM_MC_STORE_FPU_RESULT_MEM_OP(a_FpuData, a_iStReg, a_iEffSeg, a_GCPtrEff) do { (void)fFpuWrite; (void)fMcBegin; } while (0) 939 #define IEM_MC_STORE_FPU_RESULT_MEM_OP_THEN_POP(a_FpuData, a_iStReg, a_iEffSeg, a_GCPtrEff) do { (void)fFpuWrite; (void)fMcBegin; } while (0) 940 #define IEM_MC_FPU_STACK_UNDERFLOW(a_iStReg) do { (void)fFpuWrite; (void)fMcBegin; } while (0) 941 #define IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(a_iStReg, a_iEffSeg, a_GCPtrEff) do { (void)fFpuWrite; (void)fMcBegin; } while (0) 942 #define IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(a_iStReg) do { (void)fFpuWrite; (void)fMcBegin; } while (0) 943 #define IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(a_iStReg, a_iEffSeg, a_GCPtrEff) do { (void)fFpuWrite; (void)fMcBegin; } while (0) 944 #define IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP_POP() do { (void)fFpuWrite; (void)fMcBegin; } while (0) 945 #define IEM_MC_FPU_STACK_PUSH_UNDERFLOW() do { (void)fFpuWrite; (void)fMcBegin; } while (0) 946 #define IEM_MC_FPU_STACK_PUSH_UNDERFLOW_TWO() do { (void)fFpuWrite; (void)fMcBegin; } while (0) 947 #define IEM_MC_FPU_STACK_PUSH_OVERFLOW() do { (void)fFpuWrite; (void)fMcBegin; } while (0) 948 #define IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(a_iEffSeg, a_GCPtrEff) do { (void)fFpuWrite; (void)fMcBegin; } while (0) 949 #define IEM_MC_UPDATE_FPU_OPCODE_IP() do { (void)fFpuWrite; (void)fMcBegin; } while (0) 933 #define IEM_MC_PUSH_FPU_RESULT(a_FpuData, a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 934 #define IEM_MC_PUSH_FPU_RESULT_MEM_OP(a_FpuData, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 935 #define IEM_MC_PUSH_FPU_RESULT_TWO(a_FpuDataTwo, a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 936 #define IEM_MC_STORE_FPU_RESULT(a_FpuData, a_iStReg, a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 937 #define IEM_MC_STORE_FPU_RESULT_THEN_POP(a_FpuData, a_iStReg, a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 938 #define IEM_MC_STORE_FPU_RESULT_MEM_OP(a_FpuData, a_iStReg, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) do {(void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 939 #define IEM_MC_FPU_STACK_UNDERFLOW(a_iStReg, a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 940 #define IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(a_iStReg, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 941 #define IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(a_iStReg, a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 942 #define IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(a_iStReg, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) do{(void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 943 #define IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP_POP(a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 944 #define IEM_MC_FPU_STACK_PUSH_UNDERFLOW(a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 945 #define IEM_MC_FPU_STACK_PUSH_UNDERFLOW_TWO(a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 946 #define IEM_MC_FPU_STACK_PUSH_OVERFLOW(a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 947 #define IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 948 #define IEM_MC_UPDATE_FPU_OPCODE_IP(a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 950 949 #define IEM_MC_FPU_STACK_DEC_TOP() do { (void)fFpuWrite; (void)fMcBegin; } while (0) 951 950 #define IEM_MC_FPU_STACK_INC_TOP() do { (void)fFpuWrite; (void)fMcBegin; } while (0) 952 951 #define IEM_MC_FPU_STACK_FREE(a_iStReg) do { (void)fFpuWrite; (void)fMcBegin; } while (0) 953 #define IEM_MC_UPDATE_FSW(a_u16FSW ) do { (void)fFpuWrite; (void)fMcBegin; } while (0)954 #define IEM_MC_UPDATE_FSW_CONST(a_u16FSW ) do { (void)fFpuWrite; (void)fMcBegin; } while (0)955 #define IEM_MC_UPDATE_FSW_WITH_MEM_OP(a_u16FSW, a_iEffSeg, a_GCPtrEff ) do { (void)fFpuWrite; (void)fMcBegin; } while (0)956 #define IEM_MC_UPDATE_FSW_THEN_POP(a_u16FSW ) do { (void)fFpuWrite; (void)fMcBegin; } while (0)957 #define IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(a_u16FSW, a_iEffSeg, a_GCPtrEff ) do { (void)fFpuWrite; (void)fMcBegin; } while (0)958 #define IEM_MC_UPDATE_FSW_THEN_POP_POP(a_u16FSW ) do { (void)fFpuWrite; (void)fMcBegin; } while (0)952 #define IEM_MC_UPDATE_FSW(a_u16FSW, a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 953 #define IEM_MC_UPDATE_FSW_CONST(a_u16FSW, a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 954 #define IEM_MC_UPDATE_FSW_WITH_MEM_OP(a_u16FSW, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 955 #define IEM_MC_UPDATE_FSW_THEN_POP(a_u16FSW, a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 956 #define IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(a_u16FSW, a_iEffSeg, a_GCPtrEff, a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 957 #define IEM_MC_UPDATE_FSW_THEN_POP_POP(a_u16FSW, a_uFpuOpcode) do { (void)fFpuWrite; (void)fMcBegin; (void)a_uFpuOpcode; } while (0) 959 958 #define IEM_MC_PREPARE_FPU_USAGE() (void)fMcBegin; \ 960 959 const int fFpuRead = 1, fFpuWrite = 1, fFpuHost = 1, fSseRead = 1, fSseWrite = 1, fSseHost = 1, fAvxRead = 1, fAvxWrite = 1, fAvxHost = 1
Note:
See TracChangeset
for help on using the changeset viewer.