stub out a powerpc MCInstPrinter implementation.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119059 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2010-11-14 19:40:38 +00:00
parent aeafb894fa
commit 60d5b5fdee
7 changed files with 145 additions and 2 deletions

View File

@ -107,6 +107,6 @@ public:
void printPCLabel(const MCInst *MI, unsigned OpNum, raw_ostream &O);
};
}
} // end namespace llvm
#endif

View File

@ -0,0 +1,6 @@
include_directories( ${CMAKE_CURRENT_BINARY_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/.. )
add_llvm_library(LLVMPowerPCAsmPrinter
PPCInstPrinter.cpp
)
add_dependencies(LLVMPowerPCAsmPrinter PowerPCCodeGenTable_gen)

View File

@ -0,0 +1,16 @@
##===- lib/Target/PowerPC/AsmPrinter/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 = LLVMPowerPCAsmPrinter
# Hack: we need to include 'main' powerpc target directory to grab private headers
CPP.Flags += -I$(PROJ_OBJ_DIR)/.. -I$(PROJ_SRC_DIR)/..
include $(LEVEL)/Makefile.common

View File

@ -0,0 +1,41 @@
//===-- PPCInstPrinter.cpp - Convert PPC 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 PPC MCInst to a .s file.
//
//===----------------------------------------------------------------------===//
#define DEBUG_TYPE "asm-printer"
#include "PPCInstPrinter.h"
#include "llvm/MC/MCInst.h"
//#include "llvm/MC/MCAsmInfo.h"
//#include "llvm/MC/MCExpr.h"
//#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/raw_ostream.h"
#include "PPCGenRegisterNames.inc"
#include "PPCGenInstrNames.inc"
using namespace llvm;
#define GET_INSTRUCTION_NAME
#define PPCAsmPrinter PPCInstPrinter
#define MachineInstr MCInst
#include "PPCGenAsmWriter.inc"
StringRef PPCInstPrinter::getOpcodeName(unsigned Opcode) const {
return getInstructionName(Opcode);
}
void PPCInstPrinter::printInst(const MCInst *MI, raw_ostream &O) {
// TODO: pseudo ops.
printInstruction(MI, O);
}

View File

@ -0,0 +1,67 @@
//===-- PPCInstPrinter.h - Convert PPC 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 PPC MCInst to a .s file.
//
//===----------------------------------------------------------------------===//
#ifndef PPCINSTPRINTER_H
#define PPCINSTPRINTER_H
#include "llvm/MC/MCInstPrinter.h"
namespace llvm {
class MCOperand;
class PPCInstPrinter : public MCInstPrinter {
public:
PPCInstPrinter(const MCAsmInfo &MAI) : MCInstPrinter(MAI) {}
virtual void printInst(const MCInst *MI, raw_ostream &O);
virtual StringRef getOpcodeName(unsigned Opcode) const;
static const char *getInstructionName(unsigned Opcode);
// Autogenerated by tblgen.
void printInstruction(const MCInst *MI, raw_ostream &O);
static const char *getRegisterName(unsigned RegNo);
void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
void printPredicateOperand(const MCInst *MI, unsigned OpNo,
raw_ostream &O, const char *Modifier) {}
void printS5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
void printU5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
void printU6ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
void printS16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
void printU16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
void printS16X4ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
void printBranchOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
void printCallOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
void printAbsAddrOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
void printcrbitm(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
void printMemRegImm(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
void printMemRegImmShifted(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
void printMemRegReg(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
// FIXME: Remove
void PrintSpecial(const MCInst *MI, raw_ostream &O, const char *Modifier) {}
void printSymbolLo(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
void printSymbolHi(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
void printPICLabel(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
void printTOCEntryLabel(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
};
} // end namespace llvm
#endif

View File

@ -18,6 +18,6 @@ BUILT_SOURCES = PPCGenInstrNames.inc PPCGenRegisterNames.inc \
PPCGenInstrInfo.inc PPCGenDAGISel.inc \
PPCGenSubtarget.inc PPCGenCallingConv.inc
DIRS = TargetInfo
DIRS = InstPrinter TargetInfo
include $(LEVEL)/Makefile.common

View File

@ -50,6 +50,7 @@
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringSet.h"
#include "llvm/ADT/SmallString.h"
#include "InstPrinter/PPCInstPrinter.h"
using namespace llvm;
namespace {
@ -911,8 +912,20 @@ static AsmPrinter *createPPCAsmPrinterPass(TargetMachine &tm,
return new PPCLinuxAsmPrinter(tm, Streamer);
}
static MCInstPrinter *createPPCMCInstPrinter(const Target &T,
unsigned SyntaxVariant,
const MCAsmInfo &MAI) {
if (SyntaxVariant == 0)
return new PPCInstPrinter(MAI);
return 0;
}
// Force static initialization.
extern "C" void LLVMInitializePowerPCAsmPrinter() {
TargetRegistry::RegisterAsmPrinter(ThePPC32Target, createPPCAsmPrinterPass);
TargetRegistry::RegisterAsmPrinter(ThePPC64Target, createPPCAsmPrinterPass);
TargetRegistry::RegisterMCInstPrinter(ThePPC32Target, createPPCMCInstPrinter);
TargetRegistry::RegisterMCInstPrinter(ThePPC32Target, createPPCMCInstPrinter);
}