[llvm-commits] [llvm] r148131 - /llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp
Devang Patel
dpatel at apple.com
Fri Jan 13 11:12:18 PST 2012
Author: dpatel
Date: Fri Jan 13 13:12:18 2012
New Revision: 148131
URL: http://llvm.org/viewvc/llvm-project?rev=148131&view=rev
Log:
Refactor.
Modified:
llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp
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=148131&r1=148130&r2=148131&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp (original)
+++ llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp Fri Jan 13 13:12:18 2012
@@ -48,6 +48,7 @@
X86Operand *ParseOperand();
X86Operand *ParseATTOperand();
X86Operand *ParseIntelOperand();
+ X86Operand *ParseIntelMemOperand(StringRef TokenString, unsigned Size);
X86Operand *ParseMemOperand(unsigned SegReg, SMLoc StartLoc);
bool ParseDirectiveWord(unsigned Size, SMLoc L);
@@ -573,59 +574,64 @@
return Size != 0;
}
-X86Operand *X86AsmParser::ParseIntelOperand() {
-
- const AsmToken &Tok = Parser.getTok();
+/// ParseIntelMemOperand - Parse intel style memory operand.
+X86Operand *X86AsmParser::ParseIntelMemOperand(StringRef TokenString,
+ unsigned Size) {
SMLoc Start = Parser.getTok().getLoc(), End;
-
- // register
- if(unsigned RegNo = getIntelRegisterOperand(Tok.getString())) {
- Parser.Lex();
- End = Parser.getTok().getLoc();
- return X86Operand::CreateReg(RegNo, Start, End);
- }
-
- // mem operand
unsigned SegReg = 0, BaseReg = 0, IndexReg = 0, Scale = 1;
- StringRef OpStr = Tok.getString();
- unsigned Size = 0;
- if (isIntelMemOperand(OpStr, Size)) {
+ Parser.Lex();
+ if (TokenString == "PTR")
Parser.Lex();
- if (Tok.getString() == "PTR")
- Parser.Lex();
else {
Error(Start, "unexpected token!");
return 0;
}
+
+ if (TokenString == "[")
+ Parser.Lex();
+ else {
+ Error(Start, "unexpected token!");
+ return 0;
+ }
+
+ SMLoc LParenLoc = Parser.getTok().getLoc();
+ BaseReg = getIntelRegisterOperand(TokenString);
+ if (BaseReg == 0) {
+ Error(LParenLoc, "unexpected token!");
+ return 0;
+ }
+ Parser.Lex();
+ const MCExpr *Disp = MCConstantExpr::Create(0, getParser().getContext());
+ SMLoc ExprEnd;
+ if (getParser().ParseExpression(Disp, ExprEnd)) return 0;
+ End = Parser.getTok().getLoc();
+ if (TokenString == "]")
+ Parser.Lex();
+ if (BaseReg == 0) {
+ Error(End, "unexpected token!");
+ return 0;
+ }
+ return X86Operand::CreateMem(SegReg, Disp, BaseReg, IndexReg, Scale,
+ Start, End, Size);
+}
- if (Tok.getString() == "[")
- Parser.Lex();
- else {
- Error(Start, "unexpected token!");
- return 0;
- }
+X86Operand *X86AsmParser::ParseIntelOperand() {
- SMLoc LParenLoc = Parser.getTok().getLoc();
- BaseReg = getIntelRegisterOperand(Tok.getString());
- if (BaseReg == 0) {
- Error(LParenLoc, "unexpected token!");
- return 0;
- }
+ StringRef TokenString = Parser.getTok().getString();
+ SMLoc Start = Parser.getTok().getLoc(), End;
+
+ // register
+ if(unsigned RegNo = getIntelRegisterOperand(TokenString)) {
Parser.Lex();
- const MCExpr *Disp = MCConstantExpr::Create(0, getParser().getContext());
- SMLoc ExprEnd;
- if (getParser().ParseExpression(Disp, ExprEnd)) return 0;
End = Parser.getTok().getLoc();
- if (Tok.getString() == "]")
- Parser.Lex();
- if (BaseReg == 0) {
- Error(End, "unexpected token!");
- return 0;
- }
- return X86Operand::CreateMem(SegReg, Disp, BaseReg, IndexReg, Scale,
- Start, End, Size);
+ return X86Operand::CreateReg(RegNo, Start, End);
}
+ // mem operand
+ unsigned Size = 0;
+ if (isIntelMemOperand(TokenString, Size))
+ ParseIntelMemOperand(TokenString, Size);
+
// immediate.
const MCExpr *Val;
if (!getParser().ParseExpression(Val, End)) {
More information about the llvm-commits
mailing list