VirtualBox

Changeset 103815 in vbox for trunk/include


Ignore:
Timestamp:
Mar 13, 2024 8:13:38 AM (10 months ago)
Author:
vboxsync
Message:

VMM/IEM: Implement native emitter for IEM_MC_BROADCAST_XREG_U64_ZX_VLMAX(), bugref:10614

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/armv8.h

    r103777 r103815  
    41194119 * @param   enmSz       Element size of the source vector register.
    41204120 *
    4121  * @note This instruction assumes a 32-bit W<n> register for all noon 64bit vector sizes.
     4121 * @note This instruction assumes a 32-bit W<n> register for all non 64bit vector sizes.
    41224122 */
    41234123DECL_FORCE_INLINE(uint32_t) Armv8A64MkVecInstrIns(uint32_t iVecRegDst, uint32_t iRegSrc, uint8_t idxElem,
     
    41324132    return UINT32_C(0x4e001c00)
    41334133         | ((uint32_t)idxElem << (16 + enmSz + 1))
     4134         | (RT_BIT_32(enmSz) << 16)
     4135         | (iRegSrc << 5)
     4136         | iVecRegDst;
     4137}
     4138
     4139
     4140/**
     4141 * A64: Encodes DUP (vector, register).
     4142 *
     4143 * @returns The encoded instruction.
     4144 * @param   iVecRegDst  The vector register to put the result into.
     4145 * @param   iRegSrc     The source register (ZR is valid).
     4146 * @param   enmSz       Element size of the source vector register.
     4147 * @param   f128Bit     Flag whether the instruction operates on the whole 128-bit of the vector register (true) or
     4148 *                      just the low 64-bit (false).
     4149 *
     4150 * @note This instruction assumes a 32-bit W<n> register for all non 64bit vector sizes.
     4151 */
     4152DECL_FORCE_INLINE(uint32_t) Armv8A64MkVecInstrDup(uint32_t iVecRegDst, uint32_t iRegSrc, ARMV8INSTRUMOVINSSZ enmSz,
     4153                                                  bool f128Bit = true)
     4154{
     4155    Assert(iRegSrc < 32); Assert(iVecRegDst < 32);
     4156    Assert(   (enmSz == kArmv8InstrUmovInsSz_U8)
     4157           || (enmSz == kArmv8InstrUmovInsSz_U16)
     4158           || (enmSz == kArmv8InstrUmovInsSz_U32)
     4159           || (enmSz == kArmv8InstrUmovInsSz_U64));
     4160
     4161    return UINT32_C(0x0e000c00)
     4162         | ((uint32_t)f128Bit << 30)
    41344163         | (RT_BIT_32(enmSz) << 16)
    41354164         | (iRegSrc << 5)
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