aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorChad Rosier <mcrosier@apple.com>2012-10-26 18:04:20 +0000
committerChad Rosier <mcrosier@apple.com>2012-10-26 18:04:20 +0000
commitefcb3d9c1cd9410949b4005fbe6f2817f8dfe395 (patch)
tree9ff085ed699810537a23ae7271fb0fbf501f9a5e /include
parent8999f4777b920ab144a15a6f54a865a07f9c4a7f (diff)
downloadexternal_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.h6
-rw-r--r--include/llvm/MC/MCTargetAsmParser.h18
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) {}
};