2018-03-08 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gcc.target / mips / loongson-simd.c
blobf263b4393e93044a0d823276120ed4985f61168c
1 /* Test cases for ST Microelectronics Loongson-2E/2F SIMD intrinsics.
2 Copyright (C) 2008 Free Software Foundation, Inc.
3 Contributed by CodeSourcery.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
21 /* { dg-do run { target { ! { mips*-mti-linux* mips*-img-linux* } } } } */
22 /* loongson.h does not handle or check for MIPS16ness or
23 microMIPSness. There doesn't seem any good reason for it to, given
24 that the Loongson processors do not support either. The effective target
25 mips_nanlegacy is required for a toolchain without the legacy NaN support
26 because inclusion of some system headers e.g. stdint.h will fail due to not
27 finding stubs-o32_hard.h. */
28 /* { dg-require-effective-target mips_nanlegacy } */
29 /* { dg-options "isa=loongson -mhard-float -mno-micromips -mno-mips16 -flax-vector-conversions (REQUIRES_STDLIB)" } */
31 #include "loongson.h"
32 #include <stdio.h>
33 #include <stdint.h>
34 #include <assert.h>
35 #include <limits.h>
37 typedef union { int32x2_t v; int32_t a[2]; } int32x2_encap_t;
38 typedef union { int16x4_t v; int16_t a[4]; } int16x4_encap_t;
39 typedef union { int8x8_t v; int8_t a[8]; } int8x8_encap_t;
40 typedef union { uint32x2_t v; uint32_t a[2]; } uint32x2_encap_t;
41 typedef union { uint16x4_t v; uint16_t a[4]; } uint16x4_encap_t;
42 typedef union { uint8x8_t v; uint8_t a[8]; } uint8x8_encap_t;
44 #define UINT16x4_MAX USHRT_MAX
45 #define UINT8x8_MAX UCHAR_MAX
46 #define INT8x8_MAX SCHAR_MAX
47 #define INT16x4_MAX SHRT_MAX
48 #define INT32x2_MAX INT_MAX
50 static void test_packsswh (void)
52 int32x2_encap_t s, t;
53 int16x4_encap_t r;
54 s.a[0] = INT16x4_MAX - 2;
55 s.a[1] = INT16x4_MAX - 1;
56 t.a[0] = INT16x4_MAX;
57 t.a[1] = INT16x4_MAX + 1;
58 r.v = packsswh (s.v, t.v);
59 assert (r.a[0] == INT16x4_MAX - 2);
60 assert (r.a[1] == INT16x4_MAX - 1);
61 assert (r.a[2] == INT16x4_MAX);
62 assert (r.a[3] == INT16x4_MAX);
65 static void test_packsshb (void)
67 int16x4_encap_t s, t;
68 int8x8_encap_t r;
69 s.a[0] = INT8x8_MAX - 6;
70 s.a[1] = INT8x8_MAX - 5;
71 s.a[2] = INT8x8_MAX - 4;
72 s.a[3] = INT8x8_MAX - 3;
73 t.a[0] = INT8x8_MAX - 2;
74 t.a[1] = INT8x8_MAX - 1;
75 t.a[2] = INT8x8_MAX;
76 t.a[3] = INT8x8_MAX + 1;
77 r.v = packsshb (s.v, t.v);
78 assert (r.a[0] == INT8x8_MAX - 6);
79 assert (r.a[1] == INT8x8_MAX - 5);
80 assert (r.a[2] == INT8x8_MAX - 4);
81 assert (r.a[3] == INT8x8_MAX - 3);
82 assert (r.a[4] == INT8x8_MAX - 2);
83 assert (r.a[5] == INT8x8_MAX - 1);
84 assert (r.a[6] == INT8x8_MAX);
85 assert (r.a[7] == INT8x8_MAX);
88 static void test_packushb (void)
90 uint16x4_encap_t s, t;
91 uint8x8_encap_t r;
92 s.a[0] = UINT8x8_MAX - 6;
93 s.a[1] = UINT8x8_MAX - 5;
94 s.a[2] = UINT8x8_MAX - 4;
95 s.a[3] = UINT8x8_MAX - 3;
96 t.a[0] = UINT8x8_MAX - 2;
97 t.a[1] = UINT8x8_MAX - 1;
98 t.a[2] = UINT8x8_MAX;
99 t.a[3] = UINT8x8_MAX + 1;
100 r.v = packushb (s.v, t.v);
101 assert (r.a[0] == UINT8x8_MAX - 6);
102 assert (r.a[1] == UINT8x8_MAX - 5);
103 assert (r.a[2] == UINT8x8_MAX - 4);
104 assert (r.a[3] == UINT8x8_MAX - 3);
105 assert (r.a[4] == UINT8x8_MAX - 2);
106 assert (r.a[5] == UINT8x8_MAX - 1);
107 assert (r.a[6] == UINT8x8_MAX);
108 assert (r.a[7] == UINT8x8_MAX);
111 static void test_paddw_u (void)
113 uint32x2_encap_t s, t;
114 uint32x2_encap_t r;
115 s.a[0] = 1;
116 s.a[1] = 2;
117 t.a[0] = 3;
118 t.a[1] = 4;
119 r.v = paddw_u (s.v, t.v);
120 assert (r.a[0] == 4);
121 assert (r.a[1] == 6);
124 static void test_paddw_s (void)
126 int32x2_encap_t s, t;
127 int32x2_encap_t r;
128 s.a[0] = -2;
129 s.a[1] = -1;
130 t.a[0] = 3;
131 t.a[1] = 4;
132 r.v = paddw_s (s.v, t.v);
133 assert (r.a[0] == 1);
134 assert (r.a[1] == 3);
137 static void test_paddh_u (void)
139 uint16x4_encap_t s, t;
140 uint16x4_encap_t r;
141 s.a[0] = 1;
142 s.a[1] = 2;
143 s.a[2] = 3;
144 s.a[3] = 4;
145 t.a[0] = 5;
146 t.a[1] = 6;
147 t.a[2] = 7;
148 t.a[3] = 8;
149 r.v = paddh_u (s.v, t.v);
150 assert (r.a[0] == 6);
151 assert (r.a[1] == 8);
152 assert (r.a[2] == 10);
153 assert (r.a[3] == 12);
156 static void test_paddh_s (void)
158 int16x4_encap_t s, t;
159 int16x4_encap_t r;
160 s.a[0] = -10;
161 s.a[1] = -20;
162 s.a[2] = -30;
163 s.a[3] = -40;
164 t.a[0] = 1;
165 t.a[1] = 2;
166 t.a[2] = 3;
167 t.a[3] = 4;
168 r.v = paddh_s (s.v, t.v);
169 assert (r.a[0] == -9);
170 assert (r.a[1] == -18);
171 assert (r.a[2] == -27);
172 assert (r.a[3] == -36);
175 static void test_paddb_u (void)
177 uint8x8_encap_t s, t;
178 uint8x8_encap_t r;
179 s.a[0] = 1;
180 s.a[1] = 2;
181 s.a[2] = 3;
182 s.a[3] = 4;
183 s.a[4] = 5;
184 s.a[5] = 6;
185 s.a[6] = 7;
186 s.a[7] = 8;
187 t.a[0] = 9;
188 t.a[1] = 10;
189 t.a[2] = 11;
190 t.a[3] = 12;
191 t.a[4] = 13;
192 t.a[5] = 14;
193 t.a[6] = 15;
194 t.a[7] = 16;
195 r.v = paddb_u (s.v, t.v);
196 assert (r.a[0] == 10);
197 assert (r.a[1] == 12);
198 assert (r.a[2] == 14);
199 assert (r.a[3] == 16);
200 assert (r.a[4] == 18);
201 assert (r.a[5] == 20);
202 assert (r.a[6] == 22);
203 assert (r.a[7] == 24);
206 static void test_paddb_s (void)
208 int8x8_encap_t s, t;
209 int8x8_encap_t r;
210 s.a[0] = -10;
211 s.a[1] = -20;
212 s.a[2] = -30;
213 s.a[3] = -40;
214 s.a[4] = -50;
215 s.a[5] = -60;
216 s.a[6] = -70;
217 s.a[7] = -80;
218 t.a[0] = 1;
219 t.a[1] = 2;
220 t.a[2] = 3;
221 t.a[3] = 4;
222 t.a[4] = 5;
223 t.a[5] = 6;
224 t.a[6] = 7;
225 t.a[7] = 8;
226 r.v = paddb_s (s.v, t.v);
227 assert (r.a[0] == -9);
228 assert (r.a[1] == -18);
229 assert (r.a[2] == -27);
230 assert (r.a[3] == -36);
231 assert (r.a[4] == -45);
232 assert (r.a[5] == -54);
233 assert (r.a[6] == -63);
234 assert (r.a[7] == -72);
237 static void test_paddd_u (void)
239 uint64_t d = 123456;
240 uint64_t e = 789012;
241 uint64_t r;
242 r = paddd_u (d, e);
243 assert (r == 912468);
246 static void test_paddd_s (void)
248 int64_t d = 123456;
249 int64_t e = -789012;
250 int64_t r;
251 r = paddd_s (d, e);
252 assert (r == -665556);
255 static void test_paddsh (void)
257 int16x4_encap_t s, t;
258 int16x4_encap_t r;
259 s.a[0] = -1;
260 s.a[1] = 0;
261 s.a[2] = 1;
262 s.a[3] = 2;
263 t.a[0] = INT16x4_MAX;
264 t.a[1] = INT16x4_MAX;
265 t.a[2] = INT16x4_MAX;
266 t.a[3] = INT16x4_MAX;
267 r.v = paddsh (s.v, t.v);
268 assert (r.a[0] == INT16x4_MAX - 1);
269 assert (r.a[1] == INT16x4_MAX);
270 assert (r.a[2] == INT16x4_MAX);
271 assert (r.a[3] == INT16x4_MAX);
274 static void test_paddsb (void)
276 int8x8_encap_t s, t;
277 int8x8_encap_t r;
278 s.a[0] = -6;
279 s.a[1] = -5;
280 s.a[2] = -4;
281 s.a[3] = -3;
282 s.a[4] = -2;
283 s.a[5] = -1;
284 s.a[6] = 0;
285 s.a[7] = 1;
286 t.a[0] = INT8x8_MAX;
287 t.a[1] = INT8x8_MAX;
288 t.a[2] = INT8x8_MAX;
289 t.a[3] = INT8x8_MAX;
290 t.a[4] = INT8x8_MAX;
291 t.a[5] = INT8x8_MAX;
292 t.a[6] = INT8x8_MAX;
293 t.a[7] = INT8x8_MAX;
294 r.v = paddsb (s.v, t.v);
295 assert (r.a[0] == INT8x8_MAX - 6);
296 assert (r.a[1] == INT8x8_MAX - 5);
297 assert (r.a[2] == INT8x8_MAX - 4);
298 assert (r.a[3] == INT8x8_MAX - 3);
299 assert (r.a[4] == INT8x8_MAX - 2);
300 assert (r.a[5] == INT8x8_MAX - 1);
301 assert (r.a[6] == INT8x8_MAX);
302 assert (r.a[7] == INT8x8_MAX);
305 static void test_paddush (void)
307 uint16x4_encap_t s, t;
308 uint16x4_encap_t r;
309 s.a[0] = 0;
310 s.a[1] = 1;
311 s.a[2] = 0;
312 s.a[3] = 1;
313 t.a[0] = UINT16x4_MAX;
314 t.a[1] = UINT16x4_MAX;
315 t.a[2] = UINT16x4_MAX;
316 t.a[3] = UINT16x4_MAX;
317 r.v = paddush (s.v, t.v);
318 assert (r.a[0] == UINT16x4_MAX);
319 assert (r.a[1] == UINT16x4_MAX);
320 assert (r.a[2] == UINT16x4_MAX);
321 assert (r.a[3] == UINT16x4_MAX);
324 static void test_paddusb (void)
326 uint8x8_encap_t s, t;
327 uint8x8_encap_t r;
328 s.a[0] = 0;
329 s.a[1] = 1;
330 s.a[2] = 0;
331 s.a[3] = 1;
332 s.a[4] = 0;
333 s.a[5] = 1;
334 s.a[6] = 0;
335 s.a[7] = 1;
336 t.a[0] = UINT8x8_MAX;
337 t.a[1] = UINT8x8_MAX;
338 t.a[2] = UINT8x8_MAX;
339 t.a[3] = UINT8x8_MAX;
340 t.a[4] = UINT8x8_MAX;
341 t.a[5] = UINT8x8_MAX;
342 t.a[6] = UINT8x8_MAX;
343 t.a[7] = UINT8x8_MAX;
344 r.v = paddusb (s.v, t.v);
345 assert (r.a[0] == UINT8x8_MAX);
346 assert (r.a[1] == UINT8x8_MAX);
347 assert (r.a[2] == UINT8x8_MAX);
348 assert (r.a[3] == UINT8x8_MAX);
349 assert (r.a[4] == UINT8x8_MAX);
350 assert (r.a[5] == UINT8x8_MAX);
351 assert (r.a[6] == UINT8x8_MAX);
352 assert (r.a[7] == UINT8x8_MAX);
355 static void test_pandn_ud (void)
357 uint64_t d1 = 0x0000ffff0000ffffull;
358 uint64_t d2 = 0x0000ffff0000ffffull;
359 uint64_t r;
360 r = pandn_ud (d1, d2);
361 assert (r == 0);
364 static void test_pandn_sd (void)
366 int64_t d1 = (int64_t) 0x0000000000000000ull;
367 int64_t d2 = (int64_t) 0xfffffffffffffffeull;
368 int64_t r;
369 r = pandn_sd (d1, d2);
370 assert (r == -2);
373 static void test_pandn_uw (void)
375 uint32x2_encap_t s, t;
376 uint32x2_encap_t r;
377 s.a[0] = 0xffffffff;
378 s.a[1] = 0x00000000;
379 t.a[0] = 0x00000000;
380 t.a[1] = 0xffffffff;
381 r.v = pandn_uw (s.v, t.v);
382 assert (r.a[0] == 0x00000000);
383 assert (r.a[1] == 0xffffffff);
386 static void test_pandn_sw (void)
388 int32x2_encap_t s, t;
389 int32x2_encap_t r;
390 s.a[0] = 0xffffffff;
391 s.a[1] = 0x00000000;
392 t.a[0] = 0xffffffff;
393 t.a[1] = 0xfffffffe;
394 r.v = pandn_sw (s.v, t.v);
395 assert (r.a[0] == 0);
396 assert (r.a[1] == -2);
399 static void test_pandn_uh (void)
401 uint16x4_encap_t s, t;
402 uint16x4_encap_t r;
403 s.a[0] = 0xffff;
404 s.a[1] = 0x0000;
405 s.a[2] = 0xffff;
406 s.a[3] = 0x0000;
407 t.a[0] = 0x0000;
408 t.a[1] = 0xffff;
409 t.a[2] = 0x0000;
410 t.a[3] = 0xffff;
411 r.v = pandn_uh (s.v, t.v);
412 assert (r.a[0] == 0x0000);
413 assert (r.a[1] == 0xffff);
414 assert (r.a[2] == 0x0000);
415 assert (r.a[3] == 0xffff);
418 static void test_pandn_sh (void)
420 int16x4_encap_t s, t;
421 int16x4_encap_t r;
422 s.a[0] = 0xffff;
423 s.a[1] = 0x0000;
424 s.a[2] = 0xffff;
425 s.a[3] = 0x0000;
426 t.a[0] = 0xffff;
427 t.a[1] = 0xfffe;
428 t.a[2] = 0xffff;
429 t.a[3] = 0xfffe;
430 r.v = pandn_sh (s.v, t.v);
431 assert (r.a[0] == 0);
432 assert (r.a[1] == -2);
433 assert (r.a[2] == 0);
434 assert (r.a[3] == -2);
437 static void test_pandn_ub (void)
439 uint8x8_encap_t s, t;
440 uint8x8_encap_t r;
441 s.a[0] = 0xff;
442 s.a[1] = 0x00;
443 s.a[2] = 0xff;
444 s.a[3] = 0x00;
445 s.a[4] = 0xff;
446 s.a[5] = 0x00;
447 s.a[6] = 0xff;
448 s.a[7] = 0x00;
449 t.a[0] = 0x00;
450 t.a[1] = 0xff;
451 t.a[2] = 0x00;
452 t.a[3] = 0xff;
453 t.a[4] = 0x00;
454 t.a[5] = 0xff;
455 t.a[6] = 0x00;
456 t.a[7] = 0xff;
457 r.v = pandn_ub (s.v, t.v);
458 assert (r.a[0] == 0x00);
459 assert (r.a[1] == 0xff);
460 assert (r.a[2] == 0x00);
461 assert (r.a[3] == 0xff);
462 assert (r.a[4] == 0x00);
463 assert (r.a[5] == 0xff);
464 assert (r.a[6] == 0x00);
465 assert (r.a[7] == 0xff);
468 static void test_pandn_sb (void)
470 int8x8_encap_t s, t;
471 int8x8_encap_t r;
472 s.a[0] = 0xff;
473 s.a[1] = 0x00;
474 s.a[2] = 0xff;
475 s.a[3] = 0x00;
476 s.a[4] = 0xff;
477 s.a[5] = 0x00;
478 s.a[6] = 0xff;
479 s.a[7] = 0x00;
480 t.a[0] = 0xff;
481 t.a[1] = 0xfe;
482 t.a[2] = 0xff;
483 t.a[3] = 0xfe;
484 t.a[4] = 0xff;
485 t.a[5] = 0xfe;
486 t.a[6] = 0xff;
487 t.a[7] = 0xfe;
488 r.v = pandn_sb (s.v, t.v);
489 assert (r.a[0] == 0);
490 assert (r.a[1] == -2);
491 assert (r.a[2] == 0);
492 assert (r.a[3] == -2);
493 assert (r.a[4] == 0);
494 assert (r.a[5] == -2);
495 assert (r.a[6] == 0);
496 assert (r.a[7] == -2);
499 static void test_pavgh (void)
501 uint16x4_encap_t s, t;
502 uint16x4_encap_t r;
503 s.a[0] = 1;
504 s.a[1] = 2;
505 s.a[2] = 3;
506 s.a[3] = 4;
507 t.a[0] = 5;
508 t.a[1] = 6;
509 t.a[2] = 7;
510 t.a[3] = 8;
511 r.v = pavgh (s.v, t.v);
512 assert (r.a[0] == 3);
513 assert (r.a[1] == 4);
514 assert (r.a[2] == 5);
515 assert (r.a[3] == 6);
518 static void test_pavgb (void)
520 uint8x8_encap_t s, t;
521 uint8x8_encap_t r;
522 s.a[0] = 1;
523 s.a[1] = 2;
524 s.a[2] = 3;
525 s.a[3] = 4;
526 s.a[4] = 1;
527 s.a[5] = 2;
528 s.a[6] = 3;
529 s.a[7] = 4;
530 t.a[0] = 5;
531 t.a[1] = 6;
532 t.a[2] = 7;
533 t.a[3] = 8;
534 t.a[4] = 5;
535 t.a[5] = 6;
536 t.a[6] = 7;
537 t.a[7] = 8;
538 r.v = pavgb (s.v, t.v);
539 assert (r.a[0] == 3);
540 assert (r.a[1] == 4);
541 assert (r.a[2] == 5);
542 assert (r.a[3] == 6);
543 assert (r.a[4] == 3);
544 assert (r.a[5] == 4);
545 assert (r.a[6] == 5);
546 assert (r.a[7] == 6);
549 static void test_pcmpeqw_u (void)
551 uint32x2_encap_t s, t;
552 uint32x2_encap_t r;
553 s.a[0] = 42;
554 s.a[1] = 43;
555 t.a[0] = 43;
556 t.a[1] = 43;
557 r.v = pcmpeqw_u (s.v, t.v);
558 assert (r.a[0] == 0x00000000);
559 assert (r.a[1] == 0xffffffff);
562 static void test_pcmpeqh_u (void)
564 uint16x4_encap_t s, t;
565 uint16x4_encap_t r;
566 s.a[0] = 42;
567 s.a[1] = 43;
568 s.a[2] = 42;
569 s.a[3] = 43;
570 t.a[0] = 43;
571 t.a[1] = 43;
572 t.a[2] = 43;
573 t.a[3] = 43;
574 r.v = pcmpeqh_u (s.v, t.v);
575 assert (r.a[0] == 0x0000);
576 assert (r.a[1] == 0xffff);
577 assert (r.a[2] == 0x0000);
578 assert (r.a[3] == 0xffff);
581 static void test_pcmpeqb_u (void)
583 uint8x8_encap_t s, t;
584 uint8x8_encap_t r;
585 s.a[0] = 42;
586 s.a[1] = 43;
587 s.a[2] = 42;
588 s.a[3] = 43;
589 s.a[4] = 42;
590 s.a[5] = 43;
591 s.a[6] = 42;
592 s.a[7] = 43;
593 t.a[0] = 43;
594 t.a[1] = 43;
595 t.a[2] = 43;
596 t.a[3] = 43;
597 t.a[4] = 43;
598 t.a[5] = 43;
599 t.a[6] = 43;
600 t.a[7] = 43;
601 r.v = pcmpeqb_u (s.v, t.v);
602 assert (r.a[0] == 0x00);
603 assert (r.a[1] == 0xff);
604 assert (r.a[2] == 0x00);
605 assert (r.a[3] == 0xff);
606 assert (r.a[4] == 0x00);
607 assert (r.a[5] == 0xff);
608 assert (r.a[6] == 0x00);
609 assert (r.a[7] == 0xff);
612 static void test_pcmpeqw_s (void)
614 int32x2_encap_t s, t;
615 int32x2_encap_t r;
616 s.a[0] = -42;
617 s.a[1] = -42;
618 t.a[0] = 42;
619 t.a[1] = -42;
620 r.v = pcmpeqw_s (s.v, t.v);
621 assert (r.a[0] == 0);
622 assert (r.a[1] == -1);
625 static void test_pcmpeqh_s (void)
627 int16x4_encap_t s, t;
628 int16x4_encap_t r;
629 s.a[0] = -42;
630 s.a[1] = -42;
631 s.a[2] = -42;
632 s.a[3] = -42;
633 t.a[0] = 42;
634 t.a[1] = -42;
635 t.a[2] = 42;
636 t.a[3] = -42;
637 r.v = pcmpeqh_s (s.v, t.v);
638 assert (r.a[0] == 0);
639 assert (r.a[1] == -1);
640 assert (r.a[2] == 0);
641 assert (r.a[3] == -1);
644 static void test_pcmpeqb_s (void)
646 int8x8_encap_t s, t;
647 int8x8_encap_t r;
648 s.a[0] = -42;
649 s.a[1] = -42;
650 s.a[2] = -42;
651 s.a[3] = -42;
652 s.a[4] = -42;
653 s.a[5] = -42;
654 s.a[6] = -42;
655 s.a[7] = -42;
656 t.a[0] = 42;
657 t.a[1] = -42;
658 t.a[2] = 42;
659 t.a[3] = -42;
660 t.a[4] = 42;
661 t.a[5] = -42;
662 t.a[6] = 42;
663 t.a[7] = -42;
664 r.v = pcmpeqb_s (s.v, t.v);
665 assert (r.a[0] == 0);
666 assert (r.a[1] == -1);
667 assert (r.a[2] == 0);
668 assert (r.a[3] == -1);
669 assert (r.a[4] == 0);
670 assert (r.a[5] == -1);
671 assert (r.a[6] == 0);
672 assert (r.a[7] == -1);
675 static void test_pcmpgtw_u (void)
677 uint32x2_encap_t s, t;
678 uint32x2_encap_t r;
679 s.a[0] = 42;
680 s.a[1] = 43;
681 t.a[0] = 43;
682 t.a[1] = 42;
683 r.v = pcmpgtw_u (s.v, t.v);
684 assert (r.a[0] == 0x00000000);
685 assert (r.a[1] == 0xffffffff);
688 static void test_pcmpgth_u (void)
690 uint16x4_encap_t s, t;
691 uint16x4_encap_t r;
692 s.a[0] = 40;
693 s.a[1] = 41;
694 s.a[2] = 42;
695 s.a[3] = 43;
696 t.a[0] = 40;
697 t.a[1] = 41;
698 t.a[2] = 43;
699 t.a[3] = 42;
700 r.v = pcmpgth_u (s.v, t.v);
701 assert (r.a[0] == 0x0000);
702 assert (r.a[1] == 0x0000);
703 assert (r.a[2] == 0x0000);
704 assert (r.a[3] == 0xffff);
707 static void test_pcmpgtb_u (void)
709 uint8x8_encap_t s, t;
710 uint8x8_encap_t r;
711 s.a[0] = 40;
712 s.a[1] = 41;
713 s.a[2] = 42;
714 s.a[3] = 43;
715 s.a[4] = 44;
716 s.a[5] = 45;
717 s.a[6] = 46;
718 s.a[7] = 47;
719 t.a[0] = 48;
720 t.a[1] = 47;
721 t.a[2] = 46;
722 t.a[3] = 45;
723 t.a[4] = 44;
724 t.a[5] = 43;
725 t.a[6] = 42;
726 t.a[7] = 41;
727 r.v = pcmpgtb_u (s.v, t.v);
728 assert (r.a[0] == 0x00);
729 assert (r.a[1] == 0x00);
730 assert (r.a[2] == 0x00);
731 assert (r.a[3] == 0x00);
732 assert (r.a[4] == 0x00);
733 assert (r.a[5] == 0xff);
734 assert (r.a[6] == 0xff);
735 assert (r.a[7] == 0xff);
738 static void test_pcmpgtw_s (void)
740 int32x2_encap_t s, t;
741 int32x2_encap_t r;
742 s.a[0] = 42;
743 s.a[1] = -42;
744 t.a[0] = -42;
745 t.a[1] = -42;
746 r.v = pcmpgtw_s (s.v, t.v);
747 assert (r.a[0] == -1);
748 assert (r.a[1] == 0);
751 static void test_pcmpgth_s (void)
753 int16x4_encap_t s, t;
754 int16x4_encap_t r;
755 s.a[0] = -42;
756 s.a[1] = -42;
757 s.a[2] = -42;
758 s.a[3] = -42;
759 t.a[0] = 42;
760 t.a[1] = 43;
761 t.a[2] = 44;
762 t.a[3] = -43;
763 r.v = pcmpgth_s (s.v, t.v);
764 assert (r.a[0] == 0);
765 assert (r.a[1] == 0);
766 assert (r.a[2] == 0);
767 assert (r.a[3] == -1);
770 static void test_pcmpgtb_s (void)
772 int8x8_encap_t s, t;
773 int8x8_encap_t r;
774 s.a[0] = -42;
775 s.a[1] = -42;
776 s.a[2] = -42;
777 s.a[3] = -42;
778 s.a[4] = 42;
779 s.a[5] = 42;
780 s.a[6] = 42;
781 s.a[7] = 42;
782 t.a[0] = -45;
783 t.a[1] = -44;
784 t.a[2] = -43;
785 t.a[3] = -42;
786 t.a[4] = 42;
787 t.a[5] = 43;
788 t.a[6] = 41;
789 t.a[7] = 40;
790 r.v = pcmpgtb_s (s.v, t.v);
791 assert (r.a[0] == -1);
792 assert (r.a[1] == -1);
793 assert (r.a[2] == -1);
794 assert (r.a[3] == 0);
795 assert (r.a[4] == 0);
796 assert (r.a[5] == 0);
797 assert (r.a[6] == -1);
798 assert (r.a[7] == -1);
801 static void test_pextrh_u (void)
803 uint16x4_encap_t s;
804 uint16x4_encap_t r;
805 s.a[0] = 40;
806 s.a[1] = 41;
807 s.a[2] = 42;
808 s.a[3] = 43;
809 r.v = pextrh_u (s.v, 1);
810 assert (r.a[0] == 41);
811 assert (r.a[1] == 0);
812 assert (r.a[2] == 0);
813 assert (r.a[3] == 0);
816 static void test_pextrh_s (void)
818 int16x4_encap_t s;
819 int16x4_encap_t r;
820 s.a[0] = -40;
821 s.a[1] = -41;
822 s.a[2] = -42;
823 s.a[3] = -43;
824 r.v = pextrh_s (s.v, 2);
825 assert (r.a[0] == -42);
826 assert (r.a[1] == 0);
827 assert (r.a[2] == 0);
828 assert (r.a[3] == 0);
831 static void test_pinsrh_0123_u (void)
833 uint16x4_encap_t s, t;
834 uint16x4_encap_t r;
835 s.a[0] = 42;
836 s.a[1] = 0;
837 s.a[2] = 0;
838 s.a[3] = 0;
839 t.a[0] = 0;
840 t.a[1] = 0;
841 t.a[2] = 0;
842 t.a[3] = 0;
843 r.v = pinsrh_0_u (t.v, s.v);
844 r.v = pinsrh_1_u (r.v, s.v);
845 r.v = pinsrh_2_u (r.v, s.v);
846 r.v = pinsrh_3_u (r.v, s.v);
847 assert (r.a[0] == 42);
848 assert (r.a[1] == 42);
849 assert (r.a[2] == 42);
850 assert (r.a[3] == 42);
853 static void test_pinsrh_0123_s (void)
855 int16x4_encap_t s, t;
856 int16x4_encap_t r;
857 s.a[0] = -42;
858 s.a[1] = 0;
859 s.a[2] = 0;
860 s.a[3] = 0;
861 t.a[0] = 0;
862 t.a[1] = 0;
863 t.a[2] = 0;
864 t.a[3] = 0;
865 r.v = pinsrh_0_s (t.v, s.v);
866 r.v = pinsrh_1_s (r.v, s.v);
867 r.v = pinsrh_2_s (r.v, s.v);
868 r.v = pinsrh_3_s (r.v, s.v);
869 assert (r.a[0] == -42);
870 assert (r.a[1] == -42);
871 assert (r.a[2] == -42);
872 assert (r.a[3] == -42);
875 static void test_pmaddhw (void)
877 int16x4_encap_t s, t;
878 int32x2_encap_t r;
879 s.a[0] = -5;
880 s.a[1] = -4;
881 s.a[2] = -3;
882 s.a[3] = -2;
883 t.a[0] = 10;
884 t.a[1] = 11;
885 t.a[2] = 12;
886 t.a[3] = 13;
887 r.v = pmaddhw (s.v, t.v);
888 assert (r.a[0] == (-5*10 + -4*11));
889 assert (r.a[1] == (-3*12 + -2*13));
892 static void test_pmaxsh (void)
894 int16x4_encap_t s, t;
895 int16x4_encap_t r;
896 s.a[0] = -20;
897 s.a[1] = 40;
898 s.a[2] = -10;
899 s.a[3] = 50;
900 t.a[0] = 20;
901 t.a[1] = -40;
902 t.a[2] = 10;
903 t.a[3] = -50;
904 r.v = pmaxsh (s.v, t.v);
905 assert (r.a[0] == 20);
906 assert (r.a[1] == 40);
907 assert (r.a[2] == 10);
908 assert (r.a[3] == 50);
911 static void test_pmaxub (void)
913 uint8x8_encap_t s, t;
914 uint8x8_encap_t r;
915 s.a[0] = 10;
916 s.a[1] = 20;
917 s.a[2] = 30;
918 s.a[3] = 40;
919 s.a[4] = 50;
920 s.a[5] = 60;
921 s.a[6] = 70;
922 s.a[7] = 80;
923 t.a[0] = 80;
924 t.a[1] = 70;
925 t.a[2] = 60;
926 t.a[3] = 50;
927 t.a[4] = 40;
928 t.a[5] = 30;
929 t.a[6] = 20;
930 t.a[7] = 10;
931 r.v = pmaxub (s.v, t.v);
932 assert (r.a[0] == 80);
933 assert (r.a[1] == 70);
934 assert (r.a[2] == 60);
935 assert (r.a[3] == 50);
936 assert (r.a[4] == 50);
937 assert (r.a[5] == 60);
938 assert (r.a[6] == 70);
939 assert (r.a[7] == 80);
942 static void test_pminsh (void)
944 int16x4_encap_t s, t;
945 int16x4_encap_t r;
946 s.a[0] = -20;
947 s.a[1] = 40;
948 s.a[2] = -10;
949 s.a[3] = 50;
950 t.a[0] = 20;
951 t.a[1] = -40;
952 t.a[2] = 10;
953 t.a[3] = -50;
954 r.v = pminsh (s.v, t.v);
955 assert (r.a[0] == -20);
956 assert (r.a[1] == -40);
957 assert (r.a[2] == -10);
958 assert (r.a[3] == -50);
961 static void test_pminub (void)
963 uint8x8_encap_t s, t;
964 uint8x8_encap_t r;
965 s.a[0] = 10;
966 s.a[1] = 20;
967 s.a[2] = 30;
968 s.a[3] = 40;
969 s.a[4] = 50;
970 s.a[5] = 60;
971 s.a[6] = 70;
972 s.a[7] = 80;
973 t.a[0] = 80;
974 t.a[1] = 70;
975 t.a[2] = 60;
976 t.a[3] = 50;
977 t.a[4] = 40;
978 t.a[5] = 30;
979 t.a[6] = 20;
980 t.a[7] = 10;
981 r.v = pminub (s.v, t.v);
982 assert (r.a[0] == 10);
983 assert (r.a[1] == 20);
984 assert (r.a[2] == 30);
985 assert (r.a[3] == 40);
986 assert (r.a[4] == 40);
987 assert (r.a[5] == 30);
988 assert (r.a[6] == 20);
989 assert (r.a[7] == 10);
992 static void test_pmovmskb_u (void)
994 uint8x8_encap_t s;
995 uint8x8_encap_t r;
996 s.a[0] = 0xf0;
997 s.a[1] = 0x40;
998 s.a[2] = 0xf0;
999 s.a[3] = 0x40;
1000 s.a[4] = 0xf0;
1001 s.a[5] = 0x40;
1002 s.a[6] = 0xf0;
1003 s.a[7] = 0x40;
1004 r.v = pmovmskb_u (s.v);
1005 assert (r.a[0] == 0x55);
1006 assert (r.a[1] == 0);
1007 assert (r.a[2] == 0);
1008 assert (r.a[3] == 0);
1009 assert (r.a[4] == 0);
1010 assert (r.a[5] == 0);
1011 assert (r.a[6] == 0);
1012 assert (r.a[7] == 0);
1015 static void test_pmovmskb_s (void)
1017 int8x8_encap_t s;
1018 int8x8_encap_t r;
1019 s.a[0] = -1;
1020 s.a[1] = 1;
1021 s.a[2] = -1;
1022 s.a[3] = 1;
1023 s.a[4] = -1;
1024 s.a[5] = 1;
1025 s.a[6] = -1;
1026 s.a[7] = 1;
1027 r.v = pmovmskb_s (s.v);
1028 assert (r.a[0] == 0x55);
1029 assert (r.a[1] == 0);
1030 assert (r.a[2] == 0);
1031 assert (r.a[3] == 0);
1032 assert (r.a[4] == 0);
1033 assert (r.a[5] == 0);
1034 assert (r.a[6] == 0);
1035 assert (r.a[7] == 0);
1038 static void test_pmulhuh (void)
1040 uint16x4_encap_t s, t;
1041 uint16x4_encap_t r;
1042 s.a[0] = 0xff00;
1043 s.a[1] = 0xff00;
1044 s.a[2] = 0xff00;
1045 s.a[3] = 0xff00;
1046 t.a[0] = 16;
1047 t.a[1] = 16;
1048 t.a[2] = 16;
1049 t.a[3] = 16;
1050 r.v = pmulhuh (s.v, t.v);
1051 assert (r.a[0] == 0x000f);
1052 assert (r.a[1] == 0x000f);
1053 assert (r.a[2] == 0x000f);
1054 assert (r.a[3] == 0x000f);
1057 static void test_pmulhh (void)
1059 int16x4_encap_t s, t;
1060 int16x4_encap_t r;
1061 s.a[0] = 0x0ff0;
1062 s.a[1] = 0x0ff0;
1063 s.a[2] = 0x0ff0;
1064 s.a[3] = 0x0ff0;
1065 t.a[0] = -16*16;
1066 t.a[1] = -16*16;
1067 t.a[2] = -16*16;
1068 t.a[3] = -16*16;
1069 r.v = pmulhh (s.v, t.v);
1070 assert (r.a[0] == -16);
1071 assert (r.a[1] == -16);
1072 assert (r.a[2] == -16);
1073 assert (r.a[3] == -16);
1076 static void test_pmullh (void)
1078 int16x4_encap_t s, t;
1079 int16x4_encap_t r;
1080 s.a[0] = 0x0ff0;
1081 s.a[1] = 0x0ff0;
1082 s.a[2] = 0x0ff0;
1083 s.a[3] = 0x0ff0;
1084 t.a[0] = -16*16;
1085 t.a[1] = -16*16;
1086 t.a[2] = -16*16;
1087 t.a[3] = -16*16;
1088 r.v = pmullh (s.v, t.v);
1089 assert (r.a[0] == 4096);
1090 assert (r.a[1] == 4096);
1091 assert (r.a[2] == 4096);
1092 assert (r.a[3] == 4096);
1095 static void test_pmuluw (void)
1097 uint32x2_encap_t s, t;
1098 uint64_t r;
1099 s.a[0] = 0xdeadbeef;
1100 s.a[1] = 0;
1101 t.a[0] = 0x0f00baaa;
1102 t.a[1] = 0;
1103 r = pmuluw (s.v, t.v);
1104 assert (r == 0xd0cd08e1d1a70b6ull);
1107 static void test_pasubub (void)
1109 uint8x8_encap_t s, t;
1110 uint8x8_encap_t r;
1111 s.a[0] = 10;
1112 s.a[1] = 20;
1113 s.a[2] = 30;
1114 s.a[3] = 40;
1115 s.a[4] = 50;
1116 s.a[5] = 60;
1117 s.a[6] = 70;
1118 s.a[7] = 80;
1119 t.a[0] = 80;
1120 t.a[1] = 70;
1121 t.a[2] = 60;
1122 t.a[3] = 50;
1123 t.a[4] = 40;
1124 t.a[5] = 30;
1125 t.a[6] = 20;
1126 t.a[7] = 10;
1127 r.v = pasubub (s.v, t.v);
1128 assert (r.a[0] == 70);
1129 assert (r.a[1] == 50);
1130 assert (r.a[2] == 30);
1131 assert (r.a[3] == 10);
1132 assert (r.a[4] == 10);
1133 assert (r.a[5] == 30);
1134 assert (r.a[6] == 50);
1135 assert (r.a[7] == 70);
1138 static void test_biadd (void)
1140 uint8x8_encap_t s;
1141 uint16x4_encap_t r;
1142 s.a[0] = 10;
1143 s.a[1] = 20;
1144 s.a[2] = 30;
1145 s.a[3] = 40;
1146 s.a[4] = 50;
1147 s.a[5] = 60;
1148 s.a[6] = 70;
1149 s.a[7] = 80;
1150 r.v = biadd (s.v);
1151 assert (r.a[0] == 360);
1152 assert (r.a[1] == 0);
1153 assert (r.a[2] == 0);
1154 assert (r.a[3] == 0);
1157 static void test_psadbh (void)
1159 uint8x8_encap_t s, t;
1160 uint16x4_encap_t r;
1161 s.a[0] = 10;
1162 s.a[1] = 20;
1163 s.a[2] = 30;
1164 s.a[3] = 40;
1165 s.a[4] = 50;
1166 s.a[5] = 60;
1167 s.a[6] = 70;
1168 s.a[7] = 80;
1169 t.a[0] = 80;
1170 t.a[1] = 70;
1171 t.a[2] = 60;
1172 t.a[3] = 50;
1173 t.a[4] = 40;
1174 t.a[5] = 30;
1175 t.a[6] = 20;
1176 t.a[7] = 10;
1177 r.v = psadbh (s.v, t.v);
1178 assert (r.a[0] == 0x0140);
1179 assert (r.a[1] == 0);
1180 assert (r.a[2] == 0);
1181 assert (r.a[3] == 0);
1184 static void test_pshufh_u (void)
1186 uint16x4_encap_t s;
1187 uint16x4_encap_t r;
1188 s.a[0] = 1;
1189 s.a[1] = 2;
1190 s.a[2] = 3;
1191 s.a[3] = 4;
1192 r.a[0] = 0;
1193 r.a[1] = 0;
1194 r.a[2] = 0;
1195 r.a[3] = 0;
1196 r.v = pshufh_u (r.v, s.v, 0xe5);
1197 assert (r.a[0] == 2);
1198 assert (r.a[1] == 2);
1199 assert (r.a[2] == 3);
1200 assert (r.a[3] == 4);
1203 static void test_pshufh_s (void)
1205 int16x4_encap_t s;
1206 int16x4_encap_t r;
1207 s.a[0] = -1;
1208 s.a[1] = 2;
1209 s.a[2] = -3;
1210 s.a[3] = 4;
1211 r.a[0] = 0;
1212 r.a[1] = 0;
1213 r.a[2] = 0;
1214 r.a[3] = 0;
1215 r.v = pshufh_s (r.v, s.v, 0xe5);
1216 assert (r.a[0] == 2);
1217 assert (r.a[1] == 2);
1218 assert (r.a[2] == -3);
1219 assert (r.a[3] == 4);
1222 static void test_psllh_u (void)
1224 uint16x4_encap_t s;
1225 uint16x4_encap_t r;
1226 s.a[0] = 0xffff;
1227 s.a[1] = 0xffff;
1228 s.a[2] = 0xffff;
1229 s.a[3] = 0xffff;
1230 r.v = psllh_u (s.v, 1);
1231 assert (r.a[0] == 0xfffe);
1232 assert (r.a[1] == 0xfffe);
1233 assert (r.a[2] == 0xfffe);
1234 assert (r.a[3] == 0xfffe);
1237 static void test_psllw_u (void)
1239 uint32x2_encap_t s;
1240 uint32x2_encap_t r;
1241 s.a[0] = 0xffffffff;
1242 s.a[1] = 0xffffffff;
1243 r.v = psllw_u (s.v, 2);
1244 assert (r.a[0] == 0xfffffffc);
1245 assert (r.a[1] == 0xfffffffc);
1248 static void test_psllh_s (void)
1250 int16x4_encap_t s;
1251 int16x4_encap_t r;
1252 s.a[0] = -1;
1253 s.a[1] = -1;
1254 s.a[2] = -1;
1255 s.a[3] = -1;
1256 r.v = psllh_s (s.v, 1);
1257 assert (r.a[0] == -2);
1258 assert (r.a[1] == -2);
1259 assert (r.a[2] == -2);
1260 assert (r.a[3] == -2);
1263 static void test_psllw_s (void)
1265 int32x2_encap_t s;
1266 int32x2_encap_t r;
1267 s.a[0] = -1;
1268 s.a[1] = -1;
1269 r.v = psllw_s (s.v, 2);
1270 assert (r.a[0] == -4);
1271 assert (r.a[1] == -4);
1274 static void test_psrah_u (void)
1276 uint16x4_encap_t s;
1277 uint16x4_encap_t r;
1278 s.a[0] = 0xffef;
1279 s.a[1] = 0xffef;
1280 s.a[2] = 0xffef;
1281 s.a[3] = 0xffef;
1282 r.v = psrah_u (s.v, 1);
1283 assert (r.a[0] == 0xfff7);
1284 assert (r.a[1] == 0xfff7);
1285 assert (r.a[2] == 0xfff7);
1286 assert (r.a[3] == 0xfff7);
1289 static void test_psraw_u (void)
1291 uint32x2_encap_t s;
1292 uint32x2_encap_t r;
1293 s.a[0] = 0xffffffef;
1294 s.a[1] = 0xffffffef;
1295 r.v = psraw_u (s.v, 1);
1296 assert (r.a[0] == 0xfffffff7);
1297 assert (r.a[1] == 0xfffffff7);
1300 static void test_psrah_s (void)
1302 int16x4_encap_t s;
1303 int16x4_encap_t r;
1304 s.a[0] = -2;
1305 s.a[1] = -2;
1306 s.a[2] = -2;
1307 s.a[3] = -2;
1308 r.v = psrah_s (s.v, 1);
1309 assert (r.a[0] == -1);
1310 assert (r.a[1] == -1);
1311 assert (r.a[2] == -1);
1312 assert (r.a[3] == -1);
1315 static void test_psraw_s (void)
1317 int32x2_encap_t s;
1318 int32x2_encap_t r;
1319 s.a[0] = -2;
1320 s.a[1] = -2;
1321 r.v = psraw_s (s.v, 1);
1322 assert (r.a[0] == -1);
1323 assert (r.a[1] == -1);
1326 static void test_psrlh_u (void)
1328 uint16x4_encap_t s;
1329 uint16x4_encap_t r;
1330 s.a[0] = 0xffef;
1331 s.a[1] = 0xffef;
1332 s.a[2] = 0xffef;
1333 s.a[3] = 0xffef;
1334 r.v = psrlh_u (s.v, 1);
1335 assert (r.a[0] == 0x7ff7);
1336 assert (r.a[1] == 0x7ff7);
1337 assert (r.a[2] == 0x7ff7);
1338 assert (r.a[3] == 0x7ff7);
1341 static void test_psrlw_u (void)
1343 uint32x2_encap_t s;
1344 uint32x2_encap_t r;
1345 s.a[0] = 0xffffffef;
1346 s.a[1] = 0xffffffef;
1347 r.v = psrlw_u (s.v, 1);
1348 assert (r.a[0] == 0x7ffffff7);
1349 assert (r.a[1] == 0x7ffffff7);
1352 static void test_psrlh_s (void)
1354 int16x4_encap_t s;
1355 int16x4_encap_t r;
1356 s.a[0] = -1;
1357 s.a[1] = -1;
1358 s.a[2] = -1;
1359 s.a[3] = -1;
1360 r.v = psrlh_s (s.v, 1);
1361 assert (r.a[0] == INT16x4_MAX);
1362 assert (r.a[1] == INT16x4_MAX);
1363 assert (r.a[2] == INT16x4_MAX);
1364 assert (r.a[3] == INT16x4_MAX);
1367 static void test_psrlw_s (void)
1369 int32x2_encap_t s;
1370 int32x2_encap_t r;
1371 s.a[0] = -1;
1372 s.a[1] = -1;
1373 r.v = psrlw_s (s.v, 1);
1374 assert (r.a[0] == INT32x2_MAX);
1375 assert (r.a[1] == INT32x2_MAX);
1378 static void test_psubw_u (void)
1380 uint32x2_encap_t s, t;
1381 uint32x2_encap_t r;
1382 s.a[0] = 3;
1383 s.a[1] = 4;
1384 t.a[0] = 2;
1385 t.a[1] = 1;
1386 r.v = psubw_u (s.v, t.v);
1387 assert (r.a[0] == 1);
1388 assert (r.a[1] == 3);
1391 static void test_psubw_s (void)
1393 int32x2_encap_t s, t;
1394 int32x2_encap_t r;
1395 s.a[0] = -2;
1396 s.a[1] = -1;
1397 t.a[0] = 3;
1398 t.a[1] = -4;
1399 r.v = psubw_s (s.v, t.v);
1400 assert (r.a[0] == -5);
1401 assert (r.a[1] == 3);
1404 static void test_psubh_u (void)
1406 uint16x4_encap_t s, t;
1407 uint16x4_encap_t r;
1408 s.a[0] = 5;
1409 s.a[1] = 6;
1410 s.a[2] = 7;
1411 s.a[3] = 8;
1412 t.a[0] = 1;
1413 t.a[1] = 2;
1414 t.a[2] = 3;
1415 t.a[3] = 4;
1416 r.v = psubh_u (s.v, t.v);
1417 assert (r.a[0] == 4);
1418 assert (r.a[1] == 4);
1419 assert (r.a[2] == 4);
1420 assert (r.a[3] == 4);
1423 static void test_psubh_s (void)
1425 int16x4_encap_t s, t;
1426 int16x4_encap_t r;
1427 s.a[0] = -10;
1428 s.a[1] = -20;
1429 s.a[2] = -30;
1430 s.a[3] = -40;
1431 t.a[0] = 1;
1432 t.a[1] = 2;
1433 t.a[2] = 3;
1434 t.a[3] = 4;
1435 r.v = psubh_s (s.v, t.v);
1436 assert (r.a[0] == -11);
1437 assert (r.a[1] == -22);
1438 assert (r.a[2] == -33);
1439 assert (r.a[3] == -44);
1442 static void test_psubb_u (void)
1444 uint8x8_encap_t s, t;
1445 uint8x8_encap_t r;
1446 s.a[0] = 10;
1447 s.a[1] = 11;
1448 s.a[2] = 12;
1449 s.a[3] = 13;
1450 s.a[4] = 14;
1451 s.a[5] = 15;
1452 s.a[6] = 16;
1453 s.a[7] = 17;
1454 t.a[0] = 1;
1455 t.a[1] = 2;
1456 t.a[2] = 3;
1457 t.a[3] = 4;
1458 t.a[4] = 5;
1459 t.a[5] = 6;
1460 t.a[6] = 7;
1461 t.a[7] = 8;
1462 r.v = psubb_u (s.v, t.v);
1463 assert (r.a[0] == 9);
1464 assert (r.a[1] == 9);
1465 assert (r.a[2] == 9);
1466 assert (r.a[3] == 9);
1467 assert (r.a[4] == 9);
1468 assert (r.a[5] == 9);
1469 assert (r.a[6] == 9);
1470 assert (r.a[7] == 9);
1473 static void test_psubb_s (void)
1475 int8x8_encap_t s, t;
1476 int8x8_encap_t r;
1477 s.a[0] = -10;
1478 s.a[1] = -20;
1479 s.a[2] = -30;
1480 s.a[3] = -40;
1481 s.a[4] = -50;
1482 s.a[5] = -60;
1483 s.a[6] = -70;
1484 s.a[7] = -80;
1485 t.a[0] = 1;
1486 t.a[1] = 2;
1487 t.a[2] = 3;
1488 t.a[3] = 4;
1489 t.a[4] = 5;
1490 t.a[5] = 6;
1491 t.a[6] = 7;
1492 t.a[7] = 8;
1493 r.v = psubb_s (s.v, t.v);
1494 assert (r.a[0] == -11);
1495 assert (r.a[1] == -22);
1496 assert (r.a[2] == -33);
1497 assert (r.a[3] == -44);
1498 assert (r.a[4] == -55);
1499 assert (r.a[5] == -66);
1500 assert (r.a[6] == -77);
1501 assert (r.a[7] == -88);
1504 static void test_psubd_u (void)
1506 uint64_t d = 789012;
1507 uint64_t e = 123456;
1508 uint64_t r;
1509 r = psubd_u (d, e);
1510 assert (r == 665556);
1513 static void test_psubd_s (void)
1515 int64_t d = 123456;
1516 int64_t e = -789012;
1517 int64_t r;
1518 r = psubd_s (d, e);
1519 assert (r == 912468);
1522 static void test_psubsh (void)
1524 int16x4_encap_t s, t;
1525 int16x4_encap_t r;
1526 s.a[0] = -1;
1527 s.a[1] = 0;
1528 s.a[2] = 1;
1529 s.a[3] = 2;
1530 t.a[0] = -INT16x4_MAX;
1531 t.a[1] = -INT16x4_MAX;
1532 t.a[2] = -INT16x4_MAX;
1533 t.a[3] = -INT16x4_MAX;
1534 r.v = psubsh (s.v, t.v);
1535 assert (r.a[0] == INT16x4_MAX - 1);
1536 assert (r.a[1] == INT16x4_MAX);
1537 assert (r.a[2] == INT16x4_MAX);
1538 assert (r.a[3] == INT16x4_MAX);
1541 static void test_psubsb (void)
1543 int8x8_encap_t s, t;
1544 int8x8_encap_t r;
1545 s.a[0] = -6;
1546 s.a[1] = -5;
1547 s.a[2] = -4;
1548 s.a[3] = -3;
1549 s.a[4] = -2;
1550 s.a[5] = -1;
1551 s.a[6] = 0;
1552 s.a[7] = 1;
1553 t.a[0] = -INT8x8_MAX;
1554 t.a[1] = -INT8x8_MAX;
1555 t.a[2] = -INT8x8_MAX;
1556 t.a[3] = -INT8x8_MAX;
1557 t.a[4] = -INT8x8_MAX;
1558 t.a[5] = -INT8x8_MAX;
1559 t.a[6] = -INT8x8_MAX;
1560 t.a[7] = -INT8x8_MAX;
1561 r.v = psubsb (s.v, t.v);
1562 assert (r.a[0] == INT8x8_MAX - 6);
1563 assert (r.a[1] == INT8x8_MAX - 5);
1564 assert (r.a[2] == INT8x8_MAX - 4);
1565 assert (r.a[3] == INT8x8_MAX - 3);
1566 assert (r.a[4] == INT8x8_MAX - 2);
1567 assert (r.a[5] == INT8x8_MAX - 1);
1568 assert (r.a[6] == INT8x8_MAX);
1569 assert (r.a[7] == INT8x8_MAX);
1572 static void test_psubush (void)
1574 uint16x4_encap_t s, t;
1575 uint16x4_encap_t r;
1576 s.a[0] = 0;
1577 s.a[1] = 1;
1578 s.a[2] = 2;
1579 s.a[3] = 3;
1580 t.a[0] = 1;
1581 t.a[1] = 1;
1582 t.a[2] = 3;
1583 t.a[3] = 3;
1584 r.v = psubush (s.v, t.v);
1585 assert (r.a[0] == 0);
1586 assert (r.a[1] == 0);
1587 assert (r.a[2] == 0);
1588 assert (r.a[3] == 0);
1591 static void test_psubusb (void)
1593 uint8x8_encap_t s, t;
1594 uint8x8_encap_t r;
1595 s.a[0] = 0;
1596 s.a[1] = 1;
1597 s.a[2] = 2;
1598 s.a[3] = 3;
1599 s.a[4] = 4;
1600 s.a[5] = 5;
1601 s.a[6] = 6;
1602 s.a[7] = 7;
1603 t.a[0] = 1;
1604 t.a[1] = 1;
1605 t.a[2] = 3;
1606 t.a[3] = 3;
1607 t.a[4] = 5;
1608 t.a[5] = 5;
1609 t.a[6] = 7;
1610 t.a[7] = 7;
1611 r.v = psubusb (s.v, t.v);
1612 assert (r.a[0] == 0);
1613 assert (r.a[1] == 0);
1614 assert (r.a[2] == 0);
1615 assert (r.a[3] == 0);
1616 assert (r.a[4] == 0);
1617 assert (r.a[5] == 0);
1618 assert (r.a[6] == 0);
1619 assert (r.a[7] == 0);
1622 static void test_punpckhbh_s (void)
1624 int8x8_encap_t s, t;
1625 int8x8_encap_t r;
1626 s.a[0] = -1;
1627 s.a[1] = -3;
1628 s.a[2] = -5;
1629 s.a[3] = -7;
1630 s.a[4] = -9;
1631 s.a[5] = -11;
1632 s.a[6] = -13;
1633 s.a[7] = -15;
1634 t.a[0] = 2;
1635 t.a[1] = 4;
1636 t.a[2] = 6;
1637 t.a[3] = 8;
1638 t.a[4] = 10;
1639 t.a[5] = 12;
1640 t.a[6] = 14;
1641 t.a[7] = 16;
1642 r.v = punpckhbh_s (s.v, t.v);
1643 assert (r.a[0] == -9);
1644 assert (r.a[1] == 10);
1645 assert (r.a[2] == -11);
1646 assert (r.a[3] == 12);
1647 assert (r.a[4] == -13);
1648 assert (r.a[5] == 14);
1649 assert (r.a[6] == -15);
1650 assert (r.a[7] == 16);
1653 static void test_punpckhbh_u (void)
1655 uint8x8_encap_t s, t;
1656 uint8x8_encap_t r;
1657 s.a[0] = 1;
1658 s.a[1] = 3;
1659 s.a[2] = 5;
1660 s.a[3] = 7;
1661 s.a[4] = 9;
1662 s.a[5] = 11;
1663 s.a[6] = 13;
1664 s.a[7] = 15;
1665 t.a[0] = 2;
1666 t.a[1] = 4;
1667 t.a[2] = 6;
1668 t.a[3] = 8;
1669 t.a[4] = 10;
1670 t.a[5] = 12;
1671 t.a[6] = 14;
1672 t.a[7] = 16;
1673 r.v = punpckhbh_u (s.v, t.v);
1674 assert (r.a[0] == 9);
1675 assert (r.a[1] == 10);
1676 assert (r.a[2] == 11);
1677 assert (r.a[3] == 12);
1678 assert (r.a[4] == 13);
1679 assert (r.a[5] == 14);
1680 assert (r.a[6] == 15);
1681 assert (r.a[7] == 16);
1684 static void test_punpckhhw_s (void)
1686 int16x4_encap_t s, t;
1687 int16x4_encap_t r;
1688 s.a[0] = -1;
1689 s.a[1] = 3;
1690 s.a[2] = -5;
1691 s.a[3] = 7;
1692 t.a[0] = -2;
1693 t.a[1] = 4;
1694 t.a[2] = -6;
1695 t.a[3] = 8;
1696 r.v = punpckhhw_s (s.v, t.v);
1697 assert (r.a[0] == -5);
1698 assert (r.a[1] == -6);
1699 assert (r.a[2] == 7);
1700 assert (r.a[3] == 8);
1703 static void test_punpckhhw_u (void)
1705 uint16x4_encap_t s, t;
1706 uint16x4_encap_t r;
1707 s.a[0] = 1;
1708 s.a[1] = 3;
1709 s.a[2] = 5;
1710 s.a[3] = 7;
1711 t.a[0] = 2;
1712 t.a[1] = 4;
1713 t.a[2] = 6;
1714 t.a[3] = 8;
1715 r.v = punpckhhw_u (s.v, t.v);
1716 assert (r.a[0] == 5);
1717 assert (r.a[1] == 6);
1718 assert (r.a[2] == 7);
1719 assert (r.a[3] == 8);
1722 static void test_punpckhwd_s (void)
1724 int32x2_encap_t s, t;
1725 int32x2_encap_t r;
1726 s.a[0] = 1;
1727 s.a[1] = 3;
1728 t.a[0] = 2;
1729 t.a[1] = -4;
1730 r.v = punpckhwd_s (s.v, t.v);
1731 assert (r.a[0] == 3);
1732 assert (r.a[1] == -4);
1735 static void test_punpckhwd_u (void)
1737 uint32x2_encap_t s, t;
1738 uint32x2_encap_t r;
1739 s.a[0] = 1;
1740 s.a[1] = 3;
1741 t.a[0] = 2;
1742 t.a[1] = 4;
1743 r.v = punpckhwd_u (s.v, t.v);
1744 assert (r.a[0] == 3);
1745 assert (r.a[1] == 4);
1748 static void test_punpcklbh_s (void)
1750 int8x8_encap_t s, t;
1751 int8x8_encap_t r;
1752 s.a[0] = -1;
1753 s.a[1] = -3;
1754 s.a[2] = -5;
1755 s.a[3] = -7;
1756 s.a[4] = -9;
1757 s.a[5] = -11;
1758 s.a[6] = -13;
1759 s.a[7] = -15;
1760 t.a[0] = 2;
1761 t.a[1] = 4;
1762 t.a[2] = 6;
1763 t.a[3] = 8;
1764 t.a[4] = 10;
1765 t.a[5] = 12;
1766 t.a[6] = 14;
1767 t.a[7] = 16;
1768 r.v = punpcklbh_s (s.v, t.v);
1769 assert (r.a[0] == -1);
1770 assert (r.a[1] == 2);
1771 assert (r.a[2] == -3);
1772 assert (r.a[3] == 4);
1773 assert (r.a[4] == -5);
1774 assert (r.a[5] == 6);
1775 assert (r.a[6] == -7);
1776 assert (r.a[7] == 8);
1779 static void test_punpcklbh_u (void)
1781 uint8x8_encap_t s, t;
1782 uint8x8_encap_t r;
1783 s.a[0] = 1;
1784 s.a[1] = 3;
1785 s.a[2] = 5;
1786 s.a[3] = 7;
1787 s.a[4] = 9;
1788 s.a[5] = 11;
1789 s.a[6] = 13;
1790 s.a[7] = 15;
1791 t.a[0] = 2;
1792 t.a[1] = 4;
1793 t.a[2] = 6;
1794 t.a[3] = 8;
1795 t.a[4] = 10;
1796 t.a[5] = 12;
1797 t.a[6] = 14;
1798 t.a[7] = 16;
1799 r.v = punpcklbh_u (s.v, t.v);
1800 assert (r.a[0] == 1);
1801 assert (r.a[1] == 2);
1802 assert (r.a[2] == 3);
1803 assert (r.a[3] == 4);
1804 assert (r.a[4] == 5);
1805 assert (r.a[5] == 6);
1806 assert (r.a[6] == 7);
1807 assert (r.a[7] == 8);
1810 static void test_punpcklhw_s (void)
1812 int16x4_encap_t s, t;
1813 int16x4_encap_t r;
1814 s.a[0] = -1;
1815 s.a[1] = 3;
1816 s.a[2] = -5;
1817 s.a[3] = 7;
1818 t.a[0] = -2;
1819 t.a[1] = 4;
1820 t.a[2] = -6;
1821 t.a[3] = 8;
1822 r.v = punpcklhw_s (s.v, t.v);
1823 assert (r.a[0] == -1);
1824 assert (r.a[1] == -2);
1825 assert (r.a[2] == 3);
1826 assert (r.a[3] == 4);
1829 static void test_punpcklhw_u (void)
1831 uint16x4_encap_t s, t;
1832 uint16x4_encap_t r;
1833 s.a[0] = 1;
1834 s.a[1] = 3;
1835 s.a[2] = 5;
1836 s.a[3] = 7;
1837 t.a[0] = 2;
1838 t.a[1] = 4;
1839 t.a[2] = 6;
1840 t.a[3] = 8;
1841 r.v = punpcklhw_u (s.v, t.v);
1842 assert (r.a[0] == 1);
1843 assert (r.a[1] == 2);
1844 assert (r.a[2] == 3);
1845 assert (r.a[3] == 4);
1848 static void test_punpcklwd_s (void)
1850 int32x2_encap_t s, t;
1851 int32x2_encap_t r;
1852 s.a[0] = 1;
1853 s.a[1] = 3;
1854 t.a[0] = -2;
1855 t.a[1] = 4;
1856 r.v = punpcklwd_s (s.v, t.v);
1857 assert (r.a[0] == 1);
1858 assert (r.a[1] == -2);
1861 static void test_punpcklwd_u (void)
1863 uint32x2_encap_t s, t;
1864 uint32x2_encap_t r;
1865 s.a[0] = 1;
1866 s.a[1] = 3;
1867 t.a[0] = 2;
1868 t.a[1] = 4;
1869 r.v = punpcklwd_u (s.v, t.v);
1870 assert (r.a[0] == 1);
1871 assert (r.a[1] == 2);
1874 int main (void)
1876 test_packsswh ();
1877 test_packsshb ();
1878 test_packushb ();
1879 test_paddw_u ();
1880 test_paddw_s ();
1881 test_paddh_u ();
1882 test_paddh_s ();
1883 test_paddb_u ();
1884 test_paddb_s ();
1885 test_paddd_u ();
1886 test_paddd_s ();
1887 test_paddsh ();
1888 test_paddsb ();
1889 test_paddush ();
1890 test_paddusb ();
1891 test_pandn_ud ();
1892 test_pandn_sd ();
1893 test_pandn_uw ();
1894 test_pandn_sw ();
1895 test_pandn_uh ();
1896 test_pandn_sh ();
1897 test_pandn_ub ();
1898 test_pandn_sb ();
1899 test_pavgh ();
1900 test_pavgb ();
1901 test_pcmpeqw_u ();
1902 test_pcmpeqh_u ();
1903 test_pcmpeqb_u ();
1904 test_pcmpeqw_s ();
1905 test_pcmpeqh_s ();
1906 test_pcmpeqb_s ();
1907 test_pcmpgtw_u ();
1908 test_pcmpgth_u ();
1909 test_pcmpgtb_u ();
1910 test_pcmpgtw_s ();
1911 test_pcmpgth_s ();
1912 test_pcmpgtb_s ();
1913 test_pextrh_u ();
1914 test_pextrh_s ();
1915 test_pinsrh_0123_u ();
1916 test_pinsrh_0123_s ();
1917 test_pmaddhw ();
1918 test_pmaxsh ();
1919 test_pmaxub ();
1920 test_pminsh ();
1921 test_pminub ();
1922 test_pmovmskb_u ();
1923 test_pmovmskb_s ();
1924 test_pmulhuh ();
1925 test_pmulhh ();
1926 test_pmullh ();
1927 test_pmuluw ();
1928 test_pasubub ();
1929 test_biadd ();
1930 test_psadbh ();
1931 test_pshufh_u ();
1932 test_pshufh_s ();
1933 test_psllh_u ();
1934 test_psllw_u ();
1935 test_psllh_s ();
1936 test_psllw_s ();
1937 test_psrah_u ();
1938 test_psraw_u ();
1939 test_psrah_s ();
1940 test_psraw_s ();
1941 test_psrlh_u ();
1942 test_psrlw_u ();
1943 test_psrlh_s ();
1944 test_psrlw_s ();
1945 test_psubw_u ();
1946 test_psubw_s ();
1947 test_psubh_u ();
1948 test_psubh_s ();
1949 test_psubb_u ();
1950 test_psubb_s ();
1951 test_psubd_u ();
1952 test_psubd_s ();
1953 test_psubsh ();
1954 test_psubsb ();
1955 test_psubush ();
1956 test_psubusb ();
1957 test_punpckhbh_s ();
1958 test_punpckhbh_u ();
1959 test_punpckhhw_s ();
1960 test_punpckhhw_u ();
1961 test_punpckhwd_s ();
1962 test_punpckhwd_u ();
1963 test_punpcklbh_s ();
1964 test_punpcklbh_u ();
1965 test_punpcklhw_s ();
1966 test_punpcklhw_u ();
1967 test_punpcklwd_s ();
1968 test_punpcklwd_u ();
1969 return 0;