]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/Nios2/MCTargetDesc/Nios2MCTargetDesc.cpp
MFC r345805: Unify SCSI_STATUS_BUSY retry handling with other cases.
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Target / Nios2 / MCTargetDesc / Nios2MCTargetDesc.cpp
1 //===-- Nios2MCTargetDesc.cpp - Nios2 Target Descriptions -----------------===//
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 Nios2 specific target descriptions.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "Nios2MCTargetDesc.h"
15 #include "InstPrinter/Nios2InstPrinter.h"
16 #include "Nios2MCAsmInfo.h"
17 #include "Nios2TargetStreamer.h"
18 #include "llvm/MC/MCInstrInfo.h"
19 #include "llvm/MC/MCRegisterInfo.h"
20 #include "llvm/MC/MCSubtargetInfo.h"
21 #include "llvm/Support/TargetRegistry.h"
22
23 using namespace llvm;
24
25 #define GET_INSTRINFO_MC_DESC
26 #include "Nios2GenInstrInfo.inc"
27
28 #define GET_SUBTARGETINFO_MC_DESC
29 #include "Nios2GenSubtargetInfo.inc"
30
31 #define GET_REGINFO_MC_DESC
32 #include "Nios2GenRegisterInfo.inc"
33
34 static MCInstrInfo *createNios2MCInstrInfo() {
35   MCInstrInfo *X = new MCInstrInfo();
36   InitNios2MCInstrInfo(X); // defined in Nios2GenInstrInfo.inc
37   return X;
38 }
39
40 static MCRegisterInfo *createNios2MCRegisterInfo(const Triple &TT) {
41   MCRegisterInfo *X = new MCRegisterInfo();
42   InitNios2MCRegisterInfo(X, Nios2::R15); // defined in Nios2GenRegisterInfo.inc
43   return X;
44 }
45
46 static MCSubtargetInfo *
47 createNios2MCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS) {
48   if (CPU.empty() || CPU == "generic")
49     CPU = "nios2r1";
50   return createNios2MCSubtargetInfoImpl(TT, CPU, FS);
51   // createNios2MCSubtargetInfoImpl defined in Nios2GenSubtargetInfo.inc
52 }
53
54 static MCAsmInfo *createNios2MCAsmInfo(const MCRegisterInfo &MRI,
55                                        const Triple &TT) {
56   MCAsmInfo *MAI = new Nios2MCAsmInfo(TT);
57
58   unsigned SP = MRI.getDwarfRegNum(Nios2::SP, true);
59   MCCFIInstruction Inst = MCCFIInstruction::createDefCfa(nullptr, SP, 0);
60   MAI->addInitialFrameState(Inst);
61
62   return MAI;
63 }
64
65 static MCInstPrinter *createNios2MCInstPrinter(const Triple &T,
66                                                unsigned SyntaxVariant,
67                                                const MCAsmInfo &MAI,
68                                                const MCInstrInfo &MII,
69                                                const MCRegisterInfo &MRI) {
70   return new Nios2InstPrinter(MAI, MII, MRI);
71 }
72
73 static MCTargetStreamer *createNios2AsmTargetStreamer(MCStreamer &S,
74                                                       formatted_raw_ostream &OS,
75                                                       MCInstPrinter *InstPrint,
76                                                       bool isVerboseAsm) {
77   return new Nios2TargetAsmStreamer(S, OS);
78 }
79
80 extern "C" void LLVMInitializeNios2TargetMC() {
81   Target *T = &getTheNios2Target();
82
83   // Register the MC asm info.
84   RegisterMCAsmInfoFn X(*T, createNios2MCAsmInfo);
85
86   // Register the MC instruction info.
87   TargetRegistry::RegisterMCInstrInfo(*T, createNios2MCInstrInfo);
88
89   // Register the MC register info.
90   TargetRegistry::RegisterMCRegInfo(*T, createNios2MCRegisterInfo);
91
92   // Register the asm target streamer.
93   TargetRegistry::RegisterAsmTargetStreamer(*T, createNios2AsmTargetStreamer);
94
95   // Register the MC subtarget info.
96   TargetRegistry::RegisterMCSubtargetInfo(*T, createNios2MCSubtargetInfo);
97   // Register the MCInstPrinter.
98   TargetRegistry::RegisterMCInstPrinter(*T, createNios2MCInstPrinter);
99
100   // Register the asm backend.
101   TargetRegistry::RegisterMCAsmBackend(*T, createNios2AsmBackend);
102 }