1 // RUN: %clang_cc1 -triple aarch64-linux-gnu -target-feature +neon -ffreestanding -fsyntax-only -verify %s 2 // RUN: %clang_cc1 -triple arm64-linux-gnu -target-feature +neon -ffreestanding -fsyntax-only -verify %s 3 4 #include <arm_neon.h> 5 6 void test_vext_8bit(int8x8_t small, int8x16_t big) { 7 vext_s8(small, small, 7); 8 vext_u8(small, small, 7); 9 vext_p8(small, small, 7); 10 vextq_s8(big, big, 15); 11 vextq_u8(big, big, 15); 12 vextq_p8(big, big, 15); 13 14 vext_s8(small, small, 8); // expected-error {{argument should be a value from 0 to 7}} 15 vext_u8(small, small, 8); // expected-error {{argument should be a value from 0 to 7}} 16 vext_p8(small, small, 8); // expected-error {{argument should be a value from 0 to 7}} 17 vextq_s8(big, big, 16); // expected-error {{argument should be a value from 0 to 15}} 18 vextq_u8(big, big, 16); // expected-error {{argument should be a value from 0 to 15}} 19 vextq_p8(big, big, 16); // expected-error {{argument should be a value from 0 to 15}} 20 } 21 22 void test_mul_lane_f64(float64x1_t small, float64x2_t big, float64x2_t rhs) { 23 vmul_lane_f64(small, small, 0); 24 vmul_laneq_f64(small, big, 1); 25 vmulq_lane_f64(big, small, 0); 26 vmulq_laneq_f64(big, big, 1); 27 vfma_lane_f64(small, small, small, 0); 28 vfma_laneq_f64(small, small, big, 1); 29 vfmaq_lane_f64(big, big, small, 0); 30 vfmaq_laneq_f64(big, big, big, 1); 31 32 vmul_lane_f64(small, small, 1); // expected-error {{argument should be a value from 0 to 0}} 33 vmul_laneq_f64(small, big, 2); // expected-error {{argument should be a value from 0 to 1}} 34 vfma_lane_f64(small, small, small, 1); // expected-error {{argument should be a value from 0 to 0}} 35 vfma_laneq_f64(small, small, big, 2); // expected-error {{argument should be a value from 0 to 1}} 36 vfmaq_laneq_f64(big, big, big, 2); // expected-error {{argument should be a value from 0 to 1}} 37 } 38 39 void test_ld1st1(int8x8_t small, int8x16_t big, void *addr) { 40 vld1_lane_s8(addr, small, 7); 41 vld1_lane_s16(addr, small, 3); 42 vld1_lane_s32(addr, small, 1); 43 vld1_lane_s64(addr, small, 0); 44 45 vld1q_lane_s8(addr, big, 15); 46 vld1q_lane_s16(addr, big, 7); 47 vld1q_lane_s32(addr, big, 3); 48 vld1q_lane_s64(addr, big, 1); 49 50 vld1_lane_s8(addr, small, 8); // expected-error {{argument should be a value from 0 to 7}} 51 vld1_lane_s16(addr, small, 4); // expected-error {{argument should be a value from 0 to 3}} 52 vld1_lane_s32(addr, small, 2); // expected-error {{argument should be a value from 0 to 1}} 53 vld1_lane_s64(addr, small, 1); // expected-error {{argument should be a value from 0 to 0}} 54 55 vld1q_lane_s8(addr, big, 16); // expected-error {{argument should be a value from 0 to 15}} 56 vld1q_lane_s16(addr, big, 8); // expected-error {{argument should be a value from 0 to 7}} 57 vld1q_lane_s32(addr, big, 4); // expected-error {{argument should be a value from 0 to 3}} 58 vld1q_lane_s64(addr, big, 2); // expected-error {{argument should be a value from 0 to 1}} 59 60 vst1_lane_s8(addr, small, 7); 61 vst1_lane_s16(addr, small, 3); 62 vst1_lane_s32(addr, small, 1); 63 vst1_lane_s64(addr, small, 0); 64 65 vst1q_lane_s8(addr, big, 15); 66 vst1q_lane_s16(addr, big, 7); 67 vst1q_lane_s32(addr, big, 3); 68 vst1q_lane_s64(addr, big, 1); 69 70 vst1_lane_s8(addr, small, 8); // expected-error {{argument should be a value from 0 to 7}} 71 vst1_lane_s16(addr, small, 4); // expected-error {{argument should be a value from 0 to 3}} 72 vst1_lane_s32(addr, small, 2); // expected-error {{argument should be a value from 0 to 1}} 73 vst1_lane_s64(addr, small, 1); // expected-error {{argument should be a value from 0 to 0}} 74 75 vst1q_lane_s8(addr, big, 16); // expected-error {{argument should be a value from 0 to 15}} 76 vst1q_lane_s16(addr, big, 8); // expected-error {{argument should be a value from 0 to 7}} 77 vst1q_lane_s32(addr, big, 4); // expected-error {{argument should be a value from 0 to 3}} 78 vst1q_lane_s64(addr, big, 2); // expected-error {{argument should be a value from 0 to 1}} 79 } 80 81 void test_ld2st2(int8x8x2_t small8, int8x16x2_t big8, 82 int16x4x2_t small16, int16x8x2_t big16, 83 int32x2x2_t small32, int32x4x2_t big32, 84 int64x1x2_t small64, int64x2x2_t big64, 85 void *addr) { 86 vld2_lane_s8(addr, small8, 7); 87 vld2_lane_s16(addr, small16, 3); 88 vld2_lane_s32(addr, small32, 1); 89 vld2_lane_s64(addr, small64, 0); 90 91 vld2q_lane_s8(addr, big8, 15); 92 vld2q_lane_s16(addr, big16, 7); 93 vld2q_lane_s32(addr, big32, 3); 94 vld2q_lane_s64(addr, big64, 1); 95 96 vld2_lane_s8(addr, small8, 8); // expected-error {{argument should be a value from 0 to 7}} 97 vld2_lane_s16(addr, small16, 4); // expected-error {{argument should be a value from 0 to 3}} 98 vld2_lane_s32(addr, small32, 2); // expected-error {{argument should be a value from 0 to 1}} 99 vld2_lane_s64(addr, small64, 1); // expected-error {{argument should be a value from 0 to 0}} 100 101 vld2q_lane_s8(addr, big8, 16); // expected-error {{argument should be a value from 0 to 15}} 102 vld2q_lane_s16(addr, big16, 8); // expected-error {{argument should be a value from 0 to 7}} 103 vld2q_lane_s32(addr, big32, 4); // expected-error {{argument should be a value from 0 to 3}} 104 vld2q_lane_s64(addr, big64, 2); // expected-error {{argument should be a value from 0 to 1}} 105 106 vst2_lane_s8(addr, small8, 7); 107 vst2_lane_s16(addr, small16, 3); 108 vst2_lane_s32(addr, small32, 1); 109 vst2_lane_s64(addr, small64, 0); 110 111 vst2q_lane_s8(addr, big8, 15); 112 vst2q_lane_s16(addr, big16, 7); 113 vst2q_lane_s32(addr, big32, 3); 114 vst2q_lane_s64(addr, big64, 1); 115 116 vst2_lane_s8(addr, small8, 8); // expected-error {{argument should be a value from 0 to 7}} 117 vst2_lane_s16(addr, small16, 4); // expected-error {{argument should be a value from 0 to 3}} 118 vst2_lane_s32(addr, small32, 2); // expected-error {{argument should be a value from 0 to 1}} 119 vst2_lane_s64(addr, small64, 1); // expected-error {{argument should be a value from 0 to 0}} 120 121 vst2q_lane_s8(addr, big8, 16); // expected-error {{argument should be a value from 0 to 15}} 122 vst2q_lane_s16(addr, big16, 8); // expected-error {{argument should be a value from 0 to 7}} 123 vst2q_lane_s32(addr, big32, 4); // expected-error {{argument should be a value from 0 to 3}} 124 vst2q_lane_s64(addr, big64, 2); // expected-error {{argument should be a value from 0 to 1}} 125 } 126 127 void test_ld3st3(int8x8x3_t small8, int8x16x3_t big8, 128 int16x4x3_t small16, int16x8x3_t big16, 129 int32x2x3_t small32, int32x4x3_t big32, 130 int64x1x3_t small64, int64x2x3_t big64, 131 void *addr) { 132 vld3_lane_s8(addr, small8, 7); 133 vld3_lane_s16(addr, small16, 3); 134 vld3_lane_s32(addr, small32, 1); 135 vld3_lane_s64(addr, small64, 0); 136 137 vld3q_lane_s8(addr, big8, 15); 138 vld3q_lane_s16(addr, big16, 7); 139 vld3q_lane_s32(addr, big32, 3); 140 vld3q_lane_s64(addr, big64, 1); 141 142 vld3_lane_s8(addr, small8, 8); // expected-error {{argument should be a value from 0 to 7}} 143 vld3_lane_s16(addr, small16, 4); // expected-error {{argument should be a value from 0 to 3}} 144 vld3_lane_s32(addr, small32, 2); // expected-error {{argument should be a value from 0 to 1}} 145 vld3_lane_s64(addr, small64, 1); // expected-error {{argument should be a value from 0 to 0}} 146 147 vld3q_lane_s8(addr, big8, 16); // expected-error {{argument should be a value from 0 to 15}} 148 vld3q_lane_s16(addr, big16, 8); // expected-error {{argument should be a value from 0 to 7}} 149 vld3q_lane_s32(addr, big32, 4); // expected-error {{argument should be a value from 0 to 3}} 150 vld3q_lane_s64(addr, big64, 2); // expected-error {{argument should be a value from 0 to 1}} 151 152 vst3_lane_s8(addr, small8, 7); 153 vst3_lane_s16(addr, small16, 3); 154 vst3_lane_s32(addr, small32, 1); 155 vst3_lane_s64(addr, small64, 0); 156 157 vst3q_lane_s8(addr, big8, 15); 158 vst3q_lane_s16(addr, big16, 7); 159 vst3q_lane_s32(addr, big32, 3); 160 vst3q_lane_s64(addr, big64, 1); 161 162 vst3_lane_s8(addr, small8, 8); // expected-error {{argument should be a value from 0 to 7}} 163 vst3_lane_s16(addr, small16, 4); // expected-error {{argument should be a value from 0 to 3}} 164 vst3_lane_s32(addr, small32, 2); // expected-error {{argument should be a value from 0 to 1}} 165 vst3_lane_s64(addr, small64, 1); // expected-error {{argument should be a value from 0 to 0}} 166 167 vst3q_lane_s8(addr, big8, 16); // expected-error {{argument should be a value from 0 to 15}} 168 vst3q_lane_s16(addr, big16, 8); // expected-error {{argument should be a value from 0 to 7}} 169 vst3q_lane_s32(addr, big32, 4); // expected-error {{argument should be a value from 0 to 3}} 170 vst3q_lane_s64(addr, big64, 2); // expected-error {{argument should be a value from 0 to 1}} 171 } 172 173 void test_ld4st4(int8x8x4_t small8, int8x16x4_t big8, 174 int16x4x4_t small16, int16x8x4_t big16, 175 int32x2x4_t small32, int32x4x4_t big32, 176 int64x1x4_t small64, int64x2x4_t big64, 177 void *addr) { 178 vld4_lane_s8(addr, small8, 7); 179 vld4_lane_s16(addr, small16, 3); 180 vld4_lane_s32(addr, small32, 1); 181 vld4_lane_s64(addr, small64, 0); 182 183 vld4q_lane_s8(addr, big8, 15); 184 vld4q_lane_s16(addr, big16, 7); 185 vld4q_lane_s32(addr, big32, 3); 186 vld4q_lane_s64(addr, big64, 1); 187 188 vld4_lane_s8(addr, small8, 8); // expected-error {{argument should be a value from 0 to 7}} 189 vld4_lane_s16(addr, small16, 4); // expected-error {{argument should be a value from 0 to 3}} 190 vld4_lane_s32(addr, small32, 2); // expected-error {{argument should be a value from 0 to 1}} 191 vld4_lane_s64(addr, small64, 1); // expected-error {{argument should be a value from 0 to 0}} 192 193 vld4q_lane_s8(addr, big8, 16); // expected-error {{argument should be a value from 0 to 15}} 194 vld4q_lane_s16(addr, big16, 8); // expected-error {{argument should be a value from 0 to 7}} 195 vld4q_lane_s32(addr, big32, 4); // expected-error {{argument should be a value from 0 to 3}} 196 vld4q_lane_s64(addr, big64, 2); // expected-error {{argument should be a value from 0 to 1}} 197 198 vst4_lane_s8(addr, small8, 7); 199 vst4_lane_s16(addr, small16, 3); 200 vst4_lane_s32(addr, small32, 1); 201 vst4_lane_s64(addr, small64, 0); 202 203 vst4q_lane_s8(addr, big8, 15); 204 vst4q_lane_s16(addr, big16, 7); 205 vst4q_lane_s32(addr, big32, 3); 206 vst4q_lane_s64(addr, big64, 1); 207 208 vst4_lane_s8(addr, small8, 8); // expected-error {{argument should be a value from 0 to 7}} 209 vst4_lane_s16(addr, small16, 4); // expected-error {{argument should be a value from 0 to 3}} 210 vst4_lane_s32(addr, small32, 2); // expected-error {{argument should be a value from 0 to 1}} 211 vst4_lane_s64(addr, small64, 1); // expected-error {{argument should be a value from 0 to 0}} 212 213 vst4q_lane_s8(addr, big8, 16); // expected-error {{argument should be a value from 0 to 15}} 214 vst4q_lane_s16(addr, big16, 8); // expected-error {{argument should be a value from 0 to 7}} 215 vst4q_lane_s32(addr, big32, 4); // expected-error {{argument should be a value from 0 to 3}} 216 vst4q_lane_s64(addr, big64, 2); // expected-error {{argument should be a value from 0 to 1}} 217 } 218 219