aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/X86/AsmParser/X86AsmParser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/X86/AsmParser/X86AsmParser.cpp')
-rw-r--r--lib/Target/X86/AsmParser/X86AsmParser.cpp19
1 files changed, 11 insertions, 8 deletions
diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp
index d06350b805..d102b371d4 100644
--- a/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp
@@ -230,20 +230,23 @@ struct X86Operand {
bool X86ATTAsmParser::ParseRegister(X86Operand &Op) {
+ const AsmToken &TokPercent = getLexer().getTok();
+ assert(TokPercent.is(AsmToken::Percent) && "Invalid token kind!");
+ getLexer().Lex(); // Eat percent token.
+
const AsmToken &Tok = getLexer().getTok();
- assert(Tok.is(AsmToken::Register) && "Invalid token kind!");
+ assert(TokPercent.is(AsmToken::Identifier) && "Invalid token kind!");
// FIXME: Validate register for the current architecture; we have to do
// validation later, so maybe there is no need for this here.
unsigned RegNo;
- assert(Tok.getString().startswith("%") && "Invalid register name!");
- RegNo = MatchRegisterName(Tok.getString().substr(1));
+ RegNo = MatchRegisterName(Tok.getString());
if (RegNo == 0)
return Error(Tok.getLoc(), "invalid register name");
Op = X86Operand::CreateReg(RegNo);
- getLexer().Lex(); // Eat register token.
+ getLexer().Lex(); // Eat identifier token.
return false;
}
@@ -252,7 +255,7 @@ bool X86ATTAsmParser::ParseOperand(X86Operand &Op) {
switch (getLexer().getKind()) {
default:
return ParseMemOperand(Op);
- case AsmToken::Register:
+ case AsmToken::Percent:
// FIXME: if a segment register, this could either be just the seg reg, or
// the start of a memory operand.
return ParseRegister(Op);
@@ -299,7 +302,7 @@ bool X86ATTAsmParser::ParseMemOperand(X86Operand &Op) {
// so we have to eat the ( to see beyond it.
getLexer().Lex(); // Eat the '('.
- if (getLexer().is(AsmToken::Register) || getLexer().is(AsmToken::Comma)) {
+ if (getLexer().is(AsmToken::Percent) || getLexer().is(AsmToken::Comma)) {
// Nothing to do here, fall into the code below with the '(' part of the
// memory operand consumed.
} else {
@@ -327,7 +330,7 @@ bool X86ATTAsmParser::ParseMemOperand(X86Operand &Op) {
// the rest of the memory operand.
unsigned BaseReg = 0, IndexReg = 0, Scale = 1;
- if (getLexer().is(AsmToken::Register)) {
+ if (getLexer().is(AsmToken::Percent)) {
if (ParseRegister(Op))
return true;
BaseReg = Op.getReg();
@@ -342,7 +345,7 @@ bool X86ATTAsmParser::ParseMemOperand(X86Operand &Op) {
//
// Not that even though it would be completely consistent to support syntax
// like "1(%eax,,1)", the assembler doesn't.
- if (getLexer().is(AsmToken::Register)) {
+ if (getLexer().is(AsmToken::Percent)) {
if (ParseRegister(Op))
return true;
IndexReg = Op.getReg();