1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve 2>&1 < %s| FileCheck %s 2 3// --------------------------------------------------------------------------// 4// Immediate not compatible with encode/decode function. 5 6eor z5.b, z5.b, #0xfa 7// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or logical immediate 8// CHECK-NEXT: eor z5.b, z5.b, #0xfa 9// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 10 11eor z5.b, z5.b, #0xfff9 12// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or logical immediate 13// CHECK-NEXT: eor z5.b, z5.b, #0xfff9 14// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 15 16eor z5.h, z5.h, #0xfffa 17// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or logical immediate 18// CHECK-NEXT: eor z5.h, z5.h, #0xfffa 19// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 20 21eor z5.h, z5.h, #0xfffffff9 22// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or logical immediate 23// CHECK-NEXT: eor z5.h, z5.h, #0xfffffff9 24// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 25 26eor z5.s, z5.s, #0xfffffffa 27// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or logical immediate 28// CHECK-NEXT: eor z5.s, z5.s, #0xfffffffa 29// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 30 31eor z5.s, z5.s, #0xffffffffffffff9 32// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or logical immediate 33// CHECK-NEXT: eor z5.s, z5.s, #0xffffffffffffff9 34// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 35 36eor z15.d, z15.d, #0xfffffffffffffffa 37// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or logical immediate 38// CHECK-NEXT: eor z15.d, z15.d, #0xfffffffffffffffa 39// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 40 41// --------------------------------------------------------------------------// 42// Source and Destination Registers must match 43 44eor z7.d, z8.d, #254 45// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must match destination register 46// CHECK-NEXT: eor z7.d, z8.d, #254 47// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 48 49eor z0.d, p0/m, z1.d, z2.d 50// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must match destination register 51// CHECK-NEXT: eor z0.d, p0/m, z1.d, z2.d 52// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 53 54// Element size specifiers should match. 55eor z21.d, z5.d, z26.b 56// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width 57// CHECK-NEXT: eor z21.d, z5.d, z26.b 58// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 59 60 61// --------------------------------------------------------------------------// 62// Predicate out of restricted predicate range 63 64eor z0.d, p8/z, z0.d, z1.d 65// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix) 66// CHECK-NEXT: eor z0.d, p8/z, z0.d, z1.d 67// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 68 69 70// --------------------------------------------------------------------------// 71// Predicate register must have .b suffix 72 73eor p0.h, p0/z, p0.h, p1.h 74// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register. 75// CHECK-NEXT: eor p0.h, p0/z, p0.h, p1.h 76// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 77 78eor p0.s, p0/z, p0.s, p1.s 79// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register. 80// CHECK-NEXT: eor p0.s, p0/z, p0.s, p1.s 81// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 82 83eor p0.d, p0/z, p0.d, p1.d 84// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register. 85// CHECK-NEXT: eor p0.d, p0/z, p0.d, p1.d 86// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 87 88// --------------------------------------------------------------------------// 89// Operation only has zeroing predicate behaviour (p0/z). 90 91eor p0.b, p0/m, p1.b, p2.b 92// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand 93// CHECK-NEXT: eor p0.b, p0/m, p1.b, p2.b 94// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 95 96 97// --------------------------------------------------------------------------// 98// Negative tests for instructions that are incompatible with movprfx 99 100movprfx z0.d, p0/z, z7.d 101eor z0.d, z0.d, #0x6 102// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx, suggest using unpredicated movprfx 103// CHECK-NEXT: eor z0.d, z0.d, #0x6 104// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 105 106movprfx z0.d, p0/z, z7.d 107eor z0.d, z0.d, z0.d 108// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov 109// CHECK-NEXT: eor z0.d, z0.d, z0.d 110// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 111 112movprfx z0, z7 113eor z0.d, z0.d, z0.d 114// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov 115// CHECK-NEXT: eor z0.d, z0.d, z0.d 116// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 117