fix rdar://8456417 - llvm-mc can't do basic math
authorChris Lattner <sabre@nondot.org>
Wed, 22 Sep 2010 05:05:16 +0000 (05:05 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 22 Sep 2010 05:05:16 +0000 (05:05 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114532 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/MCParser/AsmParser.cpp
test/MC/AsmParser/X86/x86_instructions.s

index 84606bc31041100ee1f396eb0fa10d7f68f52602..ffd5df1a238be639b4818bc873f27b68eacfe381 100644 (file)
@@ -700,44 +700,45 @@ static unsigned getBinOpPrecedence(AsmToken::TokenKind K,
     Kind = MCBinaryExpr::LOr;
     return 1;
 
-    // Low Precedence: +, -, ==, !=, <>, <, <=, >, >=
+    
+    // Low Precedence: |, &, ^
+    //
+    // FIXME: gas seems to support '!' as an infix operator?
+  case AsmToken::Pipe:
+    Kind = MCBinaryExpr::Or;
+    return 2;
+  case AsmToken::Caret:
+    Kind = MCBinaryExpr::Xor;
+    return 2;
+  case AsmToken::Amp:
+    Kind = MCBinaryExpr::And;
+    return 2;
+      
+    // Intermediate Precedence: +, -, ==, !=, <>, <, <=, >, >=
   case AsmToken::Plus:
     Kind = MCBinaryExpr::Add;
-    return 2;
+    return 3;
   case AsmToken::Minus:
     Kind = MCBinaryExpr::Sub;
-    return 2;
+    return 3;
   case AsmToken::EqualEqual:
     Kind = MCBinaryExpr::EQ;
-    return 2;
+    return 3;
   case AsmToken::ExclaimEqual:
   case AsmToken::LessGreater:
     Kind = MCBinaryExpr::NE;
-    return 2;
+    return 3;
   case AsmToken::Less:
     Kind = MCBinaryExpr::LT;
-    return 2;
+    return 3;
   case AsmToken::LessEqual:
     Kind = MCBinaryExpr::LTE;
-    return 2;
+    return 3;
   case AsmToken::Greater:
     Kind = MCBinaryExpr::GT;
-    return 2;
+    return 3;
   case AsmToken::GreaterEqual:
     Kind = MCBinaryExpr::GTE;
-    return 2;
-
-    // Intermediate Precedence: |, &, ^
-    //
-    // FIXME: gas seems to support '!' as an infix operator?
-  case AsmToken::Pipe:
-    Kind = MCBinaryExpr::Or;
-    return 3;
-  case AsmToken::Caret:
-    Kind = MCBinaryExpr::Xor;
-    return 3;
-  case AsmToken::Amp:
-    Kind = MCBinaryExpr::And;
     return 3;
 
     // Highest Precedence: *, /, %, <<, >>
index cfea1bde9e35586c95e8ab5d71e17ed33855e5f1..df0acaa9d9925e052e9f206270b9a0e3f4e0e505 100644 (file)
@@ -336,3 +336,8 @@ fcmovna %st(1), %st(0)  // CHECK: fcmovbe   %st(1), %st(0)
 
 fcmovae %st(1), %st(0)  // CHECK: fcmovnb      %st(1), %st(0)
 fcmova %st(1), %st(0)   // CHECK: fcmovnbe     %st(1), %st(0)
+
+// rdar://8456417
+.byte 88 + 1 & 15  // CHECK: .byte     9
+
+