diff options
author | Sean Callanan <scallanan@apple.com> | 2010-01-26 01:00:10 +0000 |
---|---|---|
committer | Sean Callanan <scallanan@apple.com> | 2010-01-26 01:00:10 +0000 |
commit | 7dcef4c47578befe40d488c953e3f5b328667300 (patch) | |
tree | 5d570b0a91d881411ce925b1ed4380ff4d9e0e73 | |
parent | 5ed17ae92a9239c2ff7d3ba494bf96651598ee7a (diff) |
Added the implementation of the Intel-specific
TargetAsmLexer.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94482 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/X86/AsmParser/X86AsmLexer.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/lib/Target/X86/AsmParser/X86AsmLexer.cpp b/lib/Target/X86/AsmParser/X86AsmLexer.cpp index f35cb10db3..e350515f3a 100644 --- a/lib/Target/X86/AsmParser/X86AsmLexer.cpp +++ b/lib/Target/X86/AsmParser/X86AsmLexer.cpp @@ -8,6 +8,7 @@ //===----------------------------------------------------------------------===// #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringExtras.h" #include "llvm/Target/TargetAsmLexer.h" #include "llvm/Target/TargetRegistry.h" #include "llvm/MC/MCAsmInfo.h" @@ -113,7 +114,32 @@ AsmToken X86AsmLexer::LexTokenATT() { } AsmToken X86AsmLexer::LexTokenIntel() { - return AsmToken(AsmToken::Error, "", 0); + const AsmToken &lexedToken = lexDefinite(); + + switch(lexedToken.getKind()) { + default: + return AsmToken(lexedToken); + case AsmToken::Error: + SetError(Lexer->getErrLoc(), Lexer->getErr()); + return AsmToken(lexedToken); + case AsmToken::Identifier: + { + std::string upperCase = lexedToken.getString().str(); + std::string lowerCase = LowercaseString(upperCase); + StringRef lowerRef(lowerCase); + + unsigned regID = MatchRegisterName(lowerRef); + + if (regID) { + return AsmToken(AsmToken::Register, + lexedToken.getString(), + static_cast<int64_t>(regID)); + } + else { + return AsmToken(lexedToken); + } + } + } } extern "C" void LLVMInitializeX86AsmLexer() { |