summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARC/MCTargetDesc/ARCMCTargetDesc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Target/ARC/MCTargetDesc/ARCMCTargetDesc.cpp')
-rw-r--r--llvm/lib/Target/ARC/MCTargetDesc/ARCMCTargetDesc.cpp103
1 files changed, 103 insertions, 0 deletions
diff --git a/llvm/lib/Target/ARC/MCTargetDesc/ARCMCTargetDesc.cpp b/llvm/lib/Target/ARC/MCTargetDesc/ARCMCTargetDesc.cpp
new file mode 100644
index 00000000000..17be15f730d
--- /dev/null
+++ b/llvm/lib/Target/ARC/MCTargetDesc/ARCMCTargetDesc.cpp
@@ -0,0 +1,103 @@
+//===- ARCMCTargetDesc.cpp - ARC Target Descriptions ------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file provides ARC specific target descriptions.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ARCMCTargetDesc.h"
+#include "ARCMCAsmInfo.h"
+#include "ARCTargetStreamer.h"
+#include "InstPrinter/ARCInstPrinter.h"
+#include "llvm/MC/MCInstrInfo.h"
+#include "llvm/MC/MCRegisterInfo.h"
+#include "llvm/MC/MCSubtargetInfo.h"
+#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/FormattedStream.h"
+#include "llvm/Support/TargetRegistry.h"
+
+using namespace llvm;
+
+#define GET_INSTRINFO_MC_DESC
+#include "ARCGenInstrInfo.inc"
+
+#define GET_SUBTARGETINFO_MC_DESC
+#include "ARCGenSubtargetInfo.inc"
+
+#define GET_REGINFO_MC_DESC
+#include "ARCGenRegisterInfo.inc"
+
+static MCInstrInfo *createARCMCInstrInfo() {
+ auto *X = new MCInstrInfo();
+ InitARCMCInstrInfo(X);
+ return X;
+}
+
+static MCRegisterInfo *createARCMCRegisterInfo(const Triple &TT) {
+ auto *X = new MCRegisterInfo();
+ InitARCMCRegisterInfo(X, ARC::BLINK);
+ return X;
+}
+
+static MCSubtargetInfo *createARCMCSubtargetInfo(const Triple &TT,
+ StringRef CPU, StringRef FS) {
+ return createARCMCSubtargetInfoImpl(TT, CPU, FS);
+}
+
+static MCAsmInfo *createARCMCAsmInfo(const MCRegisterInfo &MRI,
+ const Triple &TT) {
+ MCAsmInfo *MAI = new ARCMCAsmInfo(TT);
+
+ // Initial state of the frame pointer is SP.
+ MCCFIInstruction Inst = MCCFIInstruction::createDefCfa(nullptr, ARC::SP, 0);
+ MAI->addInitialFrameState(Inst);
+
+ return MAI;
+}
+
+static MCInstPrinter *createARCMCInstPrinter(const Triple &T,
+ unsigned SyntaxVariant,
+ const MCAsmInfo &MAI,
+ const MCInstrInfo &MII,
+ const MCRegisterInfo &MRI) {
+ return new ARCInstPrinter(MAI, MII, MRI);
+}
+
+ARCTargetStreamer::ARCTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {}
+ARCTargetStreamer::~ARCTargetStreamer() = default;
+
+static MCTargetStreamer *createTargetAsmStreamer(MCStreamer &S,
+ formatted_raw_ostream &OS,
+ MCInstPrinter *InstPrint,
+ bool isVerboseAsm) {
+ return new ARCTargetStreamer(S);
+}
+
+// Force static initialization.
+extern "C" void LLVMInitializeARCTargetMC() {
+ // Register the MC asm info.
+ Target &TheARCTarget = getTheARCTarget();
+ RegisterMCAsmInfoFn X(TheARCTarget, createARCMCAsmInfo);
+
+ // Register the MC instruction info.
+ TargetRegistry::RegisterMCInstrInfo(TheARCTarget, createARCMCInstrInfo);
+
+ // Register the MC register info.
+ TargetRegistry::RegisterMCRegInfo(TheARCTarget, createARCMCRegisterInfo);
+
+ // Register the MC subtarget info.
+ TargetRegistry::RegisterMCSubtargetInfo(TheARCTarget,
+ createARCMCSubtargetInfo);
+
+ // Register the MCInstPrinter
+ TargetRegistry::RegisterMCInstPrinter(TheARCTarget, createARCMCInstPrinter);
+
+ TargetRegistry::RegisterAsmTargetStreamer(TheARCTarget,
+ createTargetAsmStreamer);
+}
OpenPOWER on IntegriCloud