summaryrefslogtreecommitdiff
path: root/tools/llvm-mc
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-06-22 06:02:13 +0000
committerChris Lattner <sabre@nondot.org>2009-06-22 06:02:13 +0000
commitbe9c23fef4422aba89050213f002f0628e3df8b3 (patch)
tree29b738ccee85fcbdb29b5d80454539b9ffb9ba34 /tools/llvm-mc
parentc41938303b08199793b4370eb667d5bd9b97e61c (diff)
downloadllvm-be9c23fef4422aba89050213f002f0628e3df8b3.tar.gz
llvm-be9c23fef4422aba89050213f002f0628e3df8b3.tar.bz2
llvm-be9c23fef4422aba89050213f002f0628e3df8b3.tar.xz
implement parser support for '*' operands, as in "call *%eax".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73876 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-mc')
-rw-r--r--tools/llvm-mc/AsmParser.cpp19
1 files changed, 13 insertions, 6 deletions
diff --git a/tools/llvm-mc/AsmParser.cpp b/tools/llvm-mc/AsmParser.cpp
index fc226a5c9a..c9583549bd 100644
--- a/tools/llvm-mc/AsmParser.cpp
+++ b/tools/llvm-mc/AsmParser.cpp
@@ -108,7 +108,7 @@ bool AsmParser::ParseX86Operand(X86Operand &Op) {
// FIXME: Decode reg #.
// FIXME: if a segment register, this could either be just the seg reg, or
// the start of a memory operand.
- Op = X86Operand::CreateReg(0);
+ Op = X86Operand::CreateReg(123);
Lexer.Lex(); // Eat register.
return false;
case asmtok::Dollar: {
@@ -119,12 +119,19 @@ bool AsmParser::ParseX86Operand(X86Operand &Op) {
return TokError("expected integer constant");
Op = X86Operand::CreateReg(Val);
return false;
+ case asmtok::Star:
+ Lexer.Lex(); // Eat the star.
+
+ if (Lexer.is(asmtok::Register)) {
+ Op = X86Operand::CreateReg(123);
+ Lexer.Lex(); // Eat register.
+ } else if (ParseX86MemOperand(Op))
+ return true;
+
+ // FIXME: Note that these are 'dereferenced' so that clients know the '*' is
+ // there.
+ return false;
}
-
- //case asmtok::Star:
- // * %eax
- // * <memaddress>
- // Note that these are both "dereferenced".
}
}