15f613dfdSUlrich Weigand //===-- SystemZMCTargetDesc.cpp - SystemZ target descriptions -------------===//
25f613dfdSUlrich Weigand //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65f613dfdSUlrich Weigand //
75f613dfdSUlrich Weigand //===----------------------------------------------------------------------===//
85f613dfdSUlrich Weigand 
95f613dfdSUlrich Weigand #include "SystemZMCTargetDesc.h"
10d0124bd7SRichard Trieu #include "SystemZInstPrinter.h"
115f613dfdSUlrich Weigand #include "SystemZMCAsmInfo.h"
121a5ab3e9SJonas Paulsson #include "SystemZTargetStreamer.h"
131e6f98b8SRichard Trieu #include "TargetInfo/SystemZTargetInfo.h"
14a48b43f9SJonas Paulsson #include "llvm/MC/MCContext.h"
156b06c6a5SEric Christopher #include "llvm/MC/MCDwarf.h"
16ef736a1cSserge-sans-paille #include "llvm/MC/MCInst.h"
175f613dfdSUlrich Weigand #include "llvm/MC/MCInstrInfo.h"
183de83e40SPete Cooper #include "llvm/MC/MCRegisterInfo.h"
195f613dfdSUlrich Weigand #include "llvm/MC/MCStreamer.h"
205f613dfdSUlrich Weigand #include "llvm/MC/MCSubtargetInfo.h"
2189b57061SReid Kleckner #include "llvm/MC/TargetRegistry.h"
225f613dfdSUlrich Weigand 
23d174b72aSChandler Carruth using namespace llvm;
24d174b72aSChandler Carruth 
255f613dfdSUlrich Weigand #define GET_INSTRINFO_MC_DESC
26*3e0bf1c7SDavid Green #define ENABLE_INSTR_PREDICATE_VERIFIER
275f613dfdSUlrich Weigand #include "SystemZGenInstrInfo.inc"
285f613dfdSUlrich Weigand 
295f613dfdSUlrich Weigand #define GET_SUBTARGETINFO_MC_DESC
305f613dfdSUlrich Weigand #include "SystemZGenSubtargetInfo.inc"
315f613dfdSUlrich Weigand 
325f613dfdSUlrich Weigand #define GET_REGINFO_MC_DESC
335f613dfdSUlrich Weigand #include "SystemZGenRegisterInfo.inc"
345f613dfdSUlrich Weigand 
357d37cd26SRichard Sandiford const unsigned SystemZMC::GR32Regs[16] = {
367789b082SRichard Sandiford   SystemZ::R0L, SystemZ::R1L, SystemZ::R2L, SystemZ::R3L,
377789b082SRichard Sandiford   SystemZ::R4L, SystemZ::R5L, SystemZ::R6L, SystemZ::R7L,
387789b082SRichard Sandiford   SystemZ::R8L, SystemZ::R9L, SystemZ::R10L, SystemZ::R11L,
397789b082SRichard Sandiford   SystemZ::R12L, SystemZ::R13L, SystemZ::R14L, SystemZ::R15L
407d37cd26SRichard Sandiford };
417d37cd26SRichard Sandiford 
42f9496060SRichard Sandiford const unsigned SystemZMC::GRH32Regs[16] = {
43f9496060SRichard Sandiford   SystemZ::R0H, SystemZ::R1H, SystemZ::R2H, SystemZ::R3H,
44f9496060SRichard Sandiford   SystemZ::R4H, SystemZ::R5H, SystemZ::R6H, SystemZ::R7H,
45f9496060SRichard Sandiford   SystemZ::R8H, SystemZ::R9H, SystemZ::R10H, SystemZ::R11H,
46f9496060SRichard Sandiford   SystemZ::R12H, SystemZ::R13H, SystemZ::R14H, SystemZ::R15H
47f9496060SRichard Sandiford };
48f9496060SRichard Sandiford 
497d37cd26SRichard Sandiford const unsigned SystemZMC::GR64Regs[16] = {
507d37cd26SRichard Sandiford   SystemZ::R0D, SystemZ::R1D, SystemZ::R2D, SystemZ::R3D,
517d37cd26SRichard Sandiford   SystemZ::R4D, SystemZ::R5D, SystemZ::R6D, SystemZ::R7D,
527d37cd26SRichard Sandiford   SystemZ::R8D, SystemZ::R9D, SystemZ::R10D, SystemZ::R11D,
537d37cd26SRichard Sandiford   SystemZ::R12D, SystemZ::R13D, SystemZ::R14D, SystemZ::R15D
547d37cd26SRichard Sandiford };
557d37cd26SRichard Sandiford 
567d37cd26SRichard Sandiford const unsigned SystemZMC::GR128Regs[16] = {
577d37cd26SRichard Sandiford   SystemZ::R0Q, 0, SystemZ::R2Q, 0,
587d37cd26SRichard Sandiford   SystemZ::R4Q, 0, SystemZ::R6Q, 0,
597d37cd26SRichard Sandiford   SystemZ::R8Q, 0, SystemZ::R10Q, 0,
607d37cd26SRichard Sandiford   SystemZ::R12Q, 0, SystemZ::R14Q, 0
617d37cd26SRichard Sandiford };
627d37cd26SRichard Sandiford 
637d37cd26SRichard Sandiford const unsigned SystemZMC::FP32Regs[16] = {
647d37cd26SRichard Sandiford   SystemZ::F0S, SystemZ::F1S, SystemZ::F2S, SystemZ::F3S,
657d37cd26SRichard Sandiford   SystemZ::F4S, SystemZ::F5S, SystemZ::F6S, SystemZ::F7S,
667d37cd26SRichard Sandiford   SystemZ::F8S, SystemZ::F9S, SystemZ::F10S, SystemZ::F11S,
677d37cd26SRichard Sandiford   SystemZ::F12S, SystemZ::F13S, SystemZ::F14S, SystemZ::F15S
687d37cd26SRichard Sandiford };
697d37cd26SRichard Sandiford 
707d37cd26SRichard Sandiford const unsigned SystemZMC::FP64Regs[16] = {
717d37cd26SRichard Sandiford   SystemZ::F0D, SystemZ::F1D, SystemZ::F2D, SystemZ::F3D,
727d37cd26SRichard Sandiford   SystemZ::F4D, SystemZ::F5D, SystemZ::F6D, SystemZ::F7D,
737d37cd26SRichard Sandiford   SystemZ::F8D, SystemZ::F9D, SystemZ::F10D, SystemZ::F11D,
747d37cd26SRichard Sandiford   SystemZ::F12D, SystemZ::F13D, SystemZ::F14D, SystemZ::F15D
757d37cd26SRichard Sandiford };
767d37cd26SRichard Sandiford 
777d37cd26SRichard Sandiford const unsigned SystemZMC::FP128Regs[16] = {
787d37cd26SRichard Sandiford   SystemZ::F0Q, SystemZ::F1Q, 0, 0,
797d37cd26SRichard Sandiford   SystemZ::F4Q, SystemZ::F5Q, 0, 0,
807d37cd26SRichard Sandiford   SystemZ::F8Q, SystemZ::F9Q, 0, 0,
817d37cd26SRichard Sandiford   SystemZ::F12Q, SystemZ::F13Q, 0, 0
827d37cd26SRichard Sandiford };
837d37cd26SRichard Sandiford 
84a8b04e1cSUlrich Weigand const unsigned SystemZMC::VR32Regs[32] = {
85a8b04e1cSUlrich Weigand   SystemZ::F0S, SystemZ::F1S, SystemZ::F2S, SystemZ::F3S,
86a8b04e1cSUlrich Weigand   SystemZ::F4S, SystemZ::F5S, SystemZ::F6S, SystemZ::F7S,
87a8b04e1cSUlrich Weigand   SystemZ::F8S, SystemZ::F9S, SystemZ::F10S, SystemZ::F11S,
88a8b04e1cSUlrich Weigand   SystemZ::F12S, SystemZ::F13S, SystemZ::F14S, SystemZ::F15S,
89a8b04e1cSUlrich Weigand   SystemZ::F16S, SystemZ::F17S, SystemZ::F18S, SystemZ::F19S,
90a8b04e1cSUlrich Weigand   SystemZ::F20S, SystemZ::F21S, SystemZ::F22S, SystemZ::F23S,
91a8b04e1cSUlrich Weigand   SystemZ::F24S, SystemZ::F25S, SystemZ::F26S, SystemZ::F27S,
92a8b04e1cSUlrich Weigand   SystemZ::F28S, SystemZ::F29S, SystemZ::F30S, SystemZ::F31S
93a8b04e1cSUlrich Weigand };
94a8b04e1cSUlrich Weigand 
95a8b04e1cSUlrich Weigand const unsigned SystemZMC::VR64Regs[32] = {
96a8b04e1cSUlrich Weigand   SystemZ::F0D, SystemZ::F1D, SystemZ::F2D, SystemZ::F3D,
97a8b04e1cSUlrich Weigand   SystemZ::F4D, SystemZ::F5D, SystemZ::F6D, SystemZ::F7D,
98a8b04e1cSUlrich Weigand   SystemZ::F8D, SystemZ::F9D, SystemZ::F10D, SystemZ::F11D,
99a8b04e1cSUlrich Weigand   SystemZ::F12D, SystemZ::F13D, SystemZ::F14D, SystemZ::F15D,
100a8b04e1cSUlrich Weigand   SystemZ::F16D, SystemZ::F17D, SystemZ::F18D, SystemZ::F19D,
101a8b04e1cSUlrich Weigand   SystemZ::F20D, SystemZ::F21D, SystemZ::F22D, SystemZ::F23D,
102a8b04e1cSUlrich Weigand   SystemZ::F24D, SystemZ::F25D, SystemZ::F26D, SystemZ::F27D,
103a8b04e1cSUlrich Weigand   SystemZ::F28D, SystemZ::F29D, SystemZ::F30D, SystemZ::F31D
104a8b04e1cSUlrich Weigand };
105a8b04e1cSUlrich Weigand 
106a8b04e1cSUlrich Weigand const unsigned SystemZMC::VR128Regs[32] = {
107a8b04e1cSUlrich Weigand   SystemZ::V0, SystemZ::V1, SystemZ::V2, SystemZ::V3,
108a8b04e1cSUlrich Weigand   SystemZ::V4, SystemZ::V5, SystemZ::V6, SystemZ::V7,
109a8b04e1cSUlrich Weigand   SystemZ::V8, SystemZ::V9, SystemZ::V10, SystemZ::V11,
110a8b04e1cSUlrich Weigand   SystemZ::V12, SystemZ::V13, SystemZ::V14, SystemZ::V15,
111a8b04e1cSUlrich Weigand   SystemZ::V16, SystemZ::V17, SystemZ::V18, SystemZ::V19,
112a8b04e1cSUlrich Weigand   SystemZ::V20, SystemZ::V21, SystemZ::V22, SystemZ::V23,
113a8b04e1cSUlrich Weigand   SystemZ::V24, SystemZ::V25, SystemZ::V26, SystemZ::V27,
114a8b04e1cSUlrich Weigand   SystemZ::V28, SystemZ::V29, SystemZ::V30, SystemZ::V31
115a8b04e1cSUlrich Weigand };
116a8b04e1cSUlrich Weigand 
117fffc7110SUlrich Weigand const unsigned SystemZMC::AR32Regs[16] = {
118fffc7110SUlrich Weigand   SystemZ::A0, SystemZ::A1, SystemZ::A2, SystemZ::A3,
119fffc7110SUlrich Weigand   SystemZ::A4, SystemZ::A5, SystemZ::A6, SystemZ::A7,
120fffc7110SUlrich Weigand   SystemZ::A8, SystemZ::A9, SystemZ::A10, SystemZ::A11,
121fffc7110SUlrich Weigand   SystemZ::A12, SystemZ::A13, SystemZ::A14, SystemZ::A15
122fffc7110SUlrich Weigand };
123fffc7110SUlrich Weigand 
12403ab2e2bSUlrich Weigand const unsigned SystemZMC::CR64Regs[16] = {
12503ab2e2bSUlrich Weigand   SystemZ::C0, SystemZ::C1, SystemZ::C2, SystemZ::C3,
12603ab2e2bSUlrich Weigand   SystemZ::C4, SystemZ::C5, SystemZ::C6, SystemZ::C7,
12703ab2e2bSUlrich Weigand   SystemZ::C8, SystemZ::C9, SystemZ::C10, SystemZ::C11,
12803ab2e2bSUlrich Weigand   SystemZ::C12, SystemZ::C13, SystemZ::C14, SystemZ::C15
12903ab2e2bSUlrich Weigand };
13003ab2e2bSUlrich Weigand 
getFirstReg(unsigned Reg)13135ec4e35SRichard Sandiford unsigned SystemZMC::getFirstReg(unsigned Reg) {
13235ec4e35SRichard Sandiford   static unsigned Map[SystemZ::NUM_TARGET_REGS];
13335ec4e35SRichard Sandiford   static bool Initialized = false;
13435ec4e35SRichard Sandiford   if (!Initialized) {
13535ec4e35SRichard Sandiford     for (unsigned I = 0; I < 16; ++I) {
13635ec4e35SRichard Sandiford       Map[GR32Regs[I]] = I;
1370755c93bSRichard Sandiford       Map[GRH32Regs[I]] = I;
13835ec4e35SRichard Sandiford       Map[GR64Regs[I]] = I;
13935ec4e35SRichard Sandiford       Map[GR128Regs[I]] = I;
14035ec4e35SRichard Sandiford       Map[FP128Regs[I]] = I;
141fffc7110SUlrich Weigand       Map[AR32Regs[I]] = I;
14235ec4e35SRichard Sandiford     }
143a8b04e1cSUlrich Weigand     for (unsigned I = 0; I < 32; ++I) {
144a8b04e1cSUlrich Weigand       Map[VR32Regs[I]] = I;
145a8b04e1cSUlrich Weigand       Map[VR64Regs[I]] = I;
146a8b04e1cSUlrich Weigand       Map[VR128Regs[I]] = I;
147a8b04e1cSUlrich Weigand     }
14835ec4e35SRichard Sandiford   }
14935ec4e35SRichard Sandiford   assert(Reg < SystemZ::NUM_TARGET_REGS);
15035ec4e35SRichard Sandiford   return Map[Reg];
15135ec4e35SRichard Sandiford }
15235ec4e35SRichard Sandiford 
createSystemZMCAsmInfo(const MCRegisterInfo & MRI,const Triple & TT,const MCTargetOptions & Options)153227144c2SRafael Espindola static MCAsmInfo *createSystemZMCAsmInfo(const MCRegisterInfo &MRI,
1544b63ca13SMirko Brkusanin                                          const Triple &TT,
1554b63ca13SMirko Brkusanin                                          const MCTargetOptions &Options) {
156a9ae2436SAnirudh Prasad   if (TT.isOSzOS())
157a9ae2436SAnirudh Prasad     return new SystemZMCAsmInfoGOFF(TT);
158a9ae2436SAnirudh Prasad 
159a9ae2436SAnirudh Prasad   MCAsmInfo *MAI = new SystemZMCAsmInfoELF(TT);
1607e49dc61SFangrui Song   MCCFIInstruction Inst = MCCFIInstruction::cfiDefCfa(
1617e49dc61SFangrui Song       nullptr, MRI.getDwarfRegNum(SystemZ::R15D, true),
162023b5c1eSYusra Syeda       SystemZMC::ELFCFAOffsetFromInitialSP);
163227144c2SRafael Espindola   MAI->addInitialFrameState(Inst);
1645f613dfdSUlrich Weigand   return MAI;
1655f613dfdSUlrich Weigand }
1665f613dfdSUlrich Weigand 
createSystemZMCInstrInfo()1675f613dfdSUlrich Weigand static MCInstrInfo *createSystemZMCInstrInfo() {
1685f613dfdSUlrich Weigand   MCInstrInfo *X = new MCInstrInfo();
1695f613dfdSUlrich Weigand   InitSystemZMCInstrInfo(X);
1705f613dfdSUlrich Weigand   return X;
1715f613dfdSUlrich Weigand }
1725f613dfdSUlrich Weigand 
createSystemZMCRegisterInfo(const Triple & TT)17350f17235SDaniel Sanders static MCRegisterInfo *createSystemZMCRegisterInfo(const Triple &TT) {
1745f613dfdSUlrich Weigand   MCRegisterInfo *X = new MCRegisterInfo();
1755f613dfdSUlrich Weigand   InitSystemZMCRegisterInfo(X, SystemZ::R14D);
1765f613dfdSUlrich Weigand   return X;
1775f613dfdSUlrich Weigand }
1785f613dfdSUlrich Weigand 
17950f17235SDaniel Sanders static MCSubtargetInfo *
createSystemZMCSubtargetInfo(const Triple & TT,StringRef CPU,StringRef FS)18050f17235SDaniel Sanders createSystemZMCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS) {
181c7a0b268SCraig Topper   return createSystemZMCSubtargetInfoImpl(TT, CPU, /*TuneCPU*/ CPU, FS);
1825f613dfdSUlrich Weigand }
1835f613dfdSUlrich Weigand 
createSystemZMCInstPrinter(const Triple & T,unsigned SyntaxVariant,const MCAsmInfo & MAI,const MCInstrInfo & MII,const MCRegisterInfo & MRI)18450f17235SDaniel Sanders static MCInstPrinter *createSystemZMCInstPrinter(const Triple &T,
185f8019408SEric Christopher                                                  unsigned SyntaxVariant,
1865f613dfdSUlrich Weigand                                                  const MCAsmInfo &MAI,
1875f613dfdSUlrich Weigand                                                  const MCInstrInfo &MII,
188f8019408SEric Christopher                                                  const MCRegisterInfo &MRI) {
1895f613dfdSUlrich Weigand   return new SystemZInstPrinter(MAI, MII, MRI);
1905f613dfdSUlrich Weigand }
1915f613dfdSUlrich Weigand 
emitConstantPools()192a48b43f9SJonas Paulsson void SystemZTargetStreamer::emitConstantPools() {
193a48b43f9SJonas Paulsson   // Emit EXRL target instructions.
194a48b43f9SJonas Paulsson   if (EXRLTargets2Sym.empty())
195a48b43f9SJonas Paulsson     return;
196a48b43f9SJonas Paulsson   // Switch to the .text section.
197a48b43f9SJonas Paulsson   const MCObjectFileInfo &OFI = *Streamer.getContext().getObjectFileInfo();
198adf4142fSFangrui Song   Streamer.switchSection(OFI.getTextSection());
199a48b43f9SJonas Paulsson   for (auto &I : EXRLTargets2Sym) {
200a48b43f9SJonas Paulsson     Streamer.emitLabel(I.second);
201a48b43f9SJonas Paulsson     const MCInstSTIPair &MCI_STI = I.first;
202a48b43f9SJonas Paulsson     Streamer.emitInstruction(MCI_STI.first, *MCI_STI.second);
203a48b43f9SJonas Paulsson   }
204a48b43f9SJonas Paulsson   EXRLTargets2Sym.clear();
205a48b43f9SJonas Paulsson }
206a48b43f9SJonas Paulsson 
2071a5ab3e9SJonas Paulsson namespace {
2081a5ab3e9SJonas Paulsson class SystemZTargetAsmStreamer : public SystemZTargetStreamer {
2091a5ab3e9SJonas Paulsson   formatted_raw_ostream &OS;
2101a5ab3e9SJonas Paulsson 
2111a5ab3e9SJonas Paulsson public:
SystemZTargetAsmStreamer(MCStreamer & S,formatted_raw_ostream & OS)2121a5ab3e9SJonas Paulsson   SystemZTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS)
2131a5ab3e9SJonas Paulsson       : SystemZTargetStreamer(S), OS(OS) {}
emitMachine(StringRef CPU)2141a5ab3e9SJonas Paulsson   void emitMachine(StringRef CPU) override {
2151a5ab3e9SJonas Paulsson     OS << "\t.machine " << CPU << "\n";
2161a5ab3e9SJonas Paulsson   }
2171a5ab3e9SJonas Paulsson };
2181a5ab3e9SJonas Paulsson 
2191a5ab3e9SJonas Paulsson class SystemZTargetELFStreamer : public SystemZTargetStreamer {
2201a5ab3e9SJonas Paulsson public:
SystemZTargetELFStreamer(MCStreamer & S)2211a5ab3e9SJonas Paulsson   SystemZTargetELFStreamer(MCStreamer &S) : SystemZTargetStreamer(S) {}
emitMachine(StringRef CPU)2221a5ab3e9SJonas Paulsson   void emitMachine(StringRef CPU) override {}
2231a5ab3e9SJonas Paulsson };
2241a5ab3e9SJonas Paulsson } // end namespace
2251a5ab3e9SJonas Paulsson 
2261a5ab3e9SJonas Paulsson static MCTargetStreamer *
createAsmTargetStreamer(MCStreamer & S,formatted_raw_ostream & OS,MCInstPrinter * InstPrint,bool isVerboseAsm)2271a5ab3e9SJonas Paulsson createAsmTargetStreamer(MCStreamer &S,
2281a5ab3e9SJonas Paulsson                         formatted_raw_ostream &OS,
2291a5ab3e9SJonas Paulsson                         MCInstPrinter *InstPrint,
2301a5ab3e9SJonas Paulsson                         bool isVerboseAsm) {
2311a5ab3e9SJonas Paulsson   return new SystemZTargetAsmStreamer(S, OS);
2321a5ab3e9SJonas Paulsson }
2331a5ab3e9SJonas Paulsson 
2341a5ab3e9SJonas Paulsson static MCTargetStreamer *
createObjectTargetStreamer(MCStreamer & S,const MCSubtargetInfo & STI)2351a5ab3e9SJonas Paulsson createObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI) {
2361a5ab3e9SJonas Paulsson   return new SystemZTargetELFStreamer(S);
2371a5ab3e9SJonas Paulsson }
2381a5ab3e9SJonas Paulsson 
LLVMInitializeSystemZTargetMC()2390dbcb363STom Stellard extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeSystemZTargetMC() {
2405f613dfdSUlrich Weigand   // Register the MCAsmInfo.
241f42454b9SMehdi Amini   TargetRegistry::RegisterMCAsmInfo(getTheSystemZTarget(),
2425f613dfdSUlrich Weigand                                     createSystemZMCAsmInfo);
2435f613dfdSUlrich Weigand 
2445f613dfdSUlrich Weigand   // Register the MCCodeEmitter.
245f42454b9SMehdi Amini   TargetRegistry::RegisterMCCodeEmitter(getTheSystemZTarget(),
2465f613dfdSUlrich Weigand                                         createSystemZMCCodeEmitter);
2475f613dfdSUlrich Weigand 
2485f613dfdSUlrich Weigand   // Register the MCInstrInfo.
249f42454b9SMehdi Amini   TargetRegistry::RegisterMCInstrInfo(getTheSystemZTarget(),
2505f613dfdSUlrich Weigand                                       createSystemZMCInstrInfo);
2515f613dfdSUlrich Weigand 
2525f613dfdSUlrich Weigand   // Register the MCRegisterInfo.
253f42454b9SMehdi Amini   TargetRegistry::RegisterMCRegInfo(getTheSystemZTarget(),
2545f613dfdSUlrich Weigand                                     createSystemZMCRegisterInfo);
2555f613dfdSUlrich Weigand 
2565f613dfdSUlrich Weigand   // Register the MCSubtargetInfo.
257f42454b9SMehdi Amini   TargetRegistry::RegisterMCSubtargetInfo(getTheSystemZTarget(),
2585f613dfdSUlrich Weigand                                           createSystemZMCSubtargetInfo);
2595f613dfdSUlrich Weigand 
2605f613dfdSUlrich Weigand   // Register the MCAsmBackend.
261f42454b9SMehdi Amini   TargetRegistry::RegisterMCAsmBackend(getTheSystemZTarget(),
2625f613dfdSUlrich Weigand                                        createSystemZMCAsmBackend);
2635f613dfdSUlrich Weigand 
2645f613dfdSUlrich Weigand   // Register the MCInstPrinter.
265f42454b9SMehdi Amini   TargetRegistry::RegisterMCInstPrinter(getTheSystemZTarget(),
2665f613dfdSUlrich Weigand                                         createSystemZMCInstPrinter);
2671a5ab3e9SJonas Paulsson 
2681a5ab3e9SJonas Paulsson   // Register the asm streamer.
2691a5ab3e9SJonas Paulsson   TargetRegistry::RegisterAsmTargetStreamer(getTheSystemZTarget(),
2701a5ab3e9SJonas Paulsson                                             createAsmTargetStreamer);
2711a5ab3e9SJonas Paulsson 
2721a5ab3e9SJonas Paulsson   // Register the obj streamer
2731a5ab3e9SJonas Paulsson   TargetRegistry::RegisterObjectTargetStreamer(getTheSystemZTarget(),
2741a5ab3e9SJonas Paulsson                                                createObjectTargetStreamer);
2755f613dfdSUlrich Weigand }
276