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