1 /* This file contains input data static definitions, shared by most of 2 the tests. */ 3 4 #include <arm_neon.h> 5 #include "arm-neon-ref.h" 6 7 /* Initialization helpers; 4 slices are needed for vld2, vld3 and 8 vld4. */ 9 #define MY_INIT_TABLE(T,W,N) xNAME(INIT_TABLE,N)(T##W##_t) 10 #define MY_INIT_TABLE2(T,W,N) xNAME(INIT_TABLE2,N)(T##W##_t) 11 #define MY_INIT_TABLE3(T,W,N) xNAME(INIT_TABLE3,N)(T##W##_t) 12 #define MY_INIT_TABLE4(T,W,N) xNAME(INIT_TABLE4,N)(T##W##_t) 13 14 /* Initialized input buffers. */ 15 #define VECT_VAR_DECL_INIT(V, T, W, N) \ 16 VECT_VAR_DECL(V,T,W,N) [] = { MY_INIT_TABLE(T,W,N) } 17 18 /* Specialized initializer with 4 entries, as used by vldX_dup and 19 vdup tests, which iterate 4 times on input buffers. */ 20 #define VECT_VAR_DECL_INIT4(V, T, W, N) \ 21 VECT_VAR_DECL(V,T,W,N) [] = { MY_INIT_TABLE(T,W,4) }; 22 23 /* Initializers for arrays of vectors. */ 24 #define VECT_ARRAY_INIT2(V, T, W, N) \ 25 T##W##_t VECT_ARRAY_VAR(V,T,W,N,2)[] = \ 26 { MY_INIT_TABLE(T,W,N) \ 27 MY_INIT_TABLE2(T,W,N) } 28 29 #define VECT_ARRAY_INIT3(V, T, W, N) \ 30 T##W##_t VECT_ARRAY_VAR(V,T,W,N,3)[] = \ 31 { MY_INIT_TABLE(T,W,N) \ 32 MY_INIT_TABLE2(T,W,N) \ 33 MY_INIT_TABLE3(T,W,N) } 34 35 #define VECT_ARRAY_INIT4(V, T, W, N) \ 36 T##W##_t VECT_ARRAY_VAR(V,T,W,N,4)[] = \ 37 { MY_INIT_TABLE(T,W,N) \ 38 MY_INIT_TABLE2(T,W,N) \ 39 MY_INIT_TABLE3(T,W,N) \ 40 MY_INIT_TABLE4(T,W,N) } 41 42 /* Sample initialization vectors. */ 43 #define INIT_TABLE_1(T) \ 44 (T)-16, 45 #define INIT_TABLE2_1(T) \ 46 (T)-15, 47 #define INIT_TABLE3_1(T) \ 48 (T)-14, 49 #define INIT_TABLE4_1(T) \ 50 (T)-13, 51 52 #define INIT_TABLE_2(T) \ 53 (T)-16, (T)-15, 54 #define INIT_TABLE2_2(T) \ 55 (T)-14, (T)-13, 56 #define INIT_TABLE3_2(T) \ 57 (T)-12, (T)-11, 58 #define INIT_TABLE4_2(T) \ 59 (T)-10, (T)-9, 60 61 /* Initializer for vld3_lane tests. */ 62 #define INIT_TABLE_3(T) \ 63 (T)-16, (T)-15, (T)-14, 64 65 #define INIT_TABLE_4(T) \ 66 (T)-16, (T)-15, (T)-14, (T)-13, 67 #define INIT_TABLE2_4(T) \ 68 (T)-12, (T)-11, (T)-10, (T)-9, 69 #define INIT_TABLE3_4(T) \ 70 (T)-8, (T)-7, (T)-6, (T)-5, 71 #define INIT_TABLE4_4(T) \ 72 (T)-4, (T)-3, (T)-2, (T)-1, 73 74 #define INIT_TABLE_8(T) \ 75 (T)-16, (T)-15, (T)-14, (T)-13, (T)-12, (T)-11, (T)-10, (T)-9, 76 #define INIT_TABLE2_8(T) \ 77 (T)-8, (T)-7, (T)-6, (T)-5, (T)-4, (T)-3, (T)-2, (T)-1, 78 #define INIT_TABLE3_8(T) \ 79 (T)0, (T)1, (T)2, (T)3, (T)4, (T)5, (T)6, (T)7, 80 #define INIT_TABLE4_8(T) \ 81 (T)8, (T)9, (T)10, (T)11, (T)12, (T)13, (T)14, (T)15, 82 83 #define INIT_TABLE_16(T) \ 84 (T)-16, (T)-15, (T)-14, (T)-13, (T)-12, (T)-11, (T)-10, (T)-9, \ 85 (T)-8, (T)-7, (T)-6, (T)-5, (T)-4, (T)-3, (T)-2, (T)-1, 86 #define INIT_TABLE2_16(T) \ 87 (T)0, (T)1, (T)2, (T)3, (T)4, (T)5, (T)6, (T)7, \ 88 (T)8, (T)9, (T)10, (T)11, (T)12, (T)13, (T)14, (T)15, 89 #define INIT_TABLE3_16(T) \ 90 (T)16, (T)17, (T)18, (T)19, (T)20, (T)21, (T)22, (T)23, \ 91 (T)24, (T)25, (T)26, (T)27, (T)28, (T)29, (T)30, (T)31, 92 #define INIT_TABLE4_16(T) \ 93 (T)32, (T)33, (T)34, (T)35, (T)36, (T)37, (T)38, (T)39, \ 94 (T)40, (T)41, (T)42, (T)43, (T)44, (T)45, (T)46, (T)47, 95 96 /* This one is used for padding between input buffers. */ 97 #define PAD(V, T, W, N) char VECT_VAR(V,T,W,N)=42 98 99 /* Input buffers, one of each size. */ 100 /* Insert some padding to try to exhibit out of bounds accesses. */ 101 VECT_VAR_DECL_INIT(buffer, int, 8, 8); 102 PAD(buffer_pad, int, 8, 8); 103 VECT_VAR_DECL_INIT(buffer, int, 16, 4); 104 PAD(buffer_pad, int, 16, 4); 105 VECT_VAR_DECL_INIT(buffer, int, 32, 2); 106 PAD(buffer_pad, int, 32, 2); 107 VECT_VAR_DECL_INIT(buffer, int, 64, 1); 108 PAD(buffer_pad, int, 64, 1); 109 VECT_VAR_DECL_INIT(buffer, uint, 8, 8); 110 PAD(buffer_pad, uint, 8, 8); 111 VECT_VAR_DECL_INIT(buffer, poly, 8, 8); 112 PAD(buffer_pad, poly, 8, 8); 113 VECT_VAR_DECL_INIT(buffer, poly, 16, 4); 114 PAD(buffer_pad, poly, 16, 4); 115 VECT_VAR_DECL_INIT(buffer, uint, 16, 4); 116 PAD(buffer_pad, uint, 16, 4); 117 VECT_VAR_DECL_INIT(buffer, uint, 32, 2); 118 PAD(buffer_pad, uint, 32, 2); 119 VECT_VAR_DECL_INIT(buffer, uint, 64, 1); 120 PAD(buffer_pad, uint, 64, 1); 121 #if defined (__ARM_FEATURE_CRYPTO) 122 VECT_VAR_DECL_INIT(buffer, poly, 64, 1); 123 PAD(buffer_pad, poly, 64, 1); 124 #endif 125 #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE) 126 VECT_VAR_DECL_INIT(buffer, float, 16, 4); 127 PAD(buffer_pad, float, 16, 4); 128 #endif 129 VECT_VAR_DECL_INIT(buffer, float, 32, 2); 130 PAD(buffer_pad, float, 32, 2); 131 VECT_VAR_DECL_INIT(buffer, int, 8, 16); 132 PAD(buffer_pad, int, 8, 16); 133 VECT_VAR_DECL_INIT(buffer, int, 16, 8); 134 PAD(buffer_pad, int, 16, 8); 135 VECT_VAR_DECL_INIT(buffer, int, 32, 4); 136 PAD(buffer_pad, int, 32, 4); 137 VECT_VAR_DECL_INIT(buffer, int, 64, 2); 138 PAD(buffer_pad, int, 64, 2); 139 VECT_VAR_DECL_INIT(buffer, uint, 8, 16); 140 PAD(buffer_pad, uint, 8, 16); 141 VECT_VAR_DECL_INIT(buffer, uint, 16, 8); 142 PAD(buffer_pad, uint, 16, 8); 143 VECT_VAR_DECL_INIT(buffer, uint, 32, 4); 144 PAD(buffer_pad, uint, 32, 4); 145 VECT_VAR_DECL_INIT(buffer, uint, 64, 2); 146 PAD(buffer_pad, uint, 64, 2); 147 VECT_VAR_DECL_INIT(buffer, poly, 8, 16); 148 PAD(buffer_pad, poly, 8, 16); 149 VECT_VAR_DECL_INIT(buffer, poly, 16, 8); 150 PAD(buffer_pad, poly, 16, 8); 151 #if defined (__ARM_FEATURE_CRYPTO) 152 VECT_VAR_DECL_INIT(buffer, poly, 64, 2); 153 PAD(buffer_pad, poly, 64, 2); 154 #endif 155 #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE) 156 VECT_VAR_DECL_INIT(buffer, float, 16, 8); 157 PAD(buffer_pad, float, 16, 8); 158 #endif 159 VECT_VAR_DECL_INIT(buffer, float, 32, 4); 160 PAD(buffer_pad, float, 32, 4); 161 #ifdef __aarch64__ 162 VECT_VAR_DECL_INIT(buffer, float, 64, 2); 163 PAD(buffer_pad, float, 64, 2); 164 #endif 165 166 /* The tests for vld1_dup and vdup expect at least 4 entries in the 167 input buffer, so force 1- and 2-elements initializers to have 4 168 entries (using VECT_VAR_DECL_INIT4). */ 169 VECT_VAR_DECL_INIT(buffer_dup, int, 8, 8); 170 VECT_VAR_DECL(buffer_dup_pad, int, 8, 8); 171 VECT_VAR_DECL_INIT(buffer_dup, int, 16, 4); 172 VECT_VAR_DECL(buffer_dup_pad, int, 16, 4); 173 VECT_VAR_DECL_INIT4(buffer_dup, int, 32, 2); 174 VECT_VAR_DECL(buffer_dup_pad, int, 32, 2); 175 VECT_VAR_DECL_INIT4(buffer_dup, int, 64, 1); 176 VECT_VAR_DECL(buffer_dup_pad, int, 64, 1); 177 VECT_VAR_DECL_INIT(buffer_dup, uint, 8, 8); 178 VECT_VAR_DECL(buffer_dup_pad, uint, 8, 8); 179 VECT_VAR_DECL_INIT(buffer_dup, uint, 16, 4); 180 VECT_VAR_DECL(buffer_dup_pad, uint, 16, 4); 181 VECT_VAR_DECL_INIT4(buffer_dup, uint, 32, 2); 182 VECT_VAR_DECL(buffer_dup_pad, uint, 32, 2); 183 VECT_VAR_DECL_INIT4(buffer_dup, uint, 64, 1); 184 VECT_VAR_DECL(buffer_dup_pad, uint, 64, 1); 185 VECT_VAR_DECL_INIT(buffer_dup, poly, 8, 8); 186 VECT_VAR_DECL(buffer_dup_pad, poly, 8, 8); 187 VECT_VAR_DECL_INIT(buffer_dup, poly, 16, 4); 188 VECT_VAR_DECL(buffer_dup_pad, poly, 16, 4); 189 #if defined (__ARM_FEATURE_CRYPTO) 190 VECT_VAR_DECL_INIT4(buffer_dup, poly, 64, 1); 191 VECT_VAR_DECL(buffer_dup_pad, poly, 64, 1); 192 #endif 193 #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE) 194 VECT_VAR_DECL_INIT4(buffer_dup, float, 16, 4); 195 VECT_VAR_DECL(buffer_dup_pad, float, 16, 4); 196 #endif 197 VECT_VAR_DECL_INIT4(buffer_dup, float, 32, 2); 198 VECT_VAR_DECL(buffer_dup_pad, float, 32, 2); 199 200 VECT_VAR_DECL_INIT(buffer_dup, int, 8, 16); 201 VECT_VAR_DECL(buffer_dup_pad, int, 8, 16); 202 VECT_VAR_DECL_INIT(buffer_dup, int, 16, 8); 203 VECT_VAR_DECL(buffer_dup_pad, int, 16, 8); 204 VECT_VAR_DECL_INIT(buffer_dup, int, 32, 4); 205 VECT_VAR_DECL(buffer_dup_pad, int, 32, 4); 206 VECT_VAR_DECL_INIT4(buffer_dup, int, 64, 2); 207 VECT_VAR_DECL(buffer_dup_pad, int, 64, 2); 208 VECT_VAR_DECL_INIT(buffer_dup, uint, 8, 16); 209 VECT_VAR_DECL(buffer_dup_pad, uint, 8, 16); 210 VECT_VAR_DECL_INIT(buffer_dup, uint, 16, 8); 211 VECT_VAR_DECL(buffer_dup_pad, uint, 16, 8); 212 VECT_VAR_DECL_INIT(buffer_dup, uint, 32, 4); 213 VECT_VAR_DECL(buffer_dup_pad, uint, 32, 4); 214 VECT_VAR_DECL_INIT4(buffer_dup, uint, 64, 2); 215 VECT_VAR_DECL(buffer_dup_pad, uint, 64, 2); 216 VECT_VAR_DECL_INIT(buffer_dup, poly, 8, 16); 217 VECT_VAR_DECL(buffer_dup_pad, poly, 8, 16); 218 VECT_VAR_DECL_INIT(buffer_dup, poly, 16, 8); 219 VECT_VAR_DECL(buffer_dup_pad, poly, 16, 8); 220 #if defined (__ARM_FEATURE_CRYPTO) 221 VECT_VAR_DECL_INIT4(buffer_dup, poly, 64, 2); 222 VECT_VAR_DECL(buffer_dup_pad, poly, 64, 2); 223 #endif 224 #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE) 225 VECT_VAR_DECL_INIT(buffer_dup, float, 16, 8); 226 VECT_VAR_DECL(buffer_dup_pad, float, 16, 8); 227 #endif 228 VECT_VAR_DECL_INIT(buffer_dup, float, 32, 4); 229 VECT_VAR_DECL(buffer_dup_pad, float, 32, 4); 230