blob: 63f50778ccdb675983d5a4021edf8deb0fcaa540 [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;
Peter Collingbournedcd7d6c2018-05-21 19:20:29 +000029class MCObjectTargetWriter;
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,
Alex Bradburyb22f7512018-01-03 08:53:05 +000048 const MCSubtargetInfo &STI,
Daniel Sanders418caf52015-06-10 10:35:34 +000049 const MCRegisterInfo &MRI,
Joel Jones373d7d32016-07-25 17:18:28 +000050 const MCTargetOptions &Options);
Tim Northover3b0846e2014-05-24 12:50:23 +000051MCAsmBackend *createAArch64beAsmBackend(const Target &T,
Alex Bradburyb22f7512018-01-03 08:53:05 +000052 const MCSubtargetInfo &STI,
Daniel Sanders418caf52015-06-10 10:35:34 +000053 const MCRegisterInfo &MRI,
Joel Jones373d7d32016-07-25 17:18:28 +000054 const MCTargetOptions &Options);
Tim Northover3b0846e2014-05-24 12:50:23 +000055
Peter Collingbournedcd7d6c2018-05-21 19:20:29 +000056std::unique_ptr<MCObjectTargetWriter>
57createAArch64ELFObjectWriter(uint8_t OSABI, bool IsILP32);
Tim Northover3b0846e2014-05-24 12:50:23 +000058
Peter Collingbournedcd7d6c2018-05-21 19:20:29 +000059std::unique_ptr<MCObjectTargetWriter>
60createAArch64MachObjectWriter(uint32_t CPUType, uint32_t CPUSubtype);
Tim Northover3b0846e2014-05-24 12:50:23 +000061
Peter Collingbournedcd7d6c2018-05-21 19:20:29 +000062std::unique_ptr<MCObjectTargetWriter> createAArch64WinCOFFObjectWriter();
Mandeep Singh Grang0c721722017-06-27 23:58:19 +000063
Rafael Espindola73870dd2015-03-16 21:43:42 +000064MCTargetStreamer *createAArch64AsmTargetStreamer(MCStreamer &S,
65 formatted_raw_ostream &OS,
66 MCInstPrinter *InstPrint,
67 bool isVerboseAsm);
Rafael Espindolacd584a82015-03-19 01:50:16 +000068
69MCTargetStreamer *createAArch64ObjectTargetStreamer(MCStreamer &S,
70 const MCSubtargetInfo &STI);
71
Mandeep Singh Grangd41ac892017-07-20 20:20:00 +000072namespace AArch64_MC {
73void initLLVMToCVRegMapping(MCRegisterInfo *MRI);
74}
75
Alexander Kornienkof00654e2015-06-23 09:49:53 +000076} // End llvm namespace
Tim Northover3b0846e2014-05-24 12:50:23 +000077
78// Defines symbolic names for AArch64 registers. This defines a mapping from
79// register name to register number.
80//
81#define GET_REGINFO_ENUM
82#include "AArch64GenRegisterInfo.inc"
83
84// Defines symbolic names for the AArch64 instructions.
85//
86#define GET_INSTRINFO_ENUM
87#include "AArch64GenInstrInfo.inc"
88
89#define GET_SUBTARGETINFO_ENUM
90#include "AArch64GenSubtargetInfo.inc"
91
92#endif