1//===-- HexagonMCTargetDesc.h - Hexagon Target Descriptions -----*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file provides Hexagon specific target descriptions.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCTARGETDESC_H
15#define LLVM_LIB_TARGET_HEXAGON_MCTARGETDESC_HEXAGONMCTARGETDESC_H
16
17#include <cstdint>
18
19#include "llvm/Support/CommandLine.h"
20
21namespace llvm {
22struct InstrItinerary;
23struct InstrStage;
24class MCAsmBackend;
25class MCCodeEmitter;
26class MCContext;
27class MCInstrInfo;
28class MCObjectWriter;
29class MCRegisterInfo;
30class MCSubtargetInfo;
31class Target;
32class Triple;
33class StringRef;
34class raw_ostream;
35class raw_pwrite_stream;
36
37extern Target TheHexagonTarget;
38extern cl::opt<bool> HexagonDisableCompound;
39extern cl::opt<bool> HexagonDisableDuplex;
40extern const InstrStage HexagonStages[];
41
42MCInstrInfo *createHexagonMCInstrInfo();
43
44MCCodeEmitter *createHexagonMCCodeEmitter(const MCInstrInfo &MCII,
45                                          const MCRegisterInfo &MRI,
46                                          MCContext &MCT);
47
48MCAsmBackend *createHexagonAsmBackend(const Target &T,
49                                      const MCRegisterInfo &MRI,
50                                      const Triple &TT, StringRef CPU);
51
52MCObjectWriter *createHexagonELFObjectWriter(raw_pwrite_stream &OS,
53                                             uint8_t OSABI, StringRef CPU);
54
55namespace HEXAGON_MC {
56  StringRef selectHexagonCPU(const Triple &TT, StringRef CPU);
57}
58
59} // End llvm namespace
60
61// Define symbolic names for Hexagon registers.  This defines a mapping from
62// register name to register number.
63//
64#define GET_REGINFO_ENUM
65#include "HexagonGenRegisterInfo.inc"
66
67// Defines symbolic names for the Hexagon instructions.
68//
69#define GET_INSTRINFO_ENUM
70#include "HexagonGenInstrInfo.inc"
71
72#define GET_SUBTARGETINFO_ENUM
73#include "HexagonGenSubtargetInfo.inc"
74
75#endif
76