Add LLVM support for PPC cryptography builtins
[oota-llvm.git] / lib / Target / PowerPC / InstPrinter / PPCInstPrinter.h
index 1c59e5f09c0e45897ace2c39e167aa15d510be8f..22934b8f4fb59c32d9054541ffbe7aedc55957c8 100644 (file)
@@ -1,4 +1,4 @@
-//===-- PPCInstPrinter.h - Convert PPC MCInst to assembly syntax ----------===//
+//===- PPCInstPrinter.h - Convert PPC MCInst to assembly syntax -*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef PPCINSTPRINTER_H
-#define PPCINSTPRINTER_H
+#ifndef LLVM_LIB_TARGET_POWERPC_INSTPRINTER_PPCINSTPRINTER_H
+#define LLVM_LIB_TARGET_POWERPC_INSTPRINTER_PPCINSTPRINTER_H
 
 #include "llvm/MC/MCInstPrinter.h"
 
 namespace llvm {
-  class MCOperand;
+
+class MCOperand;
 
 class PPCInstPrinter : public MCInstPrinter {
+  bool IsDarwin;
 public:
-  PPCInstPrinter(const MCAsmInfo &MAI) : MCInstPrinter(MAI) {}
+  PPCInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
+                 const MCRegisterInfo &MRI, bool isDarwin)
+    : MCInstPrinter(MAI, MII, MRI), IsDarwin(isDarwin) {}
   
-  virtual void printInst(const MCInst *MI, raw_ostream &O);
-  virtual StringRef getOpcodeName(unsigned Opcode) const;
+  bool isDarwinSyntax() const {
+    return IsDarwin;
+  }
   
-  static const char *getInstructionName(unsigned Opcode);
+  void printRegName(raw_ostream &OS, unsigned RegNo) const override;
+  void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot) override;
   
   // 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 printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
   void printPredicateOperand(const MCInst *MI, unsigned OpNo,
-                             raw_ostream &O, const char *Modifier) {}
-
+                             raw_ostream &O, const char *Modifier = nullptr);
 
-  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 printU1ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
+  void printU2ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
+  void printU4ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
+  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 printU12ImmOperand(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 printBranchOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
+  void printAbsBranchOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
+  void printTLSCall(const MCInst *MI, unsigned OpNo, raw_ostream &O);
 
-  void printcrbitm(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) {}
-  
+  void printMemRegImm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
+  void printMemRegReg(const MCInst *MI, unsigned OpNo, raw_ostream &O);
 };
 } // end namespace llvm