[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