xref: /freebsd/contrib/llvm-project/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.h (revision a90b9d0159070121c221b966469c3e36d912bf82)
1 //===-- AArch64MCTargetDesc.h - AArch64 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 AArch64 specific target descriptions.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef LLVM_LIB_TARGET_AARCH64_MCTARGETDESC_AARCH64MCTARGETDESC_H
14 #define LLVM_LIB_TARGET_AARCH64_MCTARGETDESC_AARCH64MCTARGETDESC_H
15 
16 #include "llvm/MC/MCInstrDesc.h"
17 #include "llvm/Support/DataTypes.h"
18 
19 #include <memory>
20 
21 namespace llvm {
22 class formatted_raw_ostream;
23 class MCAsmBackend;
24 class MCCodeEmitter;
25 class MCContext;
26 class MCInst;
27 class MCInstrInfo;
28 class MCInstPrinter;
29 class MCRegisterInfo;
30 class MCObjectTargetWriter;
31 class MCStreamer;
32 class MCSubtargetInfo;
33 class MCTargetOptions;
34 class MCTargetStreamer;
35 class Target;
36 class Triple;
37 
38 MCCodeEmitter *createAArch64MCCodeEmitter(const MCInstrInfo &MCII,
39                                           MCContext &Ctx);
40 MCAsmBackend *createAArch64leAsmBackend(const Target &T,
41                                         const MCSubtargetInfo &STI,
42                                         const MCRegisterInfo &MRI,
43                                         const MCTargetOptions &Options);
44 MCAsmBackend *createAArch64beAsmBackend(const Target &T,
45                                         const MCSubtargetInfo &STI,
46                                         const MCRegisterInfo &MRI,
47                                         const MCTargetOptions &Options);
48 
49 std::unique_ptr<MCObjectTargetWriter>
50 createAArch64ELFObjectWriter(uint8_t OSABI, bool IsILP32);
51 
52 std::unique_ptr<MCObjectTargetWriter>
53 createAArch64MachObjectWriter(uint32_t CPUType, uint32_t CPUSubtype,
54                               bool IsILP32);
55 
56 std::unique_ptr<MCObjectTargetWriter>
57 createAArch64WinCOFFObjectWriter(const Triple &TheTriple);
58 
59 MCTargetStreamer *createAArch64AsmTargetStreamer(MCStreamer &S,
60                                                  formatted_raw_ostream &OS,
61                                                  MCInstPrinter *InstPrint,
62                                                  bool isVerboseAsm);
63 
64 namespace AArch64_MC {
65 void initLLVMToCVRegMapping(MCRegisterInfo *MRI);
66 bool isHForm(const MCInst &MI, const MCInstrInfo *MCII);
67 bool isQForm(const MCInst &MI, const MCInstrInfo *MCII);
68 bool isFpOrNEON(const MCInst &MI, const MCInstrInfo *MCII);
69 }
70 
71 namespace AArch64 {
72 enum OperandType {
73   OPERAND_IMPLICIT_IMM_0 = MCOI::OPERAND_FIRST_TARGET,
74 };
75 } // namespace AArch64
76 
77 } // End llvm namespace
78 
79 // Defines symbolic names for AArch64 registers.  This defines a mapping from
80 // register name to register number.
81 //
82 #define GET_REGINFO_ENUM
83 #include "AArch64GenRegisterInfo.inc"
84 
85 // Defines symbolic names for the AArch64 instructions.
86 //
87 #define GET_INSTRINFO_ENUM
88 #define GET_INSTRINFO_MC_HELPER_DECLS
89 #include "AArch64GenInstrInfo.inc"
90 
91 #define GET_SUBTARGETINFO_ENUM
92 #include "AArch64GenSubtargetInfo.inc"
93 
94 #endif
95