1 // RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve 2>&1 < %s| FileCheck %s 2 3 // Invalid element kind. 4 subr z0.h, p0/m, z0.h, z0.x 5 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid vector kind qualifier 6 // CHECK-NEXT: subr z0.h, p0/m, z0.h, z0.x 7 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 8 9 // Element size specifiers should match. 10 subr z0.h, p0/m, z0.h, z0.b 11 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width 12 // CHECK-NEXT: subr z0.h, p0/m, z0.h, z0.b 13 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 14 15 // Invalid predicate suffix '/a' 16 subr z0.d, p7/a, z0.d, z0.d 17 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expecting 'm' or 'z' predication 18 // CHECK-NEXT: subr z0.d, p7/a, z0.d, z0.d 19 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 20 21 // Missing predicate suffix 22 subr z0.d, p7, z0.d, z0.d 23 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand 24 // CHECK-NEXT: subr z0.d, p7, z0.d, z0.d 25 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 26 27 // --------------------------------------------------------------------------// 28 // error: restricted predicate has range [0, 7]. 29 30 subr z26.b, p8/m, z26.b, z27.b 31 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: restricted predicate has range [0, 7]. 32 // CHECK-NEXT: subr z26.b, p8/m, z26.b, z27.b 33 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 34 35 subr z14.h, p8/m, z14.h, z18.h 36 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: restricted predicate has range [0, 7]. 37 // CHECK-NEXT: subr z14.h, p8/m, z14.h, z18.h 38 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 39 40 subr z30.s, p8/m, z30.s, z23.s 41 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: restricted predicate has range [0, 7]. 42 // CHECK-NEXT: subr z30.s, p8/m, z30.s, z23.s 43 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 44 45 subr z29.d, p8/m, z29.d, z3.d 46 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: restricted predicate has range [0, 7]. 47 // CHECK-NEXT: subr z29.d, p8/m, z29.d, z3.d 48 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 49 50 // --------------------------------------------------------------------------// 51 // Source and Destination Registers must match 52 53 subr z25.b, p4/m, z26.b, z2.b 54 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must match destination register 55 // CHECK-NEXT: subr z25.b, p4/m, z26.b, z2.b 56 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 57 58 subr z29.h, p6/m, z30.h, z20.h 59 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must match destination register 60 // CHECK-NEXT: subr z29.h, p6/m, z30.h, z20.h 61 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 62 63 subr z14.s, p2/m, z15.s, z21.s 64 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must match destination register 65 // CHECK-NEXT: subr z14.s, p2/m, z15.s, z21.s 66 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 67 68 subr z2.d, p5/m, z3.d, z11.d 69 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must match destination register 70 // CHECK-NEXT: subr z2.d, p5/m, z3.d, z11.d 71 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 72 73 74 // --------------------------------------------------------------------------// 75 // Invalid immediates 76 77 subr z0.b, z0.b, #0, lsl #8 // #0, lsl #8 is not valid for .b 78 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 255] with a shift amount of 0 79 // CHECK-NEXT: subr z0.b, z0.b, #0, lsl #8 80 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 81 82 subr z0.b, z0.b, #-1 83 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 255] with a shift amount of 0 84 // CHECK-NEXT: subr z0.b, z0.b, #-1 85 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 86 87 subr z0.b, z0.b, #1, lsl #8 88 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 255] with a shift amount of 0 89 // CHECK-NEXT: subr z0.b, z0.b, #1, lsl #8 90 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 91 92 subr z0.b, z0.b, #256 93 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 255] with a shift amount of 0 94 // CHECK-NEXT: subr z0.b, z0.b, #256 95 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 96 97 subr z0.h, z0.h, #-1 98 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 255] or a multiple of 256 in range [256, 65280] 99 // CHECK-NEXT: subr z0.h, z0.h, #-1 100 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 101 102 subr z0.h, z0.h, #256, lsl #8 103 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 255] or a multiple of 256 in range [256, 65280] 104 // CHECK-NEXT: subr z0.h, z0.h, #256, lsl #8 105 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 106 107 subr z0.h, z0.h, #65536 108 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 255] or a multiple of 256 in range [256, 65280] 109 // CHECK-NEXT: subr z0.h, z0.h, #65536 110 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 111 112 subr z0.s, z0.s, #-1 113 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 255] or a multiple of 256 in range [256, 65280] 114 // CHECK-NEXT: subr z0.s, z0.s, #-1 115 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 116 117 subr z0.s, z0.s, #256, lsl #8 118 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 255] or a multiple of 256 in range [256, 65280] 119 // CHECK-NEXT: subr z0.s, z0.s, #256, lsl #8 120 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 121 122 subr z0.s, z0.s, #65536 123 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 255] or a multiple of 256 in range [256, 65280] 124 // CHECK-NEXT: subr z0.s, z0.s, #65536 125 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 126 127 subr z0.d, z0.d, #-1 128 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 255] or a multiple of 256 in range [256, 65280] 129 // CHECK-NEXT: subr z0.d, z0.d, #-1 130 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 131 132 subr z0.d, z0.d, #256, lsl #8 133 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 255] or a multiple of 256 in range [256, 65280] 134 // CHECK-NEXT: subr z0.d, z0.d, #256, lsl #8 135 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 136 137 subr z0.d, z0.d, #65536 138 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 255] or a multiple of 256 in range [256, 65280] 139 // CHECK-NEXT: subr z0.d, z0.d, #65536 140 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 141 142 143 // --------------------------------------------------------------------------// 144 // Negative tests for instructions that are incompatible with movprfx 145 146 movprfx z31.d, p0/z, z6.d 147 subr z31.d, z31.d, #65280 148 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx, suggest using unpredicated movprfx 149 // CHECK-NEXT: subr z31.d, z31.d, #65280 150 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 151