[llvm-commits] [llvm] r165057 - in /llvm/trunk: include/llvm/MC/MCParser/MCParsedAsmOperand.h lib/Target/X86/AsmParser/X86AsmParser.cpp
Jim Grosbach
grosbach at apple.com
Tue Oct 2 15:16:23 PDT 2012
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