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/>. */
22 /* { dg-require-effective-target mips_loongson } */
30 typedef union { int32x2_t v; int32_t a[2]; } int32x2_encap_t;
31 typedef union { int16x4_t v; int16_t a[4]; } int16x4_encap_t;
32 typedef union { int8x8_t v; int8_t a[8]; } int8x8_encap_t;
33 typedef union { uint32x2_t v; uint32_t a[2]; } uint32x2_encap_t;
34 typedef union { uint16x4_t v; uint16_t a[4]; } uint16x4_encap_t;
35 typedef union { uint8x8_t v; uint8_t a[8]; } uint8x8_encap_t;
37 #define UINT16x4_MAX USHRT_MAX
38 #define UINT8x8_MAX UCHAR_MAX
39 #define INT8x8_MAX SCHAR_MAX
40 #define INT16x4_MAX SHRT_MAX
41 #define INT32x2_MAX INT_MAX
43 static void test_packsswh (void)
47 s.a[0] = INT16x4_MAX - 2;
48 s.a[1] = INT16x4_MAX - 1;
50 t.a[1] = INT16x4_MAX + 1;
51 r.v = packsswh (s.v, t.v);
52 assert (r.a[0] == INT16x4_MAX - 2);
53 assert (r.a[1] == INT16x4_MAX - 1);
54 assert (r.a[2] == INT16x4_MAX);
55 assert (r.a[3] == INT16x4_MAX);
58 static void test_packsshb (void)
62 s.a[0] = INT8x8_MAX - 6;
63 s.a[1] = INT8x8_MAX - 5;
64 s.a[2] = INT8x8_MAX - 4;
65 s.a[3] = INT8x8_MAX - 3;
66 t.a[0] = INT8x8_MAX - 2;
67 t.a[1] = INT8x8_MAX - 1;
69 t.a[3] = INT8x8_MAX + 1;
70 r.v = packsshb (s.v, t.v);
71 assert (r.a[0] == INT8x8_MAX - 6);
72 assert (r.a[1] == INT8x8_MAX - 5);
73 assert (r.a[2] == INT8x8_MAX - 4);
74 assert (r.a[3] == INT8x8_MAX - 3);
75 assert (r.a[4] == INT8x8_MAX - 2);
76 assert (r.a[5] == INT8x8_MAX - 1);
77 assert (r.a[6] == INT8x8_MAX);
78 assert (r.a[7] == INT8x8_MAX);
81 static void test_packushb (void)
83 uint16x4_encap_t s, t;
85 s.a[0] = UINT8x8_MAX - 6;
86 s.a[1] = UINT8x8_MAX - 5;
87 s.a[2] = UINT8x8_MAX - 4;
88 s.a[3] = UINT8x8_MAX - 3;
89 t.a[0] = UINT8x8_MAX - 2;
90 t.a[1] = UINT8x8_MAX - 1;
92 t.a[3] = UINT8x8_MAX + 1;
93 r.v = packushb (s.v, t.v);
94 assert (r.a[0] == UINT8x8_MAX - 6);
95 assert (r.a[1] == UINT8x8_MAX - 5);
96 assert (r.a[2] == UINT8x8_MAX - 4);
97 assert (r.a[3] == UINT8x8_MAX - 3);
98 assert (r.a[4] == UINT8x8_MAX - 2);
99 assert (r.a[5] == UINT8x8_MAX - 1);
100 assert (r.a[6] == UINT8x8_MAX);
101 assert (r.a[7] == UINT8x8_MAX);
104 static void test_paddw_u (void)
106 uint32x2_encap_t s, t;
112 r.v = paddw_u (s.v, t.v);
113 assert (r.a[0] == 4);
114 assert (r.a[1] == 6);
117 static void test_paddw_s (void)
119 int32x2_encap_t s, t;
125 r.v = paddw_s (s.v, t.v);
126 assert (r.a[0] == 1);
127 assert (r.a[1] == 3);
130 static void test_paddh_u (void)
132 uint16x4_encap_t s, t;
142 r.v = paddh_u (s.v, t.v);
143 assert (r.a[0] == 6);
144 assert (r.a[1] == 8);
145 assert (r.a[2] == 10);
146 assert (r.a[3] == 12);
149 static void test_paddh_s (void)
151 int16x4_encap_t s, t;
161 r.v = paddh_s (s.v, t.v);
162 assert (r.a[0] == -9);
163 assert (r.a[1] == -18);
164 assert (r.a[2] == -27);
165 assert (r.a[3] == -36);
168 static void test_paddb_u (void)
170 uint8x8_encap_t s, t;
188 r.v = paddb_u (s.v, t.v);
189 assert (r.a[0] == 10);
190 assert (r.a[1] == 12);
191 assert (r.a[2] == 14);
192 assert (r.a[3] == 16);
193 assert (r.a[4] == 18);
194 assert (r.a[5] == 20);
195 assert (r.a[6] == 22);
196 assert (r.a[7] == 24);
199 static void test_paddb_s (void)
219 r.v = paddb_s (s.v, t.v);
220 assert (r.a[0] == -9);
221 assert (r.a[1] == -18);
222 assert (r.a[2] == -27);
223 assert (r.a[3] == -36);
224 assert (r.a[4] == -45);
225 assert (r.a[5] == -54);
226 assert (r.a[6] == -63);
227 assert (r.a[7] == -72);
230 static void test_paddd_u (void)
236 assert (r == 912468);
239 static void test_paddd_s (void)
245 assert (r == -665556);
248 static void test_paddsh (void)
250 int16x4_encap_t s, t;
256 t.a[0] = INT16x4_MAX;
257 t.a[1] = INT16x4_MAX;
258 t.a[2] = INT16x4_MAX;
259 t.a[3] = INT16x4_MAX;
260 r.v = paddsh (s.v, t.v);
261 assert (r.a[0] == INT16x4_MAX - 1);
262 assert (r.a[1] == INT16x4_MAX);
263 assert (r.a[2] == INT16x4_MAX);
264 assert (r.a[3] == INT16x4_MAX);
267 static void test_paddsb (void)
287 r.v = paddsb (s.v, t.v);
288 assert (r.a[0] == INT8x8_MAX - 6);
289 assert (r.a[1] == INT8x8_MAX - 5);
290 assert (r.a[2] == INT8x8_MAX - 4);
291 assert (r.a[3] == INT8x8_MAX - 3);
292 assert (r.a[4] == INT8x8_MAX - 2);
293 assert (r.a[5] == INT8x8_MAX - 1);
294 assert (r.a[6] == INT8x8_MAX);
295 assert (r.a[7] == INT8x8_MAX);
298 static void test_paddush (void)
300 uint16x4_encap_t s, t;
306 t.a[0] = UINT16x4_MAX;
307 t.a[1] = UINT16x4_MAX;
308 t.a[2] = UINT16x4_MAX;
309 t.a[3] = UINT16x4_MAX;
310 r.v = paddush (s.v, t.v);
311 assert (r.a[0] == UINT16x4_MAX);
312 assert (r.a[1] == UINT16x4_MAX);
313 assert (r.a[2] == UINT16x4_MAX);
314 assert (r.a[3] == UINT16x4_MAX);
317 static void test_paddusb (void)
319 uint8x8_encap_t s, t;
329 t.a[0] = UINT8x8_MAX;
330 t.a[1] = UINT8x8_MAX;
331 t.a[2] = UINT8x8_MAX;
332 t.a[3] = UINT8x8_MAX;
333 t.a[4] = UINT8x8_MAX;
334 t.a[5] = UINT8x8_MAX;
335 t.a[6] = UINT8x8_MAX;
336 t.a[7] = UINT8x8_MAX;
337 r.v = paddusb (s.v, t.v);
338 assert (r.a[0] == UINT8x8_MAX);
339 assert (r.a[1] == UINT8x8_MAX);
340 assert (r.a[2] == UINT8x8_MAX);
341 assert (r.a[3] == UINT8x8_MAX);
342 assert (r.a[4] == UINT8x8_MAX);
343 assert (r.a[5] == UINT8x8_MAX);
344 assert (r.a[6] == UINT8x8_MAX);
345 assert (r.a[7] == UINT8x8_MAX);
348 static void test_pandn_ud (void)
350 uint64_t d1 = 0x0000ffff0000ffffull;
351 uint64_t d2 = 0x0000ffff0000ffffull;
353 r = pandn_ud (d1, d2);
357 static void test_pandn_sd (void)
359 int64_t d1 = (int64_t) 0x0000000000000000ull;
360 int64_t d2 = (int64_t) 0xfffffffffffffffeull;
362 r = pandn_sd (d1, d2);
366 static void test_pandn_uw (void)
368 uint32x2_encap_t s, t;
374 r.v = pandn_uw (s.v, t.v);
375 assert (r.a[0] == 0x00000000);
376 assert (r.a[1] == 0xffffffff);
379 static void test_pandn_sw (void)
381 int32x2_encap_t s, t;
387 r.v = pandn_sw (s.v, t.v);
388 assert (r.a[0] == 0);
389 assert (r.a[1] == -2);
392 static void test_pandn_uh (void)
394 uint16x4_encap_t s, t;
404 r.v = pandn_uh (s.v, t.v);
405 assert (r.a[0] == 0x0000);
406 assert (r.a[1] == 0xffff);
407 assert (r.a[2] == 0x0000);
408 assert (r.a[3] == 0xffff);
411 static void test_pandn_sh (void)
413 int16x4_encap_t s, t;
423 r.v = pandn_sh (s.v, t.v);
424 assert (r.a[0] == 0);
425 assert (r.a[1] == -2);
426 assert (r.a[2] == 0);
427 assert (r.a[3] == -2);
430 static void test_pandn_ub (void)
432 uint8x8_encap_t s, t;
450 r.v = pandn_ub (s.v, t.v);
451 assert (r.a[0] == 0x00);
452 assert (r.a[1] == 0xff);
453 assert (r.a[2] == 0x00);
454 assert (r.a[3] == 0xff);
455 assert (r.a[4] == 0x00);
456 assert (r.a[5] == 0xff);
457 assert (r.a[6] == 0x00);
458 assert (r.a[7] == 0xff);
461 static void test_pandn_sb (void)
481 r.v = pandn_sb (s.v, t.v);
482 assert (r.a[0] == 0);
483 assert (r.a[1] == -2);
484 assert (r.a[2] == 0);
485 assert (r.a[3] == -2);
486 assert (r.a[4] == 0);
487 assert (r.a[5] == -2);
488 assert (r.a[6] == 0);
489 assert (r.a[7] == -2);
492 static void test_pavgh (void)
494 uint16x4_encap_t s, t;
504 r.v = pavgh (s.v, t.v);
505 assert (r.a[0] == 3);
506 assert (r.a[1] == 4);
507 assert (r.a[2] == 5);
508 assert (r.a[3] == 6);
511 static void test_pavgb (void)
513 uint8x8_encap_t s, t;
531 r.v = pavgb (s.v, t.v);
532 assert (r.a[0] == 3);
533 assert (r.a[1] == 4);
534 assert (r.a[2] == 5);
535 assert (r.a[3] == 6);
536 assert (r.a[4] == 3);
537 assert (r.a[5] == 4);
538 assert (r.a[6] == 5);
539 assert (r.a[7] == 6);
542 static void test_pcmpeqw_u (void)
544 uint32x2_encap_t s, t;
550 r.v = pcmpeqw_u (s.v, t.v);
551 assert (r.a[0] == 0x00000000);
552 assert (r.a[1] == 0xffffffff);
555 static void test_pcmpeqh_u (void)
557 uint16x4_encap_t s, t;
567 r.v = pcmpeqh_u (s.v, t.v);
568 assert (r.a[0] == 0x0000);
569 assert (r.a[1] == 0xffff);
570 assert (r.a[2] == 0x0000);
571 assert (r.a[3] == 0xffff);
574 static void test_pcmpeqb_u (void)
576 uint8x8_encap_t s, t;
594 r.v = pcmpeqb_u (s.v, t.v);
595 assert (r.a[0] == 0x00);
596 assert (r.a[1] == 0xff);
597 assert (r.a[2] == 0x00);
598 assert (r.a[3] == 0xff);
599 assert (r.a[4] == 0x00);
600 assert (r.a[5] == 0xff);
601 assert (r.a[6] == 0x00);
602 assert (r.a[7] == 0xff);
605 static void test_pcmpeqw_s (void)
607 int32x2_encap_t s, t;
613 r.v = pcmpeqw_s (s.v, t.v);
614 assert (r.a[0] == 0);
615 assert (r.a[1] == -1);
618 static void test_pcmpeqh_s (void)
620 int16x4_encap_t s, t;
630 r.v = pcmpeqh_s (s.v, t.v);
631 assert (r.a[0] == 0);
632 assert (r.a[1] == -1);
633 assert (r.a[2] == 0);
634 assert (r.a[3] == -1);
637 static void test_pcmpeqb_s (void)
657 r.v = pcmpeqb_s (s.v, t.v);
658 assert (r.a[0] == 0);
659 assert (r.a[1] == -1);
660 assert (r.a[2] == 0);
661 assert (r.a[3] == -1);
662 assert (r.a[4] == 0);
663 assert (r.a[5] == -1);
664 assert (r.a[6] == 0);
665 assert (r.a[7] == -1);
668 static void test_pcmpgtw_u (void)
670 uint32x2_encap_t s, t;
676 r.v = pcmpgtw_u (s.v, t.v);
677 assert (r.a[0] == 0x00000000);
678 assert (r.a[1] == 0xffffffff);
681 static void test_pcmpgth_u (void)
683 uint16x4_encap_t s, t;
693 r.v = pcmpgth_u (s.v, t.v);
694 assert (r.a[0] == 0x0000);
695 assert (r.a[1] == 0x0000);
696 assert (r.a[2] == 0x0000);
697 assert (r.a[3] == 0xffff);
700 static void test_pcmpgtb_u (void)
702 uint8x8_encap_t s, t;
720 r.v = pcmpgtb_u (s.v, t.v);
721 assert (r.a[0] == 0x00);
722 assert (r.a[1] == 0x00);
723 assert (r.a[2] == 0x00);
724 assert (r.a[3] == 0x00);
725 assert (r.a[4] == 0x00);
726 assert (r.a[5] == 0xff);
727 assert (r.a[6] == 0xff);
728 assert (r.a[7] == 0xff);
731 static void test_pcmpgtw_s (void)
733 int32x2_encap_t s, t;
739 r.v = pcmpgtw_s (s.v, t.v);
740 assert (r.a[0] == -1);
741 assert (r.a[1] == 0);
744 static void test_pcmpgth_s (void)
746 int16x4_encap_t s, t;
756 r.v = pcmpgth_s (s.v, t.v);
757 assert (r.a[0] == 0);
758 assert (r.a[1] == 0);
759 assert (r.a[2] == 0);
760 assert (r.a[3] == -1);
763 static void test_pcmpgtb_s (void)
783 r.v = pcmpgtb_s (s.v, t.v);
784 assert (r.a[0] == -1);
785 assert (r.a[1] == -1);
786 assert (r.a[2] == -1);
787 assert (r.a[3] == 0);
788 assert (r.a[4] == 0);
789 assert (r.a[5] == 0);
790 assert (r.a[6] == -1);
791 assert (r.a[7] == -1);
794 static void test_pextrh_u (void)
802 r.v = pextrh_u (s.v, 1);
803 assert (r.a[0] == 41);
804 assert (r.a[1] == 0);
805 assert (r.a[2] == 0);
806 assert (r.a[3] == 0);
809 static void test_pextrh_s (void)
817 r.v = pextrh_s (s.v, 2);
818 assert (r.a[0] == -42);
819 assert (r.a[1] == 0);
820 assert (r.a[2] == 0);
821 assert (r.a[3] == 0);
824 static void test_pinsrh_0123_u (void)
826 uint16x4_encap_t s, t;
836 r.v = pinsrh_0_u (t.v, s.v);
837 r.v = pinsrh_1_u (r.v, s.v);
838 r.v = pinsrh_2_u (r.v, s.v);
839 r.v = pinsrh_3_u (r.v, s.v);
840 assert (r.a[0] == 42);
841 assert (r.a[1] == 42);
842 assert (r.a[2] == 42);
843 assert (r.a[3] == 42);
846 static void test_pinsrh_0123_s (void)
848 int16x4_encap_t s, t;
858 r.v = pinsrh_0_s (t.v, s.v);
859 r.v = pinsrh_1_s (r.v, s.v);
860 r.v = pinsrh_2_s (r.v, s.v);
861 r.v = pinsrh_3_s (r.v, s.v);
862 assert (r.a[0] == -42);
863 assert (r.a[1] == -42);
864 assert (r.a[2] == -42);
865 assert (r.a[3] == -42);
868 static void test_pmaddhw (void)
870 int16x4_encap_t s, t;
880 r.v = pmaddhw (s.v, t.v);
881 assert (r.a[0] == (-5*10 + -4*11));
882 assert (r.a[1] == (-3*12 + -2*13));
885 static void test_pmaxsh (void)
887 int16x4_encap_t s, t;
897 r.v = pmaxsh (s.v, t.v);
898 assert (r.a[0] == 20);
899 assert (r.a[1] == 40);
900 assert (r.a[2] == 10);
901 assert (r.a[3] == 50);
904 static void test_pmaxub (void)
906 uint8x8_encap_t s, t;
924 r.v = pmaxub (s.v, t.v);
925 assert (r.a[0] == 80);
926 assert (r.a[1] == 70);
927 assert (r.a[2] == 60);
928 assert (r.a[3] == 50);
929 assert (r.a[4] == 50);
930 assert (r.a[5] == 60);
931 assert (r.a[6] == 70);
932 assert (r.a[7] == 80);
935 static void test_pminsh (void)
937 int16x4_encap_t s, t;
947 r.v = pminsh (s.v, t.v);
948 assert (r.a[0] == -20);
949 assert (r.a[1] == -40);
950 assert (r.a[2] == -10);
951 assert (r.a[3] == -50);
954 static void test_pminub (void)
956 uint8x8_encap_t s, t;
974 r.v = pminub (s.v, t.v);
975 assert (r.a[0] == 10);
976 assert (r.a[1] == 20);
977 assert (r.a[2] == 30);
978 assert (r.a[3] == 40);
979 assert (r.a[4] == 40);
980 assert (r.a[5] == 30);
981 assert (r.a[6] == 20);
982 assert (r.a[7] == 10);
985 static void test_pmovmskb_u (void)
997 r.v = pmovmskb_u (s.v);
998 assert (r.a[0] == 0x55);
999 assert (r.a[1] == 0);
1000 assert (r.a[2] == 0);
1001 assert (r.a[3] == 0);
1002 assert (r.a[4] == 0);
1003 assert (r.a[5] == 0);
1004 assert (r.a[6] == 0);
1005 assert (r.a[7] == 0);
1008 static void test_pmovmskb_s (void)
1020 r.v = pmovmskb_s (s.v);
1021 assert (r.a[0] == 0x55);
1022 assert (r.a[1] == 0);
1023 assert (r.a[2] == 0);
1024 assert (r.a[3] == 0);
1025 assert (r.a[4] == 0);
1026 assert (r.a[5] == 0);
1027 assert (r.a[6] == 0);
1028 assert (r.a[7] == 0);
1031 static void test_pmulhuh (void)
1033 uint16x4_encap_t s, t;
1043 r.v = pmulhuh (s.v, t.v);
1044 assert (r.a[0] == 0x000f);
1045 assert (r.a[1] == 0x000f);
1046 assert (r.a[2] == 0x000f);
1047 assert (r.a[3] == 0x000f);
1050 static void test_pmulhh (void)
1052 int16x4_encap_t s, t;
1062 r.v = pmulhh (s.v, t.v);
1063 assert (r.a[0] == -16);
1064 assert (r.a[1] == -16);
1065 assert (r.a[2] == -16);
1066 assert (r.a[3] == -16);
1069 static void test_pmullh (void)
1071 int16x4_encap_t s, t;
1081 r.v = pmullh (s.v, t.v);
1082 assert (r.a[0] == 4096);
1083 assert (r.a[1] == 4096);
1084 assert (r.a[2] == 4096);
1085 assert (r.a[3] == 4096);
1088 static void test_pmuluw (void)
1090 uint32x2_encap_t s, t;
1092 s.a[0] = 0xdeadbeef;
1094 t.a[0] = 0x0f00baaa;
1096 r = pmuluw (s.v, t.v);
1097 assert (r == 0xd0cd08e1d1a70b6ull);
1100 static void test_pasubub (void)
1102 uint8x8_encap_t s, t;
1120 r.v = pasubub (s.v, t.v);
1121 assert (r.a[0] == 70);
1122 assert (r.a[1] == 50);
1123 assert (r.a[2] == 30);
1124 assert (r.a[3] == 10);
1125 assert (r.a[4] == 10);
1126 assert (r.a[5] == 30);
1127 assert (r.a[6] == 50);
1128 assert (r.a[7] == 70);
1131 static void test_biadd (void)
1144 assert (r.a[0] == 360);
1145 assert (r.a[1] == 0);
1146 assert (r.a[2] == 0);
1147 assert (r.a[3] == 0);
1150 static void test_psadbh (void)
1152 uint8x8_encap_t s, t;
1170 r.v = psadbh (s.v, t.v);
1171 assert (r.a[0] == 0x0140);
1172 assert (r.a[1] == 0);
1173 assert (r.a[2] == 0);
1174 assert (r.a[3] == 0);
1177 static void test_pshufh_u (void)
1189 r.v = pshufh_u (r.v, s.v, 0xe5);
1190 assert (r.a[0] == 2);
1191 assert (r.a[1] == 2);
1192 assert (r.a[2] == 3);
1193 assert (r.a[3] == 4);
1196 static void test_pshufh_s (void)
1208 r.v = pshufh_s (r.v, s.v, 0xe5);
1209 assert (r.a[0] == 2);
1210 assert (r.a[1] == 2);
1211 assert (r.a[2] == -3);
1212 assert (r.a[3] == 4);
1215 static void test_psllh_u (void)
1223 r.v = psllh_u (s.v, 1);
1224 assert (r.a[0] == 0xfffe);
1225 assert (r.a[1] == 0xfffe);
1226 assert (r.a[2] == 0xfffe);
1227 assert (r.a[3] == 0xfffe);
1230 static void test_psllw_u (void)
1234 s.a[0] = 0xffffffff;
1235 s.a[1] = 0xffffffff;
1236 r.v = psllw_u (s.v, 2);
1237 assert (r.a[0] == 0xfffffffc);
1238 assert (r.a[1] == 0xfffffffc);
1241 static void test_psllh_s (void)
1249 r.v = psllh_s (s.v, 1);
1250 assert (r.a[0] == -2);
1251 assert (r.a[1] == -2);
1252 assert (r.a[2] == -2);
1253 assert (r.a[3] == -2);
1256 static void test_psllw_s (void)
1262 r.v = psllw_s (s.v, 2);
1263 assert (r.a[0] == -4);
1264 assert (r.a[1] == -4);
1267 static void test_psrah_u (void)
1275 r.v = psrah_u (s.v, 1);
1276 assert (r.a[0] == 0xfff7);
1277 assert (r.a[1] == 0xfff7);
1278 assert (r.a[2] == 0xfff7);
1279 assert (r.a[3] == 0xfff7);
1282 static void test_psraw_u (void)
1286 s.a[0] = 0xffffffef;
1287 s.a[1] = 0xffffffef;
1288 r.v = psraw_u (s.v, 1);
1289 assert (r.a[0] == 0xfffffff7);
1290 assert (r.a[1] == 0xfffffff7);
1293 static void test_psrah_s (void)
1301 r.v = psrah_s (s.v, 1);
1302 assert (r.a[0] == -1);
1303 assert (r.a[1] == -1);
1304 assert (r.a[2] == -1);
1305 assert (r.a[3] == -1);
1308 static void test_psraw_s (void)
1314 r.v = psraw_s (s.v, 1);
1315 assert (r.a[0] == -1);
1316 assert (r.a[1] == -1);
1319 static void test_psrlh_u (void)
1327 r.v = psrlh_u (s.v, 1);
1328 assert (r.a[0] == 0x7ff7);
1329 assert (r.a[1] == 0x7ff7);
1330 assert (r.a[2] == 0x7ff7);
1331 assert (r.a[3] == 0x7ff7);
1334 static void test_psrlw_u (void)
1338 s.a[0] = 0xffffffef;
1339 s.a[1] = 0xffffffef;
1340 r.v = psrlw_u (s.v, 1);
1341 assert (r.a[0] == 0x7ffffff7);
1342 assert (r.a[1] == 0x7ffffff7);
1345 static void test_psrlh_s (void)
1353 r.v = psrlh_s (s.v, 1);
1354 assert (r.a[0] == INT16x4_MAX);
1355 assert (r.a[1] == INT16x4_MAX);
1356 assert (r.a[2] == INT16x4_MAX);
1357 assert (r.a[3] == INT16x4_MAX);
1360 static void test_psrlw_s (void)
1366 r.v = psrlw_s (s.v, 1);
1367 assert (r.a[0] == INT32x2_MAX);
1368 assert (r.a[1] == INT32x2_MAX);
1371 static void test_psubw_u (void)
1373 uint32x2_encap_t s, t;
1379 r.v = psubw_u (s.v, t.v);
1380 assert (r.a[0] == 1);
1381 assert (r.a[1] == 3);
1384 static void test_psubw_s (void)
1386 int32x2_encap_t s, t;
1392 r.v = psubw_s (s.v, t.v);
1393 assert (r.a[0] == -5);
1394 assert (r.a[1] == 3);
1397 static void test_psubh_u (void)
1399 uint16x4_encap_t s, t;
1409 r.v = psubh_u (s.v, t.v);
1410 assert (r.a[0] == 4);
1411 assert (r.a[1] == 4);
1412 assert (r.a[2] == 4);
1413 assert (r.a[3] == 4);
1416 static void test_psubh_s (void)
1418 int16x4_encap_t s, t;
1428 r.v = psubh_s (s.v, t.v);
1429 assert (r.a[0] == -11);
1430 assert (r.a[1] == -22);
1431 assert (r.a[2] == -33);
1432 assert (r.a[3] == -44);
1435 static void test_psubb_u (void)
1437 uint8x8_encap_t s, t;
1455 r.v = psubb_u (s.v, t.v);
1456 assert (r.a[0] == 9);
1457 assert (r.a[1] == 9);
1458 assert (r.a[2] == 9);
1459 assert (r.a[3] == 9);
1460 assert (r.a[4] == 9);
1461 assert (r.a[5] == 9);
1462 assert (r.a[6] == 9);
1463 assert (r.a[7] == 9);
1466 static void test_psubb_s (void)
1468 int8x8_encap_t s, t;
1486 r.v = psubb_s (s.v, t.v);
1487 assert (r.a[0] == -11);
1488 assert (r.a[1] == -22);
1489 assert (r.a[2] == -33);
1490 assert (r.a[3] == -44);
1491 assert (r.a[4] == -55);
1492 assert (r.a[5] == -66);
1493 assert (r.a[6] == -77);
1494 assert (r.a[7] == -88);
1497 static void test_psubd_u (void)
1499 uint64_t d = 789012;
1500 uint64_t e = 123456;
1503 assert (r == 665556);
1506 static void test_psubd_s (void)
1509 int64_t e = -789012;
1512 assert (r == 912468);
1515 static void test_psubsh (void)
1517 int16x4_encap_t s, t;
1523 t.a[0] = -INT16x4_MAX;
1524 t.a[1] = -INT16x4_MAX;
1525 t.a[2] = -INT16x4_MAX;
1526 t.a[3] = -INT16x4_MAX;
1527 r.v = psubsh (s.v, t.v);
1528 assert (r.a[0] == INT16x4_MAX - 1);
1529 assert (r.a[1] == INT16x4_MAX);
1530 assert (r.a[2] == INT16x4_MAX);
1531 assert (r.a[3] == INT16x4_MAX);
1534 static void test_psubsb (void)
1536 int8x8_encap_t s, t;
1546 t.a[0] = -INT8x8_MAX;
1547 t.a[1] = -INT8x8_MAX;
1548 t.a[2] = -INT8x8_MAX;
1549 t.a[3] = -INT8x8_MAX;
1550 t.a[4] = -INT8x8_MAX;
1551 t.a[5] = -INT8x8_MAX;
1552 t.a[6] = -INT8x8_MAX;
1553 t.a[7] = -INT8x8_MAX;
1554 r.v = psubsb (s.v, t.v);
1555 assert (r.a[0] == INT8x8_MAX - 6);
1556 assert (r.a[1] == INT8x8_MAX - 5);
1557 assert (r.a[2] == INT8x8_MAX - 4);
1558 assert (r.a[3] == INT8x8_MAX - 3);
1559 assert (r.a[4] == INT8x8_MAX - 2);
1560 assert (r.a[5] == INT8x8_MAX - 1);
1561 assert (r.a[6] == INT8x8_MAX);
1562 assert (r.a[7] == INT8x8_MAX);
1565 static void test_psubush (void)
1567 uint16x4_encap_t s, t;
1577 r.v = psubush (s.v, t.v);
1578 assert (r.a[0] == 0);
1579 assert (r.a[1] == 0);
1580 assert (r.a[2] == 0);
1581 assert (r.a[3] == 0);
1584 static void test_psubusb (void)
1586 uint8x8_encap_t s, t;
1604 r.v = psubusb (s.v, t.v);
1605 assert (r.a[0] == 0);
1606 assert (r.a[1] == 0);
1607 assert (r.a[2] == 0);
1608 assert (r.a[3] == 0);
1609 assert (r.a[4] == 0);
1610 assert (r.a[5] == 0);
1611 assert (r.a[6] == 0);
1612 assert (r.a[7] == 0);
1615 static void test_punpckhbh_s (void)
1617 int8x8_encap_t s, t;
1635 r.v = punpckhbh_s (s.v, t.v);
1636 assert (r.a[0] == -9);
1637 assert (r.a[1] == 10);
1638 assert (r.a[2] == -11);
1639 assert (r.a[3] == 12);
1640 assert (r.a[4] == -13);
1641 assert (r.a[5] == 14);
1642 assert (r.a[6] == -15);
1643 assert (r.a[7] == 16);
1646 static void test_punpckhbh_u (void)
1648 uint8x8_encap_t s, t;
1666 r.v = punpckhbh_u (s.v, t.v);
1667 assert (r.a[0] == 9);
1668 assert (r.a[1] == 10);
1669 assert (r.a[2] == 11);
1670 assert (r.a[3] == 12);
1671 assert (r.a[4] == 13);
1672 assert (r.a[5] == 14);
1673 assert (r.a[6] == 15);
1674 assert (r.a[7] == 16);
1677 static void test_punpckhhw_s (void)
1679 int16x4_encap_t s, t;
1689 r.v = punpckhhw_s (s.v, t.v);
1690 assert (r.a[0] == -5);
1691 assert (r.a[1] == -6);
1692 assert (r.a[2] == 7);
1693 assert (r.a[3] == 8);
1696 static void test_punpckhhw_u (void)
1698 uint16x4_encap_t s, t;
1708 r.v = punpckhhw_u (s.v, t.v);
1709 assert (r.a[0] == 5);
1710 assert (r.a[1] == 6);
1711 assert (r.a[2] == 7);
1712 assert (r.a[3] == 8);
1715 static void test_punpckhwd_s (void)
1717 int32x2_encap_t s, t;
1723 r.v = punpckhwd_s (s.v, t.v);
1724 assert (r.a[0] == 3);
1725 assert (r.a[1] == -4);
1728 static void test_punpckhwd_u (void)
1730 uint32x2_encap_t s, t;
1736 r.v = punpckhwd_u (s.v, t.v);
1737 assert (r.a[0] == 3);
1738 assert (r.a[1] == 4);
1741 static void test_punpcklbh_s (void)
1743 int8x8_encap_t s, t;
1761 r.v = punpcklbh_s (s.v, t.v);
1762 assert (r.a[0] == -1);
1763 assert (r.a[1] == 2);
1764 assert (r.a[2] == -3);
1765 assert (r.a[3] == 4);
1766 assert (r.a[4] == -5);
1767 assert (r.a[5] == 6);
1768 assert (r.a[6] == -7);
1769 assert (r.a[7] == 8);
1772 static void test_punpcklbh_u (void)
1774 uint8x8_encap_t s, t;
1792 r.v = punpcklbh_u (s.v, t.v);
1793 assert (r.a[0] == 1);
1794 assert (r.a[1] == 2);
1795 assert (r.a[2] == 3);
1796 assert (r.a[3] == 4);
1797 assert (r.a[4] == 5);
1798 assert (r.a[5] == 6);
1799 assert (r.a[6] == 7);
1800 assert (r.a[7] == 8);
1803 static void test_punpcklhw_s (void)
1805 int16x4_encap_t s, t;
1815 r.v = punpcklhw_s (s.v, t.v);
1816 assert (r.a[0] == -1);
1817 assert (r.a[1] == -2);
1818 assert (r.a[2] == 3);
1819 assert (r.a[3] == 4);
1822 static void test_punpcklhw_u (void)
1824 uint16x4_encap_t s, t;
1834 r.v = punpcklhw_u (s.v, t.v);
1835 assert (r.a[0] == 1);
1836 assert (r.a[1] == 2);
1837 assert (r.a[2] == 3);
1838 assert (r.a[3] == 4);
1841 static void test_punpcklwd_s (void)
1843 int32x2_encap_t s, t;
1849 r.v = punpcklwd_s (s.v, t.v);
1850 assert (r.a[0] == 1);
1851 assert (r.a[1] == -2);
1854 static void test_punpcklwd_u (void)
1856 uint32x2_encap_t s, t;
1862 r.v = punpcklwd_u (s.v, t.v);
1863 assert (r.a[0] == 1);
1864 assert (r.a[1] == 2);
1908 test_pinsrh_0123_u ();
1909 test_pinsrh_0123_s ();
1950 test_punpckhbh_s ();
1951 test_punpckhbh_u ();
1952 test_punpckhhw_s ();
1953 test_punpckhhw_u ();
1954 test_punpckhwd_s ();
1955 test_punpckhwd_u ();
1956 test_punpcklbh_s ();
1957 test_punpcklbh_u ();
1958 test_punpcklhw_s ();
1959 test_punpcklhw_u ();
1960 test_punpcklwd_s ();
1961 test_punpcklwd_u ();