summaryrefslogtreecommitdiffstats
path: root/contrib/llvm/patches/patch-r262261-llvm-r198028-sparc.diff
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm/patches/patch-r262261-llvm-r198028-sparc.diff')
-rw-r--r--contrib/llvm/patches/patch-r262261-llvm-r198028-sparc.diff258
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
+
OpenPOWER on IntegriCloud