diff options
Diffstat (limited to 'contrib/llvm/patches/patch-r262261-llvm-r198028-sparc.diff')
-rw-r--r-- | contrib/llvm/patches/patch-r262261-llvm-r198028-sparc.diff | 258 |
1 files changed, 258 insertions, 0 deletions
diff --git a/contrib/llvm/patches/patch-r262261-llvm-r198028-sparc.diff b/contrib/llvm/patches/patch-r262261-llvm-r198028-sparc.diff new file mode 100644 index 0000000..b4fb929 --- /dev/null +++ b/contrib/llvm/patches/patch-r262261-llvm-r198028-sparc.diff @@ -0,0 +1,258 @@ +Pull in r198028 from upstream llvm trunk (by Venkatraman Govindaraju): + + [Sparc] Add MCInstPrinter implementation for SPARC. + +Introduced here: http://svn.freebsd.org/changeset/base/262261 + +Index: lib/Target/Sparc/InstPrinter/LLVMBuild.txt +=================================================================== +--- lib/Target/Sparc/InstPrinter/LLVMBuild.txt ++++ lib/Target/Sparc/InstPrinter/LLVMBuild.txt +@@ -0,0 +1,23 @@ ++;===- ./lib/Target/Sparc/InstPrinter/LLVMBuild.txt -------------*- Conf -*--===; ++; ++; The LLVM Compiler Infrastructure ++; ++; This file is distributed under the University of Illinois Open Source ++; License. See LICENSE.TXT for details. ++; ++;===------------------------------------------------------------------------===; ++; ++; This is an LLVMBuild description file for the components in this subdirectory. ++; ++; For more information on the LLVMBuild system, please see: ++; ++; http://llvm.org/docs/LLVMBuild.html ++; ++;===------------------------------------------------------------------------===; ++ ++[component_0] ++type = Library ++name = SparcAsmPrinter ++parent = Sparc ++required_libraries = MC Support ++add_to_library_groups = Sparc +Index: lib/Target/Sparc/InstPrinter/SparcInstPrinter.cpp +=================================================================== +--- lib/Target/Sparc/InstPrinter/SparcInstPrinter.cpp ++++ lib/Target/Sparc/InstPrinter/SparcInstPrinter.cpp +@@ -0,0 +1,95 @@ ++//===-- SparcInstPrinter.cpp - Convert Sparc MCInst to assembly syntax -----==// ++// ++// The LLVM Compiler Infrastructure ++// ++// This file is distributed under the University of Illinois Open Source ++// License. See LICENSE.TXT for details. ++// ++//===----------------------------------------------------------------------===// ++// ++// This class prints an Sparc MCInst to a .s file. ++// ++//===----------------------------------------------------------------------===// ++ ++#define DEBUG_TYPE "asm-printer" ++#include "SparcInstPrinter.h" ++ ++#include "Sparc.h" ++#include "MCTargetDesc/SparcBaseInfo.h" ++#include "llvm/MC/MCExpr.h" ++#include "llvm/MC/MCInst.h" ++#include "llvm/MC/MCSymbol.h" ++#include "llvm/Support/raw_ostream.h" ++using namespace llvm; ++ ++#define GET_INSTRUCTION_NAME ++// Uncomment the following line once we are ready to use MCAsmWriter. ++//#include "SparcGenAsmWriter.inc" ++ ++void SparcInstPrinter::printRegName(raw_ostream &OS, unsigned RegNo) const ++{ ++ OS << '%' << StringRef(getRegisterName(RegNo)).lower(); ++} ++ ++void SparcInstPrinter::printInst(const MCInst *MI, raw_ostream &O, ++ StringRef Annot) ++{ ++ printInstruction(MI, O); ++ printAnnotation(O, Annot); ++} ++ ++void SparcInstPrinter::printOperand(const MCInst *MI, int opNum, ++ raw_ostream &O) ++{ ++ const MCOperand &MO = MI->getOperand (opNum); ++ ++ if (MO.isReg()) { ++ printRegName(O, MO.getReg()); ++ return ; ++ } ++ ++ if (MO.isImm()) { ++ O << (int)MO.getImm(); ++ return; ++ } ++ ++ assert(MO.isExpr() && "Unknown operand kind in printOperand"); ++ MO.getExpr()->print(O); ++} ++ ++void SparcInstPrinter::printMemOperand(const MCInst *MI, int opNum, ++ raw_ostream &O, const char *Modifier) ++{ ++ printOperand(MI, opNum, O); ++ ++ // If this is an ADD operand, emit it like normal operands. ++ if (Modifier && !strcmp(Modifier, "arith")) { ++ O << ", "; ++ printOperand(MI, opNum+1, O); ++ return; ++ } ++ const MCOperand &MO = MI->getOperand(opNum+1); ++ ++ if (MO.isReg() && MO.getReg() == SP::G0) ++ return; // don't print "+%g0" ++ if (MO.isImm() && MO.getImm() == 0) ++ return; // don't print "+0" ++ ++ O << "+"; ++ ++ printOperand(MI, opNum+1, O); ++} ++ ++void SparcInstPrinter::printCCOperand(const MCInst *MI, int opNum, ++ raw_ostream &O) ++{ ++ int CC = (int)MI->getOperand(opNum).getImm(); ++ O << SPARCCondCodeToString((SPCC::CondCodes)CC); ++} ++ ++bool SparcInstPrinter::printGetPCX(const MCInst *MI, unsigned opNum, ++ raw_ostream &O) ++{ ++ assert(0 && "FIXME: Implement SparcInstPrinter::printGetPCX."); ++ return true; ++} +Index: lib/Target/Sparc/InstPrinter/CMakeLists.txt +=================================================================== +--- lib/Target/Sparc/InstPrinter/CMakeLists.txt ++++ lib/Target/Sparc/InstPrinter/CMakeLists.txt +@@ -0,0 +1,3 @@ ++add_llvm_library(LLVMSparcAsmPrinter ++ SparcInstPrinter.cpp ++ ) +Index: lib/Target/Sparc/InstPrinter/Makefile +=================================================================== +--- lib/Target/Sparc/InstPrinter/Makefile ++++ lib/Target/Sparc/InstPrinter/Makefile +@@ -0,0 +1,16 @@ ++##===- lib/Target/Sparc/InstPrinter/Makefile ---------------*- Makefile -*-===## ++# ++# The LLVM Compiler Infrastructure ++# ++# This file is distributed under the University of Illinois Open Source ++# License. See LICENSE.TXT for details. ++# ++##===----------------------------------------------------------------------===## ++ ++LEVEL = ../../../.. ++LIBRARYNAME = LLVMSparcAsmPrinter ++ ++# Hack: we need to include 'main' target directory to grab private headers ++CPP.Flags += -I$(PROJ_OBJ_DIR)/.. -I$(PROJ_SRC_DIR)/.. ++ ++include $(LEVEL)/Makefile.common +Index: lib/Target/Sparc/InstPrinter/SparcInstPrinter.h +=================================================================== +--- lib/Target/Sparc/InstPrinter/SparcInstPrinter.h ++++ lib/Target/Sparc/InstPrinter/SparcInstPrinter.h +@@ -0,0 +1,46 @@ ++//===-- SparcInstPrinter.h - Convert Sparc MCInst to assembly syntax ------===// ++// ++// The LLVM Compiler Infrastructure ++// ++// This file is distributed under the University of Illinois Open Source ++// License. See LICENSE.TXT for details. ++// ++//===----------------------------------------------------------------------===// ++// ++// This class prints an Sparc MCInst to a .s file. ++// ++//===----------------------------------------------------------------------===// ++ ++#ifndef SparcINSTPRINTER_H ++#define SparcINSTPRINTER_H ++ ++#include "llvm/MC/MCInstPrinter.h" ++ ++namespace llvm { ++ ++class MCOperand; ++ ++class SparcInstPrinter : public MCInstPrinter { ++public: ++ SparcInstPrinter(const MCAsmInfo &MAI, ++ const MCInstrInfo &MII, ++ const MCRegisterInfo &MRI) ++ : MCInstPrinter(MAI, MII, MRI) {} ++ ++ virtual void printRegName(raw_ostream &OS, unsigned RegNo) const; ++ virtual void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot); ++ ++ // Autogenerated by tblgen. ++ void printInstruction(const MCInst *MI, raw_ostream &O); ++ static const char *getRegisterName(unsigned RegNo); ++ ++ void printOperand(const MCInst *MI, int opNum, raw_ostream &OS); ++ void printMemOperand(const MCInst *MI, int opNum, raw_ostream &OS, ++ const char *Modifier = 0); ++ void printCCOperand(const MCInst *MI, int opNum, raw_ostream &OS); ++ bool printGetPCX(const MCInst *MI, unsigned OpNo, raw_ostream &OS); ++ ++}; ++} // end namespace llvm ++ ++#endif +Index: lib/Target/Sparc/LLVMBuild.txt +=================================================================== +--- lib/Target/Sparc/LLVMBuild.txt ++++ lib/Target/Sparc/LLVMBuild.txt +@@ -16,7 +16,7 @@ + ;===------------------------------------------------------------------------===; + + [common] +-subdirectories = MCTargetDesc TargetInfo ++subdirectories = InstPrinter MCTargetDesc TargetInfo + + [component_0] + type = TargetGroup +@@ -29,6 +29,6 @@ has_jit = 1 + type = Library + name = SparcCodeGen + parent = Sparc +-required_libraries = AsmPrinter CodeGen Core MC SelectionDAG SparcDesc +- SparcInfo Support Target ++required_libraries = AsmPrinter CodeGen Core MC SelectionDAG SparcAsmPrinter ++ SparcDesc SparcInfo Support Target + add_to_library_groups = Sparc +Index: lib/Target/Sparc/CMakeLists.txt +=================================================================== +--- lib/Target/Sparc/CMakeLists.txt ++++ lib/Target/Sparc/CMakeLists.txt +@@ -29,3 +29,4 @@ add_dependencies(LLVMSparcCodeGen SparcCommonTable + + add_subdirectory(TargetInfo) + add_subdirectory(MCTargetDesc) ++add_subdirectory(InstPrinter) +Index: lib/Target/Sparc/Makefile +=================================================================== +--- lib/Target/Sparc/Makefile ++++ lib/Target/Sparc/Makefile +@@ -17,7 +17,7 @@ BUILT_SOURCES = SparcGenRegisterInfo.inc SparcGenI + SparcGenSubtargetInfo.inc SparcGenCallingConv.inc \ + SparcGenCodeEmitter.inc + +-DIRS = TargetInfo MCTargetDesc ++DIRS = InstPrinter TargetInfo MCTargetDesc + + include $(LEVEL)/Makefile.common + |