blob: b9e1673b9317d994590cfeda8449c0f8439f2acb [file] [log] [blame]
Tim Northover3b0846e2014-05-24 12:50:23 +00001//===-- AArch64MCTargetDesc.h - AArch64 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 AArch64 specific target descriptions.
11//
12//===----------------------------------------------------------------------===//
13
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000014#ifndef LLVM_LIB_TARGET_AARCH64_MCTARGETDESC_AARCH64MCTARGETDESC_H
15#define LLVM_LIB_TARGET_AARCH64_MCTARGETDESC_AARCH64MCTARGETDESC_H
Tim Northover3b0846e2014-05-24 12:50:23 +000016
17#include "llvm/Support/DataTypes.h"
Tim Northover3b0846e2014-05-24 12:50:23 +000018
Lang Hames60fbc7c2017-10-10 16:28:07 +000019#include <memory>
20
Tim Northover3b0846e2014-05-24 12:50:23 +000021namespace llvm {
Chad Rosierdcd2a302014-10-22 20:35:57 +000022class formatted_raw_ostream;
Tim Northover3b0846e2014-05-24 12:50:23 +000023class MCAsmBackend;
24class MCCodeEmitter;
25class MCContext;
26class MCInstrInfo;
Chad Rosierdcd2a302014-10-22 20:35:57 +000027class MCInstPrinter;
Tim Northover3b0846e2014-05-24 12:50:23 +000028class MCRegisterInfo;
29class MCObjectWriter;
Chad Rosierdcd2a302014-10-22 20:35:57 +000030class MCStreamer;
Tim Northover3b0846e2014-05-24 12:50:23 +000031class MCSubtargetInfo;
Joel Jones373d7d32016-07-25 17:18:28 +000032class MCTargetOptions;
Rafael Espindola73870dd2015-03-16 21:43:42 +000033class MCTargetStreamer;
Tim Northover3b0846e2014-05-24 12:50:23 +000034class StringRef;
35class Target;
Daniel Sanders50f17232015-09-15 16:17:27 +000036class Triple;
Tim Northover3b0846e2014-05-24 12:50:23 +000037class raw_ostream;
Rafael Espindola5560a4c2015-04-14 22:14:34 +000038class raw_pwrite_stream;
Tim Northover3b0846e2014-05-24 12:50:23 +000039
Mehdi Aminif42454b2016-10-09 23:00:34 +000040Target &getTheAArch64leTarget();
41Target &getTheAArch64beTarget();
42Target &getTheARM64Target();
Tim Northover3b0846e2014-05-24 12:50:23 +000043
44MCCodeEmitter *createAArch64MCCodeEmitter(const MCInstrInfo &MCII,
Eric Christopher0169e422015-03-10 22:03:14 +000045 const MCRegisterInfo &MRI,
46 MCContext &Ctx);
Tim Northover3b0846e2014-05-24 12:50:23 +000047MCAsmBackend *createAArch64leAsmBackend(const Target &T,
Daniel Sanders418caf52015-06-10 10:35:34 +000048 const MCRegisterInfo &MRI,
Joel Jones373d7d32016-07-25 17:18:28 +000049 const Triple &TT, StringRef CPU,
50 const MCTargetOptions &Options);
Tim Northover3b0846e2014-05-24 12:50:23 +000051MCAsmBackend *createAArch64beAsmBackend(const Target &T,
Daniel Sanders418caf52015-06-10 10:35:34 +000052 const MCRegisterInfo &MRI,
Joel Jones373d7d32016-07-25 17:18:28 +000053 const Triple &TT, StringRef CPU,
54 const MCTargetOptions &Options);
Tim Northover3b0846e2014-05-24 12:50:23 +000055
Lang Hames60fbc7c2017-10-10 16:28:07 +000056std::unique_ptr<MCObjectWriter>
57createAArch64ELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI,
58 bool IsLittleEndian, bool IsILP32);
Tim Northover3b0846e2014-05-24 12:50:23 +000059
Lang Hames60fbc7c2017-10-10 16:28:07 +000060std::unique_ptr<MCObjectWriter>
61createAArch64MachObjectWriter(raw_pwrite_stream &OS, uint32_t CPUType,
62 uint32_t CPUSubtype);
Tim Northover3b0846e2014-05-24 12:50:23 +000063
Lang Hames60fbc7c2017-10-10 16:28:07 +000064std::unique_ptr<MCObjectWriter>
65createAArch64WinCOFFObjectWriter(raw_pwrite_stream &OS);
Mandeep Singh Grang0c721722017-06-27 23:58:19 +000066
Rafael Espindola73870dd2015-03-16 21:43:42 +000067MCTargetStreamer *createAArch64AsmTargetStreamer(MCStreamer &S,
68 formatted_raw_ostream &OS,
69 MCInstPrinter *InstPrint,
70 bool isVerboseAsm);
Rafael Espindolacd584a82015-03-19 01:50:16 +000071
72MCTargetStreamer *createAArch64ObjectTargetStreamer(MCStreamer &S,
73 const MCSubtargetInfo &STI);
74
Mandeep Singh Grangd41ac892017-07-20 20:20:00 +000075namespace AArch64_MC {
76void initLLVMToCVRegMapping(MCRegisterInfo *MRI);
77}
78
Alexander Kornienkof00654e2015-06-23 09:49:53 +000079} // End llvm namespace
Tim Northover3b0846e2014-05-24 12:50:23 +000080
81// Defines symbolic names for AArch64 registers. This defines a mapping from
82// register name to register number.
83//
84#define GET_REGINFO_ENUM
85#include "AArch64GenRegisterInfo.inc"
86
87// Defines symbolic names for the AArch64 instructions.
88//
89#define GET_INSTRINFO_ENUM
90#include "AArch64GenInstrInfo.inc"
91
92#define GET_SUBTARGETINFO_ENUM
93#include "AArch64GenSubtargetInfo.inc"
94
95#endif