Changeset 106478 in vbox for trunk/src/VBox/VMM/include
- Timestamp:
- Oct 18, 2024 1:20:19 PM (7 months ago)
- svn:sync-xref-src-repo-rev:
- 165305
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/include/IEMN8veRecompiler.h
r106465 r106478 1563 1563 typedef struct IEMNATIVEVAR 1564 1564 { 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 }; 1591 1603 1592 1604 union … … 1606 1618 } u; 1607 1619 } IEMNATIVEVAR; 1620 AssertCompileSize(IEMNATIVEVAR, 16); 1608 1621 /** Pointer to a variable or argument. */ 1609 1622 typedef IEMNATIVEVAR *PIEMNATIVEVAR;
Note:
See TracChangeset
for help on using the changeset viewer.