VirtualBox

Changeset 100591 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Jul 15, 2023 1:20:13 AM (17 months ago)
Author:
vboxsync
Message:

VMM/IEM: Must pass the FPU opcode word to the various MCs updating FOP as IEMCPU::uFpuOpcode isn't available during recompiled code execution. bugref:10369

Location:
trunk/src/VBox/VMM
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAll.cpp

    r100277 r100591  
    49314931 * @param   pVCpu               The cross context virtual CPU structure of the calling thread.
    49324932 * @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 */
     4935void iemFpuPushResult(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint16_t uFpuOpcode) RT_NOEXCEPT
    49354936{
    49364937    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    4937     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     4938    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    49384939    iemFpuMaybePushResult(pVCpu, pResult, pFpuCtx);
    49394940}
     
    49484949 * @param   iEffSeg             The effective segment register.
    49494950 * @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 */
     4953void iemFpuPushResultWithMemOp(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iEffSeg, RTGCPTR GCPtrEff,
     4954                               uint16_t uFpuOpcode) RT_NOEXCEPT
    49524955{
    49534956    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    49544957    iemFpuUpdateDP(pVCpu, pFpuCtx, iEffSeg, GCPtrEff);
    4955     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     4958    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    49564959    iemFpuMaybePushResult(pVCpu, pResult, pFpuCtx);
    49574960}
     
    49644967 * @param   pVCpu               The cross context virtual CPU structure of the calling thread.
    49654968 * @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 */
     4971void iemFpuPushResultTwo(PVMCPUCC pVCpu, PIEMFPURESULTTWO pResult, uint16_t uFpuOpcode) RT_NOEXCEPT
    49684972{
    49694973    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    4970     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     4974    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    49714975
    49724976    /* Update FSW and bail if there are pending exceptions afterwards. */
     
    50235027 * @param   pResult             The result to store.
    50245028 * @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 */
     5031void iemFpuStoreResult(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iStReg, uint16_t uFpuOpcode) RT_NOEXCEPT
    50275032{
    50285033    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    5029     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5034    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    50305035    iemFpuStoreResultOnly(pVCpu, pFpuCtx, pResult, iStReg);
    50315036}
     
    50395044 * @param   pResult             The result to store.
    50405045 * @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 */
     5048void iemFpuStoreResultThenPop(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iStReg, uint16_t uFpuOpcode) RT_NOEXCEPT
    50435049{
    50445050    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    5045     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5051    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    50465052    iemFpuStoreResultOnly(pVCpu, pFpuCtx, pResult, iStReg);
    50475053    iemFpuMaybePopOne(pFpuCtx);
     
    50585064 * @param   iEffSeg             The effective memory operand selector register.
    50595065 * @param   GCPtrEff            The effective memory operand offset.
     5066 * @param   uFpuOpcode          The FPU opcode value.
    50605067 */
    50615068void iemFpuStoreResultWithMemOp(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iStReg,
    5062                                 uint8_t iEffSeg, RTGCPTR GCPtrEff) RT_NOEXCEPT
     5069                                uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT
    50635070{
    50645071    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    50655072    iemFpuUpdateDP(pVCpu, pFpuCtx, iEffSeg, GCPtrEff);
    5066     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5073    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    50675074    iemFpuStoreResultOnly(pVCpu, pFpuCtx, pResult, iStReg);
    50685075}
     
    50785085 * @param   iEffSeg             The effective memory operand selector register.
    50795086 * @param   GCPtrEff            The effective memory operand offset.
     5087 * @param   uFpuOpcode          The FPU opcode value.
    50805088 */
    50815089void iemFpuStoreResultWithMemOpThenPop(PVMCPUCC pVCpu, PIEMFPURESULT pResult,
    5082                                        uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff) RT_NOEXCEPT
     5090                                       uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT
    50835091{
    50845092    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    50855093    iemFpuUpdateDP(pVCpu, pFpuCtx, iEffSeg, GCPtrEff);
    5086     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5094    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    50875095    iemFpuStoreResultOnly(pVCpu, pFpuCtx, pResult, iStReg);
    50885096    iemFpuMaybePopOne(pFpuCtx);
     
    50945102 *
    50955103 * @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 */
     5106void iemFpuUpdateOpcodeAndIp(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT
    50985107{
    50995108    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    5100     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5109    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    51015110}
    51025111
     
    51075116 * @param   pVCpu               The cross context virtual CPU structure of the calling thread.
    51085117 * @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 */
     5120void iemFpuUpdateFSW(PVMCPUCC pVCpu, uint16_t u16FSW, uint16_t uFpuOpcode) RT_NOEXCEPT
    51115121{
    51125122    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    5113     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5123    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    51145124    iemFpuUpdateFSWOnly(pVCpu, pFpuCtx, u16FSW);
    51155125}
     
    51215131 * @param   pVCpu               The cross context virtual CPU structure of the calling thread.
    51225132 * @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 */
     5135void iemFpuUpdateFSWThenPop(PVMCPUCC pVCpu, uint16_t u16FSW, uint16_t uFpuOpcode) RT_NOEXCEPT
    51255136{
    51265137    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    5127     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5138    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    51285139    iemFpuUpdateFSWOnly(pVCpu, pFpuCtx, u16FSW);
    51295140    iemFpuMaybePopOne(pFpuCtx);
     
    51385149 * @param   iEffSeg             The effective memory operand selector register.
    51395150 * @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 */
     5153void iemFpuUpdateFSWWithMemOp(PVMCPUCC pVCpu, uint16_t u16FSW, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT
    51425154{
    51435155    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    51445156    iemFpuUpdateDP(pVCpu, pFpuCtx, iEffSeg, GCPtrEff);
    5145     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5157    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    51465158    iemFpuUpdateFSWOnly(pVCpu, pFpuCtx, u16FSW);
    51475159}
     
    51535165 * @param   pVCpu               The cross context virtual CPU structure of the calling thread.
    51545166 * @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 */
     5169void iemFpuUpdateFSWThenPopPop(PVMCPUCC pVCpu, uint16_t u16FSW, uint16_t uFpuOpcode) RT_NOEXCEPT
    51575170{
    51585171    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    5159     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5172    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    51605173    iemFpuUpdateFSWOnly(pVCpu, pFpuCtx, u16FSW);
    51615174    iemFpuMaybePopOne(pFpuCtx);
     
    51715184 * @param   iEffSeg             The effective memory operand selector register.
    51725185 * @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 */
     5188void iemFpuUpdateFSWWithMemOpThenPop(PVMCPUCC pVCpu, uint16_t u16FSW, uint8_t iEffSeg, RTGCPTR GCPtrEff,
     5189                                     uint16_t uFpuOpcode) RT_NOEXCEPT
    51755190{
    51765191    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    51775192    iemFpuUpdateDP(pVCpu, pFpuCtx, iEffSeg, GCPtrEff);
    5178     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5193    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    51795194    iemFpuUpdateFSWOnly(pVCpu, pFpuCtx, u16FSW);
    51805195    iemFpuMaybePopOne(pFpuCtx);
     
    52225237 *                              with QNaN if \#IS is not masked. Specify
    52235238 *                              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 */
     5241void iemFpuStackUnderflow(PVMCPUCC pVCpu, uint8_t iStReg, uint16_t uFpuOpcode) RT_NOEXCEPT
    52265242{
    52275243    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    5228     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5244    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    52295245    iemFpuStackUnderflowOnly(pVCpu, pFpuCtx, iStReg);
    52305246}
    52315247
    52325248
    5233 void iemFpuStackUnderflowWithMemOp(PVMCPUCC pVCpu, uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff) RT_NOEXCEPT
     5249void iemFpuStackUnderflowWithMemOp(PVMCPUCC pVCpu, uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT
    52345250{
    52355251    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    52365252    iemFpuUpdateDP(pVCpu, pFpuCtx, iEffSeg, GCPtrEff);
    5237     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5253    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    52385254    iemFpuStackUnderflowOnly(pVCpu, pFpuCtx, iStReg);
    52395255}
    52405256
    52415257
    5242 void iemFpuStackUnderflowThenPop(PVMCPUCC pVCpu, uint8_t iStReg) RT_NOEXCEPT
     5258void iemFpuStackUnderflowThenPop(PVMCPUCC pVCpu, uint8_t iStReg, uint16_t uFpuOpcode) RT_NOEXCEPT
    52435259{
    52445260    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    5245     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5261    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    52465262    iemFpuStackUnderflowOnly(pVCpu, pFpuCtx, iStReg);
    52475263    iemFpuMaybePopOne(pFpuCtx);
     
    52495265
    52505266
    5251 void iemFpuStackUnderflowWithMemOpThenPop(PVMCPUCC pVCpu, uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff) RT_NOEXCEPT
     5267void iemFpuStackUnderflowWithMemOpThenPop(PVMCPUCC pVCpu, uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff,
     5268                                          uint16_t uFpuOpcode) RT_NOEXCEPT
    52525269{
    52535270    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    52545271    iemFpuUpdateDP(pVCpu, pFpuCtx, iEffSeg, GCPtrEff);
    5255     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5272    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    52565273    iemFpuStackUnderflowOnly(pVCpu, pFpuCtx, iStReg);
    52575274    iemFpuMaybePopOne(pFpuCtx);
     
    52595276
    52605277
    5261 void iemFpuStackUnderflowThenPopPop(PVMCPUCC pVCpu) RT_NOEXCEPT
     5278void iemFpuStackUnderflowThenPopPop(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT
    52625279{
    52635280    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    5264     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5281    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    52655282    iemFpuStackUnderflowOnly(pVCpu, pFpuCtx, UINT8_MAX);
    52665283    iemFpuMaybePopOne(pFpuCtx);
     
    52695286
    52705287
    5271 void iemFpuStackPushUnderflow(PVMCPUCC pVCpu) RT_NOEXCEPT
     5288void iemFpuStackPushUnderflow(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT
    52725289{
    52735290    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    5274     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5291    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    52755292
    52765293    if (pFpuCtx->FCW & X86_FCW_IM)
     
    52965313
    52975314
    5298 void iemFpuStackPushUnderflowTwo(PVMCPUCC pVCpu) RT_NOEXCEPT
     5315void iemFpuStackPushUnderflowTwo(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT
    52995316{
    53005317    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    5301     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5318    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    53025319
    53035320    if (pFpuCtx->FCW & X86_FCW_IM)
     
    53605377 * @param   pVCpu               The cross context virtual CPU structure of the calling thread.
    53615378 */
    5362 void iemFpuStackPushOverflow(PVMCPUCC pVCpu) RT_NOEXCEPT
     5379void iemFpuStackPushOverflow(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT
    53635380{
    53645381    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    5365     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5382    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    53665383    iemFpuStackPushOverflowOnly(pVCpu, pFpuCtx);
    53675384}
     
    53755392 * @param   GCPtrEff            The effective memory operand offset.
    53765393 */
    5377 void iemFpuStackPushOverflowWithMemOp(PVMCPUCC pVCpu, uint8_t iEffSeg, RTGCPTR GCPtrEff) RT_NOEXCEPT
     5394void iemFpuStackPushOverflowWithMemOp(PVMCPUCC pVCpu, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT
    53785395{
    53795396    PX86FXSTATE pFpuCtx = &pVCpu->cpum.GstCtx.XState.x87;
    53805397    iemFpuUpdateDP(pVCpu, pFpuCtx, iEffSeg, GCPtrEff);
    5381     iemFpuUpdateOpcodeAndIpWorker(pVCpu, pFpuCtx);
     5398    iemFpuUpdateOpcodeAndIpWorkerEx(pVCpu, pFpuCtx, uFpuOpcode);
    53825399    iemFpuStackPushOverflowOnly(pVCpu, pFpuCtx);
    53835400}
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h

    r100231 r100591  
    80618061    IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, IEM_GET_MODRM_RM_8(bRm)) {
    80628062        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);
    80648064    } IEM_MC_ELSE() {
    8065         IEM_MC_FPU_STACK_UNDERFLOW(0);
     8065        IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode);
    80668066    } IEM_MC_ENDIF();
    80678067    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    80938093    IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, IEM_GET_MODRM_RM_8(bRm)) {
    80948094        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);
    80968096    } IEM_MC_ELSE() {
    8097         IEM_MC_FPU_STACK_UNDERFLOW(UINT8_MAX);
     8097        IEM_MC_FPU_STACK_UNDERFLOW(UINT8_MAX, pVCpu->iem.s.uFpuOpcode);
    80988098    } IEM_MC_ENDIF();
    80998099    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    81258125    IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, IEM_GET_MODRM_RM_8(bRm)) {
    81268126        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);
    81288128    } 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);
    81308130    } IEM_MC_ENDIF();
    81318131    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    82268226    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) {
    82278227        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);
    82298229    } IEM_MC_ELSE() {
    8230         IEM_MC_FPU_STACK_UNDERFLOW(0);
     8230        IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode);
    82318231    } IEM_MC_ENDIF();
    82328232    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    82758275    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) {
    82768276        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);
    82788278    } 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);
    82808280    } IEM_MC_ENDIF();
    82818281    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    83088308    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) {
    83098309        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);
    83118311    } 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);
    83138313    } IEM_MC_ENDIF();
    83148314    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    84108410    IEM_MC_MAYBE_RAISE_FPU_XCPT();
    84118411    IEM_MC_FETCH_MEM_R32(r32Val, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    8412 
    84138412    IEM_MC_PREPARE_FPU_USAGE();
    84148413    IEM_MC_IF_FPUREG_IS_EMPTY(7) {
    84158414        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);
    84178416    } 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);
    84198418    } IEM_MC_ENDIF();
    84208419    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    84458444        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r32, pu16Fsw, pr32Dst, pr80Value);
    84468445        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);
    84488447    } IEM_MC_ELSE() {
    84498448        IEM_MC_IF_FCW_IM() {
     
    84518450            IEM_MC_MEM_COMMIT_AND_UNMAP(pr32Dst, IEM_ACCESS_DATA_W);
    84528451        } 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);
    84548453    } IEM_MC_ENDIF();
    84558454    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    84808479        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r32, pu16Fsw, pr32Dst, pr80Value);
    84818480        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);
    84838482    } IEM_MC_ELSE() {
    84848483        IEM_MC_IF_FCW_IM() {
     
    84868485            IEM_MC_MEM_COMMIT_AND_UNMAP(pr32Dst, IEM_ACCESS_DATA_W);
    84878486        } 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);
    84898488    } IEM_MC_ENDIF();
    84908489    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    85778576    /** @todo Testcase: looks like FNOP leaves FOP alone but updates FPUIP. Could be
    85788577     *        intel optimizations. Investigate. */
    8579     IEM_MC_UPDATE_FPU_OPCODE_IP();
     8578    IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode);
    85808579    IEM_MC_ADVANCE_RIP_AND_FINISH(); /* C0-C3 are documented as undefined, we leave them unmodified. */
    85818580    IEM_MC_END();
     
    86008599    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, IEM_GET_MODRM_RM_8(bRm)) {
    86018600        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);
    86038602    } IEM_MC_ELSE() {
    8604         IEM_MC_FPU_STACK_PUSH_UNDERFLOW();
     8603        IEM_MC_FPU_STACK_PUSH_UNDERFLOW(pVCpu->iem.s.uFpuOpcode);
    86058604    } IEM_MC_ENDIF();
    86068605
     
    86318630        IEM_MC_SET_FPU_RESULT(FpuRes, X86_FSW_C1, pr80Value2);
    86328631        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);
    86348633    } IEM_MC_ELSE() {
    86358634        IEM_MC_CALL_CIMPL_2(IEM_CIMPL_F_FPU, iemCImpl_fxch_underflow, iStReg, uFpuOpcode);
     
    86588657        IEM_MC_PREPARE_FPU_USAGE();
    86598658        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);
    86618660        } 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);
    86638662        } IEM_MC_ENDIF();
    86648663
     
    86778676        IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) {
    86788677            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);
    86808679        } 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);
    86828681        } IEM_MC_ENDIF();
    86838682
     
    87088707    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) {
    87098708        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);
    87118710    } IEM_MC_ELSE() {
    8712         IEM_MC_FPU_STACK_UNDERFLOW(0);
     8711        IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode);
    87138712    } IEM_MC_ENDIF();
    87148713    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    87508749    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) {
    87518750        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);
    87538752    } IEM_MC_ELSE() {
    8754         IEM_MC_FPU_STACK_UNDERFLOW(UINT8_MAX);
     8753        IEM_MC_FPU_STACK_UNDERFLOW(UINT8_MAX, pVCpu->iem.s.uFpuOpcode);
    87558754    } IEM_MC_ENDIF();
    87568755    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    87768775    IEM_MC_REF_FPUREG(pr80Value, 0);
    87778776    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);
    87798778    IEM_MC_ADVANCE_RIP_AND_FINISH();
    87808779
     
    88018800    IEM_MC_IF_FPUREG_IS_EMPTY(7) {
    88028801        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);
    88048803    } IEM_MC_ELSE() {
    8805         IEM_MC_FPU_STACK_PUSH_OVERFLOW();
     8804        IEM_MC_FPU_STACK_PUSH_OVERFLOW(pVCpu->iem.s.uFpuOpcode);
    88068805    } IEM_MC_ENDIF();
    88078806    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    89038902    IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, IEM_GET_MODRM_RM_8(bRm), pr80Value2, 0) {
    89048903        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);
    89068905    } 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);
    89088907    } IEM_MC_ENDIF();
    89098908    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    89418940    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) {
    89428941        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);
    89448943    } IEM_MC_ELSE() {
    8945         IEM_MC_FPU_STACK_PUSH_UNDERFLOW_TWO();
     8944        IEM_MC_FPU_STACK_PUSH_UNDERFLOW_TWO(pVCpu->iem.s.uFpuOpcode);
    89468945    } IEM_MC_ENDIF();
    89478946    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    89998998    IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE();
    90008999    IEM_MC_FPU_STACK_DEC_TOP();
    9001     IEM_MC_UPDATE_FSW_CONST(0);
     9000    IEM_MC_UPDATE_FSW_CONST(0, pVCpu->iem.s.uFpuOpcode);
    90029001
    90039002    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    90229021    IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE();
    90239022    IEM_MC_FPU_STACK_INC_TOP();
    9024     IEM_MC_UPDATE_FSW_CONST(0);
     9023    IEM_MC_UPDATE_FSW_CONST(0, pVCpu->iem.s.uFpuOpcode);
    90259024
    90269025    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    91949193            IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN);
    91959194        } IEM_MC_ENDIF();
    9196         IEM_MC_UPDATE_FPU_OPCODE_IP();
     9195        IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode);
    91979196    } IEM_MC_ELSE() {
    9198         IEM_MC_FPU_STACK_UNDERFLOW(0);
     9197        IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode);
    91999198    } IEM_MC_ENDIF();
    92009199    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    92219220            IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN);
    92229221        } IEM_MC_ENDIF();
    9223         IEM_MC_UPDATE_FPU_OPCODE_IP();
     9222        IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode);
    92249223    } IEM_MC_ELSE() {
    9225         IEM_MC_FPU_STACK_UNDERFLOW(0);
     9224        IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode);
    92269225    } IEM_MC_ENDIF();
    92279226    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    92489247            IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN);
    92499248        } IEM_MC_ENDIF();
    9250         IEM_MC_UPDATE_FPU_OPCODE_IP();
     9249        IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode);
    92519250    } IEM_MC_ELSE() {
    9252         IEM_MC_FPU_STACK_UNDERFLOW(0);
     9251        IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode);
    92539252    } IEM_MC_ENDIF();
    92549253    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    92759274            IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN);
    92769275        } IEM_MC_ENDIF();
    9277         IEM_MC_UPDATE_FPU_OPCODE_IP();
     9276        IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode);
    92789277    } IEM_MC_ELSE() {
    9279         IEM_MC_FPU_STACK_UNDERFLOW(0);
     9278        IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode);
    92809279    } IEM_MC_ENDIF();
    92819280    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    93079306    IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, 1) {
    93089307        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);
    93109309    } 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);
    93129311    } IEM_MC_ENDIF();
    93139312    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    93529351    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) {
    93539352        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);
    93559354    } IEM_MC_ELSE() {
    9356         IEM_MC_FPU_STACK_UNDERFLOW(0);
     9355        IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode);
    93579356    } IEM_MC_ENDIF();
    93589357    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    94019400    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) {
    94029401        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);
    94049403    } 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);
    94069405    } IEM_MC_ENDIF();
    94079406    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    94349433    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) {
    94359434        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);
    94379436    } 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);
    94399438    } IEM_MC_ENDIF();
    94409439    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    95419540    IEM_MC_IF_FPUREG_IS_EMPTY(7) {
    95429541        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);
    95449543    } 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);
    95469545    } IEM_MC_ENDIF();
    95479546    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    95729571        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fistt_r80_to_i32, pu16Fsw, pi32Dst, pr80Value);
    95739572        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);
    95759574    } IEM_MC_ELSE() {
    95769575        IEM_MC_IF_FCW_IM() {
     
    95789577            IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W);
    95799578        } 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);
    95819580    } IEM_MC_ENDIF();
    95829581    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    96079606        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i32, pu16Fsw, pi32Dst, pr80Value);
    96089607        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);
    96109609    } IEM_MC_ELSE() {
    96119610        IEM_MC_IF_FCW_IM() {
     
    96139612            IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W);
    96149613        } 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);
    96169615    } IEM_MC_ENDIF();
    96179616    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    96429641        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i32, pu16Fsw, pi32Dst, pr80Value);
    96439642        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);
    96459644    } IEM_MC_ELSE() {
    96469645        IEM_MC_IF_FCW_IM() {
     
    96489647            IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W);
    96499648        } 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);
    96519650    } IEM_MC_ENDIF();
    96529651    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    96789677    IEM_MC_IF_FPUREG_IS_EMPTY(7) {
    96799678        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);
    96819680    } 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);
    96839682    } IEM_MC_ENDIF();
    96849683    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    97099708        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r80, pu16Fsw, pr80Dst, pr80Value);
    97109709        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);
    97129711    } IEM_MC_ELSE() {
    97139712        IEM_MC_IF_FCW_IM() {
     
    97159714            IEM_MC_MEM_COMMIT_AND_UNMAP(pr80Dst, IEM_ACCESS_DATA_W);
    97169715        } 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);
    97189717    } IEM_MC_ENDIF();
    97199718    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    97409739            IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN);
    97419740        } IEM_MC_ENDIF();
    9742         IEM_MC_UPDATE_FPU_OPCODE_IP();
     9741        IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode);
    97439742    } IEM_MC_ELSE() {
    9744         IEM_MC_FPU_STACK_UNDERFLOW(0);
     9743        IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode);
    97459744    } IEM_MC_ENDIF();
    97469745    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    97679766            IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN);
    97689767        } IEM_MC_ENDIF();
    9769         IEM_MC_UPDATE_FPU_OPCODE_IP();
     9768        IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode);
    97709769    } IEM_MC_ELSE() {
    9771         IEM_MC_FPU_STACK_UNDERFLOW(0);
     9770        IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode);
    97729771    } IEM_MC_ENDIF();
    97739772    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    97949793            IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN);
    97959794        } IEM_MC_ENDIF();
    9796         IEM_MC_UPDATE_FPU_OPCODE_IP();
     9795        IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode);
    97979796    } IEM_MC_ELSE() {
    9798         IEM_MC_FPU_STACK_UNDERFLOW(0);
     9797        IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode);
    97999798    } IEM_MC_ENDIF();
    98009799    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    98219820            IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN);
    98229821        } IEM_MC_ENDIF();
    9823         IEM_MC_UPDATE_FPU_OPCODE_IP();
     9822        IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode);
    98249823    } IEM_MC_ELSE() {
    9825         IEM_MC_FPU_STACK_UNDERFLOW(0);
     9824        IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode);
    98269825    } IEM_MC_ENDIF();
    98279826    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1000410003    IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, IEM_GET_MODRM_RM_8(bRm), pr80Value2, 0) {
    1000510004        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);
    1000710006    } 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);
    1000910008    } IEM_MC_ENDIF();
    1001010009    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1008810087    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Factor1, 0) {
    1008910088        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);
    1009110090    } 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);
    1009310092    } IEM_MC_ENDIF();
    1009410093    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1013710136    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) {
    1013810137        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);
    1014010139    } 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);
    1014210141    } IEM_MC_ENDIF();
    1014310142    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1017010169    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) {
    1017110170        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);
    1017310172    } 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);
    1017510174    } IEM_MC_ENDIF();
    1017610175    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1027410273    IEM_MC_IF_FPUREG_IS_EMPTY(7) {
    1027510274        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);
    1027710276    } 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);
    1027910278    } IEM_MC_ENDIF();
    1028010279    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1030510304        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fistt_r80_to_i64, pu16Fsw, pi64Dst, pr80Value);
    1030610305        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);
    1030810307    } IEM_MC_ELSE() {
    1030910308        IEM_MC_IF_FCW_IM() {
     
    1031110310            IEM_MC_MEM_COMMIT_AND_UNMAP(pi64Dst, IEM_ACCESS_DATA_W);
    1031210311        } 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);
    1031410313    } IEM_MC_ENDIF();
    1031510314    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1034010339        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r64, pu16Fsw, pr64Dst, pr80Value);
    1034110340        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);
    1034310342    } IEM_MC_ELSE() {
    1034410343        IEM_MC_IF_FCW_IM() {
     
    1034610345            IEM_MC_MEM_COMMIT_AND_UNMAP(pr64Dst, IEM_ACCESS_DATA_W);
    1034710346        } 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);
    1034910348    } IEM_MC_ENDIF();
    1035010349    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1037710376        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r64, pu16Fsw, pr64Dst, pr80Value);
    1037810377        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);
    1038010379    } IEM_MC_ELSE() {
    1038110380        IEM_MC_IF_FCW_IM() {
     
    1038310382            IEM_MC_MEM_COMMIT_AND_UNMAP(pr64Dst, IEM_ACCESS_DATA_W);
    1038410383        } 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);
    1038610385    } IEM_MC_ENDIF();
    1038710386    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1046610465    IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE();
    1046710466    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);
    1046910468
    1047010469    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1048810487    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) {
    1048910488        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);
    1049110490    } 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);
    1049310492    } IEM_MC_ENDIF();
    1049410493
     
    1063710636    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) {
    1063810637        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);
    1064010639    } IEM_MC_ELSE() {
    10641         IEM_MC_FPU_STACK_UNDERFLOW(0);
     10640        IEM_MC_FPU_STACK_UNDERFLOW(0, pVCpu->iem.s.uFpuOpcode);
    1064210641    } IEM_MC_ENDIF();
    1064310642    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1068610685    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) {
    1068710686        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);
    1068910688    } 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);
    1069110690    } IEM_MC_ENDIF();
    1069210691    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1071910718    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) {
    1072010719        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);
    1072210721    } 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);
    1072410723    } IEM_MC_ENDIF();
    1072510724    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1081810817    IEM_MC_FPU_STACK_FREE(IEM_GET_MODRM_RM_8(bRm));
    1081910818    IEM_MC_FPU_STACK_INC_TOP();
    10820     IEM_MC_UPDATE_FPU_OPCODE_IP();
     10819    IEM_MC_UPDATE_FPU_OPCODE_IP(pVCpu->iem.s.uFpuOpcode);
    1082110820
    1082210821    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1088410883    IEM_MC_IF_FPUREG_IS_EMPTY(7) {
    1088510884        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);
    1088710886    } 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);
    1088910888    } IEM_MC_ENDIF();
    1089010889    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1091510914        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fistt_r80_to_i16, pu16Fsw, pi16Dst, pr80Value);
    1091610915        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);
    1091810917    } IEM_MC_ELSE() {
    1091910918        IEM_MC_IF_FCW_IM() {
     
    1092110920            IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W);
    1092210921        } 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);
    1092410923    } IEM_MC_ENDIF();
    1092510924    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1095010949        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i16, pu16Fsw, pi16Dst, pr80Value);
    1095110950        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);
    1095310952    } IEM_MC_ELSE() {
    1095410953        IEM_MC_IF_FCW_IM() {
     
    1095610955            IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W);
    1095710956        } 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);
    1095910958    } IEM_MC_ENDIF();
    1096010959    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1098510984        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i16, pu16Fsw, pi16Dst, pr80Value);
    1098610985        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);
    1098810987    } IEM_MC_ELSE() {
    1098910988        IEM_MC_IF_FCW_IM() {
     
    1099110990            IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W);
    1099210991        } 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);
    1099410993    } IEM_MC_ENDIF();
    1099510994    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1102111020    IEM_MC_IF_FPUREG_IS_EMPTY(7) {
    1102211021        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);
    1102411023    } 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);
    1102611025    } IEM_MC_ENDIF();
    1102711026    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1105311052    IEM_MC_IF_FPUREG_IS_EMPTY(7) {
    1105411053        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);
    1105611055    } 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);
    1105811057    } IEM_MC_ENDIF();
    1105911058    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1108411083        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_d80, pu16Fsw, pd80Dst, pr80Value);
    1108511084        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);
    1108711086    } IEM_MC_ELSE() {
    1108811087        IEM_MC_IF_FCW_IM() {
     
    1109011089            IEM_MC_MEM_COMMIT_AND_UNMAP(pd80Dst, IEM_ACCESS_DATA_W);
    1109111090        } 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);
    1109311092    } IEM_MC_ENDIF();
    1109411093    IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    1111911118        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i64, pu16Fsw, pi64Dst, pr80Value);
    1112011119        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);
    1112211121    } IEM_MC_ELSE() {
    1112311122        IEM_MC_IF_FCW_IM() {
     
    1112511124            IEM_MC_MEM_COMMIT_AND_UNMAP(pi64Dst, IEM_ACCESS_DATA_W);
    1112611125        } 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);
    1112811127    } IEM_MC_ENDIF();
    1112911128    IEM_MC_ADVANCE_RIP_AND_FINISH();
  • trunk/src/VBox/VMM/include/IEMInline.h

    r100266 r100591  
    28432843
    28442844
    2845 #ifndef IEM_WITH_OPAQUE_DECODER_STATE
    2846 /**
    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_NOEXCEPT
    2853 {
    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 
    28602845/**
    28612846 * Marks the specified stack register as free (for FFREE).
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r100305 r100591  
    42564256/** @name FPU access and helpers.
    42574257 * @{ */
    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;
     4258void            iemFpuPushResult(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4259void            iemFpuPushResultWithMemOp(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4260void            iemFpuPushResultTwo(PVMCPUCC pVCpu, PIEMFPURESULTTWO pResult, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4261void            iemFpuStoreResult(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iStReg, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4262void            iemFpuStoreResultThenPop(PVMCPUCC pVCpu, PIEMFPURESULT pResult, uint8_t iStReg, uint16_t uFpuOpcode) RT_NOEXCEPT;
    42634263void            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;
    42654265void            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;
     4267void            iemFpuUpdateOpcodeAndIp(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4268void            iemFpuUpdateFSW(PVMCPUCC pVCpu, uint16_t u16FSW, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4269void            iemFpuUpdateFSWThenPop(PVMCPUCC pVCpu, uint16_t u16FSW, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4270void            iemFpuUpdateFSWWithMemOp(PVMCPUCC pVCpu, uint16_t u16FSW, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4271void            iemFpuUpdateFSWThenPopPop(PVMCPUCC pVCpu, uint16_t u16FSW, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4272void            iemFpuUpdateFSWWithMemOpThenPop(PVMCPUCC pVCpu, uint16_t u16FSW, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4273void            iemFpuStackUnderflow(PVMCPUCC pVCpu, uint8_t iStReg, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4274void            iemFpuStackUnderflowWithMemOp(PVMCPUCC pVCpu, uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4275void            iemFpuStackUnderflowThenPop(PVMCPUCC pVCpu, uint8_t iStReg, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4276void            iemFpuStackUnderflowWithMemOpThenPop(PVMCPUCC pVCpu, uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4277void            iemFpuStackUnderflowThenPopPop(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4278void            iemFpuStackPushUnderflow(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4279void            iemFpuStackPushUnderflowTwo(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4280void            iemFpuStackPushOverflow(PVMCPUCC pVCpu, uint16_t uFpuOpcode) RT_NOEXCEPT;
     4281void            iemFpuStackPushOverflowWithMemOp(PVMCPUCC pVCpu, uint8_t iEffSeg, RTGCPTR GCPtrEff, uint16_t uFpuOpcode) RT_NOEXCEPT;
    42824282/** @} */
    42834283
  • trunk/src/VBox/VMM/include/IEMMc.h

    r100579 r100591  
    14651465
    14661466/** 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)
    14691469/** 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)
    14721472
    14731473/** 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)
    14761476
    14771477/** 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)
    14801480/** 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)
    14831483/** 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)
    14861486/** Stores FPU result in a stack register, sets the FPUDP, and pops the
    14871487 *  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)
    14901490
    14911491/** 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)
    14941494/** Free a stack register (for FFREE and FFREEP). */
    14951495#define IEM_MC_FPU_STACK_FREE(a_iStReg) \
     
    15031503
    15041504/** 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)
    15071507/** 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)
    15101510/** 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)
    15131513/** 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)
    15161516/** Updates the FSW, FOP, FPUIP, FPUCS, FPUDP and FPUDS, and then pops the
    15171517 *  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)
    15201520/** 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)
    15231523
    15241524/** 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)
    15271527/** Raises a FPU stack underflow exception.  Sets FPUIP, FPUCS and FOP. Pops
    15281528 *  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)
    15311531/** Raises a FPU stack underflow exception.  Sets FPUIP, FPUCS, FOP, FPUDP and
    15321532 *  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)
    15351535/** Raises a FPU stack underflow exception.  Sets FPUIP, FPUCS, FOP, FPUDP and
    15361536 *  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)
    15391539/** Raises a FPU stack underflow exception.  Sets FPUIP, FPUCS and FOP. Pops
    15401540 *  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)
    15431543/** Raises a FPU stack underflow exception for an instruction pushing a result
    15441544 *  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)
    15471547/** Raises a FPU stack underflow exception for an instruction pushing a result
    15481548 *  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)
    15511551
    15521552/** Raises a FPU stack overflow exception as part of a push attempt.  Sets
    15531553 *  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)
    15561556/** Raises a FPU stack overflow exception as part of a push attempt.  Sets
    15571557 *  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)
    15601560/** Prepares for using the FPU state.
    15611561 * Ensures that we can use the host FPU in the current context (RC+R0.
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r100579 r100591  
    931931    do { (void)fFpuHost; (void)fFpuWrite; CHK_CALL_ARG(a0, 0); CHK_CALL_ARG(a1, 1); CHK_CALL_ARG(a2, 2); (void)fMcBegin; } while (0)
    932932#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)
    950949#define IEM_MC_FPU_STACK_DEC_TOP()                                                              do { (void)fFpuWrite; (void)fMcBegin; } while (0)
    951950#define IEM_MC_FPU_STACK_INC_TOP()                                                              do { (void)fFpuWrite; (void)fMcBegin; } while (0)
    952951#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)
    959958#define IEM_MC_PREPARE_FPU_USAGE() (void)fMcBegin; \
    960959    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.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette