From b05daff7faf694a8d18f00ef00132384c8207cd4 Mon Sep 17 00:00:00 2001 From: Misha Brukman Date: Mon, 9 Aug 2004 23:03:59 +0000 Subject: [PATCH] Stub definition of the PowerPC CodeEmitter class; this isn't functional (yet). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15600 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/PowerPC/PPCCodeEmitter.cpp | 65 +++++++++++++++++++++-- lib/Target/PowerPC/PowerPCCodeEmitter.cpp | 65 +++++++++++++++++++++-- 2 files changed, 122 insertions(+), 8 deletions(-) diff --git a/lib/Target/PowerPC/PPCCodeEmitter.cpp b/lib/Target/PowerPC/PPCCodeEmitter.cpp index 3c423e5cef6..e7a36009cb1 100644 --- a/lib/Target/PowerPC/PPCCodeEmitter.cpp +++ b/lib/Target/PowerPC/PPCCodeEmitter.cpp @@ -11,9 +11,44 @@ //===----------------------------------------------------------------------===// #include "PowerPCTargetMachine.h" +#include "llvm/CodeGen/MachineCodeEmitter.h" +#include "llvm/CodeGen/MachineFunctionPass.h" +#include "llvm/CodeGen/Passes.h" +#include "Support/Debug.h" namespace llvm { +namespace { + class PowerPCCodeEmitter : public MachineFunctionPass { + TargetMachine &TM; + MachineCodeEmitter &MCE; + + public: + PowerPCCodeEmitter(TargetMachine &T, MachineCodeEmitter &M) + : TM(T), MCE(M) {} + + const char *getPassName() const { return "PowerPC Machine Code Emitter"; } + + /// runOnMachineFunction - emits the given MachineFunction to memory + /// + bool runOnMachineFunction(MachineFunction &MF); + + /// emitBasicBlock - emits the given MachineBasicBlock to memory + /// + void emitBasicBlock(MachineBasicBlock &MBB); + + /// emitWord - write a 32-bit word to memory at the current PC + /// + void emitWord(unsigned w) { MCE.emitWord(w); } + + unsigned getValueBit(int64_t Val, unsigned bit); + + /// getBinaryCodeForInstr - returns the assembled code for an instruction + /// + unsigned getBinaryCodeForInstr(MachineInstr &MI) { return 0; } + }; +} + /// addPassesToEmitMachineCode - Add passes to the specified pass manager to get /// machine code emitted. This uses a MachineCodeEmitter object to handle /// actually outputting the machine code and resolving things like the address @@ -22,11 +57,31 @@ namespace llvm { /// bool PowerPCTargetMachine::addPassesToEmitMachineCode(FunctionPassManager &PM, MachineCodeEmitter &MCE) { - return true; - // It should go something like this: - // PM.add(new Emitter(MCE)); // Machine code emitter pass for PowerPC + // Machine code emitter pass for PowerPC + PM.add(new PowerPCCodeEmitter(*this, MCE)); // Delete machine code for this function after emitting it: - // PM.add(createMachineCodeDeleter()); + PM.add(createMachineCodeDeleter()); + // We don't yet support machine code emission + return true; +} + +bool PowerPCCodeEmitter::runOnMachineFunction(MachineFunction &MF) { + MCE.startFunction(MF); + MCE.emitConstantPool(MF.getConstantPool()); + for (MachineFunction::iterator I = MF.begin(), E = MF.end(); I != E; ++I) + emitBasicBlock(*I); + MCE.finishFunction(MF); + return false; +} + +void PowerPCCodeEmitter::emitBasicBlock(MachineBasicBlock &MBB) { + for (MachineBasicBlock::iterator I = MBB.begin(), E = MBB.end(); I != E; ++I) + emitWord(getBinaryCodeForInstr(*I)); +} + +unsigned PowerPCCodeEmitter::getValueBit(int64_t Val, unsigned bit) { + Val >>= bit; + return (Val & 1); } void *PowerPCJITInfo::getJITStubForFunction(Function *F, @@ -39,5 +94,7 @@ void PowerPCJITInfo::replaceMachineCodeForFunction (void *Old, void *New) { assert (0 && "PowerPCJITInfo::replaceMachineCodeForFunction not implemented"); } +//#include "PowerPCGenCodeEmitter.inc" + } // end llvm namespace diff --git a/lib/Target/PowerPC/PowerPCCodeEmitter.cpp b/lib/Target/PowerPC/PowerPCCodeEmitter.cpp index 3c423e5cef6..e7a36009cb1 100644 --- a/lib/Target/PowerPC/PowerPCCodeEmitter.cpp +++ b/lib/Target/PowerPC/PowerPCCodeEmitter.cpp @@ -11,9 +11,44 @@ //===----------------------------------------------------------------------===// #include "PowerPCTargetMachine.h" +#include "llvm/CodeGen/MachineCodeEmitter.h" +#include "llvm/CodeGen/MachineFunctionPass.h" +#include "llvm/CodeGen/Passes.h" +#include "Support/Debug.h" namespace llvm { +namespace { + class PowerPCCodeEmitter : public MachineFunctionPass { + TargetMachine &TM; + MachineCodeEmitter &MCE; + + public: + PowerPCCodeEmitter(TargetMachine &T, MachineCodeEmitter &M) + : TM(T), MCE(M) {} + + const char *getPassName() const { return "PowerPC Machine Code Emitter"; } + + /// runOnMachineFunction - emits the given MachineFunction to memory + /// + bool runOnMachineFunction(MachineFunction &MF); + + /// emitBasicBlock - emits the given MachineBasicBlock to memory + /// + void emitBasicBlock(MachineBasicBlock &MBB); + + /// emitWord - write a 32-bit word to memory at the current PC + /// + void emitWord(unsigned w) { MCE.emitWord(w); } + + unsigned getValueBit(int64_t Val, unsigned bit); + + /// getBinaryCodeForInstr - returns the assembled code for an instruction + /// + unsigned getBinaryCodeForInstr(MachineInstr &MI) { return 0; } + }; +} + /// addPassesToEmitMachineCode - Add passes to the specified pass manager to get /// machine code emitted. This uses a MachineCodeEmitter object to handle /// actually outputting the machine code and resolving things like the address @@ -22,11 +57,31 @@ namespace llvm { /// bool PowerPCTargetMachine::addPassesToEmitMachineCode(FunctionPassManager &PM, MachineCodeEmitter &MCE) { - return true; - // It should go something like this: - // PM.add(new Emitter(MCE)); // Machine code emitter pass for PowerPC + // Machine code emitter pass for PowerPC + PM.add(new PowerPCCodeEmitter(*this, MCE)); // Delete machine code for this function after emitting it: - // PM.add(createMachineCodeDeleter()); + PM.add(createMachineCodeDeleter()); + // We don't yet support machine code emission + return true; +} + +bool PowerPCCodeEmitter::runOnMachineFunction(MachineFunction &MF) { + MCE.startFunction(MF); + MCE.emitConstantPool(MF.getConstantPool()); + for (MachineFunction::iterator I = MF.begin(), E = MF.end(); I != E; ++I) + emitBasicBlock(*I); + MCE.finishFunction(MF); + return false; +} + +void PowerPCCodeEmitter::emitBasicBlock(MachineBasicBlock &MBB) { + for (MachineBasicBlock::iterator I = MBB.begin(), E = MBB.end(); I != E; ++I) + emitWord(getBinaryCodeForInstr(*I)); +} + +unsigned PowerPCCodeEmitter::getValueBit(int64_t Val, unsigned bit) { + Val >>= bit; + return (Val & 1); } void *PowerPCJITInfo::getJITStubForFunction(Function *F, @@ -39,5 +94,7 @@ void PowerPCJITInfo::replaceMachineCodeForFunction (void *Old, void *New) { assert (0 && "PowerPCJITInfo::replaceMachineCodeForFunction not implemented"); } +//#include "PowerPCGenCodeEmitter.inc" + } // end llvm namespace