mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 11:02:59 +02:00
013bed785d
This patch adds support for instructions performing bitwise operations on predicate vectors, including AND, BIC, EOR, NAND, NOR, ORN, ORR, and their status flag setting variants ANDS, BICS, EORS, NANDS, ORNS, ORRS. This patch also adds several aliases: orr p0.b, p1/z, p1.b, p1.b => mov p0.b, p1.b orrs p0.b, p1/z, p1.b, p1.b => movs p0.b, p1.b and p0.b, p1/z, p2.b, p2.b => mov p0.b, p1/z, p2.b ands p0.b, p1/z, p2.b, p2.b => movs p0.b, p1/z, p2.b eor p0.b, p1/z, p2.b, p1.b => not p0.b, p1/z, p2.b eors p0.b, p1/z, p2.b, p1.b => nots p0.b, p1/z, p2.b llvm-svn: 334906
95 lines
3.5 KiB
ArmAsm
95 lines
3.5 KiB
ArmAsm
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve 2>&1 < %s| FileCheck %s
|
|
|
|
// --------------------------------------------------------------------------//
|
|
// Immediate not compatible with encode/decode function.
|
|
|
|
eor z5.b, z5.b, #0xfa
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or logical immediate
|
|
// CHECK-NEXT: eor z5.b, z5.b, #0xfa
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
|
|
eor z5.b, z5.b, #0xfff9
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or logical immediate
|
|
// CHECK-NEXT: eor z5.b, z5.b, #0xfff9
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
|
|
eor z5.h, z5.h, #0xfffa
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or logical immediate
|
|
// CHECK-NEXT: eor z5.h, z5.h, #0xfffa
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
|
|
eor z5.h, z5.h, #0xfffffff9
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or logical immediate
|
|
// CHECK-NEXT: eor z5.h, z5.h, #0xfffffff9
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
|
|
eor z5.s, z5.s, #0xfffffffa
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or logical immediate
|
|
// CHECK-NEXT: eor z5.s, z5.s, #0xfffffffa
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
|
|
eor z5.s, z5.s, #0xffffffffffffff9
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or logical immediate
|
|
// CHECK-NEXT: eor z5.s, z5.s, #0xffffffffffffff9
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
|
|
eor z15.d, z15.d, #0xfffffffffffffffa
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or logical immediate
|
|
// CHECK-NEXT: eor z15.d, z15.d, #0xfffffffffffffffa
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
|
|
// --------------------------------------------------------------------------//
|
|
// Source and Destination Registers must match
|
|
|
|
eor z7.d, z8.d, #254
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must match destination register
|
|
// CHECK-NEXT: eor z7.d, z8.d, #254
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
|
|
eor z0.d, p0/m, z1.d, z2.d
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must match destination register
|
|
// CHECK-NEXT: eor z0.d, p0/m, z1.d, z2.d
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
|
|
// Element size specifiers should match.
|
|
eor z21.d, z5.d, z26.b
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
|
// CHECK-NEXT: eor z21.d, z5.d, z26.b
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
|
|
|
|
// --------------------------------------------------------------------------//
|
|
// Predicate out of restricted predicate range
|
|
|
|
eor z0.d, p8/z, z0.d, z1.d
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: restricted predicate has range [0, 7].
|
|
// CHECK-NEXT: eor z0.d, p8/z, z0.d, z1.d
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
|
|
|
|
// --------------------------------------------------------------------------//
|
|
// Predicate register must have .b suffix
|
|
|
|
eor p0.h, p0/z, p0.h, p1.h
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register.
|
|
// CHECK-NEXT: eor p0.h, p0/z, p0.h, p1.h
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
|
|
eor p0.s, p0/z, p0.s, p1.s
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register.
|
|
// CHECK-NEXT: eor p0.s, p0/z, p0.s, p1.s
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
|
|
eor p0.d, p0/z, p0.d, p1.d
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register.
|
|
// CHECK-NEXT: eor p0.d, p0/z, p0.d, p1.d
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
|
|
// --------------------------------------------------------------------------//
|
|
// Operation only has zeroing predicate behaviour (p0/z).
|
|
|
|
eor p0.b, p0/m, p1.b, p2.b
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand
|
|
// CHECK-NEXT: eor p0.b, p0/m, p1.b, p2.b
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|