diff options
| -rw-r--r-- | llvm/include/llvm/CodeGen/MachineInstr.h | 2 | ||||
| -rw-r--r-- | llvm/include/llvm/MC/MCInst.h | 4 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp | 10 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h | 52 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/AsmPrinter/X86ATTInstPrinter.cpp | 44 | 
5 files changed, 99 insertions, 13 deletions
diff --git a/llvm/include/llvm/CodeGen/MachineInstr.h b/llvm/include/llvm/CodeGen/MachineInstr.h index ab749287b98..2b2f24a8837 100644 --- a/llvm/include/llvm/CodeGen/MachineInstr.h +++ b/llvm/include/llvm/CodeGen/MachineInstr.h @@ -104,7 +104,7 @@ public:    /// getDebugLoc - Returns the debug location id of this MachineInstr.    /// -  const DebugLoc getDebugLoc() const { return debugLoc; } +  DebugLoc getDebugLoc() const { return debugLoc; }    /// getDesc - Returns the target instruction descriptor of this    /// MachineInstr. diff --git a/llvm/include/llvm/MC/MCInst.h b/llvm/include/llvm/MC/MCInst.h index 4ed9dc7e3fe..4f7e6cf0b49 100644 --- a/llvm/include/llvm/MC/MCInst.h +++ b/llvm/include/llvm/MC/MCInst.h @@ -19,6 +19,7 @@  #include "llvm/ADT/SmallVector.h"  #include "llvm/Support/DataTypes.h" +#include "llvm/Support/DebugLoc.h"  namespace llvm { @@ -84,7 +85,10 @@ class MCInst {  public:    MCInst() : Opcode(~0U) {} +  unsigned getOpcode() const { return Opcode; } +  DebugLoc getDebugLoc() const { return DebugLoc(); } +  const MCOperand &getOperand(unsigned i) const { return Operands[i]; }  }; diff --git a/llvm/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp b/llvm/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp index f5f90aa4c0e..7e48855e08d 100644 --- a/llvm/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp +++ b/llvm/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp @@ -769,21 +769,17 @@ void X86ATTAsmPrinter::printMachineInstruction(const MachineInstr *MI) {    ++EmittedInsts;    if (NewAsmPrinter) { +    O << "NEW: ";      MCInst TmpInst;      // FIXME: Convert TmpInst. -    printInstruction(TmpInst); +    printInstruction(&TmpInst); +    O << "OLD: ";    }    // Call the autogenerated instruction printer routines.    printInstruction(MI);  } -/// doInitialization -bool X86ATTAsmPrinter::doInitialization(Module &M) { -  return AsmPrinter::doInitialization(M); -} - -  void X86ATTAsmPrinter::printModuleLevelGV(const GlobalVariable* GVar) {    const TargetData *TD = TM.getTargetData(); diff --git a/llvm/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h b/llvm/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h index 9dd2938e835..31c7a1f044e 100644 --- a/llvm/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h +++ b/llvm/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h @@ -55,7 +55,6 @@ class VISIBILITY_HIDDEN X86ATTAsmPrinter : public AsmPrinter {      AsmPrinter::getAnalysisUsage(AU);    } -  bool doInitialization(Module &M);    bool doFinalization(Module &M);    /// printInstruction - This method is automatically generated by tablegen @@ -64,8 +63,57 @@ class VISIBILITY_HIDDEN X86ATTAsmPrinter : public AsmPrinter {    /// returns false.    bool printInstruction(const MachineInstr *MI); -  bool printInstruction(const MCInst &TmpInst); +   +  // New MCInst printing stuff. +  bool printInstruction(const MCInst *MI); + +  void printOperand(const MCInst *MI, unsigned OpNo, +                    const char *Modifier = 0, bool NotRIPRel = false); +  void printMemReference(const MCInst *MI, unsigned Op, +                         const char *Modifier=NULL, bool NotRIPRel = false); +  void printLeaMemReference(const MCInst *MI, unsigned Op, +                            const char *Modifier=NULL, bool NotRIPRel = false); +  void printSSECC(const MCInst *MI, unsigned Op); +  void printPICLabel(const MCInst *MI, unsigned Op); +  void printi8mem(const MCInst *MI, unsigned OpNo) { +    printMemReference(MI, OpNo); +  } +  void printi16mem(const MCInst *MI, unsigned OpNo) { +    printMemReference(MI, OpNo); +  } +  void printi32mem(const MCInst *MI, unsigned OpNo) { +    printMemReference(MI, OpNo); +  } +  void printi64mem(const MCInst *MI, unsigned OpNo) { +    printMemReference(MI, OpNo); +  } +  void printi128mem(const MCInst *MI, unsigned OpNo) { +    printMemReference(MI, OpNo); +  } +  void printf32mem(const MCInst *MI, unsigned OpNo) { +    printMemReference(MI, OpNo); +  } +  void printf64mem(const MCInst *MI, unsigned OpNo) { +    printMemReference(MI, OpNo); +  } +  void printf80mem(const MCInst *MI, unsigned OpNo) { +    printMemReference(MI, OpNo); +  } +  void printf128mem(const MCInst *MI, unsigned OpNo) { +    printMemReference(MI, OpNo); +  } +  void printlea32mem(const MCInst *MI, unsigned OpNo) { +    printLeaMemReference(MI, OpNo); +  } +  void printlea64mem(const MCInst *MI, unsigned OpNo) { +    printLeaMemReference(MI, OpNo); +  } +  void printlea64_32mem(const MCInst *MI, unsigned OpNo) { +    printLeaMemReference(MI, OpNo, "subreg64"); +  } +   +      // These methods are used by the tablegen'erated instruction printer.    void printOperand(const MachineInstr *MI, unsigned OpNo, diff --git a/llvm/lib/Target/X86/AsmPrinter/X86ATTInstPrinter.cpp b/llvm/lib/Target/X86/AsmPrinter/X86ATTInstPrinter.cpp index 3b78d7dedff..934e45aa815 100644 --- a/llvm/lib/Target/X86/AsmPrinter/X86ATTInstPrinter.cpp +++ b/llvm/lib/Target/X86/AsmPrinter/X86ATTInstPrinter.cpp @@ -15,8 +15,46 @@  #define DEBUG_TYPE "asm-printer"  #include "llvm/MC/MCInst.h"  #include "X86ATTAsmPrinter.h" +#include "llvm/Support/raw_ostream.h"  using namespace llvm; -bool X86ATTAsmPrinter::printInstruction(const MCInst &TmpInst) { -  return true; -}
\ No newline at end of file +// Include the auto-generated portion of the assembly writer. +#define MachineInstr MCInst +#define NO_ASM_WRITER_BOILERPLATE +#include "X86GenAsmWriter.inc" +#undef MachineInstr + +void X86ATTAsmPrinter::printSSECC(const MCInst *MI, unsigned Op) { +  unsigned char value = MI->getOperand(Op).getImm(); +  assert(value <= 7 && "Invalid ssecc argument!"); +  switch (value) { +    case 0: O << "eq"; break; +    case 1: O << "lt"; break; +    case 2: O << "le"; break; +    case 3: O << "unord"; break; +    case 4: O << "neq"; break; +    case 5: O << "nlt"; break; +    case 6: O << "nle"; break; +    case 7: O << "ord"; break; +  } +} + + +void X86ATTAsmPrinter::printPICLabel(const MCInst *MI, unsigned Op) { +  assert(0 && +         "This is only used for MOVPC32r, should lower before asm printing!"); +} + + +void X86ATTAsmPrinter::printOperand(const MCInst *MI, unsigned OpNo, +                                    const char *Modifier, bool NotRIPRel) { +} + +void X86ATTAsmPrinter::printLeaMemReference(const MCInst *MI, unsigned Op, +                                            const char *Modifier, +                                            bool NotRIPRel) { +} + +void X86ATTAsmPrinter::printMemReference(const MCInst *MI, unsigned Op, +                                         const char *Modifier, bool NotRIPRel){ +}  | 

