[llvm-commits] [llvm] r163124 - in /llvm/trunk: include/llvm/MC/MCTargetAsmParser.h lib/Target/ARM/AsmParser/ARMAsmParser.cpp lib/Target/MBlaze/AsmParser/MBlazeAsmParser.cpp lib/Target/Mips/AsmParser/MipsAsmParser.cpp lib/Target/X86/AsmParser/X86AsmParser.cpp utils/TableGen/AsmMatcherEmitter.cpp

Chad Rosier mcrosier at apple.com
Mon Sep 3 13:31:24 PDT 2012


Author: mcrosier
Date: Mon Sep  3 15:31:23 2012
New Revision: 163124

URL: http://llvm.org/viewvc/llvm-project?rev=163124&view=rev
Log:
[ms-inline asm] Asm operands can map to one or more MCOperands.  Therefore, add
the NumMCOperands argument to the GetMCInstOperandNum() function that is set
to the number of MCOperands this asm operand mapped to.

Modified:
    llvm/trunk/include/llvm/MC/MCTargetAsmParser.h
    llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
    llvm/trunk/lib/Target/MBlaze/AsmParser/MBlazeAsmParser.cpp
    llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
    llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp
    llvm/trunk/utils/TableGen/AsmMatcherEmitter.cpp

Modified: llvm/trunk/include/llvm/MC/MCTargetAsmParser.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCTargetAsmParser.h?rev=163124&r1=163123&r2=163124&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCTargetAsmParser.h (original)
+++ llvm/trunk/include/llvm/MC/MCTargetAsmParser.h Mon Sep  3 15:31:23 2012
@@ -113,7 +113,8 @@
 
   virtual unsigned GetMCInstOperandNum(unsigned Kind, MCInst &Inst,
                            const SmallVectorImpl<MCParsedAsmOperand*> &Operands,
-                                       unsigned OperandNum) = 0;
+                                       unsigned OperandNum,
+                                       unsigned &NumMCOperands) = 0;
 };
 
 } // End llvm namespace

Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=163124&r1=163123&r2=163124&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Mon Sep  3 15:31:23 2012
@@ -265,8 +265,8 @@
 
   unsigned GetMCInstOperandNum(unsigned Kind, MCInst &Inst,
                            const SmallVectorImpl<MCParsedAsmOperand*> &Operands,
-                               unsigned OperandNum) {
-    return GetMCInstOperandNumImpl(Kind, Inst, Operands, OperandNum);
+                               unsigned OperandNum, unsigned &NumMCOperands) {
+    return GetMCInstOperandNumImpl(Kind, Inst, Operands, OperandNum, NumMCOperands);
   }
 };
 } // end anonymous namespace

Modified: llvm/trunk/lib/Target/MBlaze/AsmParser/MBlazeAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MBlaze/AsmParser/MBlazeAsmParser.cpp?rev=163124&r1=163123&r2=163124&view=diff
==============================================================================
--- llvm/trunk/lib/Target/MBlaze/AsmParser/MBlazeAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/MBlaze/AsmParser/MBlazeAsmParser.cpp Mon Sep  3 15:31:23 2012
@@ -58,8 +58,9 @@
 
   unsigned GetMCInstOperandNum(unsigned Kind, MCInst &Inst,
                     const SmallVectorImpl<MCParsedAsmOperand*> &Operands,
-                    unsigned OperandNum) {
-    return GetMCInstOperandNumImpl(Kind, Inst, Operands, OperandNum);
+                               unsigned OperandNum, unsigned &NumMCOperands) {
+    return GetMCInstOperandNumImpl(Kind, Inst, Operands, OperandNum,
+                                   NumMCOperands);
   }
 
 public:

Modified: llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp?rev=163124&r1=163123&r2=163124&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp Mon Sep  3 15:31:23 2012
@@ -40,7 +40,7 @@
 
   unsigned GetMCInstOperandNum(unsigned Kind, MCInst &Inst,
                     const SmallVectorImpl<MCParsedAsmOperand*> &Operands,
-                               unsigned OperandNum);
+                               unsigned OperandNum, unsigned &NumMCOperands);
 
 public:
   MipsAsmParser(MCSubtargetInfo &sti, MCAsmParser &parser)
@@ -104,11 +104,12 @@
 unsigned MipsAsmParser::
 GetMCInstOperandNum(unsigned Kind, MCInst &Inst,
                     const SmallVectorImpl<MCParsedAsmOperand*> &Operands,
-                    unsigned OperandNum) {
+                    unsigned OperandNum, unsigned &NumMCOperands) {
   assert (0 && "GetMCInstOperandNum() not supported by the Mips target.");
   // The Mips backend doesn't currently include the matcher implementation, so
   // the GetMCInstOperandNumImpl() is undefined.  This is a temporary
   // work around.
+  NumMCOperands = 0;
   return 0;
 }
 

