VirtualBox

Changeset 102065 in vbox for trunk/include


Ignore:
Timestamp:
Nov 10, 2023 4:14:51 PM (15 months ago)
Author:
vboxsync
Message:

VMM/IEM: Native translation of IEM_MC_STORE_GREG_U16. Fixed a bunch of variable, register & stack allocator issues. bugref:10371

Location:
trunk/include
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/err.h

    r101844 r102065  
    25832583/** Recompiler: Out of stack slots. */
    25842584#define VERR_IEM_VAR_OUT_OF_STACK_SLOTS             (-5362)
     2585/** Recompiler: Unexpected kind of variable. */
     2586#define VERR_IEM_VAR_UNEXPECTED_KIND                (-5363)
    25852587/** Recompiler: Variable management internal processing error \#1. */
    2586 #define VERR_IEM_VAR_IPE_1                          (-5363)
     2588#define VERR_IEM_VAR_IPE_1                          (-5364)
    25872589/** Recompiler: Variable management internal processing error \#2. */
    2588 #define VERR_IEM_VAR_IPE_2                          (-5364)
     2590#define VERR_IEM_VAR_IPE_2                          (-5365)
    25892591/** Recompiler: Variable management internal processing error \#3. */
    2590 #define VERR_IEM_VAR_IPE_3                          (-5365)
     2592#define VERR_IEM_VAR_IPE_3                          (-5366)
    25912593/** Recompiler: Variable management internal processing error \#4. */
    2592 #define VERR_IEM_VAR_IPE_4                          (-5366)
     2594#define VERR_IEM_VAR_IPE_4                          (-5367)
    25932595/** Recompiler: Variable management internal processing error \#5. */
    2594 #define VERR_IEM_VAR_IPE_5                          (-5367)
     2596#define VERR_IEM_VAR_IPE_5                          (-5368)
    25952597
    25962598/** Recompiler: Unimplemented case. */
  • trunk/include/iprt/armv8.h

    r101910 r102065  
    25332533typedef enum
    25342534{
     2535    kArmv8A64InstrMovWide_Not  = 0,     /**< MOVN - reg = ~(imm16 << hw*16; */
     2536    kArmv8A64InstrMovWide_Zero = 2,     /**< MOVZ - reg =   imm16 << hw*16; */
     2537    kArmv8A64InstrMovWide_Keep = 3      /**< MOVK - keep the other halfwords. */
     2538} ARMV8A64INSTRMOVWIDE;
     2539
     2540/**
     2541 * A64: Encode a move wide immediate instruction.
     2542 *
     2543 * @returns The encoded instruction.
     2544 * @param   enmType     The load instruction type.
     2545 * @param   iReg        The register to mov the immediate into.
     2546 * @param   uImm16      The immediate value.
     2547 * @param   iHalfWord   Which of the 4 (@a f64Bit = true) or 2 register (16-bit)
     2548 *                      half-words to target:
     2549 *                          - 0 for bits 15:00,
     2550 *                          - 1 for bits 31:16,
     2551 *                          - 2 for bits 47:32 (f64Bit=true only),
     2552 *                          - 3 for bits 63:48 (f64Bit=true only).
     2553 * @param   f64Bit      true for 64-bit GPRs (default), @c false for 32-bit GPRs.
     2554 */
     2555DECL_FORCE_INLINE(uint32_t) Armv8A64MkInstrMovWide(ARMV8A64INSTRMOVWIDE enmType, uint32_t iRegDst, uint32_t uImm16,
     2556                                                   uint32_t iHalfWord = 0, bool f64Bit = true)
     2557{
     2558    Assert(iRegDst < 32); Assert(uImm16  <= UINT16_MAX); Assert(iHalfWord   < 2 + (2 * f64Bit));
     2559    return ((uint32_t)f64Bit    << 31)
     2560         | UINT32_C(0x11400000)
     2561         | (Half                << 21)
     2562         | (uImm16              << 5)
     2563         | iRegDst;
     2564}
     2565
     2566/** A64: Encodes a MOVN instruction.
     2567 * @see Armv8A64MkInstrMovWide for parameter details.  */
     2568DECL_FORCE_INLINE(uint32_t) Armv8A64MkInstrMovN(uint32_t iRegDst, uint32_t uImm16, uint32_t iHalfWord = 0, bool f64Bit = true)
     2569{
     2570    return Armv8A64MkInstrMovWide(kArmv8A64InstrMovWide_Not, iRegDst, uImm16, iHalfWord, f64Bit);
     2571}
     2572
     2573/** A64: Encodes a MOVZ instruction.
     2574 * @see Armv8A64MkInstrMovWide for parameter details.  */
     2575DECL_FORCE_INLINE(uint32_t) Armv8A64MkInstrMovZ(uint32_t iRegDst, uint32_t uImm16, uint32_t iHalfWord = 0, bool f64Bit = true)
     2576{
     2577    return Armv8A64MkInstrMovWide(kArmv8A64InstrMovWide_Zero, iRegDst, uImm16, iHalfWord, f64Bit);
     2578}
     2579
     2580/** A64: Encodes a MOVK instruction.
     2581 * @see Armv8A64MkInstrMovWide for parameter details.  */
     2582DECL_FORCE_INLINE(uint32_t) Armv8A64MkInstrMovK(uint32_t iRegDst, uint32_t uImm16, uint32_t iHalfWord = 0, bool f64Bit = true)
     2583{
     2584    return Armv8A64MkInstrMovWide(kArmv8A64InstrMovWide_Keep, iRegDst, uImm16, iHalfWord, f64Bit);
     2585}
     2586
     2587
     2588typedef enum
     2589{
    25352590    kArmv8A64InstrShift_Lsl = 0,
    25362591    kArmv8A64InstrShift_Lsr,
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