1. Make MCSection an abstract class.
[oota-llvm.git] / lib / Target / PIC16 / PIC16AsmPrinter.h
index 876e4be7439ac95df4d997c9c6ce52a378d7ea2d..b7a50a9befce7db5324d5cf5bd27b68ace1228db 100644 (file)
@@ -1,4 +1,4 @@
-//===-- PIC16AsmPrinter.h - PIC16 LLVM assembly writer ------------------===//
+//===-- PIC16AsmPrinter.h - PIC16 LLVM assembly writer ----------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
 
 #include "PIC16.h"
 #include "PIC16TargetMachine.h"
+#include "PIC16DebugInfo.h"
+#include "PIC16TargetObjectFile.h"
+#include "llvm/Analysis/DebugInfo.h"
+#include "PIC16TargetAsmInfo.h"
 #include "llvm/CodeGen/AsmPrinter.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Target/TargetAsmInfo.h"
 #include "llvm/Target/TargetMachine.h"
+#include <list>
+#include <string>
 
 namespace llvm {
-  struct VISIBILITY_HIDDEN PIC16AsmPrinter : public AsmPrinter {
-    PIC16AsmPrinter(raw_ostream &O, TargetMachine &TM, const TargetAsmInfo *T)
-      : AsmPrinter(O, TM, T) {
-      CurrentBankselLabelInBasicBlock = "";
-      IsRomData = false;
-    }
-    private :
+  class VISIBILITY_HIDDEN PIC16AsmPrinter : public AsmPrinter {
+  public:
+    explicit PIC16AsmPrinter(formatted_raw_ostream &O, TargetMachine &TM,
+                             const TargetAsmInfo *T, bool V);
+  private:
     virtual const char *getPassName() const {
       return "PIC16 Assembly Printer";
     }
+    
+    PIC16TargetObjectFile &getObjFileLowering() const {
+      return (PIC16TargetObjectFile &)AsmPrinter::getObjFileLowering();
+    }
 
     bool runOnMachineFunction(MachineFunction &F);
     void printOperand(const MachineInstr *MI, int opNum);
     void printCCOperand(const MachineInstr *MI, int opNum);
-    bool printInstruction(const MachineInstr *MI); // definition autogenerated.
+    void printInstruction(const MachineInstr *MI); // definition autogenerated.
     bool printMachineInstruction(const MachineInstr *MI);
-    void EmitExternsAndGlobals (Module &M);
-    void EmitInitData (Module &M);
-    void EmitUnInitData (Module &M);
+    void EmitFunctionDecls (Module &M);
+    void EmitUndefinedVars (Module &M);
+    void EmitDefinedVars (Module &M);
+    void EmitIData (Module &M);
+    void EmitUData (Module &M);
+    void EmitAutos (std::string FunctName);
+    void EmitRemainingAutos ();
     void EmitRomData (Module &M);
-    virtual void EmitConstantValueOnly(const Constant *CV);
-    void emitFunctionData(MachineFunction &MF);
-    void emitFunctionTempData(MachineFunction &MF, unsigned &FrameSize);
-
-    protected:
+    void EmitFunctionFrame(MachineFunction &MF);
+    void printLibcallDecls(void);
+  protected:
     bool doInitialization(Module &M);
     bool doFinalization(Module &M);
-    bool inSameBank(char *s1, char *s2);
 
-    private:
-    std::string CurrentBankselLabelInBasicBlock;
-    bool IsRomData;
+    /// PrintGlobalVariable - Emit the specified global variable and its
+    /// initializer to the output stream.
+    virtual void PrintGlobalVariable(const GlobalVariable *GV) {
+      // PIC16 doesn't use normal hooks for this.
+    }
+    
+  private:
+    PIC16TargetObjectFile *PTOF;
+    PIC16TargetLowering *PTLI;
+    PIC16DbgInfo DbgInfo;
+    const PIC16TargetAsmInfo *PTAI;
+    std::list<const char *> LibcallDecls; // List of extern decls.
   };
 } // end of namespace