Modified: llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp?rev=163124&r1=163123&r2=163124&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp (original)
+++ llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp Mon Sep  3 15:31:23 2012
@@ -75,8 +75,9 @@
 
   unsigned GetMCInstOperandNum(unsigned Kind, MCInst &Inst,
                     const SmallVectorImpl<MCParsedAsmOperand*> &Operands,
-                    unsigned OperandNum) {
-    return GetMCInstOperandNumImpl(Kind, Inst, Operands, OperandNum);
+                               unsigned OperandNum, unsigned &NumMCOperands) {
+    return GetMCInstOperandNumImpl(Kind, Inst, Operands, OperandNum,
+                                   NumMCOperands);
   }
 
   /// isSrcOp - Returns true if operand is either (%rsi) or %ds:%(rsi)

Modified: llvm/trunk/utils/TableGen/AsmMatcherEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/AsmMatcherEmitter.cpp?rev=163124&r1=163123&r2=163124&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/AsmMatcherEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/AsmMatcherEmitter.cpp Mon Sep  3 15:31:23 2012
@@ -1703,8 +1703,10 @@
   OpOS << "unsigned " << Target.getName() << ClassName << "::\n"
        << "GetMCInstOperandNumImpl(unsigned Kind, MCInst &Inst,\n"
        << "                        const SmallVectorImpl<MCParsedAsmOperand*> "
-       << "&Operands,\n                        unsigned OperandNum) {\n"
+       << "&Operands,\n                        unsigned OperandNum, unsigned "
+       << "&NumMCOperands) {\n"
        << "  assert(Kind < CVT_NUM_SIGNATURES && \"Invalid signature!\");\n"
+       << "  NumMCOperands = 0;\n"
        << "  unsigned MCOperandNum = 0;\n"
        << "  uint8_t *Converter = ConversionTable[Kind];\n"
        << "  for (uint8_t *p = Converter; *p; p+= 2) {\n"
@@ -1712,6 +1714,10 @@
        << "    switch (*p) {\n"
        << "    default: llvm_unreachable(\"invalid conversion entry!\");\n"
        << "    case CVT_Reg:\n"
+       << "      if (*(p + 1) == OperandNum) {\n"
+       << "        NumMCOperands = 1;\n"
+       << "        break;\n"
+       << "      }\n"
        << "      ++MCOperandNum;\n"
        << "      break;\n"
        << "    case CVT_Tied:\n"
@@ -1811,6 +1817,10 @@
 
         // Add a handler for the operand number lookup.
         OpOS << "    case " << Name << ":\n"
+             << "      if (*(p + 1) == OperandNum) {\n"
+             << "        NumMCOperands = " << OpInfo.MINumOperands << ";\n"
+             << "        break;\n"
+             << "      }\n"
              << "      MCOperandNum += " << OpInfo.MINumOperands << ";\n"
              << "      break;\n";
         break;
@@ -1848,6 +1858,10 @@
               << "      break;\n";
 
         OpOS << "    case " << Name << ":\n"
+             << "      if (*(p + 1) == OperandNum) {\n"
+             << "        NumMCOperands = 1;\n"
+             << "        break;\n"
+             << "      }\n"
              << "      ++MCOperandNum;\n"
              << "      break;\n";
         break;
@@ -1877,6 +1891,10 @@
               << "      break;\n";
 
         OpOS << "    case " << Name << ":\n"
+             << "      if (*(p + 1) == OperandNum) {\n"
+             << "        NumMCOperands = 1;\n"
+             << "        break;\n"
+             << "      }\n"
              << "      ++MCOperandNum;\n"
              << "      break;\n";
       }
@@ -2583,7 +2601,7 @@
   OS << "  unsigned GetMCInstOperandNumImpl(unsigned Kind, MCInst &Inst,\n     "
      << "                              const "
      << "SmallVectorImpl<MCParsedAsmOperand*> &Operands,\n                     "
-     << "          unsigned OperandNum);\n";
+     << "          unsigned OperandNum, unsigned &NumMCOperands);\n";
   OS << "  bool MnemonicIsValid(StringRef Mnemonic);\n";
   OS << "  unsigned MatchInstructionImpl(\n"
      << "    const SmallVectorImpl<MCParsedAsmOperand*> &Operands,\n"





More information about the llvm-commits mailing list