1 //===-- HexagonMCTargetDesc.h - Hexagon Target Descriptions -----*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file provides Hexagon specific target descriptions.
12 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCTARGETDESC_H
15 #define LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCTARGETDESC_H
17 #include "llvm/Support/CommandLine.h"
23 struct InstrItinerary;
30 class MCObjectTargetWriter;
32 class MCSubtargetInfo;
33 class MCTargetOptions;
38 class raw_pwrite_stream;
40 Target &getTheHexagonTarget();
41 extern cl::opt<bool> HexagonDisableCompound;
42 extern cl::opt<bool> HexagonDisableDuplex;
43 extern const InstrStage HexagonStages[];
45 MCInstrInfo *createHexagonMCInstrInfo();
46 MCRegisterInfo *createHexagonMCRegisterInfo(StringRef TT);
48 namespace Hexagon_MC {
49 StringRef selectHexagonCPU(StringRef CPU);
51 FeatureBitset completeHVXFeatures(const FeatureBitset &FB);
52 /// Create a Hexagon MCSubtargetInfo instance. This is exposed so Asm parser,
53 /// etc. do not need to go through TargetRegistry.
54 MCSubtargetInfo *createHexagonMCSubtargetInfo(const Triple &TT, StringRef CPU,
56 unsigned GetELFFlags(const MCSubtargetInfo &STI);
59 MCCodeEmitter *createHexagonMCCodeEmitter(const MCInstrInfo &MCII,
60 const MCRegisterInfo &MRI,
63 MCAsmBackend *createHexagonAsmBackend(const Target &T,
64 const MCSubtargetInfo &STI,
65 const MCRegisterInfo &MRI,
66 const MCTargetOptions &Options);
68 std::unique_ptr<MCObjectTargetWriter>
69 createHexagonELFObjectWriter(uint8_t OSABI, StringRef CPU);
71 unsigned HexagonGetLastSlot();
73 } // End llvm namespace
75 // Define symbolic names for Hexagon registers. This defines a mapping from
76 // register name to register number.
78 #define GET_REGINFO_ENUM
79 #include "HexagonGenRegisterInfo.inc"
81 // Defines symbolic names for the Hexagon instructions.
83 #define GET_INSTRINFO_ENUM
84 #define GET_INSTRINFO_SCHED_ENUM
85 #include "HexagonGenInstrInfo.inc"
87 #define GET_SUBTARGETINFO_ENUM
88 #include "HexagonGenSubtargetInfo.inc"
90 #endif // LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCTARGETDESC_H