Changeset 62015 in vbox for trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
- Timestamp:
- Jul 4, 2016 7:58:28 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 108473
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
r61885 r62015 45 45 IEM_MC_ARG(uint32_t *, pEFlags, 2); 46 46 47 IEM_MC_FETCH_GREG_U8(u8Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);48 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);47 IEM_MC_FETCH_GREG_U8(u8Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 48 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 49 49 IEM_MC_REF_EFLAGS(pEFlags); 50 50 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU8, pu8Dst, u8Src, pEFlags); … … 68 68 69 69 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 70 IEM_MC_MEM_MAP(pu8Dst, fAccess, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);71 IEM_MC_FETCH_GREG_U8(u8Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);70 IEM_MC_MEM_MAP(pu8Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 71 IEM_MC_FETCH_GREG_U8(u8Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 72 72 IEM_MC_FETCH_EFLAGS(EFlags); 73 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))73 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 74 74 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU8, pu8Dst, u8Src, pEFlags); 75 75 else … … 102 102 IEMOP_HLP_NO_LOCK_PREFIX(); 103 103 104 switch (p IemCpu->enmEffOpSize)104 switch (pVCpu->iem.s.enmEffOpSize) 105 105 { 106 106 case IEMMODE_16BIT: … … 110 110 IEM_MC_ARG(uint32_t *, pEFlags, 2); 111 111 112 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);113 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);112 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 113 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 114 114 IEM_MC_REF_EFLAGS(pEFlags); 115 115 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, u16Src, pEFlags); … … 125 125 IEM_MC_ARG(uint32_t *, pEFlags, 2); 126 126 127 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);128 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);127 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 128 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 129 129 IEM_MC_REF_EFLAGS(pEFlags); 130 130 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); … … 142 142 IEM_MC_ARG(uint32_t *, pEFlags, 2); 143 143 144 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);145 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);144 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 145 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 146 146 IEM_MC_REF_EFLAGS(pEFlags); 147 147 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, u64Src, pEFlags); … … 160 160 */ 161 161 uint32_t const fAccess = pImpl->pfnLockedU8 ? IEM_ACCESS_DATA_RW : IEM_ACCESS_DATA_R /* CMP,TEST */; 162 switch (p IemCpu->enmEffOpSize)162 switch (pVCpu->iem.s.enmEffOpSize) 163 163 { 164 164 case IEMMODE_16BIT: … … 170 170 171 171 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 172 IEM_MC_MEM_MAP(pu16Dst, fAccess, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);173 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);172 IEM_MC_MEM_MAP(pu16Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 173 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 174 174 IEM_MC_FETCH_EFLAGS(EFlags); 175 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))175 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 176 176 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, u16Src, pEFlags); 177 177 else … … 192 192 193 193 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 194 IEM_MC_MEM_MAP(pu32Dst, fAccess, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);195 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);194 IEM_MC_MEM_MAP(pu32Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 195 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 196 196 IEM_MC_FETCH_EFLAGS(EFlags); 197 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))197 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 198 198 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); 199 199 else … … 214 214 215 215 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 216 IEM_MC_MEM_MAP(pu64Dst, fAccess, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);217 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);216 IEM_MC_MEM_MAP(pu64Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 217 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 218 218 IEM_MC_FETCH_EFLAGS(EFlags); 219 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))219 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 220 220 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, u64Src, pEFlags); 221 221 else … … 254 254 IEM_MC_ARG(uint32_t *, pEFlags, 2); 255 255 256 IEM_MC_FETCH_GREG_U8(u8Src, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);257 IEM_MC_REF_GREG_U8(pu8Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);256 IEM_MC_FETCH_GREG_U8(u8Src, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 257 IEM_MC_REF_GREG_U8(pu8Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 258 258 IEM_MC_REF_EFLAGS(pEFlags); 259 259 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU8, pu8Dst, u8Src, pEFlags); … … 274 274 275 275 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 276 IEM_MC_FETCH_MEM_U8(u8Src, p IemCpu->iEffSeg, GCPtrEffDst);277 IEM_MC_REF_GREG_U8(pu8Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);276 IEM_MC_FETCH_MEM_U8(u8Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 277 IEM_MC_REF_GREG_U8(pu8Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 278 278 IEM_MC_REF_EFLAGS(pEFlags); 279 279 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU8, pu8Dst, u8Src, pEFlags); … … 302 302 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 303 303 { 304 switch (p IemCpu->enmEffOpSize)304 switch (pVCpu->iem.s.enmEffOpSize) 305 305 { 306 306 case IEMMODE_16BIT: … … 310 310 IEM_MC_ARG(uint32_t *, pEFlags, 2); 311 311 312 IEM_MC_FETCH_GREG_U16(u16Src, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);313 IEM_MC_REF_GREG_U16(pu16Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);312 IEM_MC_FETCH_GREG_U16(u16Src, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 313 IEM_MC_REF_GREG_U16(pu16Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 314 314 IEM_MC_REF_EFLAGS(pEFlags); 315 315 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, u16Src, pEFlags); … … 325 325 IEM_MC_ARG(uint32_t *, pEFlags, 2); 326 326 327 IEM_MC_FETCH_GREG_U32(u32Src, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);328 IEM_MC_REF_GREG_U32(pu32Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);327 IEM_MC_FETCH_GREG_U32(u32Src, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 328 IEM_MC_REF_GREG_U32(pu32Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 329 329 IEM_MC_REF_EFLAGS(pEFlags); 330 330 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); … … 341 341 IEM_MC_ARG(uint32_t *, pEFlags, 2); 342 342 343 IEM_MC_FETCH_GREG_U64(u64Src, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);344 IEM_MC_REF_GREG_U64(pu64Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);343 IEM_MC_FETCH_GREG_U64(u64Src, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 344 IEM_MC_REF_GREG_U64(pu64Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 345 345 IEM_MC_REF_EFLAGS(pEFlags); 346 346 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, u64Src, pEFlags); … … 356 356 * We're accessing memory. 357 357 */ 358 switch (p IemCpu->enmEffOpSize)358 switch (pVCpu->iem.s.enmEffOpSize) 359 359 { 360 360 case IEMMODE_16BIT: … … 366 366 367 367 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 368 IEM_MC_FETCH_MEM_U16(u16Src, p IemCpu->iEffSeg, GCPtrEffDst);369 IEM_MC_REF_GREG_U16(pu16Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);368 IEM_MC_FETCH_MEM_U16(u16Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 369 IEM_MC_REF_GREG_U16(pu16Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 370 370 IEM_MC_REF_EFLAGS(pEFlags); 371 371 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, u16Src, pEFlags); … … 383 383 384 384 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 385 IEM_MC_FETCH_MEM_U32(u32Src, p IemCpu->iEffSeg, GCPtrEffDst);386 IEM_MC_REF_GREG_U32(pu32Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);385 IEM_MC_FETCH_MEM_U32(u32Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 386 IEM_MC_REF_GREG_U32(pu32Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 387 387 IEM_MC_REF_EFLAGS(pEFlags); 388 388 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); … … 401 401 402 402 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 403 IEM_MC_FETCH_MEM_U64(u64Src, p IemCpu->iEffSeg, GCPtrEffDst);404 IEM_MC_REF_GREG_U64(pu64Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);403 IEM_MC_FETCH_MEM_U64(u64Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 404 IEM_MC_REF_GREG_U64(pu64Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 405 405 IEM_MC_REF_EFLAGS(pEFlags); 406 406 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, u64Src, pEFlags); … … 449 449 FNIEMOP_DEF_1(iemOpHlpBinaryOperator_rAX_Iz, PCIEMOPBINSIZES, pImpl) 450 450 { 451 switch (p IemCpu->enmEffOpSize)451 switch (pVCpu->iem.s.enmEffOpSize) 452 452 { 453 453 case IEMMODE_16BIT: … … 555 555 { 556 556 IEMOP_HLP_DECODED_NL_1(OP_SLDT, IEMOPFORM_M_REG, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP); 557 switch (p IemCpu->enmEffOpSize)557 switch (pVCpu->iem.s.enmEffOpSize) 558 558 { 559 559 case IEMMODE_16BIT: … … 561 561 IEM_MC_LOCAL(uint16_t, u16Ldtr); 562 562 IEM_MC_FETCH_LDTR_U16(u16Ldtr); 563 IEM_MC_STORE_GREG_U16((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u16Ldtr);563 IEM_MC_STORE_GREG_U16((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u16Ldtr); 564 564 IEM_MC_ADVANCE_RIP(); 565 565 IEM_MC_END(); … … 570 570 IEM_MC_LOCAL(uint32_t, u32Ldtr); 571 571 IEM_MC_FETCH_LDTR_U32(u32Ldtr); 572 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u32Ldtr);572 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u32Ldtr); 573 573 IEM_MC_ADVANCE_RIP(); 574 574 IEM_MC_END(); … … 579 579 IEM_MC_LOCAL(uint64_t, u64Ldtr); 580 580 IEM_MC_FETCH_LDTR_U64(u64Ldtr); 581 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u64Ldtr);581 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u64Ldtr); 582 582 IEM_MC_ADVANCE_RIP(); 583 583 IEM_MC_END(); … … 595 595 IEMOP_HLP_DECODED_NL_1(OP_SLDT, IEMOPFORM_M_MEM, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP); 596 596 IEM_MC_FETCH_LDTR_U16(u16Ldtr); 597 IEM_MC_STORE_MEM_U16(p IemCpu->iEffSeg, GCPtrEffDst, u16Ldtr);597 IEM_MC_STORE_MEM_U16(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u16Ldtr); 598 598 IEM_MC_ADVANCE_RIP(); 599 599 IEM_MC_END(); … … 613 613 { 614 614 IEMOP_HLP_DECODED_NL_1(OP_STR, IEMOPFORM_M_REG, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP); 615 switch (p IemCpu->enmEffOpSize)615 switch (pVCpu->iem.s.enmEffOpSize) 616 616 { 617 617 case IEMMODE_16BIT: … … 619 619 IEM_MC_LOCAL(uint16_t, u16Tr); 620 620 IEM_MC_FETCH_TR_U16(u16Tr); 621 IEM_MC_STORE_GREG_U16((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u16Tr);621 IEM_MC_STORE_GREG_U16((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u16Tr); 622 622 IEM_MC_ADVANCE_RIP(); 623 623 IEM_MC_END(); … … 628 628 IEM_MC_LOCAL(uint32_t, u32Tr); 629 629 IEM_MC_FETCH_TR_U32(u32Tr); 630 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u32Tr);630 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u32Tr); 631 631 IEM_MC_ADVANCE_RIP(); 632 632 IEM_MC_END(); … … 637 637 IEM_MC_LOCAL(uint64_t, u64Tr); 638 638 IEM_MC_FETCH_TR_U64(u64Tr); 639 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u64Tr);639 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u64Tr); 640 640 IEM_MC_ADVANCE_RIP(); 641 641 IEM_MC_END(); … … 653 653 IEMOP_HLP_DECODED_NL_1(OP_STR, IEMOPFORM_M_MEM, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP); 654 654 IEM_MC_FETCH_TR_U16(u16Tr); 655 IEM_MC_STORE_MEM_U16(p IemCpu->iEffSeg, GCPtrEffDst, u16Tr);655 IEM_MC_STORE_MEM_U16(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u16Tr); 656 656 IEM_MC_ADVANCE_RIP(); 657 657 IEM_MC_END(); … … 673 673 IEM_MC_BEGIN(1, 0); 674 674 IEM_MC_ARG(uint16_t, u16Sel, 0); 675 IEM_MC_FETCH_GREG_U16(u16Sel, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);675 IEM_MC_FETCH_GREG_U16(u16Sel, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 676 676 IEM_MC_CALL_CIMPL_1(iemCImpl_lldt, u16Sel); 677 677 IEM_MC_END(); … … 685 685 IEMOP_HLP_DECODED_NL_1(OP_LLDT, IEMOPFORM_M_MEM, OP_PARM_Ew, DISOPTYPE_DANGEROUS); 686 686 IEM_MC_RAISE_GP0_IF_CPL_NOT_ZERO(); /** @todo test order */ 687 IEM_MC_FETCH_MEM_U16(u16Sel, p IemCpu->iEffSeg, GCPtrEffSrc);687 IEM_MC_FETCH_MEM_U16(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 688 688 IEM_MC_CALL_CIMPL_1(iemCImpl_lldt, u16Sel); 689 689 IEM_MC_END(); … … 705 705 IEM_MC_BEGIN(1, 0); 706 706 IEM_MC_ARG(uint16_t, u16Sel, 0); 707 IEM_MC_FETCH_GREG_U16(u16Sel, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);707 IEM_MC_FETCH_GREG_U16(u16Sel, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 708 708 IEM_MC_CALL_CIMPL_1(iemCImpl_ltr, u16Sel); 709 709 IEM_MC_END(); … … 717 717 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 718 718 IEM_MC_RAISE_GP0_IF_CPL_NOT_ZERO(); /** @todo test ordre */ 719 IEM_MC_FETCH_MEM_U16(u16Sel, p IemCpu->iEffSeg, GCPtrEffSrc);719 IEM_MC_FETCH_MEM_U16(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 720 720 IEM_MC_CALL_CIMPL_1(iemCImpl_ltr, u16Sel); 721 721 IEM_MC_END(); … … 737 737 IEM_MC_ARG(uint16_t, u16Sel, 0); 738 738 IEM_MC_ARG_CONST(bool, fWriteArg, fWrite, 1); 739 IEM_MC_FETCH_GREG_U16(u16Sel, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);739 IEM_MC_FETCH_GREG_U16(u16Sel, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 740 740 IEM_MC_CALL_CIMPL_2(iemCImpl_VerX, u16Sel, fWriteArg); 741 741 IEM_MC_END(); … … 749 749 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 750 750 IEMOP_HLP_DECODED_NL_1(fWrite ? OP_VERW : OP_VERR, IEMOPFORM_M_MEM, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP); 751 IEM_MC_FETCH_MEM_U16(u16Sel, p IemCpu->iEffSeg, GCPtrEffSrc);751 IEM_MC_FETCH_MEM_U16(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 752 752 IEM_MC_CALL_CIMPL_2(iemCImpl_VerX, u16Sel, fWriteArg); 753 753 IEM_MC_END(); … … 809 809 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 810 810 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 811 IEM_MC_ASSIGN(iEffSeg, p IemCpu->iEffSeg);811 IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg); 812 812 IEM_MC_CALL_CIMPL_2(iemCImpl_sgdt, iEffSeg, GCPtrEffSrc); 813 813 IEM_MC_END(); … … 859 859 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 860 860 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 861 IEM_MC_ASSIGN(iEffSeg, p IemCpu->iEffSeg);861 IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg); 862 862 IEM_MC_CALL_CIMPL_2(iemCImpl_sidt, iEffSeg, GCPtrEffSrc); 863 863 IEM_MC_END(); … … 871 871 IEMOP_MNEMONIC("monitor"); 872 872 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); /** @todo Verify that monitor is allergic to lock prefixes. */ 873 return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_monitor, p IemCpu->iEffSeg);873 return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_monitor, pVCpu->iem.s.iEffSeg); 874 874 } 875 875 … … 892 892 IEM_MC_ARG(uint8_t, iEffSeg, 0); 893 893 IEM_MC_ARG(RTGCPTR, GCPtrEffSrc, 1); 894 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSizeArg,/*=*/p IemCpu->enmEffOpSize, 2);894 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSizeArg,/*=*/pVCpu->iem.s.enmEffOpSize, 2); 895 895 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 896 896 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 897 IEM_MC_ASSIGN(iEffSeg, p IemCpu->iEffSeg);897 IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg); 898 898 IEM_MC_CALL_CIMPL_3(iemCImpl_lgdt, iEffSeg, GCPtrEffSrc, enmEffOpSizeArg); 899 899 IEM_MC_END(); … … 906 906 { 907 907 IEMOP_MNEMONIC("xgetbv"); 908 if (IEM_GET_GUEST_CPU_FEATURES(p IemCpu)->fXSaveRstor)908 if (IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fXSaveRstor) 909 909 { 910 910 IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); … … 919 919 { 920 920 IEMOP_MNEMONIC("xsetbv"); 921 if (IEM_GET_GUEST_CPU_FEATURES(p IemCpu)->fXSaveRstor)921 if (IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fXSaveRstor) 922 922 { 923 923 IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); … … 931 931 FNIEMOP_DEF_1(iemOp_Grp7_lidt, uint8_t, bRm) 932 932 { 933 IEMMODE enmEffOpSize = p IemCpu->enmCpuMode == IEMMODE_64BIT933 IEMMODE enmEffOpSize = pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT 934 934 ? IEMMODE_64BIT 935 : p IemCpu->enmEffOpSize;935 : pVCpu->iem.s.enmEffOpSize; 936 936 IEM_MC_BEGIN(3, 1); 937 937 IEM_MC_ARG(uint8_t, iEffSeg, 0); … … 940 940 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 941 941 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 942 IEM_MC_ASSIGN(iEffSeg, p IemCpu->iEffSeg);942 IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg); 943 943 IEM_MC_CALL_CIMPL_3(iemCImpl_lidt, iEffSeg, GCPtrEffSrc, enmEffOpSizeArg); 944 944 IEM_MC_END(); … … 979 979 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 980 980 { 981 switch (p IemCpu->enmEffOpSize)981 switch (pVCpu->iem.s.enmEffOpSize) 982 982 { 983 983 case IEMMODE_16BIT: … … 985 985 IEM_MC_LOCAL(uint16_t, u16Tmp); 986 986 IEM_MC_FETCH_CR0_U16(u16Tmp); 987 if (IEM_GET_TARGET_CPU(p IemCpu) > IEMTARGETCPU_386)987 if (IEM_GET_TARGET_CPU(pVCpu) > IEMTARGETCPU_386) 988 988 { /* likely */ } 989 else if (IEM_GET_TARGET_CPU(p IemCpu) >= IEMTARGETCPU_386)989 else if (IEM_GET_TARGET_CPU(pVCpu) >= IEMTARGETCPU_386) 990 990 IEM_MC_OR_LOCAL_U16(u16Tmp, 0xffe0); 991 991 else 992 992 IEM_MC_OR_LOCAL_U16(u16Tmp, 0xfff0); 993 IEM_MC_STORE_GREG_U16((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u16Tmp);993 IEM_MC_STORE_GREG_U16((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u16Tmp); 994 994 IEM_MC_ADVANCE_RIP(); 995 995 IEM_MC_END(); … … 1000 1000 IEM_MC_LOCAL(uint32_t, u32Tmp); 1001 1001 IEM_MC_FETCH_CR0_U32(u32Tmp); 1002 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u32Tmp);1002 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u32Tmp); 1003 1003 IEM_MC_ADVANCE_RIP(); 1004 1004 IEM_MC_END(); … … 1009 1009 IEM_MC_LOCAL(uint64_t, u64Tmp); 1010 1010 IEM_MC_FETCH_CR0_U64(u64Tmp); 1011 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u64Tmp);1011 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u64Tmp); 1012 1012 IEM_MC_ADVANCE_RIP(); 1013 1013 IEM_MC_END(); … … 1025 1025 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 1026 1026 IEM_MC_FETCH_CR0_U16(u16Tmp); 1027 if (IEM_GET_TARGET_CPU(p IemCpu) > IEMTARGETCPU_386)1027 if (IEM_GET_TARGET_CPU(pVCpu) > IEMTARGETCPU_386) 1028 1028 { /* likely */ } 1029 else if (p IemCpu->uTargetCpu >= IEMTARGETCPU_386)1029 else if (pVCpu->iem.s.uTargetCpu >= IEMTARGETCPU_386) 1030 1030 IEM_MC_OR_LOCAL_U16(u16Tmp, 0xffe0); 1031 1031 else 1032 1032 IEM_MC_OR_LOCAL_U16(u16Tmp, 0xfff0); 1033 IEM_MC_STORE_MEM_U16(p IemCpu->iEffSeg, GCPtrEffDst, u16Tmp);1033 IEM_MC_STORE_MEM_U16(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u16Tmp); 1034 1034 IEM_MC_ADVANCE_RIP(); 1035 1035 IEM_MC_END(); … … 1051 1051 IEM_MC_BEGIN(1, 0); 1052 1052 IEM_MC_ARG(uint16_t, u16Tmp, 0); 1053 IEM_MC_FETCH_GREG_U16(u16Tmp, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);1053 IEM_MC_FETCH_GREG_U16(u16Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 1054 1054 IEM_MC_CALL_CIMPL_1(iemCImpl_lmsw, u16Tmp); 1055 1055 IEM_MC_END(); … … 1061 1061 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 1062 1062 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 1063 IEM_MC_FETCH_MEM_U16(u16Tmp, p IemCpu->iEffSeg, GCPtrEffDst);1063 IEM_MC_FETCH_MEM_U16(u16Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 1064 1064 IEM_MC_CALL_CIMPL_1(iemCImpl_lmsw, u16Tmp); 1065 1065 IEM_MC_END(); … … 1097 1097 FNIEMOP_DEF(iemOp_Grp7_rdtscp) 1098 1098 { 1099 NOREF(p IemCpu);1099 NOREF(pVCpu); 1100 1100 IEMOP_BITCH_ABOUT_STUB(); 1101 1101 return VERR_IEM_INSTR_NOT_IMPLEMENTED; … … 1189 1189 { 1190 1190 IEMOP_HLP_DECODED_NL_2(fIsLar ? OP_LAR : OP_LSL, IEMOPFORM_RM_REG, OP_PARM_Gv, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP); 1191 switch (p IemCpu->enmEffOpSize)1191 switch (pVCpu->iem.s.enmEffOpSize) 1192 1192 { 1193 1193 case IEMMODE_16BIT: … … 1199 1199 IEM_MC_ARG_CONST(bool, fIsLarArg, fIsLar, 3); 1200 1200 1201 IEM_MC_REF_GREG_U16(pu16Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);1202 IEM_MC_FETCH_GREG_U16(u16Sel, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);1201 IEM_MC_REF_GREG_U16(pu16Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1202 IEM_MC_FETCH_GREG_U16(u16Sel, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 1203 1203 IEM_MC_REF_EFLAGS(pEFlags); 1204 1204 IEM_MC_CALL_CIMPL_4(iemCImpl_LarLsl_u16, pu16Dst, u16Sel, pEFlags, fIsLarArg); … … 1217 1217 IEM_MC_ARG_CONST(bool, fIsLarArg, fIsLar, 3); 1218 1218 1219 IEM_MC_REF_GREG_U64(pu64Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);1220 IEM_MC_FETCH_GREG_U16(u16Sel, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);1219 IEM_MC_REF_GREG_U64(pu64Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1220 IEM_MC_FETCH_GREG_U16(u16Sel, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 1221 1221 IEM_MC_REF_EFLAGS(pEFlags); 1222 1222 IEM_MC_CALL_CIMPL_4(iemCImpl_LarLsl_u64, pu64Dst, u16Sel, pEFlags, fIsLarArg); … … 1231 1231 else 1232 1232 { 1233 switch (p IemCpu->enmEffOpSize)1233 switch (pVCpu->iem.s.enmEffOpSize) 1234 1234 { 1235 1235 case IEMMODE_16BIT: … … 1245 1245 IEMOP_HLP_DECODED_NL_2(fIsLar ? OP_LAR : OP_LSL, IEMOPFORM_RM_MEM, OP_PARM_Gv, OP_PARM_Ew, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP); 1246 1246 1247 IEM_MC_FETCH_MEM_U16(u16Sel, p IemCpu->iEffSeg, GCPtrEffSrc);1248 IEM_MC_REF_GREG_U16(pu16Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);1247 IEM_MC_FETCH_MEM_U16(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1248 IEM_MC_REF_GREG_U16(pu16Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1249 1249 IEM_MC_REF_EFLAGS(pEFlags); 1250 1250 IEM_MC_CALL_CIMPL_4(iemCImpl_LarLsl_u16, pu16Dst, u16Sel, pEFlags, fIsLarArg); … … 1268 1268 /** @todo testcase: make sure it's a 16-bit read. */ 1269 1269 1270 IEM_MC_FETCH_MEM_U16(u16Sel, p IemCpu->iEffSeg, GCPtrEffSrc);1271 IEM_MC_REF_GREG_U64(pu64Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);1270 IEM_MC_FETCH_MEM_U16(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1271 IEM_MC_REF_GREG_U64(pu64Dst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1272 1272 IEM_MC_REF_EFLAGS(pEFlags); 1273 1273 IEM_MC_CALL_CIMPL_4(iemCImpl_LarLsl_u64, pu64Dst, u16Sel, pEFlags, fIsLarArg); … … 1357 1357 { 1358 1358 /* AMD prefetch group, Intel implements this as NOP Ev (and so do we). */ 1359 if (!IEM_GET_GUEST_CPU_FEATURES(p IemCpu)->f3DNowPrefetch)1359 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->f3DNowPrefetch) 1360 1360 { 1361 1361 IEMOP_MNEMONIC("GrpP"); … … 1474 1474 FNIEMOP_DEF(iemOp_3Dnow) 1475 1475 { 1476 if (!IEM_GET_GUEST_CPU_FEATURES(p IemCpu)->f3DNow)1476 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->f3DNow) 1477 1477 { 1478 1478 IEMOP_MNEMONIC("3Dnow"); … … 1522 1522 { 1523 1523 /* Quick hack. Need to restructure all of this later some time. */ 1524 uint32_t const fRelevantPrefix = p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ);1524 uint32_t const fRelevantPrefix = pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ); 1525 1525 if (fRelevantPrefix == 0) 1526 1526 { … … 1536 1536 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1537 1537 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1538 IEM_MC_COPY_XREG_U128((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB,1539 ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);1538 IEM_MC_COPY_XREG_U128((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1539 ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1540 1540 IEM_MC_ADVANCE_RIP(); 1541 1541 IEM_MC_END(); … … 1555 1555 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 1556 1556 1557 IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);1558 IEM_MC_STORE_MEM_U128(p IemCpu->iEffSeg, GCPtrEffSrc, uSrc);1557 IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1558 IEM_MC_STORE_MEM_U128(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 1559 1559 1560 1560 IEM_MC_ADVANCE_RIP(); … … 1577 1577 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1578 1578 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1579 IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);1580 IEM_MC_STORE_XREG_U64((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, uSrc);1579 IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1580 IEM_MC_STORE_XREG_U64((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, uSrc); 1581 1581 1582 1582 IEM_MC_ADVANCE_RIP(); … … 1597 1597 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 1598 1598 1599 IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);1600 IEM_MC_STORE_MEM_U64(p IemCpu->iEffSeg, GCPtrEffSrc, uSrc);1599 IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1600 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 1601 1601 1602 1602 IEM_MC_ADVANCE_RIP(); … … 1621 1621 { 1622 1622 /* Quick hack. Need to restructure all of this later some time. */ 1623 if (p IemCpu->fPrefixes == IEM_OP_PRF_SIZE_OP)1623 if (pVCpu->iem.s.fPrefixes == IEM_OP_PRF_SIZE_OP) 1624 1624 { 1625 1625 IEMOP_MNEMONIC("movlpd Mq,Vq"); … … 1636 1636 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1637 1637 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1638 IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);1639 IEM_MC_STORE_XREG_U64((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, uSrc);1638 IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1639 IEM_MC_STORE_XREG_U64((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, uSrc); 1640 1640 IEM_MC_ADVANCE_RIP(); 1641 1641 IEM_MC_END(); … … 1658 1658 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 1659 1659 1660 IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);1661 IEM_MC_STORE_MEM_U64(p IemCpu->iEffSeg, GCPtrEffSrc, uSrc);1660 IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1661 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 1662 1662 1663 1663 IEM_MC_ADVANCE_RIP(); … … 1745 1745 IEMOP_MNEMONIC("mov Rd,Cd"); 1746 1746 IEMOP_HLP_MIN_386(); 1747 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)1748 p IemCpu->enmEffOpSize = pIemCpu->enmDefOpSize = IEMMODE_64BIT;1747 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 1748 pVCpu->iem.s.enmEffOpSize = pVCpu->iem.s.enmDefOpSize = IEMMODE_64BIT; 1749 1749 else 1750 p IemCpu->enmEffOpSize = pIemCpu->enmDefOpSize = IEMMODE_32BIT;1750 pVCpu->iem.s.enmEffOpSize = pVCpu->iem.s.enmDefOpSize = IEMMODE_32BIT; 1751 1751 1752 1752 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1753 uint8_t iCrReg = ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg;1754 if (p IemCpu->fPrefixes & IEM_OP_PRF_LOCK)1753 uint8_t iCrReg = ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg; 1754 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK) 1755 1755 { 1756 1756 /* The lock prefix can be used to encode CR8 accesses on some CPUs. */ 1757 if (!IEM_GET_GUEST_CPU_FEATURES(p IemCpu)->fMovCr8In32Bit)1757 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fMovCr8In32Bit) 1758 1758 return IEMOP_RAISE_INVALID_OPCODE(); /* #UD takes precedence over #GP(), see test. */ 1759 1759 iCrReg |= 8; … … 1768 1768 IEMOP_HLP_DONE_DECODING(); 1769 1769 1770 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_mov_Rd_Cd, (X86_MODRM_RM_MASK & bRm) | p IemCpu->uRexB, iCrReg);1770 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_mov_Rd_Cd, (X86_MODRM_RM_MASK & bRm) | pVCpu->iem.s.uRexB, iCrReg); 1771 1771 } 1772 1772 … … 1779 1779 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1780 1780 IEMOP_HLP_NO_LOCK_PREFIX(); 1781 if (p IemCpu->fPrefixes & IEM_OP_PRF_REX_R)1781 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_REX_R) 1782 1782 return IEMOP_RAISE_INVALID_OPCODE(); 1783 1783 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_mov_Rd_Dd, 1784 (X86_MODRM_RM_MASK & bRm) | p IemCpu->uRexB,1784 (X86_MODRM_RM_MASK & bRm) | pVCpu->iem.s.uRexB, 1785 1785 ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK)); 1786 1786 } … … 1793 1793 IEMOP_MNEMONIC("mov Cd,Rd"); 1794 1794 IEMOP_HLP_MIN_386(); 1795 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)1796 p IemCpu->enmEffOpSize = pIemCpu->enmDefOpSize = IEMMODE_64BIT;1795 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 1796 pVCpu->iem.s.enmEffOpSize = pVCpu->iem.s.enmDefOpSize = IEMMODE_64BIT; 1797 1797 else 1798 p IemCpu->enmEffOpSize = pIemCpu->enmDefOpSize = IEMMODE_32BIT;1798 pVCpu->iem.s.enmEffOpSize = pVCpu->iem.s.enmDefOpSize = IEMMODE_32BIT; 1799 1799 1800 1800 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1801 uint8_t iCrReg = ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg;1802 if (p IemCpu->fPrefixes & IEM_OP_PRF_LOCK)1801 uint8_t iCrReg = ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg; 1802 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK) 1803 1803 { 1804 1804 /* The lock prefix can be used to encode CR8 accesses on some CPUs. */ 1805 if (!IEM_GET_GUEST_CPU_FEATURES(p IemCpu)->fMovCr8In32Bit)1805 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fMovCr8In32Bit) 1806 1806 return IEMOP_RAISE_INVALID_OPCODE(); /* #UD takes precedence over #GP(), see test. */ 1807 1807 iCrReg |= 8; … … 1816 1816 IEMOP_HLP_DONE_DECODING(); 1817 1817 1818 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_mov_Cd_Rd, iCrReg, (X86_MODRM_RM_MASK & bRm) | p IemCpu->uRexB);1818 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_mov_Cd_Rd, iCrReg, (X86_MODRM_RM_MASK & bRm) | pVCpu->iem.s.uRexB); 1819 1819 } 1820 1820 … … 1827 1827 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1828 1828 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1829 if (p IemCpu->fPrefixes & IEM_OP_PRF_REX_R)1829 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_REX_R) 1830 1830 return IEMOP_RAISE_INVALID_OPCODE(); 1831 1831 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_mov_Dd_Rd, 1832 1832 ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK), 1833 (X86_MODRM_RM_MASK & bRm) | p IemCpu->uRexB);1833 (X86_MODRM_RM_MASK & bRm) | pVCpu->iem.s.uRexB); 1834 1834 } 1835 1835 … … 1858 1858 FNIEMOP_DEF(iemOp_movaps_Vps_Wps__movapd_Vpd_Wpd) 1859 1859 { 1860 IEMOP_MNEMONIC(!(p IemCpu->fPrefixes & IEM_OP_PRF_SIZE_OP) ? "movaps r,mr" : "movapd r,mr");1860 IEMOP_MNEMONIC(!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP) ? "movaps r,mr" : "movapd r,mr"); 1861 1861 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1862 1862 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 1867 1867 IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); 1868 1868 IEM_MC_BEGIN(0, 0); 1869 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_SIZE_OP))1869 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP)) 1870 1870 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1871 1871 else 1872 1872 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1873 1873 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1874 IEM_MC_COPY_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg,1875 (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);1874 IEM_MC_COPY_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 1875 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 1876 1876 IEM_MC_ADVANCE_RIP(); 1877 1877 IEM_MC_END(); … … 1888 1888 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1889 1889 IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); /** @todo check if this is delayed this long for REPZ/NZ */ 1890 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_SIZE_OP))1890 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP)) 1891 1891 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1892 1892 else … … 1894 1894 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1895 1895 1896 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, p IemCpu->iEffSeg, GCPtrEffSrc);1897 IEM_MC_STORE_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, uSrc);1896 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1897 IEM_MC_STORE_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 1898 1898 1899 1899 IEM_MC_ADVANCE_RIP(); … … 1907 1907 FNIEMOP_DEF(iemOp_movaps_Wps_Vps__movapd_Wpd_Vpd) 1908 1908 { 1909 IEMOP_MNEMONIC(!(p IemCpu->fPrefixes & IEM_OP_PRF_SIZE_OP) ? "movaps mr,r" : "movapd mr,r");1909 IEMOP_MNEMONIC(!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP) ? "movaps mr,r" : "movapd mr,r"); 1910 1910 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1911 1911 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 1916 1916 IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); 1917 1917 IEM_MC_BEGIN(0, 0); 1918 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_SIZE_OP))1918 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP)) 1919 1919 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1920 1920 else 1921 1921 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 1922 1922 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1923 IEM_MC_COPY_XREG_U128((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB,1924 ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);1923 IEM_MC_COPY_XREG_U128((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1924 ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1925 1925 IEM_MC_ADVANCE_RIP(); 1926 1926 IEM_MC_END(); … … 1937 1937 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1938 1938 IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); /** @todo check if this is delayed this long for REPZ/NZ */ 1939 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_SIZE_OP))1939 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP)) 1940 1940 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1941 1941 else … … 1943 1943 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 1944 1944 1945 IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);1946 IEM_MC_STORE_MEM_U128_ALIGN_SSE(p IemCpu->iEffSeg, GCPtrEffSrc, uSrc);1945 IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1946 IEM_MC_STORE_MEM_U128_ALIGN_SSE(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 1947 1947 1948 1948 IEM_MC_ADVANCE_RIP(); … … 1960 1960 FNIEMOP_DEF(iemOp_movntps_Mps_Vps__movntpd_Mpd_Vpd) 1961 1961 { 1962 IEMOP_MNEMONIC(!(p IemCpu->fPrefixes & IEM_OP_PRF_SIZE_OP) ? "movntps mr,r" : "movntpd mr,r");1962 IEMOP_MNEMONIC(!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP) ? "movntps mr,r" : "movntpd mr,r"); 1963 1963 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1964 1964 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) … … 1973 1973 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1974 1974 IEMOP_HLP_DONE_DECODING_NO_LOCK_REPZ_OR_REPNZ_PREFIXES(); /** @todo check if this is delayed this long for REPZ/NZ */ 1975 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_SIZE_OP))1975 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP)) 1976 1976 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1977 1977 else … … 1979 1979 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 1980 1980 1981 IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);1982 IEM_MC_STORE_MEM_U128_ALIGN_SSE(p IemCpu->iEffSeg, GCPtrEffSrc, uSrc);1981 IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1982 IEM_MC_STORE_MEM_U128_ALIGN_SSE(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 1983 1983 1984 1984 IEM_MC_ADVANCE_RIP(); … … 2055 2055 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) \ 2056 2056 { \ 2057 switch (p IemCpu->enmEffOpSize) \2057 switch (pVCpu->iem.s.enmEffOpSize) \ 2058 2058 { \ 2059 2059 case IEMMODE_16BIT: \ … … 2061 2061 IEM_MC_LOCAL(uint16_t, u16Tmp); \ 2062 2062 a_Cnd { \ 2063 IEM_MC_FETCH_GREG_U16(u16Tmp, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB); \2064 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u16Tmp); \2063 IEM_MC_FETCH_GREG_U16(u16Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); \ 2064 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16Tmp); \ 2065 2065 } IEM_MC_ENDIF(); \ 2066 2066 IEM_MC_ADVANCE_RIP(); \ … … 2072 2072 IEM_MC_LOCAL(uint32_t, u32Tmp); \ 2073 2073 a_Cnd { \ 2074 IEM_MC_FETCH_GREG_U32(u32Tmp, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB); \2075 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Tmp); \2074 IEM_MC_FETCH_GREG_U32(u32Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); \ 2075 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Tmp); \ 2076 2076 } IEM_MC_ELSE() { \ 2077 IEM_MC_CLEAR_HIGH_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg); \2077 IEM_MC_CLEAR_HIGH_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); \ 2078 2078 } IEM_MC_ENDIF(); \ 2079 2079 IEM_MC_ADVANCE_RIP(); \ … … 2085 2085 IEM_MC_LOCAL(uint64_t, u64Tmp); \ 2086 2086 a_Cnd { \ 2087 IEM_MC_FETCH_GREG_U64(u64Tmp, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB); \2088 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Tmp); \2087 IEM_MC_FETCH_GREG_U64(u64Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); \ 2088 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Tmp); \ 2089 2089 } IEM_MC_ENDIF(); \ 2090 2090 IEM_MC_ADVANCE_RIP(); \ … … 2097 2097 else \ 2098 2098 { \ 2099 switch (p IemCpu->enmEffOpSize) \2099 switch (pVCpu->iem.s.enmEffOpSize) \ 2100 2100 { \ 2101 2101 case IEMMODE_16BIT: \ … … 2104 2104 IEM_MC_LOCAL(uint16_t, u16Tmp); \ 2105 2105 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); \ 2106 IEM_MC_FETCH_MEM_U16(u16Tmp, p IemCpu->iEffSeg, GCPtrEffSrc); \2106 IEM_MC_FETCH_MEM_U16(u16Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \ 2107 2107 a_Cnd { \ 2108 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u16Tmp); \2108 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16Tmp); \ 2109 2109 } IEM_MC_ENDIF(); \ 2110 2110 IEM_MC_ADVANCE_RIP(); \ … … 2117 2117 IEM_MC_LOCAL(uint32_t, u32Tmp); \ 2118 2118 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); \ 2119 IEM_MC_FETCH_MEM_U32(u32Tmp, p IemCpu->iEffSeg, GCPtrEffSrc); \2119 IEM_MC_FETCH_MEM_U32(u32Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \ 2120 2120 a_Cnd { \ 2121 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Tmp); \2121 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Tmp); \ 2122 2122 } IEM_MC_ELSE() { \ 2123 IEM_MC_CLEAR_HIGH_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg); \2123 IEM_MC_CLEAR_HIGH_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); \ 2124 2124 } IEM_MC_ENDIF(); \ 2125 2125 IEM_MC_ADVANCE_RIP(); \ … … 2132 2132 IEM_MC_LOCAL(uint64_t, u64Tmp); \ 2133 2133 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); \ 2134 IEM_MC_FETCH_MEM_U64(u64Tmp, p IemCpu->iEffSeg, GCPtrEffSrc); \2134 IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \ 2135 2135 a_Cnd { \ 2136 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Tmp); \2136 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Tmp); \ 2137 2137 } IEM_MC_ENDIF(); \ 2138 2138 IEM_MC_ADVANCE_RIP(); \ … … 2323 2323 { 2324 2324 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2325 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))2325 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 2326 2326 { 2327 2327 case IEM_OP_PRF_SIZE_OP: /* SSE */ … … 2337 2337 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 2338 2338 IEM_MC_PREPARE_SSE_USAGE(); 2339 IEM_MC_REF_XREG_U128(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);2340 IEM_MC_REF_XREG_U64_CONST(pSrc, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);2339 IEM_MC_REF_XREG_U128(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 2340 IEM_MC_REF_XREG_U64_CONST(pSrc, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 2341 2341 IEM_MC_CALL_SSE_AIMPL_2(pImpl->pfnU128, pDst, pSrc); 2342 2342 IEM_MC_ADVANCE_RIP(); … … 2357 2357 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2358 2358 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 2359 IEM_MC_FETCH_MEM_U64_ALIGN_U128(uSrc, p IemCpu->iEffSeg, GCPtrEffSrc);2359 IEM_MC_FETCH_MEM_U64_ALIGN_U128(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2360 2360 2361 2361 IEM_MC_PREPARE_SSE_USAGE(); 2362 IEM_MC_REF_XREG_U128(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);2362 IEM_MC_REF_XREG_U128(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 2363 2363 IEM_MC_CALL_SSE_AIMPL_2(pImpl->pfnU128, pDst, pSrc); 2364 2364 … … 2404 2404 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2405 2405 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT(); 2406 IEM_MC_FETCH_MEM_U32(uSrc, p IemCpu->iEffSeg, GCPtrEffSrc);2406 IEM_MC_FETCH_MEM_U32(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2407 2407 2408 2408 IEM_MC_PREPARE_FPU_USAGE(); … … 2471 2471 { 2472 2472 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2473 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))2473 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 2474 2474 { 2475 2475 case IEM_OP_PRF_SIZE_OP: /* SSE */ … … 2485 2485 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 2486 2486 IEM_MC_PREPARE_SSE_USAGE(); 2487 IEM_MC_REF_XREG_U128(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);2488 IEM_MC_REF_XREG_U128_CONST(pSrc, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);2487 IEM_MC_REF_XREG_U128(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 2488 IEM_MC_REF_XREG_U128_CONST(pSrc, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 2489 2489 IEM_MC_CALL_SSE_AIMPL_2(pImpl->pfnU128, pDst, pSrc); 2490 2490 IEM_MC_ADVANCE_RIP(); … … 2505 2505 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2506 2506 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 2507 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, p IemCpu->iEffSeg, GCPtrEffSrc); /* Most CPUs probably only right high qword */2507 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); /* Most CPUs probably only right high qword */ 2508 2508 2509 2509 IEM_MC_PREPARE_SSE_USAGE(); 2510 IEM_MC_REF_XREG_U128(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);2510 IEM_MC_REF_XREG_U128(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 2511 2511 IEM_MC_CALL_SSE_AIMPL_2(pImpl->pfnU128, pDst, pSrc); 2512 2512 … … 2552 2552 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2553 2553 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT(); 2554 IEM_MC_FETCH_MEM_U64(uSrc, p IemCpu->iEffSeg, GCPtrEffSrc);2554 IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2555 2555 2556 2556 IEM_MC_PREPARE_FPU_USAGE(); … … 2616 2616 { 2617 2617 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2618 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))2618 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 2619 2619 { 2620 2620 case IEM_OP_PRF_SIZE_OP: /* SSE */ … … 2627 2627 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 2628 2628 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 2629 if (p IemCpu->fPrefixes & IEM_OP_PRF_SIZE_REX_W)2629 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) 2630 2630 { 2631 2631 IEM_MC_LOCAL(uint64_t, u64Tmp); 2632 IEM_MC_FETCH_GREG_U64(u64Tmp, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);2633 IEM_MC_STORE_XREG_U64_ZX_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Tmp);2632 IEM_MC_FETCH_GREG_U64(u64Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 2633 IEM_MC_STORE_XREG_U64_ZX_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Tmp); 2634 2634 } 2635 2635 else 2636 2636 { 2637 2637 IEM_MC_LOCAL(uint32_t, u32Tmp); 2638 IEM_MC_FETCH_GREG_U32(u32Tmp, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);2639 IEM_MC_STORE_XREG_U32_ZX_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Tmp);2638 IEM_MC_FETCH_GREG_U32(u32Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 2639 IEM_MC_STORE_XREG_U32_ZX_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Tmp); 2640 2640 } 2641 2641 IEM_MC_ADVANCE_RIP(); … … 2651 2651 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2652 2652 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 2653 if (p IemCpu->fPrefixes & IEM_OP_PRF_SIZE_REX_W)2653 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) 2654 2654 { 2655 2655 IEM_MC_LOCAL(uint64_t, u64Tmp); 2656 IEM_MC_FETCH_MEM_U64(u64Tmp, p IemCpu->iEffSeg, GCPtrEffSrc);2657 IEM_MC_STORE_XREG_U64_ZX_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Tmp);2656 IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2657 IEM_MC_STORE_XREG_U64_ZX_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Tmp); 2658 2658 } 2659 2659 else 2660 2660 { 2661 2661 IEM_MC_LOCAL(uint32_t, u32Tmp); 2662 IEM_MC_FETCH_MEM_U32(u32Tmp, p IemCpu->iEffSeg, GCPtrEffSrc);2663 IEM_MC_STORE_XREG_U32_ZX_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Tmp);2662 IEM_MC_FETCH_MEM_U32(u32Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2663 IEM_MC_STORE_XREG_U32_ZX_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Tmp); 2664 2664 } 2665 2665 IEM_MC_ADVANCE_RIP(); … … 2678 2678 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 2679 2679 IEM_MC_LOCAL(uint64_t, u64Tmp); 2680 if (p IemCpu->fPrefixes & IEM_OP_PRF_SIZE_REX_W)2681 IEM_MC_FETCH_GREG_U64(u64Tmp, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);2680 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) 2681 IEM_MC_FETCH_GREG_U64(u64Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 2682 2682 else 2683 IEM_MC_FETCH_GREG_U32_ZX_U64(u64Tmp, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);2683 IEM_MC_FETCH_GREG_U32_ZX_U64(u64Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 2684 2684 IEM_MC_STORE_MREG_U64((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK, u64Tmp); 2685 2685 IEM_MC_ADVANCE_RIP(); … … 2695 2695 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2696 2696 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 2697 if (p IemCpu->fPrefixes & IEM_OP_PRF_SIZE_REX_W)2697 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) 2698 2698 { 2699 2699 IEM_MC_LOCAL(uint64_t, u64Tmp); 2700 IEM_MC_FETCH_MEM_U64(u64Tmp, p IemCpu->iEffSeg, GCPtrEffSrc);2700 IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2701 2701 IEM_MC_STORE_MREG_U64((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK, u64Tmp); 2702 2702 } … … 2704 2704 { 2705 2705 IEM_MC_LOCAL(uint32_t, u32Tmp); 2706 IEM_MC_FETCH_MEM_U32(u32Tmp, p IemCpu->iEffSeg, GCPtrEffSrc);2706 IEM_MC_FETCH_MEM_U32(u32Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2707 2707 IEM_MC_STORE_MREG_U32_ZX_U64((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK, u32Tmp); 2708 2708 } … … 2723 2723 bool fAligned = false; 2724 2724 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2725 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))2725 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 2726 2726 { 2727 2727 case IEM_OP_PRF_SIZE_OP: /* SSE aligned */ … … 2741 2741 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 2742 2742 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 2743 IEM_MC_COPY_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg,2744 (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);2743 IEM_MC_COPY_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 2744 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 2745 2745 IEM_MC_ADVANCE_RIP(); 2746 2746 IEM_MC_END(); … … 2760 2760 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 2761 2761 if (fAligned) 2762 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(u128Tmp, p IemCpu->iEffSeg, GCPtrEffSrc);2762 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(u128Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2763 2763 else 2764 IEM_MC_FETCH_MEM_U128(u128Tmp, p IemCpu->iEffSeg, GCPtrEffSrc);2765 IEM_MC_STORE_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u128Tmp);2764 IEM_MC_FETCH_MEM_U128(u128Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2765 IEM_MC_STORE_XREG_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u128Tmp); 2766 2766 2767 2767 IEM_MC_ADVANCE_RIP(); … … 2802 2802 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT(); 2803 2803 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 2804 IEM_MC_FETCH_MEM_U64(u64Tmp, p IemCpu->iEffSeg, GCPtrEffSrc);2804 IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2805 2805 IEM_MC_STORE_MREG_U64((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK, u64Tmp); 2806 2806 … … 2820 2820 { 2821 2821 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2822 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))2822 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 2823 2823 { 2824 2824 case IEM_OP_PRF_SIZE_OP: /* SSE */ … … 2827 2827 { 2828 2828 PFNIEMAIMPLMEDIAPSHUF pfnAImpl; 2829 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))2829 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 2830 2830 { 2831 2831 case IEM_OP_PRF_SIZE_OP: … … 2857 2857 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 2858 2858 IEM_MC_PREPARE_SSE_USAGE(); 2859 IEM_MC_REF_XREG_U128(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);2860 IEM_MC_REF_XREG_U128_CONST(pSrc, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);2859 IEM_MC_REF_XREG_U128(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 2860 IEM_MC_REF_XREG_U128_CONST(pSrc, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 2861 2861 IEM_MC_CALL_SSE_AIMPL_3(pfnAImpl, pDst, pSrc, bEvilArg); 2862 2862 IEM_MC_ADVANCE_RIP(); … … 2880 2880 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 2881 2881 2882 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, p IemCpu->iEffSeg, GCPtrEffSrc);2882 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2883 2883 IEM_MC_PREPARE_SSE_USAGE(); 2884 IEM_MC_REF_XREG_U128(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);2884 IEM_MC_REF_XREG_U128(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 2885 2885 IEM_MC_CALL_SSE_AIMPL_3(pfnAImpl, pDst, pSrc, bEvilArg); 2886 2886 … … 2930 2930 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_CHECK_SSE_OR_MMXEXT(); 2931 2931 2932 IEM_MC_FETCH_MEM_U64(uSrc, p IemCpu->iEffSeg, GCPtrEffSrc);2932 IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 2933 2933 IEM_MC_PREPARE_FPU_USAGE(); 2934 2934 IEM_MC_REF_MREG_U64(pDst, (bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK); … … 2976 2976 return IEMOP_RAISE_INVALID_OPCODE(); 2977 2977 case 2: 2978 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))2978 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ)) 2979 2979 { 2980 2980 case 0: return FNIEMOP_CALL_1(iemOp_Grp12_psrlw_Nq_Ib, bRm); … … 2983 2983 } 2984 2984 case 4: 2985 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))2985 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ)) 2986 2986 { 2987 2987 case 0: return FNIEMOP_CALL_1(iemOp_Grp12_psraw_Nq_Ib, bRm); … … 2990 2990 } 2991 2991 case 6: 2992 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))2992 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ)) 2993 2993 { 2994 2994 case 0: return FNIEMOP_CALL_1(iemOp_Grp12_psllw_Nq_Ib, bRm); … … 3031 3031 return IEMOP_RAISE_INVALID_OPCODE(); 3032 3032 case 2: 3033 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))3033 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ)) 3034 3034 { 3035 3035 case 0: return FNIEMOP_CALL_1(iemOp_Grp13_psrld_Nq_Ib, bRm); … … 3038 3038 } 3039 3039 case 4: 3040 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))3040 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ)) 3041 3041 { 3042 3042 case 0: return FNIEMOP_CALL_1(iemOp_Grp13_psrad_Nq_Ib, bRm); … … 3045 3045 } 3046 3046 case 6: 3047 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))3047 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ)) 3048 3048 { 3049 3049 case 0: return FNIEMOP_CALL_1(iemOp_Grp13_pslld_Nq_Ib, bRm); … … 3086 3086 return IEMOP_RAISE_INVALID_OPCODE(); 3087 3087 case 2: 3088 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))3088 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ)) 3089 3089 { 3090 3090 case 0: return FNIEMOP_CALL_1(iemOp_Grp14_psrlq_Nq_Ib, bRm); … … 3093 3093 } 3094 3094 case 3: 3095 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))3095 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ)) 3096 3096 { 3097 3097 case IEM_OP_PRF_SIZE_OP: return FNIEMOP_CALL_1(iemOp_Grp14_psrldq_Udq_Ib, bRm); … … 3099 3099 } 3100 3100 case 6: 3101 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))3101 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ)) 3102 3102 { 3103 3103 case 0: return FNIEMOP_CALL_1(iemOp_Grp14_psllq_Nq_Ib, bRm); … … 3106 3106 } 3107 3107 case 7: 3108 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))3108 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ)) 3109 3109 { 3110 3110 case IEM_OP_PRF_SIZE_OP: return FNIEMOP_CALL_1(iemOp_Grp14_pslldq_Udq_Ib, bRm); … … 3127 3127 { 3128 3128 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 3129 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))3129 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 3130 3130 { 3131 3131 case IEM_OP_PRF_SIZE_OP: /* SSE */ … … 3141 3141 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 3142 3142 IEM_MC_PREPARE_SSE_USAGE(); 3143 IEM_MC_REF_XREG_U128(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);3144 IEM_MC_REF_XREG_U128_CONST(pSrc, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);3143 IEM_MC_REF_XREG_U128(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 3144 IEM_MC_REF_XREG_U128_CONST(pSrc, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 3145 3145 IEM_MC_CALL_SSE_AIMPL_2(pImpl->pfnU128, pDst, pSrc); 3146 3146 IEM_MC_ADVANCE_RIP(); … … 3161 3161 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3162 3162 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 3163 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, p IemCpu->iEffSeg, GCPtrEffSrc);3163 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 3164 3164 3165 3165 IEM_MC_PREPARE_SSE_USAGE(); 3166 IEM_MC_REF_XREG_U128(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);3166 IEM_MC_REF_XREG_U128(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 3167 3167 IEM_MC_CALL_SSE_AIMPL_2(pImpl->pfnU128, pDst, pSrc); 3168 3168 … … 3206 3206 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3207 3207 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT(); 3208 IEM_MC_FETCH_MEM_U64(uSrc, p IemCpu->iEffSeg, GCPtrEffSrc);3208 IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 3209 3209 3210 3210 IEM_MC_PREPARE_FPU_USAGE(); … … 3263 3263 { 3264 3264 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 3265 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))3265 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 3266 3266 { 3267 3267 case IEM_OP_PRF_SIZE_OP: /* SSE */ … … 3274 3274 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 3275 3275 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 3276 if (p IemCpu->fPrefixes & IEM_OP_PRF_SIZE_REX_W)3276 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) 3277 3277 { 3278 3278 IEM_MC_LOCAL(uint64_t, u64Tmp); 3279 IEM_MC_FETCH_XREG_U64(u64Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);3280 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u64Tmp);3279 IEM_MC_FETCH_XREG_U64(u64Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 3280 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u64Tmp); 3281 3281 } 3282 3282 else 3283 3283 { 3284 3284 IEM_MC_LOCAL(uint32_t, u32Tmp); 3285 IEM_MC_FETCH_XREG_U32(u32Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);3286 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u32Tmp);3285 IEM_MC_FETCH_XREG_U32(u32Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 3286 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u32Tmp); 3287 3287 } 3288 3288 IEM_MC_ADVANCE_RIP(); … … 3298 3298 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3299 3299 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 3300 if (p IemCpu->fPrefixes & IEM_OP_PRF_SIZE_REX_W)3300 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) 3301 3301 { 3302 3302 IEM_MC_LOCAL(uint64_t, u64Tmp); 3303 IEM_MC_FETCH_XREG_U64(u64Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);3304 IEM_MC_STORE_MEM_U64(p IemCpu->iEffSeg, GCPtrEffSrc, u64Tmp);3303 IEM_MC_FETCH_XREG_U64(u64Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 3304 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u64Tmp); 3305 3305 } 3306 3306 else 3307 3307 { 3308 3308 IEM_MC_LOCAL(uint32_t, u32Tmp); 3309 IEM_MC_FETCH_XREG_U32(u32Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);3310 IEM_MC_STORE_MEM_U32(p IemCpu->iEffSeg, GCPtrEffSrc, u32Tmp);3309 IEM_MC_FETCH_XREG_U32(u32Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 3310 IEM_MC_STORE_MEM_U32(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u32Tmp); 3311 3311 } 3312 3312 IEM_MC_ADVANCE_RIP(); … … 3324 3324 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT(); 3325 3325 IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ(); 3326 if (p IemCpu->fPrefixes & IEM_OP_PRF_SIZE_REX_W)3326 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) 3327 3327 { 3328 3328 IEM_MC_LOCAL(uint64_t, u64Tmp); 3329 3329 IEM_MC_FETCH_MREG_U64(u64Tmp, (bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK); 3330 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u64Tmp);3330 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u64Tmp); 3331 3331 } 3332 3332 else … … 3334 3334 IEM_MC_LOCAL(uint32_t, u32Tmp); 3335 3335 IEM_MC_FETCH_MREG_U32(u32Tmp, (bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK); 3336 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u32Tmp);3336 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u32Tmp); 3337 3337 } 3338 3338 IEM_MC_ADVANCE_RIP(); … … 3348 3348 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3349 3349 IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ(); 3350 if (p IemCpu->fPrefixes & IEM_OP_PRF_SIZE_REX_W)3350 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) 3351 3351 { 3352 3352 IEM_MC_LOCAL(uint64_t, u64Tmp); 3353 3353 IEM_MC_FETCH_MREG_U64(u64Tmp, (bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK); 3354 IEM_MC_STORE_MEM_U64(p IemCpu->iEffSeg, GCPtrEffSrc, u64Tmp);3354 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u64Tmp); 3355 3355 } 3356 3356 else … … 3358 3358 IEM_MC_LOCAL(uint32_t, u32Tmp); 3359 3359 IEM_MC_FETCH_MREG_U32(u32Tmp, (bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK); 3360 IEM_MC_STORE_MEM_U32(p IemCpu->iEffSeg, GCPtrEffSrc, u32Tmp);3360 IEM_MC_STORE_MEM_U32(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u32Tmp); 3361 3361 } 3362 3362 IEM_MC_ADVANCE_RIP(); … … 3376 3376 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 3377 3377 bool fAligned = false; 3378 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))3378 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 3379 3379 { 3380 3380 case IEM_OP_PRF_SIZE_OP: /* SSE aligned */ … … 3394 3394 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 3395 3395 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 3396 IEM_MC_COPY_XREG_U128((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB,3397 ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);3396 IEM_MC_COPY_XREG_U128((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 3397 ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 3398 3398 IEM_MC_ADVANCE_RIP(); 3399 3399 IEM_MC_END(); … … 3413 3413 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 3414 3414 3415 IEM_MC_FETCH_XREG_U128(u128Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);3415 IEM_MC_FETCH_XREG_U128(u128Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 3416 3416 if (fAligned) 3417 IEM_MC_STORE_MEM_U128_ALIGN_SSE(p IemCpu->iEffSeg, GCPtrEffSrc, u128Tmp);3417 IEM_MC_STORE_MEM_U128_ALIGN_SSE(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u128Tmp); 3418 3418 else 3419 IEM_MC_STORE_MEM_U128(p IemCpu->iEffSeg, GCPtrEffSrc, u128Tmp);3419 IEM_MC_STORE_MEM_U128(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u128Tmp); 3420 3420 3421 3421 IEM_MC_ADVANCE_RIP(); … … 3459 3459 3460 3460 IEM_MC_FETCH_MREG_U64(u64Tmp, (bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK); 3461 IEM_MC_STORE_MEM_U64(p IemCpu->iEffSeg, GCPtrEffSrc, u64Tmp);3461 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u64Tmp); 3462 3462 3463 3463 IEM_MC_ADVANCE_RIP(); … … 3479 3479 IEMOP_HLP_MIN_386(); 3480 3480 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 3481 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)3481 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 3482 3482 { 3483 3483 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); … … 3515 3515 IEMOP_HLP_MIN_386(); 3516 3516 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 3517 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)3517 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 3518 3518 { 3519 3519 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); … … 3551 3551 IEMOP_HLP_MIN_386(); 3552 3552 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 3553 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)3553 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 3554 3554 { 3555 3555 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); … … 3587 3587 IEMOP_HLP_MIN_386(); 3588 3588 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 3589 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)3589 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 3590 3590 { 3591 3591 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); … … 3623 3623 IEMOP_HLP_MIN_386(); 3624 3624 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 3625 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)3625 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 3626 3626 { 3627 3627 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); … … 3659 3659 IEMOP_HLP_MIN_386(); 3660 3660 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 3661 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)3661 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 3662 3662 { 3663 3663 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); … … 3695 3695 IEMOP_HLP_MIN_386(); 3696 3696 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 3697 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)3697 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 3698 3698 { 3699 3699 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); … … 3731 3731 IEMOP_HLP_MIN_386(); 3732 3732 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 3733 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)3733 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 3734 3734 { 3735 3735 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); … … 3767 3767 IEMOP_HLP_MIN_386(); 3768 3768 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 3769 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)3769 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 3770 3770 { 3771 3771 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); … … 3803 3803 IEMOP_HLP_MIN_386(); 3804 3804 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 3805 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)3805 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 3806 3806 { 3807 3807 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); … … 3839 3839 IEMOP_HLP_MIN_386(); 3840 3840 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 3841 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)3841 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 3842 3842 { 3843 3843 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); … … 3875 3875 IEMOP_HLP_MIN_386(); 3876 3876 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 3877 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)3877 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 3878 3878 { 3879 3879 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); … … 3911 3911 IEMOP_HLP_MIN_386(); 3912 3912 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 3913 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)3913 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 3914 3914 { 3915 3915 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); … … 3947 3947 IEMOP_HLP_MIN_386(); 3948 3948 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 3949 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)3949 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 3950 3950 { 3951 3951 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); … … 3983 3983 IEMOP_HLP_MIN_386(); 3984 3984 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 3985 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)3985 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 3986 3986 { 3987 3987 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); … … 4019 4019 IEMOP_HLP_MIN_386(); 4020 4020 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 4021 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)4021 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 4022 4022 { 4023 4023 int16_t i16Imm; IEM_OPCODE_GET_NEXT_S16(&i16Imm); … … 4065 4065 IEM_MC_BEGIN(0, 0); 4066 4066 IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) { 4067 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 1);4067 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1); 4068 4068 } IEM_MC_ELSE() { 4069 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 0);4069 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 0); 4070 4070 } IEM_MC_ENDIF(); 4071 4071 IEM_MC_ADVANCE_RIP(); … … 4079 4079 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4080 4080 IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) { 4081 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 1);4081 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1); 4082 4082 } IEM_MC_ELSE() { 4083 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 0);4083 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4084 4084 } IEM_MC_ENDIF(); 4085 4085 IEM_MC_ADVANCE_RIP(); … … 4106 4106 IEM_MC_BEGIN(0, 0); 4107 4107 IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) { 4108 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 0);4108 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 0); 4109 4109 } IEM_MC_ELSE() { 4110 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 1);4110 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1); 4111 4111 } IEM_MC_ENDIF(); 4112 4112 IEM_MC_ADVANCE_RIP(); … … 4120 4120 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4121 4121 IEM_MC_IF_EFL_BIT_SET(X86_EFL_OF) { 4122 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 0);4122 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4123 4123 } IEM_MC_ELSE() { 4124 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 1);4124 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1); 4125 4125 } IEM_MC_ENDIF(); 4126 4126 IEM_MC_ADVANCE_RIP(); … … 4147 4147 IEM_MC_BEGIN(0, 0); 4148 4148 IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) { 4149 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 1);4149 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1); 4150 4150 } IEM_MC_ELSE() { 4151 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 0);4151 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 0); 4152 4152 } IEM_MC_ENDIF(); 4153 4153 IEM_MC_ADVANCE_RIP(); … … 4161 4161 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4162 4162 IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) { 4163 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 1);4163 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1); 4164 4164 } IEM_MC_ELSE() { 4165 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 0);4165 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4166 4166 } IEM_MC_ENDIF(); 4167 4167 IEM_MC_ADVANCE_RIP(); … … 4188 4188 IEM_MC_BEGIN(0, 0); 4189 4189 IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) { 4190 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 0);4190 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 0); 4191 4191 } IEM_MC_ELSE() { 4192 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 1);4192 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1); 4193 4193 } IEM_MC_ENDIF(); 4194 4194 IEM_MC_ADVANCE_RIP(); … … 4202 4202 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4203 4203 IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) { 4204 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 0);4204 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4205 4205 } IEM_MC_ELSE() { 4206 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 1);4206 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1); 4207 4207 } IEM_MC_ENDIF(); 4208 4208 IEM_MC_ADVANCE_RIP(); … … 4229 4229 IEM_MC_BEGIN(0, 0); 4230 4230 IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) { 4231 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 1);4231 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1); 4232 4232 } IEM_MC_ELSE() { 4233 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 0);4233 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 0); 4234 4234 } IEM_MC_ENDIF(); 4235 4235 IEM_MC_ADVANCE_RIP(); … … 4243 4243 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4244 4244 IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) { 4245 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 1);4245 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1); 4246 4246 } IEM_MC_ELSE() { 4247 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 0);4247 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4248 4248 } IEM_MC_ENDIF(); 4249 4249 IEM_MC_ADVANCE_RIP(); … … 4270 4270 IEM_MC_BEGIN(0, 0); 4271 4271 IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) { 4272 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 0);4272 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 0); 4273 4273 } IEM_MC_ELSE() { 4274 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 1);4274 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1); 4275 4275 } IEM_MC_ENDIF(); 4276 4276 IEM_MC_ADVANCE_RIP(); … … 4284 4284 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4285 4285 IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) { 4286 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 0);4286 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4287 4287 } IEM_MC_ELSE() { 4288 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 1);4288 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1); 4289 4289 } IEM_MC_ENDIF(); 4290 4290 IEM_MC_ADVANCE_RIP(); … … 4311 4311 IEM_MC_BEGIN(0, 0); 4312 4312 IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) { 4313 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 1);4313 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1); 4314 4314 } IEM_MC_ELSE() { 4315 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 0);4315 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 0); 4316 4316 } IEM_MC_ENDIF(); 4317 4317 IEM_MC_ADVANCE_RIP(); … … 4325 4325 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4326 4326 IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) { 4327 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 1);4327 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1); 4328 4328 } IEM_MC_ELSE() { 4329 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 0);4329 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4330 4330 } IEM_MC_ENDIF(); 4331 4331 IEM_MC_ADVANCE_RIP(); … … 4352 4352 IEM_MC_BEGIN(0, 0); 4353 4353 IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) { 4354 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 0);4354 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 0); 4355 4355 } IEM_MC_ELSE() { 4356 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 1);4356 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1); 4357 4357 } IEM_MC_ENDIF(); 4358 4358 IEM_MC_ADVANCE_RIP(); … … 4366 4366 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4367 4367 IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) { 4368 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 0);4368 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4369 4369 } IEM_MC_ELSE() { 4370 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 1);4370 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1); 4371 4371 } IEM_MC_ENDIF(); 4372 4372 IEM_MC_ADVANCE_RIP(); … … 4393 4393 IEM_MC_BEGIN(0, 0); 4394 4394 IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) { 4395 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 1);4395 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1); 4396 4396 } IEM_MC_ELSE() { 4397 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 0);4397 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 0); 4398 4398 } IEM_MC_ENDIF(); 4399 4399 IEM_MC_ADVANCE_RIP(); … … 4407 4407 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4408 4408 IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) { 4409 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 1);4409 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1); 4410 4410 } IEM_MC_ELSE() { 4411 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 0);4411 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4412 4412 } IEM_MC_ENDIF(); 4413 4413 IEM_MC_ADVANCE_RIP(); … … 4434 4434 IEM_MC_BEGIN(0, 0); 4435 4435 IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) { 4436 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 0);4436 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 0); 4437 4437 } IEM_MC_ELSE() { 4438 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 1);4438 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1); 4439 4439 } IEM_MC_ENDIF(); 4440 4440 IEM_MC_ADVANCE_RIP(); … … 4448 4448 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4449 4449 IEM_MC_IF_EFL_BIT_SET(X86_EFL_SF) { 4450 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 0);4450 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4451 4451 } IEM_MC_ELSE() { 4452 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 1);4452 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1); 4453 4453 } IEM_MC_ENDIF(); 4454 4454 IEM_MC_ADVANCE_RIP(); … … 4475 4475 IEM_MC_BEGIN(0, 0); 4476 4476 IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) { 4477 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 1);4477 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1); 4478 4478 } IEM_MC_ELSE() { 4479 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 0);4479 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 0); 4480 4480 } IEM_MC_ENDIF(); 4481 4481 IEM_MC_ADVANCE_RIP(); … … 4489 4489 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4490 4490 IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) { 4491 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 1);4491 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1); 4492 4492 } IEM_MC_ELSE() { 4493 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 0);4493 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4494 4494 } IEM_MC_ENDIF(); 4495 4495 IEM_MC_ADVANCE_RIP(); … … 4516 4516 IEM_MC_BEGIN(0, 0); 4517 4517 IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) { 4518 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 0);4518 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 0); 4519 4519 } IEM_MC_ELSE() { 4520 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 1);4520 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1); 4521 4521 } IEM_MC_ENDIF(); 4522 4522 IEM_MC_ADVANCE_RIP(); … … 4530 4530 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4531 4531 IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) { 4532 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 0);4532 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4533 4533 } IEM_MC_ELSE() { 4534 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 1);4534 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1); 4535 4535 } IEM_MC_ENDIF(); 4536 4536 IEM_MC_ADVANCE_RIP(); … … 4557 4557 IEM_MC_BEGIN(0, 0); 4558 4558 IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) { 4559 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 1);4559 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1); 4560 4560 } IEM_MC_ELSE() { 4561 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 0);4561 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 0); 4562 4562 } IEM_MC_ENDIF(); 4563 4563 IEM_MC_ADVANCE_RIP(); … … 4571 4571 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4572 4572 IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) { 4573 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 1);4573 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1); 4574 4574 } IEM_MC_ELSE() { 4575 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 0);4575 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4576 4576 } IEM_MC_ENDIF(); 4577 4577 IEM_MC_ADVANCE_RIP(); … … 4598 4598 IEM_MC_BEGIN(0, 0); 4599 4599 IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) { 4600 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 0);4600 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 0); 4601 4601 } IEM_MC_ELSE() { 4602 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 1);4602 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1); 4603 4603 } IEM_MC_ENDIF(); 4604 4604 IEM_MC_ADVANCE_RIP(); … … 4612 4612 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4613 4613 IEM_MC_IF_EFL_BITS_NE(X86_EFL_SF, X86_EFL_OF) { 4614 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 0);4614 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4615 4615 } IEM_MC_ELSE() { 4616 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 1);4616 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1); 4617 4617 } IEM_MC_ENDIF(); 4618 4618 IEM_MC_ADVANCE_RIP(); … … 4639 4639 IEM_MC_BEGIN(0, 0); 4640 4640 IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) { 4641 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 1);4641 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1); 4642 4642 } IEM_MC_ELSE() { 4643 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 0);4643 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 0); 4644 4644 } IEM_MC_ENDIF(); 4645 4645 IEM_MC_ADVANCE_RIP(); … … 4653 4653 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4654 4654 IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) { 4655 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 1);4655 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1); 4656 4656 } IEM_MC_ELSE() { 4657 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 0);4657 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4658 4658 } IEM_MC_ENDIF(); 4659 4659 IEM_MC_ADVANCE_RIP(); … … 4680 4680 IEM_MC_BEGIN(0, 0); 4681 4681 IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) { 4682 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 0);4682 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 0); 4683 4683 } IEM_MC_ELSE() { 4684 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, 1);4684 IEM_MC_STORE_GREG_U8_CONST((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, 1); 4685 4685 } IEM_MC_ENDIF(); 4686 4686 IEM_MC_ADVANCE_RIP(); … … 4694 4694 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4695 4695 IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE(X86_EFL_ZF, X86_EFL_SF, X86_EFL_OF) { 4696 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 0);4696 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4697 4697 } IEM_MC_ELSE() { 4698 IEM_MC_STORE_MEM_U8_CONST(p IemCpu->iEffSeg, GCPtrEffDst, 1);4698 IEM_MC_STORE_MEM_U8_CONST(pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1); 4699 4699 } IEM_MC_ENDIF(); 4700 4700 IEM_MC_ADVANCE_RIP(); … … 4715 4715 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 4716 4716 4717 switch (p IemCpu->enmEffOpSize)4717 switch (pVCpu->iem.s.enmEffOpSize) 4718 4718 { 4719 4719 case IEMMODE_16BIT: … … 4765 4765 IEMOP_HLP_MIN_386(); 4766 4766 IEMOP_HLP_NO_LOCK_PREFIX(); 4767 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_pop_Sreg, X86_SREG_FS, p IemCpu->enmEffOpSize);4767 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_pop_Sreg, X86_SREG_FS, pVCpu->iem.s.enmEffOpSize); 4768 4768 } 4769 4769 … … 4792 4792 /* register destination. */ 4793 4793 IEMOP_HLP_NO_LOCK_PREFIX(); 4794 switch (p IemCpu->enmEffOpSize)4794 switch (pVCpu->iem.s.enmEffOpSize) 4795 4795 { 4796 4796 case IEMMODE_16BIT: … … 4800 4800 IEM_MC_ARG(uint32_t *, pEFlags, 2); 4801 4801 4802 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);4802 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 4803 4803 IEM_MC_AND_LOCAL_U16(u16Src, 0xf); 4804 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);4804 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 4805 4805 IEM_MC_REF_EFLAGS(pEFlags); 4806 4806 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, u16Src, pEFlags); … … 4816 4816 IEM_MC_ARG(uint32_t *, pEFlags, 2); 4817 4817 4818 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);4818 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 4819 4819 IEM_MC_AND_LOCAL_U32(u32Src, 0x1f); 4820 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);4820 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 4821 4821 IEM_MC_REF_EFLAGS(pEFlags); 4822 4822 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); … … 4833 4833 IEM_MC_ARG(uint32_t *, pEFlags, 2); 4834 4834 4835 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);4835 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 4836 4836 IEM_MC_AND_LOCAL_U64(u64Src, 0x3f); 4837 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);4837 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 4838 4838 IEM_MC_REF_EFLAGS(pEFlags); 4839 4839 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, u64Src, pEFlags); … … 4862 4862 4863 4863 /** @todo test negative bit offsets! */ 4864 switch (p IemCpu->enmEffOpSize)4864 switch (pVCpu->iem.s.enmEffOpSize) 4865 4865 { 4866 4866 case IEMMODE_16BIT: … … 4873 4873 4874 4874 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4875 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);4875 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 4876 4876 IEM_MC_ASSIGN(i16AddrAdj, u16Src); 4877 4877 IEM_MC_AND_ARG_U16(u16Src, 0x0f); … … 4881 4881 IEM_MC_FETCH_EFLAGS(EFlags); 4882 4882 4883 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0);4884 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))4883 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4884 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 4885 4885 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, u16Src, pEFlags); 4886 4886 else … … 4902 4902 4903 4903 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4904 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);4904 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 4905 4905 IEM_MC_ASSIGN(i32AddrAdj, u32Src); 4906 4906 IEM_MC_AND_ARG_U32(u32Src, 0x1f); … … 4910 4910 IEM_MC_FETCH_EFLAGS(EFlags); 4911 4911 4912 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0);4913 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))4912 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4913 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 4914 4914 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); 4915 4915 else … … 4931 4931 4932 4932 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 4933 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);4933 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 4934 4934 IEM_MC_ASSIGN(i64AddrAdj, u64Src); 4935 4935 IEM_MC_AND_ARG_U64(u64Src, 0x3f); … … 4939 4939 IEM_MC_FETCH_EFLAGS(EFlags); 4940 4940 4941 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0);4942 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))4941 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 4942 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 4943 4943 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, u64Src, pEFlags); 4944 4944 else … … 4980 4980 IEMOP_HLP_NO_LOCK_PREFIX(); 4981 4981 4982 switch (p IemCpu->enmEffOpSize)4982 switch (pVCpu->iem.s.enmEffOpSize) 4983 4983 { 4984 4984 case IEMMODE_16BIT: … … 4989 4989 IEM_MC_ARG(uint32_t *, pEFlags, 3); 4990 4990 4991 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);4992 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);4991 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 4992 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 4993 4993 IEM_MC_REF_EFLAGS(pEFlags); 4994 4994 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU16, pu16Dst, u16Src, cShiftArg, pEFlags); … … 5005 5005 IEM_MC_ARG(uint32_t *, pEFlags, 3); 5006 5006 5007 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5008 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);5007 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5008 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 5009 5009 IEM_MC_REF_EFLAGS(pEFlags); 5010 5010 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU32, pu32Dst, u32Src, cShiftArg, pEFlags); … … 5022 5022 IEM_MC_ARG(uint32_t *, pEFlags, 3); 5023 5023 5024 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5025 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);5024 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5025 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 5026 5026 IEM_MC_REF_EFLAGS(pEFlags); 5027 5027 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU64, pu64Dst, u64Src, cShiftArg, pEFlags); … … 5038 5038 IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */ 5039 5039 5040 switch (p IemCpu->enmEffOpSize)5040 switch (pVCpu->iem.s.enmEffOpSize) 5041 5041 { 5042 5042 case IEMMODE_16BIT: … … 5051 5051 uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift); 5052 5052 IEM_MC_ASSIGN(cShiftArg, cShift); 5053 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5053 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5054 5054 IEM_MC_FETCH_EFLAGS(EFlags); 5055 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0);5055 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 5056 5056 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU16, pu16Dst, u16Src, cShiftArg, pEFlags); 5057 5057 … … 5073 5073 uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift); 5074 5074 IEM_MC_ASSIGN(cShiftArg, cShift); 5075 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5075 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5076 5076 IEM_MC_FETCH_EFLAGS(EFlags); 5077 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0);5077 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 5078 5078 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU32, pu32Dst, u32Src, cShiftArg, pEFlags); 5079 5079 … … 5095 5095 uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift); 5096 5096 IEM_MC_ASSIGN(cShiftArg, cShift); 5097 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5097 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5098 5098 IEM_MC_FETCH_EFLAGS(EFlags); 5099 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0);5099 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 5100 5100 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU64, pu64Dst, u64Src, cShiftArg, pEFlags); 5101 5101 … … 5125 5125 IEMOP_HLP_NO_LOCK_PREFIX(); 5126 5126 5127 switch (p IemCpu->enmEffOpSize)5127 switch (pVCpu->iem.s.enmEffOpSize) 5128 5128 { 5129 5129 case IEMMODE_16BIT: … … 5134 5134 IEM_MC_ARG(uint32_t *, pEFlags, 3); 5135 5135 5136 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5137 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);5136 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5137 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 5138 5138 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 5139 5139 IEM_MC_REF_EFLAGS(pEFlags); … … 5151 5151 IEM_MC_ARG(uint32_t *, pEFlags, 3); 5152 5152 5153 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5154 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);5153 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5154 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 5155 5155 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 5156 5156 IEM_MC_REF_EFLAGS(pEFlags); … … 5169 5169 IEM_MC_ARG(uint32_t *, pEFlags, 3); 5170 5170 5171 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5172 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);5171 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5172 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 5173 5173 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 5174 5174 IEM_MC_REF_EFLAGS(pEFlags); … … 5186 5186 IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo too early? */ 5187 5187 5188 switch (p IemCpu->enmEffOpSize)5188 switch (pVCpu->iem.s.enmEffOpSize) 5189 5189 { 5190 5190 case IEMMODE_16BIT: … … 5197 5197 5198 5198 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 5199 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5199 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5200 5200 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 5201 5201 IEM_MC_FETCH_EFLAGS(EFlags); 5202 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0);5202 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 5203 5203 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU16, pu16Dst, u16Src, cShiftArg, pEFlags); 5204 5204 … … 5218 5218 5219 5219 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 5220 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5220 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5221 5221 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 5222 5222 IEM_MC_FETCH_EFLAGS(EFlags); 5223 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0);5223 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 5224 5224 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU32, pu32Dst, u32Src, cShiftArg, pEFlags); 5225 5225 … … 5239 5239 5240 5240 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 5241 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5241 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5242 5242 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 5243 5243 IEM_MC_FETCH_EFLAGS(EFlags); 5244 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0);5244 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 5245 5245 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU64, pu64Dst, u64Src, cShiftArg, pEFlags); 5246 5246 … … 5292 5292 IEMOP_HLP_MIN_386(); 5293 5293 IEMOP_HLP_NO_LOCK_PREFIX(); 5294 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_pop_Sreg, X86_SREG_GS, p IemCpu->enmEffOpSize);5294 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_pop_Sreg, X86_SREG_GS, pVCpu->iem.s.enmEffOpSize); 5295 5295 } 5296 5296 … … 5332 5332 { 5333 5333 IEMOP_MNEMONIC("fxsave m512"); 5334 if (!IEM_GET_GUEST_CPU_FEATURES(p IemCpu)->fFxSaveRstor)5334 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fFxSaveRstor) 5335 5335 return IEMOP_RAISE_INVALID_OPCODE(); 5336 5336 … … 5338 5338 IEM_MC_ARG(uint8_t, iEffSeg, 0); 5339 5339 IEM_MC_ARG(RTGCPTR, GCPtrEff, 1); 5340 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize,/*=*/p IemCpu->enmEffOpSize, 2);5340 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize,/*=*/pVCpu->iem.s.enmEffOpSize, 2); 5341 5341 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEff, bRm, 0); 5342 5342 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5343 IEM_MC_ASSIGN(iEffSeg, p IemCpu->iEffSeg);5343 IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg); 5344 5344 IEM_MC_CALL_CIMPL_3(iemCImpl_fxsave, iEffSeg, GCPtrEff, enmEffOpSize); 5345 5345 IEM_MC_END(); … … 5352 5352 { 5353 5353 IEMOP_MNEMONIC("fxrstor m512"); 5354 if (!IEM_GET_GUEST_CPU_FEATURES(p IemCpu)->fFxSaveRstor)5354 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fFxSaveRstor) 5355 5355 return IEMOP_RAISE_INVALID_OPCODE(); 5356 5356 … … 5358 5358 IEM_MC_ARG(uint8_t, iEffSeg, 0); 5359 5359 IEM_MC_ARG(RTGCPTR, GCPtrEff, 1); 5360 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize,/*=*/p IemCpu->enmEffOpSize, 2);5360 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize,/*=*/pVCpu->iem.s.enmEffOpSize, 2); 5361 5361 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEff, bRm, 0); 5362 5362 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5363 IEM_MC_ASSIGN(iEffSeg, p IemCpu->iEffSeg);5363 IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg); 5364 5364 IEM_MC_CALL_CIMPL_3(iemCImpl_fxrstor, iEffSeg, GCPtrEff, enmEffOpSize); 5365 5365 IEM_MC_END(); … … 5392 5392 IEMOP_MNEMONIC("lfence"); 5393 5393 IEMOP_HLP_NO_LOCK_PREFIX(); 5394 if (!IEM_GET_GUEST_CPU_FEATURES(p IemCpu)->fSse2)5394 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse2) 5395 5395 return IEMOP_RAISE_INVALID_OPCODE(); 5396 5396 5397 5397 IEM_MC_BEGIN(0, 0); 5398 if (IEM_GET_HOST_CPU_FEATURES(p IemCpu)->fSse2)5398 if (IEM_GET_HOST_CPU_FEATURES(pVCpu)->fSse2) 5399 5399 IEM_MC_CALL_VOID_AIMPL_0(iemAImpl_lfence); 5400 5400 else … … 5411 5411 IEMOP_MNEMONIC("mfence"); 5412 5412 IEMOP_HLP_NO_LOCK_PREFIX(); 5413 if (!IEM_GET_GUEST_CPU_FEATURES(p IemCpu)->fSse2)5413 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse2) 5414 5414 return IEMOP_RAISE_INVALID_OPCODE(); 5415 5415 5416 5416 IEM_MC_BEGIN(0, 0); 5417 if (IEM_GET_HOST_CPU_FEATURES(p IemCpu)->fSse2)5417 if (IEM_GET_HOST_CPU_FEATURES(pVCpu)->fSse2) 5418 5418 IEM_MC_CALL_VOID_AIMPL_0(iemAImpl_mfence); 5419 5419 else … … 5430 5430 IEMOP_MNEMONIC("sfence"); 5431 5431 IEMOP_HLP_NO_LOCK_PREFIX(); 5432 if (!IEM_GET_GUEST_CPU_FEATURES(p IemCpu)->fSse2)5432 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse2) 5433 5433 return IEMOP_RAISE_INVALID_OPCODE(); 5434 5434 5435 5435 IEM_MC_BEGIN(0, 0); 5436 if (IEM_GET_HOST_CPU_FEATURES(p IemCpu)->fSse2)5436 if (IEM_GET_HOST_CPU_FEATURES(pVCpu)->fSse2) 5437 5437 IEM_MC_CALL_VOID_AIMPL_0(iemAImpl_sfence); 5438 5438 else … … 5479 5479 else 5480 5480 { 5481 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ | IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_LOCK))5481 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ | IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_LOCK)) 5482 5482 { 5483 5483 case 0: … … 5544 5544 IEM_MC_ARG(uint32_t *, pEFlags, 3); 5545 5545 5546 IEM_MC_FETCH_GREG_U8(u8Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5547 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);5546 IEM_MC_FETCH_GREG_U8(u8Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5547 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 5548 5548 IEM_MC_REF_GREG_U8(pu8Al, X86_GREG_xAX); 5549 5549 IEM_MC_REF_EFLAGS(pEFlags); 5550 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))5550 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 5551 5551 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpxchg_u8, pu8Dst, pu8Al, u8Src, pEFlags); 5552 5552 else … … 5568 5568 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 5569 5569 IEMOP_HLP_DONE_DECODING(); 5570 IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0);5571 IEM_MC_FETCH_GREG_U8(u8Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5570 IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 5571 IEM_MC_FETCH_GREG_U8(u8Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5572 5572 IEM_MC_FETCH_GREG_U8(u8Al, X86_GREG_xAX); 5573 5573 IEM_MC_FETCH_EFLAGS(EFlags); 5574 5574 IEM_MC_REF_LOCAL(pu8Al, u8Al); 5575 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))5575 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 5576 5576 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpxchg_u8, pu8Dst, pu8Al, u8Src, pEFlags); 5577 5577 else … … 5597 5597 { 5598 5598 IEMOP_HLP_DONE_DECODING(); 5599 switch (p IemCpu->enmEffOpSize)5599 switch (pVCpu->iem.s.enmEffOpSize) 5600 5600 { 5601 5601 case IEMMODE_16BIT: … … 5606 5606 IEM_MC_ARG(uint32_t *, pEFlags, 3); 5607 5607 5608 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5609 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);5608 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5609 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 5610 5610 IEM_MC_REF_GREG_U16(pu16Ax, X86_GREG_xAX); 5611 5611 IEM_MC_REF_EFLAGS(pEFlags); 5612 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))5612 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 5613 5613 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpxchg_u16, pu16Dst, pu16Ax, u16Src, pEFlags); 5614 5614 else … … 5626 5626 IEM_MC_ARG(uint32_t *, pEFlags, 3); 5627 5627 5628 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5629 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);5628 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5629 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 5630 5630 IEM_MC_REF_GREG_U32(pu32Eax, X86_GREG_xAX); 5631 5631 IEM_MC_REF_EFLAGS(pEFlags); 5632 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))5632 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 5633 5633 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpxchg_u32, pu32Dst, pu32Eax, u32Src, pEFlags); 5634 5634 else … … 5652 5652 IEM_MC_ARG(uint32_t *, pEFlags, 3); 5653 5653 5654 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);5654 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 5655 5655 IEM_MC_REF_GREG_U64(pu64Rax, X86_GREG_xAX); 5656 5656 IEM_MC_REF_EFLAGS(pEFlags); 5657 5657 #ifdef RT_ARCH_X86 5658 IEM_MC_REF_GREG_U64(pu64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5659 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))5658 IEM_MC_REF_GREG_U64(pu64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5659 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 5660 5660 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpxchg_u64, pu64Dst, pu64Rax, pu64Src, pEFlags); 5661 5661 else 5662 5662 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpxchg_u64_locked, pu64Dst, pu64Rax, pu64Src, pEFlags); 5663 5663 #else 5664 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5665 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))5664 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5665 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 5666 5666 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpxchg_u64, pu64Dst, pu64Rax, u64Src, pEFlags); 5667 5667 else … … 5678 5678 else 5679 5679 { 5680 switch (p IemCpu->enmEffOpSize)5680 switch (pVCpu->iem.s.enmEffOpSize) 5681 5681 { 5682 5682 case IEMMODE_16BIT: … … 5691 5691 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 5692 5692 IEMOP_HLP_DONE_DECODING(); 5693 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0);5694 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5693 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 5694 IEM_MC_FETCH_GREG_U16(u16Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5695 5695 IEM_MC_FETCH_GREG_U16(u16Ax, X86_GREG_xAX); 5696 5696 IEM_MC_FETCH_EFLAGS(EFlags); 5697 5697 IEM_MC_REF_LOCAL(pu16Ax, u16Ax); 5698 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))5698 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 5699 5699 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpxchg_u16, pu16Dst, pu16Ax, u16Src, pEFlags); 5700 5700 else … … 5719 5719 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 5720 5720 IEMOP_HLP_DONE_DECODING(); 5721 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0);5722 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5721 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 5722 IEM_MC_FETCH_GREG_U32(u32Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5723 5723 IEM_MC_FETCH_GREG_U32(u32Eax, X86_GREG_xAX); 5724 5724 IEM_MC_FETCH_EFLAGS(EFlags); 5725 5725 IEM_MC_REF_LOCAL(pu32Eax, u32Eax); 5726 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))5726 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 5727 5727 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpxchg_u32, pu32Dst, pu32Eax, u32Src, pEFlags); 5728 5728 else … … 5751 5751 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 5752 5752 IEMOP_HLP_DONE_DECODING(); 5753 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0);5753 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 5754 5754 IEM_MC_FETCH_GREG_U64(u64Rax, X86_GREG_xAX); 5755 5755 IEM_MC_FETCH_EFLAGS(EFlags); 5756 5756 IEM_MC_REF_LOCAL(pu64Rax, u64Rax); 5757 5757 #ifdef RT_ARCH_X86 5758 IEM_MC_REF_GREG_U64(pu64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5759 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))5758 IEM_MC_REF_GREG_U64(pu64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5759 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 5760 5760 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpxchg_u64, pu64Dst, pu64Rax, pu64Src, pEFlags); 5761 5761 else 5762 5762 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpxchg_u64_locked, pu64Dst, pu64Rax, pu64Src, pEFlags); 5763 5763 #else 5764 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);5765 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))5764 IEM_MC_FETCH_GREG_U64(u64Src, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 5765 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 5766 5766 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpxchg_u64, pu64Dst, pu64Rax, u64Src, pEFlags); 5767 5767 else … … 5785 5785 { 5786 5786 Assert((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)); /* Caller checks this */ 5787 uint8_t const iGReg = ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg;5788 5789 switch (p IemCpu->enmEffOpSize)5787 uint8_t const iGReg = ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg; 5788 5789 switch (pVCpu->iem.s.enmEffOpSize) 5790 5790 { 5791 5791 case IEMMODE_16BIT: … … 5795 5795 IEM_MC_ARG_CONST(uint8_t, iSegRegArg,/*=*/iSegReg, 2); 5796 5796 IEM_MC_ARG_CONST(uint8_t, iGRegArg, /*=*/iGReg, 3); 5797 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize,/*=*/p IemCpu->enmEffOpSize, 4);5797 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize,/*=*/pVCpu->iem.s.enmEffOpSize, 4); 5798 5798 IEM_MC_LOCAL(RTGCPTR, GCPtrEff); 5799 5799 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEff, bRm, 0); 5800 5800 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5801 IEM_MC_FETCH_MEM_U16(offSeg, p IemCpu->iEffSeg, GCPtrEff);5802 IEM_MC_FETCH_MEM_U16_DISP(uSel, p IemCpu->iEffSeg, GCPtrEff, 2);5801 IEM_MC_FETCH_MEM_U16(offSeg, pVCpu->iem.s.iEffSeg, GCPtrEff); 5802 IEM_MC_FETCH_MEM_U16_DISP(uSel, pVCpu->iem.s.iEffSeg, GCPtrEff, 2); 5803 5803 IEM_MC_CALL_CIMPL_5(iemCImpl_load_SReg_Greg, uSel, offSeg, iSegRegArg, iGRegArg, enmEffOpSize); 5804 5804 IEM_MC_END(); … … 5811 5811 IEM_MC_ARG_CONST(uint8_t, iSegRegArg,/*=*/iSegReg, 2); 5812 5812 IEM_MC_ARG_CONST(uint8_t, iGRegArg, /*=*/iGReg, 3); 5813 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize,/*=*/p IemCpu->enmEffOpSize, 4);5813 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize,/*=*/pVCpu->iem.s.enmEffOpSize, 4); 5814 5814 IEM_MC_LOCAL(RTGCPTR, GCPtrEff); 5815 5815 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEff, bRm, 0); 5816 5816 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5817 IEM_MC_FETCH_MEM_U32(offSeg, p IemCpu->iEffSeg, GCPtrEff);5818 IEM_MC_FETCH_MEM_U16_DISP(uSel, p IemCpu->iEffSeg, GCPtrEff, 4);5817 IEM_MC_FETCH_MEM_U32(offSeg, pVCpu->iem.s.iEffSeg, GCPtrEff); 5818 IEM_MC_FETCH_MEM_U16_DISP(uSel, pVCpu->iem.s.iEffSeg, GCPtrEff, 4); 5819 5819 IEM_MC_CALL_CIMPL_5(iemCImpl_load_SReg_Greg, uSel, offSeg, iSegRegArg, iGRegArg, enmEffOpSize); 5820 5820 IEM_MC_END(); … … 5827 5827 IEM_MC_ARG_CONST(uint8_t, iSegRegArg,/*=*/iSegReg, 2); 5828 5828 IEM_MC_ARG_CONST(uint8_t, iGRegArg, /*=*/iGReg, 3); 5829 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize,/*=*/p IemCpu->enmEffOpSize, 4);5829 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize,/*=*/pVCpu->iem.s.enmEffOpSize, 4); 5830 5830 IEM_MC_LOCAL(RTGCPTR, GCPtrEff); 5831 5831 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEff, bRm, 0); 5832 5832 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5833 if (IEM_IS_GUEST_CPU_AMD(p IemCpu)) /** @todo testcase: rev 3.15 of the amd manuals claims it only loads a 32-bit greg. */5834 IEM_MC_FETCH_MEM_U32_SX_U64(offSeg, p IemCpu->iEffSeg, GCPtrEff);5833 if (IEM_IS_GUEST_CPU_AMD(pVCpu)) /** @todo testcase: rev 3.15 of the amd manuals claims it only loads a 32-bit greg. */ 5834 IEM_MC_FETCH_MEM_U32_SX_U64(offSeg, pVCpu->iem.s.iEffSeg, GCPtrEff); 5835 5835 else 5836 IEM_MC_FETCH_MEM_U64(offSeg, p IemCpu->iEffSeg, GCPtrEff);5837 IEM_MC_FETCH_MEM_U16_DISP(uSel, p IemCpu->iEffSeg, GCPtrEff, 8);5836 IEM_MC_FETCH_MEM_U64(offSeg, pVCpu->iem.s.iEffSeg, GCPtrEff); 5837 IEM_MC_FETCH_MEM_U16_DISP(uSel, pVCpu->iem.s.iEffSeg, GCPtrEff, 8); 5838 5838 IEM_MC_CALL_CIMPL_5(iemCImpl_load_SReg_Greg, uSel, offSeg, iSegRegArg, iGRegArg, enmEffOpSize); 5839 5839 IEM_MC_END(); … … 5903 5903 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 5904 5904 { 5905 switch (p IemCpu->enmEffOpSize)5905 switch (pVCpu->iem.s.enmEffOpSize) 5906 5906 { 5907 5907 case IEMMODE_16BIT: 5908 5908 IEM_MC_BEGIN(0, 1); 5909 5909 IEM_MC_LOCAL(uint16_t, u16Value); 5910 IEM_MC_FETCH_GREG_U8_ZX_U16(u16Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);5911 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u16Value);5910 IEM_MC_FETCH_GREG_U8_ZX_U16(u16Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 5911 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16Value); 5912 5912 IEM_MC_ADVANCE_RIP(); 5913 5913 IEM_MC_END(); … … 5917 5917 IEM_MC_BEGIN(0, 1); 5918 5918 IEM_MC_LOCAL(uint32_t, u32Value); 5919 IEM_MC_FETCH_GREG_U8_ZX_U32(u32Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);5920 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Value);5919 IEM_MC_FETCH_GREG_U8_ZX_U32(u32Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 5920 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Value); 5921 5921 IEM_MC_ADVANCE_RIP(); 5922 5922 IEM_MC_END(); … … 5926 5926 IEM_MC_BEGIN(0, 1); 5927 5927 IEM_MC_LOCAL(uint64_t, u64Value); 5928 IEM_MC_FETCH_GREG_U8_ZX_U64(u64Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);5929 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Value);5928 IEM_MC_FETCH_GREG_U8_ZX_U64(u64Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 5929 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Value); 5930 5930 IEM_MC_ADVANCE_RIP(); 5931 5931 IEM_MC_END(); … … 5940 5940 * We're loading a register from memory. 5941 5941 */ 5942 switch (p IemCpu->enmEffOpSize)5942 switch (pVCpu->iem.s.enmEffOpSize) 5943 5943 { 5944 5944 case IEMMODE_16BIT: … … 5947 5947 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 5948 5948 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 5949 IEM_MC_FETCH_MEM_U8_ZX_U16(u16Value, p IemCpu->iEffSeg, GCPtrEffDst);5950 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u16Value);5949 IEM_MC_FETCH_MEM_U8_ZX_U16(u16Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 5950 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16Value); 5951 5951 IEM_MC_ADVANCE_RIP(); 5952 5952 IEM_MC_END(); … … 5958 5958 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 5959 5959 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 5960 IEM_MC_FETCH_MEM_U8_ZX_U32(u32Value, p IemCpu->iEffSeg, GCPtrEffDst);5961 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Value);5960 IEM_MC_FETCH_MEM_U8_ZX_U32(u32Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 5961 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Value); 5962 5962 IEM_MC_ADVANCE_RIP(); 5963 5963 IEM_MC_END(); … … 5969 5969 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 5970 5970 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 5971 IEM_MC_FETCH_MEM_U8_ZX_U64(u64Value, p IemCpu->iEffSeg, GCPtrEffDst);5972 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Value);5971 IEM_MC_FETCH_MEM_U8_ZX_U64(u64Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 5972 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Value); 5973 5973 IEM_MC_ADVANCE_RIP(); 5974 5974 IEM_MC_END(); … … 5998 5998 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 5999 5999 { 6000 if (p IemCpu->enmEffOpSize != IEMMODE_64BIT)6000 if (pVCpu->iem.s.enmEffOpSize != IEMMODE_64BIT) 6001 6001 { 6002 6002 IEM_MC_BEGIN(0, 1); 6003 6003 IEM_MC_LOCAL(uint32_t, u32Value); 6004 IEM_MC_FETCH_GREG_U16_ZX_U32(u32Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);6005 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Value);6004 IEM_MC_FETCH_GREG_U16_ZX_U32(u32Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 6005 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Value); 6006 6006 IEM_MC_ADVANCE_RIP(); 6007 6007 IEM_MC_END(); … … 6011 6011 IEM_MC_BEGIN(0, 1); 6012 6012 IEM_MC_LOCAL(uint64_t, u64Value); 6013 IEM_MC_FETCH_GREG_U16_ZX_U64(u64Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);6014 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Value);6013 IEM_MC_FETCH_GREG_U16_ZX_U64(u64Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 6014 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Value); 6015 6015 IEM_MC_ADVANCE_RIP(); 6016 6016 IEM_MC_END(); … … 6022 6022 * We're loading a register from memory. 6023 6023 */ 6024 if (p IemCpu->enmEffOpSize != IEMMODE_64BIT)6024 if (pVCpu->iem.s.enmEffOpSize != IEMMODE_64BIT) 6025 6025 { 6026 6026 IEM_MC_BEGIN(0, 2); … … 6028 6028 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 6029 6029 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 6030 IEM_MC_FETCH_MEM_U16_ZX_U32(u32Value, p IemCpu->iEffSeg, GCPtrEffDst);6031 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Value);6030 IEM_MC_FETCH_MEM_U16_ZX_U32(u32Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 6031 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Value); 6032 6032 IEM_MC_ADVANCE_RIP(); 6033 6033 IEM_MC_END(); … … 6039 6039 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 6040 6040 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 6041 IEM_MC_FETCH_MEM_U16_ZX_U64(u64Value, p IemCpu->iEffSeg, GCPtrEffDst);6042 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Value);6041 IEM_MC_FETCH_MEM_U16_ZX_U64(u64Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 6042 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Value); 6043 6043 IEM_MC_ADVANCE_RIP(); 6044 6044 IEM_MC_END(); … … 6085 6085 IEMOP_HLP_NO_LOCK_PREFIX(); 6086 6086 6087 switch (p IemCpu->enmEffOpSize)6087 switch (pVCpu->iem.s.enmEffOpSize) 6088 6088 { 6089 6089 case IEMMODE_16BIT: … … 6093 6093 IEM_MC_ARG(uint32_t *, pEFlags, 2); 6094 6094 6095 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);6095 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 6096 6096 IEM_MC_REF_EFLAGS(pEFlags); 6097 6097 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, u16Src, pEFlags); … … 6107 6107 IEM_MC_ARG(uint32_t *, pEFlags, 2); 6108 6108 6109 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);6109 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 6110 6110 IEM_MC_REF_EFLAGS(pEFlags); 6111 6111 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); … … 6122 6122 IEM_MC_ARG(uint32_t *, pEFlags, 2); 6123 6123 6124 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);6124 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 6125 6125 IEM_MC_REF_EFLAGS(pEFlags); 6126 6126 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, u64Src, pEFlags); … … 6147 6147 6148 6148 /** @todo test negative bit offsets! */ 6149 switch (p IemCpu->enmEffOpSize)6149 switch (pVCpu->iem.s.enmEffOpSize) 6150 6150 { 6151 6151 case IEMMODE_16BIT: … … 6160 6160 IEM_MC_ASSIGN(u16Src, u8Bit & 0x0f); 6161 6161 IEM_MC_FETCH_EFLAGS(EFlags); 6162 IEM_MC_MEM_MAP(pu16Dst, fAccess, p IemCpu->iEffSeg, GCPtrEffDst, 0);6163 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))6162 IEM_MC_MEM_MAP(pu16Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 6163 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 6164 6164 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, u16Src, pEFlags); 6165 6165 else … … 6183 6183 IEM_MC_ASSIGN(u32Src, u8Bit & 0x1f); 6184 6184 IEM_MC_FETCH_EFLAGS(EFlags); 6185 IEM_MC_MEM_MAP(pu32Dst, fAccess, p IemCpu->iEffSeg, GCPtrEffDst, 0);6186 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))6185 IEM_MC_MEM_MAP(pu32Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 6186 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 6187 6187 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); 6188 6188 else … … 6206 6206 IEM_MC_ASSIGN(u64Src, u8Bit & 0x3f); 6207 6207 IEM_MC_FETCH_EFLAGS(EFlags); 6208 IEM_MC_MEM_MAP(pu64Dst, fAccess, p IemCpu->iEffSeg, GCPtrEffDst, 0);6209 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))6208 IEM_MC_MEM_MAP(pu64Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0); 6209 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 6210 6210 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, u64Src, pEFlags); 6211 6211 else … … 6268 6268 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 6269 6269 { 6270 switch (p IemCpu->enmEffOpSize)6270 switch (pVCpu->iem.s.enmEffOpSize) 6271 6271 { 6272 6272 case IEMMODE_16BIT: 6273 6273 IEM_MC_BEGIN(0, 1); 6274 6274 IEM_MC_LOCAL(uint16_t, u16Value); 6275 IEM_MC_FETCH_GREG_U8_SX_U16(u16Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);6276 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u16Value);6275 IEM_MC_FETCH_GREG_U8_SX_U16(u16Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 6276 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16Value); 6277 6277 IEM_MC_ADVANCE_RIP(); 6278 6278 IEM_MC_END(); … … 6282 6282 IEM_MC_BEGIN(0, 1); 6283 6283 IEM_MC_LOCAL(uint32_t, u32Value); 6284 IEM_MC_FETCH_GREG_U8_SX_U32(u32Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);6285 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Value);6284 IEM_MC_FETCH_GREG_U8_SX_U32(u32Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 6285 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Value); 6286 6286 IEM_MC_ADVANCE_RIP(); 6287 6287 IEM_MC_END(); … … 6291 6291 IEM_MC_BEGIN(0, 1); 6292 6292 IEM_MC_LOCAL(uint64_t, u64Value); 6293 IEM_MC_FETCH_GREG_U8_SX_U64(u64Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);6294 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Value);6293 IEM_MC_FETCH_GREG_U8_SX_U64(u64Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 6294 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Value); 6295 6295 IEM_MC_ADVANCE_RIP(); 6296 6296 IEM_MC_END(); … … 6305 6305 * We're loading a register from memory. 6306 6306 */ 6307 switch (p IemCpu->enmEffOpSize)6307 switch (pVCpu->iem.s.enmEffOpSize) 6308 6308 { 6309 6309 case IEMMODE_16BIT: … … 6312 6312 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 6313 6313 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 6314 IEM_MC_FETCH_MEM_U8_SX_U16(u16Value, p IemCpu->iEffSeg, GCPtrEffDst);6315 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u16Value);6314 IEM_MC_FETCH_MEM_U8_SX_U16(u16Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 6315 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16Value); 6316 6316 IEM_MC_ADVANCE_RIP(); 6317 6317 IEM_MC_END(); … … 6323 6323 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 6324 6324 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 6325 IEM_MC_FETCH_MEM_U8_SX_U32(u32Value, p IemCpu->iEffSeg, GCPtrEffDst);6326 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Value);6325 IEM_MC_FETCH_MEM_U8_SX_U32(u32Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 6326 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Value); 6327 6327 IEM_MC_ADVANCE_RIP(); 6328 6328 IEM_MC_END(); … … 6334 6334 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 6335 6335 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 6336 IEM_MC_FETCH_MEM_U8_SX_U64(u64Value, p IemCpu->iEffSeg, GCPtrEffDst);6337 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Value);6336 IEM_MC_FETCH_MEM_U8_SX_U64(u64Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 6337 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Value); 6338 6338 IEM_MC_ADVANCE_RIP(); 6339 6339 IEM_MC_END(); … … 6363 6363 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 6364 6364 { 6365 if (p IemCpu->enmEffOpSize != IEMMODE_64BIT)6365 if (pVCpu->iem.s.enmEffOpSize != IEMMODE_64BIT) 6366 6366 { 6367 6367 IEM_MC_BEGIN(0, 1); 6368 6368 IEM_MC_LOCAL(uint32_t, u32Value); 6369 IEM_MC_FETCH_GREG_U16_SX_U32(u32Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);6370 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Value);6369 IEM_MC_FETCH_GREG_U16_SX_U32(u32Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 6370 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Value); 6371 6371 IEM_MC_ADVANCE_RIP(); 6372 6372 IEM_MC_END(); … … 6376 6376 IEM_MC_BEGIN(0, 1); 6377 6377 IEM_MC_LOCAL(uint64_t, u64Value); 6378 IEM_MC_FETCH_GREG_U16_SX_U64(u64Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);6379 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Value);6378 IEM_MC_FETCH_GREG_U16_SX_U64(u64Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 6379 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Value); 6380 6380 IEM_MC_ADVANCE_RIP(); 6381 6381 IEM_MC_END(); … … 6387 6387 * We're loading a register from memory. 6388 6388 */ 6389 if (p IemCpu->enmEffOpSize != IEMMODE_64BIT)6389 if (pVCpu->iem.s.enmEffOpSize != IEMMODE_64BIT) 6390 6390 { 6391 6391 IEM_MC_BEGIN(0, 2); … … 6393 6393 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 6394 6394 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 6395 IEM_MC_FETCH_MEM_U16_SX_U32(u32Value, p IemCpu->iEffSeg, GCPtrEffDst);6396 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Value);6395 IEM_MC_FETCH_MEM_U16_SX_U32(u32Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 6396 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Value); 6397 6397 IEM_MC_ADVANCE_RIP(); 6398 6398 IEM_MC_END(); … … 6404 6404 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 6405 6405 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 6406 IEM_MC_FETCH_MEM_U16_SX_U64(u64Value, p IemCpu->iEffSeg, GCPtrEffDst);6407 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Value);6406 IEM_MC_FETCH_MEM_U16_SX_U64(u64Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 6407 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Value); 6408 6408 IEM_MC_ADVANCE_RIP(); 6409 6409 IEM_MC_END(); … … 6433 6433 IEM_MC_ARG(uint32_t *, pEFlags, 2); 6434 6434 6435 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);6436 IEM_MC_REF_GREG_U8(pu8Reg, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);6435 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 6436 IEM_MC_REF_GREG_U8(pu8Reg, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 6437 6437 IEM_MC_REF_EFLAGS(pEFlags); 6438 6438 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_xadd_u8, pu8Dst, pu8Reg, pEFlags); … … 6454 6454 6455 6455 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 6456 IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);6457 IEM_MC_FETCH_GREG_U8(u8RegCopy, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);6456 IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 6457 IEM_MC_FETCH_GREG_U8(u8RegCopy, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 6458 6458 IEM_MC_REF_LOCAL(pu8Reg, u8RegCopy); 6459 6459 IEM_MC_FETCH_EFLAGS(EFlags); 6460 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))6460 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 6461 6461 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_xadd_u8, pu8Dst, pu8Reg, pEFlags); 6462 6462 else … … 6465 6465 IEM_MC_MEM_COMMIT_AND_UNMAP(pu8Dst, IEM_ACCESS_DATA_RW); 6466 6466 IEM_MC_COMMIT_EFLAGS(EFlags); 6467 IEM_MC_STORE_GREG_U8(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u8RegCopy);6467 IEM_MC_STORE_GREG_U8(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u8RegCopy); 6468 6468 IEM_MC_ADVANCE_RIP(); 6469 6469 IEM_MC_END(); … … 6488 6488 IEMOP_HLP_NO_LOCK_PREFIX(); 6489 6489 6490 switch (p IemCpu->enmEffOpSize)6490 switch (pVCpu->iem.s.enmEffOpSize) 6491 6491 { 6492 6492 case IEMMODE_16BIT: … … 6496 6496 IEM_MC_ARG(uint32_t *, pEFlags, 2); 6497 6497 6498 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);6499 IEM_MC_REF_GREG_U16(pu16Reg, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);6498 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 6499 IEM_MC_REF_GREG_U16(pu16Reg, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 6500 6500 IEM_MC_REF_EFLAGS(pEFlags); 6501 6501 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_xadd_u16, pu16Dst, pu16Reg, pEFlags); … … 6511 6511 IEM_MC_ARG(uint32_t *, pEFlags, 2); 6512 6512 6513 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);6514 IEM_MC_REF_GREG_U32(pu32Reg, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);6513 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 6514 IEM_MC_REF_GREG_U32(pu32Reg, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 6515 6515 IEM_MC_REF_EFLAGS(pEFlags); 6516 6516 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_xadd_u32, pu32Dst, pu32Reg, pEFlags); … … 6528 6528 IEM_MC_ARG(uint32_t *, pEFlags, 2); 6529 6529 6530 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);6531 IEM_MC_REF_GREG_U64(pu64Reg, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);6530 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 6531 IEM_MC_REF_GREG_U64(pu64Reg, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 6532 6532 IEM_MC_REF_EFLAGS(pEFlags); 6533 6533 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_xadd_u64, pu64Dst, pu64Reg, pEFlags); … … 6545 6545 * We're accessing memory. 6546 6546 */ 6547 switch (p IemCpu->enmEffOpSize)6547 switch (pVCpu->iem.s.enmEffOpSize) 6548 6548 { 6549 6549 case IEMMODE_16BIT: … … 6556 6556 6557 6557 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 6558 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);6559 IEM_MC_FETCH_GREG_U16(u16RegCopy, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);6558 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 6559 IEM_MC_FETCH_GREG_U16(u16RegCopy, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 6560 6560 IEM_MC_REF_LOCAL(pu16Reg, u16RegCopy); 6561 6561 IEM_MC_FETCH_EFLAGS(EFlags); 6562 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))6562 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 6563 6563 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_xadd_u16, pu16Dst, pu16Reg, pEFlags); 6564 6564 else … … 6567 6567 IEM_MC_MEM_COMMIT_AND_UNMAP(pu16Dst, IEM_ACCESS_DATA_RW); 6568 6568 IEM_MC_COMMIT_EFLAGS(EFlags); 6569 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u16RegCopy);6569 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16RegCopy); 6570 6570 IEM_MC_ADVANCE_RIP(); 6571 6571 IEM_MC_END(); … … 6581 6581 6582 6582 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 6583 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);6584 IEM_MC_FETCH_GREG_U32(u32RegCopy, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);6583 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 6584 IEM_MC_FETCH_GREG_U32(u32RegCopy, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 6585 6585 IEM_MC_REF_LOCAL(pu32Reg, u32RegCopy); 6586 6586 IEM_MC_FETCH_EFLAGS(EFlags); 6587 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))6587 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 6588 6588 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_xadd_u32, pu32Dst, pu32Reg, pEFlags); 6589 6589 else … … 6592 6592 IEM_MC_MEM_COMMIT_AND_UNMAP(pu32Dst, IEM_ACCESS_DATA_RW); 6593 6593 IEM_MC_COMMIT_EFLAGS(EFlags); 6594 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32RegCopy);6594 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32RegCopy); 6595 6595 IEM_MC_ADVANCE_RIP(); 6596 6596 IEM_MC_END(); … … 6606 6606 6607 6607 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 6608 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);6609 IEM_MC_FETCH_GREG_U64(u64RegCopy, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);6608 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 6609 IEM_MC_FETCH_GREG_U64(u64RegCopy, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 6610 6610 IEM_MC_REF_LOCAL(pu64Reg, u64RegCopy); 6611 6611 IEM_MC_FETCH_EFLAGS(EFlags); 6612 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))6612 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 6613 6613 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_xadd_u64, pu64Dst, pu64Reg, pEFlags); 6614 6614 else … … 6617 6617 IEM_MC_MEM_COMMIT_AND_UNMAP(pu64Dst, IEM_ACCESS_DATA_RW); 6618 6618 IEM_MC_COMMIT_EFLAGS(EFlags); 6619 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64RegCopy);6619 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64RegCopy); 6620 6620 IEM_MC_ADVANCE_RIP(); 6621 6621 IEM_MC_END(); … … 6641 6641 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 6642 6642 { 6643 switch (p IemCpu->enmEffOpSize)6643 switch (pVCpu->iem.s.enmEffOpSize) 6644 6644 { 6645 6645 case IEMMODE_32BIT: … … 6650 6650 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 6651 6651 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6652 if (!IEM_GET_GUEST_CPU_FEATURES(p IemCpu)->fSse2)6652 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse2) 6653 6653 return IEMOP_RAISE_INVALID_OPCODE(); 6654 6654 6655 IEM_MC_FETCH_GREG_U32(u32Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);6656 IEM_MC_STORE_MEM_U32(p IemCpu->iEffSeg, GCPtrEffDst, u32Value);6655 IEM_MC_FETCH_GREG_U32(u32Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 6656 IEM_MC_STORE_MEM_U32(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u32Value); 6657 6657 IEM_MC_ADVANCE_RIP(); 6658 6658 IEM_MC_END(); … … 6666 6666 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 6667 6667 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 6668 if (!IEM_GET_GUEST_CPU_FEATURES(p IemCpu)->fSse2)6668 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse2) 6669 6669 return IEMOP_RAISE_INVALID_OPCODE(); 6670 6670 6671 IEM_MC_FETCH_GREG_U64(u64Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);6672 IEM_MC_STORE_MEM_U64(p IemCpu->iEffSeg, GCPtrEffDst, u64Value);6671 IEM_MC_FETCH_GREG_U64(u64Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 6672 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u64Value); 6673 6673 IEM_MC_ADVANCE_RIP(); 6674 6674 IEM_MC_END(); … … 6712 6712 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 6713 6713 IEMOP_HLP_DONE_DECODING(); 6714 IEM_MC_MEM_MAP(pu64MemDst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);6714 IEM_MC_MEM_MAP(pu64MemDst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 6715 6715 6716 6716 IEM_MC_FETCH_GREG_U32(u64EaxEdx.s.Lo, X86_GREG_xAX); … … 6723 6723 6724 6724 IEM_MC_FETCH_EFLAGS(EFlags); 6725 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))6725 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 6726 6726 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpxchg8b, pu64MemDst, pu64EaxEdx, pu64EbxEcx, pEFlags); 6727 6727 else … … 6773 6773 /** @todo Testcase: Check prefix effects on cmpxchg8b/16b. */ 6774 6774 if ( (bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT) 6775 || (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ))) /** @todo Testcase: AMD seems to express a different idea here wrt prefixes. */6775 || (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ))) /** @todo Testcase: AMD seems to express a different idea here wrt prefixes. */ 6776 6776 return IEMOP_RAISE_INVALID_OPCODE(); 6777 6777 if (bRm & IEM_OP_PRF_SIZE_REX_W) … … 6781 6781 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 6782 6782 return FNIEMOP_CALL_1(iemOp_Grp9_rdrand_Rv, bRm); 6783 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ))6783 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ)) 6784 6784 { 6785 6785 case 0: … … 6793 6793 } 6794 6794 case 7: 6795 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ))6795 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ)) 6796 6796 { 6797 6797 case 0: … … 6812 6812 { 6813 6813 IEMOP_HLP_NO_LOCK_PREFIX(); 6814 switch (p IemCpu->enmEffOpSize)6814 switch (pVCpu->iem.s.enmEffOpSize) 6815 6815 { 6816 6816 case IEMMODE_16BIT: … … 6855 6855 case, see iemOp_mov_AL_Ib and iemOp_mov_eAX_Iv. */ 6856 6856 IEMOP_HLP_MIN_486(); 6857 return FNIEMOP_CALL_1(iemOpCommonBswapGReg, X86_GREG_xAX | p IemCpu->uRexB);6857 return FNIEMOP_CALL_1(iemOpCommonBswapGReg, X86_GREG_xAX | pVCpu->iem.s.uRexB); 6858 6858 } 6859 6859 … … 6864 6864 IEMOP_MNEMONIC("bswap rCX/r9"); 6865 6865 IEMOP_HLP_MIN_486(); 6866 return FNIEMOP_CALL_1(iemOpCommonBswapGReg, X86_GREG_xCX | p IemCpu->uRexB);6866 return FNIEMOP_CALL_1(iemOpCommonBswapGReg, X86_GREG_xCX | pVCpu->iem.s.uRexB); 6867 6867 } 6868 6868 … … 6873 6873 IEMOP_MNEMONIC("bswap rDX/r9"); 6874 6874 IEMOP_HLP_MIN_486(); 6875 return FNIEMOP_CALL_1(iemOpCommonBswapGReg, X86_GREG_xDX | p IemCpu->uRexB);6875 return FNIEMOP_CALL_1(iemOpCommonBswapGReg, X86_GREG_xDX | pVCpu->iem.s.uRexB); 6876 6876 } 6877 6877 … … 6882 6882 IEMOP_MNEMONIC("bswap rBX/r9"); 6883 6883 IEMOP_HLP_MIN_486(); 6884 return FNIEMOP_CALL_1(iemOpCommonBswapGReg, X86_GREG_xBX | p IemCpu->uRexB);6884 return FNIEMOP_CALL_1(iemOpCommonBswapGReg, X86_GREG_xBX | pVCpu->iem.s.uRexB); 6885 6885 } 6886 6886 … … 6891 6891 IEMOP_MNEMONIC("bswap rSP/r12"); 6892 6892 IEMOP_HLP_MIN_486(); 6893 return FNIEMOP_CALL_1(iemOpCommonBswapGReg, X86_GREG_xSP | p IemCpu->uRexB);6893 return FNIEMOP_CALL_1(iemOpCommonBswapGReg, X86_GREG_xSP | pVCpu->iem.s.uRexB); 6894 6894 } 6895 6895 … … 6900 6900 IEMOP_MNEMONIC("bswap rBP/r13"); 6901 6901 IEMOP_HLP_MIN_486(); 6902 return FNIEMOP_CALL_1(iemOpCommonBswapGReg, X86_GREG_xBP | p IemCpu->uRexB);6902 return FNIEMOP_CALL_1(iemOpCommonBswapGReg, X86_GREG_xBP | pVCpu->iem.s.uRexB); 6903 6903 } 6904 6904 … … 6909 6909 IEMOP_MNEMONIC("bswap rSI/r14"); 6910 6910 IEMOP_HLP_MIN_486(); 6911 return FNIEMOP_CALL_1(iemOpCommonBswapGReg, X86_GREG_xSI | p IemCpu->uRexB);6911 return FNIEMOP_CALL_1(iemOpCommonBswapGReg, X86_GREG_xSI | pVCpu->iem.s.uRexB); 6912 6912 } 6913 6913 … … 6918 6918 IEMOP_MNEMONIC("bswap rDI/r15"); 6919 6919 IEMOP_HLP_MIN_486(); 6920 return FNIEMOP_CALL_1(iemOpCommonBswapGReg, X86_GREG_xDI | p IemCpu->uRexB);6920 return FNIEMOP_CALL_1(iemOpCommonBswapGReg, X86_GREG_xDI | pVCpu->iem.s.uRexB); 6921 6921 } 6922 6922 … … 6952 6952 * and opcode modifications are made to work with the whole width (not 6953 6953 * just 128). */ 6954 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))6954 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 6955 6955 { 6956 6956 case IEM_OP_PRF_SIZE_OP: /* SSE */ … … 6962 6962 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 6963 6963 IEM_MC_PREPARE_SSE_USAGE(); 6964 IEM_MC_REF_GREG_U64(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);6965 IEM_MC_REF_XREG_U128_CONST(pSrc, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);6964 IEM_MC_REF_GREG_U64(pDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 6965 IEM_MC_REF_XREG_U128_CONST(pSrc, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 6966 6966 IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_pmovmskb_u128, pDst, pSrc); 6967 6967 IEM_MC_ADVANCE_RIP(); … … 7025 7025 FNIEMOP_DEF(iemOp_movntq_Mq_Pq__movntdq_Mdq_Vdq) 7026 7026 { 7027 IEMOP_MNEMONIC(!(p IemCpu->fPrefixes & IEM_OP_PRF_SIZE_OP) ? "movntq mr,r" : "movntdq mr,r");7027 IEMOP_MNEMONIC(!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP) ? "movntq mr,r" : "movntdq mr,r"); 7028 7028 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 7029 7029 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) … … 7033 7033 */ 7034 7034 /** @todo check when the REPNZ/Z bits kick in. Same as lock, probably... */ 7035 switch (p IemCpu->fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))7035 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 7036 7036 { 7037 7037 … … 7046 7046 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 7047 7047 7048 IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);7049 IEM_MC_STORE_MEM_U128_ALIGN_SSE(p IemCpu->iEffSeg, GCPtrEffSrc, uSrc);7048 IEM_MC_FETCH_XREG_U128(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 7049 IEM_MC_STORE_MEM_U128_ALIGN_SSE(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 7050 7050 7051 7051 IEM_MC_ADVANCE_RIP(); … … 7064 7064 7065 7065 IEM_MC_FETCH_MREG_U64(uSrc, (bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK); 7066 IEM_MC_STORE_MEM_U64(p IemCpu->iEffSeg, GCPtrEffSrc, uSrc);7066 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 7067 7067 7068 7068 IEM_MC_ADVANCE_RIP(); … … 7467 7467 IEMOP_HLP_NO_64BIT(); 7468 7468 IEMOP_HLP_NO_LOCK_PREFIX(); 7469 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_pop_Sreg, X86_SREG_ES, p IemCpu->enmEffOpSize);7469 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_pop_Sreg, X86_SREG_ES, pVCpu->iem.s.enmEffOpSize); 7470 7470 } 7471 7471 … … 7604 7604 IEMOP_HLP_NO_LOCK_PREFIX(); 7605 7605 IEMOP_HLP_NO_64BIT(); 7606 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_pop_Sreg, X86_SREG_SS, p IemCpu->enmEffOpSize);7606 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_pop_Sreg, X86_SREG_SS, pVCpu->iem.s.enmEffOpSize); 7607 7607 } 7608 7608 … … 7670 7670 IEMOP_HLP_NO_LOCK_PREFIX(); 7671 7671 IEMOP_HLP_NO_64BIT(); 7672 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_pop_Sreg, X86_SREG_DS, p IemCpu->enmEffOpSize);7672 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_pop_Sreg, X86_SREG_DS, pVCpu->iem.s.enmEffOpSize); 7673 7673 } 7674 7674 … … 7732 7732 { 7733 7733 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("seg es"); 7734 p IemCpu->fPrefixes |= IEM_OP_PRF_SEG_ES;7735 p IemCpu->iEffSeg = X86_SREG_ES;7734 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_SEG_ES; 7735 pVCpu->iem.s.iEffSeg = X86_SREG_ES; 7736 7736 7737 7737 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 7803 7803 { 7804 7804 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("seg cs"); 7805 p IemCpu->fPrefixes |= IEM_OP_PRF_SEG_CS;7806 p IemCpu->iEffSeg = X86_SREG_CS;7805 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_SEG_CS; 7806 pVCpu->iem.s.iEffSeg = X86_SREG_CS; 7807 7807 7808 7808 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 7880 7880 { 7881 7881 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("seg ss"); 7882 p IemCpu->fPrefixes |= IEM_OP_PRF_SEG_SS;7883 p IemCpu->iEffSeg = X86_SREG_SS;7882 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_SEG_SS; 7883 pVCpu->iem.s.iEffSeg = X86_SREG_SS; 7884 7884 7885 7885 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 7946 7946 { 7947 7947 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("seg ds"); 7948 p IemCpu->fPrefixes |= IEM_OP_PRF_SEG_DS;7949 p IemCpu->iEffSeg = X86_SREG_DS;7948 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_SEG_DS; 7949 pVCpu->iem.s.iEffSeg = X86_SREG_DS; 7950 7950 7951 7951 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 7963 7963 { 7964 7964 IEMOP_HLP_NO_LOCK_PREFIX(); 7965 switch (p IemCpu->enmEffOpSize)7965 switch (pVCpu->iem.s.enmEffOpSize) 7966 7966 { 7967 7967 case IEMMODE_16BIT: … … 8009 8009 * This is a REX prefix in 64-bit mode. 8010 8010 */ 8011 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8011 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8012 8012 { 8013 8013 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("rex"); 8014 p IemCpu->fPrefixes |= IEM_OP_PRF_REX;8014 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REX; 8015 8015 8016 8016 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8029 8029 * This is a REX prefix in 64-bit mode. 8030 8030 */ 8031 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8031 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8032 8032 { 8033 8033 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("rex.b"); 8034 p IemCpu->fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_B;8035 p IemCpu->uRexB = 1 << 3;8034 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_B; 8035 pVCpu->iem.s.uRexB = 1 << 3; 8036 8036 8037 8037 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8050 8050 * This is a REX prefix in 64-bit mode. 8051 8051 */ 8052 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8052 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8053 8053 { 8054 8054 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("rex.x"); 8055 p IemCpu->fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_X;8056 p IemCpu->uRexIndex = 1 << 3;8055 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_X; 8056 pVCpu->iem.s.uRexIndex = 1 << 3; 8057 8057 8058 8058 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8072 8072 * This is a REX prefix in 64-bit mode. 8073 8073 */ 8074 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8074 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8075 8075 { 8076 8076 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("rex.bx"); 8077 p IemCpu->fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_B | IEM_OP_PRF_REX_X;8078 p IemCpu->uRexB = 1 << 3;8079 p IemCpu->uRexIndex = 1 << 3;8077 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_B | IEM_OP_PRF_REX_X; 8078 pVCpu->iem.s.uRexB = 1 << 3; 8079 pVCpu->iem.s.uRexIndex = 1 << 3; 8080 8080 8081 8081 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8094 8094 * This is a REX prefix in 64-bit mode. 8095 8095 */ 8096 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8096 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8097 8097 { 8098 8098 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("rex.r"); 8099 p IemCpu->fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_R;8100 p IemCpu->uRexReg = 1 << 3;8099 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_R; 8100 pVCpu->iem.s.uRexReg = 1 << 3; 8101 8101 8102 8102 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8115 8115 * This is a REX prefix in 64-bit mode. 8116 8116 */ 8117 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8117 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8118 8118 { 8119 8119 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("rex.rb"); 8120 p IemCpu->fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_R | IEM_OP_PRF_REX_B;8121 p IemCpu->uRexReg = 1 << 3;8122 p IemCpu->uRexB = 1 << 3;8120 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_R | IEM_OP_PRF_REX_B; 8121 pVCpu->iem.s.uRexReg = 1 << 3; 8122 pVCpu->iem.s.uRexB = 1 << 3; 8123 8123 8124 8124 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8137 8137 * This is a REX prefix in 64-bit mode. 8138 8138 */ 8139 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8139 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8140 8140 { 8141 8141 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("rex.rx"); 8142 p IemCpu->fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_R | IEM_OP_PRF_REX_X;8143 p IemCpu->uRexReg = 1 << 3;8144 p IemCpu->uRexIndex = 1 << 3;8142 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_R | IEM_OP_PRF_REX_X; 8143 pVCpu->iem.s.uRexReg = 1 << 3; 8144 pVCpu->iem.s.uRexIndex = 1 << 3; 8145 8145 8146 8146 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8159 8159 * This is a REX prefix in 64-bit mode. 8160 8160 */ 8161 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8161 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8162 8162 { 8163 8163 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("rex.rbx"); 8164 p IemCpu->fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_R | IEM_OP_PRF_REX_B | IEM_OP_PRF_REX_X;8165 p IemCpu->uRexReg = 1 << 3;8166 p IemCpu->uRexB = 1 << 3;8167 p IemCpu->uRexIndex = 1 << 3;8164 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_R | IEM_OP_PRF_REX_B | IEM_OP_PRF_REX_X; 8165 pVCpu->iem.s.uRexReg = 1 << 3; 8166 pVCpu->iem.s.uRexB = 1 << 3; 8167 pVCpu->iem.s.uRexIndex = 1 << 3; 8168 8168 8169 8169 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8182 8182 * This is a REX prefix in 64-bit mode. 8183 8183 */ 8184 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8184 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8185 8185 { 8186 8186 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("rex.w"); 8187 p IemCpu->fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_SIZE_REX_W;8188 iemRecalEffOpSize(p IemCpu);8187 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_SIZE_REX_W; 8188 iemRecalEffOpSize(pVCpu); 8189 8189 8190 8190 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8203 8203 * This is a REX prefix in 64-bit mode. 8204 8204 */ 8205 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8205 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8206 8206 { 8207 8207 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("rex.bw"); 8208 p IemCpu->fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_B | IEM_OP_PRF_SIZE_REX_W;8209 p IemCpu->uRexB = 1 << 3;8210 iemRecalEffOpSize(p IemCpu);8208 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_B | IEM_OP_PRF_SIZE_REX_W; 8209 pVCpu->iem.s.uRexB = 1 << 3; 8210 iemRecalEffOpSize(pVCpu); 8211 8211 8212 8212 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8225 8225 * This is a REX prefix in 64-bit mode. 8226 8226 */ 8227 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8227 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8228 8228 { 8229 8229 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("rex.xw"); 8230 p IemCpu->fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_X | IEM_OP_PRF_SIZE_REX_W;8231 p IemCpu->uRexIndex = 1 << 3;8232 iemRecalEffOpSize(p IemCpu);8230 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_X | IEM_OP_PRF_SIZE_REX_W; 8231 pVCpu->iem.s.uRexIndex = 1 << 3; 8232 iemRecalEffOpSize(pVCpu); 8233 8233 8234 8234 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8247 8247 * This is a REX prefix in 64-bit mode. 8248 8248 */ 8249 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8249 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8250 8250 { 8251 8251 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("rex.bxw"); 8252 p IemCpu->fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_B | IEM_OP_PRF_REX_X | IEM_OP_PRF_SIZE_REX_W;8253 p IemCpu->uRexB = 1 << 3;8254 p IemCpu->uRexIndex = 1 << 3;8255 iemRecalEffOpSize(p IemCpu);8252 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_B | IEM_OP_PRF_REX_X | IEM_OP_PRF_SIZE_REX_W; 8253 pVCpu->iem.s.uRexB = 1 << 3; 8254 pVCpu->iem.s.uRexIndex = 1 << 3; 8255 iemRecalEffOpSize(pVCpu); 8256 8256 8257 8257 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8270 8270 * This is a REX prefix in 64-bit mode. 8271 8271 */ 8272 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8272 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8273 8273 { 8274 8274 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("rex.rw"); 8275 p IemCpu->fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_R | IEM_OP_PRF_SIZE_REX_W;8276 p IemCpu->uRexReg = 1 << 3;8277 iemRecalEffOpSize(p IemCpu);8275 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_R | IEM_OP_PRF_SIZE_REX_W; 8276 pVCpu->iem.s.uRexReg = 1 << 3; 8277 iemRecalEffOpSize(pVCpu); 8278 8278 8279 8279 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8292 8292 * This is a REX prefix in 64-bit mode. 8293 8293 */ 8294 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8294 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8295 8295 { 8296 8296 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("rex.rbw"); 8297 p IemCpu->fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_R | IEM_OP_PRF_REX_B | IEM_OP_PRF_SIZE_REX_W;8298 p IemCpu->uRexReg = 1 << 3;8299 p IemCpu->uRexB = 1 << 3;8300 iemRecalEffOpSize(p IemCpu);8297 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_R | IEM_OP_PRF_REX_B | IEM_OP_PRF_SIZE_REX_W; 8298 pVCpu->iem.s.uRexReg = 1 << 3; 8299 pVCpu->iem.s.uRexB = 1 << 3; 8300 iemRecalEffOpSize(pVCpu); 8301 8301 8302 8302 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8315 8315 * This is a REX prefix in 64-bit mode. 8316 8316 */ 8317 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8317 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8318 8318 { 8319 8319 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("rex.rxw"); 8320 p IemCpu->fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_R | IEM_OP_PRF_REX_X | IEM_OP_PRF_SIZE_REX_W;8321 p IemCpu->uRexReg = 1 << 3;8322 p IemCpu->uRexIndex = 1 << 3;8323 iemRecalEffOpSize(p IemCpu);8320 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_R | IEM_OP_PRF_REX_X | IEM_OP_PRF_SIZE_REX_W; 8321 pVCpu->iem.s.uRexReg = 1 << 3; 8322 pVCpu->iem.s.uRexIndex = 1 << 3; 8323 iemRecalEffOpSize(pVCpu); 8324 8324 8325 8325 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8338 8338 * This is a REX prefix in 64-bit mode. 8339 8339 */ 8340 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8340 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8341 8341 { 8342 8342 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("rex.rbxw"); 8343 p IemCpu->fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_R | IEM_OP_PRF_REX_B | IEM_OP_PRF_REX_X | IEM_OP_PRF_SIZE_REX_W;8344 p IemCpu->uRexReg = 1 << 3;8345 p IemCpu->uRexB = 1 << 3;8346 p IemCpu->uRexIndex = 1 << 3;8347 iemRecalEffOpSize(p IemCpu);8343 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REX | IEM_OP_PRF_REX_R | IEM_OP_PRF_REX_B | IEM_OP_PRF_REX_X | IEM_OP_PRF_SIZE_REX_W; 8344 pVCpu->iem.s.uRexReg = 1 << 3; 8345 pVCpu->iem.s.uRexB = 1 << 3; 8346 pVCpu->iem.s.uRexIndex = 1 << 3; 8347 iemRecalEffOpSize(pVCpu); 8348 8348 8349 8349 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8362 8362 { 8363 8363 IEMOP_HLP_NO_LOCK_PREFIX(); 8364 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8365 { 8366 iReg |= p IemCpu->uRexB;8367 p IemCpu->enmDefOpSize = IEMMODE_64BIT;8368 p IemCpu->enmEffOpSize = !(pIemCpu->fPrefixes & IEM_OP_PRF_SIZE_OP) ? IEMMODE_64BIT : IEMMODE_16BIT;8369 } 8370 8371 switch (p IemCpu->enmEffOpSize)8364 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8365 { 8366 iReg |= pVCpu->iem.s.uRexB; 8367 pVCpu->iem.s.enmDefOpSize = IEMMODE_64BIT; 8368 pVCpu->iem.s.enmEffOpSize = !(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP) ? IEMMODE_64BIT : IEMMODE_16BIT; 8369 } 8370 8371 switch (pVCpu->iem.s.enmEffOpSize) 8372 8372 { 8373 8373 case IEMMODE_16BIT: … … 8439 8439 { 8440 8440 IEMOP_MNEMONIC("push rSP"); 8441 if (IEM_GET_TARGET_CPU(p IemCpu) == IEMTARGETCPU_8086)8441 if (IEM_GET_TARGET_CPU(pVCpu) == IEMTARGETCPU_8086) 8442 8442 { 8443 8443 IEM_MC_BEGIN(0, 1); … … 8483 8483 { 8484 8484 IEMOP_HLP_NO_LOCK_PREFIX(); 8485 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8486 { 8487 iReg |= p IemCpu->uRexB;8488 p IemCpu->enmDefOpSize = IEMMODE_64BIT;8489 p IemCpu->enmEffOpSize = !(pIemCpu->fPrefixes & IEM_OP_PRF_SIZE_OP) ? IEMMODE_64BIT : IEMMODE_16BIT;8490 } 8491 8492 switch (p IemCpu->enmEffOpSize)8485 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8486 { 8487 iReg |= pVCpu->iem.s.uRexB; 8488 pVCpu->iem.s.enmDefOpSize = IEMMODE_64BIT; 8489 pVCpu->iem.s.enmEffOpSize = !(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP) ? IEMMODE_64BIT : IEMMODE_16BIT; 8490 } 8491 8492 switch (pVCpu->iem.s.enmEffOpSize) 8493 8493 { 8494 8494 case IEMMODE_16BIT: … … 8561 8561 { 8562 8562 IEMOP_MNEMONIC("pop rSP"); 8563 if (p IemCpu->enmCpuMode == IEMMODE_64BIT)8564 { 8565 if (p IemCpu->uRexB)8563 if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT) 8564 { 8565 if (pVCpu->iem.s.uRexB) 8566 8566 return FNIEMOP_CALL_1(iemOpCommonPopGReg, X86_GREG_xSP); 8567 p IemCpu->enmDefOpSize = IEMMODE_64BIT;8568 p IemCpu->enmEffOpSize = !(pIemCpu->fPrefixes & IEM_OP_PRF_SIZE_OP) ? IEMMODE_64BIT : IEMMODE_16BIT;8567 pVCpu->iem.s.enmDefOpSize = IEMMODE_64BIT; 8568 pVCpu->iem.s.enmEffOpSize = !(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP) ? IEMMODE_64BIT : IEMMODE_16BIT; 8569 8569 } 8570 8570 … … 8572 8572 DISOPTYPE_HARMLESS | DISOPTYPE_DEFAULT_64_OP_SIZE | DISOPTYPE_REXB_EXTENDS_OPREG); 8573 8573 /** @todo add testcase for this instruction. */ 8574 switch (p IemCpu->enmEffOpSize)8574 switch (pVCpu->iem.s.enmEffOpSize) 8575 8575 { 8576 8576 case IEMMODE_16BIT: … … 8636 8636 IEMOP_HLP_MIN_186(); 8637 8637 IEMOP_HLP_NO_64BIT(); 8638 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)8638 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 8639 8639 return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_pusha_16); 8640 Assert(p IemCpu->enmEffOpSize == IEMMODE_32BIT);8640 Assert(pVCpu->iem.s.enmEffOpSize == IEMMODE_32BIT); 8641 8641 return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_pusha_32); 8642 8642 } … … 8649 8649 IEMOP_HLP_MIN_186(); 8650 8650 IEMOP_HLP_NO_64BIT(); 8651 if (p IemCpu->enmEffOpSize == IEMMODE_16BIT)8651 if (pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT) 8652 8652 return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_popa_16); 8653 Assert(p IemCpu->enmEffOpSize == IEMMODE_32BIT);8653 Assert(pVCpu->iem.s.enmEffOpSize == IEMMODE_32BIT); 8654 8654 return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_popa_32); 8655 8655 } … … 8697 8697 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 8698 8698 IEMOP_HLP_DECODED_NL_2(OP_ARPL, IEMOPFORM_MR_REG, OP_PARM_Ew, OP_PARM_Gw, DISOPTYPE_HARMLESS); 8699 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);8699 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 8700 8700 IEM_MC_FETCH_GREG_U16(u16Src, (bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK); 8701 8701 IEM_MC_FETCH_EFLAGS(EFlags); … … 8718 8718 FNIEMOP_DEF(iemOp_movsxd_Gv_Ev) 8719 8719 { 8720 Assert(p IemCpu->enmEffOpSize == IEMMODE_64BIT); /* Caller branched already . */8720 Assert(pVCpu->iem.s.enmEffOpSize == IEMMODE_64BIT); /* Caller branched already . */ 8721 8721 8722 8722 IEMOP_MNEMONIC("movsxd Gv,Ev"); … … 8731 8731 IEM_MC_BEGIN(0, 1); 8732 8732 IEM_MC_LOCAL(uint64_t, u64Value); 8733 IEM_MC_FETCH_GREG_U32_SX_U64(u64Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);8734 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Value);8733 IEM_MC_FETCH_GREG_U32_SX_U64(u64Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 8734 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Value); 8735 8735 IEM_MC_ADVANCE_RIP(); 8736 8736 IEM_MC_END(); … … 8746 8746 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 8747 8747 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8748 IEM_MC_FETCH_MEM_U32_SX_U64(u64Value, p IemCpu->iEffSeg, GCPtrEffDst);8749 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Value);8748 IEM_MC_FETCH_MEM_U32_SX_U64(u64Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 8749 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Value); 8750 8750 IEM_MC_ADVANCE_RIP(); 8751 8751 IEM_MC_END(); … … 8761 8761 IEMOP_HLP_MIN_386(); 8762 8762 8763 p IemCpu->fPrefixes |= IEM_OP_PRF_SEG_FS;8764 p IemCpu->iEffSeg = X86_SREG_FS;8763 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_SEG_FS; 8764 pVCpu->iem.s.iEffSeg = X86_SREG_FS; 8765 8765 8766 8766 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8775 8775 IEMOP_HLP_MIN_386(); 8776 8776 8777 p IemCpu->fPrefixes |= IEM_OP_PRF_SEG_GS;8778 p IemCpu->iEffSeg = X86_SREG_GS;8777 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_SEG_GS; 8778 pVCpu->iem.s.iEffSeg = X86_SREG_GS; 8779 8779 8780 8780 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8789 8789 IEMOP_HLP_MIN_386(); 8790 8790 8791 p IemCpu->fPrefixes |= IEM_OP_PRF_SIZE_OP;8792 iemRecalEffOpSize(p IemCpu);8791 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_SIZE_OP; 8792 iemRecalEffOpSize(pVCpu); 8793 8793 8794 8794 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 8803 8803 IEMOP_HLP_MIN_386(); 8804 8804 8805 p IemCpu->fPrefixes |= IEM_OP_PRF_SIZE_ADDR;8806 switch (p IemCpu->enmDefAddrMode)8807 { 8808 case IEMMODE_16BIT: p IemCpu->enmEffAddrMode = IEMMODE_32BIT; break;8809 case IEMMODE_32BIT: p IemCpu->enmEffAddrMode = IEMMODE_16BIT; break;8810 case IEMMODE_64BIT: p IemCpu->enmEffAddrMode = IEMMODE_32BIT; break;8805 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_SIZE_ADDR; 8806 switch (pVCpu->iem.s.enmDefAddrMode) 8807 { 8808 case IEMMODE_16BIT: pVCpu->iem.s.enmEffAddrMode = IEMMODE_32BIT; break; 8809 case IEMMODE_32BIT: pVCpu->iem.s.enmEffAddrMode = IEMMODE_16BIT; break; 8810 case IEMMODE_64BIT: pVCpu->iem.s.enmEffAddrMode = IEMMODE_32BIT; break; 8811 8811 default: AssertFailed(); 8812 8812 } … … 8823 8823 IEMOP_HLP_MIN_186(); 8824 8824 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 8825 switch (p IemCpu->enmEffOpSize)8825 switch (pVCpu->iem.s.enmEffOpSize) 8826 8826 { 8827 8827 case IEMMODE_16BIT: … … 8871 8871 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF); 8872 8872 8873 switch (p IemCpu->enmEffOpSize)8873 switch (pVCpu->iem.s.enmEffOpSize) 8874 8874 { 8875 8875 case IEMMODE_16BIT: … … 8887 8887 IEM_MC_LOCAL(uint16_t, u16Tmp); 8888 8888 8889 IEM_MC_FETCH_GREG_U16(u16Tmp, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);8889 IEM_MC_FETCH_GREG_U16(u16Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 8890 8890 IEM_MC_REF_LOCAL(pu16Dst, u16Tmp); 8891 8891 IEM_MC_REF_EFLAGS(pEFlags); 8892 8892 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_imul_two_u16, pu16Dst, u16Src, pEFlags); 8893 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u16Tmp);8893 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16Tmp); 8894 8894 8895 8895 IEM_MC_ADVANCE_RIP(); … … 8910 8910 IEM_MC_ASSIGN(u16Src, u16Imm); 8911 8911 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8912 IEM_MC_FETCH_MEM_U16(u16Tmp, p IemCpu->iEffSeg, GCPtrEffDst);8912 IEM_MC_FETCH_MEM_U16(u16Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 8913 8913 IEM_MC_REF_LOCAL(pu16Dst, u16Tmp); 8914 8914 IEM_MC_REF_EFLAGS(pEFlags); 8915 8915 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_imul_two_u16, pu16Dst, u16Src, pEFlags); 8916 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u16Tmp);8916 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16Tmp); 8917 8917 8918 8918 IEM_MC_ADVANCE_RIP(); … … 8936 8936 IEM_MC_LOCAL(uint32_t, u32Tmp); 8937 8937 8938 IEM_MC_FETCH_GREG_U32(u32Tmp, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);8938 IEM_MC_FETCH_GREG_U32(u32Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 8939 8939 IEM_MC_REF_LOCAL(pu32Dst, u32Tmp); 8940 8940 IEM_MC_REF_EFLAGS(pEFlags); 8941 8941 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_imul_two_u32, pu32Dst, u32Src, pEFlags); 8942 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Tmp);8942 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Tmp); 8943 8943 8944 8944 IEM_MC_ADVANCE_RIP(); … … 8959 8959 IEM_MC_ASSIGN(u32Src, u32Imm); 8960 8960 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8961 IEM_MC_FETCH_MEM_U32(u32Tmp, p IemCpu->iEffSeg, GCPtrEffDst);8961 IEM_MC_FETCH_MEM_U32(u32Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 8962 8962 IEM_MC_REF_LOCAL(pu32Dst, u32Tmp); 8963 8963 IEM_MC_REF_EFLAGS(pEFlags); 8964 8964 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_imul_two_u32, pu32Dst, u32Src, pEFlags); 8965 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Tmp);8965 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Tmp); 8966 8966 8967 8967 IEM_MC_ADVANCE_RIP(); … … 8985 8985 IEM_MC_LOCAL(uint64_t, u64Tmp); 8986 8986 8987 IEM_MC_FETCH_GREG_U64(u64Tmp, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);8987 IEM_MC_FETCH_GREG_U64(u64Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 8988 8988 IEM_MC_REF_LOCAL(pu64Dst, u64Tmp); 8989 8989 IEM_MC_REF_EFLAGS(pEFlags); 8990 8990 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_imul_two_u64, pu64Dst, u64Src, pEFlags); 8991 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Tmp);8991 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Tmp); 8992 8992 8993 8993 IEM_MC_ADVANCE_RIP(); … … 9008 9008 IEM_MC_ASSIGN(u64Src, u64Imm); 9009 9009 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9010 IEM_MC_FETCH_MEM_U64(u64Tmp, p IemCpu->iEffSeg, GCPtrEffDst);9010 IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 9011 9011 IEM_MC_REF_LOCAL(pu64Dst, u64Tmp); 9012 9012 IEM_MC_REF_EFLAGS(pEFlags); 9013 9013 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_imul_two_u64, pu64Dst, u64Src, pEFlags); 9014 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Tmp);9014 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Tmp); 9015 9015 9016 9016 IEM_MC_ADVANCE_RIP(); … … 9034 9034 9035 9035 IEM_MC_BEGIN(0,0); 9036 switch (p IemCpu->enmEffOpSize)9036 switch (pVCpu->iem.s.enmEffOpSize) 9037 9037 { 9038 9038 case IEMMODE_16BIT: … … 9060 9060 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF); 9061 9061 9062 switch (p IemCpu->enmEffOpSize)9062 switch (pVCpu->iem.s.enmEffOpSize) 9063 9063 { 9064 9064 case IEMMODE_16BIT: … … 9075 9075 IEM_MC_LOCAL(uint16_t, u16Tmp); 9076 9076 9077 IEM_MC_FETCH_GREG_U16(u16Tmp, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);9077 IEM_MC_FETCH_GREG_U16(u16Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 9078 9078 IEM_MC_REF_LOCAL(pu16Dst, u16Tmp); 9079 9079 IEM_MC_REF_EFLAGS(pEFlags); 9080 9080 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_imul_two_u16, pu16Dst, u16Src, pEFlags); 9081 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u16Tmp);9081 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16Tmp); 9082 9082 9083 9083 IEM_MC_ADVANCE_RIP(); … … 9098 9098 IEM_MC_ASSIGN(u16Src, u16Imm); 9099 9099 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9100 IEM_MC_FETCH_MEM_U16(u16Tmp, p IemCpu->iEffSeg, GCPtrEffDst);9100 IEM_MC_FETCH_MEM_U16(u16Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 9101 9101 IEM_MC_REF_LOCAL(pu16Dst, u16Tmp); 9102 9102 IEM_MC_REF_EFLAGS(pEFlags); 9103 9103 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_imul_two_u16, pu16Dst, u16Src, pEFlags); 9104 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u16Tmp);9104 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16Tmp); 9105 9105 9106 9106 IEM_MC_ADVANCE_RIP(); … … 9122 9122 IEM_MC_LOCAL(uint32_t, u32Tmp); 9123 9123 9124 IEM_MC_FETCH_GREG_U32(u32Tmp, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);9124 IEM_MC_FETCH_GREG_U32(u32Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 9125 9125 IEM_MC_REF_LOCAL(pu32Dst, u32Tmp); 9126 9126 IEM_MC_REF_EFLAGS(pEFlags); 9127 9127 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_imul_two_u32, pu32Dst, u32Src, pEFlags); 9128 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Tmp);9128 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Tmp); 9129 9129 9130 9130 IEM_MC_ADVANCE_RIP(); … … 9145 9145 IEM_MC_ASSIGN(u32Src, u32Imm); 9146 9146 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9147 IEM_MC_FETCH_MEM_U32(u32Tmp, p IemCpu->iEffSeg, GCPtrEffDst);9147 IEM_MC_FETCH_MEM_U32(u32Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 9148 9148 IEM_MC_REF_LOCAL(pu32Dst, u32Tmp); 9149 9149 IEM_MC_REF_EFLAGS(pEFlags); 9150 9150 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_imul_two_u32, pu32Dst, u32Src, pEFlags); 9151 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Tmp);9151 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Tmp); 9152 9152 9153 9153 IEM_MC_ADVANCE_RIP(); … … 9169 9169 IEM_MC_LOCAL(uint64_t, u64Tmp); 9170 9170 9171 IEM_MC_FETCH_GREG_U64(u64Tmp, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);9171 IEM_MC_FETCH_GREG_U64(u64Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 9172 9172 IEM_MC_REF_LOCAL(pu64Dst, u64Tmp); 9173 9173 IEM_MC_REF_EFLAGS(pEFlags); 9174 9174 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_imul_two_u64, pu64Dst, u64Src, pEFlags); 9175 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Tmp);9175 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Tmp); 9176 9176 9177 9177 IEM_MC_ADVANCE_RIP(); … … 9192 9192 IEM_MC_ASSIGN(u64Src, u64Imm); 9193 9193 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 9194 IEM_MC_FETCH_MEM_U64(u64Tmp, p IemCpu->iEffSeg, GCPtrEffDst);9194 IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 9195 9195 IEM_MC_REF_LOCAL(pu64Dst, u64Tmp); 9196 9196 IEM_MC_REF_EFLAGS(pEFlags); 9197 9197 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_imul_two_u64, pu64Dst, u64Src, pEFlags); 9198 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Tmp);9198 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Tmp); 9199 9199 9200 9200 IEM_MC_ADVANCE_RIP(); … … 9212 9212 IEMOP_HLP_MIN_186(); 9213 9213 IEMOP_HLP_NO_LOCK_PREFIX(); 9214 if (p IemCpu->fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))9214 if (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 9215 9215 { 9216 9216 IEMOP_MNEMONIC("rep ins Yb,DX"); 9217 switch (p IemCpu->enmEffAddrMode)9217 switch (pVCpu->iem.s.enmEffAddrMode) 9218 9218 { 9219 9219 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_ins_op8_addr16, false); … … 9226 9226 { 9227 9227 IEMOP_MNEMONIC("ins Yb,DX"); 9228 switch (p IemCpu->enmEffAddrMode)9228 switch (pVCpu->iem.s.enmEffAddrMode) 9229 9229 { 9230 9230 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_ins_op8_addr16, false); … … 9242 9242 IEMOP_HLP_MIN_186(); 9243 9243 IEMOP_HLP_NO_LOCK_PREFIX(); 9244 if (p IemCpu->fPrefixes & (IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))9244 if (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ)) 9245 9245 { 9246 9246 IEMOP_MNEMONIC("rep ins Yv,DX"); 9247 switch (p IemCpu->enmEffOpSize)9247 switch (pVCpu->iem.s.enmEffOpSize) 9248 9248 { 9249 9249 case IEMMODE_16BIT: 9250 switch (p IemCpu->enmEffAddrMode)9250 switch (pVCpu->iem.s.enmEffAddrMode) 9251 9251 { 9252 9252 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_ins_op16_addr16, false); … … 9258 9258 case IEMMODE_64BIT: 9259 9259 case IEMMODE_32BIT: 9260 switch (p IemCpu->enmEffAddrMode)9260 switch (pVCpu->iem.s.enmEffAddrMode) 9261 9261 { 9262 9262 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_ins_op32_addr16, false); … … 9272 9272 { 9273 9273 IEMOP_MNEMONIC("ins Yv,DX"); 9274 switch (p IemCpu->enmEffOpSize)9274 switch (pVCpu->iem.s.enmEffOpSize) 9275 9275 { 9276 9276 case IEMMODE_16BIT: 9277 switch (p IemCpu->enmEffAddrMode)9277 switch (pVCpu->iem.s.enmEffAddrMode) 9278 9278 { 9279 9279 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_ins_op16_addr16, false); … … 9285 9285 case IEMMODE_64BIT: 9286 9286 case IEMMODE_32BIT: 9287 switch (p IemCpu->enmEffAddrMode)9287 switch (pVCpu->iem.s.enmEffAddrMode) 9288 9288 { 9289 9289 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_ins_op32_addr16, false); … … 9304 9304 IEMOP_HLP_MIN_186(); 9305 9305 IEMOP_HLP_NO_LOCK_PREFIX(); 9306 if (p IemCpu->fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))9306 if (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 9307 9307 { 9308 9308 IEMOP_MNEMONIC("rep outs DX,Yb"); 9309 switch (p IemCpu->enmEffAddrMode)9309 switch (pVCpu->iem.s.enmEffAddrMode) 9310 9310 { 9311 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op8_addr16, p IemCpu->iEffSeg, false);9312 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op8_addr32, p IemCpu->iEffSeg, false);9313 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op8_addr64, p IemCpu->iEffSeg, false);9311 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op8_addr16, pVCpu->iem.s.iEffSeg, false); 9312 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op8_addr32, pVCpu->iem.s.iEffSeg, false); 9313 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op8_addr64, pVCpu->iem.s.iEffSeg, false); 9314 9314 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 9315 9315 } … … 9318 9318 { 9319 9319 IEMOP_MNEMONIC("outs DX,Yb"); 9320 switch (p IemCpu->enmEffAddrMode)9320 switch (pVCpu->iem.s.enmEffAddrMode) 9321 9321 { 9322 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op8_addr16, p IemCpu->iEffSeg, false);9323 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op8_addr32, p IemCpu->iEffSeg, false);9324 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op8_addr64, p IemCpu->iEffSeg, false);9322 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op8_addr16, pVCpu->iem.s.iEffSeg, false); 9323 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op8_addr32, pVCpu->iem.s.iEffSeg, false); 9324 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op8_addr64, pVCpu->iem.s.iEffSeg, false); 9325 9325 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 9326 9326 } … … 9334 9334 IEMOP_HLP_MIN_186(); 9335 9335 IEMOP_HLP_NO_LOCK_PREFIX(); 9336 if (p IemCpu->fPrefixes & (IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ))9336 if (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ)) 9337 9337 { 9338 9338 IEMOP_MNEMONIC("rep outs DX,Yv"); 9339 switch (p IemCpu->enmEffOpSize)9339 switch (pVCpu->iem.s.enmEffOpSize) 9340 9340 { 9341 9341 case IEMMODE_16BIT: 9342 switch (p IemCpu->enmEffAddrMode)9342 switch (pVCpu->iem.s.enmEffAddrMode) 9343 9343 { 9344 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op16_addr16, p IemCpu->iEffSeg, false);9345 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op16_addr32, p IemCpu->iEffSeg, false);9346 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op16_addr64, p IemCpu->iEffSeg, false);9344 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op16_addr16, pVCpu->iem.s.iEffSeg, false); 9345 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op16_addr32, pVCpu->iem.s.iEffSeg, false); 9346 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op16_addr64, pVCpu->iem.s.iEffSeg, false); 9347 9347 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 9348 9348 } … … 9350 9350 case IEMMODE_64BIT: 9351 9351 case IEMMODE_32BIT: 9352 switch (p IemCpu->enmEffAddrMode)9352 switch (pVCpu->iem.s.enmEffAddrMode) 9353 9353 { 9354 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op32_addr16, p IemCpu->iEffSeg, false);9355 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op32_addr32, p IemCpu->iEffSeg, false);9356 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op32_addr64, p IemCpu->iEffSeg, false);9354 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op32_addr16, pVCpu->iem.s.iEffSeg, false); 9355 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op32_addr32, pVCpu->iem.s.iEffSeg, false); 9356 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_rep_outs_op32_addr64, pVCpu->iem.s.iEffSeg, false); 9357 9357 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 9358 9358 } … … 9364 9364 { 9365 9365 IEMOP_MNEMONIC("outs DX,Yv"); 9366 switch (p IemCpu->enmEffOpSize)9366 switch (pVCpu->iem.s.enmEffOpSize) 9367 9367 { 9368 9368 case IEMMODE_16BIT: 9369 switch (p IemCpu->enmEffAddrMode)9369 switch (pVCpu->iem.s.enmEffAddrMode) 9370 9370 { 9371 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op16_addr16, p IemCpu->iEffSeg, false);9372 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op16_addr32, p IemCpu->iEffSeg, false);9373 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op16_addr64, p IemCpu->iEffSeg, false);9371 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op16_addr16, pVCpu->iem.s.iEffSeg, false); 9372 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op16_addr32, pVCpu->iem.s.iEffSeg, false); 9373 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op16_addr64, pVCpu->iem.s.iEffSeg, false); 9374 9374 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 9375 9375 } … … 9377 9377 case IEMMODE_64BIT: 9378 9378 case IEMMODE_32BIT: 9379 switch (p IemCpu->enmEffAddrMode)9379 switch (pVCpu->iem.s.enmEffAddrMode) 9380 9380 { 9381 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op32_addr16, p IemCpu->iEffSeg, false);9382 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op32_addr32, p IemCpu->iEffSeg, false);9383 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op32_addr64, p IemCpu->iEffSeg, false);9381 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op32_addr16, pVCpu->iem.s.iEffSeg, false); 9382 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op32_addr32, pVCpu->iem.s.iEffSeg, false); 9383 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_outs_op32_addr64, pVCpu->iem.s.iEffSeg, false); 9384 9384 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 9385 9385 } … … 9711 9711 IEM_MC_ARG(uint32_t *, pEFlags, 2); 9712 9712 9713 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);9713 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 9714 9714 IEM_MC_REF_EFLAGS(pEFlags); 9715 9715 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU8, pu8Dst, u8Src, pEFlags); … … 9738 9738 IEM_MC_ARG_CONST(uint8_t, u8Src, /*=*/ u8Imm, 1); 9739 9739 9740 IEM_MC_MEM_MAP(pu8Dst, fAccess, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);9740 IEM_MC_MEM_MAP(pu8Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 9741 9741 IEM_MC_FETCH_EFLAGS(EFlags); 9742 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))9742 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 9743 9743 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU8, pu8Dst, u8Src, pEFlags); 9744 9744 else … … 9761 9761 PCIEMOPBINSIZES pImpl = g_apIemImplGrp1[(bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK]; 9762 9762 9763 switch (p IemCpu->enmEffOpSize)9763 switch (pVCpu->iem.s.enmEffOpSize) 9764 9764 { 9765 9765 case IEMMODE_16BIT: … … 9775 9775 IEM_MC_ARG(uint32_t *, pEFlags, 2); 9776 9776 9777 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);9777 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 9778 9778 IEM_MC_REF_EFLAGS(pEFlags); 9779 9779 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, u16Src, pEFlags); … … 9802 9802 uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); 9803 9803 IEM_MC_ASSIGN(u16Src, u16Imm); 9804 IEM_MC_MEM_MAP(pu16Dst, fAccess, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);9804 IEM_MC_MEM_MAP(pu16Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 9805 9805 IEM_MC_FETCH_EFLAGS(EFlags); 9806 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))9806 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 9807 9807 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, u16Src, pEFlags); 9808 9808 else … … 9829 9829 IEM_MC_ARG(uint32_t *, pEFlags, 2); 9830 9830 9831 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);9831 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 9832 9832 IEM_MC_REF_EFLAGS(pEFlags); 9833 9833 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); … … 9857 9857 uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); 9858 9858 IEM_MC_ASSIGN(u32Src, u32Imm); 9859 IEM_MC_MEM_MAP(pu32Dst, fAccess, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);9859 IEM_MC_MEM_MAP(pu32Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 9860 9860 IEM_MC_FETCH_EFLAGS(EFlags); 9861 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))9861 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 9862 9862 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); 9863 9863 else … … 9884 9884 IEM_MC_ARG(uint32_t *, pEFlags, 2); 9885 9885 9886 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);9886 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 9887 9887 IEM_MC_REF_EFLAGS(pEFlags); 9888 9888 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, u64Src, pEFlags); … … 9911 9911 uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm); 9912 9912 IEM_MC_ASSIGN(u64Src, u64Imm); 9913 IEM_MC_MEM_MAP(pu64Dst, fAccess, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);9913 IEM_MC_MEM_MAP(pu64Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 9914 9914 IEM_MC_FETCH_EFLAGS(EFlags); 9915 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))9915 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 9916 9916 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, u64Src, pEFlags); 9917 9917 else … … 9955 9955 IEMOP_HLP_NO_LOCK_PREFIX(); 9956 9956 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); 9957 switch (p IemCpu->enmEffOpSize)9957 switch (pVCpu->iem.s.enmEffOpSize) 9958 9958 { 9959 9959 case IEMMODE_16BIT: … … 9964 9964 IEM_MC_ARG(uint32_t *, pEFlags, 2); 9965 9965 9966 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);9966 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 9967 9967 IEM_MC_REF_EFLAGS(pEFlags); 9968 9968 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, u16Src, pEFlags); … … 9980 9980 IEM_MC_ARG(uint32_t *, pEFlags, 2); 9981 9981 9982 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);9982 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 9983 9983 IEM_MC_REF_EFLAGS(pEFlags); 9984 9984 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); … … 9997 9997 IEM_MC_ARG(uint32_t *, pEFlags, 2); 9998 9998 9999 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);9999 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 10000 10000 IEM_MC_REF_EFLAGS(pEFlags); 10001 10001 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, u64Src, pEFlags); … … 10021 10021 } 10022 10022 10023 switch (p IemCpu->enmEffOpSize)10023 switch (pVCpu->iem.s.enmEffOpSize) 10024 10024 { 10025 10025 case IEMMODE_16BIT: … … 10034 10034 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); 10035 10035 IEM_MC_ASSIGN(u16Src, (int8_t)u8Imm); 10036 IEM_MC_MEM_MAP(pu16Dst, fAccess, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);10036 IEM_MC_MEM_MAP(pu16Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 10037 10037 IEM_MC_FETCH_EFLAGS(EFlags); 10038 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))10038 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 10039 10039 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, u16Src, pEFlags); 10040 10040 else … … 10059 10059 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); 10060 10060 IEM_MC_ASSIGN(u32Src, (int8_t)u8Imm); 10061 IEM_MC_MEM_MAP(pu32Dst, fAccess, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);10061 IEM_MC_MEM_MAP(pu32Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 10062 10062 IEM_MC_FETCH_EFLAGS(EFlags); 10063 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))10063 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 10064 10064 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); 10065 10065 else … … 10084 10084 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); 10085 10085 IEM_MC_ASSIGN(u64Src, (int8_t)u8Imm); 10086 IEM_MC_MEM_MAP(pu64Dst, fAccess, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);10086 IEM_MC_MEM_MAP(pu64Dst, fAccess, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 10087 10087 IEM_MC_FETCH_EFLAGS(EFlags); 10088 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))10088 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 10089 10089 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, u64Src, pEFlags); 10090 10090 else … … 10140 10140 IEM_MC_LOCAL(uint8_t, uTmp2); 10141 10141 10142 IEM_MC_FETCH_GREG_U8(uTmp1, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);10143 IEM_MC_FETCH_GREG_U8(uTmp2, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);10144 IEM_MC_STORE_GREG_U8((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, uTmp1);10145 IEM_MC_STORE_GREG_U8(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, uTmp2);10142 IEM_MC_FETCH_GREG_U8(uTmp1, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 10143 IEM_MC_FETCH_GREG_U8(uTmp2, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 10144 IEM_MC_STORE_GREG_U8((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, uTmp1); 10145 IEM_MC_STORE_GREG_U8(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uTmp2); 10146 10146 10147 10147 IEM_MC_ADVANCE_RIP(); … … 10160 10160 10161 10161 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10162 IEM_MC_MEM_MAP(pu8Mem, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);10163 IEM_MC_REF_GREG_U8(pu8Reg, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);10162 IEM_MC_MEM_MAP(pu8Mem, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 10163 IEM_MC_REF_GREG_U8(pu8Reg, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 10164 10164 IEM_MC_CALL_VOID_AIMPL_2(iemAImpl_xchg_u8, pu8Mem, pu8Reg); 10165 10165 IEM_MC_MEM_COMMIT_AND_UNMAP(pu8Mem, IEM_ACCESS_DATA_RW); … … 10185 10185 IEMOP_HLP_NO_LOCK_PREFIX(); 10186 10186 10187 switch (p IemCpu->enmEffOpSize)10187 switch (pVCpu->iem.s.enmEffOpSize) 10188 10188 { 10189 10189 case IEMMODE_16BIT: … … 10192 10192 IEM_MC_LOCAL(uint16_t, uTmp2); 10193 10193 10194 IEM_MC_FETCH_GREG_U16(uTmp1, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);10195 IEM_MC_FETCH_GREG_U16(uTmp2, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);10196 IEM_MC_STORE_GREG_U16((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, uTmp1);10197 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, uTmp2);10194 IEM_MC_FETCH_GREG_U16(uTmp1, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 10195 IEM_MC_FETCH_GREG_U16(uTmp2, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 10196 IEM_MC_STORE_GREG_U16((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, uTmp1); 10197 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uTmp2); 10198 10198 10199 10199 IEM_MC_ADVANCE_RIP(); … … 10206 10206 IEM_MC_LOCAL(uint32_t, uTmp2); 10207 10207 10208 IEM_MC_FETCH_GREG_U32(uTmp1, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);10209 IEM_MC_FETCH_GREG_U32(uTmp2, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);10210 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, uTmp1);10211 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, uTmp2);10208 IEM_MC_FETCH_GREG_U32(uTmp1, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 10209 IEM_MC_FETCH_GREG_U32(uTmp2, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 10210 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, uTmp1); 10211 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uTmp2); 10212 10212 10213 10213 IEM_MC_ADVANCE_RIP(); … … 10220 10220 IEM_MC_LOCAL(uint64_t, uTmp2); 10221 10221 10222 IEM_MC_FETCH_GREG_U64(uTmp1, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);10223 IEM_MC_FETCH_GREG_U64(uTmp2, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);10224 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, uTmp1);10225 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, uTmp2);10222 IEM_MC_FETCH_GREG_U64(uTmp1, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 10223 IEM_MC_FETCH_GREG_U64(uTmp2, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 10224 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, uTmp1); 10225 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uTmp2); 10226 10226 10227 10227 IEM_MC_ADVANCE_RIP(); … … 10237 10237 * We're accessing memory. 10238 10238 */ 10239 switch (p IemCpu->enmEffOpSize)10239 switch (pVCpu->iem.s.enmEffOpSize) 10240 10240 { 10241 10241 /** @todo the register must be committed separately! */ … … 10247 10247 10248 10248 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10249 IEM_MC_MEM_MAP(pu16Mem, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);10250 IEM_MC_REF_GREG_U16(pu16Reg, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);10249 IEM_MC_MEM_MAP(pu16Mem, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 10250 IEM_MC_REF_GREG_U16(pu16Reg, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 10251 10251 IEM_MC_CALL_VOID_AIMPL_2(iemAImpl_xchg_u16, pu16Mem, pu16Reg); 10252 10252 IEM_MC_MEM_COMMIT_AND_UNMAP(pu16Mem, IEM_ACCESS_DATA_RW); … … 10263 10263 10264 10264 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10265 IEM_MC_MEM_MAP(pu32Mem, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);10266 IEM_MC_REF_GREG_U32(pu32Reg, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);10265 IEM_MC_MEM_MAP(pu32Mem, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 10266 IEM_MC_REF_GREG_U32(pu32Reg, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 10267 10267 IEM_MC_CALL_VOID_AIMPL_2(iemAImpl_xchg_u32, pu32Mem, pu32Reg); 10268 10268 IEM_MC_MEM_COMMIT_AND_UNMAP(pu32Mem, IEM_ACCESS_DATA_RW); … … 10280 10280 10281 10281 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10282 IEM_MC_MEM_MAP(pu64Mem, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);10283 IEM_MC_REF_GREG_U64(pu64Reg, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);10282 IEM_MC_MEM_MAP(pu64Mem, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 10283 IEM_MC_REF_GREG_U64(pu64Reg, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 10284 10284 IEM_MC_CALL_VOID_AIMPL_2(iemAImpl_xchg_u64, pu64Mem, pu64Reg); 10285 10285 IEM_MC_MEM_COMMIT_AND_UNMAP(pu64Mem, IEM_ACCESS_DATA_RW); … … 10311 10311 IEM_MC_BEGIN(0, 1); 10312 10312 IEM_MC_LOCAL(uint8_t, u8Value); 10313 IEM_MC_FETCH_GREG_U8(u8Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);10314 IEM_MC_STORE_GREG_U8((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u8Value);10313 IEM_MC_FETCH_GREG_U8(u8Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 10314 IEM_MC_STORE_GREG_U8((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u8Value); 10315 10315 IEM_MC_ADVANCE_RIP(); 10316 10316 IEM_MC_END(); … … 10325 10325 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 10326 10326 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10327 IEM_MC_FETCH_GREG_U8(u8Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);10328 IEM_MC_STORE_MEM_U8(p IemCpu->iEffSeg, GCPtrEffDst, u8Value);10327 IEM_MC_FETCH_GREG_U8(u8Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 10328 IEM_MC_STORE_MEM_U8(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u8Value); 10329 10329 IEM_MC_ADVANCE_RIP(); 10330 10330 IEM_MC_END(); … … 10348 10348 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 10349 10349 { 10350 switch (p IemCpu->enmEffOpSize)10350 switch (pVCpu->iem.s.enmEffOpSize) 10351 10351 { 10352 10352 case IEMMODE_16BIT: 10353 10353 IEM_MC_BEGIN(0, 1); 10354 10354 IEM_MC_LOCAL(uint16_t, u16Value); 10355 IEM_MC_FETCH_GREG_U16(u16Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);10356 IEM_MC_STORE_GREG_U16((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u16Value);10355 IEM_MC_FETCH_GREG_U16(u16Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 10356 IEM_MC_STORE_GREG_U16((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u16Value); 10357 10357 IEM_MC_ADVANCE_RIP(); 10358 10358 IEM_MC_END(); … … 10362 10362 IEM_MC_BEGIN(0, 1); 10363 10363 IEM_MC_LOCAL(uint32_t, u32Value); 10364 IEM_MC_FETCH_GREG_U32(u32Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);10365 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u32Value);10364 IEM_MC_FETCH_GREG_U32(u32Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 10365 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u32Value); 10366 10366 IEM_MC_ADVANCE_RIP(); 10367 10367 IEM_MC_END(); … … 10371 10371 IEM_MC_BEGIN(0, 1); 10372 10372 IEM_MC_LOCAL(uint64_t, u64Value); 10373 IEM_MC_FETCH_GREG_U64(u64Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);10374 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u64Value);10373 IEM_MC_FETCH_GREG_U64(u64Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 10374 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u64Value); 10375 10375 IEM_MC_ADVANCE_RIP(); 10376 10376 IEM_MC_END(); … … 10383 10383 * We're writing a register to memory. 10384 10384 */ 10385 switch (p IemCpu->enmEffOpSize)10385 switch (pVCpu->iem.s.enmEffOpSize) 10386 10386 { 10387 10387 case IEMMODE_16BIT: … … 10390 10390 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 10391 10391 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10392 IEM_MC_FETCH_GREG_U16(u16Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);10393 IEM_MC_STORE_MEM_U16(p IemCpu->iEffSeg, GCPtrEffDst, u16Value);10392 IEM_MC_FETCH_GREG_U16(u16Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 10393 IEM_MC_STORE_MEM_U16(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u16Value); 10394 10394 IEM_MC_ADVANCE_RIP(); 10395 10395 IEM_MC_END(); … … 10401 10401 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 10402 10402 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10403 IEM_MC_FETCH_GREG_U32(u32Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);10404 IEM_MC_STORE_MEM_U32(p IemCpu->iEffSeg, GCPtrEffDst, u32Value);10403 IEM_MC_FETCH_GREG_U32(u32Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 10404 IEM_MC_STORE_MEM_U32(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u32Value); 10405 10405 IEM_MC_ADVANCE_RIP(); 10406 10406 IEM_MC_END(); … … 10412 10412 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 10413 10413 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10414 IEM_MC_FETCH_GREG_U64(u64Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg);10415 IEM_MC_STORE_MEM_U64(p IemCpu->iEffSeg, GCPtrEffDst, u64Value);10414 IEM_MC_FETCH_GREG_U64(u64Value, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 10415 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u64Value); 10416 10416 IEM_MC_ADVANCE_RIP(); 10417 10417 IEM_MC_END(); … … 10438 10438 IEM_MC_BEGIN(0, 1); 10439 10439 IEM_MC_LOCAL(uint8_t, u8Value); 10440 IEM_MC_FETCH_GREG_U8(u8Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);10441 IEM_MC_STORE_GREG_U8(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u8Value);10440 IEM_MC_FETCH_GREG_U8(u8Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 10441 IEM_MC_STORE_GREG_U8(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u8Value); 10442 10442 IEM_MC_ADVANCE_RIP(); 10443 10443 IEM_MC_END(); … … 10452 10452 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 10453 10453 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10454 IEM_MC_FETCH_MEM_U8(u8Value, p IemCpu->iEffSeg, GCPtrEffDst);10455 IEM_MC_STORE_GREG_U8(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u8Value);10454 IEM_MC_FETCH_MEM_U8(u8Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 10455 IEM_MC_STORE_GREG_U8(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u8Value); 10456 10456 IEM_MC_ADVANCE_RIP(); 10457 10457 IEM_MC_END(); … … 10474 10474 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 10475 10475 { 10476 switch (p IemCpu->enmEffOpSize)10476 switch (pVCpu->iem.s.enmEffOpSize) 10477 10477 { 10478 10478 case IEMMODE_16BIT: 10479 10479 IEM_MC_BEGIN(0, 1); 10480 10480 IEM_MC_LOCAL(uint16_t, u16Value); 10481 IEM_MC_FETCH_GREG_U16(u16Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);10482 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u16Value);10481 IEM_MC_FETCH_GREG_U16(u16Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 10482 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16Value); 10483 10483 IEM_MC_ADVANCE_RIP(); 10484 10484 IEM_MC_END(); … … 10488 10488 IEM_MC_BEGIN(0, 1); 10489 10489 IEM_MC_LOCAL(uint32_t, u32Value); 10490 IEM_MC_FETCH_GREG_U32(u32Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);10491 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Value);10490 IEM_MC_FETCH_GREG_U32(u32Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 10491 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Value); 10492 10492 IEM_MC_ADVANCE_RIP(); 10493 10493 IEM_MC_END(); … … 10497 10497 IEM_MC_BEGIN(0, 1); 10498 10498 IEM_MC_LOCAL(uint64_t, u64Value); 10499 IEM_MC_FETCH_GREG_U64(u64Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);10500 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Value);10499 IEM_MC_FETCH_GREG_U64(u64Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 10500 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Value); 10501 10501 IEM_MC_ADVANCE_RIP(); 10502 10502 IEM_MC_END(); … … 10509 10509 * We're loading a register from memory. 10510 10510 */ 10511 switch (p IemCpu->enmEffOpSize)10511 switch (pVCpu->iem.s.enmEffOpSize) 10512 10512 { 10513 10513 case IEMMODE_16BIT: … … 10516 10516 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 10517 10517 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10518 IEM_MC_FETCH_MEM_U16(u16Value, p IemCpu->iEffSeg, GCPtrEffDst);10519 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u16Value);10518 IEM_MC_FETCH_MEM_U16(u16Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 10519 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16Value); 10520 10520 IEM_MC_ADVANCE_RIP(); 10521 10521 IEM_MC_END(); … … 10527 10527 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 10528 10528 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10529 IEM_MC_FETCH_MEM_U32(u32Value, p IemCpu->iEffSeg, GCPtrEffDst);10530 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Value);10529 IEM_MC_FETCH_MEM_U32(u32Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 10530 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Value); 10531 10531 IEM_MC_ADVANCE_RIP(); 10532 10532 IEM_MC_END(); … … 10538 10538 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 10539 10539 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10540 IEM_MC_FETCH_MEM_U64(u64Value, p IemCpu->iEffSeg, GCPtrEffDst);10541 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u64Value);10540 IEM_MC_FETCH_MEM_U64(u64Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 10541 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Value); 10542 10542 IEM_MC_ADVANCE_RIP(); 10543 10543 IEM_MC_END(); … … 10552 10552 FNIEMOP_DEF(iemOp_arpl_Ew_Gw_movsx_Gv_Ev) 10553 10553 { 10554 if (p IemCpu->enmCpuMode != IEMMODE_64BIT)10554 if (pVCpu->iem.s.enmCpuMode != IEMMODE_64BIT) 10555 10555 return FNIEMOP_CALL(iemOp_arpl_Ew_Gw); 10556 if (p IemCpu->enmEffOpSize != IEMMODE_64BIT)10556 if (pVCpu->iem.s.enmEffOpSize != IEMMODE_64BIT) 10557 10557 return FNIEMOP_CALL(iemOp_mov_Gv_Ev); 10558 10558 return FNIEMOP_CALL(iemOp_movsxd_Gv_Ev); … … 10582 10582 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 10583 10583 { 10584 switch (p IemCpu->enmEffOpSize)10584 switch (pVCpu->iem.s.enmEffOpSize) 10585 10585 { 10586 10586 case IEMMODE_16BIT: … … 10588 10588 IEM_MC_LOCAL(uint16_t, u16Value); 10589 10589 IEM_MC_FETCH_SREG_U16(u16Value, iSegReg); 10590 IEM_MC_STORE_GREG_U16((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u16Value);10590 IEM_MC_STORE_GREG_U16((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u16Value); 10591 10591 IEM_MC_ADVANCE_RIP(); 10592 10592 IEM_MC_END(); … … 10597 10597 IEM_MC_LOCAL(uint32_t, u32Value); 10598 10598 IEM_MC_FETCH_SREG_ZX_U32(u32Value, iSegReg); 10599 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u32Value);10599 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u32Value); 10600 10600 IEM_MC_ADVANCE_RIP(); 10601 10601 IEM_MC_END(); … … 10606 10606 IEM_MC_LOCAL(uint64_t, u64Value); 10607 10607 IEM_MC_FETCH_SREG_ZX_U64(u64Value, iSegReg); 10608 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u64Value);10608 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u64Value); 10609 10609 IEM_MC_ADVANCE_RIP(); 10610 10610 IEM_MC_END(); … … 10619 10619 */ 10620 10620 #if 0 /* not necessary */ 10621 p IemCpu->enmEffOpSize = pIemCpu->enmDefOpSize = IEMMODE_16BIT;10621 pVCpu->iem.s.enmEffOpSize = pVCpu->iem.s.enmDefOpSize = IEMMODE_16BIT; 10622 10622 #endif 10623 10623 IEM_MC_BEGIN(0, 2); … … 10626 10626 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10627 10627 IEM_MC_FETCH_SREG_U16(u16Value, iSegReg); 10628 IEM_MC_STORE_MEM_U16(p IemCpu->iEffSeg, GCPtrEffDst, u16Value);10628 IEM_MC_STORE_MEM_U16(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u16Value); 10629 10629 IEM_MC_ADVANCE_RIP(); 10630 10630 IEM_MC_END(); … … 10645 10645 return IEMOP_RAISE_INVALID_OPCODE(); /* no register form */ 10646 10646 10647 switch (p IemCpu->enmEffOpSize)10647 switch (pVCpu->iem.s.enmEffOpSize) 10648 10648 { 10649 10649 case IEMMODE_16BIT: … … 10653 10653 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 10654 10654 IEM_MC_ASSIGN_TO_SMALLER(u16Cast, GCPtrEffSrc); 10655 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u16Cast);10655 IEM_MC_STORE_GREG_U16(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u16Cast); 10656 10656 IEM_MC_ADVANCE_RIP(); 10657 10657 IEM_MC_END(); … … 10664 10664 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 10665 10665 IEM_MC_ASSIGN_TO_SMALLER(u32Cast, GCPtrEffSrc); 10666 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, u32Cast);10666 IEM_MC_STORE_GREG_U32(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Cast); 10667 10667 IEM_MC_ADVANCE_RIP(); 10668 10668 IEM_MC_END(); … … 10673 10673 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 10674 10674 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 10675 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | p IemCpu->uRexReg, GCPtrEffSrc);10675 IEM_MC_STORE_GREG_U64(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, GCPtrEffSrc); 10676 10676 IEM_MC_ADVANCE_RIP(); 10677 10677 IEM_MC_END(); … … 10694 10694 */ 10695 10695 #if 0 /* not necessary */ 10696 p IemCpu->enmEffOpSize = pIemCpu->enmDefOpSize = IEMMODE_16BIT;10696 pVCpu->iem.s.enmEffOpSize = pVCpu->iem.s.enmDefOpSize = IEMMODE_16BIT; 10697 10697 #endif 10698 10698 … … 10714 10714 IEM_MC_ARG_CONST(uint8_t, iSRegArg, iSegReg, 0); 10715 10715 IEM_MC_ARG(uint16_t, u16Value, 1); 10716 IEM_MC_FETCH_GREG_U16(u16Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);10716 IEM_MC_FETCH_GREG_U16(u16Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 10717 10717 IEM_MC_CALL_CIMPL_2(iemCImpl_load_SReg, iSRegArg, u16Value); 10718 10718 IEM_MC_END(); … … 10729 10729 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 10730 10730 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 10731 IEM_MC_FETCH_MEM_U16(u16Value, p IemCpu->iEffSeg, GCPtrEffDst);10731 IEM_MC_FETCH_MEM_U16(u16Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 10732 10732 IEM_MC_CALL_CIMPL_2(iemCImpl_load_SReg, iSRegArg, u16Value); 10733 10733 IEM_MC_END(); … … 10755 10755 /* Register access is relatively easy and can share code. */ 10756 10756 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 10757 return FNIEMOP_CALL_1(iemOpCommonPopGReg, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);10757 return FNIEMOP_CALL_1(iemOpCommonPopGReg, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 10758 10758 10759 10759 /* … … 10772 10772 #ifndef TST_IEM_CHECK_MC 10773 10773 /* Calc effective address with modified ESP. */ 10774 uint8_t const offOpcodeSaved = p IemCpu->offOpcode;10774 uint8_t const offOpcodeSaved = pVCpu->iem.s.offOpcode; 10775 10775 RTGCPTR GCPtrEff; 10776 10776 VBOXSTRICTRC rcStrict; 10777 rcStrict = iemOpHlpCalcRmEffAddr(p IemCpu, bRm, 0, &GCPtrEff);10777 rcStrict = iemOpHlpCalcRmEffAddr(pVCpu, bRm, 0, &GCPtrEff); 10778 10778 if (rcStrict != VINF_SUCCESS) 10779 10779 return rcStrict; 10780 p IemCpu->offOpcode = offOpcodeSaved;10781 10782 PCPUMCTX pCtx = p IemCpu->CTX_SUFF(pCtx);10780 pVCpu->iem.s.offOpcode = offOpcodeSaved; 10781 10782 PCPUMCTX pCtx = pVCpu->iem.s.CTX_SUFF(pCtx); 10783 10783 uint64_t const RspSaved = pCtx->rsp; 10784 switch (p IemCpu->enmEffOpSize)10785 { 10786 case IEMMODE_16BIT: iemRegAddToRsp(p IemCpu, pCtx, 2); break;10787 case IEMMODE_32BIT: iemRegAddToRsp(p IemCpu, pCtx, 4); break;10788 case IEMMODE_64BIT: iemRegAddToRsp(p IemCpu, pCtx, 8); break;10784 switch (pVCpu->iem.s.enmEffOpSize) 10785 { 10786 case IEMMODE_16BIT: iemRegAddToRsp(pVCpu, pCtx, 2); break; 10787 case IEMMODE_32BIT: iemRegAddToRsp(pVCpu, pCtx, 4); break; 10788 case IEMMODE_64BIT: iemRegAddToRsp(pVCpu, pCtx, 8); break; 10789 10789 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 10790 10790 } 10791 rcStrict = iemOpHlpCalcRmEffAddr(p IemCpu, bRm, 0, &GCPtrEff);10791 rcStrict = iemOpHlpCalcRmEffAddr(pVCpu, bRm, 0, &GCPtrEff); 10792 10792 Assert(rcStrict == VINF_SUCCESS); 10793 10793 pCtx->rsp = RspSaved; … … 10796 10796 RTUINT64U TmpRsp; 10797 10797 TmpRsp.u = pCtx->rsp; 10798 switch (p IemCpu->enmEffOpSize)10798 switch (pVCpu->iem.s.enmEffOpSize) 10799 10799 { 10800 10800 case IEMMODE_16BIT: 10801 10801 { 10802 10802 uint16_t u16Value; 10803 rcStrict = iemMemStackPopU16Ex(p IemCpu, &u16Value, &TmpRsp);10803 rcStrict = iemMemStackPopU16Ex(pVCpu, &u16Value, &TmpRsp); 10804 10804 if (rcStrict == VINF_SUCCESS) 10805 rcStrict = iemMemStoreDataU16(p IemCpu, pIemCpu->iEffSeg, GCPtrEff, u16Value);10805 rcStrict = iemMemStoreDataU16(pVCpu, pVCpu->iem.s.iEffSeg, GCPtrEff, u16Value); 10806 10806 break; 10807 10807 } … … 10810 10810 { 10811 10811 uint32_t u32Value; 10812 rcStrict = iemMemStackPopU32Ex(p IemCpu, &u32Value, &TmpRsp);10812 rcStrict = iemMemStackPopU32Ex(pVCpu, &u32Value, &TmpRsp); 10813 10813 if (rcStrict == VINF_SUCCESS) 10814 rcStrict = iemMemStoreDataU32(p IemCpu, pIemCpu->iEffSeg, GCPtrEff, u32Value);10814 rcStrict = iemMemStoreDataU32(pVCpu, pVCpu->iem.s.iEffSeg, GCPtrEff, u32Value); 10815 10815 break; 10816 10816 } … … 10819 10819 { 10820 10820 uint64_t u64Value; 10821 rcStrict = iemMemStackPopU64Ex(p IemCpu, &u64Value, &TmpRsp);10821 rcStrict = iemMemStackPopU64Ex(pVCpu, &u64Value, &TmpRsp); 10822 10822 if (rcStrict == VINF_SUCCESS) 10823 rcStrict = iemMemStoreDataU64(p IemCpu, pIemCpu->iEffSeg, GCPtrEff, u64Value);10823 rcStrict = iemMemStoreDataU64(pVCpu, pVCpu->iem.s.iEffSeg, GCPtrEff, u64Value); 10824 10824 break; 10825 10825 } … … 10830 10830 { 10831 10831 pCtx->rsp = TmpRsp.u; 10832 iemRegUpdateRipAndClearRF(p IemCpu);10832 iemRegUpdateRipAndClearRF(pVCpu); 10833 10833 } 10834 10834 return rcStrict; … … 10861 10861 IEMOP_HLP_NO_LOCK_PREFIX(); 10862 10862 10863 iReg |= p IemCpu->uRexB;10864 switch (p IemCpu->enmEffOpSize)10863 iReg |= pVCpu->iem.s.uRexB; 10864 switch (pVCpu->iem.s.enmEffOpSize) 10865 10865 { 10866 10866 case IEMMODE_16BIT: … … 10909 10909 { 10910 10910 /* R8/R8D and RAX/EAX can be exchanged. */ 10911 if (p IemCpu->fPrefixes & IEM_OP_PRF_REX_B)10911 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_REX_B) 10912 10912 { 10913 10913 IEMOP_MNEMONIC("xchg r8,rAX"); … … 10915 10915 } 10916 10916 10917 if (p IemCpu->fPrefixes & IEM_OP_PRF_LOCK)10917 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK) 10918 10918 IEMOP_MNEMONIC("pause"); 10919 10919 else … … 10986 10986 { 10987 10987 IEMOP_HLP_NO_LOCK_PREFIX(); 10988 switch (p IemCpu->enmEffOpSize)10988 switch (pVCpu->iem.s.enmEffOpSize) 10989 10989 { 10990 10990 case IEMMODE_16BIT: … … 11033 11033 { 11034 11034 IEMOP_HLP_NO_LOCK_PREFIX(); 11035 switch (p IemCpu->enmEffOpSize)11035 switch (pVCpu->iem.s.enmEffOpSize) 11036 11036 { 11037 11037 case IEMMODE_16BIT: … … 11084 11084 /* Decode the far pointer address and pass it on to the far call C implementation. */ 11085 11085 uint32_t offSeg; 11086 if (p IemCpu->enmEffOpSize != IEMMODE_16BIT)11086 if (pVCpu->iem.s.enmEffOpSize != IEMMODE_16BIT) 11087 11087 IEM_OPCODE_GET_NEXT_U32(&offSeg); 11088 11088 else … … 11090 11090 uint16_t uSel; IEM_OPCODE_GET_NEXT_U16(&uSel); 11091 11091 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11092 return IEM_MC_DEFER_TO_CIMPL_3(iemCImpl_callf, uSel, offSeg, p IemCpu->enmEffOpSize);11092 return IEM_MC_DEFER_TO_CIMPL_3(iemCImpl_callf, uSel, offSeg, pVCpu->iem.s.enmEffOpSize); 11093 11093 } 11094 11094 … … 11114 11114 IEMOP_HLP_NO_LOCK_PREFIX(); 11115 11115 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 11116 return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_pushf, p IemCpu->enmEffOpSize);11116 return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_pushf, pVCpu->iem.s.enmEffOpSize); 11117 11117 } 11118 11118 … … 11123 11123 IEMOP_HLP_NO_LOCK_PREFIX(); 11124 11124 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 11125 return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_popf, p IemCpu->enmEffOpSize);11125 return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_popf, pVCpu->iem.s.enmEffOpSize); 11126 11126 } 11127 11127 … … 11132 11132 IEMOP_MNEMONIC("sahf"); 11133 11133 IEMOP_HLP_NO_LOCK_PREFIX(); 11134 if ( p IemCpu->enmCpuMode == IEMMODE_64BIT11135 && !IEM_GET_GUEST_CPU_FEATURES(p IemCpu)->fLahfSahf)11134 if ( pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT 11135 && !IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fLahfSahf) 11136 11136 return IEMOP_RAISE_INVALID_OPCODE(); 11137 11137 IEM_MC_BEGIN(0, 2); … … 11156 11156 IEMOP_MNEMONIC("lahf"); 11157 11157 IEMOP_HLP_NO_LOCK_PREFIX(); 11158 if ( p IemCpu->enmCpuMode == IEMMODE_64BIT11159 && !IEM_GET_GUEST_CPU_FEATURES(p IemCpu)->fLahfSahf)11158 if ( pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT 11159 && !IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fLahfSahf) 11160 11160 return IEMOP_RAISE_INVALID_OPCODE(); 11161 11161 IEM_MC_BEGIN(0, 1); … … 11178 11178 do \ 11179 11179 { \ 11180 switch (p IemCpu->enmEffAddrMode) \11180 switch (pVCpu->iem.s.enmEffAddrMode) \ 11181 11181 { \ 11182 11182 case IEMMODE_16BIT: \ … … 11208 11208 IEM_MC_BEGIN(0,1); 11209 11209 IEM_MC_LOCAL(uint8_t, u8Tmp); 11210 IEM_MC_FETCH_MEM_U8(u8Tmp, p IemCpu->iEffSeg, GCPtrMemOff);11210 IEM_MC_FETCH_MEM_U8(u8Tmp, pVCpu->iem.s.iEffSeg, GCPtrMemOff); 11211 11211 IEM_MC_STORE_GREG_U8(X86_GREG_xAX, u8Tmp); 11212 11212 IEM_MC_ADVANCE_RIP(); … … 11229 11229 * Fetch rAX. 11230 11230 */ 11231 switch (p IemCpu->enmEffOpSize)11231 switch (pVCpu->iem.s.enmEffOpSize) 11232 11232 { 11233 11233 case IEMMODE_16BIT: 11234 11234 IEM_MC_BEGIN(0,1); 11235 11235 IEM_MC_LOCAL(uint16_t, u16Tmp); 11236 IEM_MC_FETCH_MEM_U16(u16Tmp, p IemCpu->iEffSeg, GCPtrMemOff);11236 IEM_MC_FETCH_MEM_U16(u16Tmp, pVCpu->iem.s.iEffSeg, GCPtrMemOff); 11237 11237 IEM_MC_STORE_GREG_U16(X86_GREG_xAX, u16Tmp); 11238 11238 IEM_MC_ADVANCE_RIP(); … … 11243 11243 IEM_MC_BEGIN(0,1); 11244 11244 IEM_MC_LOCAL(uint32_t, u32Tmp); 11245 IEM_MC_FETCH_MEM_U32(u32Tmp, p IemCpu->iEffSeg, GCPtrMemOff);11245 IEM_MC_FETCH_MEM_U32(u32Tmp, pVCpu->iem.s.iEffSeg, GCPtrMemOff); 11246 11246 IEM_MC_STORE_GREG_U32(X86_GREG_xAX, u32Tmp); 11247 11247 IEM_MC_ADVANCE_RIP(); … … 11252 11252 IEM_MC_BEGIN(0,1); 11253 11253 IEM_MC_LOCAL(uint64_t, u64Tmp); 11254 IEM_MC_FETCH_MEM_U64(u64Tmp, p IemCpu->iEffSeg, GCPtrMemOff);11254 IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrMemOff); 11255 11255 IEM_MC_STORE_GREG_U64(X86_GREG_xAX, u64Tmp); 11256 11256 IEM_MC_ADVANCE_RIP(); … … 11278 11278 IEM_MC_LOCAL(uint8_t, u8Tmp); 11279 11279 IEM_MC_FETCH_GREG_U8(u8Tmp, X86_GREG_xAX); 11280 IEM_MC_STORE_MEM_U8(p IemCpu->iEffSeg, GCPtrMemOff, u8Tmp);11280 IEM_MC_STORE_MEM_U8(pVCpu->iem.s.iEffSeg, GCPtrMemOff, u8Tmp); 11281 11281 IEM_MC_ADVANCE_RIP(); 11282 11282 IEM_MC_END(); … … 11297 11297 * Store rAX. 11298 11298 */ 11299 switch (p IemCpu->enmEffOpSize)11299 switch (pVCpu->iem.s.enmEffOpSize) 11300 11300 { 11301 11301 case IEMMODE_16BIT: … … 11303 11303 IEM_MC_LOCAL(uint16_t, u16Tmp); 11304 11304 IEM_MC_FETCH_GREG_U16(u16Tmp, X86_GREG_xAX); 11305 IEM_MC_STORE_MEM_U16(p IemCpu->iEffSeg, GCPtrMemOff, u16Tmp);11305 IEM_MC_STORE_MEM_U16(pVCpu->iem.s.iEffSeg, GCPtrMemOff, u16Tmp); 11306 11306 IEM_MC_ADVANCE_RIP(); 11307 11307 IEM_MC_END(); … … 11312 11312 IEM_MC_LOCAL(uint32_t, u32Tmp); 11313 11313 IEM_MC_FETCH_GREG_U32(u32Tmp, X86_GREG_xAX); 11314 IEM_MC_STORE_MEM_U32(p IemCpu->iEffSeg, GCPtrMemOff, u32Tmp);11314 IEM_MC_STORE_MEM_U32(pVCpu->iem.s.iEffSeg, GCPtrMemOff, u32Tmp); 11315 11315 IEM_MC_ADVANCE_RIP(); 11316 11316 IEM_MC_END(); … … 11321 11321 IEM_MC_LOCAL(uint64_t, u64Tmp); 11322 11322 IEM_MC_FETCH_GREG_U64(u64Tmp, X86_GREG_xAX); 11323 IEM_MC_STORE_MEM_U64(p IemCpu->iEffSeg, GCPtrMemOff, u64Tmp);11323 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrMemOff, u64Tmp); 11324 11324 IEM_MC_ADVANCE_RIP(); 11325 11325 IEM_MC_END(); … … 11336 11336 IEM_MC_LOCAL(RTGCPTR, uAddr); \ 11337 11337 IEM_MC_FETCH_GREG_U##AddrBits##_ZX_U64(uAddr, X86_GREG_xSI); \ 11338 IEM_MC_FETCH_MEM_U##ValBits(uValue, p IemCpu->iEffSeg, uAddr); \11338 IEM_MC_FETCH_MEM_U##ValBits(uValue, pVCpu->iem.s.iEffSeg, uAddr); \ 11339 11339 IEM_MC_FETCH_GREG_U##AddrBits##_ZX_U64(uAddr, X86_GREG_xDI); \ 11340 11340 IEM_MC_STORE_MEM_U##ValBits(X86_SREG_ES, uAddr, uValue); \ … … 11357 11357 * Use the C implementation if a repeat prefix is encountered. 11358 11358 */ 11359 if (p IemCpu->fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))11359 if (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 11360 11360 { 11361 11361 IEMOP_MNEMONIC("rep movsb Xb,Yb"); 11362 switch (p IemCpu->enmEffAddrMode)11362 switch (pVCpu->iem.s.enmEffAddrMode) 11363 11363 { 11364 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op8_addr16, p IemCpu->iEffSeg);11365 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op8_addr32, p IemCpu->iEffSeg);11366 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op8_addr64, p IemCpu->iEffSeg);11364 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op8_addr16, pVCpu->iem.s.iEffSeg); 11365 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op8_addr32, pVCpu->iem.s.iEffSeg); 11366 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op8_addr64, pVCpu->iem.s.iEffSeg); 11367 11367 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 11368 11368 } … … 11373 11373 * Sharing case implementation with movs[wdq] below. 11374 11374 */ 11375 switch (p IemCpu->enmEffAddrMode)11375 switch (pVCpu->iem.s.enmEffAddrMode) 11376 11376 { 11377 11377 case IEMMODE_16BIT: IEM_MOVS_CASE(8, 16); break; … … 11392 11392 * Use the C implementation if a repeat prefix is encountered. 11393 11393 */ 11394 if (p IemCpu->fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))11394 if (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 11395 11395 { 11396 11396 IEMOP_MNEMONIC("rep movs Xv,Yv"); 11397 switch (p IemCpu->enmEffOpSize)11397 switch (pVCpu->iem.s.enmEffOpSize) 11398 11398 { 11399 11399 case IEMMODE_16BIT: 11400 switch (p IemCpu->enmEffAddrMode)11400 switch (pVCpu->iem.s.enmEffAddrMode) 11401 11401 { 11402 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op16_addr16, p IemCpu->iEffSeg);11403 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op16_addr32, p IemCpu->iEffSeg);11404 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op16_addr64, p IemCpu->iEffSeg);11402 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op16_addr16, pVCpu->iem.s.iEffSeg); 11403 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op16_addr32, pVCpu->iem.s.iEffSeg); 11404 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op16_addr64, pVCpu->iem.s.iEffSeg); 11405 11405 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 11406 11406 } 11407 11407 break; 11408 11408 case IEMMODE_32BIT: 11409 switch (p IemCpu->enmEffAddrMode)11409 switch (pVCpu->iem.s.enmEffAddrMode) 11410 11410 { 11411 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op32_addr16, p IemCpu->iEffSeg);11412 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op32_addr32, p IemCpu->iEffSeg);11413 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op32_addr64, p IemCpu->iEffSeg);11411 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op32_addr16, pVCpu->iem.s.iEffSeg); 11412 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op32_addr32, pVCpu->iem.s.iEffSeg); 11413 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op32_addr64, pVCpu->iem.s.iEffSeg); 11414 11414 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 11415 11415 } 11416 11416 case IEMMODE_64BIT: 11417 switch (p IemCpu->enmEffAddrMode)11417 switch (pVCpu->iem.s.enmEffAddrMode) 11418 11418 { 11419 11419 case IEMMODE_16BIT: AssertFailedReturn(VERR_IEM_IPE_6); 11420 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op64_addr32, p IemCpu->iEffSeg);11421 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op64_addr64, p IemCpu->iEffSeg);11420 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op64_addr32, pVCpu->iem.s.iEffSeg); 11421 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_rep_movs_op64_addr64, pVCpu->iem.s.iEffSeg); 11422 11422 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 11423 11423 } … … 11431 11431 * Using ugly macro for implementing the cases, sharing it with movsb. 11432 11432 */ 11433 switch (p IemCpu->enmEffOpSize)11433 switch (pVCpu->iem.s.enmEffOpSize) 11434 11434 { 11435 11435 case IEMMODE_16BIT: 11436 switch (p IemCpu->enmEffAddrMode)11436 switch (pVCpu->iem.s.enmEffAddrMode) 11437 11437 { 11438 11438 case IEMMODE_16BIT: IEM_MOVS_CASE(16, 16); break; … … 11444 11444 11445 11445 case IEMMODE_32BIT: 11446 switch (p IemCpu->enmEffAddrMode)11446 switch (pVCpu->iem.s.enmEffAddrMode) 11447 11447 { 11448 11448 case IEMMODE_16BIT: IEM_MOVS_CASE(32, 16); break; … … 11454 11454 11455 11455 case IEMMODE_64BIT: 11456 switch (p IemCpu->enmEffAddrMode)11456 switch (pVCpu->iem.s.enmEffAddrMode) 11457 11457 { 11458 11458 case IEMMODE_16BIT: AssertFailedReturn(VERR_IEM_IPE_1); /* cannot be encoded */ break; … … 11479 11479 \ 11480 11480 IEM_MC_FETCH_GREG_U##AddrBits##_ZX_U64(uAddr, X86_GREG_xSI); \ 11481 IEM_MC_FETCH_MEM_U##ValBits(uValue1, p IemCpu->iEffSeg, uAddr); \11481 IEM_MC_FETCH_MEM_U##ValBits(uValue1, pVCpu->iem.s.iEffSeg, uAddr); \ 11482 11482 IEM_MC_FETCH_GREG_U##AddrBits##_ZX_U64(uAddr, X86_GREG_xDI); \ 11483 11483 IEM_MC_FETCH_MEM_U##ValBits(uValue2, X86_SREG_ES, uAddr); \ … … 11504 11504 * Use the C implementation if a repeat prefix is encountered. 11505 11505 */ 11506 if (p IemCpu->fPrefixes & IEM_OP_PRF_REPZ)11506 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_REPZ) 11507 11507 { 11508 11508 IEMOP_MNEMONIC("repe cmps Xb,Yb"); 11509 switch (p IemCpu->enmEffAddrMode)11509 switch (pVCpu->iem.s.enmEffAddrMode) 11510 11510 { 11511 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op8_addr16, p IemCpu->iEffSeg);11512 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op8_addr32, p IemCpu->iEffSeg);11513 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op8_addr64, p IemCpu->iEffSeg);11511 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op8_addr16, pVCpu->iem.s.iEffSeg); 11512 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op8_addr32, pVCpu->iem.s.iEffSeg); 11513 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op8_addr64, pVCpu->iem.s.iEffSeg); 11514 11514 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 11515 11515 } 11516 11516 } 11517 if (p IemCpu->fPrefixes & IEM_OP_PRF_REPNZ)11517 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_REPNZ) 11518 11518 { 11519 11519 IEMOP_MNEMONIC("repe cmps Xb,Yb"); 11520 switch (p IemCpu->enmEffAddrMode)11520 switch (pVCpu->iem.s.enmEffAddrMode) 11521 11521 { 11522 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op8_addr16, p IemCpu->iEffSeg);11523 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op8_addr32, p IemCpu->iEffSeg);11524 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op8_addr64, p IemCpu->iEffSeg);11522 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op8_addr16, pVCpu->iem.s.iEffSeg); 11523 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op8_addr32, pVCpu->iem.s.iEffSeg); 11524 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op8_addr64, pVCpu->iem.s.iEffSeg); 11525 11525 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 11526 11526 } … … 11531 11531 * Sharing case implementation with cmps[wdq] below. 11532 11532 */ 11533 switch (p IemCpu->enmEffAddrMode)11533 switch (pVCpu->iem.s.enmEffAddrMode) 11534 11534 { 11535 11535 case IEMMODE_16BIT: IEM_CMPS_CASE(8, 16); break; … … 11551 11551 * Use the C implementation if a repeat prefix is encountered. 11552 11552 */ 11553 if (p IemCpu->fPrefixes & IEM_OP_PRF_REPZ)11553 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_REPZ) 11554 11554 { 11555 11555 IEMOP_MNEMONIC("repe cmps Xv,Yv"); 11556 switch (p IemCpu->enmEffOpSize)11556 switch (pVCpu->iem.s.enmEffOpSize) 11557 11557 { 11558 11558 case IEMMODE_16BIT: 11559 switch (p IemCpu->enmEffAddrMode)11559 switch (pVCpu->iem.s.enmEffAddrMode) 11560 11560 { 11561 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op16_addr16, p IemCpu->iEffSeg);11562 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op16_addr32, p IemCpu->iEffSeg);11563 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op16_addr64, p IemCpu->iEffSeg);11561 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op16_addr16, pVCpu->iem.s.iEffSeg); 11562 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op16_addr32, pVCpu->iem.s.iEffSeg); 11563 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op16_addr64, pVCpu->iem.s.iEffSeg); 11564 11564 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 11565 11565 } 11566 11566 break; 11567 11567 case IEMMODE_32BIT: 11568 switch (p IemCpu->enmEffAddrMode)11568 switch (pVCpu->iem.s.enmEffAddrMode) 11569 11569 { 11570 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op32_addr16, p IemCpu->iEffSeg);11571 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op32_addr32, p IemCpu->iEffSeg);11572 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op32_addr64, p IemCpu->iEffSeg);11570 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op32_addr16, pVCpu->iem.s.iEffSeg); 11571 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op32_addr32, pVCpu->iem.s.iEffSeg); 11572 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op32_addr64, pVCpu->iem.s.iEffSeg); 11573 11573 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 11574 11574 } 11575 11575 case IEMMODE_64BIT: 11576 switch (p IemCpu->enmEffAddrMode)11576 switch (pVCpu->iem.s.enmEffAddrMode) 11577 11577 { 11578 11578 case IEMMODE_16BIT: AssertFailedReturn(VERR_IEM_IPE_4); 11579 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op64_addr32, p IemCpu->iEffSeg);11580 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op64_addr64, p IemCpu->iEffSeg);11579 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op64_addr32, pVCpu->iem.s.iEffSeg); 11580 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repe_cmps_op64_addr64, pVCpu->iem.s.iEffSeg); 11581 11581 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 11582 11582 } … … 11585 11585 } 11586 11586 11587 if (p IemCpu->fPrefixes & IEM_OP_PRF_REPNZ)11587 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_REPNZ) 11588 11588 { 11589 11589 IEMOP_MNEMONIC("repne cmps Xv,Yv"); 11590 switch (p IemCpu->enmEffOpSize)11590 switch (pVCpu->iem.s.enmEffOpSize) 11591 11591 { 11592 11592 case IEMMODE_16BIT: 11593 switch (p IemCpu->enmEffAddrMode)11593 switch (pVCpu->iem.s.enmEffAddrMode) 11594 11594 { 11595 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op16_addr16, p IemCpu->iEffSeg);11596 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op16_addr32, p IemCpu->iEffSeg);11597 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op16_addr64, p IemCpu->iEffSeg);11595 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op16_addr16, pVCpu->iem.s.iEffSeg); 11596 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op16_addr32, pVCpu->iem.s.iEffSeg); 11597 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op16_addr64, pVCpu->iem.s.iEffSeg); 11598 11598 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 11599 11599 } 11600 11600 break; 11601 11601 case IEMMODE_32BIT: 11602 switch (p IemCpu->enmEffAddrMode)11602 switch (pVCpu->iem.s.enmEffAddrMode) 11603 11603 { 11604 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op32_addr16, p IemCpu->iEffSeg);11605 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op32_addr32, p IemCpu->iEffSeg);11606 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op32_addr64, p IemCpu->iEffSeg);11604 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op32_addr16, pVCpu->iem.s.iEffSeg); 11605 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op32_addr32, pVCpu->iem.s.iEffSeg); 11606 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op32_addr64, pVCpu->iem.s.iEffSeg); 11607 11607 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 11608 11608 } 11609 11609 case IEMMODE_64BIT: 11610 switch (p IemCpu->enmEffAddrMode)11610 switch (pVCpu->iem.s.enmEffAddrMode) 11611 11611 { 11612 11612 case IEMMODE_16BIT: AssertFailedReturn(VERR_IEM_IPE_2); 11613 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op64_addr32, p IemCpu->iEffSeg);11614 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op64_addr64, p IemCpu->iEffSeg);11613 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op64_addr32, pVCpu->iem.s.iEffSeg); 11614 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_repne_cmps_op64_addr64, pVCpu->iem.s.iEffSeg); 11615 11615 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 11616 11616 } … … 11625 11625 * Using ugly macro for implementing the cases, sharing it with cmpsb. 11626 11626 */ 11627 switch (p IemCpu->enmEffOpSize)11627 switch (pVCpu->iem.s.enmEffOpSize) 11628 11628 { 11629 11629 case IEMMODE_16BIT: 11630 switch (p IemCpu->enmEffAddrMode)11630 switch (pVCpu->iem.s.enmEffAddrMode) 11631 11631 { 11632 11632 case IEMMODE_16BIT: IEM_CMPS_CASE(16, 16); break; … … 11638 11638 11639 11639 case IEMMODE_32BIT: 11640 switch (p IemCpu->enmEffAddrMode)11640 switch (pVCpu->iem.s.enmEffAddrMode) 11641 11641 { 11642 11642 case IEMMODE_16BIT: IEM_CMPS_CASE(32, 16); break; … … 11648 11648 11649 11649 case IEMMODE_64BIT: 11650 switch (p IemCpu->enmEffAddrMode)11650 switch (pVCpu->iem.s.enmEffAddrMode) 11651 11651 { 11652 11652 case IEMMODE_16BIT: AssertFailedReturn(VERR_IEM_IPE_1); /* cannot be encoded */ break; … … 11706 11706 * Use the C implementation if a repeat prefix is encountered. 11707 11707 */ 11708 if (p IemCpu->fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))11708 if (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 11709 11709 { 11710 11710 IEMOP_MNEMONIC("rep stos Yb,al"); 11711 switch (p IemCpu->enmEffAddrMode)11711 switch (pVCpu->iem.s.enmEffAddrMode) 11712 11712 { 11713 11713 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_stos_al_m16); … … 11722 11722 * Sharing case implementation with stos[wdq] below. 11723 11723 */ 11724 switch (p IemCpu->enmEffAddrMode)11724 switch (pVCpu->iem.s.enmEffAddrMode) 11725 11725 { 11726 11726 case IEMMODE_16BIT: IEM_STOS_CASE(8, 16); break; … … 11741 11741 * Use the C implementation if a repeat prefix is encountered. 11742 11742 */ 11743 if (p IemCpu->fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))11743 if (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 11744 11744 { 11745 11745 IEMOP_MNEMONIC("rep stos Yv,rAX"); 11746 switch (p IemCpu->enmEffOpSize)11746 switch (pVCpu->iem.s.enmEffOpSize) 11747 11747 { 11748 11748 case IEMMODE_16BIT: 11749 switch (p IemCpu->enmEffAddrMode)11749 switch (pVCpu->iem.s.enmEffAddrMode) 11750 11750 { 11751 11751 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_stos_ax_m16); … … 11756 11756 break; 11757 11757 case IEMMODE_32BIT: 11758 switch (p IemCpu->enmEffAddrMode)11758 switch (pVCpu->iem.s.enmEffAddrMode) 11759 11759 { 11760 11760 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_stos_eax_m16); … … 11764 11764 } 11765 11765 case IEMMODE_64BIT: 11766 switch (p IemCpu->enmEffAddrMode)11766 switch (pVCpu->iem.s.enmEffAddrMode) 11767 11767 { 11768 11768 case IEMMODE_16BIT: AssertFailedReturn(VERR_IEM_IPE_9); … … 11780 11780 * Using ugly macro for implementing the cases, sharing it with stosb. 11781 11781 */ 11782 switch (p IemCpu->enmEffOpSize)11782 switch (pVCpu->iem.s.enmEffOpSize) 11783 11783 { 11784 11784 case IEMMODE_16BIT: 11785 switch (p IemCpu->enmEffAddrMode)11785 switch (pVCpu->iem.s.enmEffAddrMode) 11786 11786 { 11787 11787 case IEMMODE_16BIT: IEM_STOS_CASE(16, 16); break; … … 11793 11793 11794 11794 case IEMMODE_32BIT: 11795 switch (p IemCpu->enmEffAddrMode)11795 switch (pVCpu->iem.s.enmEffAddrMode) 11796 11796 { 11797 11797 case IEMMODE_16BIT: IEM_STOS_CASE(32, 16); break; … … 11803 11803 11804 11804 case IEMMODE_64BIT: 11805 switch (p IemCpu->enmEffAddrMode)11805 switch (pVCpu->iem.s.enmEffAddrMode) 11806 11806 { 11807 11807 case IEMMODE_16BIT: AssertFailedReturn(VERR_IEM_IPE_1); /* cannot be encoded */ break; … … 11824 11824 IEM_MC_LOCAL(RTGCPTR, uAddr); \ 11825 11825 IEM_MC_FETCH_GREG_U##AddrBits##_ZX_U64(uAddr, X86_GREG_xSI); \ 11826 IEM_MC_FETCH_MEM_U##ValBits(uValue, p IemCpu->iEffSeg, uAddr); \11826 IEM_MC_FETCH_MEM_U##ValBits(uValue, pVCpu->iem.s.iEffSeg, uAddr); \ 11827 11827 IEM_MC_STORE_GREG_U##ValBits(X86_GREG_xAX, uValue); \ 11828 11828 IEM_MC_IF_EFL_BIT_SET(X86_EFL_DF) { \ … … 11842 11842 * Use the C implementation if a repeat prefix is encountered. 11843 11843 */ 11844 if (p IemCpu->fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))11844 if (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 11845 11845 { 11846 11846 IEMOP_MNEMONIC("rep lodsb al,Xb"); 11847 switch (p IemCpu->enmEffAddrMode)11847 switch (pVCpu->iem.s.enmEffAddrMode) 11848 11848 { 11849 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_al_m16, p IemCpu->iEffSeg);11850 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_al_m32, p IemCpu->iEffSeg);11851 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_al_m64, p IemCpu->iEffSeg);11849 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_al_m16, pVCpu->iem.s.iEffSeg); 11850 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_al_m32, pVCpu->iem.s.iEffSeg); 11851 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_al_m64, pVCpu->iem.s.iEffSeg); 11852 11852 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 11853 11853 } … … 11858 11858 * Sharing case implementation with stos[wdq] below. 11859 11859 */ 11860 switch (p IemCpu->enmEffAddrMode)11860 switch (pVCpu->iem.s.enmEffAddrMode) 11861 11861 { 11862 11862 case IEMMODE_16BIT: IEM_LODS_CASE(8, 16); break; … … 11877 11877 * Use the C implementation if a repeat prefix is encountered. 11878 11878 */ 11879 if (p IemCpu->fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ))11879 if (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ)) 11880 11880 { 11881 11881 IEMOP_MNEMONIC("rep lods rAX,Xv"); 11882 switch (p IemCpu->enmEffOpSize)11882 switch (pVCpu->iem.s.enmEffOpSize) 11883 11883 { 11884 11884 case IEMMODE_16BIT: 11885 switch (p IemCpu->enmEffAddrMode)11885 switch (pVCpu->iem.s.enmEffAddrMode) 11886 11886 { 11887 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_ax_m16, p IemCpu->iEffSeg);11888 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_ax_m32, p IemCpu->iEffSeg);11889 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_ax_m64, p IemCpu->iEffSeg);11887 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_ax_m16, pVCpu->iem.s.iEffSeg); 11888 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_ax_m32, pVCpu->iem.s.iEffSeg); 11889 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_ax_m64, pVCpu->iem.s.iEffSeg); 11890 11890 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 11891 11891 } 11892 11892 break; 11893 11893 case IEMMODE_32BIT: 11894 switch (p IemCpu->enmEffAddrMode)11894 switch (pVCpu->iem.s.enmEffAddrMode) 11895 11895 { 11896 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_eax_m16, p IemCpu->iEffSeg);11897 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_eax_m32, p IemCpu->iEffSeg);11898 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_eax_m64, p IemCpu->iEffSeg);11896 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_eax_m16, pVCpu->iem.s.iEffSeg); 11897 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_eax_m32, pVCpu->iem.s.iEffSeg); 11898 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_eax_m64, pVCpu->iem.s.iEffSeg); 11899 11899 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 11900 11900 } 11901 11901 case IEMMODE_64BIT: 11902 switch (p IemCpu->enmEffAddrMode)11902 switch (pVCpu->iem.s.enmEffAddrMode) 11903 11903 { 11904 11904 case IEMMODE_16BIT: AssertFailedReturn(VERR_IEM_IPE_7); 11905 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_rax_m32, p IemCpu->iEffSeg);11906 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_rax_m64, p IemCpu->iEffSeg);11905 case IEMMODE_32BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_rax_m32, pVCpu->iem.s.iEffSeg); 11906 case IEMMODE_64BIT: return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_lods_rax_m64, pVCpu->iem.s.iEffSeg); 11907 11907 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 11908 11908 } … … 11916 11916 * Using ugly macro for implementing the cases, sharing it with lodsb. 11917 11917 */ 11918 switch (p IemCpu->enmEffOpSize)11918 switch (pVCpu->iem.s.enmEffOpSize) 11919 11919 { 11920 11920 case IEMMODE_16BIT: 11921 switch (p IemCpu->enmEffAddrMode)11921 switch (pVCpu->iem.s.enmEffAddrMode) 11922 11922 { 11923 11923 case IEMMODE_16BIT: IEM_LODS_CASE(16, 16); break; … … 11929 11929 11930 11930 case IEMMODE_32BIT: 11931 switch (p IemCpu->enmEffAddrMode)11931 switch (pVCpu->iem.s.enmEffAddrMode) 11932 11932 { 11933 11933 case IEMMODE_16BIT: IEM_LODS_CASE(32, 16); break; … … 11939 11939 11940 11940 case IEMMODE_64BIT: 11941 switch (p IemCpu->enmEffAddrMode)11941 switch (pVCpu->iem.s.enmEffAddrMode) 11942 11942 { 11943 11943 case IEMMODE_16BIT: AssertFailedReturn(VERR_IEM_IPE_1); /* cannot be encoded */ break; … … 11984 11984 * Use the C implementation if a repeat prefix is encountered. 11985 11985 */ 11986 if (p IemCpu->fPrefixes & IEM_OP_PRF_REPZ)11986 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_REPZ) 11987 11987 { 11988 11988 IEMOP_MNEMONIC("repe scasb al,Xb"); 11989 switch (p IemCpu->enmEffAddrMode)11989 switch (pVCpu->iem.s.enmEffAddrMode) 11990 11990 { 11991 11991 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_repe_scas_al_m16); … … 11995 11995 } 11996 11996 } 11997 if (p IemCpu->fPrefixes & IEM_OP_PRF_REPNZ)11997 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_REPNZ) 11998 11998 { 11999 11999 IEMOP_MNEMONIC("repne scasb al,Xb"); 12000 switch (p IemCpu->enmEffAddrMode)12000 switch (pVCpu->iem.s.enmEffAddrMode) 12001 12001 { 12002 12002 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_repne_scas_al_m16); … … 12011 12011 * Sharing case implementation with stos[wdq] below. 12012 12012 */ 12013 switch (p IemCpu->enmEffAddrMode)12013 switch (pVCpu->iem.s.enmEffAddrMode) 12014 12014 { 12015 12015 case IEMMODE_16BIT: IEM_SCAS_CASE(8, 16); break; … … 12030 12030 * Use the C implementation if a repeat prefix is encountered. 12031 12031 */ 12032 if (p IemCpu->fPrefixes & IEM_OP_PRF_REPZ)12032 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_REPZ) 12033 12033 { 12034 12034 IEMOP_MNEMONIC("repe scas rAX,Xv"); 12035 switch (p IemCpu->enmEffOpSize)12035 switch (pVCpu->iem.s.enmEffOpSize) 12036 12036 { 12037 12037 case IEMMODE_16BIT: 12038 switch (p IemCpu->enmEffAddrMode)12038 switch (pVCpu->iem.s.enmEffAddrMode) 12039 12039 { 12040 12040 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_repe_scas_ax_m16); … … 12045 12045 break; 12046 12046 case IEMMODE_32BIT: 12047 switch (p IemCpu->enmEffAddrMode)12047 switch (pVCpu->iem.s.enmEffAddrMode) 12048 12048 { 12049 12049 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_repe_scas_eax_m16); … … 12053 12053 } 12054 12054 case IEMMODE_64BIT: 12055 switch (p IemCpu->enmEffAddrMode)12055 switch (pVCpu->iem.s.enmEffAddrMode) 12056 12056 { 12057 12057 case IEMMODE_16BIT: AssertFailedReturn(VERR_IEM_IPE_6); /** @todo It's this wrong, we can do 16-bit addressing in 64-bit mode, but not 32-bit. right? */ … … 12063 12063 } 12064 12064 } 12065 if (p IemCpu->fPrefixes & IEM_OP_PRF_REPNZ)12065 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_REPNZ) 12066 12066 { 12067 12067 IEMOP_MNEMONIC("repne scas rAX,Xv"); 12068 switch (p IemCpu->enmEffOpSize)12068 switch (pVCpu->iem.s.enmEffOpSize) 12069 12069 { 12070 12070 case IEMMODE_16BIT: 12071 switch (p IemCpu->enmEffAddrMode)12071 switch (pVCpu->iem.s.enmEffAddrMode) 12072 12072 { 12073 12073 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_repne_scas_ax_m16); … … 12078 12078 break; 12079 12079 case IEMMODE_32BIT: 12080 switch (p IemCpu->enmEffAddrMode)12080 switch (pVCpu->iem.s.enmEffAddrMode) 12081 12081 { 12082 12082 case IEMMODE_16BIT: return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_repne_scas_eax_m16); … … 12086 12086 } 12087 12087 case IEMMODE_64BIT: 12088 switch (p IemCpu->enmEffAddrMode)12088 switch (pVCpu->iem.s.enmEffAddrMode) 12089 12089 { 12090 12090 case IEMMODE_16BIT: AssertFailedReturn(VERR_IEM_IPE_5); … … 12102 12102 * Using ugly macro for implementing the cases, sharing it with scasb. 12103 12103 */ 12104 switch (p IemCpu->enmEffOpSize)12104 switch (pVCpu->iem.s.enmEffOpSize) 12105 12105 { 12106 12106 case IEMMODE_16BIT: 12107 switch (p IemCpu->enmEffAddrMode)12107 switch (pVCpu->iem.s.enmEffAddrMode) 12108 12108 { 12109 12109 case IEMMODE_16BIT: IEM_SCAS_CASE(16, 16); break; … … 12115 12115 12116 12116 case IEMMODE_32BIT: 12117 switch (p IemCpu->enmEffAddrMode)12117 switch (pVCpu->iem.s.enmEffAddrMode) 12118 12118 { 12119 12119 case IEMMODE_16BIT: IEM_SCAS_CASE(32, 16); break; … … 12125 12125 12126 12126 case IEMMODE_64BIT: 12127 switch (p IemCpu->enmEffAddrMode)12127 switch (pVCpu->iem.s.enmEffAddrMode) 12128 12128 { 12129 12129 case IEMMODE_16BIT: AssertFailedReturn(VERR_IEM_IPE_1); /* cannot be encoded */ break; … … 12162 12162 { 12163 12163 IEMOP_MNEMONIC("mov AL,Ib"); 12164 return FNIEMOP_CALL_1(iemOpCommonMov_r8_Ib, X86_GREG_xAX | p IemCpu->uRexB);12164 return FNIEMOP_CALL_1(iemOpCommonMov_r8_Ib, X86_GREG_xAX | pVCpu->iem.s.uRexB); 12165 12165 } 12166 12166 … … 12170 12170 { 12171 12171 IEMOP_MNEMONIC("mov CL,Ib"); 12172 return FNIEMOP_CALL_1(iemOpCommonMov_r8_Ib, X86_GREG_xCX | p IemCpu->uRexB);12172 return FNIEMOP_CALL_1(iemOpCommonMov_r8_Ib, X86_GREG_xCX | pVCpu->iem.s.uRexB); 12173 12173 } 12174 12174 … … 12178 12178 { 12179 12179 IEMOP_MNEMONIC("mov DL,Ib"); 12180 return FNIEMOP_CALL_1(iemOpCommonMov_r8_Ib, X86_GREG_xDX | p IemCpu->uRexB);12180 return FNIEMOP_CALL_1(iemOpCommonMov_r8_Ib, X86_GREG_xDX | pVCpu->iem.s.uRexB); 12181 12181 } 12182 12182 … … 12186 12186 { 12187 12187 IEMOP_MNEMONIC("mov BL,Ib"); 12188 return FNIEMOP_CALL_1(iemOpCommonMov_r8_Ib, X86_GREG_xBX | p IemCpu->uRexB);12188 return FNIEMOP_CALL_1(iemOpCommonMov_r8_Ib, X86_GREG_xBX | pVCpu->iem.s.uRexB); 12189 12189 } 12190 12190 … … 12194 12194 { 12195 12195 IEMOP_MNEMONIC("mov AH,Ib"); 12196 return FNIEMOP_CALL_1(iemOpCommonMov_r8_Ib, X86_GREG_xSP | p IemCpu->uRexB);12196 return FNIEMOP_CALL_1(iemOpCommonMov_r8_Ib, X86_GREG_xSP | pVCpu->iem.s.uRexB); 12197 12197 } 12198 12198 … … 12202 12202 { 12203 12203 IEMOP_MNEMONIC("mov CH,Ib"); 12204 return FNIEMOP_CALL_1(iemOpCommonMov_r8_Ib, X86_GREG_xBP | p IemCpu->uRexB);12204 return FNIEMOP_CALL_1(iemOpCommonMov_r8_Ib, X86_GREG_xBP | pVCpu->iem.s.uRexB); 12205 12205 } 12206 12206 … … 12210 12210 { 12211 12211 IEMOP_MNEMONIC("mov DH,Ib"); 12212 return FNIEMOP_CALL_1(iemOpCommonMov_r8_Ib, X86_GREG_xSI | p IemCpu->uRexB);12212 return FNIEMOP_CALL_1(iemOpCommonMov_r8_Ib, X86_GREG_xSI | pVCpu->iem.s.uRexB); 12213 12213 } 12214 12214 … … 12218 12218 { 12219 12219 IEMOP_MNEMONIC("mov BH,Ib"); 12220 return FNIEMOP_CALL_1(iemOpCommonMov_r8_Ib, X86_GREG_xDI | p IemCpu->uRexB);12220 return FNIEMOP_CALL_1(iemOpCommonMov_r8_Ib, X86_GREG_xDI | pVCpu->iem.s.uRexB); 12221 12221 } 12222 12222 … … 12227 12227 FNIEMOP_DEF_1(iemOpCommonMov_Rv_Iv, uint8_t, iReg) 12228 12228 { 12229 switch (p IemCpu->enmEffOpSize)12229 switch (pVCpu->iem.s.enmEffOpSize) 12230 12230 { 12231 12231 case IEMMODE_16BIT: … … 12276 12276 { 12277 12277 IEMOP_MNEMONIC("mov rAX,IV"); 12278 return FNIEMOP_CALL_1(iemOpCommonMov_Rv_Iv, X86_GREG_xAX | p IemCpu->uRexB);12278 return FNIEMOP_CALL_1(iemOpCommonMov_Rv_Iv, X86_GREG_xAX | pVCpu->iem.s.uRexB); 12279 12279 } 12280 12280 … … 12284 12284 { 12285 12285 IEMOP_MNEMONIC("mov rCX,IV"); 12286 return FNIEMOP_CALL_1(iemOpCommonMov_Rv_Iv, X86_GREG_xCX | p IemCpu->uRexB);12286 return FNIEMOP_CALL_1(iemOpCommonMov_Rv_Iv, X86_GREG_xCX | pVCpu->iem.s.uRexB); 12287 12287 } 12288 12288 … … 12292 12292 { 12293 12293 IEMOP_MNEMONIC("mov rDX,IV"); 12294 return FNIEMOP_CALL_1(iemOpCommonMov_Rv_Iv, X86_GREG_xDX | p IemCpu->uRexB);12294 return FNIEMOP_CALL_1(iemOpCommonMov_Rv_Iv, X86_GREG_xDX | pVCpu->iem.s.uRexB); 12295 12295 } 12296 12296 … … 12300 12300 { 12301 12301 IEMOP_MNEMONIC("mov rBX,IV"); 12302 return FNIEMOP_CALL_1(iemOpCommonMov_Rv_Iv, X86_GREG_xBX | p IemCpu->uRexB);12302 return FNIEMOP_CALL_1(iemOpCommonMov_Rv_Iv, X86_GREG_xBX | pVCpu->iem.s.uRexB); 12303 12303 } 12304 12304 … … 12308 12308 { 12309 12309 IEMOP_MNEMONIC("mov rSP,IV"); 12310 return FNIEMOP_CALL_1(iemOpCommonMov_Rv_Iv, X86_GREG_xSP | p IemCpu->uRexB);12310 return FNIEMOP_CALL_1(iemOpCommonMov_Rv_Iv, X86_GREG_xSP | pVCpu->iem.s.uRexB); 12311 12311 } 12312 12312 … … 12316 12316 { 12317 12317 IEMOP_MNEMONIC("mov rBP,IV"); 12318 return FNIEMOP_CALL_1(iemOpCommonMov_Rv_Iv, X86_GREG_xBP | p IemCpu->uRexB);12318 return FNIEMOP_CALL_1(iemOpCommonMov_Rv_Iv, X86_GREG_xBP | pVCpu->iem.s.uRexB); 12319 12319 } 12320 12320 … … 12324 12324 { 12325 12325 IEMOP_MNEMONIC("mov rSI,IV"); 12326 return FNIEMOP_CALL_1(iemOpCommonMov_Rv_Iv, X86_GREG_xSI | p IemCpu->uRexB);12326 return FNIEMOP_CALL_1(iemOpCommonMov_Rv_Iv, X86_GREG_xSI | pVCpu->iem.s.uRexB); 12327 12327 } 12328 12328 … … 12332 12332 { 12333 12333 IEMOP_MNEMONIC("mov rDI,IV"); 12334 return FNIEMOP_CALL_1(iemOpCommonMov_Rv_Iv, X86_GREG_xDI | p IemCpu->uRexB);12334 return FNIEMOP_CALL_1(iemOpCommonMov_Rv_Iv, X86_GREG_xDI | pVCpu->iem.s.uRexB); 12335 12335 } 12336 12336 … … 12365 12365 IEM_MC_ARG_CONST(uint8_t, cShiftArg, cShift, 1); 12366 12366 IEM_MC_ARG(uint32_t *, pEFlags, 2); 12367 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);12367 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 12368 12368 IEM_MC_REF_EFLAGS(pEFlags); 12369 12369 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU8, pu8Dst, cShiftArg, pEFlags); … … 12384 12384 uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift); 12385 12385 IEM_MC_ASSIGN(cShiftArg, cShift); 12386 IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);12386 IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 12387 12387 IEM_MC_FETCH_EFLAGS(EFlags); 12388 12388 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU8, pu8Dst, cShiftArg, pEFlags); … … 12422 12422 uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift); 12423 12423 IEMOP_HLP_NO_LOCK_PREFIX(); 12424 switch (p IemCpu->enmEffOpSize)12424 switch (pVCpu->iem.s.enmEffOpSize) 12425 12425 { 12426 12426 case IEMMODE_16BIT: … … 12429 12429 IEM_MC_ARG_CONST(uint8_t, cShiftArg, cShift, 1); 12430 12430 IEM_MC_ARG(uint32_t *, pEFlags, 2); 12431 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);12431 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 12432 12432 IEM_MC_REF_EFLAGS(pEFlags); 12433 12433 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, cShiftArg, pEFlags); … … 12441 12441 IEM_MC_ARG_CONST(uint8_t, cShiftArg, cShift, 1); 12442 12442 IEM_MC_ARG(uint32_t *, pEFlags, 2); 12443 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);12443 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 12444 12444 IEM_MC_REF_EFLAGS(pEFlags); 12445 12445 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, cShiftArg, pEFlags); … … 12454 12454 IEM_MC_ARG_CONST(uint8_t, cShiftArg, cShift, 1); 12455 12455 IEM_MC_ARG(uint32_t *, pEFlags, 2); 12456 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);12456 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 12457 12457 IEM_MC_REF_EFLAGS(pEFlags); 12458 12458 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, cShiftArg, pEFlags); … … 12468 12468 /* memory */ 12469 12469 IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */ 12470 switch (p IemCpu->enmEffOpSize)12470 switch (pVCpu->iem.s.enmEffOpSize) 12471 12471 { 12472 12472 case IEMMODE_16BIT: … … 12480 12480 uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift); 12481 12481 IEM_MC_ASSIGN(cShiftArg, cShift); 12482 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);12482 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 12483 12483 IEM_MC_FETCH_EFLAGS(EFlags); 12484 12484 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, cShiftArg, pEFlags); … … 12500 12500 uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift); 12501 12501 IEM_MC_ASSIGN(cShiftArg, cShift); 12502 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);12502 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 12503 12503 IEM_MC_FETCH_EFLAGS(EFlags); 12504 12504 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, cShiftArg, pEFlags); … … 12520 12520 uint8_t cShift; IEM_OPCODE_GET_NEXT_U8(&cShift); 12521 12521 IEM_MC_ASSIGN(cShiftArg, cShift); 12522 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);12522 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 12523 12523 IEM_MC_FETCH_EFLAGS(EFlags); 12524 12524 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, cShiftArg, pEFlags); … … 12543 12543 IEMOP_HLP_NO_LOCK_PREFIX(); 12544 12544 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 12545 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_retn, p IemCpu->enmEffOpSize, u16Imm);12545 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_retn, pVCpu->iem.s.enmEffOpSize, u16Imm); 12546 12546 } 12547 12547 … … 12553 12553 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 12554 12554 IEMOP_HLP_NO_LOCK_PREFIX(); 12555 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_retn, p IemCpu->enmEffOpSize, 0);12555 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_retn, pVCpu->iem.s.enmEffOpSize, 0); 12556 12556 } 12557 12557 … … 12561 12561 { 12562 12562 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 12563 if ( p IemCpu->enmCpuMode == IEMMODE_64BIT12563 if ( pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT 12564 12564 || (bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 12565 12565 { … … 12588 12588 outside of 64-bit mode. VEX is not available in real or v86 mode. */ 12589 12589 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 12590 if (p IemCpu->enmCpuMode != IEMMODE_64BIT)12590 if (pVCpu->iem.s.enmCpuMode != IEMMODE_64BIT) 12591 12591 { 12592 12592 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) … … 12605 12605 uint8_t bOpcode; IEM_OPCODE_GET_NEXT_U8(&bOpcode); 12606 12606 #if 0 /* will make sense of this next week... */ 12607 if ( !(p IemCpu->fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPZ | IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REX))12607 if ( !(pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_REPNZ | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPZ | IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REX)) 12608 12608 && 12609 12609 ) … … 12632 12632 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); 12633 12633 IEM_MC_BEGIN(0, 0); 12634 IEM_MC_STORE_GREG_U8((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u8Imm);12634 IEM_MC_STORE_GREG_U8((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u8Imm); 12635 12635 IEM_MC_ADVANCE_RIP(); 12636 12636 IEM_MC_END(); … … 12643 12643 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); 12644 12644 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); 12645 IEM_MC_STORE_MEM_U8(p IemCpu->iEffSeg, GCPtrEffDst, u8Imm);12645 IEM_MC_STORE_MEM_U8(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u8Imm); 12646 12646 IEM_MC_ADVANCE_RIP(); 12647 12647 IEM_MC_END(); … … 12663 12663 { 12664 12664 /* register access */ 12665 switch (p IemCpu->enmEffOpSize)12665 switch (pVCpu->iem.s.enmEffOpSize) 12666 12666 { 12667 12667 case IEMMODE_16BIT: 12668 12668 IEM_MC_BEGIN(0, 0); 12669 12669 uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); 12670 IEM_MC_STORE_GREG_U16((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u16Imm);12670 IEM_MC_STORE_GREG_U16((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u16Imm); 12671 12671 IEM_MC_ADVANCE_RIP(); 12672 12672 IEM_MC_END(); … … 12676 12676 IEM_MC_BEGIN(0, 0); 12677 12677 uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); 12678 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u32Imm);12678 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u32Imm); 12679 12679 IEM_MC_ADVANCE_RIP(); 12680 12680 IEM_MC_END(); … … 12684 12684 IEM_MC_BEGIN(0, 0); 12685 12685 uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm); 12686 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB, u64Imm);12686 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u64Imm); 12687 12687 IEM_MC_ADVANCE_RIP(); 12688 12688 IEM_MC_END(); … … 12695 12695 { 12696 12696 /* memory access. */ 12697 switch (p IemCpu->enmEffOpSize)12697 switch (pVCpu->iem.s.enmEffOpSize) 12698 12698 { 12699 12699 case IEMMODE_16BIT: … … 12702 12702 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 2); 12703 12703 uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); 12704 IEM_MC_STORE_MEM_U16(p IemCpu->iEffSeg, GCPtrEffDst, u16Imm);12704 IEM_MC_STORE_MEM_U16(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u16Imm); 12705 12705 IEM_MC_ADVANCE_RIP(); 12706 12706 IEM_MC_END(); … … 12712 12712 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4); 12713 12713 uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); 12714 IEM_MC_STORE_MEM_U32(p IemCpu->iEffSeg, GCPtrEffDst, u32Imm);12714 IEM_MC_STORE_MEM_U32(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u32Imm); 12715 12715 IEM_MC_ADVANCE_RIP(); 12716 12716 IEM_MC_END(); … … 12722 12722 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 4); 12723 12723 uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm); 12724 IEM_MC_STORE_MEM_U64(p IemCpu->iEffSeg, GCPtrEffDst, u64Imm);12724 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u64Imm); 12725 12725 IEM_MC_ADVANCE_RIP(); 12726 12726 IEM_MC_END(); … … 12744 12744 uint16_t cbFrame; IEM_OPCODE_GET_NEXT_U16(&cbFrame); 12745 12745 uint8_t u8NestingLevel; IEM_OPCODE_GET_NEXT_U8(&u8NestingLevel); 12746 return IEM_MC_DEFER_TO_CIMPL_3(iemCImpl_enter, p IemCpu->enmEffOpSize, cbFrame, u8NestingLevel);12746 return IEM_MC_DEFER_TO_CIMPL_3(iemCImpl_enter, pVCpu->iem.s.enmEffOpSize, cbFrame, u8NestingLevel); 12747 12747 } 12748 12748 … … 12755 12755 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 12756 12756 IEMOP_HLP_NO_LOCK_PREFIX(); 12757 return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_leave, p IemCpu->enmEffOpSize);12757 return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_leave, pVCpu->iem.s.enmEffOpSize); 12758 12758 } 12759 12759 … … 12766 12766 IEMOP_HLP_NO_LOCK_PREFIX(); 12767 12767 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 12768 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_retf, p IemCpu->enmEffOpSize, u16Imm);12768 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_retf, pVCpu->iem.s.enmEffOpSize, u16Imm); 12769 12769 } 12770 12770 … … 12776 12776 IEMOP_HLP_NO_LOCK_PREFIX(); 12777 12777 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 12778 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_retf, p IemCpu->enmEffOpSize, 0);12778 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_retf, pVCpu->iem.s.enmEffOpSize, 0); 12779 12779 } 12780 12780 … … 12817 12817 IEMOP_MNEMONIC("iret"); 12818 12818 IEMOP_HLP_NO_LOCK_PREFIX(); 12819 return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_iret, p IemCpu->enmEffOpSize);12819 return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_iret, pVCpu->iem.s.enmEffOpSize); 12820 12820 } 12821 12821 … … 12848 12848 IEM_MC_ARG_CONST(uint8_t, cShiftArg,/*=*/1, 1); 12849 12849 IEM_MC_ARG(uint32_t *, pEFlags, 2); 12850 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);12850 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 12851 12851 IEM_MC_REF_EFLAGS(pEFlags); 12852 12852 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU8, pu8Dst, cShiftArg, pEFlags); … … 12865 12865 12866 12866 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 12867 IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);12867 IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 12868 12868 IEM_MC_FETCH_EFLAGS(EFlags); 12869 12869 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU8, pu8Dst, cShiftArg, pEFlags); … … 12902 12902 /* register */ 12903 12903 IEMOP_HLP_NO_LOCK_PREFIX(); 12904 switch (p IemCpu->enmEffOpSize)12904 switch (pVCpu->iem.s.enmEffOpSize) 12905 12905 { 12906 12906 case IEMMODE_16BIT: … … 12909 12909 IEM_MC_ARG_CONST(uint8_t, cShiftArg,/*=1*/1, 1); 12910 12910 IEM_MC_ARG(uint32_t *, pEFlags, 2); 12911 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);12911 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 12912 12912 IEM_MC_REF_EFLAGS(pEFlags); 12913 12913 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, cShiftArg, pEFlags); … … 12921 12921 IEM_MC_ARG_CONST(uint8_t, cShiftArg,/*=1*/1, 1); 12922 12922 IEM_MC_ARG(uint32_t *, pEFlags, 2); 12923 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);12923 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 12924 12924 IEM_MC_REF_EFLAGS(pEFlags); 12925 12925 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, cShiftArg, pEFlags); … … 12934 12934 IEM_MC_ARG_CONST(uint8_t, cShiftArg,/*=1*/1, 1); 12935 12935 IEM_MC_ARG(uint32_t *, pEFlags, 2); 12936 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);12936 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 12937 12937 IEM_MC_REF_EFLAGS(pEFlags); 12938 12938 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, cShiftArg, pEFlags); … … 12948 12948 /* memory */ 12949 12949 IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */ 12950 switch (p IemCpu->enmEffOpSize)12950 switch (pVCpu->iem.s.enmEffOpSize) 12951 12951 { 12952 12952 case IEMMODE_16BIT: … … 12958 12958 12959 12959 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 12960 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);12960 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 12961 12961 IEM_MC_FETCH_EFLAGS(EFlags); 12962 12962 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, cShiftArg, pEFlags); … … 12976 12976 12977 12977 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 12978 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);12978 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 12979 12979 IEM_MC_FETCH_EFLAGS(EFlags); 12980 12980 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, cShiftArg, pEFlags); … … 12994 12994 12995 12995 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 12996 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);12996 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 12997 12997 IEM_MC_FETCH_EFLAGS(EFlags); 12998 12998 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, cShiftArg, pEFlags); … … 13037 13037 IEM_MC_ARG(uint8_t, cShiftArg, 1); 13038 13038 IEM_MC_ARG(uint32_t *, pEFlags, 2); 13039 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);13039 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 13040 13040 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 13041 13041 IEM_MC_REF_EFLAGS(pEFlags); … … 13056 13056 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 13057 13057 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 13058 IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);13058 IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 13059 13059 IEM_MC_FETCH_EFLAGS(EFlags); 13060 13060 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU8, pu8Dst, cShiftArg, pEFlags); … … 13092 13092 /* register */ 13093 13093 IEMOP_HLP_NO_LOCK_PREFIX(); 13094 switch (p IemCpu->enmEffOpSize)13094 switch (pVCpu->iem.s.enmEffOpSize) 13095 13095 { 13096 13096 case IEMMODE_16BIT: … … 13099 13099 IEM_MC_ARG(uint8_t, cShiftArg, 1); 13100 13100 IEM_MC_ARG(uint32_t *, pEFlags, 2); 13101 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);13101 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 13102 13102 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 13103 13103 IEM_MC_REF_EFLAGS(pEFlags); … … 13112 13112 IEM_MC_ARG(uint8_t, cShiftArg, 1); 13113 13113 IEM_MC_ARG(uint32_t *, pEFlags, 2); 13114 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);13114 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 13115 13115 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 13116 13116 IEM_MC_REF_EFLAGS(pEFlags); … … 13126 13126 IEM_MC_ARG(uint8_t, cShiftArg, 1); 13127 13127 IEM_MC_ARG(uint32_t *, pEFlags, 2); 13128 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);13128 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 13129 13129 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 13130 13130 IEM_MC_REF_EFLAGS(pEFlags); … … 13141 13141 /* memory */ 13142 13142 IEMOP_HLP_NO_LOCK_PREFIX(); /** @todo should probably not be raised until we've fetched all the opcode bytes? */ 13143 switch (p IemCpu->enmEffOpSize)13143 switch (pVCpu->iem.s.enmEffOpSize) 13144 13144 { 13145 13145 case IEMMODE_16BIT: … … 13152 13152 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 13153 13153 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 13154 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);13154 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 13155 13155 IEM_MC_FETCH_EFLAGS(EFlags); 13156 13156 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, cShiftArg, pEFlags); … … 13171 13171 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 13172 13172 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 13173 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);13173 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 13174 13174 IEM_MC_FETCH_EFLAGS(EFlags); 13175 13175 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, cShiftArg, pEFlags); … … 13190 13190 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 13191 13191 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 13192 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);13192 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 13193 13193 IEM_MC_FETCH_EFLAGS(EFlags); 13194 13194 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, cShiftArg, pEFlags); … … 13255 13255 IEMOP_MNEMONIC("xlat"); 13256 13256 IEMOP_HLP_NO_LOCK_PREFIX(); 13257 switch (p IemCpu->enmEffAddrMode)13257 switch (pVCpu->iem.s.enmEffAddrMode) 13258 13258 { 13259 13259 case IEMMODE_16BIT: … … 13263 13263 IEM_MC_FETCH_GREG_U8_ZX_U16(u16Addr, X86_GREG_xAX); 13264 13264 IEM_MC_ADD_GREG_U16_TO_LOCAL(u16Addr, X86_GREG_xBX); 13265 IEM_MC_FETCH_MEM16_U8(u8Tmp, p IemCpu->iEffSeg, u16Addr);13265 IEM_MC_FETCH_MEM16_U8(u8Tmp, pVCpu->iem.s.iEffSeg, u16Addr); 13266 13266 IEM_MC_STORE_GREG_U8(X86_GREG_xAX, u8Tmp); 13267 13267 IEM_MC_ADVANCE_RIP(); … … 13275 13275 IEM_MC_FETCH_GREG_U8_ZX_U32(u32Addr, X86_GREG_xAX); 13276 13276 IEM_MC_ADD_GREG_U32_TO_LOCAL(u32Addr, X86_GREG_xBX); 13277 IEM_MC_FETCH_MEM32_U8(u8Tmp, p IemCpu->iEffSeg, u32Addr);13277 IEM_MC_FETCH_MEM32_U8(u8Tmp, pVCpu->iem.s.iEffSeg, u32Addr); 13278 13278 IEM_MC_STORE_GREG_U8(X86_GREG_xAX, u8Tmp); 13279 13279 IEM_MC_ADVANCE_RIP(); … … 13287 13287 IEM_MC_FETCH_GREG_U8_ZX_U64(u64Addr, X86_GREG_xAX); 13288 13288 IEM_MC_ADD_GREG_U64_TO_LOCAL(u64Addr, X86_GREG_xBX); 13289 IEM_MC_FETCH_MEM_U8(u8Tmp, p IemCpu->iEffSeg, u64Addr);13289 IEM_MC_FETCH_MEM_U8(u8Tmp, pVCpu->iem.s.iEffSeg, u64Addr); 13290 13290 IEM_MC_STORE_GREG_U8(X86_GREG_xAX, u8Tmp); 13291 13291 IEM_MC_ADVANCE_RIP(); … … 13479 13479 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 13480 13480 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 13481 IEM_MC_FETCH_MEM_R32(r32Val2, p IemCpu->iEffSeg, GCPtrEffSrc);13481 IEM_MC_FETCH_MEM_R32(r32Val2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 13482 13482 13483 13483 IEM_MC_PREPARE_FPU_USAGE(); … … 13529 13529 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 13530 13530 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 13531 IEM_MC_FETCH_MEM_R32(r32Val2, p IemCpu->iEffSeg, GCPtrEffSrc);13531 IEM_MC_FETCH_MEM_R32(r32Val2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 13532 13532 13533 13533 IEM_MC_PREPARE_FPU_USAGE(); 13534 13534 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 13535 13535 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fcom_r80_by_r32, pu16Fsw, pr80Value1, pr32Val2); 13536 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffSrc);13536 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 13537 13537 IEM_MC_ELSE() 13538 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffSrc);13538 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 13539 13539 IEM_MC_ENDIF(); 13540 13540 IEM_MC_ADVANCE_RIP(); … … 13563 13563 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 13564 13564 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 13565 IEM_MC_FETCH_MEM_R32(r32Val2, p IemCpu->iEffSeg, GCPtrEffSrc);13565 IEM_MC_FETCH_MEM_R32(r32Val2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 13566 13566 13567 13567 IEM_MC_PREPARE_FPU_USAGE(); 13568 13568 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 13569 13569 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fcom_r80_by_r32, pu16Fsw, pr80Value1, pr32Val2); 13570 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffSrc);13570 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 13571 13571 IEM_MC_ELSE() 13572 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffSrc);13572 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 13573 13573 IEM_MC_ENDIF(); 13574 13574 IEM_MC_ADVANCE_RIP(); … … 13614 13614 FNIEMOP_DEF(iemOp_EscF0) 13615 13615 { 13616 p IemCpu->offFpuOpcode = pIemCpu->offOpcode - 1;13616 pVCpu->iem.s.offFpuOpcode = pVCpu->iem.s.offOpcode - 1; 13617 13617 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 13618 13618 … … 13668 13668 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 13669 13669 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 13670 IEM_MC_FETCH_MEM_R32(r32Val, p IemCpu->iEffSeg, GCPtrEffSrc);13670 IEM_MC_FETCH_MEM_R32(r32Val, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 13671 13671 13672 13672 IEM_MC_PREPARE_FPU_USAGE(); 13673 13673 IEM_MC_IF_FPUREG_IS_EMPTY(7) 13674 13674 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fld_r32_to_r80, pFpuRes, pr32Val); 13675 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, p IemCpu->iEffSeg, GCPtrEffSrc);13675 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 13676 13676 IEM_MC_ELSE() 13677 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(p IemCpu->iEffSeg, GCPtrEffSrc);13677 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 13678 13678 IEM_MC_ENDIF(); 13679 13679 IEM_MC_ADVANCE_RIP(); … … 13700 13700 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 13701 13701 13702 IEM_MC_MEM_MAP(pr32Dst, IEM_ACCESS_DATA_W, p IemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);13702 IEM_MC_MEM_MAP(pr32Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 13703 13703 IEM_MC_PREPARE_FPU_USAGE(); 13704 13704 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 13705 13705 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r32, pu16Fsw, pr32Dst, pr80Value); 13706 13706 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr32Dst, IEM_ACCESS_DATA_W, u16Fsw); 13707 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffDst);13707 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 13708 13708 IEM_MC_ELSE() 13709 13709 IEM_MC_IF_FCW_IM() … … 13711 13711 IEM_MC_MEM_COMMIT_AND_UNMAP(pr32Dst, IEM_ACCESS_DATA_W); 13712 13712 IEM_MC_ENDIF(); 13713 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffDst);13713 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 13714 13714 IEM_MC_ENDIF(); 13715 13715 IEM_MC_ADVANCE_RIP(); … … 13736 13736 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 13737 13737 13738 IEM_MC_MEM_MAP(pr32Dst, IEM_ACCESS_DATA_W, p IemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);13738 IEM_MC_MEM_MAP(pr32Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 13739 13739 IEM_MC_PREPARE_FPU_USAGE(); 13740 13740 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 13741 13741 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r32, pu16Fsw, pr32Dst, pr80Value); 13742 13742 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr32Dst, IEM_ACCESS_DATA_W, u16Fsw); 13743 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffDst);13743 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 13744 13744 IEM_MC_ELSE() 13745 13745 IEM_MC_IF_FCW_IM() … … 13747 13747 IEM_MC_MEM_COMMIT_AND_UNMAP(pr32Dst, IEM_ACCESS_DATA_W); 13748 13748 IEM_MC_ENDIF(); 13749 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffDst);13749 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 13750 13750 IEM_MC_ENDIF(); 13751 13751 IEM_MC_ADVANCE_RIP(); … … 13761 13761 IEMOP_MNEMONIC("fldenv m14/28byte"); 13762 13762 IEM_MC_BEGIN(3, 0); 13763 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize, /*=*/ p IemCpu->enmEffOpSize, 0);13763 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize, /*=*/ pVCpu->iem.s.enmEffOpSize, 0); 13764 13764 IEM_MC_ARG(uint8_t, iEffSeg, 1); 13765 13765 IEM_MC_ARG(RTGCPTR, GCPtrEffSrc, 2); … … 13768 13768 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 13769 13769 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 13770 IEM_MC_ASSIGN(iEffSeg, p IemCpu->iEffSeg);13770 IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg); 13771 13771 IEM_MC_CALL_CIMPL_3(iemCImpl_fldenv, enmEffOpSize, iEffSeg, GCPtrEffSrc); 13772 13772 IEM_MC_END(); … … 13786 13786 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 13787 13787 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 13788 IEM_MC_FETCH_MEM_U16(u16Fsw, p IemCpu->iEffSeg, GCPtrEffSrc);13788 IEM_MC_FETCH_MEM_U16(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 13789 13789 IEM_MC_CALL_CIMPL_1(iemCImpl_fldcw, u16Fsw); 13790 13790 IEM_MC_END(); … … 13798 13798 IEMOP_MNEMONIC("fstenv m14/m28byte"); 13799 13799 IEM_MC_BEGIN(3, 0); 13800 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize, /*=*/ p IemCpu->enmEffOpSize, 0);13800 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize, /*=*/ pVCpu->iem.s.enmEffOpSize, 0); 13801 13801 IEM_MC_ARG(uint8_t, iEffSeg, 1); 13802 13802 IEM_MC_ARG(RTGCPTR, GCPtrEffDst, 2); … … 13805 13805 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 13806 13806 IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ(); 13807 IEM_MC_ASSIGN(iEffSeg, p IemCpu->iEffSeg);13807 IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg); 13808 13808 IEM_MC_CALL_CIMPL_3(iemCImpl_fnstenv, enmEffOpSize, iEffSeg, GCPtrEffDst); 13809 13809 IEM_MC_END(); … … 13824 13824 IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ(); 13825 13825 IEM_MC_FETCH_FCW(u16Fcw); 13826 IEM_MC_STORE_MEM_U16(p IemCpu->iEffSeg, GCPtrEffDst, u16Fcw);13826 IEM_MC_STORE_MEM_U16(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u16Fcw); 13827 13827 IEM_MC_ADVANCE_RIP(); /* C0-C3 are documented as undefined, we leave them unmodified. */ 13828 13828 IEM_MC_END(); … … 14400 14400 FNIEMOP_DEF(iemOp_EscF1) 14401 14401 { 14402 p IemCpu->offFpuOpcode = pIemCpu->offOpcode - 1;14402 pVCpu->iem.s.offFpuOpcode = pVCpu->iem.s.offOpcode - 1; 14403 14403 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 14404 14404 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 14614 14614 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 14615 14615 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 14616 IEM_MC_FETCH_MEM_I32(i32Val2, p IemCpu->iEffSeg, GCPtrEffSrc);14616 IEM_MC_FETCH_MEM_I32(i32Val2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 14617 14617 14618 14618 IEM_MC_PREPARE_FPU_USAGE(); … … 14664 14664 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 14665 14665 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 14666 IEM_MC_FETCH_MEM_I32(i32Val2, p IemCpu->iEffSeg, GCPtrEffSrc);14666 IEM_MC_FETCH_MEM_I32(i32Val2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 14667 14667 14668 14668 IEM_MC_PREPARE_FPU_USAGE(); 14669 14669 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 14670 14670 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_ficom_r80_by_i32, pu16Fsw, pr80Value1, pi32Val2); 14671 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffSrc);14671 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 14672 14672 IEM_MC_ELSE() 14673 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffSrc);14673 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 14674 14674 IEM_MC_ENDIF(); 14675 14675 IEM_MC_ADVANCE_RIP(); … … 14698 14698 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 14699 14699 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 14700 IEM_MC_FETCH_MEM_I32(i32Val2, p IemCpu->iEffSeg, GCPtrEffSrc);14700 IEM_MC_FETCH_MEM_I32(i32Val2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 14701 14701 14702 14702 IEM_MC_PREPARE_FPU_USAGE(); 14703 14703 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 14704 14704 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_ficom_r80_by_i32, pu16Fsw, pr80Value1, pi32Val2); 14705 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffSrc);14705 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 14706 14706 IEM_MC_ELSE() 14707 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffSrc);14707 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 14708 14708 IEM_MC_ENDIF(); 14709 14709 IEM_MC_ADVANCE_RIP(); … … 14749 14749 FNIEMOP_DEF(iemOp_EscF2) 14750 14750 { 14751 p IemCpu->offFpuOpcode = pIemCpu->offOpcode - 1;14751 pVCpu->iem.s.offFpuOpcode = pVCpu->iem.s.offOpcode - 1; 14752 14752 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 14753 14753 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 14804 14804 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 14805 14805 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 14806 IEM_MC_FETCH_MEM_I32(i32Val, p IemCpu->iEffSeg, GCPtrEffSrc);14806 IEM_MC_FETCH_MEM_I32(i32Val, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 14807 14807 14808 14808 IEM_MC_PREPARE_FPU_USAGE(); 14809 14809 IEM_MC_IF_FPUREG_IS_EMPTY(7) 14810 14810 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fild_i32_to_r80, pFpuRes, pi32Val); 14811 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, p IemCpu->iEffSeg, GCPtrEffSrc);14811 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 14812 14812 IEM_MC_ELSE() 14813 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(p IemCpu->iEffSeg, GCPtrEffSrc);14813 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 14814 14814 IEM_MC_ENDIF(); 14815 14815 IEM_MC_ADVANCE_RIP(); … … 14836 14836 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 14837 14837 14838 IEM_MC_MEM_MAP(pi32Dst, IEM_ACCESS_DATA_W, p IemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);14838 IEM_MC_MEM_MAP(pi32Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 14839 14839 IEM_MC_PREPARE_FPU_USAGE(); 14840 14840 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 14841 14841 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fistt_r80_to_i32, pu16Fsw, pi32Dst, pr80Value); 14842 14842 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi32Dst, IEM_ACCESS_DATA_W, u16Fsw); 14843 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffDst);14843 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 14844 14844 IEM_MC_ELSE() 14845 14845 IEM_MC_IF_FCW_IM() … … 14847 14847 IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W); 14848 14848 IEM_MC_ENDIF(); 14849 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffDst);14849 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 14850 14850 IEM_MC_ENDIF(); 14851 14851 IEM_MC_ADVANCE_RIP(); … … 14872 14872 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 14873 14873 14874 IEM_MC_MEM_MAP(pi32Dst, IEM_ACCESS_DATA_W, p IemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);14874 IEM_MC_MEM_MAP(pi32Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 14875 14875 IEM_MC_PREPARE_FPU_USAGE(); 14876 14876 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 14877 14877 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i32, pu16Fsw, pi32Dst, pr80Value); 14878 14878 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi32Dst, IEM_ACCESS_DATA_W, u16Fsw); 14879 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffDst);14879 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 14880 14880 IEM_MC_ELSE() 14881 14881 IEM_MC_IF_FCW_IM() … … 14883 14883 IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W); 14884 14884 IEM_MC_ENDIF(); 14885 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffDst);14885 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 14886 14886 IEM_MC_ENDIF(); 14887 14887 IEM_MC_ADVANCE_RIP(); … … 14908 14908 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 14909 14909 14910 IEM_MC_MEM_MAP(pi32Dst, IEM_ACCESS_DATA_W, p IemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);14910 IEM_MC_MEM_MAP(pi32Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 14911 14911 IEM_MC_PREPARE_FPU_USAGE(); 14912 14912 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 14913 14913 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i32, pu16Fsw, pi32Dst, pr80Value); 14914 14914 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi32Dst, IEM_ACCESS_DATA_W, u16Fsw); 14915 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffDst);14915 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 14916 14916 IEM_MC_ELSE() 14917 14917 IEM_MC_IF_FCW_IM() … … 14919 14919 IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W); 14920 14920 IEM_MC_ENDIF(); 14921 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffDst);14921 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 14922 14922 IEM_MC_ENDIF(); 14923 14923 IEM_MC_ADVANCE_RIP(); … … 14945 14945 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 14946 14946 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 14947 IEM_MC_FETCH_MEM_R80(r80Val, p IemCpu->iEffSeg, GCPtrEffSrc);14947 IEM_MC_FETCH_MEM_R80(r80Val, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 14948 14948 14949 14949 IEM_MC_PREPARE_FPU_USAGE(); 14950 14950 IEM_MC_IF_FPUREG_IS_EMPTY(7) 14951 14951 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fld_r80_from_r80, pFpuRes, pr80Val); 14952 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, p IemCpu->iEffSeg, GCPtrEffSrc);14952 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 14953 14953 IEM_MC_ELSE() 14954 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(p IemCpu->iEffSeg, GCPtrEffSrc);14954 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 14955 14955 IEM_MC_ENDIF(); 14956 14956 IEM_MC_ADVANCE_RIP(); … … 14977 14977 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 14978 14978 14979 IEM_MC_MEM_MAP(pr80Dst, IEM_ACCESS_DATA_W, p IemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);14979 IEM_MC_MEM_MAP(pr80Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 14980 14980 IEM_MC_PREPARE_FPU_USAGE(); 14981 14981 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 14982 14982 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r80, pu16Fsw, pr80Dst, pr80Value); 14983 14983 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr80Dst, IEM_ACCESS_DATA_W, u16Fsw); 14984 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffDst);14984 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 14985 14985 IEM_MC_ELSE() 14986 14986 IEM_MC_IF_FCW_IM() … … 14988 14988 IEM_MC_MEM_COMMIT_AND_UNMAP(pr80Dst, IEM_ACCESS_DATA_W); 14989 14989 IEM_MC_ENDIF(); 14990 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffDst);14990 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 14991 14991 IEM_MC_ENDIF(); 14992 14992 IEM_MC_ADVANCE_RIP(); … … 15209 15209 FNIEMOP_DEF(iemOp_EscF3) 15210 15210 { 15211 p IemCpu->offFpuOpcode = pIemCpu->offOpcode - 1;15211 pVCpu->iem.s.offFpuOpcode = pVCpu->iem.s.offOpcode - 1; 15212 15212 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 15213 15213 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 15359 15359 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 15360 15360 15361 IEM_MC_FETCH_MEM_R64(r64Factor2, p IemCpu->iEffSeg, GCPtrEffSrc);15361 IEM_MC_FETCH_MEM_R64(r64Factor2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 15362 15362 IEM_MC_PREPARE_FPU_USAGE(); 15363 15363 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Factor1, 0) 15364 15364 IEM_MC_CALL_FPU_AIMPL_3(pfnImpl, pFpuRes, pr80Factor1, pr64Factor2); 15365 IEM_MC_STORE_FPU_RESULT_MEM_OP(FpuRes, 0, p IemCpu->iEffSeg, GCPtrEffSrc);15365 IEM_MC_STORE_FPU_RESULT_MEM_OP(FpuRes, 0, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 15366 15366 IEM_MC_ELSE() 15367 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(0, p IemCpu->iEffSeg, GCPtrEffSrc);15367 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(0, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 15368 15368 IEM_MC_ENDIF(); 15369 15369 IEM_MC_ADVANCE_RIP(); … … 15408 15408 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 15409 15409 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 15410 IEM_MC_FETCH_MEM_R64(r64Val2, p IemCpu->iEffSeg, GCPtrEffSrc);15410 IEM_MC_FETCH_MEM_R64(r64Val2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 15411 15411 15412 15412 IEM_MC_PREPARE_FPU_USAGE(); 15413 15413 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 15414 15414 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fcom_r80_by_r64, pu16Fsw, pr80Value1, pr64Val2); 15415 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffSrc);15415 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 15416 15416 IEM_MC_ELSE() 15417 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffSrc);15417 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 15418 15418 IEM_MC_ENDIF(); 15419 15419 IEM_MC_ADVANCE_RIP(); … … 15442 15442 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 15443 15443 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 15444 IEM_MC_FETCH_MEM_R64(r64Val2, p IemCpu->iEffSeg, GCPtrEffSrc);15444 IEM_MC_FETCH_MEM_R64(r64Val2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 15445 15445 15446 15446 IEM_MC_PREPARE_FPU_USAGE(); 15447 15447 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 15448 15448 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fcom_r80_by_r64, pu16Fsw, pr80Value1, pr64Val2); 15449 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffSrc);15449 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 15450 15450 IEM_MC_ELSE() 15451 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffSrc);15451 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 15452 15452 IEM_MC_ENDIF(); 15453 15453 IEM_MC_ADVANCE_RIP(); … … 15493 15493 FNIEMOP_DEF(iemOp_EscF4) 15494 15494 { 15495 p IemCpu->offFpuOpcode = pIemCpu->offOpcode - 1;15495 pVCpu->iem.s.offFpuOpcode = pVCpu->iem.s.offOpcode - 1; 15496 15496 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 15497 15497 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 15546 15546 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 15547 15547 15548 IEM_MC_FETCH_MEM_R64(r64Val, p IemCpu->iEffSeg, GCPtrEffSrc);15548 IEM_MC_FETCH_MEM_R64(r64Val, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 15549 15549 IEM_MC_PREPARE_FPU_USAGE(); 15550 15550 IEM_MC_IF_FPUREG_IS_EMPTY(7) 15551 15551 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fld_r64_to_r80, pFpuRes, pr64Val); 15552 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, p IemCpu->iEffSeg, GCPtrEffSrc);15552 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 15553 15553 IEM_MC_ELSE() 15554 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(p IemCpu->iEffSeg, GCPtrEffSrc);15554 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 15555 15555 IEM_MC_ENDIF(); 15556 15556 IEM_MC_ADVANCE_RIP(); … … 15577 15577 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 15578 15578 15579 IEM_MC_MEM_MAP(pi64Dst, IEM_ACCESS_DATA_W, p IemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);15579 IEM_MC_MEM_MAP(pi64Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 15580 15580 IEM_MC_PREPARE_FPU_USAGE(); 15581 15581 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 15582 15582 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fistt_r80_to_i64, pu16Fsw, pi64Dst, pr80Value); 15583 15583 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi64Dst, IEM_ACCESS_DATA_W, u16Fsw); 15584 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffDst);15584 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 15585 15585 IEM_MC_ELSE() 15586 15586 IEM_MC_IF_FCW_IM() … … 15588 15588 IEM_MC_MEM_COMMIT_AND_UNMAP(pi64Dst, IEM_ACCESS_DATA_W); 15589 15589 IEM_MC_ENDIF(); 15590 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffDst);15590 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 15591 15591 IEM_MC_ENDIF(); 15592 15592 IEM_MC_ADVANCE_RIP(); … … 15613 15613 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 15614 15614 15615 IEM_MC_MEM_MAP(pr64Dst, IEM_ACCESS_DATA_W, p IemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);15615 IEM_MC_MEM_MAP(pr64Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 15616 15616 IEM_MC_PREPARE_FPU_USAGE(); 15617 15617 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 15618 15618 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r64, pu16Fsw, pr64Dst, pr80Value); 15619 15619 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr64Dst, IEM_ACCESS_DATA_W, u16Fsw); 15620 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffDst);15620 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 15621 15621 IEM_MC_ELSE() 15622 15622 IEM_MC_IF_FCW_IM() … … 15624 15624 IEM_MC_MEM_COMMIT_AND_UNMAP(pr64Dst, IEM_ACCESS_DATA_W); 15625 15625 IEM_MC_ENDIF(); 15626 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffDst);15626 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 15627 15627 IEM_MC_ENDIF(); 15628 15628 IEM_MC_ADVANCE_RIP(); … … 15651 15651 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 15652 15652 15653 IEM_MC_MEM_MAP(pr64Dst, IEM_ACCESS_DATA_W, p IemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);15653 IEM_MC_MEM_MAP(pr64Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 15654 15654 IEM_MC_PREPARE_FPU_USAGE(); 15655 15655 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 15656 15656 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r64, pu16Fsw, pr64Dst, pr80Value); 15657 15657 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr64Dst, IEM_ACCESS_DATA_W, u16Fsw); 15658 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffDst);15658 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 15659 15659 IEM_MC_ELSE() 15660 15660 IEM_MC_IF_FCW_IM() … … 15662 15662 IEM_MC_MEM_COMMIT_AND_UNMAP(pr64Dst, IEM_ACCESS_DATA_W); 15663 15663 IEM_MC_ENDIF(); 15664 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffDst);15664 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 15665 15665 IEM_MC_ENDIF(); 15666 15666 IEM_MC_ADVANCE_RIP(); … … 15676 15676 IEMOP_MNEMONIC("frstor m94/108byte"); 15677 15677 IEM_MC_BEGIN(3, 0); 15678 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize, /*=*/ p IemCpu->enmEffOpSize, 0);15678 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize, /*=*/ pVCpu->iem.s.enmEffOpSize, 0); 15679 15679 IEM_MC_ARG(uint8_t, iEffSeg, 1); 15680 15680 IEM_MC_ARG(RTGCPTR, GCPtrEffSrc, 2); … … 15683 15683 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 15684 15684 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 15685 IEM_MC_ASSIGN(iEffSeg, p IemCpu->iEffSeg);15685 IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg); 15686 15686 IEM_MC_CALL_CIMPL_3(iemCImpl_frstor, enmEffOpSize, iEffSeg, GCPtrEffSrc); 15687 15687 IEM_MC_END(); … … 15695 15695 IEMOP_MNEMONIC("fnsave m94/108byte"); 15696 15696 IEM_MC_BEGIN(3, 0); 15697 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize, /*=*/ p IemCpu->enmEffOpSize, 0);15697 IEM_MC_ARG_CONST(IEMMODE, enmEffOpSize, /*=*/ pVCpu->iem.s.enmEffOpSize, 0); 15698 15698 IEM_MC_ARG(uint8_t, iEffSeg, 1); 15699 15699 IEM_MC_ARG(RTGCPTR, GCPtrEffDst, 2); … … 15702 15702 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 15703 15703 IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ(); 15704 IEM_MC_ASSIGN(iEffSeg, p IemCpu->iEffSeg);15704 IEM_MC_ASSIGN(iEffSeg, pVCpu->iem.s.iEffSeg); 15705 15705 IEM_MC_CALL_CIMPL_3(iemCImpl_fnsave, enmEffOpSize, iEffSeg, GCPtrEffDst); 15706 15706 IEM_MC_END(); … … 15724 15724 IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ(); 15725 15725 IEM_MC_FETCH_FSW(u16Tmp); 15726 IEM_MC_STORE_MEM_U16(p IemCpu->iEffSeg, GCPtrEffDst, u16Tmp);15726 IEM_MC_STORE_MEM_U16(pVCpu->iem.s.iEffSeg, GCPtrEffDst, u16Tmp); 15727 15727 IEM_MC_ADVANCE_RIP(); 15728 15728 … … 15803 15803 FNIEMOP_DEF(iemOp_EscF5) 15804 15804 { 15805 p IemCpu->offFpuOpcode = pIemCpu->offOpcode - 1;15805 pVCpu->iem.s.offFpuOpcode = pVCpu->iem.s.offOpcode - 1; 15806 15806 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 15807 15807 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 15915 15915 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 15916 15916 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 15917 IEM_MC_FETCH_MEM_I16(i16Val2, p IemCpu->iEffSeg, GCPtrEffSrc);15917 IEM_MC_FETCH_MEM_I16(i16Val2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 15918 15918 15919 15919 IEM_MC_PREPARE_FPU_USAGE(); … … 15965 15965 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 15966 15966 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 15967 IEM_MC_FETCH_MEM_I16(i16Val2, p IemCpu->iEffSeg, GCPtrEffSrc);15967 IEM_MC_FETCH_MEM_I16(i16Val2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 15968 15968 15969 15969 IEM_MC_PREPARE_FPU_USAGE(); 15970 15970 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 15971 15971 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_ficom_r80_by_i16, pu16Fsw, pr80Value1, pi16Val2); 15972 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffSrc);15972 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 15973 15973 IEM_MC_ELSE() 15974 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffSrc);15974 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 15975 15975 IEM_MC_ENDIF(); 15976 15976 IEM_MC_ADVANCE_RIP(); … … 15999 15999 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 16000 16000 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 16001 IEM_MC_FETCH_MEM_I16(i16Val2, p IemCpu->iEffSeg, GCPtrEffSrc);16001 IEM_MC_FETCH_MEM_I16(i16Val2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 16002 16002 16003 16003 IEM_MC_PREPARE_FPU_USAGE(); 16004 16004 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 16005 16005 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_ficom_r80_by_i16, pu16Fsw, pr80Value1, pi16Val2); 16006 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffSrc);16006 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 16007 16007 IEM_MC_ELSE() 16008 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffSrc);16008 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 16009 16009 IEM_MC_ENDIF(); 16010 16010 IEM_MC_ADVANCE_RIP(); … … 16050 16050 FNIEMOP_DEF(iemOp_EscF6) 16051 16051 { 16052 p IemCpu->offFpuOpcode = pIemCpu->offOpcode - 1;16052 pVCpu->iem.s.offFpuOpcode = pVCpu->iem.s.offOpcode - 1; 16053 16053 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 16054 16054 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 16161 16161 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 16162 16162 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 16163 IEM_MC_FETCH_MEM_I16(i16Val, p IemCpu->iEffSeg, GCPtrEffSrc);16163 IEM_MC_FETCH_MEM_I16(i16Val, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 16164 16164 16165 16165 IEM_MC_PREPARE_FPU_USAGE(); 16166 16166 IEM_MC_IF_FPUREG_IS_EMPTY(7) 16167 16167 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fild_i16_to_r80, pFpuRes, pi16Val); 16168 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, p IemCpu->iEffSeg, GCPtrEffSrc);16168 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 16169 16169 IEM_MC_ELSE() 16170 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(p IemCpu->iEffSeg, GCPtrEffSrc);16170 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 16171 16171 IEM_MC_ENDIF(); 16172 16172 IEM_MC_ADVANCE_RIP(); … … 16193 16193 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 16194 16194 16195 IEM_MC_MEM_MAP(pi16Dst, IEM_ACCESS_DATA_W, p IemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);16195 IEM_MC_MEM_MAP(pi16Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 16196 16196 IEM_MC_PREPARE_FPU_USAGE(); 16197 16197 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 16198 16198 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fistt_r80_to_i16, pu16Fsw, pi16Dst, pr80Value); 16199 16199 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi16Dst, IEM_ACCESS_DATA_W, u16Fsw); 16200 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffDst);16200 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 16201 16201 IEM_MC_ELSE() 16202 16202 IEM_MC_IF_FCW_IM() … … 16204 16204 IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W); 16205 16205 IEM_MC_ENDIF(); 16206 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffDst);16206 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 16207 16207 IEM_MC_ENDIF(); 16208 16208 IEM_MC_ADVANCE_RIP(); … … 16229 16229 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 16230 16230 16231 IEM_MC_MEM_MAP(pi16Dst, IEM_ACCESS_DATA_W, p IemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);16231 IEM_MC_MEM_MAP(pi16Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 16232 16232 IEM_MC_PREPARE_FPU_USAGE(); 16233 16233 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 16234 16234 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i16, pu16Fsw, pi16Dst, pr80Value); 16235 16235 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi16Dst, IEM_ACCESS_DATA_W, u16Fsw); 16236 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffDst);16236 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 16237 16237 IEM_MC_ELSE() 16238 16238 IEM_MC_IF_FCW_IM() … … 16240 16240 IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W); 16241 16241 IEM_MC_ENDIF(); 16242 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffDst);16242 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 16243 16243 IEM_MC_ENDIF(); 16244 16244 IEM_MC_ADVANCE_RIP(); … … 16265 16265 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 16266 16266 16267 IEM_MC_MEM_MAP(pi16Dst, IEM_ACCESS_DATA_W, p IemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);16267 IEM_MC_MEM_MAP(pi16Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 16268 16268 IEM_MC_PREPARE_FPU_USAGE(); 16269 16269 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 16270 16270 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i16, pu16Fsw, pi16Dst, pr80Value); 16271 16271 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi16Dst, IEM_ACCESS_DATA_W, u16Fsw); 16272 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffDst);16272 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 16273 16273 IEM_MC_ELSE() 16274 16274 IEM_MC_IF_FCW_IM() … … 16276 16276 IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W); 16277 16277 IEM_MC_ENDIF(); 16278 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffDst);16278 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 16279 16279 IEM_MC_ENDIF(); 16280 16280 IEM_MC_ADVANCE_RIP(); … … 16306 16306 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 16307 16307 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 16308 IEM_MC_FETCH_MEM_I64(i64Val, p IemCpu->iEffSeg, GCPtrEffSrc);16308 IEM_MC_FETCH_MEM_I64(i64Val, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 16309 16309 16310 16310 IEM_MC_PREPARE_FPU_USAGE(); 16311 16311 IEM_MC_IF_FPUREG_IS_EMPTY(7) 16312 16312 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fild_i64_to_r80, pFpuRes, pi64Val); 16313 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, p IemCpu->iEffSeg, GCPtrEffSrc);16313 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 16314 16314 IEM_MC_ELSE() 16315 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(p IemCpu->iEffSeg, GCPtrEffSrc);16315 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 16316 16316 IEM_MC_ENDIF(); 16317 16317 IEM_MC_ADVANCE_RIP(); … … 16342 16342 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 16343 16343 16344 IEM_MC_MEM_MAP(pi64Dst, IEM_ACCESS_DATA_W, p IemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);16344 IEM_MC_MEM_MAP(pi64Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 16345 16345 IEM_MC_PREPARE_FPU_USAGE(); 16346 16346 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 16347 16347 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i64, pu16Fsw, pi64Dst, pr80Value); 16348 16348 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi64Dst, IEM_ACCESS_DATA_W, u16Fsw); 16349 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, p IemCpu->iEffSeg, GCPtrEffDst);16349 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 16350 16350 IEM_MC_ELSE() 16351 16351 IEM_MC_IF_FCW_IM() … … 16353 16353 IEM_MC_MEM_COMMIT_AND_UNMAP(pi64Dst, IEM_ACCESS_DATA_W); 16354 16354 IEM_MC_ENDIF(); 16355 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, p IemCpu->iEffSeg, GCPtrEffDst);16355 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 16356 16356 IEM_MC_ENDIF(); 16357 16357 IEM_MC_ADVANCE_RIP(); … … 16409 16409 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 16410 16410 16411 switch (p IemCpu->enmEffAddrMode)16411 switch (pVCpu->iem.s.enmEffAddrMode) 16412 16412 { 16413 16413 case IEMMODE_16BIT: … … 16457 16457 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 16458 16458 16459 switch (p IemCpu->enmEffAddrMode)16459 switch (pVCpu->iem.s.enmEffAddrMode) 16460 16460 { 16461 16461 case IEMMODE_16BIT: … … 16508 16508 * using the 32-bit operand size override. How can that be restarted? See 16509 16509 * weird pseudo code in intel manual. */ 16510 switch (p IemCpu->enmEffAddrMode)16510 switch (pVCpu->iem.s.enmEffAddrMode) 16511 16511 { 16512 16512 case IEMMODE_16BIT: 16513 16513 IEM_MC_BEGIN(0,0); 16514 if (-(int8_t)p IemCpu->offOpcode != i8Imm)16514 if (-(int8_t)pVCpu->iem.s.offOpcode != i8Imm) 16515 16515 { 16516 16516 IEM_MC_SUB_GREG_U16(X86_GREG_xCX, 1); … … 16531 16531 case IEMMODE_32BIT: 16532 16532 IEM_MC_BEGIN(0,0); 16533 if (-(int8_t)p IemCpu->offOpcode != i8Imm)16533 if (-(int8_t)pVCpu->iem.s.offOpcode != i8Imm) 16534 16534 { 16535 16535 IEM_MC_SUB_GREG_U32(X86_GREG_xCX, 1); … … 16550 16550 case IEMMODE_64BIT: 16551 16551 IEM_MC_BEGIN(0,0); 16552 if (-(int8_t)p IemCpu->offOpcode != i8Imm)16552 if (-(int8_t)pVCpu->iem.s.offOpcode != i8Imm) 16553 16553 { 16554 16554 IEM_MC_SUB_GREG_U64(X86_GREG_xCX, 1); … … 16580 16580 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 16581 16581 16582 switch (p IemCpu->enmEffAddrMode)16582 switch (pVCpu->iem.s.enmEffAddrMode) 16583 16583 { 16584 16584 case IEMMODE_16BIT: … … 16633 16633 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); 16634 16634 IEMOP_HLP_NO_LOCK_PREFIX(); 16635 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_in, u8Imm, p IemCpu->enmEffOpSize == IEMMODE_16BIT ? 2 : 4);16635 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_in, u8Imm, pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT ? 2 : 4); 16636 16636 } 16637 16637 … … 16653 16653 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); 16654 16654 IEMOP_HLP_NO_LOCK_PREFIX(); 16655 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_out, u8Imm, p IemCpu->enmEffOpSize == IEMMODE_16BIT ? 2 : 4);16655 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_out, u8Imm, pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT ? 2 : 4); 16656 16656 } 16657 16657 … … 16662 16662 IEMOP_MNEMONIC("call Jv"); 16663 16663 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 16664 switch (p IemCpu->enmEffOpSize)16664 switch (pVCpu->iem.s.enmEffOpSize) 16665 16665 { 16666 16666 case IEMMODE_16BIT: … … 16692 16692 IEMOP_MNEMONIC("jmp Jv"); 16693 16693 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 16694 switch (p IemCpu->enmEffOpSize)16694 switch (pVCpu->iem.s.enmEffOpSize) 16695 16695 { 16696 16696 case IEMMODE_16BIT: … … 16726 16726 /* Decode the far pointer address and pass it on to the far call C implementation. */ 16727 16727 uint32_t offSeg; 16728 if (p IemCpu->enmEffOpSize != IEMMODE_16BIT)16728 if (pVCpu->iem.s.enmEffOpSize != IEMMODE_16BIT) 16729 16729 IEM_OPCODE_GET_NEXT_U32(&offSeg); 16730 16730 else … … 16732 16732 uint16_t uSel; IEM_OPCODE_GET_NEXT_U16(&uSel); 16733 16733 IEMOP_HLP_NO_LOCK_PREFIX(); 16734 return IEM_MC_DEFER_TO_CIMPL_3(iemCImpl_FarJmp, uSel, offSeg, p IemCpu->enmEffOpSize);16734 return IEM_MC_DEFER_TO_CIMPL_3(iemCImpl_FarJmp, uSel, offSeg, pVCpu->iem.s.enmEffOpSize); 16735 16735 } 16736 16736 … … 16765 16765 IEMOP_MNEMONIC("in eAX,DX"); 16766 16766 IEMOP_HLP_NO_LOCK_PREFIX(); 16767 return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_in_eAX_DX, p IemCpu->enmEffOpSize == IEMMODE_16BIT ? 2 : 4);16767 return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_in_eAX_DX, pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT ? 2 : 4); 16768 16768 } 16769 16769 … … 16783 16783 IEMOP_MNEMONIC("out DX,eAX"); 16784 16784 IEMOP_HLP_NO_LOCK_PREFIX(); 16785 return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_out_DX_eAX, p IemCpu->enmEffOpSize == IEMMODE_16BIT ? 2 : 4);16785 return IEM_MC_DEFER_TO_CIMPL_1(iemCImpl_out_DX_eAX, pVCpu->iem.s.enmEffOpSize == IEMMODE_16BIT ? 2 : 4); 16786 16786 } 16787 16787 … … 16791 16791 { 16792 16792 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("lock"); 16793 p IemCpu->fPrefixes |= IEM_OP_PRF_LOCK;16793 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_LOCK; 16794 16794 16795 16795 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 16812 16812 { 16813 16813 /* This overrides any previous REPE prefix. */ 16814 p IemCpu->fPrefixes &= ~IEM_OP_PRF_REPZ;16814 pVCpu->iem.s.fPrefixes &= ~IEM_OP_PRF_REPZ; 16815 16815 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("repne"); 16816 p IemCpu->fPrefixes |= IEM_OP_PRF_REPNZ;16816 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REPNZ; 16817 16817 16818 16818 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 16825 16825 { 16826 16826 /* This overrides any previous REPNE prefix. */ 16827 p IemCpu->fPrefixes &= ~IEM_OP_PRF_REPNZ;16827 pVCpu->iem.s.fPrefixes &= ~IEM_OP_PRF_REPNZ; 16828 16828 IEMOP_HLP_CLEAR_REX_NOT_BEFORE_OPCODE("repe"); 16829 p IemCpu->fPrefixes |= IEM_OP_PRF_REPZ;16829 pVCpu->iem.s.fPrefixes |= IEM_OP_PRF_REPZ; 16830 16830 16831 16831 uint8_t b; IEM_OPCODE_GET_NEXT_U8(&b); … … 16869 16869 IEM_MC_ARG(uint8_t *, pu8Dst, 0); 16870 16870 IEM_MC_ARG(uint32_t *, pEFlags, 1); 16871 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);16871 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 16872 16872 IEM_MC_REF_EFLAGS(pEFlags); 16873 16873 IEM_MC_CALL_VOID_AIMPL_2(pImpl->pfnNormalU8, pu8Dst, pEFlags); … … 16884 16884 16885 16885 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 16886 IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);16886 IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 16887 16887 IEM_MC_FETCH_EFLAGS(EFlags); 16888 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))16888 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 16889 16889 IEM_MC_CALL_VOID_AIMPL_2(pImpl->pfnNormalU8, pu8Dst, pEFlags); 16890 16890 else … … 16910 16910 /* Registers are handled by a common worker. */ 16911 16911 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 16912 return FNIEMOP_CALL_2(iemOpCommonUnaryGReg, pImpl, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);16912 return FNIEMOP_CALL_2(iemOpCommonUnaryGReg, pImpl, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 16913 16913 16914 16914 /* Memory we do here. */ 16915 switch (p IemCpu->enmEffOpSize)16915 switch (pVCpu->iem.s.enmEffOpSize) 16916 16916 { 16917 16917 case IEMMODE_16BIT: … … 16922 16922 16923 16923 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 16924 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);16924 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 16925 16925 IEM_MC_FETCH_EFLAGS(EFlags); 16926 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))16926 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 16927 16927 IEM_MC_CALL_VOID_AIMPL_2(pImpl->pfnNormalU16, pu16Dst, pEFlags); 16928 16928 else … … 16942 16942 16943 16943 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 16944 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);16944 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 16945 16945 IEM_MC_FETCH_EFLAGS(EFlags); 16946 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))16946 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 16947 16947 IEM_MC_CALL_VOID_AIMPL_2(pImpl->pfnNormalU32, pu32Dst, pEFlags); 16948 16948 else … … 16962 16962 16963 16963 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 16964 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);16964 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_RW, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 16965 16965 IEM_MC_FETCH_EFLAGS(EFlags); 16966 if (!(p IemCpu->fPrefixes & IEM_OP_PRF_LOCK))16966 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 16967 16967 IEM_MC_CALL_VOID_AIMPL_2(pImpl->pfnNormalU64, pu64Dst, pEFlags); 16968 16968 else … … 16996 16996 IEM_MC_ARG_CONST(uint8_t, u8Src,/*=*/u8Imm, 1); 16997 16997 IEM_MC_ARG(uint32_t *, pEFlags, 2); 16998 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);16998 IEM_MC_REF_GREG_U8(pu8Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 16999 16999 IEM_MC_REF_EFLAGS(pEFlags); 17000 17000 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_test_u8, pu8Dst, u8Src, pEFlags); … … 17016 17016 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); 17017 17017 IEM_MC_ASSIGN(u8Src, u8Imm); 17018 IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_R, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);17018 IEM_MC_MEM_MAP(pu8Dst, IEM_ACCESS_DATA_R, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 17019 17019 IEM_MC_FETCH_EFLAGS(EFlags); 17020 17020 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_test_u8, pu8Dst, u8Src, pEFlags); … … 17039 17039 { 17040 17040 /* register access */ 17041 switch (p IemCpu->enmEffOpSize)17041 switch (pVCpu->iem.s.enmEffOpSize) 17042 17042 { 17043 17043 case IEMMODE_16BIT: … … 17048 17048 IEM_MC_ARG_CONST(uint16_t, u16Src,/*=*/u16Imm, 1); 17049 17049 IEM_MC_ARG(uint32_t *, pEFlags, 2); 17050 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);17050 IEM_MC_REF_GREG_U16(pu16Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 17051 17051 IEM_MC_REF_EFLAGS(pEFlags); 17052 17052 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_test_u16, pu16Dst, u16Src, pEFlags); … … 17063 17063 IEM_MC_ARG_CONST(uint32_t, u32Src,/*=*/u32Imm, 1); 17064 17064 IEM_MC_ARG(uint32_t *, pEFlags, 2); 17065 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);17065 IEM_MC_REF_GREG_U32(pu32Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 17066 17066 IEM_MC_REF_EFLAGS(pEFlags); 17067 17067 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_test_u32, pu32Dst, u32Src, pEFlags); … … 17079 17079 IEM_MC_ARG_CONST(uint64_t, u64Src,/*=*/u64Imm, 1); 17080 17080 IEM_MC_ARG(uint32_t *, pEFlags, 2); 17081 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);17081 IEM_MC_REF_GREG_U64(pu64Dst, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 17082 17082 IEM_MC_REF_EFLAGS(pEFlags); 17083 17083 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_test_u64, pu64Dst, u64Src, pEFlags); … … 17093 17093 { 17094 17094 /* memory access. */ 17095 switch (p IemCpu->enmEffOpSize)17095 switch (pVCpu->iem.s.enmEffOpSize) 17096 17096 { 17097 17097 case IEMMODE_16BIT: … … 17106 17106 uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm); 17107 17107 IEM_MC_ASSIGN(u16Src, u16Imm); 17108 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_R, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);17108 IEM_MC_MEM_MAP(pu16Dst, IEM_ACCESS_DATA_R, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 17109 17109 IEM_MC_FETCH_EFLAGS(EFlags); 17110 17110 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_test_u16, pu16Dst, u16Src, pEFlags); … … 17128 17128 uint32_t u32Imm; IEM_OPCODE_GET_NEXT_U32(&u32Imm); 17129 17129 IEM_MC_ASSIGN(u32Src, u32Imm); 17130 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_R, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);17130 IEM_MC_MEM_MAP(pu32Dst, IEM_ACCESS_DATA_R, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 17131 17131 IEM_MC_FETCH_EFLAGS(EFlags); 17132 17132 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_test_u32, pu32Dst, u32Src, pEFlags); … … 17150 17150 uint64_t u64Imm; IEM_OPCODE_GET_NEXT_S32_SX_U64(&u64Imm); 17151 17151 IEM_MC_ASSIGN(u64Src, u64Imm); 17152 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_R, p IemCpu->iEffSeg, GCPtrEffDst, 0 /*arg*/);17152 IEM_MC_MEM_MAP(pu64Dst, IEM_ACCESS_DATA_R, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 0 /*arg*/); 17153 17153 IEM_MC_FETCH_EFLAGS(EFlags); 17154 17154 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_test_u64, pu64Dst, u64Src, pEFlags); … … 17182 17182 IEM_MC_LOCAL(int32_t, rc); 17183 17183 17184 IEM_MC_FETCH_GREG_U8(u8Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);17184 IEM_MC_FETCH_GREG_U8(u8Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 17185 17185 IEM_MC_REF_GREG_U16(pu16AX, X86_GREG_xAX); 17186 17186 IEM_MC_REF_EFLAGS(pEFlags); … … 17207 17207 17208 17208 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 17209 IEM_MC_FETCH_MEM_U8(u8Value, p IemCpu->iEffSeg, GCPtrEffDst);17209 IEM_MC_FETCH_MEM_U8(u8Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 17210 17210 IEM_MC_REF_GREG_U16(pu16AX, X86_GREG_xAX); 17211 17211 IEM_MC_REF_EFLAGS(pEFlags); … … 17232 17232 { 17233 17233 /* register access */ 17234 switch (p IemCpu->enmEffOpSize)17234 switch (pVCpu->iem.s.enmEffOpSize) 17235 17235 { 17236 17236 case IEMMODE_16BIT: … … 17244 17244 IEM_MC_LOCAL(int32_t, rc); 17245 17245 17246 IEM_MC_FETCH_GREG_U16(u16Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);17246 IEM_MC_FETCH_GREG_U16(u16Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 17247 17247 IEM_MC_REF_GREG_U16(pu16AX, X86_GREG_xAX); 17248 17248 IEM_MC_REF_GREG_U16(pu16DX, X86_GREG_xDX); … … 17269 17269 IEM_MC_LOCAL(int32_t, rc); 17270 17270 17271 IEM_MC_FETCH_GREG_U32(u32Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);17271 IEM_MC_FETCH_GREG_U32(u32Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 17272 17272 IEM_MC_REF_GREG_U32(pu32AX, X86_GREG_xAX); 17273 17273 IEM_MC_REF_GREG_U32(pu32DX, X86_GREG_xDX); … … 17296 17296 IEM_MC_LOCAL(int32_t, rc); 17297 17297 17298 IEM_MC_FETCH_GREG_U64(u64Value, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);17298 IEM_MC_FETCH_GREG_U64(u64Value, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 17299 17299 IEM_MC_REF_GREG_U64(pu64AX, X86_GREG_xAX); 17300 17300 IEM_MC_REF_GREG_U64(pu64DX, X86_GREG_xDX); … … 17317 17317 { 17318 17318 /* memory access. */ 17319 switch (p IemCpu->enmEffOpSize)17319 switch (pVCpu->iem.s.enmEffOpSize) 17320 17320 { 17321 17321 case IEMMODE_16BIT: … … 17331 17331 17332 17332 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 17333 IEM_MC_FETCH_MEM_U16(u16Value, p IemCpu->iEffSeg, GCPtrEffDst);17333 IEM_MC_FETCH_MEM_U16(u16Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 17334 17334 IEM_MC_REF_GREG_U16(pu16AX, X86_GREG_xAX); 17335 17335 IEM_MC_REF_GREG_U16(pu16DX, X86_GREG_xDX); … … 17358 17358 17359 17359 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 17360 IEM_MC_FETCH_MEM_U32(u32Value, p IemCpu->iEffSeg, GCPtrEffDst);17360 IEM_MC_FETCH_MEM_U32(u32Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 17361 17361 IEM_MC_REF_GREG_U32(pu32AX, X86_GREG_xAX); 17362 17362 IEM_MC_REF_GREG_U32(pu32DX, X86_GREG_xDX); … … 17387 17387 17388 17388 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 17389 IEM_MC_FETCH_MEM_U64(u64Value, p IemCpu->iEffSeg, GCPtrEffDst);17389 IEM_MC_FETCH_MEM_U64(u64Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 17390 17390 IEM_MC_REF_GREG_U64(pu64AX, X86_GREG_xAX); 17391 17391 IEM_MC_REF_GREG_U64(pu64DX, X86_GREG_xDX); … … 17584 17584 { 17585 17585 /* The new RIP is taken from a register. */ 17586 switch (p IemCpu->enmEffOpSize)17586 switch (pVCpu->iem.s.enmEffOpSize) 17587 17587 { 17588 17588 case IEMMODE_16BIT: 17589 17589 IEM_MC_BEGIN(1, 0); 17590 17590 IEM_MC_ARG(uint16_t, u16Target, 0); 17591 IEM_MC_FETCH_GREG_U16(u16Target, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);17591 IEM_MC_FETCH_GREG_U16(u16Target, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 17592 17592 IEM_MC_CALL_CIMPL_1(iemCImpl_call_16, u16Target); 17593 17593 IEM_MC_END() … … 17597 17597 IEM_MC_BEGIN(1, 0); 17598 17598 IEM_MC_ARG(uint32_t, u32Target, 0); 17599 IEM_MC_FETCH_GREG_U32(u32Target, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);17599 IEM_MC_FETCH_GREG_U32(u32Target, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 17600 17600 IEM_MC_CALL_CIMPL_1(iemCImpl_call_32, u32Target); 17601 17601 IEM_MC_END() … … 17605 17605 IEM_MC_BEGIN(1, 0); 17606 17606 IEM_MC_ARG(uint64_t, u64Target, 0); 17607 IEM_MC_FETCH_GREG_U64(u64Target, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);17607 IEM_MC_FETCH_GREG_U64(u64Target, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 17608 17608 IEM_MC_CALL_CIMPL_1(iemCImpl_call_64, u64Target); 17609 17609 IEM_MC_END() … … 17616 17616 { 17617 17617 /* The new RIP is taken from a register. */ 17618 switch (p IemCpu->enmEffOpSize)17618 switch (pVCpu->iem.s.enmEffOpSize) 17619 17619 { 17620 17620 case IEMMODE_16BIT: … … 17623 17623 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 17624 17624 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 17625 IEM_MC_FETCH_MEM_U16(u16Target, p IemCpu->iEffSeg, GCPtrEffSrc);17625 IEM_MC_FETCH_MEM_U16(u16Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 17626 17626 IEM_MC_CALL_CIMPL_1(iemCImpl_call_16, u16Target); 17627 17627 IEM_MC_END() … … 17633 17633 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 17634 17634 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 17635 IEM_MC_FETCH_MEM_U32(u32Target, p IemCpu->iEffSeg, GCPtrEffSrc);17635 IEM_MC_FETCH_MEM_U32(u32Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 17636 17636 IEM_MC_CALL_CIMPL_1(iemCImpl_call_32, u32Target); 17637 17637 IEM_MC_END() … … 17643 17643 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 17644 17644 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 17645 IEM_MC_FETCH_MEM_U64(u64Target, p IemCpu->iEffSeg, GCPtrEffSrc);17645 IEM_MC_FETCH_MEM_U64(u64Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 17646 17646 IEM_MC_CALL_CIMPL_1(iemCImpl_call_64, u64Target); 17647 17647 IEM_MC_END() … … 17662 17662 17663 17663 /* Far pointer loaded from memory. */ 17664 switch (p IemCpu->enmEffOpSize)17664 switch (pVCpu->iem.s.enmEffOpSize) 17665 17665 { 17666 17666 case IEMMODE_16BIT: … … 17672 17672 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 17673 17673 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 17674 IEM_MC_FETCH_MEM_U16(offSeg, p IemCpu->iEffSeg, GCPtrEffSrc);17675 IEM_MC_FETCH_MEM_U16_DISP(u16Sel, p IemCpu->iEffSeg, GCPtrEffSrc, 2);17674 IEM_MC_FETCH_MEM_U16(offSeg, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 17675 IEM_MC_FETCH_MEM_U16_DISP(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, 2); 17676 17676 IEM_MC_CALL_CIMPL_3(pfnCImpl, u16Sel, offSeg, enmEffOpSize); 17677 17677 IEM_MC_END(); … … 17682 17682 * and will apparently ignore REX.W, at least for the jmp far qword [rsp] 17683 17683 * and call far qword [rsp] encodings. */ 17684 if (!IEM_IS_GUEST_CPU_AMD(p IemCpu))17684 if (!IEM_IS_GUEST_CPU_AMD(pVCpu)) 17685 17685 { 17686 17686 IEM_MC_BEGIN(3, 1); … … 17691 17691 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 17692 17692 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 17693 IEM_MC_FETCH_MEM_U64(offSeg, p IemCpu->iEffSeg, GCPtrEffSrc);17694 IEM_MC_FETCH_MEM_U16_DISP(u16Sel, p IemCpu->iEffSeg, GCPtrEffSrc, 8);17693 IEM_MC_FETCH_MEM_U64(offSeg, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 17694 IEM_MC_FETCH_MEM_U16_DISP(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, 8); 17695 17695 IEM_MC_CALL_CIMPL_3(pfnCImpl, u16Sel, offSeg, enmEffOpSize); 17696 17696 IEM_MC_END(); … … 17707 17707 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 17708 17708 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 17709 IEM_MC_FETCH_MEM_U32(offSeg, p IemCpu->iEffSeg, GCPtrEffSrc);17710 IEM_MC_FETCH_MEM_U16_DISP(u16Sel, p IemCpu->iEffSeg, GCPtrEffSrc, 4);17709 IEM_MC_FETCH_MEM_U32(offSeg, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 17710 IEM_MC_FETCH_MEM_U16_DISP(u16Sel, pVCpu->iem.s.iEffSeg, GCPtrEffSrc, 4); 17711 17711 IEM_MC_CALL_CIMPL_3(pfnCImpl, u16Sel, offSeg, enmEffOpSize); 17712 17712 IEM_MC_END(); … … 17742 17742 { 17743 17743 /* The new RIP is taken from a register. */ 17744 switch (p IemCpu->enmEffOpSize)17744 switch (pVCpu->iem.s.enmEffOpSize) 17745 17745 { 17746 17746 case IEMMODE_16BIT: 17747 17747 IEM_MC_BEGIN(0, 1); 17748 17748 IEM_MC_LOCAL(uint16_t, u16Target); 17749 IEM_MC_FETCH_GREG_U16(u16Target, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);17749 IEM_MC_FETCH_GREG_U16(u16Target, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 17750 17750 IEM_MC_SET_RIP_U16(u16Target); 17751 17751 IEM_MC_END() … … 17755 17755 IEM_MC_BEGIN(0, 1); 17756 17756 IEM_MC_LOCAL(uint32_t, u32Target); 17757 IEM_MC_FETCH_GREG_U32(u32Target, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);17757 IEM_MC_FETCH_GREG_U32(u32Target, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 17758 17758 IEM_MC_SET_RIP_U32(u32Target); 17759 17759 IEM_MC_END() … … 17763 17763 IEM_MC_BEGIN(0, 1); 17764 17764 IEM_MC_LOCAL(uint64_t, u64Target); 17765 IEM_MC_FETCH_GREG_U64(u64Target, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);17765 IEM_MC_FETCH_GREG_U64(u64Target, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 17766 17766 IEM_MC_SET_RIP_U64(u64Target); 17767 17767 IEM_MC_END() … … 17774 17774 { 17775 17775 /* The new RIP is taken from a memory location. */ 17776 switch (p IemCpu->enmEffOpSize)17776 switch (pVCpu->iem.s.enmEffOpSize) 17777 17777 { 17778 17778 case IEMMODE_16BIT: … … 17781 17781 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 17782 17782 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 17783 IEM_MC_FETCH_MEM_U16(u16Target, p IemCpu->iEffSeg, GCPtrEffSrc);17783 IEM_MC_FETCH_MEM_U16(u16Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 17784 17784 IEM_MC_SET_RIP_U16(u16Target); 17785 17785 IEM_MC_END() … … 17791 17791 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 17792 17792 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 17793 IEM_MC_FETCH_MEM_U32(u32Target, p IemCpu->iEffSeg, GCPtrEffSrc);17793 IEM_MC_FETCH_MEM_U32(u32Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 17794 17794 IEM_MC_SET_RIP_U32(u32Target); 17795 17795 IEM_MC_END() … … 17801 17801 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 17802 17802 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 17803 IEM_MC_FETCH_MEM_U64(u64Target, p IemCpu->iEffSeg, GCPtrEffSrc);17803 IEM_MC_FETCH_MEM_U64(u64Target, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 17804 17804 IEM_MC_SET_RIP_U64(u64Target); 17805 17805 IEM_MC_END() … … 17834 17834 /* Registers are handled by a common worker. */ 17835 17835 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 17836 return FNIEMOP_CALL_1(iemOpCommonPushGReg, (bRm & X86_MODRM_RM_MASK) | p IemCpu->uRexB);17836 return FNIEMOP_CALL_1(iemOpCommonPushGReg, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 17837 17837 17838 17838 /* Memory we do here. */ 17839 17839 IEMOP_HLP_DEFAULT_64BIT_OP_SIZE(); 17840 switch (p IemCpu->enmEffOpSize)17840 switch (pVCpu->iem.s.enmEffOpSize) 17841 17841 { 17842 17842 case IEMMODE_16BIT: … … 17845 17845 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 17846 17846 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 17847 IEM_MC_FETCH_MEM_U16(u16Src, p IemCpu->iEffSeg, GCPtrEffSrc);17847 IEM_MC_FETCH_MEM_U16(u16Src, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 17848 17848 IEM_MC_PUSH_U16(u16Src); 17849 17849 IEM_MC_ADVANCE_RIP(); … … 17856 17856 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 17857 17857 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 17858 IEM_MC_FETCH_MEM_U32(u32Src, p IemCpu->iEffSeg, GCPtrEffSrc);17858 IEM_MC_FETCH_MEM_U32(u32Src, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 17859 17859 IEM_MC_PUSH_U32(u32Src); 17860 17860 IEM_MC_ADVANCE_RIP(); … … 17867 17867 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 17868 17868 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 17869 IEM_MC_FETCH_MEM_U64(u64Src, p IemCpu->iEffSeg, GCPtrEffSrc);17869 IEM_MC_FETCH_MEM_U64(u64Src, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 17870 17870 IEM_MC_PUSH_U64(u64Src); 17871 17871 IEM_MC_ADVANCE_RIP();
Note:
See TracChangeset
for help on using the changeset viewer.