NVPTXMCTargetDesc.cpp 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. //===-- NVPTXMCTargetDesc.cpp - NVPTX Target Descriptions -------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. // This file provides NVPTX specific target descriptions.
  10. //
  11. //===----------------------------------------------------------------------===//
  12. #include "NVPTXMCTargetDesc.h"
  13. #include "NVPTXInstPrinter.h"
  14. #include "NVPTXMCAsmInfo.h"
  15. #include "NVPTXTargetStreamer.h"
  16. #include "TargetInfo/NVPTXTargetInfo.h"
  17. #include "llvm/MC/MCInstrInfo.h"
  18. #include "llvm/MC/MCRegisterInfo.h"
  19. #include "llvm/MC/MCSubtargetInfo.h"
  20. #include "llvm/MC/TargetRegistry.h"
  21. using namespace llvm;
  22. #define GET_INSTRINFO_MC_DESC
  23. #include "NVPTXGenInstrInfo.inc"
  24. #define GET_SUBTARGETINFO_MC_DESC
  25. #include "NVPTXGenSubtargetInfo.inc"
  26. #define GET_REGINFO_MC_DESC
  27. #include "NVPTXGenRegisterInfo.inc"
  28. static MCInstrInfo *createNVPTXMCInstrInfo() {
  29. MCInstrInfo *X = new MCInstrInfo();
  30. InitNVPTXMCInstrInfo(X);
  31. return X;
  32. }
  33. static MCRegisterInfo *createNVPTXMCRegisterInfo(const Triple &TT) {
  34. MCRegisterInfo *X = new MCRegisterInfo();
  35. // PTX does not have a return address register.
  36. InitNVPTXMCRegisterInfo(X, 0);
  37. return X;
  38. }
  39. static MCSubtargetInfo *
  40. createNVPTXMCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS) {
  41. return createNVPTXMCSubtargetInfoImpl(TT, CPU, /*TuneCPU*/ CPU, FS);
  42. }
  43. static MCInstPrinter *createNVPTXMCInstPrinter(const Triple &T,
  44. unsigned SyntaxVariant,
  45. const MCAsmInfo &MAI,
  46. const MCInstrInfo &MII,
  47. const MCRegisterInfo &MRI) {
  48. if (SyntaxVariant == 0)
  49. return new NVPTXInstPrinter(MAI, MII, MRI);
  50. return nullptr;
  51. }
  52. static MCTargetStreamer *createTargetAsmStreamer(MCStreamer &S,
  53. formatted_raw_ostream &,
  54. MCInstPrinter *, bool) {
  55. return new NVPTXTargetStreamer(S);
  56. }
  57. // Force static initialization.
  58. extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeNVPTXTargetMC() {
  59. for (Target *T : {&getTheNVPTXTarget32(), &getTheNVPTXTarget64()}) {
  60. // Register the MC asm info.
  61. RegisterMCAsmInfo<NVPTXMCAsmInfo> X(*T);
  62. // Register the MC instruction info.
  63. TargetRegistry::RegisterMCInstrInfo(*T, createNVPTXMCInstrInfo);
  64. // Register the MC register info.
  65. TargetRegistry::RegisterMCRegInfo(*T, createNVPTXMCRegisterInfo);
  66. // Register the MC subtarget info.
  67. TargetRegistry::RegisterMCSubtargetInfo(*T, createNVPTXMCSubtargetInfo);
  68. // Register the MCInstPrinter.
  69. TargetRegistry::RegisterMCInstPrinter(*T, createNVPTXMCInstPrinter);
  70. // Register the MCTargetStreamer.
  71. TargetRegistry::RegisterAsmTargetStreamer(*T, createTargetAsmStreamer);
  72. }
  73. }