diff options
author | Chad Rosier <mcrosier@apple.com> | 2012-10-26 18:04:20 +0000 |
---|---|---|
committer | Chad Rosier <mcrosier@apple.com> | 2012-10-26 18:04:20 +0000 |
commit | efcb3d9c1cd9410949b4005fbe6f2817f8dfe395 (patch) | |
tree | 9ff085ed699810537a23ae7271fb0fbf501f9a5e /include | |
parent | 8999f4777b920ab144a15a6f54a865a07f9c4a7f (diff) | |
download | external_llvm-efcb3d9c1cd9410949b4005fbe6f2817f8dfe395.zip external_llvm-efcb3d9c1cd9410949b4005fbe6f2817f8dfe395.tar.gz external_llvm-efcb3d9c1cd9410949b4005fbe6f2817f8dfe395.tar.bz2 |
[ms-inline asm] Add support for the TYPE operator.
Part of rdar://12576868
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166790 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/MC/MCParser/MCParsedAsmOperand.h | 6 | ||||
-rw-r--r-- | include/llvm/MC/MCTargetAsmParser.h | 18 |
2 files changed, 16 insertions, 8 deletions
diff --git a/include/llvm/MC/MCParser/MCParsedAsmOperand.h b/include/llvm/MC/MCParser/MCParsedAsmOperand.h index 89b0a1f..60e7887 100644 --- a/include/llvm/MC/MCParser/MCParsedAsmOperand.h +++ b/include/llvm/MC/MCParser/MCParsedAsmOperand.h @@ -64,6 +64,12 @@ public: /// getEndLoc - Get the location of the last token of this operand. virtual SMLoc getEndLoc() const = 0; + /// needAsmRewrite - AsmRewrites happen in both the target-independent and + /// target-dependent parsers. The target-independent parser calls this + /// function to determine if the target-dependent parser has already taken + /// care of the rewrites. Only valid when parsing MS-style inline assembly. + virtual bool needAsmRewrite() const { return true; } + /// isOffsetOf - Do we need to emit code to get the offset of the variable, /// rather then the value of the variable? Only valid when parsing MS-style /// inline assembly. diff --git a/include/llvm/MC/MCTargetAsmParser.h b/include/llvm/MC/MCTargetAsmParser.h index 8383723..483a80b 100644 --- a/include/llvm/MC/MCTargetAsmParser.h +++ b/include/llvm/MC/MCTargetAsmParser.h @@ -22,13 +22,15 @@ class MCInst; template <typename T> class SmallVectorImpl; enum AsmRewriteKind { - AOK_Imm, - AOK_Input, - AOK_Output, - AOK_SizeDirective, - AOK_Emit, - AOK_Skip, - AOK_DotOperator + AOK_DotOperator, // Rewrite a dot operator expression as an immediate. + // E.g., [eax].foo.bar -> [eax].8 + AOK_Emit, // Rewrite _emit as .byte. + AOK_Imm, // Rewrite as $$N. + AOK_ImmPrefix, // Add $$ before a parsed Imm. + AOK_Input, // Rewrite in terms of $N. + AOK_Output, // Rewrite in terms of $N. + AOK_SizeDirective, // Add a sizing directive (e.g., dword ptr). + AOK_Skip // Skip emission (e.g., offset/type operators). }; struct AsmRewrite { @@ -37,7 +39,7 @@ struct AsmRewrite { unsigned Len; unsigned Val; public: - AsmRewrite(AsmRewriteKind kind, SMLoc loc, unsigned len, unsigned val = 0) + AsmRewrite(AsmRewriteKind kind, SMLoc loc, unsigned len = 0, unsigned val = 0) : Kind(kind), Loc(loc), Len(len), Val(val) {} }; |