1 //===-- XtensaMCTargetDesc.cpp - Xtensa target descriptions ---------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
6 // See https://llvm.org/LICENSE.txt for license information.
7 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
8 //
9 //===----------------------------------------------------------------------===//
10 #include "XtensaMCTargetDesc.h"
11 #include "XtensaInstPrinter.h"
12 #include "XtensaMCAsmInfo.h"
13 #include "TargetInfo/XtensaTargetInfo.h"
14 #include "llvm/ADT/STLExtras.h"
15 #include "llvm/MC/MCAsmInfo.h"
16 #include "llvm/MC/MCInstrInfo.h"
17 #include "llvm/MC/MCRegisterInfo.h"
18 #include "llvm/MC/MCStreamer.h"
19 #include "llvm/MC/MCSubtargetInfo.h"
20 #include "llvm/MC/TargetRegistry.h"
21 #include "llvm/Support/ErrorHandling.h"
22
23 #define GET_INSTRINFO_MC_DESC
24 #include "XtensaGenInstrInfo.inc"
25
26 #define GET_REGINFO_MC_DESC
27 #include "XtensaGenRegisterInfo.inc"
28
29 #define GET_SUBTARGETINFO_MC_DESC
30 #include "XtensaGenSubtargetInfo.inc"
31
32 using namespace llvm;
33
createXtensaMCAsmInfo(const MCRegisterInfo & MRI,const Triple & TT,const MCTargetOptions & Options)34 static MCAsmInfo *createXtensaMCAsmInfo(const MCRegisterInfo &MRI,
35 const Triple &TT,
36 const MCTargetOptions &Options) {
37 MCAsmInfo *MAI = new XtensaMCAsmInfo(TT);
38 return MAI;
39 }
40
createXtensaMCInstrInfo()41 static MCInstrInfo *createXtensaMCInstrInfo() {
42 MCInstrInfo *X = new MCInstrInfo();
43 InitXtensaMCInstrInfo(X);
44 return X;
45 }
46
createXtensaMCInstPrinter(const Triple & TT,unsigned SyntaxVariant,const MCAsmInfo & MAI,const MCInstrInfo & MII,const MCRegisterInfo & MRI)47 static MCInstPrinter *createXtensaMCInstPrinter(const Triple &TT,
48 unsigned SyntaxVariant,
49 const MCAsmInfo &MAI,
50 const MCInstrInfo &MII,
51 const MCRegisterInfo &MRI) {
52 return new XtensaInstPrinter(MAI, MII, MRI);
53 }
54
createXtensaMCRegisterInfo(const Triple & TT)55 static MCRegisterInfo *createXtensaMCRegisterInfo(const Triple &TT) {
56 MCRegisterInfo *X = new MCRegisterInfo();
57 InitXtensaMCRegisterInfo(X, Xtensa::SP);
58 return X;
59 }
60
61 static MCSubtargetInfo *
createXtensaMCSubtargetInfo(const Triple & TT,StringRef CPU,StringRef FS)62 createXtensaMCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS) {
63 return createXtensaMCSubtargetInfoImpl(TT, CPU, CPU, FS);
64 }
65
LLVMInitializeXtensaTargetMC()66 extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeXtensaTargetMC() {
67 // Register the MCAsmInfo.
68 TargetRegistry::RegisterMCAsmInfo(getTheXtensaTarget(), createXtensaMCAsmInfo);
69
70 // Register the MCCodeEmitter.
71 TargetRegistry::RegisterMCCodeEmitter(getTheXtensaTarget(),
72 createXtensaMCCodeEmitter);
73
74 // Register the MCInstrInfo.
75 TargetRegistry::RegisterMCInstrInfo(getTheXtensaTarget(), createXtensaMCInstrInfo);
76
77 // Register the MCInstPrinter.
78 TargetRegistry::RegisterMCInstPrinter(getTheXtensaTarget(),
79 createXtensaMCInstPrinter);
80
81 // Register the MCRegisterInfo.
82 TargetRegistry::RegisterMCRegInfo(getTheXtensaTarget(),
83 createXtensaMCRegisterInfo);
84
85 // Register the MCSubtargetInfo.
86 TargetRegistry::RegisterMCSubtargetInfo(getTheXtensaTarget(),
87 createXtensaMCSubtargetInfo);
88
89 // Register the MCAsmBackend.
90 TargetRegistry::RegisterMCAsmBackend(getTheXtensaTarget(),
91 createXtensaMCAsmBackend);
92 }
93