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