Added:
[oota-llvm.git] / lib / Target / SparcV9 / SparcV9CodeEmitter.h
1 //===-- SparcV9CodeEmitter.h ------------------------------------*- C++ -*-===//
2 // 
3 //
4 //===----------------------------------------------------------------------===//
5
6 #ifndef SPARCV9CODEEMITTER_H
7 #define SPARCV9CODEEMITTER_H
8
9 #include "llvm/BasicBlock.h"
10 #include "llvm/CodeGen/MachineCodeEmitter.h"
11 #include "llvm/CodeGen/MachineFunctionPass.h"
12 #include "llvm/CodeGen/MachineInstr.h"
13 #include "llvm/Target/TargetMachine.h"
14
15 class SparcV9CodeEmitter : public MachineFunctionPass {
16   static MachineCodeEmitter *MCE;
17   static TargetMachine *TM;
18   BasicBlock *currBB;
19
20 public:
21   SparcV9CodeEmitter(TargetMachine *tm, MachineCodeEmitter &M) { 
22     MCE = &M;
23     TM = tm;
24   }
25
26   bool runOnMachineFunction(MachineFunction &F);
27     
28   /// Function generated by the CodeEmitterGenerator using TableGen
29   ///
30   static unsigned getBinaryCodeForInstr(MachineInstr &MI);
31
32 private:    
33   static int64_t getMachineOpValue(MachineInstr &MI, MachineOperand &MO);
34   static unsigned getValueBit(int64_t Val, unsigned bit);
35
36   void emitConstant(unsigned Val, unsigned Size);
37
38   void emitBasicBlock(MachineBasicBlock &MBB);
39   void emitInstruction(MachineInstr &MI);
40     
41 };
42
43 #endif