VirtualBox

Changeset 95421 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Jun 29, 2022 2:41:48 AM (3 years ago)
Author:
vboxsync
Message:

VMM/IEM: fld, fbld and fstp are 8 byte aligned as far as #AC is concerned on an 10980xe. bugref:9898

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

Legend:

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

    r95410 r95421  
    68846884    /* The lazy approach for now... */
    68856885    PCRTFLOAT80U pr80Src;
    6886     VBOXSTRICTRC rc = iemMemMap(pVCpu, (void **)&pr80Src, sizeof(*pr80Src), iSegReg, GCPtrMem,
    6887                                 IEM_ACCESS_DATA_R, 7 /** @todo FLD alignment check */ );
     6886    VBOXSTRICTRC rc = iemMemMap(pVCpu, (void **)&pr80Src, sizeof(*pr80Src), iSegReg, GCPtrMem, IEM_ACCESS_DATA_R, 7);
    68886887    if (rc == VINF_SUCCESS)
    68896888    {
     
    69086907{
    69096908    /* The lazy approach for now... */
    6910     PCRTFLOAT80U pr80Src = (PCRTFLOAT80U)iemMemMapJmp(pVCpu, sizeof(*pr80Src), iSegReg, GCPtrMem,
    6911                                                       IEM_ACCESS_DATA_R, 7 /** @todo FLD alignment check */);
     6909    PCRTFLOAT80U pr80Src = (PCRTFLOAT80U)iemMemMapJmp(pVCpu, sizeof(*pr80Src), iSegReg, GCPtrMem, IEM_ACCESS_DATA_R, 7);
    69126910    *pr80Dst = *pr80Src;
    69136911    iemMemCommitAndUnmapJmp(pVCpu, (void *)pr80Src, IEM_ACCESS_DATA_R);
     
    69176915
    69186916/**
    6919  * Fetches a data tword.
     6917 * Fetches a data decimal tword.
    69206918 *
    69216919 * @returns Strict VBox status code.
     
    69436941#ifdef IEM_WITH_SETJMP
    69446942/**
    6945  * Fetches a data tword, longjmp on error.
     6943 * Fetches a data decimal tword, longjmp on error.
    69466944 *
    69476945 * @param   pVCpu               The cross context virtual CPU structure of the calling thread.
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h

    r94617 r95421  
    87818781    IEM_MC_MAYBE_RAISE_FPU_XCPT();
    87828782
    8783     IEM_MC_MEM_MAP(pr80Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/);
     8783    IEM_MC_MEM_MAP_EX(pr80Dst, IEM_ACCESS_DATA_W, sizeof(*pr80Dst), pVCpu->iem.s.iEffSeg, GCPtrEffDst, 7 /*cbAlign*/, 1 /*arg*/);
    87848784    IEM_MC_PREPARE_FPU_USAGE();
    87858785    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0)
     
    1018210182    IEM_MC_MAYBE_RAISE_FPU_XCPT();
    1018310183
    10184     IEM_MC_MEM_MAP(pd80Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/);
     10184    IEM_MC_MEM_MAP_EX(pd80Dst, IEM_ACCESS_DATA_W, sizeof(*pd80Dst), pVCpu->iem.s.iEffSeg, GCPtrEffDst, 7 /*cbAlign*/, 1 /*arg*/);
    1018510185    IEM_MC_PREPARE_FPU_USAGE();
    1018610186    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0)
  • trunk/src/VBox/VMM/include/IEMMc.h

    r95410 r95421  
    890890 * @remarks     May return.
    891891 */
    892 #define IEM_MC_MEM_MAP_EX(a_pvMem, a_fAccess, a_cbMem, a_iSeg, a_GCPtrMem, a_iArg) \
     892#define IEM_MC_MEM_MAP_EX(a_pvMem, a_fAccess, a_cbMem, a_iSeg, a_GCPtrMem, a_cbAlign, a_iArg) \
    893893    IEM_MC_RETURN_ON_FAILURE(iemMemMap(pVCpu, (void **)&(a_pvMem), (a_cbMem), (a_iSeg), \
    894                                        (a_GCPtrMem), (a_fAccess), (a_cbMem) - 1))
     894                                       (a_GCPtrMem), (a_fAccess), (a_cbAlign)))
    895895
    896896/** Commits the memory and unmaps the guest memory.
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r95403 r95421  
    631631#define IEM_MC_POP_U64(a_pu64Value)                                     do { (void)fMcBegin; } while (0)
    632632#define IEM_MC_MEM_MAP(a_pMem, a_fAccess, a_iSeg, a_GCPtrMem, a_iArg)   do { (void)fMcBegin; } while (0)
    633 #define IEM_MC_MEM_MAP_EX(a_pvMem, a_fAccess, a_cbMem, a_iSeg, a_GCPtrMem, a_iArg)  do { (void)fMcBegin; } while (0)
     633#define IEM_MC_MEM_MAP_EX(a_pvMem, a_fAccess, a_cbMem, a_iSeg, a_GCPtrMem, a_cbAlign, a_iArg)  do { (void)fMcBegin; AssertCompile((a_cbAlign) <= (a_cbMem)); } while (0)
    634634#define IEM_MC_MEM_COMMIT_AND_UNMAP(a_pvMem, a_fAccess)                             do { (void)fMcBegin; } while (0)
    635635#define IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(a_pvMem, a_fAccess, a_u16FSW)     do { (void)fMcBegin; } while (0)
Note: See TracChangeset for help on using the changeset viewer.

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