1/*
2
3Copyright (c) 2009, 2010, 2011, 2013 STMicroelectronics
4Written by Christophe Lyon
5
6Permission is hereby granted, free of charge, to any person obtaining a copy
7of this software and associated documentation files (the "Software"), to deal
8in the Software without restriction, including without limitation the rights
9to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10copies of the Software, and to permit persons to whom the Software is
11furnished to do so, subject to the following conditions:
12
13The above copyright notice and this permission notice shall be included in
14all copies or substantial portions of the Software.
15
16THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22THE SOFTWARE.
23
24*/
25
26#if defined(__arm__) || defined(__aarch64__)
27#include <arm_neon.h>
28#else
29#include "stm-arm-neon.h"
30#endif
31
32#include "stm-arm-neon-ref.h"
33
34#define TEST_MSG "VREINTERPRET/VREINTERPRETQ"
35
36void exec_vreinterpret (void)
37{
38  int i;
39
40  /* Basic test: y=vreinterpret(x), then store the result.  */
41#define TEST_VREINTERPRET(Q, T1, T2, W, N, TS1, TS2, WS, NS)		\
42  VECT_VAR(vector_res, T1, W, N) =					\
43    vreinterpret##Q##_##T2##W##_##TS2##WS(VECT_VAR(vector, TS1, WS, NS)); \
44  vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N),				\
45		    VECT_VAR(vector_res, T1, W, N));			\
46  DUMP(TEST_MSG, T1, W, N, PRIx##W);
47
48#define TEST_VREINTERPRET_POLY(Q, T1, T2, W, N, TS1, TS2, WS, NS)	\
49  VECT_VAR(vector_res, T1, W, N) =					\
50    vreinterpret##Q##_##T2##W##_##TS2##WS(VECT_VAR(vector, TS1, WS, NS)); \
51  vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N),				\
52		    VECT_VAR(vector_res, T1, W, N));			\
53  DUMP_POLY(TEST_MSG, T1, W, N, PRIx##W);
54
55#define TEST_VREINTERPRET_FP(Q, T1, T2, W, N, TS1, TS2, WS, NS)		\
56  VECT_VAR(vector_res, T1, W, N) =					\
57    vreinterpret##Q##_##T2##W##_##TS2##WS(VECT_VAR(vector, TS1, WS, NS)); \
58  vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N),				\
59		    VECT_VAR(vector_res, T1, W, N));			\
60  DUMP_FP(TEST_MSG, T1, W, N, PRIx##W);
61
62#if defined(__ARM_FP16_FORMAT_IEEE) && ( ((__ARM_FP & 0x2) != 0) || ((__ARM_NEON_FP16_INTRINSICS & 1) != 0) )
63#define TEST_VREINTERPRET_FP16(Q, T1, T2, W, N, TS1, TS2, WS, NS)	\
64  VECT_VAR(vector_res, T1, W, N) =					\
65    vreinterpret##Q##_##T2##W##_##TS2##WS(VECT_VAR(vector, TS1, WS, NS)); \
66  vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N),				\
67		    VECT_VAR(vector_res, T1, W, N));			\
68  DUMP_FP16(TEST_MSG, T1, W, N, PRIx##W);
69#endif
70
71  /* With ARM RVCT, we need to declare variables before any executable
72     statement */
73  DECL_VARIABLE_ALL_VARIANTS(vector);
74  DECL_VARIABLE_ALL_VARIANTS(vector_res);
75#if defined(__ARM_FP16_FORMAT_IEEE) && ( ((__ARM_FP & 0x2) != 0) || ((__ARM_NEON_FP16_INTRINSICS & 1) != 0) )
76  DECL_VARIABLE(vector, float, 16, 4);
77  DECL_VARIABLE(vector_res, float, 16, 4);
78  DECL_VARIABLE(vector, float, 16, 8);
79  DECL_VARIABLE(vector_res, float, 16, 8);
80#endif
81
82  clean_results ();
83
84
85  /* Initialize input "vector" from "buffer"  */
86  TEST_MACRO_ALL_VARIANTS_2_5(VLOAD, vector, buffer);
87  VLOAD(vector, buffer, , float, f, 32, 2);
88  VLOAD(vector, buffer, q, float, f, 32, 4);
89#if defined(__ARM_FP16_FORMAT_IEEE) && ( ((__ARM_FP & 0x2) != 0) || ((__ARM_NEON_FP16_INTRINSICS & 1) != 0) )
90  VLOAD(vector, buffer, , float, f, 16, 4);
91  VLOAD(vector, buffer, q, float, f, 16, 8);
92#endif
93
94  /* The same result buffers are used multiple times, so output them
95     before overwriting them  */
96  fprintf(ref_file, "\n%s output:\n", TEST_MSG);
97  fprintf(gcc_tests_file, "\n%s output:\n", TEST_MSG);
98
99  /* vreinterpret_s8_xx */
100  TEST_VREINTERPRET(, int, s, 8, 8, int, s, 16, 4);
101  TEST_VREINTERPRET(, int, s, 8, 8, int, s, 32, 2);
102  TEST_VREINTERPRET(, int, s, 8, 8, int, s, 64, 1);
103  TEST_VREINTERPRET(, int, s, 8, 8, uint, u, 8, 8);
104  TEST_VREINTERPRET(, int, s, 8, 8, uint, u, 16, 4);
105  TEST_VREINTERPRET(, int, s, 8, 8, uint, u, 32, 2);
106  TEST_VREINTERPRET(, int, s, 8, 8, uint, u, 64, 1);
107  TEST_VREINTERPRET(, int, s, 8, 8, poly, p, 8, 8);
108  TEST_VREINTERPRET(, int, s, 8, 8, poly, p, 16, 4);
109
110  /* vreinterpret_s16_xx */
111  TEST_VREINTERPRET(, int, s, 16, 4, int, s, 8, 8);
112  TEST_VREINTERPRET(, int, s, 16, 4, int, s, 32, 2);
113  TEST_VREINTERPRET(, int, s, 16, 4, int, s, 64, 1);
114  TEST_VREINTERPRET(, int, s, 16, 4, uint, u, 8, 8);
115  TEST_VREINTERPRET(, int, s, 16, 4, uint, u, 16, 4);
116  TEST_VREINTERPRET(, int, s, 16, 4, uint, u, 32, 2);
117  TEST_VREINTERPRET(, int, s, 16, 4, uint, u, 64, 1);
118  TEST_VREINTERPRET(, int, s, 16, 4, poly, p, 8, 8);
119  TEST_VREINTERPRET(, int, s, 16, 4, poly, p, 16, 4);
120
121  /* vreinterpret_s32_xx */
122  TEST_VREINTERPRET(, int, s, 32, 2, int, s, 8, 8);
123  TEST_VREINTERPRET(, int, s, 32, 2, int, s, 16, 4);
124  TEST_VREINTERPRET(, int, s, 32, 2, int, s, 64, 1);
125  TEST_VREINTERPRET(, int, s, 32, 2, uint, u, 8, 8);
126  TEST_VREINTERPRET(, int, s, 32, 2, uint, u, 16, 4);
127  TEST_VREINTERPRET(, int, s, 32, 2, uint, u, 32, 2);
128  TEST_VREINTERPRET(, int, s, 32, 2, uint, u, 64, 1);
129  TEST_VREINTERPRET(, int, s, 32, 2, poly, p, 8, 8);
130  TEST_VREINTERPRET(, int, s, 32, 2, poly, p, 16, 4);
131
132  /* vreinterpret_s64_xx */
133  TEST_VREINTERPRET(, int, s, 64, 1, int, s, 8, 8);
134  TEST_VREINTERPRET(, int, s, 64, 1, int, s, 16, 4);
135  TEST_VREINTERPRET(, int, s, 64, 1, int, s, 32, 2);
136  TEST_VREINTERPRET(, int, s, 64, 1, uint, u, 8, 8);
137  TEST_VREINTERPRET(, int, s, 64, 1, uint, u, 16, 4);
138  TEST_VREINTERPRET(, int, s, 64, 1, uint, u, 32, 2);
139  TEST_VREINTERPRET(, int, s, 64, 1, uint, u, 64, 1);
140  TEST_VREINTERPRET(, int, s, 64, 1, poly, p, 8, 8);
141  TEST_VREINTERPRET(, int, s, 64, 1, poly, p, 16, 4);
142
143  /* vreinterpret_u8_xx */
144  TEST_VREINTERPRET(, uint, u, 8, 8, int, s, 8, 8);
145  TEST_VREINTERPRET(, uint, u, 8, 8, int, s, 16, 4);
146  TEST_VREINTERPRET(, uint, u, 8, 8, int, s, 32, 2);
147  TEST_VREINTERPRET(, uint, u, 8, 8, int, s, 64, 1);
148  TEST_VREINTERPRET(, uint, u, 8, 8, uint, u, 16, 4);
149  TEST_VREINTERPRET(, uint, u, 8, 8, uint, u, 32, 2);
150  TEST_VREINTERPRET(, uint, u, 8, 8, uint, u, 64, 1);
151  TEST_VREINTERPRET(, uint, u, 8, 8, poly, p, 8, 8);
152  TEST_VREINTERPRET(, uint, u, 8, 8, poly, p, 16, 4);
153
154  /* vreinterpret_u16_xx */
155  TEST_VREINTERPRET(, uint, u, 16, 4, int, s, 8, 8);
156  TEST_VREINTERPRET(, uint, u, 16, 4, int, s, 16, 4);
157  TEST_VREINTERPRET(, uint, u, 16, 4, int, s, 32, 2);
158  TEST_VREINTERPRET(, uint, u, 16, 4, int, s, 64, 1);
159  TEST_VREINTERPRET(, uint, u, 16, 4, uint, u, 8, 8);
160  TEST_VREINTERPRET(, uint, u, 16, 4, uint, u, 32, 2);
161  TEST_VREINTERPRET(, uint, u, 16, 4, uint, u, 64, 1);
162  TEST_VREINTERPRET(, uint, u, 16, 4, poly, p, 8, 8);
163  TEST_VREINTERPRET(, uint, u, 16, 4, poly, p, 16, 4);
164
165  /* vreinterpret_u32_xx */
166  TEST_VREINTERPRET(, uint, u, 32, 2, int, s, 8, 8);
167  TEST_VREINTERPRET(, uint, u, 32, 2, int, s, 16, 4);
168  TEST_VREINTERPRET(, uint, u, 32, 2, int, s, 32, 2);
169  TEST_VREINTERPRET(, uint, u, 32, 2, int, s, 64, 1);
170  TEST_VREINTERPRET(, uint, u, 32, 2, uint, u, 8, 8);
171  TEST_VREINTERPRET(, uint, u, 32, 2, uint, u, 16, 4);
172  TEST_VREINTERPRET(, uint, u, 32, 2, uint, u, 64, 1);
173  TEST_VREINTERPRET(, uint, u, 32, 2, poly, p, 8, 8);
174  TEST_VREINTERPRET(, uint, u, 32, 2, poly, p, 16, 4);
175
176  /* vreinterpret_u64_xx */
177  TEST_VREINTERPRET(, uint, u, 64, 1, int, s, 8, 8);
178  TEST_VREINTERPRET(, uint, u, 64, 1, int, s, 16, 4);
179  TEST_VREINTERPRET(, uint, u, 64, 1, int, s, 32, 2);
180  TEST_VREINTERPRET(, uint, u, 64, 1, int, s, 64, 1);
181  TEST_VREINTERPRET(, uint, u, 64, 1, uint, u, 8, 8);
182  TEST_VREINTERPRET(, uint, u, 64, 1, uint, u, 16, 4);
183  TEST_VREINTERPRET(, uint, u, 64, 1, uint, u, 32, 2);
184  TEST_VREINTERPRET(, uint, u, 64, 1, poly, p, 8, 8);
185  TEST_VREINTERPRET(, uint, u, 64, 1, poly, p, 16, 4);
186
187  /* vreinterpret_p8_xx */
188  TEST_VREINTERPRET_POLY(, poly, p, 8, 8, int, s, 8, 8);
189  TEST_VREINTERPRET_POLY(, poly, p, 8, 8, int, s, 16, 4);
190  TEST_VREINTERPRET_POLY(, poly, p, 8, 8, int, s, 32, 2);
191  TEST_VREINTERPRET_POLY(, poly, p, 8, 8, int, s, 64, 1);
192  TEST_VREINTERPRET_POLY(, poly, p, 8, 8, uint, u, 8, 8);
193  TEST_VREINTERPRET_POLY(, poly, p, 8, 8, uint, u, 16, 4);
194  TEST_VREINTERPRET_POLY(, poly, p, 8, 8, uint, u, 32, 2);
195  TEST_VREINTERPRET_POLY(, poly, p, 8, 8, uint, u, 64, 1);
196  TEST_VREINTERPRET_POLY(, poly, p, 8, 8, poly, p, 16, 4);
197
198  /* vreinterpret_p16_xx */
199  TEST_VREINTERPRET_POLY(, poly, p, 16, 4, int, s, 8, 8);
200  TEST_VREINTERPRET_POLY(, poly, p, 16, 4, int, s, 16, 4);
201  TEST_VREINTERPRET_POLY(, poly, p, 16, 4, int, s, 32, 2);
202  TEST_VREINTERPRET_POLY(, poly, p, 16, 4, int, s, 64, 1);
203  TEST_VREINTERPRET_POLY(, poly, p, 16, 4, uint, u, 8, 8);
204  TEST_VREINTERPRET_POLY(, poly, p, 16, 4, uint, u, 16, 4);
205  TEST_VREINTERPRET_POLY(, poly, p, 16, 4, uint, u, 32, 2);
206  TEST_VREINTERPRET_POLY(, poly, p, 16, 4, uint, u, 64, 1);
207  TEST_VREINTERPRET_POLY(, poly, p, 16, 4, poly, p, 8, 8);
208
209  /* vreinterpretq_s8_xx */
210  TEST_VREINTERPRET(q, int, s, 8, 16, int, s, 16, 8);
211  TEST_VREINTERPRET(q, int, s, 8, 16, int, s, 32, 4);
212  TEST_VREINTERPRET(q, int, s, 8, 16, int, s, 64, 2);
213  TEST_VREINTERPRET(q, int, s, 8, 16, uint, u, 8, 16);
214  TEST_VREINTERPRET(q, int, s, 8, 16, uint, u, 16, 8);
215  TEST_VREINTERPRET(q, int, s, 8, 16, uint, u, 32, 4);
216  TEST_VREINTERPRET(q, int, s, 8, 16, uint, u, 64, 2);
217  TEST_VREINTERPRET(q, int, s, 8, 16, poly, p, 8, 16);
218  TEST_VREINTERPRET(q, int, s, 8, 16, poly, p, 16, 8);
219
220  /* vreinterpretq_s16_xx */
221  TEST_VREINTERPRET(q, int, s, 16, 8, int, s, 8, 16);
222  TEST_VREINTERPRET(q, int, s, 16, 8, int, s, 32, 4);
223  TEST_VREINTERPRET(q, int, s, 16, 8, int, s, 64, 2);
224  TEST_VREINTERPRET(q, int, s, 16, 8, uint, u, 8, 16);
225  TEST_VREINTERPRET(q, int, s, 16, 8, uint, u, 16, 8);
226  TEST_VREINTERPRET(q, int, s, 16, 8, uint, u, 32, 4);
227  TEST_VREINTERPRET(q, int, s, 16, 8, uint, u, 64, 2);
228  TEST_VREINTERPRET(q, int, s, 16, 8, poly, p, 8, 16);
229  TEST_VREINTERPRET(q, int, s, 16, 8, poly, p, 16, 8);
230
231  /* vreinterpretq_s32_xx */
232  TEST_VREINTERPRET(q, int, s, 32, 4, int, s, 8, 16);
233  TEST_VREINTERPRET(q, int, s, 32, 4, int, s, 16, 8);
234  TEST_VREINTERPRET(q, int, s, 32, 4, int, s, 64, 2);
235  TEST_VREINTERPRET(q, int, s, 32, 4, uint, u, 8, 16);
236  TEST_VREINTERPRET(q, int, s, 32, 4, uint, u, 16, 8);
237  TEST_VREINTERPRET(q, int, s, 32, 4, uint, u, 32, 4);
238  TEST_VREINTERPRET(q, int, s, 32, 4, uint, u, 64, 2);
239  TEST_VREINTERPRET(q, int, s, 32, 4, poly, p, 8, 16);
240  TEST_VREINTERPRET(q, int, s, 32, 4, poly, p, 16, 8);
241
242  /* vreinterpretq_s64_xx */
243  TEST_VREINTERPRET(q, int, s, 64, 2, int, s, 8, 16);
244  TEST_VREINTERPRET(q, int, s, 64, 2, int, s, 16, 8);
245  TEST_VREINTERPRET(q, int, s, 64, 2, int, s, 32, 4);
246  TEST_VREINTERPRET(q, int, s, 64, 2, uint, u, 8, 16);
247  TEST_VREINTERPRET(q, int, s, 64, 2, uint, u, 16, 8);
248  TEST_VREINTERPRET(q, int, s, 64, 2, uint, u, 32, 4);
249  TEST_VREINTERPRET(q, int, s, 64, 2, uint, u, 64, 2);
250  TEST_VREINTERPRET(q, int, s, 64, 2, poly, p, 8, 16);
251  TEST_VREINTERPRET(q, int, s, 64, 2, poly, p, 16, 8);
252
253  /* vreinterpretq_u16_xx */
254  TEST_VREINTERPRET(q, uint, u, 16, 8, int, s, 8, 16);
255  TEST_VREINTERPRET(q, uint, u, 16, 8, int, s, 16, 8);
256  TEST_VREINTERPRET(q, uint, u, 16, 8, int, s, 32, 4);
257  TEST_VREINTERPRET(q, uint, u, 16, 8, int, s, 64, 2);
258  TEST_VREINTERPRET(q, uint, u, 16, 8, uint, u, 8, 16);
259  TEST_VREINTERPRET(q, uint, u, 16, 8, uint, u, 32, 4);
260  TEST_VREINTERPRET(q, uint, u, 16, 8, uint, u, 64, 2);
261  TEST_VREINTERPRET(q, uint, u, 16, 8, poly, p, 8, 16);
262  TEST_VREINTERPRET(q, uint, u, 16, 8, poly, p, 16, 8);
263
264  /* vreinterpretq_u32_xx */
265  TEST_VREINTERPRET(q, uint, u, 32, 4, int, s, 8, 16);
266  TEST_VREINTERPRET(q, uint, u, 32, 4, int, s, 16, 8);
267  TEST_VREINTERPRET(q, uint, u, 32, 4, int, s, 32, 4);
268  TEST_VREINTERPRET(q, uint, u, 32, 4, int, s, 64, 2);
269  TEST_VREINTERPRET(q, uint, u, 32, 4, uint, u, 8, 16);
270  TEST_VREINTERPRET(q, uint, u, 32, 4, uint, u, 16, 8);
271  TEST_VREINTERPRET(q, uint, u, 32, 4, uint, u, 64, 2);
272  TEST_VREINTERPRET(q, uint, u, 32, 4, poly, p, 8, 16);
273  TEST_VREINTERPRET(q, uint, u, 32, 4, poly, p, 16, 8);
274
275  /* vreinterpretq_u64_xx */
276  TEST_VREINTERPRET(q, uint, u, 64, 2, int, s, 8, 16);
277  TEST_VREINTERPRET(q, uint, u, 64, 2, int, s, 16, 8);
278  TEST_VREINTERPRET(q, uint, u, 64, 2, int, s, 32, 4);
279  TEST_VREINTERPRET(q, uint, u, 64, 2, int, s, 64, 2);
280  TEST_VREINTERPRET(q, uint, u, 64, 2, uint, u, 8, 16);
281  TEST_VREINTERPRET(q, uint, u, 64, 2, uint, u, 16, 8);
282  TEST_VREINTERPRET(q, uint, u, 64, 2, uint, u, 32, 4);
283  TEST_VREINTERPRET(q, uint, u, 64, 2, poly, p, 8, 16);
284  TEST_VREINTERPRET(q, uint, u, 64, 2, poly, p, 16, 8);
285
286  /* vreinterpretq_u8_xx */
287  TEST_VREINTERPRET(q, uint, u, 8, 16, int, s, 8, 16);
288  TEST_VREINTERPRET(q, uint, u, 8, 16, int, s, 16, 8);
289  TEST_VREINTERPRET(q, uint, u, 8, 16, int, s, 32, 4);
290  TEST_VREINTERPRET(q, uint, u, 8, 16, int, s, 64, 2);
291  TEST_VREINTERPRET(q, uint, u, 8, 16, uint, u, 16, 8);
292  TEST_VREINTERPRET(q, uint, u, 8, 16, uint, u, 32, 4);
293  TEST_VREINTERPRET(q, uint, u, 8, 16, uint, u, 64, 2);
294  TEST_VREINTERPRET(q, uint, u, 8, 16, poly, p, 8, 16);
295  TEST_VREINTERPRET(q, uint, u, 8, 16, poly, p, 16, 8);
296
297  /* vreinterpret_f32_xx */
298  TEST_VREINTERPRET_FP(, float, f, 32, 2, int, s, 8, 8);
299  TEST_VREINTERPRET_FP(, float, f, 32, 2, int, s, 16, 4);
300  TEST_VREINTERPRET_FP(, float, f, 32, 2, int, s, 32, 2);
301  TEST_VREINTERPRET_FP(, float, f, 32, 2, int, s, 64, 1);
302  TEST_VREINTERPRET_FP(, float, f, 32, 2, uint, u, 8, 8);
303  TEST_VREINTERPRET_FP(, float, f, 32, 2, uint, u, 16, 4);
304  TEST_VREINTERPRET_FP(, float, f, 32, 2, uint, u, 32, 2);
305  TEST_VREINTERPRET_FP(, float, f, 32, 2, uint, u, 64, 1);
306  TEST_VREINTERPRET_FP(, float, f, 32, 2, poly, p, 8, 8);
307  TEST_VREINTERPRET_FP(, float, f, 32, 2, poly, p, 16, 4);
308
309  /* vreinterpretq_f32_xx */
310  TEST_VREINTERPRET_FP(q, float, f, 32, 4, int, s, 8, 16);
311  TEST_VREINTERPRET_FP(q, float, f, 32, 4, int, s, 16, 8);
312  TEST_VREINTERPRET_FP(q, float, f, 32, 4, int, s, 32, 4);
313  TEST_VREINTERPRET_FP(q, float, f, 32, 4, int, s, 64, 2);
314  TEST_VREINTERPRET_FP(q, float, f, 32, 4, uint, u, 8, 16);
315  TEST_VREINTERPRET_FP(q, float, f, 32, 4, uint, u, 16, 8);
316  TEST_VREINTERPRET_FP(q, float, f, 32, 4, uint, u, 32, 4);
317  TEST_VREINTERPRET_FP(q, float, f, 32, 4, uint, u, 64, 2);
318  TEST_VREINTERPRET_FP(q, float, f, 32, 4, poly, p, 8, 16);
319  TEST_VREINTERPRET_FP(q, float, f, 32, 4, poly, p, 16, 8);
320
321  /* vreinterpret_xx_f32 */
322  TEST_VREINTERPRET(, int, s, 8, 8, float, f, 32, 2);
323  TEST_VREINTERPRET(, int, s, 16, 4, float, f, 32, 2);
324  TEST_VREINTERPRET(, int, s, 32, 2, float, f, 32, 2);
325  TEST_VREINTERPRET(, int, s, 64, 1, float, f, 32, 2);
326  TEST_VREINTERPRET(, uint, u, 8, 8, float, f, 32, 2);
327  TEST_VREINTERPRET(, uint, u, 16, 4, float, f, 32, 2);
328  TEST_VREINTERPRET(, uint, u, 32, 2, float, f, 32, 2);
329  TEST_VREINTERPRET(, uint, u, 64, 1, float, f, 32, 2);
330  TEST_VREINTERPRET_POLY(, poly, p, 8, 8, float, f, 32, 2);
331  TEST_VREINTERPRET_POLY(, poly, p, 16, 4, float, f, 32, 2);
332
333  /* vreinterpretq_xx_f32 */
334  TEST_VREINTERPRET(q, int, s, 8, 16, float, f, 32, 4);
335  TEST_VREINTERPRET(q, int, s, 16, 8, float, f, 32, 4);
336  TEST_VREINTERPRET(q, int, s, 32, 4, float, f, 32, 4);
337  TEST_VREINTERPRET(q, int, s, 64, 2, float, f, 32, 4);
338  TEST_VREINTERPRET(q, uint, u, 8, 16, float, f, 32, 4);
339  TEST_VREINTERPRET(q, uint, u, 16, 8, float, f, 32, 4);
340  TEST_VREINTERPRET(q, uint, u, 32, 4, float, f, 32, 4);
341  TEST_VREINTERPRET(q, uint, u, 64, 2, float, f, 32, 4);
342  TEST_VREINTERPRET_POLY(q, poly, p, 8, 16, float, f, 32, 4);
343  TEST_VREINTERPRET_POLY(q, poly, p, 16, 8, float, f, 32, 4);
344
345#if defined(__ARM_FP16_FORMAT_IEEE) && ( ((__ARM_FP & 0x2) != 0) || ((__ARM_NEON_FP16_INTRINSICS & 1) != 0) )
346  /* vreinterpret_f16_xx */
347  TEST_VREINTERPRET_FP16(, float, f, 16, 4, int, s, 8, 8);
348  TEST_VREINTERPRET_FP16(, float, f, 16, 4, int, s, 16, 4);
349  TEST_VREINTERPRET_FP16(, float, f, 16, 4, int, s, 32, 2);
350  TEST_VREINTERPRET_FP16(, float, f, 16, 4, int, s, 64, 1);
351  TEST_VREINTERPRET_FP16(, float, f, 16, 4, uint, u, 8, 8);
352  TEST_VREINTERPRET_FP16(, float, f, 16, 4, uint, u, 16, 4);
353  TEST_VREINTERPRET_FP16(, float, f, 16, 4, uint, u, 32, 2);
354  TEST_VREINTERPRET_FP16(, float, f, 16, 4, uint, u, 64, 1);
355  TEST_VREINTERPRET_FP16(, float, f, 16, 4, poly, p, 8, 8);
356  TEST_VREINTERPRET_FP16(, float, f, 16, 4, poly, p, 16, 4);
357  TEST_VREINTERPRET_FP16(, float, f, 16, 4, float, f, 32, 2);
358
359  /* vreinterpretq_f16_xx */
360  TEST_VREINTERPRET_FP16(q, float, f, 16, 8, int, s, 8, 16);
361  TEST_VREINTERPRET_FP16(q, float, f, 16, 8, int, s, 16, 8);
362  TEST_VREINTERPRET_FP16(q, float, f, 16, 8, int, s, 32, 4);
363  TEST_VREINTERPRET_FP16(q, float, f, 16, 8, int, s, 64, 2);
364  TEST_VREINTERPRET_FP16(q, float, f, 16, 8, uint, u, 8, 16);
365  TEST_VREINTERPRET_FP16(q, float, f, 16, 8, uint, u, 16, 8);
366  TEST_VREINTERPRET_FP16(q, float, f, 16, 8, uint, u, 32, 4);
367  TEST_VREINTERPRET_FP16(q, float, f, 16, 8, uint, u, 64, 2);
368  TEST_VREINTERPRET_FP16(q, float, f, 16, 8, poly, p, 8, 16);
369  TEST_VREINTERPRET_FP16(q, float, f, 16, 8, poly, p, 16, 8);
370  TEST_VREINTERPRET_FP16(q, float, f, 16, 8, float, f, 32, 4);
371
372  /* vreinterpret_xx_f16 */
373  TEST_VREINTERPRET(, int, s, 8, 8, float, f, 16, 4);
374  TEST_VREINTERPRET(, int, s, 16, 4, float, f, 16, 4);
375  TEST_VREINTERPRET(, int, s, 32, 2, float, f, 16, 4);
376  TEST_VREINTERPRET(, int, s, 64, 1, float, f, 16, 4);
377  TEST_VREINTERPRET(, uint, u, 8, 8, float, f, 16, 4);
378  TEST_VREINTERPRET(, uint, u, 16, 4, float, f, 16, 4);
379  TEST_VREINTERPRET(, uint, u, 32, 2, float, f, 16, 4);
380  TEST_VREINTERPRET(, uint, u, 64, 1, float, f, 16, 4);
381  TEST_VREINTERPRET_POLY(, poly, p, 8, 8, float, f, 16, 4);
382  TEST_VREINTERPRET_POLY(, poly, p, 16, 4, float, f, 16, 4);
383  TEST_VREINTERPRET_FP(, float, f, 32, 2, float, f, 16, 4);
384
385  /* vreinterpretq_xx_f16 */
386  TEST_VREINTERPRET(q, int, s, 8, 16, float, f, 16, 8);
387  TEST_VREINTERPRET(q, int, s, 16, 8, float, f, 16, 8);
388  TEST_VREINTERPRET(q, int, s, 32, 4, float, f, 16, 8);
389  TEST_VREINTERPRET(q, int, s, 64, 2, float, f, 16, 8);
390  TEST_VREINTERPRET(q, uint, u, 8, 16, float, f, 16, 8);
391  TEST_VREINTERPRET(q, uint, u, 16, 8, float, f, 16, 8);
392  TEST_VREINTERPRET(q, uint, u, 32, 4, float, f, 16, 8);
393  TEST_VREINTERPRET(q, uint, u, 64, 2, float, f, 16, 8);
394  TEST_VREINTERPRET_POLY(q, poly, p, 8, 16, float, f, 16, 8);
395  TEST_VREINTERPRET_POLY(q, poly, p, 16, 8, float, f, 16, 8);
396  TEST_VREINTERPRET_FP(q, float, f, 32, 4, float, f, 16, 8);
397#endif
398}
399