1 /* Test cases for ST Microelectronics Loongson-2E/2F SIMD intrinsics.
2    Copyright (C) 2008 Free Software Foundation, Inc.
3    Contributed by CodeSourcery.
4 
5 This file is part of GCC.
6 
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.
11 
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.
16 
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/>.  */
20 
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)" } */
30 
31 #include "loongson.h"
32 #include <stdio.h>
33 #include <stdint.h>
34 #include <assert.h>
35 #include <limits.h>
36 
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;
43 
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
49 
test_packsswh(void)50 static void test_packsswh (void)
51 {
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);
63 }
64 
test_packsshb(void)65 static void test_packsshb (void)
66 {
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);
86 }
87 
test_packushb(void)88 static void test_packushb (void)
89 {
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);
109 }
110 
test_paddw_u(void)111 static void test_paddw_u (void)
112 {
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);
122 }
123 
test_paddw_s(void)124 static void test_paddw_s (void)
125 {
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);
135 }
136 
test_paddh_u(void)137 static void test_paddh_u (void)
138 {
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);
154 }
155 
test_paddh_s(void)156 static void test_paddh_s (void)
157 {
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);
173 }
174 
test_paddb_u(void)175 static void test_paddb_u (void)
176 {
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);
204 }
205 
test_paddb_s(void)206 static void test_paddb_s (void)
207 {
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);
235 }
236 
test_paddd_u(void)237 static void test_paddd_u (void)
238 {
239   uint64_t d = 123456;
240   uint64_t e = 789012;
241   uint64_t r;
242   r = paddd_u (d, e);
243   assert (r == 912468);
244 }
245 
test_paddd_s(void)246 static void test_paddd_s (void)
247 {
248   int64_t d = 123456;
249   int64_t e = -789012;
250   int64_t r;
251   r = paddd_s (d, e);
252   assert (r == -665556);
253 }
254 
test_paddsh(void)255 static void test_paddsh (void)
256 {
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);
272 }
273 
test_paddsb(void)274 static void test_paddsb (void)
275 {
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);
303 }
304 
test_paddush(void)305 static void test_paddush (void)
306 {
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);
322 }
323 
test_paddusb(void)324 static void test_paddusb (void)
325 {
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);
353 }
354 
test_pandn_ud(void)355 static void test_pandn_ud (void)
356 {
357   uint64_t d1 = 0x0000ffff0000ffffull;
358   uint64_t d2 = 0x0000ffff0000ffffull;
359   uint64_t r;
360   r = pandn_ud (d1, d2);
361   assert (r == 0);
362 }
363 
test_pandn_sd(void)364 static void test_pandn_sd (void)
365 {
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);
371 }
372 
test_pandn_uw(void)373 static void test_pandn_uw (void)
374 {
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);
384 }
385 
test_pandn_sw(void)386 static void test_pandn_sw (void)
387 {
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);
397 }
398 
test_pandn_uh(void)399 static void test_pandn_uh (void)
400 {
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);
416 }
417 
test_pandn_sh(void)418 static void test_pandn_sh (void)
419 {
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);
435 }
436 
test_pandn_ub(void)437 static void test_pandn_ub (void)
438 {
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);
466 }
467 
test_pandn_sb(void)468 static void test_pandn_sb (void)
469 {
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);
497 }
498 
test_pavgh(void)499 static void test_pavgh (void)
500 {
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);
516 }
517 
test_pavgb(void)518 static void test_pavgb (void)
519 {
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);
547 }
548 
test_pcmpeqw_u(void)549 static void test_pcmpeqw_u (void)
550 {
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);
560 }
561 
test_pcmpeqh_u(void)562 static void test_pcmpeqh_u (void)
563 {
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);
579 }
580 
test_pcmpeqb_u(void)581 static void test_pcmpeqb_u (void)
582 {
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);
610 }
611 
test_pcmpeqw_s(void)612 static void test_pcmpeqw_s (void)
613 {
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);
623 }
624 
test_pcmpeqh_s(void)625 static void test_pcmpeqh_s (void)
626 {
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);
642 }
643 
test_pcmpeqb_s(void)644 static void test_pcmpeqb_s (void)
645 {
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);
673 }
674 
test_pcmpgtw_u(void)675 static void test_pcmpgtw_u (void)
676 {
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);
686 }
687 
test_pcmpgth_u(void)688 static void test_pcmpgth_u (void)
689 {
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);
705 }
706 
test_pcmpgtb_u(void)707 static void test_pcmpgtb_u (void)
708 {
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);
736 }
737 
test_pcmpgtw_s(void)738 static void test_pcmpgtw_s (void)
739 {
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);
749 }
750 
test_pcmpgth_s(void)751 static void test_pcmpgth_s (void)
752 {
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);
768 }
769 
test_pcmpgtb_s(void)770 static void test_pcmpgtb_s (void)
771 {
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);
799 }
800 
test_pextrh_u(void)801 static void test_pextrh_u (void)
802 {
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);
814 }
815 
test_pextrh_s(void)816 static void test_pextrh_s (void)
817 {
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);
829 }
830 
test_pinsrh_0123_u(void)831 static void test_pinsrh_0123_u (void)
832 {
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);
851 }
852 
test_pinsrh_0123_s(void)853 static void test_pinsrh_0123_s (void)
854 {
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);
873 }
874 
test_pmaddhw(void)875 static void test_pmaddhw (void)
876 {
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));
890 }
891 
test_pmaxsh(void)892 static void test_pmaxsh (void)
893 {
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);
909 }
910 
test_pmaxub(void)911 static void test_pmaxub (void)
912 {
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);
940 }
941 
test_pminsh(void)942 static void test_pminsh (void)
943 {
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);
959 }
960 
test_pminub(void)961 static void test_pminub (void)
962 {
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);
990 }
991 
test_pmovmskb_u(void)992 static void test_pmovmskb_u (void)
993 {
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);
1013 }
1014 
test_pmovmskb_s(void)1015 static void test_pmovmskb_s (void)
1016 {
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);
1036 }
1037 
test_pmulhuh(void)1038 static void test_pmulhuh (void)
1039 {
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);
1055 }
1056 
test_pmulhh(void)1057 static void test_pmulhh (void)
1058 {
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);
1074 }
1075 
test_pmullh(void)1076 static void test_pmullh (void)
1077 {
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);
1093 }
1094 
test_pmuluw(void)1095 static void test_pmuluw (void)
1096 {
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);
1105 }
1106 
test_pasubub(void)1107 static void test_pasubub (void)
1108 {
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);
1136 }
1137 
test_biadd(void)1138 static void test_biadd (void)
1139 {
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);
1155 }
1156 
test_psadbh(void)1157 static void test_psadbh (void)
1158 {
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);
1182 }
1183 
test_pshufh_u(void)1184 static void test_pshufh_u (void)
1185 {
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);
1201 }
1202 
test_pshufh_s(void)1203 static void test_pshufh_s (void)
1204 {
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);
1220 }
1221 
test_psllh_u(void)1222 static void test_psllh_u (void)
1223 {
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);
1235 }
1236 
test_psllw_u(void)1237 static void test_psllw_u (void)
1238 {
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);
1246 }
1247 
test_psllh_s(void)1248 static void test_psllh_s (void)
1249 {
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);
1261 }
1262 
test_psllw_s(void)1263 static void test_psllw_s (void)
1264 {
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);
1272 }
1273 
test_psrah_u(void)1274 static void test_psrah_u (void)
1275 {
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);
1287 }
1288 
test_psraw_u(void)1289 static void test_psraw_u (void)
1290 {
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);
1298 }
1299 
test_psrah_s(void)1300 static void test_psrah_s (void)
1301 {
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);
1313 }
1314 
test_psraw_s(void)1315 static void test_psraw_s (void)
1316 {
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);
1324 }
1325 
test_psrlh_u(void)1326 static void test_psrlh_u (void)
1327 {
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);
1339 }
1340 
test_psrlw_u(void)1341 static void test_psrlw_u (void)
1342 {
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);
1350 }
1351 
test_psrlh_s(void)1352 static void test_psrlh_s (void)
1353 {
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);
1365 }
1366 
test_psrlw_s(void)1367 static void test_psrlw_s (void)
1368 {
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);
1376 }
1377 
test_psubw_u(void)1378 static void test_psubw_u (void)
1379 {
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);
1389 }
1390 
test_psubw_s(void)1391 static void test_psubw_s (void)
1392 {
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);
1402 }
1403 
test_psubh_u(void)1404 static void test_psubh_u (void)
1405 {
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);
1421 }
1422 
test_psubh_s(void)1423 static void test_psubh_s (void)
1424 {
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);
1440 }
1441 
test_psubb_u(void)1442 static void test_psubb_u (void)
1443 {
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);
1471 }
1472 
test_psubb_s(void)1473 static void test_psubb_s (void)
1474 {
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);
1502 }
1503 
test_psubd_u(void)1504 static void test_psubd_u (void)
1505 {
1506   uint64_t d = 789012;
1507   uint64_t e = 123456;
1508   uint64_t r;
1509   r = psubd_u (d, e);
1510   assert (r == 665556);
1511 }
1512 
test_psubd_s(void)1513 static void test_psubd_s (void)
1514 {
1515   int64_t d = 123456;
1516   int64_t e = -789012;
1517   int64_t r;
1518   r = psubd_s (d, e);
1519   assert (r == 912468);
1520 }
1521 
test_psubsh(void)1522 static void test_psubsh (void)
1523 {
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);
1539 }
1540 
test_psubsb(void)1541 static void test_psubsb (void)
1542 {
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);
1570 }
1571 
test_psubush(void)1572 static void test_psubush (void)
1573 {
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);
1589 }
1590 
test_psubusb(void)1591 static void test_psubusb (void)
1592 {
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);
1620 }
1621 
test_punpckhbh_s(void)1622 static void test_punpckhbh_s (void)
1623 {
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);
1651 }
1652 
test_punpckhbh_u(void)1653 static void test_punpckhbh_u (void)
1654 {
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);
1682 }
1683 
test_punpckhhw_s(void)1684 static void test_punpckhhw_s (void)
1685 {
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);
1701 }
1702 
test_punpckhhw_u(void)1703 static void test_punpckhhw_u (void)
1704 {
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);
1720 }
1721 
test_punpckhwd_s(void)1722 static void test_punpckhwd_s (void)
1723 {
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);
1733 }
1734 
test_punpckhwd_u(void)1735 static void test_punpckhwd_u (void)
1736 {
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);
1746 }
1747 
test_punpcklbh_s(void)1748 static void test_punpcklbh_s (void)
1749 {
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);
1777 }
1778 
test_punpcklbh_u(void)1779 static void test_punpcklbh_u (void)
1780 {
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);
1808 }
1809 
test_punpcklhw_s(void)1810 static void test_punpcklhw_s (void)
1811 {
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);
1827 }
1828 
test_punpcklhw_u(void)1829 static void test_punpcklhw_u (void)
1830 {
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);
1846 }
1847 
test_punpcklwd_s(void)1848 static void test_punpcklwd_s (void)
1849 {
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);
1859 }
1860 
test_punpcklwd_u(void)1861 static void test_punpcklwd_u (void)
1862 {
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);
1872 }
1873 
main(void)1874 int main (void)
1875 {
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;
1970 }
1971