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)
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)" } */
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)
54 s
.a
[0] = INT16x4_MAX
- 2;
55 s
.a
[1] = INT16x4_MAX
- 1;
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)
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;
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
;
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;
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
;
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
;
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
;
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
;
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
;
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)
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)
243 assert (r
== 912468);
246 static void test_paddd_s (void)
252 assert (r
== -665556);
255 static void test_paddsh (void)
257 int16x4_encap_t s
, t
;
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)
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
;
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
;
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
;
360 r
= pandn_ud (d1
, d2
);
364 static void test_pandn_sd (void)
366 int64_t d1
= (int64_t) 0x0000000000000000ull
;
367 int64_t d2
= (int64_t) 0xfffffffffffffffeull
;
369 r
= pandn_sd (d1
, d2
);
373 static void test_pandn_uw (void)
375 uint32x2_encap_t s
, t
;
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
;
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
;
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
;
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
;
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)
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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)
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
;
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
;
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
;
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
;
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
;
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)
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)
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)
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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)
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)
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
;
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
;
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
;
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
;
1099 s
.a
[0] = 0xdeadbeef;
1101 t
.a
[0] = 0x0f00baaa;
1103 r
= pmuluw (s
.v
, t
.v
);
1104 assert (r
== 0xd0cd08e1d1a70b6ull
);
1107 static void test_pasubub (void)
1109 uint8x8_encap_t s
, t
;
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)
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
;
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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
;
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
;
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
;
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
;
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
;
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
;
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;
1510 assert (r
== 665556);
1513 static void test_psubd_s (void)
1516 int64_t e
= -789012;
1519 assert (r
== 912468);
1522 static void test_psubsh (void)
1524 int16x4_encap_t s
, t
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
1869 r
.v
= punpcklwd_u (s
.v
, t
.v
);
1870 assert (r
.a
[0] == 1);
1871 assert (r
.a
[1] == 2);
1915 test_pinsrh_0123_u ();
1916 test_pinsrh_0123_s ();
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 ();