VirtualBox

Changeset 106478 in vbox for trunk/src/VBox/VMM/include


Ignore:
Timestamp:
Oct 18, 2024 1:20:19 PM (7 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165305
Message:

VMM/IEM: Some IEMNATIVEVAR / iemNativeVarAllocInt optimization tweaks. bugref:10720

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/include/IEMN8veRecompiler.h

    r106465 r106478  
    15631563typedef struct IEMNATIVEVAR
    15641564{
    1565     /** The kind of variable. */
    1566     IEMNATIVEVARKIND    enmKind;
    1567     /** The variable size in bytes. */
    1568     uint8_t             cbVar;
    1569     /** The first stack slot (uint64_t), except for immediate and references
    1570      *  where it usually is UINT8_MAX. This is allocated lazily, so if a variable
    1571      *  has a stack slot it has been initialized and has a value.  Unused variables
    1572      *  has neither a stack slot nor a host register assignment. */
    1573     uint8_t             idxStackSlot;
    1574     /** The host register allocated for the variable, UINT8_MAX if not. */
    1575     uint8_t             idxReg;
    1576     /** The argument number if argument, UINT8_MAX if regular variable. */
    1577     uint8_t             uArgNo;
    1578     /** If referenced, the index (unpacked) of the variable referencing this one,
    1579      * otherwise UINT8_MAX.  A referenced variable must only be placed on the stack
    1580      * and must be either kIemNativeVarKind_Stack or kIemNativeVarKind_Immediate. */
    1581     uint8_t             idxReferrerVar;
    1582     /** Guest register being shadowed here, kIemNativeGstReg_End(/UINT8_MAX) if not.
    1583      * @todo not sure what this really is for...   */
    1584     IEMNATIVEGSTREG     enmGstReg;
    1585     /** Flag whether this variable is held in a SIMD register (only supported for 128-bit and 256-bit variables),
    1586      * only valid when idxReg is not UINT8_MAX. */
    1587     bool                fSimdReg     : 1;
    1588     /** Set if the registered is currently used exclusively, false if the
    1589      *  variable is idle and the register can be grabbed. */
    1590     bool                fRegAcquired : 1;
     1565    union
     1566    {
     1567        struct
     1568        {
     1569            /** The kind of variable. */
     1570            IEMNATIVEVARKIND    enmKind;
     1571            /** The variable size in bytes. */
     1572            uint8_t             cbVar;
     1573            /** Set if the registered is currently used exclusively, false if the
     1574             *  variable is idle and the register can be grabbed. */
     1575            bool                fRegAcquired;
     1576            /** Flag whether this variable is held in a SIMD register (only supported for
     1577             * 128-bit and 256-bit variables), only valid when idxReg is not UINT8_MAX. */
     1578            bool                fSimdReg;
     1579        };
     1580        uint32_t        u32Init0;   /**< Init optimzation - cbVar is set, the other are initialized with zeros. */
     1581    };
     1582
     1583    union
     1584    {
     1585        struct
     1586        {
     1587            /** The host register allocated for the variable, UINT8_MAX if not. */
     1588            uint8_t             idxReg;
     1589            /** The argument number if argument, UINT8_MAX if regular variable. */
     1590            uint8_t             uArgNo;
     1591            /** The first stack slot (uint64_t), except for immediate and references
     1592             *  where it usually is UINT8_MAX. This is allocated lazily, so if a variable
     1593             *  has a stack slot it has been initialized and has a value.  Unused variables
     1594             *  has neither a stack slot nor a host register assignment. */
     1595            uint8_t             idxStackSlot;
     1596            /** If referenced, the index (unpacked) of the variable referencing this one,
     1597             * otherwise UINT8_MAX.  A referenced variable must only be placed on the stack
     1598             * and must be either kIemNativeVarKind_Stack or kIemNativeVarKind_Immediate. */
     1599            uint8_t             idxReferrerVar;
     1600        };
     1601        uint32_t        u32Init1;   /**< Init optimization; all these are initialized to 0xff. */
     1602    };
    15911603
    15921604    union
     
    16061618    } u;
    16071619} IEMNATIVEVAR;
     1620AssertCompileSize(IEMNATIVEVAR, 16);
    16081621/** Pointer to a variable or argument. */
    16091622typedef IEMNATIVEVAR *PIEMNATIVEVAR;
Note: See TracChangeset for help on using the changeset viewer.

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