xref: /aosp_15_r20/external/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===-- HexagonMCTargetDesc.cpp - Hexagon Target Descriptions -------------===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker //
10*9880d681SAndroid Build Coastguard Worker // This file provides Hexagon specific target descriptions.
11*9880d681SAndroid Build Coastguard Worker //
12*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
13*9880d681SAndroid Build Coastguard Worker 
14*9880d681SAndroid Build Coastguard Worker #include "HexagonMCTargetDesc.h"
15*9880d681SAndroid Build Coastguard Worker #include "Hexagon.h"
16*9880d681SAndroid Build Coastguard Worker #include "HexagonMCAsmInfo.h"
17*9880d681SAndroid Build Coastguard Worker #include "HexagonMCELFStreamer.h"
18*9880d681SAndroid Build Coastguard Worker #include "MCTargetDesc/HexagonInstPrinter.h"
19*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCContext.h"
20*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCELFStreamer.h"
21*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCInstrInfo.h"
22*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCObjectStreamer.h"
23*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCRegisterInfo.h"
24*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCStreamer.h"
25*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCSubtargetInfo.h"
26*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MachineLocation.h"
27*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ELF.h"
28*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ErrorHandling.h"
29*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/TargetRegistry.h"
30*9880d681SAndroid Build Coastguard Worker 
31*9880d681SAndroid Build Coastguard Worker using namespace llvm;
32*9880d681SAndroid Build Coastguard Worker 
33*9880d681SAndroid Build Coastguard Worker #define GET_INSTRINFO_MC_DESC
34*9880d681SAndroid Build Coastguard Worker #include "HexagonGenInstrInfo.inc"
35*9880d681SAndroid Build Coastguard Worker 
36*9880d681SAndroid Build Coastguard Worker #define GET_SUBTARGETINFO_MC_DESC
37*9880d681SAndroid Build Coastguard Worker #include "HexagonGenSubtargetInfo.inc"
38*9880d681SAndroid Build Coastguard Worker 
39*9880d681SAndroid Build Coastguard Worker #define GET_REGINFO_MC_DESC
40*9880d681SAndroid Build Coastguard Worker #include "HexagonGenRegisterInfo.inc"
41*9880d681SAndroid Build Coastguard Worker 
42*9880d681SAndroid Build Coastguard Worker cl::opt<bool> llvm::HexagonDisableCompound
43*9880d681SAndroid Build Coastguard Worker   ("mno-compound",
44*9880d681SAndroid Build Coastguard Worker    cl::desc("Disable looking for compound instructions for Hexagon"));
45*9880d681SAndroid Build Coastguard Worker 
46*9880d681SAndroid Build Coastguard Worker cl::opt<bool> llvm::HexagonDisableDuplex
47*9880d681SAndroid Build Coastguard Worker   ("mno-pairing",
48*9880d681SAndroid Build Coastguard Worker    cl::desc("Disable looking for duplex instructions for Hexagon"));
49*9880d681SAndroid Build Coastguard Worker 
50*9880d681SAndroid Build Coastguard Worker static cl::opt<bool> HexagonV4ArchVariant("mv4", cl::Hidden, cl::init(false),
51*9880d681SAndroid Build Coastguard Worker   cl::desc("Build for Hexagon V4"));
52*9880d681SAndroid Build Coastguard Worker 
53*9880d681SAndroid Build Coastguard Worker static cl::opt<bool> HexagonV5ArchVariant("mv5", cl::Hidden, cl::init(false),
54*9880d681SAndroid Build Coastguard Worker   cl::desc("Build for Hexagon V5"));
55*9880d681SAndroid Build Coastguard Worker 
56*9880d681SAndroid Build Coastguard Worker static cl::opt<bool> HexagonV55ArchVariant("mv55", cl::Hidden, cl::init(false),
57*9880d681SAndroid Build Coastguard Worker   cl::desc("Build for Hexagon V55"));
58*9880d681SAndroid Build Coastguard Worker 
59*9880d681SAndroid Build Coastguard Worker static cl::opt<bool> HexagonV60ArchVariant("mv60", cl::Hidden, cl::init(false),
60*9880d681SAndroid Build Coastguard Worker   cl::desc("Build for Hexagon V60"));
61*9880d681SAndroid Build Coastguard Worker 
62*9880d681SAndroid Build Coastguard Worker 
63*9880d681SAndroid Build Coastguard Worker static StringRef DefaultArch = "hexagonv60";
64*9880d681SAndroid Build Coastguard Worker 
HexagonGetArchVariant()65*9880d681SAndroid Build Coastguard Worker static StringRef HexagonGetArchVariant() {
66*9880d681SAndroid Build Coastguard Worker   if (HexagonV4ArchVariant)
67*9880d681SAndroid Build Coastguard Worker     return "hexagonv4";
68*9880d681SAndroid Build Coastguard Worker   if (HexagonV5ArchVariant)
69*9880d681SAndroid Build Coastguard Worker     return "hexagonv5";
70*9880d681SAndroid Build Coastguard Worker   if (HexagonV55ArchVariant)
71*9880d681SAndroid Build Coastguard Worker     return "hexagonv55";
72*9880d681SAndroid Build Coastguard Worker   if (HexagonV60ArchVariant)
73*9880d681SAndroid Build Coastguard Worker     return "hexagonv60";
74*9880d681SAndroid Build Coastguard Worker   return "";
75*9880d681SAndroid Build Coastguard Worker }
76*9880d681SAndroid Build Coastguard Worker 
selectHexagonCPU(const Triple & TT,StringRef CPU)77*9880d681SAndroid Build Coastguard Worker StringRef HEXAGON_MC::selectHexagonCPU(const Triple &TT, StringRef CPU) {
78*9880d681SAndroid Build Coastguard Worker   StringRef ArchV = HexagonGetArchVariant();
79*9880d681SAndroid Build Coastguard Worker   if (!ArchV.empty() && !CPU.empty()) {
80*9880d681SAndroid Build Coastguard Worker     if (ArchV != CPU)
81*9880d681SAndroid Build Coastguard Worker       report_fatal_error("conflicting architectures specified.");
82*9880d681SAndroid Build Coastguard Worker     return CPU;
83*9880d681SAndroid Build Coastguard Worker   }
84*9880d681SAndroid Build Coastguard Worker   if (ArchV.empty()) {
85*9880d681SAndroid Build Coastguard Worker     if (CPU.empty())
86*9880d681SAndroid Build Coastguard Worker       CPU = DefaultArch;
87*9880d681SAndroid Build Coastguard Worker     return CPU;
88*9880d681SAndroid Build Coastguard Worker   }
89*9880d681SAndroid Build Coastguard Worker   return ArchV;
90*9880d681SAndroid Build Coastguard Worker }
91*9880d681SAndroid Build Coastguard Worker 
createHexagonMCInstrInfo()92*9880d681SAndroid Build Coastguard Worker MCInstrInfo *llvm::createHexagonMCInstrInfo() {
93*9880d681SAndroid Build Coastguard Worker   MCInstrInfo *X = new MCInstrInfo();
94*9880d681SAndroid Build Coastguard Worker   InitHexagonMCInstrInfo(X);
95*9880d681SAndroid Build Coastguard Worker   return X;
96*9880d681SAndroid Build Coastguard Worker }
97*9880d681SAndroid Build Coastguard Worker 
createHexagonMCRegisterInfo(const Triple & TT)98*9880d681SAndroid Build Coastguard Worker static MCRegisterInfo *createHexagonMCRegisterInfo(const Triple &TT) {
99*9880d681SAndroid Build Coastguard Worker   MCRegisterInfo *X = new MCRegisterInfo();
100*9880d681SAndroid Build Coastguard Worker   InitHexagonMCRegisterInfo(X, Hexagon::R31);
101*9880d681SAndroid Build Coastguard Worker   return X;
102*9880d681SAndroid Build Coastguard Worker }
103*9880d681SAndroid Build Coastguard Worker 
104*9880d681SAndroid Build Coastguard Worker static MCSubtargetInfo *
createHexagonMCSubtargetInfo(const Triple & TT,StringRef CPU,StringRef FS)105*9880d681SAndroid Build Coastguard Worker createHexagonMCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS) {
106*9880d681SAndroid Build Coastguard Worker   CPU = HEXAGON_MC::selectHexagonCPU(TT, CPU);
107*9880d681SAndroid Build Coastguard Worker   return createHexagonMCSubtargetInfoImpl(TT, CPU, FS);
108*9880d681SAndroid Build Coastguard Worker }
109*9880d681SAndroid Build Coastguard Worker 
110*9880d681SAndroid Build Coastguard Worker namespace {
111*9880d681SAndroid Build Coastguard Worker class HexagonTargetAsmStreamer : public HexagonTargetStreamer {
112*9880d681SAndroid Build Coastguard Worker public:
HexagonTargetAsmStreamer(MCStreamer & S,formatted_raw_ostream &,bool,MCInstPrinter &)113*9880d681SAndroid Build Coastguard Worker   HexagonTargetAsmStreamer(MCStreamer &S,
114*9880d681SAndroid Build Coastguard Worker                            formatted_raw_ostream &, bool,
115*9880d681SAndroid Build Coastguard Worker                            MCInstPrinter &)
116*9880d681SAndroid Build Coastguard Worker       : HexagonTargetStreamer(S) {}
prettyPrintAsm(MCInstPrinter & InstPrinter,raw_ostream & OS,const MCInst & Inst,const MCSubtargetInfo & STI)117*9880d681SAndroid Build Coastguard Worker   void prettyPrintAsm(MCInstPrinter &InstPrinter, raw_ostream &OS,
118*9880d681SAndroid Build Coastguard Worker                       const MCInst &Inst, const MCSubtargetInfo &STI) override {
119*9880d681SAndroid Build Coastguard Worker     assert(HexagonMCInstrInfo::isBundle(Inst));
120*9880d681SAndroid Build Coastguard Worker     assert(HexagonMCInstrInfo::bundleSize(Inst) <= HEXAGON_PACKET_SIZE);
121*9880d681SAndroid Build Coastguard Worker     std::string Buffer;
122*9880d681SAndroid Build Coastguard Worker     {
123*9880d681SAndroid Build Coastguard Worker       raw_string_ostream TempStream(Buffer);
124*9880d681SAndroid Build Coastguard Worker       InstPrinter.printInst(&Inst, TempStream, "", STI);
125*9880d681SAndroid Build Coastguard Worker     }
126*9880d681SAndroid Build Coastguard Worker     StringRef Contents(Buffer);
127*9880d681SAndroid Build Coastguard Worker     auto PacketBundle = Contents.rsplit('\n');
128*9880d681SAndroid Build Coastguard Worker     auto HeadTail = PacketBundle.first.split('\n');
129*9880d681SAndroid Build Coastguard Worker     StringRef Separator = "\n";
130*9880d681SAndroid Build Coastguard Worker     StringRef Indent = "\t\t";
131*9880d681SAndroid Build Coastguard Worker     OS << "\t{\n";
132*9880d681SAndroid Build Coastguard Worker     while (!HeadTail.first.empty()) {
133*9880d681SAndroid Build Coastguard Worker       StringRef InstTxt;
134*9880d681SAndroid Build Coastguard Worker       auto Duplex = HeadTail.first.split('\v');
135*9880d681SAndroid Build Coastguard Worker       if (!Duplex.second.empty()) {
136*9880d681SAndroid Build Coastguard Worker         OS << Indent << Duplex.first << Separator;
137*9880d681SAndroid Build Coastguard Worker         InstTxt = Duplex.second;
138*9880d681SAndroid Build Coastguard Worker       } else if (!HeadTail.first.trim().startswith("immext")) {
139*9880d681SAndroid Build Coastguard Worker         InstTxt = Duplex.first;
140*9880d681SAndroid Build Coastguard Worker       }
141*9880d681SAndroid Build Coastguard Worker       if (!InstTxt.empty())
142*9880d681SAndroid Build Coastguard Worker         OS << Indent << InstTxt << Separator;
143*9880d681SAndroid Build Coastguard Worker       HeadTail = HeadTail.second.split('\n');
144*9880d681SAndroid Build Coastguard Worker     }
145*9880d681SAndroid Build Coastguard Worker     OS << "\t}" << PacketBundle.second;
146*9880d681SAndroid Build Coastguard Worker   }
147*9880d681SAndroid Build Coastguard Worker };
148*9880d681SAndroid Build Coastguard Worker }
149*9880d681SAndroid Build Coastguard Worker 
150*9880d681SAndroid Build Coastguard Worker namespace {
151*9880d681SAndroid Build Coastguard Worker class HexagonTargetELFStreamer : public HexagonTargetStreamer {
152*9880d681SAndroid Build Coastguard Worker public:
getStreamer()153*9880d681SAndroid Build Coastguard Worker   MCELFStreamer &getStreamer() {
154*9880d681SAndroid Build Coastguard Worker     return static_cast<MCELFStreamer &>(Streamer);
155*9880d681SAndroid Build Coastguard Worker   }
HexagonTargetELFStreamer(MCStreamer & S,MCSubtargetInfo const & STI)156*9880d681SAndroid Build Coastguard Worker   HexagonTargetELFStreamer(MCStreamer &S, MCSubtargetInfo const &STI)
157*9880d681SAndroid Build Coastguard Worker       : HexagonTargetStreamer(S) {
158*9880d681SAndroid Build Coastguard Worker     auto Bits = STI.getFeatureBits();
159*9880d681SAndroid Build Coastguard Worker     unsigned Flags = 0;
160*9880d681SAndroid Build Coastguard Worker     if (Bits[Hexagon::ArchV60])
161*9880d681SAndroid Build Coastguard Worker       Flags = ELF::EF_HEXAGON_MACH_V60;
162*9880d681SAndroid Build Coastguard Worker     else if (Bits[Hexagon::ArchV55])
163*9880d681SAndroid Build Coastguard Worker       Flags = ELF::EF_HEXAGON_MACH_V55;
164*9880d681SAndroid Build Coastguard Worker     else if (Bits[Hexagon::ArchV5])
165*9880d681SAndroid Build Coastguard Worker       Flags = ELF::EF_HEXAGON_MACH_V5;
166*9880d681SAndroid Build Coastguard Worker     else if (Bits[Hexagon::ArchV4])
167*9880d681SAndroid Build Coastguard Worker       Flags = ELF::EF_HEXAGON_MACH_V4;
168*9880d681SAndroid Build Coastguard Worker     getStreamer().getAssembler().setELFHeaderEFlags(Flags);
169*9880d681SAndroid Build Coastguard Worker   }
EmitCommonSymbolSorted(MCSymbol * Symbol,uint64_t Size,unsigned ByteAlignment,unsigned AccessSize)170*9880d681SAndroid Build Coastguard Worker   void EmitCommonSymbolSorted(MCSymbol *Symbol, uint64_t Size,
171*9880d681SAndroid Build Coastguard Worker                               unsigned ByteAlignment,
172*9880d681SAndroid Build Coastguard Worker                               unsigned AccessSize) override {
173*9880d681SAndroid Build Coastguard Worker     HexagonMCELFStreamer &HexagonELFStreamer =
174*9880d681SAndroid Build Coastguard Worker         static_cast<HexagonMCELFStreamer &>(getStreamer());
175*9880d681SAndroid Build Coastguard Worker     HexagonELFStreamer.HexagonMCEmitCommonSymbol(Symbol, Size, ByteAlignment,
176*9880d681SAndroid Build Coastguard Worker                                                  AccessSize);
177*9880d681SAndroid Build Coastguard Worker   }
EmitLocalCommonSymbolSorted(MCSymbol * Symbol,uint64_t Size,unsigned ByteAlignment,unsigned AccessSize)178*9880d681SAndroid Build Coastguard Worker   void EmitLocalCommonSymbolSorted(MCSymbol *Symbol, uint64_t Size,
179*9880d681SAndroid Build Coastguard Worker                                    unsigned ByteAlignment,
180*9880d681SAndroid Build Coastguard Worker                                    unsigned AccessSize) override {
181*9880d681SAndroid Build Coastguard Worker     HexagonMCELFStreamer &HexagonELFStreamer =
182*9880d681SAndroid Build Coastguard Worker         static_cast<HexagonMCELFStreamer &>(getStreamer());
183*9880d681SAndroid Build Coastguard Worker     HexagonELFStreamer.HexagonMCEmitLocalCommonSymbol(
184*9880d681SAndroid Build Coastguard Worker         Symbol, Size, ByteAlignment, AccessSize);
185*9880d681SAndroid Build Coastguard Worker   }
186*9880d681SAndroid Build Coastguard Worker };
187*9880d681SAndroid Build Coastguard Worker }
188*9880d681SAndroid Build Coastguard Worker 
createHexagonMCAsmInfo(const MCRegisterInfo & MRI,const Triple & TT)189*9880d681SAndroid Build Coastguard Worker static MCAsmInfo *createHexagonMCAsmInfo(const MCRegisterInfo &MRI,
190*9880d681SAndroid Build Coastguard Worker                                          const Triple &TT) {
191*9880d681SAndroid Build Coastguard Worker   MCAsmInfo *MAI = new HexagonMCAsmInfo(TT);
192*9880d681SAndroid Build Coastguard Worker 
193*9880d681SAndroid Build Coastguard Worker   // VirtualFP = (R30 + #0).
194*9880d681SAndroid Build Coastguard Worker   MCCFIInstruction Inst =
195*9880d681SAndroid Build Coastguard Worker       MCCFIInstruction::createDefCfa(nullptr, Hexagon::R30, 0);
196*9880d681SAndroid Build Coastguard Worker   MAI->addInitialFrameState(Inst);
197*9880d681SAndroid Build Coastguard Worker 
198*9880d681SAndroid Build Coastguard Worker   return MAI;
199*9880d681SAndroid Build Coastguard Worker }
200*9880d681SAndroid Build Coastguard Worker 
createHexagonMCInstPrinter(const Triple & T,unsigned SyntaxVariant,const MCAsmInfo & MAI,const MCInstrInfo & MII,const MCRegisterInfo & MRI)201*9880d681SAndroid Build Coastguard Worker static MCInstPrinter *createHexagonMCInstPrinter(const Triple &T,
202*9880d681SAndroid Build Coastguard Worker                                                  unsigned SyntaxVariant,
203*9880d681SAndroid Build Coastguard Worker                                                  const MCAsmInfo &MAI,
204*9880d681SAndroid Build Coastguard Worker                                                  const MCInstrInfo &MII,
205*9880d681SAndroid Build Coastguard Worker                                                  const MCRegisterInfo &MRI) {
206*9880d681SAndroid Build Coastguard Worker   if (SyntaxVariant == 0)
207*9880d681SAndroid Build Coastguard Worker     return (new HexagonInstPrinter(MAI, MII, MRI));
208*9880d681SAndroid Build Coastguard Worker   else
209*9880d681SAndroid Build Coastguard Worker     return nullptr;
210*9880d681SAndroid Build Coastguard Worker }
211*9880d681SAndroid Build Coastguard Worker 
createMCAsmTargetStreamer(MCStreamer & S,formatted_raw_ostream & OS,MCInstPrinter * InstPrint,bool IsVerboseAsm)212*9880d681SAndroid Build Coastguard Worker static MCTargetStreamer *createMCAsmTargetStreamer(MCStreamer &S,
213*9880d681SAndroid Build Coastguard Worker                                                    formatted_raw_ostream &OS,
214*9880d681SAndroid Build Coastguard Worker                                                    MCInstPrinter *InstPrint,
215*9880d681SAndroid Build Coastguard Worker                                                    bool IsVerboseAsm) {
216*9880d681SAndroid Build Coastguard Worker   return new HexagonTargetAsmStreamer(S,  OS, IsVerboseAsm, *InstPrint);
217*9880d681SAndroid Build Coastguard Worker }
218*9880d681SAndroid Build Coastguard Worker 
createMCStreamer(Triple const & T,MCContext & Context,MCAsmBackend & MAB,raw_pwrite_stream & OS,MCCodeEmitter * Emitter,bool RelaxAll)219*9880d681SAndroid Build Coastguard Worker static MCStreamer *createMCStreamer(Triple const &T, MCContext &Context,
220*9880d681SAndroid Build Coastguard Worker                                     MCAsmBackend &MAB, raw_pwrite_stream &OS,
221*9880d681SAndroid Build Coastguard Worker                                     MCCodeEmitter *Emitter, bool RelaxAll) {
222*9880d681SAndroid Build Coastguard Worker   return createHexagonELFStreamer(Context, MAB, OS, Emitter);
223*9880d681SAndroid Build Coastguard Worker }
224*9880d681SAndroid Build Coastguard Worker 
225*9880d681SAndroid Build Coastguard Worker static MCTargetStreamer *
createHexagonObjectTargetStreamer(MCStreamer & S,MCSubtargetInfo const & STI)226*9880d681SAndroid Build Coastguard Worker createHexagonObjectTargetStreamer(MCStreamer &S, MCSubtargetInfo const &STI) {
227*9880d681SAndroid Build Coastguard Worker   return new HexagonTargetELFStreamer(S, STI);
228*9880d681SAndroid Build Coastguard Worker }
229*9880d681SAndroid Build Coastguard Worker 
230*9880d681SAndroid Build Coastguard Worker // Force static initialization.
LLVMInitializeHexagonTargetMC()231*9880d681SAndroid Build Coastguard Worker extern "C" void LLVMInitializeHexagonTargetMC() {
232*9880d681SAndroid Build Coastguard Worker   // Register the MC asm info.
233*9880d681SAndroid Build Coastguard Worker   RegisterMCAsmInfoFn X(TheHexagonTarget, createHexagonMCAsmInfo);
234*9880d681SAndroid Build Coastguard Worker 
235*9880d681SAndroid Build Coastguard Worker   // Register the MC instruction info.
236*9880d681SAndroid Build Coastguard Worker   TargetRegistry::RegisterMCInstrInfo(TheHexagonTarget,
237*9880d681SAndroid Build Coastguard Worker                                       createHexagonMCInstrInfo);
238*9880d681SAndroid Build Coastguard Worker 
239*9880d681SAndroid Build Coastguard Worker   // Register the MC register info.
240*9880d681SAndroid Build Coastguard Worker   TargetRegistry::RegisterMCRegInfo(TheHexagonTarget,
241*9880d681SAndroid Build Coastguard Worker                                     createHexagonMCRegisterInfo);
242*9880d681SAndroid Build Coastguard Worker 
243*9880d681SAndroid Build Coastguard Worker   // Register the MC subtarget info.
244*9880d681SAndroid Build Coastguard Worker   TargetRegistry::RegisterMCSubtargetInfo(TheHexagonTarget,
245*9880d681SAndroid Build Coastguard Worker                                           createHexagonMCSubtargetInfo);
246*9880d681SAndroid Build Coastguard Worker 
247*9880d681SAndroid Build Coastguard Worker   // Register the MC Code Emitter
248*9880d681SAndroid Build Coastguard Worker   TargetRegistry::RegisterMCCodeEmitter(TheHexagonTarget,
249*9880d681SAndroid Build Coastguard Worker                                         createHexagonMCCodeEmitter);
250*9880d681SAndroid Build Coastguard Worker 
251*9880d681SAndroid Build Coastguard Worker   // Register the asm backend
252*9880d681SAndroid Build Coastguard Worker   TargetRegistry::RegisterMCAsmBackend(TheHexagonTarget,
253*9880d681SAndroid Build Coastguard Worker                                        createHexagonAsmBackend);
254*9880d681SAndroid Build Coastguard Worker 
255*9880d681SAndroid Build Coastguard Worker   // Register the obj streamer
256*9880d681SAndroid Build Coastguard Worker   TargetRegistry::RegisterELFStreamer(TheHexagonTarget, createMCStreamer);
257*9880d681SAndroid Build Coastguard Worker 
258*9880d681SAndroid Build Coastguard Worker   // Register the asm streamer
259*9880d681SAndroid Build Coastguard Worker   TargetRegistry::RegisterAsmTargetStreamer(TheHexagonTarget,
260*9880d681SAndroid Build Coastguard Worker                                             createMCAsmTargetStreamer);
261*9880d681SAndroid Build Coastguard Worker 
262*9880d681SAndroid Build Coastguard Worker   // Register the MC Inst Printer
263*9880d681SAndroid Build Coastguard Worker   TargetRegistry::RegisterMCInstPrinter(TheHexagonTarget,
264*9880d681SAndroid Build Coastguard Worker                                         createHexagonMCInstPrinter);
265*9880d681SAndroid Build Coastguard Worker 
266*9880d681SAndroid Build Coastguard Worker   TargetRegistry::RegisterObjectTargetStreamer(
267*9880d681SAndroid Build Coastguard Worker       TheHexagonTarget, createHexagonObjectTargetStreamer);
268*9880d681SAndroid Build Coastguard Worker }
269