//===-- SparcV9CodeEmitter.h ------------------------------------*- C++ -*-===//
-//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file was developed by the LLVM research group and is distributed under
+// the University of Illinois Open Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Target-specific portions of the machine code emitter for the SparcV9.
+// This class interfaces with the JIT's Emitter in order to turn MachineInstrs
+// into words of binary machine code. Its code is partially generated by
+// TableGen's CodeEmitterGenerator.
//
//===----------------------------------------------------------------------===//
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/Target/TargetMachine.h"
+namespace llvm {
+
class GlobalValue;
class MachineInstr;
class MachineOperand;
class SparcV9CodeEmitter : public MachineFunctionPass {
TargetMachine &TM;
MachineCodeEmitter &MCE;
- BasicBlock *currBB;
+ const BasicBlock *currBB;
// Tracks which instruction references which BasicBlock
- std::vector<std::pair<BasicBlock*,
+ std::vector<std::pair<const BasicBlock*,
std::pair<unsigned*,MachineInstr*> > > BBRefs;
// Tracks where each BasicBlock starts
- std::map<BasicBlock*, long> BBLocations;
-
- // Tracks locations of Constants which are laid out in memory (e.g. FP)
- // But we also need to map Constants to ConstantPool indices
- std::map<const Constant*, unsigned> ConstantMap;
+ std::map<const BasicBlock*, long> BBLocations;
public:
SparcV9CodeEmitter(TargetMachine &T, MachineCodeEmitter &M);
- ~SparcV9CodeEmitter();
+ ~SparcV9CodeEmitter() {}
+
+ const char *getPassName() const { return "SparcV9 Machine Code Emitter"; }
+ /// runOnMachineFunction - emits the given machine function to memory.
+ ///
bool runOnMachineFunction(MachineFunction &F);
+
+ /// emitWord - writes out the given 32-bit value to memory at the current PC.
+ ///
void emitWord(unsigned Val);
-
- /// Function generated by the CodeEmitterGenerator using TableGen
+
+ /// getBinaryCodeForInstr - This function, generated by the
+ /// CodeEmitterGenerator using TableGen, produces the binary encoding for
+ /// machine instructions.
///
unsigned getBinaryCodeForInstr(MachineInstr &MI);
-private:
+private:
+ /// getMachineOpValue -
+ ///
int64_t getMachineOpValue(MachineInstr &MI, MachineOperand &MO);
- unsigned getValueBit(int64_t Val, unsigned bit);
+
+ /// emitBasicBlock -
+ ///
void emitBasicBlock(MachineBasicBlock &MBB);
+
+ /// getValueBit -
+ ///
+ unsigned getValueBit(int64_t Val, unsigned bit);
+
+ /// getGlobalAddress -
+ ///
void* getGlobalAddress(GlobalValue *V, MachineInstr &MI,
bool isPCRelative);
- bool isFPInstr(MachineInstr &MI);
- unsigned getRealRegNum(unsigned fakeReg, unsigned regClass,
- MachineInstr &MI);
+ /// emitFarCall -
+ ///
+ unsigned getRealRegNum(unsigned fakeReg, MachineInstr &MI);
};
+} // End llvm namespace
+
#endif