a426b286c8
patch for r263619, and unify all the URLs to point to svnweb.
259 lines
8.4 KiB
Diff
259 lines
8.4 KiB
Diff
Pull in r198028 from upstream llvm trunk (by Venkatraman Govindaraju):
|
|
|
|
[Sparc] Add MCInstPrinter implementation for SPARC.
|
|
|
|
Introduced here: http://svnweb.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
|
|
|