VirtualBox

Changeset 104076 in vbox for trunk/src/VBox/VMM/testcase


Ignore:
Timestamp:
Mar 27, 2024 8:19:25 AM (10 months ago)
Author:
vboxsync
Message:

VMM/IEM: Implement 'microcoded' vpinsr[bwdq] instruction decode, dispatch & emulation, bugref:9898

  • eliminate '256 immediate instructions' jumptable implementations of pinsrw, vpinsrw
  • eliminate 'fallback' C implementations of pinsrw, vpinsrw
  • add 'IEM_MC_FETCH_MREG_U8' micro-op
  • add 'IEM_MC_STORE_MREG_U8, IEM_MC_STORE_MREG_U16, IEM_MC_STORE_MREG_U32' micro-ops
  • fix 'IEM_MC_STORE_XREG_U8' micro-op to store 8, not 32 bits (at the right offset)
  • fix 'IEM_MC_STORE_XREG_U16' micro-op to store 16, not 32 bits (at the right offset)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r104058 r104076  
    783783#define IEM_MC_BSWAP_LOCAL_U64(a_u64Local)              do { CHK_TYPE(uint64_t, a_u64Local); CHK_VAR(a_u64Local); (void)fMcBegin; } while (0)
    784784
    785 #define IEM_MC_FETCH_MREG_U64(a_u64Value, a_iMReg)          do { CHK_MREG_IDX(a_iMReg); (a_u64Value) = 0; CHK_VAR(a_u64Value); CHK_TYPE(uint64_t, a_u64Value); (void)fFpuRead; (void)fMcBegin; } while (0)
     785#define IEM_MC_FETCH_MREG_U64(a_u64Value, a_iMReg)              do { CHK_MREG_IDX(a_iMReg); (a_u64Value) = 0; CHK_VAR(a_u64Value); CHK_TYPE(uint64_t, a_u64Value); (void)fFpuRead; (void)fMcBegin; } while (0)
    786786#define IEM_MC_FETCH_MREG_U32(a_u32Value, a_iMReg, a_iDWord)    do { CHK_MREG_IDX(a_iMReg); (a_u32Value) = 0; CHK_VAR(a_u32Value); CHK_TYPE(uint32_t, a_u32Value); (void)fFpuRead; (void)fMcBegin; } while (0)
    787787#define IEM_MC_FETCH_MREG_U16(a_u16Value, a_iMReg, a_iWord)     do { CHK_MREG_IDX(a_iMReg); (a_u16Value) = 0; CHK_VAR(a_u16Value); CHK_TYPE(uint16_t, a_u16Value); (void)fFpuRead; (void)fMcBegin; } while (0)
    788 #define IEM_MC_STORE_MREG_U64(a_iMReg, a_u64Value)          do { CHK_MREG_IDX(a_iMReg);                   CHK_VAR(a_u64Value); CHK_TYPE(uint64_t, a_u64Value); (void)fFpuWrite; (void)fMcBegin; } while (0)
     788#define IEM_MC_FETCH_MREG_U8(a_u8Value, a_iMReg, a_iByte)       do { CHK_MREG_IDX(a_iMReg); (a_u8Value)  = 0; CHK_VAR(a_u8Value);  CHK_TYPE(uint8_t,  a_u8Value);  (void)fFpuRead; (void)fMcBegin; } while (0)
     789#define IEM_MC_STORE_MREG_U64(a_iMReg, a_u64Value)              do { CHK_MREG_IDX(a_iMReg);                   CHK_VAR(a_u64Value); CHK_TYPE(uint64_t, a_u64Value); (void)fFpuWrite; (void)fMcBegin; } while (0)
     790#define IEM_MC_STORE_MREG_U32(a_iMReg, a_iDword, a_u32Value)    do { CHK_MREG_IDX(a_iMReg);                   CHK_VAR(a_u32Value); CHK_TYPE(uint32_t, a_u32Value); (void)fFpuWrite; (void)fMcBegin; } while (0)
     791#define IEM_MC_STORE_MREG_U16(a_iMReg, a_iWord, a_u16Value)     do { CHK_MREG_IDX(a_iMReg);                   CHK_VAR(a_u16Value); CHK_TYPE(uint16_t, a_u16Value); (void)fFpuWrite; (void)fMcBegin; } while (0)
     792#define IEM_MC_STORE_MREG_U8(a_iMReg, a_iByte, a_u8Value)       do { CHK_MREG_IDX(a_iMReg);                   CHK_VAR(a_u8Value);  CHK_TYPE(uint8_t,  a_u8Value);  (void)fFpuWrite; (void)fMcBegin; } while (0)
    789793#define IEM_MC_STORE_MREG_U32_ZX_U64(a_iMReg, a_u32Value)   do { CHK_MREG_IDX(a_iMReg);                   CHK_VAR(a_u32Value); CHK_TYPE(uint32_t, a_u32Value); (void)fFpuWrite; (void)fMcBegin; } while (0)
    790794#define IEM_MC_REF_MREG_U64(a_pu64Dst, a_iMReg)             do { CHK_MREG_IDX(a_iMReg); (a_pu64Dst) = (uint64_t *)((uintptr_t)0);       CHK_VAR(a_pu64Dst); CHK_PTYPE(uint64_t *,       a_pu64Dst);       (void)fFpuWrite; (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