blob: a1b93e576642b5394dbb29ae81eb04c7b0f7e59d [file] [log] [blame]
Evan Cheng928ce722011-07-06 22:02:34 +00001//===-- ARMMCTargetDesc.h - ARM 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 ARM specific target descriptions.
11//
12//===----------------------------------------------------------------------===//
13
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000014#ifndef LLVM_LIB_TARGET_ARM_MCTARGETDESC_ARMMCTARGETDESC_H
15#define LLVM_LIB_TARGET_ARM_MCTARGETDESC_ARMMCTARGETDESC_H
Evan Cheng928ce722011-07-06 22:02:34 +000016
NAKAMURA Takumi287bc6b2011-07-23 01:16:22 +000017#include "llvm/Support/DataTypes.h"
Lang Hames232cdb42017-10-10 16:59:01 +000018#include <memory>
Evan Cheng2bd65362011-07-07 00:08:19 +000019#include <string>
20
Evan Cheng928ce722011-07-06 22:02:34 +000021namespace llvm {
Rafael Espindolaa17151a2013-10-08 13:08:17 +000022class formatted_raw_ostream;
Evan Cheng5928e692011-07-25 23:24:55 +000023class MCAsmBackend;
Evan Chengad5f4852011-07-23 00:00:19 +000024class MCCodeEmitter;
25class MCContext;
26class MCInstrInfo;
Rafael Espindolaa17151a2013-10-08 13:08:17 +000027class MCInstPrinter;
Evan Chengad5f4852011-07-23 00:00:19 +000028class MCObjectWriter;
Jim Grosbachc3b04272012-05-15 17:35:52 +000029class MCRegisterInfo;
Evan Cheng4d1ca962011-07-08 01:53:10 +000030class MCSubtargetInfo;
Rafael Espindolaa17151a2013-10-08 13:08:17 +000031class MCStreamer;
Joel Jones373d7d32016-07-25 17:18:28 +000032class MCTargetOptions;
Ahmed Bougachaad1084d2013-05-24 00:39:57 +000033class MCRelocationInfo;
Peter Collingbourne20c72592015-02-19 00:45:02 +000034class MCTargetStreamer;
Evan Cheng2bd65362011-07-07 00:08:19 +000035class StringRef;
Evan Chengad5f4852011-07-23 00:00:19 +000036class Target;
Daniel Sanders50f17232015-09-15 16:17:27 +000037class Triple;
Evan Chengad5f4852011-07-23 00:00:19 +000038class raw_ostream;
Rafael Espindola5560a4c2015-04-14 22:14:34 +000039class raw_pwrite_stream;
Evan Cheng928ce722011-07-06 22:02:34 +000040
Mehdi Aminif42454b2016-10-09 23:00:34 +000041Target &getTheARMLETarget();
42Target &getTheThumbLETarget();
43Target &getTheARMBETarget();
44Target &getTheThumbBETarget();
Evan Cheng2bd65362011-07-07 00:08:19 +000045
46namespace ARM_MC {
Daniel Sanders50f17232015-09-15 16:17:27 +000047std::string ParseARMTriple(const Triple &TT, StringRef CPU);
Evan Cheng4d1ca962011-07-08 01:53:10 +000048
Daniel Sandersa73f1fd2015-06-10 12:11:26 +000049/// Create a ARM MCSubtargetInfo instance. This is exposed so Asm parser, etc.
50/// do not need to go through TargetRegistry.
Daniel Sanders50f17232015-09-15 16:17:27 +000051MCSubtargetInfo *createARMMCSubtargetInfo(const Triple &TT, StringRef CPU,
Daniel Sandersa73f1fd2015-06-10 12:11:26 +000052 StringRef FS);
Evan Cheng2bd65362011-07-07 00:08:19 +000053}
54
Peter Collingbourne20c72592015-02-19 00:45:02 +000055MCTargetStreamer *createARMNullTargetStreamer(MCStreamer &S);
Rafael Espindola73870dd2015-03-16 21:43:42 +000056MCTargetStreamer *createARMTargetAsmStreamer(MCStreamer &S,
57 formatted_raw_ostream &OS,
58 MCInstPrinter *InstPrint,
59 bool isVerboseAsm);
Rafael Espindolacd584a82015-03-19 01:50:16 +000060MCTargetStreamer *createARMObjectTargetStreamer(MCStreamer &S,
61 const MCSubtargetInfo &STI);
Peter Collingbourne20c72592015-02-19 00:45:02 +000062
Christian Pirkerdc9ff752014-04-01 15:19:30 +000063MCCodeEmitter *createARMLEMCCodeEmitter(const MCInstrInfo &MCII,
Christian Pirker2a111602014-03-28 14:35:30 +000064 const MCRegisterInfo &MRI,
Christian Pirker2a111602014-03-28 14:35:30 +000065 MCContext &Ctx);
66
Christian Pirkerdc9ff752014-04-01 15:19:30 +000067MCCodeEmitter *createARMBEMCCodeEmitter(const MCInstrInfo &MCII,
Christian Pirker2a111602014-03-28 14:35:30 +000068 const MCRegisterInfo &MRI,
Christian Pirker2a111602014-03-28 14:35:30 +000069 MCContext &Ctx);
Evan Chengad5f4852011-07-23 00:00:19 +000070
Bill Wendling58e2d3d2013-09-09 02:37:14 +000071MCAsmBackend *createARMAsmBackend(const Target &T, const MCRegisterInfo &MRI,
Daniel Sanders50f17232015-09-15 16:17:27 +000072 const Triple &TT, StringRef CPU,
Joel Jones373d7d32016-07-25 17:18:28 +000073 const MCTargetOptions &Options,
Christian Pirker2a111602014-03-28 14:35:30 +000074 bool IsLittleEndian);
75
Christian Pirkerdc9ff752014-04-01 15:19:30 +000076MCAsmBackend *createARMLEAsmBackend(const Target &T, const MCRegisterInfo &MRI,
Joel Jones373d7d32016-07-25 17:18:28 +000077 const Triple &TT, StringRef CPU,
78 const MCTargetOptions &Options);
Evan Chengad5f4852011-07-23 00:00:19 +000079
Christian Pirkerdc9ff752014-04-01 15:19:30 +000080MCAsmBackend *createARMBEAsmBackend(const Target &T, const MCRegisterInfo &MRI,
Joel Jones373d7d32016-07-25 17:18:28 +000081 const Triple &TT, StringRef CPU,
82 const MCTargetOptions &Options);
Christian Pirker2a111602014-03-28 14:35:30 +000083
Daniel Sanders418caf52015-06-10 10:35:34 +000084MCAsmBackend *createThumbLEAsmBackend(const Target &T,
85 const MCRegisterInfo &MRI,
Joel Jones373d7d32016-07-25 17:18:28 +000086 const Triple &TT, StringRef CPU,
87 const MCTargetOptions &Options);
Christian Pirker2a111602014-03-28 14:35:30 +000088
Daniel Sanders418caf52015-06-10 10:35:34 +000089MCAsmBackend *createThumbBEAsmBackend(const Target &T,
90 const MCRegisterInfo &MRI,
Joel Jones373d7d32016-07-25 17:18:28 +000091 const Triple &TT, StringRef CPU,
92 const MCTargetOptions &Options);
Christian Pirker2a111602014-03-28 14:35:30 +000093
Rafael Espindolacd584a82015-03-19 01:50:16 +000094// Construct a PE/COFF machine code streamer which will generate a PE/COFF
95// object file.
Saleem Abdulrasool84b952b2014-04-27 03:48:22 +000096MCStreamer *createARMWinCOFFStreamer(MCContext &Context, MCAsmBackend &MAB,
Rafael Espindola5560a4c2015-04-14 22:14:34 +000097 raw_pwrite_stream &OS,
David Majnemer03e2cc32015-12-21 22:09:27 +000098 MCCodeEmitter *Emitter, bool RelaxAll,
99 bool IncrementalLinkerCompatible);
Saleem Abdulrasool84b952b2014-04-27 03:48:22 +0000100
Rafael Espindoladf7305a2015-04-09 17:10:57 +0000101/// Construct an ELF Mach-O object writer.
Lang Hames60fbc7c2017-10-10 16:28:07 +0000102std::unique_ptr<MCObjectWriter> createARMELFObjectWriter(raw_pwrite_stream &OS,
103 uint8_t OSABI,
104 bool IsLittleEndian);
Rafael Espindolaa0124052011-12-22 00:37:50 +0000105
Rafael Espindoladf7305a2015-04-09 17:10:57 +0000106/// Construct an ARM Mach-O object writer.
Lang Hames60fbc7c2017-10-10 16:28:07 +0000107std::unique_ptr<MCObjectWriter> createARMMachObjectWriter(raw_pwrite_stream &OS,
108 bool Is64Bit,
109 uint32_t CPUType,
110 uint32_t CPUSubtype);
Evan Chengad5f4852011-07-23 00:00:19 +0000111
Rafael Espindoladf7305a2015-04-09 17:10:57 +0000112/// Construct an ARM PE/COFF object writer.
Lang Hames60fbc7c2017-10-10 16:28:07 +0000113std::unique_ptr<MCObjectWriter>
114createARMWinCOFFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit);
Ahmed Bougachaad1084d2013-05-24 00:39:57 +0000115
Rafael Espindoladf7305a2015-04-09 17:10:57 +0000116/// Construct ARM Mach-O relocation info.
Ahmed Bougachaad1084d2013-05-24 00:39:57 +0000117MCRelocationInfo *createARMMachORelocationInfo(MCContext &Ctx);
Alexander Kornienkof00654e2015-06-23 09:49:53 +0000118} // End llvm namespace
Evan Cheng928ce722011-07-06 22:02:34 +0000119
120// Defines symbolic names for ARM registers. This defines a mapping from
121// register name to register number.
122//
123#define GET_REGINFO_ENUM
124#include "ARMGenRegisterInfo.inc"
125
126// Defines symbolic names for the ARM instructions.
127//
128#define GET_INSTRINFO_ENUM
129#include "ARMGenInstrInfo.inc"
130
Evan Chengbc153d42011-07-14 20:59:42 +0000131#define GET_SUBTARGETINFO_ENUM
132#include "ARMGenSubtargetInfo.inc"
133
Evan Cheng928ce722011-07-06 22:02:34 +0000134#endif