diff options
| -rw-r--r-- | llvm/include/llvm/Target/TargetRegistry.h | 11 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp | 11 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp | 30 | 
3 files changed, 43 insertions, 9 deletions
diff --git a/llvm/include/llvm/Target/TargetRegistry.h b/llvm/include/llvm/Target/TargetRegistry.h index 8042d236367..395526fa394 100644 --- a/llvm/include/llvm/Target/TargetRegistry.h +++ b/llvm/include/llvm/Target/TargetRegistry.h @@ -387,6 +387,15 @@ namespace llvm {          T.MCDisassemblerCtorFn = Fn;      } +    /// RegisterMCInstPrinter - Register a MCInstPrinter implementation for the +    /// given target. +    ///  +    /// Clients are responsible for ensuring that registration doesn't occur +    /// while another thread is attempting to access the registry. Typically +    /// this is done by initializing all targets at program startup. +    /// +    /// @param T - The target being registered. +    /// @param Fn - A function to construct an MCInstPrinter for the target.      static void RegisterMCInstPrinter(Target &T,                                        Target::MCInstPrinterCtorTy Fn) {        if (!T.MCInstPrinterCtorFn) @@ -395,7 +404,7 @@ namespace llvm {      /// RegisterCodeEmitter - Register a MCCodeEmitter implementation for the      /// given target. -    ///  +    ///      /// Clients are responsible for ensuring that registration doesn't occur      /// while another thread is attempting to access the registry. Typically      /// this is done by initializing all targets at program startup. diff --git a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index 01487c29a69..403f96c69e5 100644 --- a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp @@ -534,8 +534,17 @@ bool ARMAsmParser::MatchInstruction(SmallVectorImpl<ARMOperand> &Operands,        Mnemonic == "bl" ||        Mnemonic == "push" ||        Mnemonic == "blx" || -      Mnemonic == "pop") +      Mnemonic == "pop") { +    // Hard-coded to a valid instruction, till we have a real matcher. +    Inst = MCInst(); +    Inst.setOpcode(ARM::MOVr); +    Inst.addOperand(MCOperand::CreateReg(2)); +    Inst.addOperand(MCOperand::CreateReg(2)); +    Inst.addOperand(MCOperand::CreateImm(0)); +    Inst.addOperand(MCOperand::CreateImm(0)); +    Inst.addOperand(MCOperand::CreateReg(0));      return false; +  }    return true;  } diff --git a/llvm/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp index 66cc6f36745..6ed7e8e4cf4 100644 --- a/llvm/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp +++ b/llvm/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp @@ -1301,13 +1301,6 @@ void ARMAsmPrinter::EmitEndOfAsmFile(Module &M) {    }  } -// Force static initialization. -extern "C" void LLVMInitializeARMAsmPrinter() { -  RegisterAsmPrinter<ARMAsmPrinter> X(TheARMTarget); -  RegisterAsmPrinter<ARMAsmPrinter> Y(TheThumbTarget); -} - -  //===----------------------------------------------------------------------===//  void ARMAsmPrinter::printInstructionThroughMCStreamer(const MachineInstr *MI) { @@ -1457,3 +1450,26 @@ void ARMAsmPrinter::printInstructionThroughMCStreamer(const MachineInstr *MI) {    printMCInst(&TmpInst);  } + +//===----------------------------------------------------------------------===// +// Target Registry Stuff +//===----------------------------------------------------------------------===// + +static MCInstPrinter *createARMMCInstPrinter(const Target &T, +                                             unsigned SyntaxVariant, +                                             const MCAsmInfo &MAI, +                                             raw_ostream &O) { +  if (SyntaxVariant == 0) +    return new ARMInstPrinter(O, MAI, false); +  return 0; +} + +// Force static initialization. +extern "C" void LLVMInitializeARMAsmPrinter() { +  RegisterAsmPrinter<ARMAsmPrinter> X(TheARMTarget); +  RegisterAsmPrinter<ARMAsmPrinter> Y(TheThumbTarget); + +  TargetRegistry::RegisterMCInstPrinter(TheARMTarget, createARMMCInstPrinter); +  TargetRegistry::RegisterMCInstPrinter(TheThumbTarget, createARMMCInstPrinter); +} +  | 

