[llvm-commits] [llvm] r165057 - in /llvm/trunk: include/llvm/MC/MCParser/MCParsedAsmOperand.h lib/Target/X86/AsmParser/X86AsmParser.cpp

Chad Rosier mcrosier at apple.com
Tue Oct 2 17:03:38 PDT 2012


Done so in r165069.

 Chad

On Oct 2, 2012, at 3:16 PM, Jim Grosbach <grosbach at apple.com> wrote:

> No. We talked about this. Why are you committing this without further discussion. I have significant problems with this approach.
> 
> Please revert.
> 
> On Oct 2, 2012, at 2:49 PM, Chad Rosier <mcrosier at apple.com> wrote:
> 
>> Author: mcrosier
>> Date: Tue Oct  2 16:49:07 2012
>> New Revision: 165057
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=165057&view=rev
>> Log:
>> [ms-inline asm] Add basic support for wildcard MCParsedAsmOperands.  This type
>> of operand is specific to MS-style inline assembly and should not be generated
>> when parsing normal assembly.
>> 
>> The purpose of the wildcard operands are to allow the AsmParser to match
>> multiple instructions (i.e., MCInsts) to a given ms-style asm statement.  For
>> the time being the matcher just returns the first match.  This patch only
>> implements wildcard matches for memory operands.  Support for register
>> wildcards will be added in the near future.
>> 
>> Modified:
>>   llvm/trunk/include/llvm/MC/MCParser/MCParsedAsmOperand.h
>>   llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp
>> 
>> Modified: llvm/trunk/include/llvm/MC/MCParser/MCParsedAsmOperand.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCParser/MCParsedAsmOperand.h?rev=165057&r1=165056&r2=165057&view=diff
>> ==============================================================================
>> --- llvm/trunk/include/llvm/MC/MCParser/MCParsedAsmOperand.h (original)
>> +++ llvm/trunk/include/llvm/MC/MCParser/MCParsedAsmOperand.h Tue Oct  2 16:49:07 2012
>> @@ -34,6 +34,13 @@
>>  /// isMem - Is this a memory operand?
>>  virtual bool isMem() const = 0;
>> 
>> +  /// isMSAsmWildcard - Is this a wildcard operand?  This is specific to
>> +  /// MS-style inline assembly and should never happen in normal assembly.
>> +  virtual bool isMSAsmWildcard() const { return false; }
>> +
>> +  /// setMSAsmWildcard - Convert the operand into a wildcard.
>> +  virtual void setMSAsmWildcard(unsigned Size) { }
>> +
>>  /// getStartLoc - Get the location of the first token of this operand.
>>  virtual SMLoc getStartLoc() const = 0;
>>  /// getEndLoc - Get the location of the last token of this operand.
>> 
>> 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=165057&r1=165056&r2=165057&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp (original)
>> +++ llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp Tue Oct  2 16:49:07 2012
>> @@ -158,7 +158,8 @@
>>    Token,
>>    Register,
>>    Immediate,
>> -    Memory
>> +    Memory,
>> +    MSAsmWildcard
>>  } Kind;
>> 
>>  SMLoc StartLoc, EndLoc;
>> @@ -185,6 +186,10 @@
>>      unsigned Scale;
>>      unsigned Size;
>>    } Mem;
>> +
>> +    struct {
>> +      unsigned Size;
>> +    } MSAsm;
>>  };
>> 
>>  X86Operand(KindTy K, SMLoc Start, SMLoc End)
>> @@ -318,25 +323,32 @@
>> 
>>  bool isMem() const { return Kind == Memory; }
>>  bool isMem8() const {
>> -    return Kind == Memory && (!Mem.Size || Mem.Size == 8);
>> +    return (Kind == Memory && (!Mem.Size || Mem.Size == 8)) ||
>> +      (Kind == MSAsmWildcard && MSAsm.Size == 8);
>>  }
>>  bool isMem16() const {
>> -    return Kind == Memory && (!Mem.Size || Mem.Size == 16);
>> +    return (Kind == Memory && (!Mem.Size || Mem.Size == 16)) ||
>> +      (Kind == MSAsmWildcard && MSAsm.Size == 16);
>>  }
>>  bool isMem32() const {
>> -    return Kind == Memory && (!Mem.Size || Mem.Size == 32);
>> +    return (Kind == Memory && (!Mem.Size || Mem.Size == 32)) ||
>> +      (Kind == MSAsmWildcard && MSAsm.Size == 32);
>>  }
>>  bool isMem64() const {
>> -    return Kind == Memory && (!Mem.Size || Mem.Size == 64);
>> +    return (Kind == Memory && (!Mem.Size || Mem.Size == 64)) ||
>> +      (Kind == MSAsmWildcard && MSAsm.Size == 64);
>>  }
>>  bool isMem80() const {
>> -    return Kind == Memory && (!Mem.Size || Mem.Size == 80);
>> +    return (Kind == Memory && (!Mem.Size || Mem.Size == 80)) ||
>> +      (Kind == MSAsmWildcard && MSAsm.Size == 80);
>>  }
>>  bool isMem128() const {
>> -    return Kind == Memory && (!Mem.Size || Mem.Size == 128);
>> +    return (Kind == Memory && (!Mem.Size || Mem.Size == 128)) ||
>> +      (Kind == MSAsmWildcard && MSAsm.Size == 128);
>>  }
>>  bool isMem256() const {
>> -    return Kind == Memory && (!Mem.Size || Mem.Size == 256);
>> +    return (Kind == Memory && (!Mem.Size || Mem.Size == 256)) ||
>> +      (Kind == MSAsmWildcard && MSAsm.Size == 256);
>>  }
>> 
>>  bool isMemVX32() const {
>> @@ -363,6 +375,12 @@
>> 
>>  bool isReg() const { return Kind == Register; }
>> 
>> +  bool isMSAsmWildcard() const { return Kind == MSAsmWildcard; }
>> +  void setMSAsmWildcard(unsigned Size) {
>> +    Kind = MSAsmWildcard;
>> +    this->MSAsm.Size = Size;
>> +  }
>> +
>>  void addExpr(MCInst &Inst, const MCExpr *Expr) const {
>>    // Add as immediates when possible.
>>    if (const MCConstantExpr *CE = dyn_cast<MCConstantExpr>(Expr))
>> 
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 




More information about the llvm-commits mailing list