mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
[Sparc] Add MCInstPrinter implementation for SPARC.
llvm-svn: 198028
This commit is contained in:
parent
7096c20ede
commit
409105f47e
@ -27,3 +27,4 @@ add_llvm_target(SparcCodeGen
|
|||||||
|
|
||||||
add_subdirectory(TargetInfo)
|
add_subdirectory(TargetInfo)
|
||||||
add_subdirectory(MCTargetDesc)
|
add_subdirectory(MCTargetDesc)
|
||||||
|
add_subdirectory(InstPrinter)
|
||||||
|
3
lib/Target/Sparc/InstPrinter/CMakeLists.txt
Normal file
3
lib/Target/Sparc/InstPrinter/CMakeLists.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
add_llvm_library(LLVMSparcAsmPrinter
|
||||||
|
SparcInstPrinter.cpp
|
||||||
|
)
|
23
lib/Target/Sparc/InstPrinter/LLVMBuild.txt
Normal file
23
lib/Target/Sparc/InstPrinter/LLVMBuild.txt
Normal file
@ -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
|
16
lib/Target/Sparc/InstPrinter/Makefile
Normal file
16
lib/Target/Sparc/InstPrinter/Makefile
Normal file
@ -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
|
95
lib/Target/Sparc/InstPrinter/SparcInstPrinter.cpp
Normal file
95
lib/Target/Sparc/InstPrinter/SparcInstPrinter.cpp
Normal file
@ -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;
|
||||||
|
}
|
46
lib/Target/Sparc/InstPrinter/SparcInstPrinter.h
Normal file
46
lib/Target/Sparc/InstPrinter/SparcInstPrinter.h
Normal file
@ -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
|
@ -16,7 +16,7 @@
|
|||||||
;===------------------------------------------------------------------------===;
|
;===------------------------------------------------------------------------===;
|
||||||
|
|
||||||
[common]
|
[common]
|
||||||
subdirectories = MCTargetDesc TargetInfo
|
subdirectories = InstPrinter MCTargetDesc TargetInfo
|
||||||
|
|
||||||
[component_0]
|
[component_0]
|
||||||
type = TargetGroup
|
type = TargetGroup
|
||||||
@ -29,6 +29,6 @@ has_jit = 1
|
|||||||
type = Library
|
type = Library
|
||||||
name = SparcCodeGen
|
name = SparcCodeGen
|
||||||
parent = Sparc
|
parent = Sparc
|
||||||
required_libraries = AsmPrinter CodeGen Core MC SelectionDAG SparcDesc
|
required_libraries = AsmPrinter CodeGen Core MC SelectionDAG SparcAsmPrinter
|
||||||
SparcInfo Support Target
|
SparcDesc SparcInfo Support Target
|
||||||
add_to_library_groups = Sparc
|
add_to_library_groups = Sparc
|
||||||
|
@ -17,7 +17,7 @@ BUILT_SOURCES = SparcGenRegisterInfo.inc SparcGenInstrInfo.inc \
|
|||||||
SparcGenSubtargetInfo.inc SparcGenCallingConv.inc \
|
SparcGenSubtargetInfo.inc SparcGenCallingConv.inc \
|
||||||
SparcGenCodeEmitter.inc
|
SparcGenCodeEmitter.inc
|
||||||
|
|
||||||
DIRS = TargetInfo MCTargetDesc
|
DIRS = InstPrinter TargetInfo MCTargetDesc
|
||||||
|
|
||||||
include $(LEVEL)/Makefile.common
|
include $(LEVEL)/Makefile.common
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user