mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
[Sparc] Add MCInstPrinter implementation for SPARC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198028 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ca523f4f3d
commit
dec96eaecf
@ -27,3 +27,4 @@ add_llvm_target(SparcCodeGen
|
||||
|
||||
add_subdirectory(TargetInfo)
|
||||
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]
|
||||
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
|
||||
|
@ -17,7 +17,7 @@ BUILT_SOURCES = SparcGenRegisterInfo.inc SparcGenInstrInfo.inc \
|
||||
SparcGenSubtargetInfo.inc SparcGenCallingConv.inc \
|
||||
SparcGenCodeEmitter.inc
|
||||
|
||||
DIRS = TargetInfo MCTargetDesc
|
||||
DIRS = InstPrinter TargetInfo MCTargetDesc
|
||||
|
||||
include $(LEVEL)/Makefile.common
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user