[llvm] r175173 - Revert r15266. This fixes llvm.org/pr15266.
Rafael Espindola
rafael.espindola at gmail.com
Thu Feb 14 08:23:08 PST 2013
Author: rafael
Date: Thu Feb 14 10:23:08 2013
New Revision: 175173
URL: http://llvm.org/viewvc/llvm-project?rev=175173&view=rev
Log:
Revert r15266. This fixes llvm.org/pr15266.
Removed:
llvm/trunk/test/MC/X86/intel-syntax-binary.s
Modified:
llvm/trunk/lib/MC/MCParser/AsmLexer.cpp
llvm/trunk/test/MC/MachO/direction_labels.s
Modified: llvm/trunk/lib/MC/MCParser/AsmLexer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmLexer.cpp?rev=175173&r1=175172&r2=175173&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCParser/AsmLexer.cpp (original)
+++ llvm/trunk/lib/MC/MCParser/AsmLexer.cpp Thu Feb 14 10:23:08 2013
@@ -179,48 +179,26 @@ static unsigned doLookAhead(const char *
}
}
bool isHex = *LookAhead == 'h' || *LookAhead == 'H';
- bool isBinary = LookAhead[-1] == 'b' || LookAhead[-1] == 'B';
- CurPtr = (isBinary || isHex || !FirstHex) ? LookAhead : FirstHex;
+ CurPtr = isHex || !FirstHex ? LookAhead : FirstHex;
if (isHex)
return 16;
- if (isBinary) {
- --CurPtr;
- return 2;
- }
return DefaultRadix;
}
/// LexDigit: First character is [0-9].
/// Local Label: [0-9][:]
-/// Forward/Backward Label: [0-9]+f or [0-9]b
-/// Binary integer: 0b[01]+ or [01][bB]
+/// Forward/Backward Label: [0-9][fb]
+/// Binary integer: 0b[01]+
/// Octal integer: 0[0-7]+
/// Hex integer: 0x[0-9a-fA-F]+ or [0x]?[0-9][0-9a-fA-F]*[hH]
/// Decimal integer: [1-9][0-9]*
AsmToken AsmLexer::LexDigit() {
-
- // Backward Label: [0-9]b
- if (*CurPtr == 'b') {
- // See if we actually have "0b" as part of something like "jmp 0b\n"
- if (!isdigit(CurPtr[1])) {
- long long Value;
- StringRef Result(TokStart, CurPtr - TokStart);
- if (Result.getAsInteger(10, Value))
- return ReturnError(TokStart, "invalid backward label");
-
- return AsmToken(AsmToken::Integer, Result, Value);
- }
- }
-
- // Binary integer: 1[01]*[bB]
// Decimal integer: [1-9][0-9]*
- // Hexidecimal integer: [1-9][0-9a-fA-F]*[hH]
if (CurPtr[-1] != '0' || CurPtr[0] == '.') {
unsigned Radix = doLookAhead(CurPtr, 10);
- bool isDecimal = Radix == 10;
-
+ bool isHex = Radix == 16;
// Check for floating point literals.
- if (isDecimal && (*CurPtr == '.' || *CurPtr == 'e')) {
+ if (!isHex && (*CurPtr == '.' || *CurPtr == 'e')) {
++CurPtr;
return LexFloatLiteral();
}
@@ -233,7 +211,7 @@ AsmToken AsmLexer::LexDigit() {
// integer, but that do fit in an unsigned one, we just convert them over.
unsigned long long UValue;
if (Result.getAsInteger(Radix, UValue))
- return ReturnError(TokStart, isDecimal ? "invalid decimal number" :
+ return ReturnError(TokStart, !isHex ? "invalid decimal number" :
"invalid hexdecimal number");
Value = (long long)UValue;
}
@@ -249,9 +227,15 @@ AsmToken AsmLexer::LexDigit() {
return AsmToken(AsmToken::Integer, Result, Value);
}
- // Binary integer: 0b[01]+
if (*CurPtr == 'b') {
- const char *NumStart = ++CurPtr;
+ ++CurPtr;
+ // See if we actually have "0b" as part of something like "jmp 0b\n"
+ if (!isdigit(CurPtr[0])) {
+ --CurPtr;
+ StringRef Result(TokStart, CurPtr - TokStart);
+ return AsmToken(AsmToken::Integer, Result, 0);
+ }
+ const char *NumStart = CurPtr;
while (CurPtr[0] == '0' || CurPtr[0] == '1')
++CurPtr;
@@ -272,7 +256,6 @@ AsmToken AsmLexer::LexDigit() {
return AsmToken(AsmToken::Integer, Result, Value);
}
- // Hex integer: 0x[0-9a-fA-F]+
if (*CurPtr == 'x') {
++CurPtr;
const char *NumStart = CurPtr;
@@ -299,21 +282,17 @@ AsmToken AsmLexer::LexDigit() {
(int64_t)Result);
}
- // Binary: 0[01]*[Bb], but not 0b.
- // Octal: 0[0-7]*
- // Hexidecimal: [0][0-9a-fA-F]*[hH]
+ // Either octal or hexidecimal.
long long Value;
unsigned Radix = doLookAhead(CurPtr, 8);
- bool isBinary = Radix == 2;
- bool isOctal = Radix == 8;
+ bool isHex = Radix == 16;
StringRef Result(TokStart, CurPtr - TokStart);
if (Result.getAsInteger(Radix, Value))
- return ReturnError(TokStart, isOctal ? "invalid octal number" :
- isBinary ? "invalid binary number" :
+ return ReturnError(TokStart, !isHex ? "invalid octal number" :
"invalid hexdecimal number");
- // Consume the [bB][hH].
- if (Radix == 2 || Radix == 16)
+ // Consume the [hH].
+ if (Radix == 16)
++CurPtr;
// The darwin/x86 (and x86-64) assembler accepts and ignores ULL and LL
Modified: llvm/trunk/test/MC/MachO/direction_labels.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/direction_labels.s?rev=175173&r1=175172&r2=175173&view=diff
==============================================================================
--- llvm/trunk/test/MC/MachO/direction_labels.s (original)
+++ llvm/trunk/test/MC/MachO/direction_labels.s Thu Feb 14 10:23:08 2013
@@ -1,15 +1,15 @@
// RUN: llvm-mc -triple i386-apple-darwin9 %s -filetype=obj -o - | macho-dump --dump-section-data | FileCheck %s
direction_labels:
-8: nop
- jmp 8b
- nop
+10: nop
+ jmp 10b
+ nop
jne 0f
0: nop
jne 0b
- jmp 9f
-9: nop
- ret
+ jmp 11f
+11: nop
+ ret
// CHECK: ('cputype', 7)
// CHECK: ('cpusubtype', 3)
Removed: llvm/trunk/test/MC/X86/intel-syntax-binary.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/X86/intel-syntax-binary.s?rev=175172&view=auto
==============================================================================
--- llvm/trunk/test/MC/X86/intel-syntax-binary.s (original)
+++ llvm/trunk/test/MC/X86/intel-syntax-binary.s (removed)
@@ -1,14 +0,0 @@
-// RUN: llvm-mc -triple x86_64-unknown-unknown -x86-asm-syntax=intel %s | FileCheck %s
-// rdar://12470373
-
-// Checks to make sure we parse the binary suffix properly.
-// CHECK: movl $1, %eax
- mov eax, 01b
-// CHECK: movl $2, %eax
- mov eax, 10b
-// CHECK: movl $3, %eax
- mov eax, 11b
-// CHECK: movl $3, %eax
- mov eax, 11B
-// CHECK: movl $2711, %eax
- mov eax, 101010010111B
More information about the llvm-commits
mailing list