diff options
| author | Venkatraman Govindaraju <venkatra@cs.wisc.edu> | 2013-12-26 01:49:59 +0000 | 
|---|---|---|
| committer | Venkatraman Govindaraju <venkatra@cs.wisc.edu> | 2013-12-26 01:49:59 +0000 | 
| commit | bf683fd15caafc7084b3ed7f41e4f152be6dc740 (patch) | |
| tree | 64bbf41d04df1b69ff6fe6e7756de959ced52ae8 /llvm/lib/Target/Sparc/MCTargetDesc | |
| parent | 08bcf29068205f077968d1b918f84015a027c577 (diff) | |
| download | bcm5719-llvm-bf683fd15caafc7084b3ed7f41e4f152be6dc740.tar.gz bcm5719-llvm-bf683fd15caafc7084b3ed7f41e4f152be6dc740.zip  | |
[Sparc] Lower and MachineInstr to MC and print assembly using MCInstPrinter.
llvm-svn: 198030
Diffstat (limited to 'llvm/lib/Target/Sparc/MCTargetDesc')
4 files changed, 77 insertions, 1 deletions
diff --git a/llvm/lib/Target/Sparc/MCTargetDesc/CMakeLists.txt b/llvm/lib/Target/Sparc/MCTargetDesc/CMakeLists.txt index 8bf924e86d7..3a40fcaba47 100644 --- a/llvm/lib/Target/Sparc/MCTargetDesc/CMakeLists.txt +++ b/llvm/lib/Target/Sparc/MCTargetDesc/CMakeLists.txt @@ -2,4 +2,5 @@ add_llvm_library(LLVMSparcDesc    SparcMCTargetDesc.cpp    SparcMCAsmInfo.cpp    SparcMCExpr.cpp +  SparcTargetStreamer.cpp    ) diff --git a/llvm/lib/Target/Sparc/MCTargetDesc/LLVMBuild.txt b/llvm/lib/Target/Sparc/MCTargetDesc/LLVMBuild.txt index 97f8f162c27..22515e6d6dc 100644 --- a/llvm/lib/Target/Sparc/MCTargetDesc/LLVMBuild.txt +++ b/llvm/lib/Target/Sparc/MCTargetDesc/LLVMBuild.txt @@ -19,5 +19,5 @@  type = Library  name = SparcDesc  parent = Sparc -required_libraries = MC SparcInfo Support +required_libraries = MC SparcAsmPrinter SparcInfo Support  add_to_library_groups = Sparc diff --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp index 1c64e1b0c4c..45e1d353695 100644 --- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp +++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp @@ -13,6 +13,8 @@  #include "SparcMCTargetDesc.h"  #include "SparcMCAsmInfo.h" +#include "SparcTargetStreamer.h" +#include "InstPrinter/SparcInstPrinter.h"  #include "llvm/MC/MCCodeGenInfo.h"  #include "llvm/MC/MCInstrInfo.h"  #include "llvm/MC/MCRegisterInfo.h" @@ -86,6 +88,28 @@ static MCCodeGenInfo *createSparcV9MCCodeGenInfo(StringRef TT, Reloc::Model RM,    X->InitMCCodeGenInfo(RM, CM, OL);    return X;  } + +static MCStreamer * +createMCAsmStreamer(MCContext &Ctx, formatted_raw_ostream &OS, +                    bool isVerboseAsm, bool useLoc, bool useCFI, +                    bool useDwarfDirectory, MCInstPrinter *InstPrint, +                    MCCodeEmitter *CE, MCAsmBackend *TAB, bool ShowInst) { +  SparcTargetAsmStreamer *S = new SparcTargetAsmStreamer(OS); + +  return llvm::createAsmStreamer(Ctx, S, OS, isVerboseAsm, useLoc, useCFI, +                                 useDwarfDirectory, InstPrint, CE, TAB, +                                 ShowInst); +} + +static MCInstPrinter *createSparcMCInstPrinter(const Target &T, +                                              unsigned SyntaxVariant, +                                              const MCAsmInfo &MAI, +                                              const MCInstrInfo &MII, +                                              const MCRegisterInfo &MRI, +                                              const MCSubtargetInfo &STI) { +  return new SparcInstPrinter(MAI, MII, MRI); +} +  extern "C" void LLVMInitializeSparcTargetMC() {    // Register the MC asm info.    RegisterMCAsmInfo<SparcELFMCAsmInfo> X(TheSparcTarget); @@ -106,4 +130,15 @@ extern "C" void LLVMInitializeSparcTargetMC() {    // Register the MC subtarget info.    TargetRegistry::RegisterMCSubtargetInfo(TheSparcTarget,                                            createSparcMCSubtargetInfo); + +  TargetRegistry::RegisterAsmStreamer(TheSparcTarget, +                                      createMCAsmStreamer); +  TargetRegistry::RegisterAsmStreamer(TheSparcV9Target, +                                      createMCAsmStreamer); + +  // Register the MCInstPrinter +  TargetRegistry::RegisterMCInstPrinter(TheSparcTarget, +                                        createSparcMCInstPrinter); +  TargetRegistry::RegisterMCInstPrinter(TheSparcV9Target, +                                        createSparcMCInstPrinter);  } diff --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp b/llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp new file mode 100644 index 00000000000..01043aed5ee --- /dev/null +++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp @@ -0,0 +1,40 @@ +//===-- SparcTargetStreamer.cpp - Sparc Target Streamer Methods -----------===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file provides Sparc specific target streamer methods. +// +//===----------------------------------------------------------------------===// + +#include "SparcTargetStreamer.h" +#include "InstPrinter/SparcInstPrinter.h" +#include "llvm/Support/FormattedStream.h" + +using namespace llvm; + +// pin vtable to this file +void SparcTargetStreamer::anchor() {} + +SparcTargetAsmStreamer::SparcTargetAsmStreamer(formatted_raw_ostream &OS) +    : OS(OS) {} + +void SparcTargetAsmStreamer::emitSparcRegisterIgnore(unsigned reg) { +  OS << "\t.register " +     << "%" << StringRef(SparcInstPrinter::getRegisterName(reg)).lower() +     << ", #ignore\n"; +} + +void SparcTargetAsmStreamer::emitSparcRegisterScratch(unsigned reg) { +  OS << "\t.register " +     << "%" << StringRef(SparcInstPrinter::getRegisterName(reg)).lower() +     << ", #scratch\n"; +} + +MCELFStreamer &SparcTargetELFStreamer::getStreamer() { +  return static_cast<MCELFStreamer &>(*Streamer); +}  | 

