[ms] [llvm-ml] Add support for the remaining binary named operators
authorEric Astor <epastor@google.com>
Thu, 7 Jul 2022 15:59:41 +0000 (11:59 -0400)
committerEric Astor <epastor@google.com>
Fri, 8 Jul 2022 01:45:23 +0000 (21:45 -0400)
Finish adding support for the remaining binary named operators in expression context: XOR, SHL, and SHR.

Differential Revision: https://reviews.llvm.org/D129299

llvm/lib/MC/MCParser/MasmParser.cpp
llvm/test/tools/llvm-ml/named_operators.asm

index 2a2741a..424e9db 100644 (file)
@@ -2028,6 +2028,9 @@ bool MasmParser::parseBinOpRHS(unsigned Precedence, const MCExpr *&Res,
                     .CaseLower("and", AsmToken::Amp)
                     .CaseLower("not", AsmToken::Exclaim)
                     .CaseLower("or", AsmToken::Pipe)
+                    .CaseLower("xor", AsmToken::Caret)
+                    .CaseLower("shl", AsmToken::LessLess)
+                    .CaseLower("shr", AsmToken::GreaterGreater)
                     .CaseLower("eq", AsmToken::EqualEqual)
                     .CaseLower("ne", AsmToken::ExclaimEqual)
                     .CaseLower("lt", AsmToken::Less)
index 49ae8b0..b1bac15 100644 (file)
@@ -69,75 +69,120 @@ t9 BYTE 5 GE 6
 ; CHECK: .byte -1
 ; CHECK-NOT: .byte
 
+t10 BYTE 6 XOR 10
+; CHECK-LABEL: t10:
+; CHECK-NEXT: .byte 12
+
+t11 BYTE 1 SHL 2
+    BYTE 2 SHL 3
+    BYTE 3 SHL 1
+; CHECK-LABEL: t11:
+; CHECK-NEXT: .byte 4
+; CHECK: .byte 16
+; CHECK: .byte 6
+; CHECK-NOT: .byte
+
+t12 BYTE 6 SHR 2
+    BYTE 16 SHR 3
+    BYTE 7 SHR 1
+; CHECK-LABEL: t12:
+; CHECK-NEXT: .byte 1
+; CHECK: .byte 2
+; CHECK: .byte 3
+; CHECK-NOT: .byte
+
 .code
 
-t10:
+t13:
 xor eax, Not 1
-; CHECK-LABEL: t10:
+; CHECK-LABEL: t13:
 ; CHECK-NEXT: xor eax, -2
 
-t11:
+t14:
 xor eax, 1 oR 2
-; CHECK-LABEL: t11:
+; CHECK-LABEL: t14:
 ; CHECK-NEXT: xor eax, 3
 
-t12:
+t15:
 xor eax, 6 ANd 10
-; CHECK-LABEL: t12:
+; CHECK-LABEL: t15:
 ; CHECK-NEXT: xor eax, 2
 
-t13:
+t16:
 xor eax, 5 Eq 6
 xor eax, 6 eQ 6
 xor eax, 7 eq 6
-; CHECK-LABEL: t13:
+; CHECK-LABEL: t16:
 ; CHECK-NEXT: xor eax, 0
 ; CHECK-NEXT: xor eax, -1
 ; CHECK-NEXT: xor eax, 0
 
-t14:
+t17:
 xor eax, 5 Ne 6
 xor eax, 6 nE 6
 xor eax, 7 ne 6
-; CHECK-LABEL: t14:
+; CHECK-LABEL: t17:
 ; CHECK-NEXT: xor eax, -1
 ; CHECK-NEXT: xor eax, 0
 ; CHECK-NEXT: xor eax, -1
 
-t15:
+t18:
 xor eax, 5 Lt 6
 xor eax, 6 lT 6
 xor eax, 7 lt 6
-; CHECK-LABEL: t15:
+; CHECK-LABEL: t18:
 ; CHECK-NEXT: xor eax, -1
 ; CHECK-NEXT: xor eax, 0
 ; CHECK-NEXT: xor eax, 0
 
-t16:
+t19:
 xor eax, 5 Le 6
 xor eax, 6 lE 6
 xor eax, 7 le 6
-; CHECK-LABEL: t16:
+; CHECK-LABEL: t19:
 ; CHECK-NEXT: xor eax, -1
 ; CHECK-NEXT: xor eax, -1
 ; CHECK-NEXT: xor eax, 0
 
-t17:
+t20:
 xor eax, 5 Gt 6
 xor eax, 6 gT 6
 xor eax, 7 gt 6
-; CHECK-LABEL: t17:
+; CHECK-LABEL: t20:
 ; CHECK-NEXT: xor eax, 0
 ; CHECK-NEXT: xor eax, 0
 ; CHECK-NEXT: xor eax, -1
 
-t18:
+t21:
 xor eax, 5 Ge 6
 xor eax, 6 gE 6
 xor eax, 7 ge 6
-; CHECK-LABEL: t18:
+; CHECK-LABEL: t21:
 ; CHECK-NEXT: xor eax, 0
 ; CHECK-NEXT: xor eax, -1
 ; CHECK-NEXT: xor eax, -1
 
+t22:
+xor eax, 6 xOR 10
+; CHECK-LABEL: t22:
+; CHECK-NEXT: xor eax, 12
+
+t23:
+xor eax, 1 shl 2
+xor eax, 2 shL 3
+xor eax, 3 SHl 1
+; CHECK-LABEL: t23:
+; CHECK-NEXT: xor eax, 4
+; CHECK-NEXT: xor eax, 16
+; CHECK-NEXT: xor eax, 6
+
+t24:
+xor eax, 6 shr 2
+xor eax, 16 shR 3
+xor eax, 7 SHr 1
+; CHECK-LABEL: t24:
+; CHECK-NEXT: xor eax, 1
+; CHECK-NEXT: xor eax, 2
+; CHECK-NEXT: xor eax, 3
+
 END