11d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand//===-- SystemZMCTargetDesc.cpp - SystemZ target descriptions -------------===//
21d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand//
31d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand//                     The LLVM Compiler Infrastructure
41d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand//
51d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// This file is distributed under the University of Illinois Open Source
61d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// License. See LICENSE.TXT for details.
71d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand//
81d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand//===----------------------------------------------------------------------===//
91d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
101d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "SystemZMCTargetDesc.h"
111d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "InstPrinter/SystemZInstPrinter.h"
121d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "SystemZMCAsmInfo.h"
131d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "llvm/MC/MCCodeGenInfo.h"
141d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "llvm/MC/MCInstrInfo.h"
151d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "llvm/MC/MCStreamer.h"
161d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "llvm/MC/MCSubtargetInfo.h"
171d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "llvm/Support/TargetRegistry.h"
181d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
19dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesusing namespace llvm;
20dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
211d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#define GET_INSTRINFO_MC_DESC
221d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "SystemZGenInstrInfo.inc"
231d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
241d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#define GET_SUBTARGETINFO_MC_DESC
251d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "SystemZGenSubtargetInfo.inc"
261d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
271d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#define GET_REGINFO_MC_DESC
281d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "SystemZGenRegisterInfo.inc"
291d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
30f917bc0406e47866eb1f6c0378de16498018b620Richard Sandifordconst unsigned SystemZMC::GR32Regs[16] = {
31514756983e9ba3684a89ed583bf5a98ffb20c203Richard Sandiford  SystemZ::R0L, SystemZ::R1L, SystemZ::R2L, SystemZ::R3L,
32514756983e9ba3684a89ed583bf5a98ffb20c203Richard Sandiford  SystemZ::R4L, SystemZ::R5L, SystemZ::R6L, SystemZ::R7L,
33514756983e9ba3684a89ed583bf5a98ffb20c203Richard Sandiford  SystemZ::R8L, SystemZ::R9L, SystemZ::R10L, SystemZ::R11L,
34514756983e9ba3684a89ed583bf5a98ffb20c203Richard Sandiford  SystemZ::R12L, SystemZ::R13L, SystemZ::R14L, SystemZ::R15L
35f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford};
36f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford
37eb2f72f454048a1d179d1c75f5a953c7dfe43fc9Richard Sandifordconst unsigned SystemZMC::GRH32Regs[16] = {
38eb2f72f454048a1d179d1c75f5a953c7dfe43fc9Richard Sandiford  SystemZ::R0H, SystemZ::R1H, SystemZ::R2H, SystemZ::R3H,
39eb2f72f454048a1d179d1c75f5a953c7dfe43fc9Richard Sandiford  SystemZ::R4H, SystemZ::R5H, SystemZ::R6H, SystemZ::R7H,
40eb2f72f454048a1d179d1c75f5a953c7dfe43fc9Richard Sandiford  SystemZ::R8H, SystemZ::R9H, SystemZ::R10H, SystemZ::R11H,
41eb2f72f454048a1d179d1c75f5a953c7dfe43fc9Richard Sandiford  SystemZ::R12H, SystemZ::R13H, SystemZ::R14H, SystemZ::R15H
42eb2f72f454048a1d179d1c75f5a953c7dfe43fc9Richard Sandiford};
43eb2f72f454048a1d179d1c75f5a953c7dfe43fc9Richard Sandiford
44f917bc0406e47866eb1f6c0378de16498018b620Richard Sandifordconst unsigned SystemZMC::GR64Regs[16] = {
45f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::R0D, SystemZ::R1D, SystemZ::R2D, SystemZ::R3D,
46f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::R4D, SystemZ::R5D, SystemZ::R6D, SystemZ::R7D,
47f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::R8D, SystemZ::R9D, SystemZ::R10D, SystemZ::R11D,
48f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::R12D, SystemZ::R13D, SystemZ::R14D, SystemZ::R15D
49f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford};
50f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford
51f917bc0406e47866eb1f6c0378de16498018b620Richard Sandifordconst unsigned SystemZMC::GR128Regs[16] = {
52f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::R0Q, 0, SystemZ::R2Q, 0,
53f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::R4Q, 0, SystemZ::R6Q, 0,
54f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::R8Q, 0, SystemZ::R10Q, 0,
55f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::R12Q, 0, SystemZ::R14Q, 0
56f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford};
57f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford
58f917bc0406e47866eb1f6c0378de16498018b620Richard Sandifordconst unsigned SystemZMC::FP32Regs[16] = {
59f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::F0S, SystemZ::F1S, SystemZ::F2S, SystemZ::F3S,
60f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::F4S, SystemZ::F5S, SystemZ::F6S, SystemZ::F7S,
61f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::F8S, SystemZ::F9S, SystemZ::F10S, SystemZ::F11S,
62f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::F12S, SystemZ::F13S, SystemZ::F14S, SystemZ::F15S
63f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford};
64f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford
65f917bc0406e47866eb1f6c0378de16498018b620Richard Sandifordconst unsigned SystemZMC::FP64Regs[16] = {
66f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::F0D, SystemZ::F1D, SystemZ::F2D, SystemZ::F3D,
67f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::F4D, SystemZ::F5D, SystemZ::F6D, SystemZ::F7D,
68f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::F8D, SystemZ::F9D, SystemZ::F10D, SystemZ::F11D,
69f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::F12D, SystemZ::F13D, SystemZ::F14D, SystemZ::F15D
70f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford};
71f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford
72f917bc0406e47866eb1f6c0378de16498018b620Richard Sandifordconst unsigned SystemZMC::FP128Regs[16] = {
73f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::F0Q, SystemZ::F1Q, 0, 0,
74f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::F4Q, SystemZ::F5Q, 0, 0,
75f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::F8Q, SystemZ::F9Q, 0, 0,
76f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford  SystemZ::F12Q, SystemZ::F13Q, 0, 0
77f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford};
78f917bc0406e47866eb1f6c0378de16498018b620Richard Sandiford
79c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandifordunsigned SystemZMC::getFirstReg(unsigned Reg) {
80c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford  static unsigned Map[SystemZ::NUM_TARGET_REGS];
81c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford  static bool Initialized = false;
82c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford  if (!Initialized) {
83c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford    for (unsigned I = 0; I < 16; ++I) {
84c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford      Map[GR32Regs[I]] = I;
8555d7d83b6c9e55fa73d667660c8e90f92999385bRichard Sandiford      Map[GRH32Regs[I]] = I;
86c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford      Map[GR64Regs[I]] = I;
87c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford      Map[GR128Regs[I]] = I;
88c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford      Map[FP32Regs[I]] = I;
89c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford      Map[FP64Regs[I]] = I;
90c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford      Map[FP128Regs[I]] = I;
91c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford    }
92c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford  }
93c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford  assert(Reg < SystemZ::NUM_TARGET_REGS);
94c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford  return Map[Reg];
95c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford}
96c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford
974a971705bc6030dc2e4338b3cd5cffa2e0f88b7bRafael Espindolastatic MCAsmInfo *createSystemZMCAsmInfo(const MCRegisterInfo &MRI,
984a971705bc6030dc2e4338b3cd5cffa2e0f88b7bRafael Espindola                                         StringRef TT) {
996e53180db120b30f600ac31611a9dd47ef7f4921Rafael Espindola  MCAsmInfo *MAI = new SystemZMCAsmInfo(TT);
1004a971705bc6030dc2e4338b3cd5cffa2e0f88b7bRafael Espindola  MCCFIInstruction Inst =
101dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines      MCCFIInstruction::createDefCfa(nullptr,
102dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                     MRI.getDwarfRegNum(SystemZ::R15D, true),
1034a971705bc6030dc2e4338b3cd5cffa2e0f88b7bRafael Espindola                                     SystemZMC::CFAOffsetFromInitialSP);
1044a971705bc6030dc2e4338b3cd5cffa2e0f88b7bRafael Espindola  MAI->addInitialFrameState(Inst);
1051d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  return MAI;
1061d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand}
1071d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
1081d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandstatic MCInstrInfo *createSystemZMCInstrInfo() {
1091d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  MCInstrInfo *X = new MCInstrInfo();
1101d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  InitSystemZMCInstrInfo(X);
1111d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  return X;
1121d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand}
1131d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
1141d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandstatic MCRegisterInfo *createSystemZMCRegisterInfo(StringRef TT) {
1151d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  MCRegisterInfo *X = new MCRegisterInfo();
1161d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  InitSystemZMCRegisterInfo(X, SystemZ::R14D);
1171d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  return X;
1181d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand}
1191d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
1201d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandstatic MCSubtargetInfo *createSystemZMCSubtargetInfo(StringRef TT,
1211d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand                                                     StringRef CPU,
1221d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand                                                     StringRef FS) {
1231d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  MCSubtargetInfo *X = new MCSubtargetInfo();
1241d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  InitSystemZMCSubtargetInfo(X, TT, CPU, FS);
1251d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  return X;
1261d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand}
1271d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
1281d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandstatic MCCodeGenInfo *createSystemZMCCodeGenInfo(StringRef TT, Reloc::Model RM,
1291d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand                                                 CodeModel::Model CM,
1307a1ead46fb629839e5ce25574246ee743ab8b54fRichard Sandiford                                                 CodeGenOpt::Level OL) {
1311d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  MCCodeGenInfo *X = new MCCodeGenInfo();
1321d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
1331d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // Static code is suitable for use in a dynamic executable; there is no
1341d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // separate DynamicNoPIC model.
1351d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  if (RM == Reloc::Default || RM == Reloc::DynamicNoPIC)
1361d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand    RM = Reloc::Static;
1371d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
1381d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // For SystemZ we define the models as follows:
1391d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //
1401d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // Small:  BRASL can call any function and will use a stub if necessary.
1411d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //         Locally-binding symbols will always be in range of LARL.
1421d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //
1431d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // Medium: BRASL can call any function and will use a stub if necessary.
1441d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //         GOT slots and locally-defined text will always be in range
1451d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //         of LARL, but other symbols might not be.
1461d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //
1471d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // Large:  Equivalent to Medium for now.
1481d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //
1491d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // Kernel: Equivalent to Medium for now.
1501d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //
1511d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // This means that any PIC module smaller than 4GB meets the
1521d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // requirements of Small, so Small seems like the best default there.
1531d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //
1541d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // All symbols bind locally in a non-PIC module, so the choice is less
1551d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // obvious.  There are two cases:
1561d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //
1571d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // - When creating an executable, PLTs and copy relocations allow
1581d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //   us to treat external symbols as part of the executable.
1591d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //   Any executable smaller than 4GB meets the requirements of Small,
1601d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //   so that seems like the best default.
1611d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //
1621d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // - When creating JIT code, stubs will be in range of BRASL if the
1631d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //   image is less than 4GB in size.  GOT entries will likewise be
1641d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //   in range of LARL.  However, the JIT environment has no equivalent
1651d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //   of copy relocs, so locally-binding data symbols might not be in
1661d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  //   the range of LARL.  We need the Medium model in that case.
1671d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  if (CM == CodeModel::Default)
1681d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand    CM = CodeModel::Small;
1691d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  else if (CM == CodeModel::JITDefault)
1701d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand    CM = RM == Reloc::PIC_ ? CodeModel::Small : CodeModel::Medium;
1717a1ead46fb629839e5ce25574246ee743ab8b54fRichard Sandiford  X->InitMCCodeGenInfo(RM, CM, OL);
1721d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  return X;
1731d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand}
1741d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
1752c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainarstatic MCInstPrinter *createSystemZMCInstPrinter(const Triple &T,
1761d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand                                                 unsigned SyntaxVariant,
1771d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand                                                 const MCAsmInfo &MAI,
1781d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand                                                 const MCInstrInfo &MII,
1792c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar                                                 const MCRegisterInfo &MRI) {
1801d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  return new SystemZInstPrinter(MAI, MII, MRI);
1811d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand}
1821d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
1831d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandextern "C" void LLVMInitializeSystemZTargetMC() {
1841d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // Register the MCAsmInfo.
1851d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  TargetRegistry::RegisterMCAsmInfo(TheSystemZTarget,
1861d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand                                    createSystemZMCAsmInfo);
1871d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
1881d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // Register the MCCodeGenInfo.
1891d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  TargetRegistry::RegisterMCCodeGenInfo(TheSystemZTarget,
1901d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand                                        createSystemZMCCodeGenInfo);
1911d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
1921d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // Register the MCCodeEmitter.
1931d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  TargetRegistry::RegisterMCCodeEmitter(TheSystemZTarget,
1941d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand					createSystemZMCCodeEmitter);
1951d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
1961d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // Register the MCInstrInfo.
1971d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  TargetRegistry::RegisterMCInstrInfo(TheSystemZTarget,
1981d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand                                      createSystemZMCInstrInfo);
1991d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
2001d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // Register the MCRegisterInfo.
2011d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  TargetRegistry::RegisterMCRegInfo(TheSystemZTarget,
2021d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand                                    createSystemZMCRegisterInfo);
2031d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
2041d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // Register the MCSubtargetInfo.
2051d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  TargetRegistry::RegisterMCSubtargetInfo(TheSystemZTarget,
2061d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand                                          createSystemZMCSubtargetInfo);
2071d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
2081d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // Register the MCAsmBackend.
2091d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  TargetRegistry::RegisterMCAsmBackend(TheSystemZTarget,
2101d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand                                       createSystemZMCAsmBackend);
2111d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand
2121d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  // Register the MCInstPrinter.
2131d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand  TargetRegistry::RegisterMCInstPrinter(TheSystemZTarget,
2141d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand                                        createSystemZMCInstPrinter);
2151d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand}
216