LCOV - code coverage report
Current view: top level - asmjit - a64instdb_p.h (source / functions) Hit Total Coverage
Test: plumed test coverage (other modules) Lines: 0 61 0.0 %
Date: 2026-11-05 10:19:06 Functions: 0 0 -

          Line data    Source code
       1             : #ifdef __PLUMED_HAS_ASMJIT
       2             : // This file is part of AsmJit project <https://asmjit.com>
       3             : //
       4             : // See asmjit.h or LICENSE.md for license and copyright information
       5             : // SPDX-License-Identifier: Zlib
       6             : 
       7             : #ifndef ASMJIT_ARM_A64INSTDB_H_P_INCLUDED
       8             : #define ASMJIT_ARM_A64INSTDB_H_P_INCLUDED
       9             : 
      10             : #include "codeholder.h"
      11             : #include "a64instdb.h"
      12             : #include "a64operand.h"
      13             : 
      14             : ASMJIT_BEGIN_SUB_NAMESPACE(a64)
      15             : 
      16             : //! \cond INTERNAL
      17             : //! \addtogroup asmjit_a64
      18             : //! \{
      19             : 
      20             : namespace InstDB {
      21             : 
      22             : // a64::InstDB - Constants Used by Instructions
      23             : // ============================================
      24             : 
      25             : // GP register types supported by base instructions.
      26             : static constexpr uint32_t kW = 0x1;
      27             : static constexpr uint32_t kX = 0x2;
      28             : static constexpr uint32_t kWX = 0x3;
      29             : 
      30             : // GP high register IDs supported by the instruction.
      31             : static constexpr uint32_t kZR = Gp::kIdZr;
      32             : static constexpr uint32_t kSP = Gp::kIdSp;
      33             : 
      34             : // a64::InstDB - RWInfo
      35             : // ====================
      36             : 
      37             : enum RWInfoType : uint32_t {
      38             :   kRWI_R,
      39             :   kRWI_RW,
      40             :   kRWI_RX,
      41             :   kRWI_RRW,
      42             :   kRWI_RWX,
      43             :   kRWI_W,
      44             :   kRWI_WRW,
      45             :   kRWI_WRX,
      46             :   kRWI_WRRW,
      47             :   kRWI_WRRX,
      48             :   kRWI_WW,
      49             :   kRWI_X,
      50             :   kRWI_XRX,
      51             :   kRWI_XXRRX,
      52             : 
      53             :   kRWI_LDn,
      54             :   kRWI_STn,
      55             : 
      56             :   kRWI_SpecialStart = kRWI_LDn
      57             : };
      58             : 
      59             : // a64::InstDB - ElementType
      60             : // =========================
      61             : 
      62             : enum ElementType : uint8_t {
      63             :   kET_None = Vec::kElementTypeNone,
      64             :   kET_B    = Vec::kElementTypeB,
      65             :   kET_H    = Vec::kElementTypeH,
      66             :   kET_S    = Vec::kElementTypeS,
      67             :   kET_D    = Vec::kElementTypeD,
      68             :   kET_2H   = Vec::kElementTypeH2,
      69             :   kET_4B   = Vec::kElementTypeB4
      70             : };
      71             : 
      72             : // a64::InstDB - GpType
      73             : // ====================
      74             : 
      75             : enum GpType : uint8_t {
      76             :   kGp_W,
      77             :   kGp_X,
      78             :   kGp_X_SP
      79             : };
      80             : 
      81             : // a64::InstDB - OPSig
      82             : // ===================
      83             : 
      84             : enum kOpSignature : uint32_t {
      85             :   kOp_GpW = GpW::kSignature,
      86             :   kOp_GpX = GpX::kSignature,
      87             : 
      88             :   kOp_B = VecB::kSignature,
      89             :   kOp_H = VecH::kSignature,
      90             :   kOp_S = VecS::kSignature,
      91             :   kOp_D = VecD::kSignature,
      92             :   kOp_Q = VecV::kSignature,
      93             : 
      94             :   kOp_V8B = VecD::kSignature | Vec::kSignatureElementB,
      95             :   kOp_V4H = VecD::kSignature | Vec::kSignatureElementH,
      96             :   kOp_V2S = VecD::kSignature | Vec::kSignatureElementS,
      97             : 
      98             :   kOp_V16B = VecV::kSignature | Vec::kSignatureElementB,
      99             :   kOp_V8H = VecV::kSignature | Vec::kSignatureElementH,
     100             :   kOp_V4S = VecV::kSignature | Vec::kSignatureElementS,
     101             :   kOp_V2D = VecV::kSignature | Vec::kSignatureElementD
     102             : };
     103             : 
     104             : // a64::InstDB - HFConv
     105             : // ====================
     106             : 
     107             : enum kHFConv : uint32_t {
     108             :   //! FP16 version of the instruction is not available.
     109             :   kHF_N,
     110             : 
     111             :   //! Doesn't do any change to the opcode.
     112             :   kHF_0,
     113             : 
     114             :   kHF_A,
     115             :   kHF_B,
     116             :   kHF_C,
     117             :   kHF_D,
     118             : 
     119             :   kHF_Count
     120             : };
     121             : 
     122             : // a64::InstDB - VOType
     123             : // ====================
     124             : 
     125             : //! Vector operand type combinations used by FP&SIMD instructions.
     126             : enum VOType : uint32_t {
     127             :   kVO_V_B,
     128             :   kVO_V_BH,
     129             :   kVO_V_BH_4S,
     130             :   kVO_V_BHS,
     131             :   kVO_V_BHS_D2,
     132             :   kVO_V_HS,
     133             :   kVO_V_S,
     134             : 
     135             :   kVO_V_B8H4,
     136             :   kVO_V_B8H4S2,
     137             :   kVO_V_B8D1,
     138             :   kVO_V_H4S2,
     139             : 
     140             :   kVO_V_B16,
     141             :   kVO_V_B16H8,
     142             :   kVO_V_B16H8S4,
     143             :   kVO_V_B16D2,
     144             :   kVO_V_H8S4,
     145             :   kVO_V_S4,
     146             :   kVO_V_D2,
     147             : 
     148             :   kVO_SV_BHS,
     149             :   kVO_SV_B8H4S2,
     150             :   kVO_SV_HS,
     151             :   kVO_V_Any,
     152             :   kVO_SV_Any,
     153             : 
     154             :   kVO_Count
     155             : };
     156             : 
     157             : // a64::InstDB - EncodingId
     158             : // ========================
     159             : 
     160             : // ${EncodingId:Begin}
     161             : // ------------------- Automatically generated, do not edit -------------------
     162             : enum EncodingId : uint32_t {
     163             :   kEncodingNone = 0,
     164             :   kEncodingBaseAddSub,
     165             :   kEncodingBaseAdr,
     166             :   kEncodingBaseAtDcIcTlbi,
     167             :   kEncodingBaseAtomicCasp,
     168             :   kEncodingBaseAtomicOp,
     169             :   kEncodingBaseAtomicSt,
     170             :   kEncodingBaseBfc,
     171             :   kEncodingBaseBfi,
     172             :   kEncodingBaseBfm,
     173             :   kEncodingBaseBfx,
     174             :   kEncodingBaseBranchCmp,
     175             :   kEncodingBaseBranchReg,
     176             :   kEncodingBaseBranchRel,
     177             :   kEncodingBaseBranchTst,
     178             :   kEncodingBaseCCmp,
     179             :   kEncodingBaseCInc,
     180             :   kEncodingBaseCSel,
     181             :   kEncodingBaseCSet,
     182             :   kEncodingBaseCmpCmn,
     183             :   kEncodingBaseExtend,
     184             :   kEncodingBaseExtract,
     185             :   kEncodingBaseLdSt,
     186             :   kEncodingBaseLdpStp,
     187             :   kEncodingBaseLdxp,
     188             :   kEncodingBaseLogical,
     189             :   kEncodingBaseMov,
     190             :   kEncodingBaseMovKNZ,
     191             :   kEncodingBaseMrs,
     192             :   kEncodingBaseMsr,
     193             :   kEncodingBaseMvnNeg,
     194             :   kEncodingBaseOp,
     195             :   kEncodingBaseOpImm,
     196             :   kEncodingBaseR,
     197             :   kEncodingBaseRM_NoImm,
     198             :   kEncodingBaseRM_SImm10,
     199             :   kEncodingBaseRM_SImm9,
     200             :   kEncodingBaseRR,
     201             :   kEncodingBaseRRII,
     202             :   kEncodingBaseRRR,
     203             :   kEncodingBaseRRRR,
     204             :   kEncodingBaseRev,
     205             :   kEncodingBaseShift,
     206             :   kEncodingBaseStx,
     207             :   kEncodingBaseStxp,
     208             :   kEncodingBaseSys,
     209             :   kEncodingBaseTst,
     210             :   kEncodingFSimdPair,
     211             :   kEncodingFSimdSV,
     212             :   kEncodingFSimdVV,
     213             :   kEncodingFSimdVVV,
     214             :   kEncodingFSimdVVVV,
     215             :   kEncodingFSimdVVVe,
     216             :   kEncodingISimdPair,
     217             :   kEncodingISimdSV,
     218             :   kEncodingISimdVV,
     219             :   kEncodingISimdVVV,
     220             :   kEncodingISimdVVVI,
     221             :   kEncodingISimdVVVV,
     222             :   kEncodingISimdVVVVx,
     223             :   kEncodingISimdVVVe,
     224             :   kEncodingISimdVVVx,
     225             :   kEncodingISimdVVx,
     226             :   kEncodingISimdWWV,
     227             :   kEncodingSimdBicOrr,
     228             :   kEncodingSimdCmp,
     229             :   kEncodingSimdDot,
     230             :   kEncodingSimdDup,
     231             :   kEncodingSimdFcadd,
     232             :   kEncodingSimdFccmpFccmpe,
     233             :   kEncodingSimdFcm,
     234             :   kEncodingSimdFcmla,
     235             :   kEncodingSimdFcmpFcmpe,
     236             :   kEncodingSimdFcsel,
     237             :   kEncodingSimdFcvt,
     238             :   kEncodingSimdFcvtLN,
     239             :   kEncodingSimdFcvtSV,
     240             :   kEncodingSimdFmlal,
     241             :   kEncodingSimdFmov,
     242             :   kEncodingSimdIns,
     243             :   kEncodingSimdLdNStN,
     244             :   kEncodingSimdLdSt,
     245             :   kEncodingSimdLdpStp,
     246             :   kEncodingSimdLdurStur,
     247             :   kEncodingSimdMov,
     248             :   kEncodingSimdMoviMvni,
     249             :   kEncodingSimdShift,
     250             :   kEncodingSimdShiftES,
     251             :   kEncodingSimdSm3tt,
     252             :   kEncodingSimdSmovUmov,
     253             :   kEncodingSimdSxtlUxtl,
     254             :   kEncodingSimdTblTbx
     255             : };
     256             : // ----------------------------------------------------------------------------
     257             : // ${EncodingId:End}
     258             : 
     259             : // a64::InstDB::EncodingData
     260             : // =========================
     261             : 
     262             : namespace EncodingData {
     263             : 
     264             : #define M_OPCODE(field, bits) \
     265             :   uint32_t _##field : bits; \
     266             :   inline constexpr uint32_t field() const noexcept { return uint32_t(_##field) << (32 - bits); }
     267             : 
     268             : struct BaseOp {
     269             :   uint32_t opcode;
     270             : };
     271             : 
     272             : struct BaseOpImm {
     273             :   uint32_t opcode;
     274             :   uint16_t immBits;
     275             :   uint16_t immOffset;
     276             : };
     277             : 
     278             : struct BaseR {
     279             :   uint32_t opcode;
     280             :   uint32_t rType : 8;
     281             :   uint32_t rHiId : 8;
     282             :   uint32_t rShift : 8;
     283             : };
     284             : 
     285             : struct BaseRR {
     286             :   uint32_t opcode;
     287             :   uint32_t aType : 2;
     288             :   uint32_t aHiId : 6;
     289             :   uint32_t aShift : 5;
     290             :   uint32_t bType : 2;
     291             :   uint32_t bHiId : 6;
     292             :   uint32_t bShift : 5;
     293             :   uint32_t uniform : 1;
     294             : };
     295             : 
     296             : struct BaseRRR {
     297           0 :   M_OPCODE(opcode, 22)
     298             :   uint32_t aType : 2;
     299             :   uint32_t aHiId : 6;
     300             :   uint32_t bType : 2;
     301             :   uint32_t bHiId : 6;
     302             :   uint32_t cType : 2;
     303             :   uint32_t cHiId : 6;
     304             :   uint32_t uniform : 1;
     305             : };
     306             : 
     307             : struct BaseRRRR {
     308           0 :   M_OPCODE(opcode, 22)
     309             :   uint32_t aType : 2;
     310             :   uint32_t aHiId : 6;
     311             :   uint32_t bType : 2;
     312             :   uint32_t bHiId : 6;
     313             :   uint32_t cType : 2;
     314             :   uint32_t cHiId : 6;
     315             :   uint32_t dType : 2;
     316             :   uint32_t dHiId : 6;
     317             :   uint32_t uniform : 1;
     318             : };
     319             : 
     320             : struct BaseRRII {
     321           0 :   M_OPCODE(opcode, 22)
     322             :   uint32_t aType : 2;
     323             :   uint32_t aHiId : 6;
     324             :   uint32_t bType : 2;
     325             :   uint32_t bHiId : 6;
     326             :   uint32_t aImmSize : 6;
     327             :   uint32_t aImmDiscardLsb : 5;
     328             :   uint32_t aImmOffset : 5;
     329             :   uint32_t bImmSize : 6;
     330             :   uint32_t bImmDiscardLsb : 5;
     331             :   uint32_t bImmOffset : 5;
     332             : };
     333             : 
     334             : struct BaseAtDcIcTlbi {
     335             :   uint32_t immVerifyMask : 14;
     336             :   uint32_t immVerifyData : 14;
     337             :   uint32_t mandatoryReg : 1;
     338             : };
     339             : 
     340             : struct BaseAdcSbc {
     341             :   uint32_t opcode;
     342             : };
     343             : 
     344             : struct BaseAddSub {
     345             :   uint32_t shiftedOp  : 10; // sf|.......|Sh|.|Rm|  Imm:6 |Rn|Rd|
     346             :   uint32_t extendedOp : 10; // sf|.......|..|.|Rm|Opt|Imm3|Rn|Rd|
     347             :   uint32_t immediateOp: 10; // sf|.......|Sh|    Imm:12   |Rn|Rd|
     348             : };
     349             : 
     350             : struct BaseAdr {
     351           0 :   M_OPCODE(opcode, 22)
     352             :   OffsetType offsetType : 8;
     353             : };
     354             : 
     355             : struct BaseBfm {
     356             :   uint32_t opcode;         // sf|........|N|ImmR:6|ImmS:6|Rn|Rd|
     357             : };
     358             : 
     359             : struct BaseCmpCmn {
     360             :   uint32_t shiftedOp  : 10; // sf|.......|Sh|.|Rm|  Imm:6 |Rn|11111|
     361             :   uint32_t extendedOp : 10; // sf|.......|..|.|Rm|Opt|Imm3|Rn|11111|
     362             :   uint32_t immediateOp: 10; // sf|.......|Sh|    Imm:12   |Rn|11111|
     363             : };
     364             : 
     365             : struct BaseExtend {
     366           0 :   M_OPCODE(opcode, 22)      // sf|........|N|......|......|Rn|Rd|
     367             :   uint32_t rType : 2;
     368             :   uint32_t u : 1;
     369             : };
     370             : 
     371             : struct BaseLogical {
     372             :   uint32_t shiftedOp  : 10; // sf|.......|Sh|.|Rm|  Imm:6 |Rn|Rd|
     373             :   uint32_t immediateOp: 10; // sf|........|N|ImmR:6|ImmS:6|Rn|Rd|
     374             :   uint32_t negateImm  : 1 ; // True if this is an operation that must negate IMM.
     375             : };
     376             : 
     377             : struct BaseMvnNeg {
     378             :   uint32_t opcode;
     379             : };
     380             : 
     381             : struct BaseShift {
     382           0 :   M_OPCODE(registerOp, 22)
     383           0 :   M_OPCODE(immediateOp, 22)
     384             :   uint32_t ror : 2;
     385             : };
     386             : 
     387             : struct BaseTst {
     388             :   uint32_t shiftedOp  : 10; // sf|.......|Sh|.|Rm|  Imm:6 |Rn|11111|
     389             :   uint32_t immediateOp: 10; // sf|........|N|ImmR:6|ImmS:6|Rn|11111|
     390             : };
     391             : 
     392             : struct BaseRM_NoImm {
     393           0 :   M_OPCODE(opcode, 22)
     394             :   uint32_t rType : 2;
     395             :   uint32_t rHiId : 6;
     396             :   uint32_t xOffset : 5;
     397             : };
     398             : 
     399             : struct BaseRM_SImm9 {
     400           0 :   M_OPCODE(offsetOp, 22)
     401           0 :   M_OPCODE(prePostOp, 22)
     402             :   uint32_t rType : 2;
     403             :   uint32_t rHiId : 6;
     404             :   uint32_t xOffset : 5;
     405             :   uint32_t immShift : 4;
     406             : };
     407             : 
     408             : struct BaseRM_SImm10 {
     409           0 :   M_OPCODE(opcode, 22)
     410             :   uint32_t rType : 2;
     411             :   uint32_t rHiId : 6;
     412             :   uint32_t xOffset : 5;
     413             :   uint32_t immShift : 4;
     414             : };
     415             : 
     416             : struct BaseLdSt {
     417             :   uint32_t uOffsetOp  : 10;
     418             :   uint32_t prePostOp  : 11;
     419             :   uint32_t registerOp : 11;
     420             :   uint32_t literalOp  : 8;
     421             :   uint32_t rType      : 2;
     422             :   uint32_t xOffset    : 5;
     423             :   uint32_t uOffsetShift : 3;
     424             :   uint32_t uAltInstId : 14;
     425             : };
     426             : 
     427             : struct BaseLdpStp {
     428             :   uint32_t offsetOp : 10;
     429             :   uint32_t prePostOp : 10;
     430             :   uint32_t rType : 2;
     431             :   uint32_t xOffset : 5;
     432             :   uint32_t offsetShift : 3;
     433             : };
     434             : 
     435             : struct BaseStx {
     436           0 :   M_OPCODE(opcode, 22)
     437             :   uint32_t rType : 2;
     438             :   uint32_t xOffset : 5;
     439             : };
     440             : 
     441             : struct BaseLdxp {
     442           0 :   M_OPCODE(opcode, 22)
     443             :   uint32_t rType : 2;
     444             :   uint32_t xOffset : 5;
     445             : };
     446             : 
     447             : struct BaseStxp {
     448           0 :   M_OPCODE(opcode, 22)
     449             :   uint32_t rType : 2;
     450             :   uint32_t xOffset : 5;
     451             : };
     452             : 
     453             : struct BaseAtomicOp {
     454           0 :   M_OPCODE(opcode, 22)
     455             :   uint32_t rType : 2;
     456             :   uint32_t xOffset : 5;
     457             :   uint32_t zr : 1;
     458             : };
     459             : 
     460             : struct BaseAtomicSt {
     461           0 :   M_OPCODE(opcode, 22)
     462             :   uint32_t rType : 2;
     463             :   uint32_t xOffset : 5;
     464             : };
     465             : 
     466             : struct BaseAtomicCasp {
     467           0 :   M_OPCODE(opcode, 22)
     468             :   uint32_t rType : 2;
     469             :   uint32_t xOffset : 5;
     470             : };
     471             : 
     472             : typedef BaseOp BaseBranchReg;
     473             : typedef BaseOp BaseBranchRel;
     474             : typedef BaseOp BaseBranchCmp;
     475             : typedef BaseOp BaseBranchTst;
     476             : typedef BaseOp BaseExtract;
     477             : typedef BaseOp BaseBfc;
     478             : typedef BaseOp BaseBfi;
     479             : typedef BaseOp BaseBfx;
     480             : typedef BaseOp BaseCCmp;
     481             : typedef BaseOp BaseCInc;
     482             : typedef BaseOp BaseCSet;
     483             : typedef BaseOp BaseCSel;
     484             : typedef BaseOp BaseMovKNZ;
     485             : typedef BaseOp BaseMull;
     486             : 
     487             : struct FSimdGeneric {
     488             :   uint32_t _scalarOp : 28;
     489             :   uint32_t _scalarHf : 4;
     490             :   uint32_t _vectorOp : 28;
     491             :   uint32_t _vectorHf : 4;
     492             : 
     493           0 :   constexpr uint32_t scalarOp() const noexcept { return uint32_t(_scalarOp) << 10; }
     494           0 :   constexpr uint32_t vectorOp() const noexcept { return uint32_t(_vectorOp) << 10; }
     495           0 :   constexpr uint32_t scalarHf() const noexcept { return uint32_t(_scalarHf); }
     496           0 :   constexpr uint32_t vectorHf() const noexcept { return uint32_t(_vectorHf); }
     497             : };
     498             : 
     499             : typedef FSimdGeneric FSimdVV;
     500             : typedef FSimdGeneric FSimdVVV;
     501             : typedef FSimdGeneric FSimdVVVV;
     502             : 
     503             : struct FSimdSV {
     504             :   uint32_t opcode;
     505             : };
     506             : 
     507             : struct FSimdVVVe {
     508             :   uint32_t _scalarOp : 28;
     509             :   uint32_t _scalarHf : 4;
     510             :   uint32_t _vectorOp;
     511             :   uint32_t _elementOp;
     512             : 
     513           0 :   constexpr uint32_t scalarOp() const noexcept { return uint32_t(_scalarOp) << 10; }
     514           0 :   constexpr uint32_t scalarHf() const noexcept { return uint32_t(_scalarHf); };
     515           0 :   constexpr uint32_t vectorOp() const noexcept { return uint32_t(_vectorOp) << 10; }
     516             :   constexpr uint32_t vectorHf() const noexcept { return kHF_C; }
     517           0 :   constexpr uint32_t elementScalarOp() const noexcept { return (uint32_t(_elementOp) << 10) | (0x5u << 28); }
     518           0 :   constexpr uint32_t elementVectorOp() const noexcept { return (uint32_t(_elementOp) << 10); }
     519             : };
     520             : 
     521             : struct SimdFcadd {
     522             :   uint32_t _opcode;
     523             : 
     524           0 :   constexpr uint32_t opcode() const noexcept { return _opcode << 10; }
     525             : };
     526             : 
     527             : struct SimdFcmla {
     528             :   uint32_t _regularOp;
     529             :   uint32_t _elementOp;
     530             : 
     531           0 :   constexpr uint32_t regularOp() const noexcept { return uint32_t(_regularOp) << 10; }
     532           0 :   constexpr uint32_t elementOp() const noexcept { return (uint32_t(_elementOp) << 10); }
     533             : };
     534             : 
     535             : struct SimdFccmpFccmpe {
     536             :   uint32_t _opcode;
     537           0 :   constexpr uint32_t opcode() const noexcept { return _opcode; }
     538             : };
     539             : 
     540             : struct SimdFcm {
     541             :   uint32_t _registerOp : 28;
     542             :   uint32_t _registerHf : 4;
     543             : 
     544             :   uint32_t _zeroOp : 28;
     545             : 
     546           0 :   constexpr bool hasRegisterOp() const noexcept { return _registerOp != 0; }
     547           0 :   constexpr bool hasZeroOp() const noexcept { return _zeroOp != 0; }
     548             : 
     549           0 :   constexpr uint32_t registerScalarOp() const noexcept { return (uint32_t(_registerOp) << 10) | (0x5u << 28); }
     550           0 :   constexpr uint32_t registerVectorOp() const noexcept { return uint32_t(_registerOp) << 10; }
     551             :   constexpr uint32_t registerScalarHf() const noexcept { return uint32_t(_registerHf); }
     552           0 :   constexpr uint32_t registerVectorHf() const noexcept { return uint32_t(_registerHf); }
     553             : 
     554           0 :   constexpr uint32_t zeroScalarOp() const noexcept { return (uint32_t(_zeroOp) << 10) | (0x5u << 28); }
     555           0 :   constexpr uint32_t zeroVectorOp() const noexcept { return (uint32_t(_zeroOp) << 10); }
     556             : };
     557             : 
     558             : struct SimdFcmpFcmpe {
     559             :   uint32_t _opcode;
     560           0 :   constexpr uint32_t opcode() const noexcept { return _opcode; }
     561             : };
     562             : 
     563             : struct SimdFcvtLN {
     564             :   uint32_t _opcode : 22;
     565             :   uint32_t _isCvtxn : 1;
     566             :   uint32_t _hasScalar : 1;
     567             : 
     568           0 :   constexpr uint32_t scalarOp() const noexcept { return (uint32_t(_opcode) << 10) | (0x5u << 28); }
     569           0 :   constexpr uint32_t vectorOp() const noexcept { return (uint32_t(_opcode) << 10); }
     570             : 
     571           0 :   constexpr uint32_t isCvtxn() const noexcept { return _isCvtxn; }
     572           0 :   constexpr uint32_t hasScalar() const noexcept { return _hasScalar; }
     573             : };
     574             : 
     575             : struct SimdFcvtSV {
     576             :   uint32_t _vectorIntOp;
     577             :   uint32_t _vectorFpOp;
     578             :   uint32_t _generalOp : 31;
     579             :   uint32_t _isFloatToInt : 1;
     580             : 
     581           0 :   constexpr uint32_t scalarIntOp() const noexcept { return (uint32_t(_vectorIntOp) << 10) | (0x5u << 28); }
     582           0 :   constexpr uint32_t vectorIntOp() const noexcept { return uint32_t(_vectorIntOp) << 10; }
     583           0 :   constexpr uint32_t scalarFpOp() const noexcept { return (uint32_t(_vectorFpOp) << 10) | (0x5u << 28); }
     584           0 :   constexpr uint32_t vectorFpOp() const noexcept { return uint32_t(_vectorFpOp) << 10; }
     585           0 :   constexpr uint32_t generalOp() const noexcept { return (uint32_t(_generalOp) << 10); }
     586             : 
     587           0 :   constexpr uint32_t isFloatToInt() const noexcept { return _isFloatToInt; }
     588           0 :   constexpr uint32_t isFixedPoint() const noexcept { return _vectorFpOp != 0; }
     589             : };
     590             : 
     591             : struct SimdFmlal {
     592             :   uint32_t _vectorOp;
     593             :   uint32_t _elementOp;
     594             :   uint8_t _optionalQ;
     595             :   uint8_t tA;
     596             :   uint8_t tB;
     597             :   uint8_t tElement;
     598             : 
     599           0 :   constexpr uint32_t vectorOp() const noexcept { return uint32_t(_vectorOp) << 10; }
     600           0 :   constexpr uint32_t elementOp() const noexcept { return uint32_t(_elementOp) << 10; }
     601           0 :   constexpr uint32_t optionalQ() const noexcept { return _optionalQ; }
     602             : };
     603             : 
     604             : struct FSimdPair {
     605             :   uint32_t _scalarOp;
     606             :   uint32_t _vectorOp;
     607             : 
     608           0 :   constexpr uint32_t scalarOp() const noexcept { return uint32_t(_scalarOp) << 10; }
     609           0 :   constexpr uint32_t vectorOp() const noexcept { return uint32_t(_vectorOp) << 10; }
     610             : };
     611             : 
     612             : struct ISimdVV {
     613           0 :   M_OPCODE(opcode, 22)
     614             :   uint32_t vecOpType : 6;
     615             : };
     616             : 
     617             : struct ISimdVVx {
     618           0 :   M_OPCODE(opcode, 22)
     619             :   uint32_t op0Signature;
     620             :   uint32_t op1Signature;
     621             : };
     622             : 
     623             : struct ISimdSV {
     624           0 :   M_OPCODE(opcode, 22)
     625             :   uint32_t vecOpType : 6;
     626             : };
     627             : 
     628             : struct ISimdVVV {
     629           0 :   M_OPCODE(opcode, 22)
     630             :   uint32_t vecOpType : 6;
     631             : };
     632             : 
     633             : struct ISimdVVVx {
     634           0 :   M_OPCODE(opcode, 22)
     635             :   uint32_t op0Signature;
     636             :   uint32_t op1Signature;
     637             :   uint32_t op2Signature;
     638             : };
     639             : 
     640             : struct ISimdWWV {
     641           0 :   M_OPCODE(opcode, 22)
     642             :   uint32_t vecOpType : 6;
     643             : };
     644             : 
     645             : struct ISimdVVVe {
     646             :   uint32_t regularOp : 26; // 22 bits used.
     647             :   uint32_t regularVecType : 6;
     648             :   uint32_t elementOp : 26; // 22 bits used.
     649             :   uint32_t elementVecType : 6;
     650             : };
     651             : 
     652             : struct ISimdVVVI {
     653           0 :   M_OPCODE(opcode, 22)
     654             :   uint32_t vecOpType : 6;
     655             :   uint32_t immSize : 4;
     656             :   uint32_t immShift : 4;
     657             :   uint32_t imm64HasOneBitLess : 1;
     658             : };
     659             : 
     660             : struct ISimdVVVV {
     661             :   uint32_t opcode : 22;
     662             :   uint32_t vecOpType : 6;
     663             : };
     664             : 
     665             : struct ISimdVVVVx {
     666             :   uint32_t opcode;
     667             :   uint32_t op0Signature;
     668             :   uint32_t op1Signature;
     669             :   uint32_t op2Signature;
     670             :   uint32_t op3Signature;
     671             : };
     672             : 
     673             : struct SimdBicOrr {
     674             :   uint32_t registerOp;   // 22 bits used.
     675             :   uint32_t immediateOp;  // 22 bits used.
     676             : };
     677             : 
     678             : struct SimdCmp {
     679             :   uint32_t regOp;
     680             :   uint32_t zeroOp : 22;
     681             :   uint32_t vecOpType : 6;
     682             : };
     683             : 
     684             : struct SimdDot {
     685             :   uint32_t vectorOp;     // 22 bits used.
     686             :   uint32_t elementOp;    // 22 bits used.
     687             :   uint8_t tA;            // Element-type of the first operand.
     688             :   uint8_t tB;            // Element-type of the second and third operands.
     689             :   uint8_t tElement;      // Element-type of the element index[] operand.
     690             : };
     691             : 
     692             : struct SimdMoviMvni {
     693             :   uint32_t opcode : 31;
     694             :   uint32_t inverted : 1;
     695             : };
     696             : 
     697             : struct SimdLdSt {
     698             :   uint32_t uOffsetOp  : 10;
     699             :   uint32_t prePostOp  : 11;
     700             :   uint32_t registerOp : 11;
     701             :   uint32_t literalOp  : 8;
     702             :   uint32_t uAltInstId : 16;
     703             : };
     704             : 
     705             : struct SimdLdNStN {
     706             :   uint32_t singleOp;
     707             :   uint32_t multipleOp : 22;
     708             :   uint32_t n : 3;
     709             :   uint32_t replicate : 1;
     710             : };
     711             : 
     712             : struct SimdLdpStp {
     713             :   uint32_t offsetOp : 10;
     714             :   uint32_t prePostOp : 10;
     715             : };
     716             : 
     717             : struct SimdLdurStur {
     718             :   uint32_t opcode;
     719             : };
     720             : 
     721             : struct ISimdPair {
     722             :   uint32_t opcode2;      // 22 bits used.
     723             :   uint32_t opcode3 : 26; // 22 bits used.
     724             :   uint32_t opType3 : 6;
     725             : };
     726             : 
     727             : struct SimdShift {
     728             :   uint32_t registerOp;       // 22 bits used.
     729             :   uint32_t immediateOp : 22; // 22 bits used.
     730             :   uint32_t invertedImm : 1;
     731             :   uint32_t vecOpType : 6;
     732             : };
     733             : 
     734             : struct SimdShiftES {
     735             :   uint32_t opcode : 22;
     736             :   uint32_t vecOpType : 6;
     737             : };
     738             : 
     739             : struct SimdSm3tt {
     740             :   uint32_t opcode;
     741             : };
     742             : 
     743             : struct SimdSmovUmov {
     744             :   uint32_t opcode : 22;
     745             :   uint32_t vecOpType : 6;
     746             :   uint32_t isSigned : 1;
     747             : };
     748             : 
     749             : struct SimdSxtlUxtl {
     750             :   uint32_t opcode : 22;
     751             :   uint32_t vecOpType : 6;
     752             : };
     753             : 
     754             : struct SimdTblTbx {
     755             :   uint32_t opcode;
     756             : };
     757             : 
     758             : #undef M_OPCODE
     759             : 
     760             : // ${EncodingDataForward:Begin}
     761             : // ------------------- Automatically generated, do not edit -------------------
     762             : extern const BaseAddSub baseAddSub[4];
     763             : extern const BaseAdr baseAdr[2];
     764             : extern const BaseAtDcIcTlbi baseAtDcIcTlbi[4];
     765             : extern const BaseAtomicCasp baseAtomicCasp[4];
     766             : extern const BaseAtomicOp baseAtomicOp[123];
     767             : extern const BaseAtomicSt baseAtomicSt[48];
     768             : extern const BaseBfc baseBfc[1];
     769             : extern const BaseBfi baseBfi[3];
     770             : extern const BaseBfm baseBfm[3];
     771             : extern const BaseBfx baseBfx[3];
     772             : extern const BaseBranchCmp baseBranchCmp[2];
     773             : extern const BaseBranchReg baseBranchReg[3];
     774             : extern const BaseBranchRel baseBranchRel[2];
     775             : extern const BaseBranchTst baseBranchTst[2];
     776             : extern const BaseCCmp baseCCmp[2];
     777             : extern const BaseCInc baseCInc[3];
     778             : extern const BaseCSel baseCSel[4];
     779             : extern const BaseCSet baseCSet[2];
     780             : extern const BaseCmpCmn baseCmpCmn[2];
     781             : extern const BaseExtend baseExtend[5];
     782             : extern const BaseExtract baseExtract[1];
     783             : extern const BaseLdSt baseLdSt[9];
     784             : extern const BaseLdpStp baseLdpStp[6];
     785             : extern const BaseLdxp baseLdxp[2];
     786             : extern const BaseLogical baseLogical[8];
     787             : extern const BaseMovKNZ baseMovKNZ[3];
     788             : extern const BaseMvnNeg baseMvnNeg[3];
     789             : extern const BaseOp baseOp[23];
     790             : extern const BaseOpImm baseOpImm[14];
     791             : extern const BaseR baseR[10];
     792             : extern const BaseRM_NoImm baseRM_NoImm[21];
     793             : extern const BaseRM_SImm10 baseRM_SImm10[2];
     794             : extern const BaseRM_SImm9 baseRM_SImm9[23];
     795             : extern const BaseRR baseRR[15];
     796             : extern const BaseRRII baseRRII[2];
     797             : extern const BaseRRR baseRRR[26];
     798             : extern const BaseRRRR baseRRRR[6];
     799             : extern const BaseShift baseShift[8];
     800             : extern const BaseStx baseStx[3];
     801             : extern const BaseStxp baseStxp[2];
     802             : extern const BaseTst baseTst[1];
     803             : extern const FSimdPair fSimdPair[5];
     804             : extern const FSimdSV fSimdSV[4];
     805             : extern const FSimdVV fSimdVV[17];
     806             : extern const FSimdVVV fSimdVVV[13];
     807             : extern const FSimdVVVV fSimdVVVV[4];
     808             : extern const FSimdVVVe fSimdVVVe[4];
     809             : extern const ISimdPair iSimdPair[1];
     810             : extern const ISimdSV iSimdSV[7];
     811             : extern const ISimdVV iSimdVV[29];
     812             : extern const ISimdVVV iSimdVVV[65];
     813             : extern const ISimdVVVI iSimdVVVI[2];
     814             : extern const ISimdVVVV iSimdVVVV[2];
     815             : extern const ISimdVVVVx iSimdVVVVx[1];
     816             : extern const ISimdVVVe iSimdVVVe[25];
     817             : extern const ISimdVVVx iSimdVVVx[17];
     818             : extern const ISimdVVx iSimdVVx[13];
     819             : extern const ISimdWWV iSimdWWV[8];
     820             : extern const SimdBicOrr simdBicOrr[2];
     821             : extern const SimdCmp simdCmp[7];
     822             : extern const SimdDot simdDot[5];
     823             : extern const SimdFcadd simdFcadd[1];
     824             : extern const SimdFccmpFccmpe simdFccmpFccmpe[2];
     825             : extern const SimdFcm simdFcm[5];
     826             : extern const SimdFcmla simdFcmla[1];
     827             : extern const SimdFcmpFcmpe simdFcmpFcmpe[2];
     828             : extern const SimdFcvtLN simdFcvtLN[6];
     829             : extern const SimdFcvtSV simdFcvtSV[12];
     830             : extern const SimdFmlal simdFmlal[6];
     831             : extern const SimdLdNStN simdLdNStN[12];
     832             : extern const SimdLdSt simdLdSt[2];
     833             : extern const SimdLdpStp simdLdpStp[4];
     834             : extern const SimdLdurStur simdLdurStur[2];
     835             : extern const SimdMoviMvni simdMoviMvni[2];
     836             : extern const SimdShift simdShift[40];
     837             : extern const SimdShiftES simdShiftES[2];
     838             : extern const SimdSm3tt simdSm3tt[4];
     839             : extern const SimdSmovUmov simdSmovUmov[2];
     840             : extern const SimdSxtlUxtl simdSxtlUxtl[4];
     841             : extern const SimdTblTbx simdTblTbx[2];
     842             : // ----------------------------------------------------------------------------
     843             : // ${EncodingDataForward:End}
     844             : 
     845             : } // {EncodingData}
     846             : 
     847             : // a64::InstDB - InstNameIndex
     848             : // ===========================
     849             : 
     850             : // ${NameLimits:Begin}
     851             : // ------------------- Automatically generated, do not edit -------------------
     852             : enum : uint32_t { kMaxNameSize = 9 };
     853             : // ----------------------------------------------------------------------------
     854             : // ${NameLimits:End}
     855             : 
     856             : struct InstNameIndex {
     857             :   uint16_t start;
     858             :   uint16_t end;
     859             : };
     860             : 
     861             : // a64::InstDB - Tables
     862             : // ====================
     863             : 
     864             : #ifndef ASMJIT_NO_TEXT
     865             : extern const char _nameData[];
     866             : extern const InstNameIndex instNameIndex[26];
     867             : #endif // !ASMJIT_NO_TEXT
     868             : 
     869             : } // {InstDB}
     870             : 
     871             : //! \}
     872             : //! \endcond
     873             : 
     874             : ASMJIT_END_SUB_NAMESPACE
     875             : 
     876             : #endif // ASMJIT_A64_ARMINSTDB_H_P_INCLUDED
     877             : 
     878             : 
     879             : #endif // __PLUMED_HAS_ASMJIT

Generated by: LCOV version 1.16