[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / lib / Target / Hexagon / MCTargetDesc / HexagonMCTargetDesc.h
blob5bf7c9a1a908d64be5d353d65825c09d33d112fd
1 //===-- HexagonMCTargetDesc.h - Hexagon Target Descriptions -----*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file provides Hexagon specific target descriptions.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCTARGETDESC_H
14 #define LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCTARGETDESC_H
16 #include "llvm/MC/MCRegisterInfo.h"
17 #include "llvm/Support/CommandLine.h"
18 #include <cstdint>
19 #include <string>
21 #define Hexagon_POINTER_SIZE 4
23 #define Hexagon_PointerSize (Hexagon_POINTER_SIZE)
24 #define Hexagon_PointerSize_Bits (Hexagon_POINTER_SIZE * 8)
25 #define Hexagon_WordSize Hexagon_PointerSize
26 #define Hexagon_WordSize_Bits Hexagon_PointerSize_Bits
28 // allocframe saves LR and FP on stack before allocating
29 // a new stack frame. This takes 8 bytes.
30 #define HEXAGON_LRFP_SIZE 8
32 // Normal instruction size (in bytes).
33 #define HEXAGON_INSTR_SIZE 4
35 // Maximum number of words and instructions in a packet.
36 #define HEXAGON_PACKET_SIZE 4
37 #define HEXAGON_MAX_PACKET_SIZE (HEXAGON_PACKET_SIZE * HEXAGON_INSTR_SIZE)
38 // Minimum number of instructions in an end-loop packet.
39 #define HEXAGON_PACKET_INNER_SIZE 2
40 #define HEXAGON_PACKET_OUTER_SIZE 3
41 // Maximum number of instructions in a packet before shuffling,
42 // including a compound one or a duplex or an extender.
43 #define HEXAGON_PRESHUFFLE_PACKET_SIZE (HEXAGON_PACKET_SIZE + 3)
45 // Name of the global offset table as defined by the Hexagon ABI
46 #define HEXAGON_GOT_SYM_NAME "_GLOBAL_OFFSET_TABLE_"
48 namespace llvm {
50 struct InstrStage;
51 class FeatureBitset;
52 class MCAsmBackend;
53 class MCCodeEmitter;
54 class MCContext;
55 class MCInstrInfo;
56 class MCObjectTargetWriter;
57 class MCRegisterInfo;
58 class MCSubtargetInfo;
59 class MCTargetOptions;
60 class Target;
61 class Triple;
62 class StringRef;
64 extern cl::opt<bool> HexagonDisableCompound;
65 extern cl::opt<bool> HexagonDisableDuplex;
66 extern const InstrStage HexagonStages[];
68 MCInstrInfo *createHexagonMCInstrInfo();
69 MCRegisterInfo *createHexagonMCRegisterInfo(StringRef TT);
71 namespace Hexagon_MC {
72 StringRef selectHexagonCPU(StringRef CPU);
74 FeatureBitset completeHVXFeatures(const FeatureBitset &FB);
75 /// Create a Hexagon MCSubtargetInfo instance. This is exposed so Asm parser,
76 /// etc. do not need to go through TargetRegistry.
77 MCSubtargetInfo *createHexagonMCSubtargetInfo(const Triple &TT, StringRef CPU,
78 StringRef FS);
79 MCSubtargetInfo const *getArchSubtarget(MCSubtargetInfo const *STI);
80 void addArchSubtarget(MCSubtargetInfo const *STI,
81 StringRef FS);
82 unsigned GetELFFlags(const MCSubtargetInfo &STI);
84 llvm::ArrayRef<MCPhysReg> GetVectRegRev();
87 MCCodeEmitter *createHexagonMCCodeEmitter(const MCInstrInfo &MCII,
88 const MCRegisterInfo &MRI,
89 MCContext &MCT);
91 MCAsmBackend *createHexagonAsmBackend(const Target &T,
92 const MCSubtargetInfo &STI,
93 const MCRegisterInfo &MRI,
94 const MCTargetOptions &Options);
96 std::unique_ptr<MCObjectTargetWriter>
97 createHexagonELFObjectWriter(uint8_t OSABI, StringRef CPU);
99 unsigned HexagonGetLastSlot();
100 unsigned HexagonConvertUnits(unsigned ItinUnits, unsigned *Lanes);
102 } // End llvm namespace
104 // Define symbolic names for Hexagon registers. This defines a mapping from
105 // register name to register number.
107 #define GET_REGINFO_ENUM
108 #include "HexagonGenRegisterInfo.inc"
110 // Defines symbolic names for the Hexagon instructions.
112 #define GET_INSTRINFO_ENUM
113 #define GET_INSTRINFO_SCHED_ENUM
114 #include "HexagonGenInstrInfo.inc"
116 #define GET_SUBTARGETINFO_ENUM
117 #include "HexagonGenSubtargetInfo.inc"
119 #endif // LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCTARGETDESC_H