2009-07-17 Richard Guenther <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gcc.target / mips / loongson-simd.c
blobae3565f479507d970daf8ba5574bf2f02c05fb59
1 /* Test cases for ST Microelectronics Loongson-2E/2F SIMD intrinsics.
2 Copyright (C) 2008 Free Software Foundation, Inc.
3 Contributed by CodeSourcery.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
21 /* { dg-do run } */
22 /* loongson.h does not handle or check for MIPS16ness. There doesn't
23 seem any good reason for it to, given that the Loongson processors
24 do not support MIPS16. */
25 /* { dg-options "isa=loongson -mhard-float -mno-mips16 -flax-vector-conversions" } */
27 #include "loongson.h"
28 #include <stdio.h>
29 #include <stdint.h>
30 #include <assert.h>
31 #include <limits.h>
33 typedef union { int32x2_t v; int32_t a[2]; } int32x2_encap_t;
34 typedef union { int16x4_t v; int16_t a[4]; } int16x4_encap_t;
35 typedef union { int8x8_t v; int8_t a[8]; } int8x8_encap_t;
36 typedef union { uint32x2_t v; uint32_t a[2]; } uint32x2_encap_t;
37 typedef union { uint16x4_t v; uint16_t a[4]; } uint16x4_encap_t;
38 typedef union { uint8x8_t v; uint8_t a[8]; } uint8x8_encap_t;
40 #define UINT16x4_MAX USHRT_MAX
41 #define UINT8x8_MAX UCHAR_MAX
42 #define INT8x8_MAX SCHAR_MAX
43 #define INT16x4_MAX SHRT_MAX
44 #define INT32x2_MAX INT_MAX
46 static void test_packsswh (void)
48 int32x2_encap_t s, t;
49 int16x4_encap_t r;
50 s.a[0] = INT16x4_MAX - 2;
51 s.a[1] = INT16x4_MAX - 1;
52 t.a[0] = INT16x4_MAX;
53 t.a[1] = INT16x4_MAX + 1;
54 r.v = packsswh (s.v, t.v);
55 assert (r.a[0] == INT16x4_MAX - 2);
56 assert (r.a[1] == INT16x4_MAX - 1);
57 assert (r.a[2] == INT16x4_MAX);
58 assert (r.a[3] == INT16x4_MAX);
61 static void test_packsshb (void)
63 int16x4_encap_t s, t;
64 int8x8_encap_t r;
65 s.a[0] = INT8x8_MAX - 6;
66 s.a[1] = INT8x8_MAX - 5;
67 s.a[2] = INT8x8_MAX - 4;
68 s.a[3] = INT8x8_MAX - 3;
69 t.a[0] = INT8x8_MAX - 2;
70 t.a[1] = INT8x8_MAX - 1;
71 t.a[2] = INT8x8_MAX;
72 t.a[3] = INT8x8_MAX + 1;
73 r.v = packsshb (s.v, t.v);
74 assert (r.a[0] == INT8x8_MAX - 6);
75 assert (r.a[1] == INT8x8_MAX - 5);
76 assert (r.a[2] == INT8x8_MAX - 4);
77 assert (r.a[3] == INT8x8_MAX - 3);
78 assert (r.a[4] == INT8x8_MAX - 2);
79 assert (r.a[5] == INT8x8_MAX - 1);
80 assert (r.a[6] == INT8x8_MAX);
81 assert (r.a[7] == INT8x8_MAX);
84 static void test_packushb (void)
86 uint16x4_encap_t s, t;
87 uint8x8_encap_t r;
88 s.a[0] = UINT8x8_MAX - 6;
89 s.a[1] = UINT8x8_MAX - 5;
90 s.a[2] = UINT8x8_MAX - 4;
91 s.a[3] = UINT8x8_MAX - 3;
92 t.a[0] = UINT8x8_MAX - 2;
93 t.a[1] = UINT8x8_MAX - 1;
94 t.a[2] = UINT8x8_MAX;
95 t.a[3] = UINT8x8_MAX + 1;
96 r.v = packushb (s.v, t.v);
97 assert (r.a[0] == UINT8x8_MAX - 6);
98 assert (r.a[1] == UINT8x8_MAX - 5);
99 assert (r.a[2] == UINT8x8_MAX - 4);
100 assert (r.a[3] == UINT8x8_MAX - 3);
101 assert (r.a[4] == UINT8x8_MAX - 2);
102 assert (r.a[5] == UINT8x8_MAX - 1);
103 assert (r.a[6] == UINT8x8_MAX);
104 assert (r.a[7] == UINT8x8_MAX);
107 static void test_paddw_u (void)
109 uint32x2_encap_t s, t;
110 uint32x2_encap_t r;
111 s.a[0] = 1;
112 s.a[1] = 2;
113 t.a[0] = 3;
114 t.a[1] = 4;
115 r.v = paddw_u (s.v, t.v);
116 assert (r.a[0] == 4);
117 assert (r.a[1] == 6);
120 static void test_paddw_s (void)
122 int32x2_encap_t s, t;
123 int32x2_encap_t r;
124 s.a[0] = -2;
125 s.a[1] = -1;
126 t.a[0] = 3;
127 t.a[1] = 4;
128 r.v = paddw_s (s.v, t.v);
129 assert (r.a[0] == 1);
130 assert (r.a[1] == 3);
133 static void test_paddh_u (void)
135 uint16x4_encap_t s, t;
136 uint16x4_encap_t r;
137 s.a[0] = 1;
138 s.a[1] = 2;
139 s.a[2] = 3;
140 s.a[3] = 4;
141 t.a[0] = 5;
142 t.a[1] = 6;
143 t.a[2] = 7;
144 t.a[3] = 8;
145 r.v = paddh_u (s.v, t.v);
146 assert (r.a[0] == 6);
147 assert (r.a[1] == 8);
148 assert (r.a[2] == 10);
149 assert (r.a[3] == 12);
152 static void test_paddh_s (void)
154 int16x4_encap_t s, t;
155 int16x4_encap_t r;
156 s.a[0] = -10;
157 s.a[1] = -20;
158 s.a[2] = -30;
159 s.a[3] = -40;
160 t.a[0] = 1;
161 t.a[1] = 2;
162 t.a[2] = 3;
163 t.a[3] = 4;
164 r.v = paddh_s (s.v, t.v);
165 assert (r.a[0] == -9);
166 assert (r.a[1] == -18);
167 assert (r.a[2] == -27);
168 assert (r.a[3] == -36);
171 static void test_paddb_u (void)
173 uint8x8_encap_t s, t;
174 uint8x8_encap_t r;
175 s.a[0] = 1;
176 s.a[1] = 2;
177 s.a[2] = 3;
178 s.a[3] = 4;
179 s.a[4] = 5;
180 s.a[5] = 6;
181 s.a[6] = 7;
182 s.a[7] = 8;
183 t.a[0] = 9;
184 t.a[1] = 10;
185 t.a[2] = 11;
186 t.a[3] = 12;
187 t.a[4] = 13;
188 t.a[5] = 14;
189 t.a[6] = 15;
190 t.a[7] = 16;
191 r.v = paddb_u (s.v, t.v);
192 assert (r.a[0] == 10);
193 assert (r.a[1] == 12);
194 assert (r.a[2] == 14);
195 assert (r.a[3] == 16);
196 assert (r.a[4] == 18);
197 assert (r.a[5] == 20);
198 assert (r.a[6] == 22);
199 assert (r.a[7] == 24);
202 static void test_paddb_s (void)
204 int8x8_encap_t s, t;
205 int8x8_encap_t r;
206 s.a[0] = -10;
207 s.a[1] = -20;
208 s.a[2] = -30;
209 s.a[3] = -40;
210 s.a[4] = -50;
211 s.a[5] = -60;
212 s.a[6] = -70;
213 s.a[7] = -80;
214 t.a[0] = 1;
215 t.a[1] = 2;
216 t.a[2] = 3;
217 t.a[3] = 4;
218 t.a[4] = 5;
219 t.a[5] = 6;
220 t.a[6] = 7;
221 t.a[7] = 8;
222 r.v = paddb_s (s.v, t.v);
223 assert (r.a[0] == -9);
224 assert (r.a[1] == -18);
225 assert (r.a[2] == -27);
226 assert (r.a[3] == -36);
227 assert (r.a[4] == -45);
228 assert (r.a[5] == -54);
229 assert (r.a[6] == -63);
230 assert (r.a[7] == -72);
233 static void test_paddd_u (void)
235 uint64_t d = 123456;
236 uint64_t e = 789012;
237 uint64_t r;
238 r = paddd_u (d, e);
239 assert (r == 912468);
242 static void test_paddd_s (void)
244 int64_t d = 123456;
245 int64_t e = -789012;
246 int64_t r;
247 r = paddd_s (d, e);
248 assert (r == -665556);
251 static void test_paddsh (void)
253 int16x4_encap_t s, t;
254 int16x4_encap_t r;
255 s.a[0] = -1;
256 s.a[1] = 0;
257 s.a[2] = 1;
258 s.a[3] = 2;
259 t.a[0] = INT16x4_MAX;
260 t.a[1] = INT16x4_MAX;
261 t.a[2] = INT16x4_MAX;
262 t.a[3] = INT16x4_MAX;
263 r.v = paddsh (s.v, t.v);
264 assert (r.a[0] == INT16x4_MAX - 1);
265 assert (r.a[1] == INT16x4_MAX);
266 assert (r.a[2] == INT16x4_MAX);
267 assert (r.a[3] == INT16x4_MAX);
270 static void test_paddsb (void)
272 int8x8_encap_t s, t;
273 int8x8_encap_t r;
274 s.a[0] = -6;
275 s.a[1] = -5;
276 s.a[2] = -4;
277 s.a[3] = -3;
278 s.a[4] = -2;
279 s.a[5] = -1;
280 s.a[6] = 0;
281 s.a[7] = 1;
282 t.a[0] = INT8x8_MAX;
283 t.a[1] = INT8x8_MAX;
284 t.a[2] = INT8x8_MAX;
285 t.a[3] = INT8x8_MAX;
286 t.a[4] = INT8x8_MAX;
287 t.a[5] = INT8x8_MAX;
288 t.a[6] = INT8x8_MAX;
289 t.a[7] = INT8x8_MAX;
290 r.v = paddsb (s.v, t.v);
291 assert (r.a[0] == INT8x8_MAX - 6);
292 assert (r.a[1] == INT8x8_MAX - 5);
293 assert (r.a[2] == INT8x8_MAX - 4);
294 assert (r.a[3] == INT8x8_MAX - 3);
295 assert (r.a[4] == INT8x8_MAX - 2);
296 assert (r.a[5] == INT8x8_MAX - 1);
297 assert (r.a[6] == INT8x8_MAX);
298 assert (r.a[7] == INT8x8_MAX);
301 static void test_paddush (void)
303 uint16x4_encap_t s, t;
304 uint16x4_encap_t r;
305 s.a[0] = 0;
306 s.a[1] = 1;
307 s.a[2] = 0;
308 s.a[3] = 1;
309 t.a[0] = UINT16x4_MAX;
310 t.a[1] = UINT16x4_MAX;
311 t.a[2] = UINT16x4_MAX;
312 t.a[3] = UINT16x4_MAX;
313 r.v = paddush (s.v, t.v);
314 assert (r.a[0] == UINT16x4_MAX);
315 assert (r.a[1] == UINT16x4_MAX);
316 assert (r.a[2] == UINT16x4_MAX);
317 assert (r.a[3] == UINT16x4_MAX);
320 static void test_paddusb (void)
322 uint8x8_encap_t s, t;
323 uint8x8_encap_t r;
324 s.a[0] = 0;
325 s.a[1] = 1;
326 s.a[2] = 0;
327 s.a[3] = 1;
328 s.a[4] = 0;
329 s.a[5] = 1;
330 s.a[6] = 0;
331 s.a[7] = 1;
332 t.a[0] = UINT8x8_MAX;
333 t.a[1] = UINT8x8_MAX;
334 t.a[2] = UINT8x8_MAX;
335 t.a[3] = UINT8x8_MAX;
336 t.a[4] = UINT8x8_MAX;
337 t.a[5] = UINT8x8_MAX;
338 t.a[6] = UINT8x8_MAX;
339 t.a[7] = UINT8x8_MAX;
340 r.v = paddusb (s.v, t.v);
341 assert (r.a[0] == UINT8x8_MAX);
342 assert (r.a[1] == UINT8x8_MAX);
343 assert (r.a[2] == UINT8x8_MAX);
344 assert (r.a[3] == UINT8x8_MAX);
345 assert (r.a[4] == UINT8x8_MAX);
346 assert (r.a[5] == UINT8x8_MAX);
347 assert (r.a[6] == UINT8x8_MAX);
348 assert (r.a[7] == UINT8x8_MAX);
351 static void test_pandn_ud (void)
353 uint64_t d1 = 0x0000ffff0000ffffull;
354 uint64_t d2 = 0x0000ffff0000ffffull;
355 uint64_t r;
356 r = pandn_ud (d1, d2);
357 assert (r == 0);
360 static void test_pandn_sd (void)
362 int64_t d1 = (int64_t) 0x0000000000000000ull;
363 int64_t d2 = (int64_t) 0xfffffffffffffffeull;
364 int64_t r;
365 r = pandn_sd (d1, d2);
366 assert (r == -2);
369 static void test_pandn_uw (void)
371 uint32x2_encap_t s, t;
372 uint32x2_encap_t r;
373 s.a[0] = 0xffffffff;
374 s.a[1] = 0x00000000;
375 t.a[0] = 0x00000000;
376 t.a[1] = 0xffffffff;
377 r.v = pandn_uw (s.v, t.v);
378 assert (r.a[0] == 0x00000000);
379 assert (r.a[1] == 0xffffffff);
382 static void test_pandn_sw (void)
384 int32x2_encap_t s, t;
385 int32x2_encap_t r;
386 s.a[0] = 0xffffffff;
387 s.a[1] = 0x00000000;
388 t.a[0] = 0xffffffff;
389 t.a[1] = 0xfffffffe;
390 r.v = pandn_sw (s.v, t.v);
391 assert (r.a[0] == 0);
392 assert (r.a[1] == -2);
395 static void test_pandn_uh (void)
397 uint16x4_encap_t s, t;
398 uint16x4_encap_t r;
399 s.a[0] = 0xffff;
400 s.a[1] = 0x0000;
401 s.a[2] = 0xffff;
402 s.a[3] = 0x0000;
403 t.a[0] = 0x0000;
404 t.a[1] = 0xffff;
405 t.a[2] = 0x0000;
406 t.a[3] = 0xffff;
407 r.v = pandn_uh (s.v, t.v);
408 assert (r.a[0] == 0x0000);
409 assert (r.a[1] == 0xffff);
410 assert (r.a[2] == 0x0000);
411 assert (r.a[3] == 0xffff);
414 static void test_pandn_sh (void)
416 int16x4_encap_t s, t;
417 int16x4_encap_t r;
418 s.a[0] = 0xffff;
419 s.a[1] = 0x0000;
420 s.a[2] = 0xffff;
421 s.a[3] = 0x0000;
422 t.a[0] = 0xffff;
423 t.a[1] = 0xfffe;
424 t.a[2] = 0xffff;
425 t.a[3] = 0xfffe;
426 r.v = pandn_sh (s.v, t.v);
427 assert (r.a[0] == 0);
428 assert (r.a[1] == -2);
429 assert (r.a[2] == 0);
430 assert (r.a[3] == -2);
433 static void test_pandn_ub (void)
435 uint8x8_encap_t s, t;
436 uint8x8_encap_t r;
437 s.a[0] = 0xff;
438 s.a[1] = 0x00;
439 s.a[2] = 0xff;
440 s.a[3] = 0x00;
441 s.a[4] = 0xff;
442 s.a[5] = 0x00;
443 s.a[6] = 0xff;
444 s.a[7] = 0x00;
445 t.a[0] = 0x00;
446 t.a[1] = 0xff;
447 t.a[2] = 0x00;
448 t.a[3] = 0xff;
449 t.a[4] = 0x00;
450 t.a[5] = 0xff;
451 t.a[6] = 0x00;
452 t.a[7] = 0xff;
453 r.v = pandn_ub (s.v, t.v);
454 assert (r.a[0] == 0x00);
455 assert (r.a[1] == 0xff);
456 assert (r.a[2] == 0x00);
457 assert (r.a[3] == 0xff);
458 assert (r.a[4] == 0x00);
459 assert (r.a[5] == 0xff);
460 assert (r.a[6] == 0x00);
461 assert (r.a[7] == 0xff);
464 static void test_pandn_sb (void)
466 int8x8_encap_t s, t;
467 int8x8_encap_t r;
468 s.a[0] = 0xff;
469 s.a[1] = 0x00;
470 s.a[2] = 0xff;
471 s.a[3] = 0x00;
472 s.a[4] = 0xff;
473 s.a[5] = 0x00;
474 s.a[6] = 0xff;
475 s.a[7] = 0x00;
476 t.a[0] = 0xff;
477 t.a[1] = 0xfe;
478 t.a[2] = 0xff;
479 t.a[3] = 0xfe;
480 t.a[4] = 0xff;
481 t.a[5] = 0xfe;
482 t.a[6] = 0xff;
483 t.a[7] = 0xfe;
484 r.v = pandn_sb (s.v, t.v);
485 assert (r.a[0] == 0);
486 assert (r.a[1] == -2);
487 assert (r.a[2] == 0);
488 assert (r.a[3] == -2);
489 assert (r.a[4] == 0);
490 assert (r.a[5] == -2);
491 assert (r.a[6] == 0);
492 assert (r.a[7] == -2);
495 static void test_pavgh (void)
497 uint16x4_encap_t s, t;
498 uint16x4_encap_t r;
499 s.a[0] = 1;
500 s.a[1] = 2;
501 s.a[2] = 3;
502 s.a[3] = 4;
503 t.a[0] = 5;
504 t.a[1] = 6;
505 t.a[2] = 7;
506 t.a[3] = 8;
507 r.v = pavgh (s.v, t.v);
508 assert (r.a[0] == 3);
509 assert (r.a[1] == 4);
510 assert (r.a[2] == 5);
511 assert (r.a[3] == 6);
514 static void test_pavgb (void)
516 uint8x8_encap_t s, t;
517 uint8x8_encap_t r;
518 s.a[0] = 1;
519 s.a[1] = 2;
520 s.a[2] = 3;
521 s.a[3] = 4;
522 s.a[4] = 1;
523 s.a[5] = 2;
524 s.a[6] = 3;
525 s.a[7] = 4;
526 t.a[0] = 5;
527 t.a[1] = 6;
528 t.a[2] = 7;
529 t.a[3] = 8;
530 t.a[4] = 5;
531 t.a[5] = 6;
532 t.a[6] = 7;
533 t.a[7] = 8;
534 r.v = pavgb (s.v, t.v);
535 assert (r.a[0] == 3);
536 assert (r.a[1] == 4);
537 assert (r.a[2] == 5);
538 assert (r.a[3] == 6);
539 assert (r.a[4] == 3);
540 assert (r.a[5] == 4);
541 assert (r.a[6] == 5);
542 assert (r.a[7] == 6);
545 static void test_pcmpeqw_u (void)
547 uint32x2_encap_t s, t;
548 uint32x2_encap_t r;
549 s.a[0] = 42;
550 s.a[1] = 43;
551 t.a[0] = 43;
552 t.a[1] = 43;
553 r.v = pcmpeqw_u (s.v, t.v);
554 assert (r.a[0] == 0x00000000);
555 assert (r.a[1] == 0xffffffff);
558 static void test_pcmpeqh_u (void)
560 uint16x4_encap_t s, t;
561 uint16x4_encap_t r;
562 s.a[0] = 42;
563 s.a[1] = 43;
564 s.a[2] = 42;
565 s.a[3] = 43;
566 t.a[0] = 43;
567 t.a[1] = 43;
568 t.a[2] = 43;
569 t.a[3] = 43;
570 r.v = pcmpeqh_u (s.v, t.v);
571 assert (r.a[0] == 0x0000);
572 assert (r.a[1] == 0xffff);
573 assert (r.a[2] == 0x0000);
574 assert (r.a[3] == 0xffff);
577 static void test_pcmpeqb_u (void)
579 uint8x8_encap_t s, t;
580 uint8x8_encap_t r;
581 s.a[0] = 42;
582 s.a[1] = 43;
583 s.a[2] = 42;
584 s.a[3] = 43;
585 s.a[4] = 42;
586 s.a[5] = 43;
587 s.a[6] = 42;
588 s.a[7] = 43;
589 t.a[0] = 43;
590 t.a[1] = 43;
591 t.a[2] = 43;
592 t.a[3] = 43;
593 t.a[4] = 43;
594 t.a[5] = 43;
595 t.a[6] = 43;
596 t.a[7] = 43;
597 r.v = pcmpeqb_u (s.v, t.v);
598 assert (r.a[0] == 0x00);
599 assert (r.a[1] == 0xff);
600 assert (r.a[2] == 0x00);
601 assert (r.a[3] == 0xff);
602 assert (r.a[4] == 0x00);
603 assert (r.a[5] == 0xff);
604 assert (r.a[6] == 0x00);
605 assert (r.a[7] == 0xff);
608 static void test_pcmpeqw_s (void)
610 int32x2_encap_t s, t;
611 int32x2_encap_t r;
612 s.a[0] = -42;
613 s.a[1] = -42;
614 t.a[0] = 42;
615 t.a[1] = -42;
616 r.v = pcmpeqw_s (s.v, t.v);
617 assert (r.a[0] == 0);
618 assert (r.a[1] == -1);
621 static void test_pcmpeqh_s (void)
623 int16x4_encap_t s, t;
624 int16x4_encap_t r;
625 s.a[0] = -42;
626 s.a[1] = -42;
627 s.a[2] = -42;
628 s.a[3] = -42;
629 t.a[0] = 42;
630 t.a[1] = -42;
631 t.a[2] = 42;
632 t.a[3] = -42;
633 r.v = pcmpeqh_s (s.v, t.v);
634 assert (r.a[0] == 0);
635 assert (r.a[1] == -1);
636 assert (r.a[2] == 0);
637 assert (r.a[3] == -1);
640 static void test_pcmpeqb_s (void)
642 int8x8_encap_t s, t;
643 int8x8_encap_t r;
644 s.a[0] = -42;
645 s.a[1] = -42;
646 s.a[2] = -42;
647 s.a[3] = -42;
648 s.a[4] = -42;
649 s.a[5] = -42;
650 s.a[6] = -42;
651 s.a[7] = -42;
652 t.a[0] = 42;
653 t.a[1] = -42;
654 t.a[2] = 42;
655 t.a[3] = -42;
656 t.a[4] = 42;
657 t.a[5] = -42;
658 t.a[6] = 42;
659 t.a[7] = -42;
660 r.v = pcmpeqb_s (s.v, t.v);
661 assert (r.a[0] == 0);
662 assert (r.a[1] == -1);
663 assert (r.a[2] == 0);
664 assert (r.a[3] == -1);
665 assert (r.a[4] == 0);
666 assert (r.a[5] == -1);
667 assert (r.a[6] == 0);
668 assert (r.a[7] == -1);
671 static void test_pcmpgtw_u (void)
673 uint32x2_encap_t s, t;
674 uint32x2_encap_t r;
675 s.a[0] = 42;
676 s.a[1] = 43;
677 t.a[0] = 43;
678 t.a[1] = 42;
679 r.v = pcmpgtw_u (s.v, t.v);
680 assert (r.a[0] == 0x00000000);
681 assert (r.a[1] == 0xffffffff);
684 static void test_pcmpgth_u (void)
686 uint16x4_encap_t s, t;
687 uint16x4_encap_t r;
688 s.a[0] = 40;
689 s.a[1] = 41;
690 s.a[2] = 42;
691 s.a[3] = 43;
692 t.a[0] = 40;
693 t.a[1] = 41;
694 t.a[2] = 43;
695 t.a[3] = 42;
696 r.v = pcmpgth_u (s.v, t.v);
697 assert (r.a[0] == 0x0000);
698 assert (r.a[1] == 0x0000);
699 assert (r.a[2] == 0x0000);
700 assert (r.a[3] == 0xffff);
703 static void test_pcmpgtb_u (void)
705 uint8x8_encap_t s, t;
706 uint8x8_encap_t r;
707 s.a[0] = 40;
708 s.a[1] = 41;
709 s.a[2] = 42;
710 s.a[3] = 43;
711 s.a[4] = 44;
712 s.a[5] = 45;
713 s.a[6] = 46;
714 s.a[7] = 47;
715 t.a[0] = 48;
716 t.a[1] = 47;
717 t.a[2] = 46;
718 t.a[3] = 45;
719 t.a[4] = 44;
720 t.a[5] = 43;
721 t.a[6] = 42;
722 t.a[7] = 41;
723 r.v = pcmpgtb_u (s.v, t.v);
724 assert (r.a[0] == 0x00);
725 assert (r.a[1] == 0x00);
726 assert (r.a[2] == 0x00);
727 assert (r.a[3] == 0x00);
728 assert (r.a[4] == 0x00);
729 assert (r.a[5] == 0xff);
730 assert (r.a[6] == 0xff);
731 assert (r.a[7] == 0xff);
734 static void test_pcmpgtw_s (void)
736 int32x2_encap_t s, t;
737 int32x2_encap_t r;
738 s.a[0] = 42;
739 s.a[1] = -42;
740 t.a[0] = -42;
741 t.a[1] = -42;
742 r.v = pcmpgtw_s (s.v, t.v);
743 assert (r.a[0] == -1);
744 assert (r.a[1] == 0);
747 static void test_pcmpgth_s (void)
749 int16x4_encap_t s, t;
750 int16x4_encap_t r;
751 s.a[0] = -42;
752 s.a[1] = -42;
753 s.a[2] = -42;
754 s.a[3] = -42;
755 t.a[0] = 42;
756 t.a[1] = 43;
757 t.a[2] = 44;
758 t.a[3] = -43;
759 r.v = pcmpgth_s (s.v, t.v);
760 assert (r.a[0] == 0);
761 assert (r.a[1] == 0);
762 assert (r.a[2] == 0);
763 assert (r.a[3] == -1);
766 static void test_pcmpgtb_s (void)
768 int8x8_encap_t s, t;
769 int8x8_encap_t r;
770 s.a[0] = -42;
771 s.a[1] = -42;
772 s.a[2] = -42;
773 s.a[3] = -42;
774 s.a[4] = 42;
775 s.a[5] = 42;
776 s.a[6] = 42;
777 s.a[7] = 42;
778 t.a[0] = -45;
779 t.a[1] = -44;
780 t.a[2] = -43;
781 t.a[3] = -42;
782 t.a[4] = 42;
783 t.a[5] = 43;
784 t.a[6] = 41;
785 t.a[7] = 40;
786 r.v = pcmpgtb_s (s.v, t.v);
787 assert (r.a[0] == -1);
788 assert (r.a[1] == -1);
789 assert (r.a[2] == -1);
790 assert (r.a[3] == 0);
791 assert (r.a[4] == 0);
792 assert (r.a[5] == 0);
793 assert (r.a[6] == -1);
794 assert (r.a[7] == -1);
797 static void test_pextrh_u (void)
799 uint16x4_encap_t s;
800 uint16x4_encap_t r;
801 s.a[0] = 40;
802 s.a[1] = 41;
803 s.a[2] = 42;
804 s.a[3] = 43;
805 r.v = pextrh_u (s.v, 1);
806 assert (r.a[0] == 41);
807 assert (r.a[1] == 0);
808 assert (r.a[2] == 0);
809 assert (r.a[3] == 0);
812 static void test_pextrh_s (void)
814 int16x4_encap_t s;
815 int16x4_encap_t r;
816 s.a[0] = -40;
817 s.a[1] = -41;
818 s.a[2] = -42;
819 s.a[3] = -43;
820 r.v = pextrh_s (s.v, 2);
821 assert (r.a[0] == -42);
822 assert (r.a[1] == 0);
823 assert (r.a[2] == 0);
824 assert (r.a[3] == 0);
827 static void test_pinsrh_0123_u (void)
829 uint16x4_encap_t s, t;
830 uint16x4_encap_t r;
831 s.a[0] = 42;
832 s.a[1] = 0;
833 s.a[2] = 0;
834 s.a[3] = 0;
835 t.a[0] = 0;
836 t.a[1] = 0;
837 t.a[2] = 0;
838 t.a[3] = 0;
839 r.v = pinsrh_0_u (t.v, s.v);
840 r.v = pinsrh_1_u (r.v, s.v);
841 r.v = pinsrh_2_u (r.v, s.v);
842 r.v = pinsrh_3_u (r.v, s.v);
843 assert (r.a[0] == 42);
844 assert (r.a[1] == 42);
845 assert (r.a[2] == 42);
846 assert (r.a[3] == 42);
849 static void test_pinsrh_0123_s (void)
851 int16x4_encap_t s, t;
852 int16x4_encap_t r;
853 s.a[0] = -42;
854 s.a[1] = 0;
855 s.a[2] = 0;
856 s.a[3] = 0;
857 t.a[0] = 0;
858 t.a[1] = 0;
859 t.a[2] = 0;
860 t.a[3] = 0;
861 r.v = pinsrh_0_s (t.v, s.v);
862 r.v = pinsrh_1_s (r.v, s.v);
863 r.v = pinsrh_2_s (r.v, s.v);
864 r.v = pinsrh_3_s (r.v, s.v);
865 assert (r.a[0] == -42);
866 assert (r.a[1] == -42);
867 assert (r.a[2] == -42);
868 assert (r.a[3] == -42);
871 static void test_pmaddhw (void)
873 int16x4_encap_t s, t;
874 int32x2_encap_t r;
875 s.a[0] = -5;
876 s.a[1] = -4;
877 s.a[2] = -3;
878 s.a[3] = -2;
879 t.a[0] = 10;
880 t.a[1] = 11;
881 t.a[2] = 12;
882 t.a[3] = 13;
883 r.v = pmaddhw (s.v, t.v);
884 assert (r.a[0] == (-5*10 + -4*11));
885 assert (r.a[1] == (-3*12 + -2*13));
888 static void test_pmaxsh (void)
890 int16x4_encap_t s, t;
891 int16x4_encap_t r;
892 s.a[0] = -20;
893 s.a[1] = 40;
894 s.a[2] = -10;
895 s.a[3] = 50;
896 t.a[0] = 20;
897 t.a[1] = -40;
898 t.a[2] = 10;
899 t.a[3] = -50;
900 r.v = pmaxsh (s.v, t.v);
901 assert (r.a[0] == 20);
902 assert (r.a[1] == 40);
903 assert (r.a[2] == 10);
904 assert (r.a[3] == 50);
907 static void test_pmaxub (void)
909 uint8x8_encap_t s, t;
910 uint8x8_encap_t r;
911 s.a[0] = 10;
912 s.a[1] = 20;
913 s.a[2] = 30;
914 s.a[3] = 40;
915 s.a[4] = 50;
916 s.a[5] = 60;
917 s.a[6] = 70;
918 s.a[7] = 80;
919 t.a[0] = 80;
920 t.a[1] = 70;
921 t.a[2] = 60;
922 t.a[3] = 50;
923 t.a[4] = 40;
924 t.a[5] = 30;
925 t.a[6] = 20;
926 t.a[7] = 10;
927 r.v = pmaxub (s.v, t.v);
928 assert (r.a[0] == 80);
929 assert (r.a[1] == 70);
930 assert (r.a[2] == 60);
931 assert (r.a[3] == 50);
932 assert (r.a[4] == 50);
933 assert (r.a[5] == 60);
934 assert (r.a[6] == 70);
935 assert (r.a[7] == 80);
938 static void test_pminsh (void)
940 int16x4_encap_t s, t;
941 int16x4_encap_t r;
942 s.a[0] = -20;
943 s.a[1] = 40;
944 s.a[2] = -10;
945 s.a[3] = 50;
946 t.a[0] = 20;
947 t.a[1] = -40;
948 t.a[2] = 10;
949 t.a[3] = -50;
950 r.v = pminsh (s.v, t.v);
951 assert (r.a[0] == -20);
952 assert (r.a[1] == -40);
953 assert (r.a[2] == -10);
954 assert (r.a[3] == -50);
957 static void test_pminub (void)
959 uint8x8_encap_t s, t;
960 uint8x8_encap_t r;
961 s.a[0] = 10;
962 s.a[1] = 20;
963 s.a[2] = 30;
964 s.a[3] = 40;
965 s.a[4] = 50;
966 s.a[5] = 60;
967 s.a[6] = 70;
968 s.a[7] = 80;
969 t.a[0] = 80;
970 t.a[1] = 70;
971 t.a[2] = 60;
972 t.a[3] = 50;
973 t.a[4] = 40;
974 t.a[5] = 30;
975 t.a[6] = 20;
976 t.a[7] = 10;
977 r.v = pminub (s.v, t.v);
978 assert (r.a[0] == 10);
979 assert (r.a[1] == 20);
980 assert (r.a[2] == 30);
981 assert (r.a[3] == 40);
982 assert (r.a[4] == 40);
983 assert (r.a[5] == 30);
984 assert (r.a[6] == 20);
985 assert (r.a[7] == 10);
988 static void test_pmovmskb_u (void)
990 uint8x8_encap_t s;
991 uint8x8_encap_t r;
992 s.a[0] = 0xf0;
993 s.a[1] = 0x40;
994 s.a[2] = 0xf0;
995 s.a[3] = 0x40;
996 s.a[4] = 0xf0;
997 s.a[5] = 0x40;
998 s.a[6] = 0xf0;
999 s.a[7] = 0x40;
1000 r.v = pmovmskb_u (s.v);
1001 assert (r.a[0] == 0x55);
1002 assert (r.a[1] == 0);
1003 assert (r.a[2] == 0);
1004 assert (r.a[3] == 0);
1005 assert (r.a[4] == 0);
1006 assert (r.a[5] == 0);
1007 assert (r.a[6] == 0);
1008 assert (r.a[7] == 0);
1011 static void test_pmovmskb_s (void)
1013 int8x8_encap_t s;
1014 int8x8_encap_t r;
1015 s.a[0] = -1;
1016 s.a[1] = 1;
1017 s.a[2] = -1;
1018 s.a[3] = 1;
1019 s.a[4] = -1;
1020 s.a[5] = 1;
1021 s.a[6] = -1;
1022 s.a[7] = 1;
1023 r.v = pmovmskb_s (s.v);
1024 assert (r.a[0] == 0x55);
1025 assert (r.a[1] == 0);
1026 assert (r.a[2] == 0);
1027 assert (r.a[3] == 0);
1028 assert (r.a[4] == 0);
1029 assert (r.a[5] == 0);
1030 assert (r.a[6] == 0);
1031 assert (r.a[7] == 0);
1034 static void test_pmulhuh (void)
1036 uint16x4_encap_t s, t;
1037 uint16x4_encap_t r;
1038 s.a[0] = 0xff00;
1039 s.a[1] = 0xff00;
1040 s.a[2] = 0xff00;
1041 s.a[3] = 0xff00;
1042 t.a[0] = 16;
1043 t.a[1] = 16;
1044 t.a[2] = 16;
1045 t.a[3] = 16;
1046 r.v = pmulhuh (s.v, t.v);
1047 assert (r.a[0] == 0x000f);
1048 assert (r.a[1] == 0x000f);
1049 assert (r.a[2] == 0x000f);
1050 assert (r.a[3] == 0x000f);
1053 static void test_pmulhh (void)
1055 int16x4_encap_t s, t;
1056 int16x4_encap_t r;
1057 s.a[0] = 0x0ff0;
1058 s.a[1] = 0x0ff0;
1059 s.a[2] = 0x0ff0;
1060 s.a[3] = 0x0ff0;
1061 t.a[0] = -16*16;
1062 t.a[1] = -16*16;
1063 t.a[2] = -16*16;
1064 t.a[3] = -16*16;
1065 r.v = pmulhh (s.v, t.v);
1066 assert (r.a[0] == -16);
1067 assert (r.a[1] == -16);
1068 assert (r.a[2] == -16);
1069 assert (r.a[3] == -16);
1072 static void test_pmullh (void)
1074 int16x4_encap_t s, t;
1075 int16x4_encap_t r;
1076 s.a[0] = 0x0ff0;
1077 s.a[1] = 0x0ff0;
1078 s.a[2] = 0x0ff0;
1079 s.a[3] = 0x0ff0;
1080 t.a[0] = -16*16;
1081 t.a[1] = -16*16;
1082 t.a[2] = -16*16;
1083 t.a[3] = -16*16;
1084 r.v = pmullh (s.v, t.v);
1085 assert (r.a[0] == 4096);
1086 assert (r.a[1] == 4096);
1087 assert (r.a[2] == 4096);
1088 assert (r.a[3] == 4096);
1091 static void test_pmuluw (void)
1093 uint32x2_encap_t s, t;
1094 uint64_t r;
1095 s.a[0] = 0xdeadbeef;
1096 s.a[1] = 0;
1097 t.a[0] = 0x0f00baaa;
1098 t.a[1] = 0;
1099 r = pmuluw (s.v, t.v);
1100 assert (r == 0xd0cd08e1d1a70b6ull);
1103 static void test_pasubub (void)
1105 uint8x8_encap_t s, t;
1106 uint8x8_encap_t r;
1107 s.a[0] = 10;
1108 s.a[1] = 20;
1109 s.a[2] = 30;
1110 s.a[3] = 40;
1111 s.a[4] = 50;
1112 s.a[5] = 60;
1113 s.a[6] = 70;
1114 s.a[7] = 80;
1115 t.a[0] = 80;
1116 t.a[1] = 70;
1117 t.a[2] = 60;
1118 t.a[3] = 50;
1119 t.a[4] = 40;
1120 t.a[5] = 30;
1121 t.a[6] = 20;
1122 t.a[7] = 10;
1123 r.v = pasubub (s.v, t.v);
1124 assert (r.a[0] == 70);
1125 assert (r.a[1] == 50);
1126 assert (r.a[2] == 30);
1127 assert (r.a[3] == 10);
1128 assert (r.a[4] == 10);
1129 assert (r.a[5] == 30);
1130 assert (r.a[6] == 50);
1131 assert (r.a[7] == 70);
1134 static void test_biadd (void)
1136 uint8x8_encap_t s;
1137 uint16x4_encap_t r;
1138 s.a[0] = 10;
1139 s.a[1] = 20;
1140 s.a[2] = 30;
1141 s.a[3] = 40;
1142 s.a[4] = 50;
1143 s.a[5] = 60;
1144 s.a[6] = 70;
1145 s.a[7] = 80;
1146 r.v = biadd (s.v);
1147 assert (r.a[0] == 360);
1148 assert (r.a[1] == 0);
1149 assert (r.a[2] == 0);
1150 assert (r.a[3] == 0);
1153 static void test_psadbh (void)
1155 uint8x8_encap_t s, t;
1156 uint16x4_encap_t r;
1157 s.a[0] = 10;
1158 s.a[1] = 20;
1159 s.a[2] = 30;
1160 s.a[3] = 40;
1161 s.a[4] = 50;
1162 s.a[5] = 60;
1163 s.a[6] = 70;
1164 s.a[7] = 80;
1165 t.a[0] = 80;
1166 t.a[1] = 70;
1167 t.a[2] = 60;
1168 t.a[3] = 50;
1169 t.a[4] = 40;
1170 t.a[5] = 30;
1171 t.a[6] = 20;
1172 t.a[7] = 10;
1173 r.v = psadbh (s.v, t.v);
1174 assert (r.a[0] == 0x0140);
1175 assert (r.a[1] == 0);
1176 assert (r.a[2] == 0);
1177 assert (r.a[3] == 0);
1180 static void test_pshufh_u (void)
1182 uint16x4_encap_t s;
1183 uint16x4_encap_t r;
1184 s.a[0] = 1;
1185 s.a[1] = 2;
1186 s.a[2] = 3;
1187 s.a[3] = 4;
1188 r.a[0] = 0;
1189 r.a[1] = 0;
1190 r.a[2] = 0;
1191 r.a[3] = 0;
1192 r.v = pshufh_u (r.v, s.v, 0xe5);
1193 assert (r.a[0] == 2);
1194 assert (r.a[1] == 2);
1195 assert (r.a[2] == 3);
1196 assert (r.a[3] == 4);
1199 static void test_pshufh_s (void)
1201 int16x4_encap_t s;
1202 int16x4_encap_t r;
1203 s.a[0] = -1;
1204 s.a[1] = 2;
1205 s.a[2] = -3;
1206 s.a[3] = 4;
1207 r.a[0] = 0;
1208 r.a[1] = 0;
1209 r.a[2] = 0;
1210 r.a[3] = 0;
1211 r.v = pshufh_s (r.v, s.v, 0xe5);
1212 assert (r.a[0] == 2);
1213 assert (r.a[1] == 2);
1214 assert (r.a[2] == -3);
1215 assert (r.a[3] == 4);
1218 static void test_psllh_u (void)
1220 uint16x4_encap_t s;
1221 uint16x4_encap_t r;
1222 s.a[0] = 0xffff;
1223 s.a[1] = 0xffff;
1224 s.a[2] = 0xffff;
1225 s.a[3] = 0xffff;
1226 r.v = psllh_u (s.v, 1);
1227 assert (r.a[0] == 0xfffe);
1228 assert (r.a[1] == 0xfffe);
1229 assert (r.a[2] == 0xfffe);
1230 assert (r.a[3] == 0xfffe);
1233 static void test_psllw_u (void)
1235 uint32x2_encap_t s;
1236 uint32x2_encap_t r;
1237 s.a[0] = 0xffffffff;
1238 s.a[1] = 0xffffffff;
1239 r.v = psllw_u (s.v, 2);
1240 assert (r.a[0] == 0xfffffffc);
1241 assert (r.a[1] == 0xfffffffc);
1244 static void test_psllh_s (void)
1246 int16x4_encap_t s;
1247 int16x4_encap_t r;
1248 s.a[0] = -1;
1249 s.a[1] = -1;
1250 s.a[2] = -1;
1251 s.a[3] = -1;
1252 r.v = psllh_s (s.v, 1);
1253 assert (r.a[0] == -2);
1254 assert (r.a[1] == -2);
1255 assert (r.a[2] == -2);
1256 assert (r.a[3] == -2);
1259 static void test_psllw_s (void)
1261 int32x2_encap_t s;
1262 int32x2_encap_t r;
1263 s.a[0] = -1;
1264 s.a[1] = -1;
1265 r.v = psllw_s (s.v, 2);
1266 assert (r.a[0] == -4);
1267 assert (r.a[1] == -4);
1270 static void test_psrah_u (void)
1272 uint16x4_encap_t s;
1273 uint16x4_encap_t r;
1274 s.a[0] = 0xffef;
1275 s.a[1] = 0xffef;
1276 s.a[2] = 0xffef;
1277 s.a[3] = 0xffef;
1278 r.v = psrah_u (s.v, 1);
1279 assert (r.a[0] == 0xfff7);
1280 assert (r.a[1] == 0xfff7);
1281 assert (r.a[2] == 0xfff7);
1282 assert (r.a[3] == 0xfff7);
1285 static void test_psraw_u (void)
1287 uint32x2_encap_t s;
1288 uint32x2_encap_t r;
1289 s.a[0] = 0xffffffef;
1290 s.a[1] = 0xffffffef;
1291 r.v = psraw_u (s.v, 1);
1292 assert (r.a[0] == 0xfffffff7);
1293 assert (r.a[1] == 0xfffffff7);
1296 static void test_psrah_s (void)
1298 int16x4_encap_t s;
1299 int16x4_encap_t r;
1300 s.a[0] = -2;
1301 s.a[1] = -2;
1302 s.a[2] = -2;
1303 s.a[3] = -2;
1304 r.v = psrah_s (s.v, 1);
1305 assert (r.a[0] == -1);
1306 assert (r.a[1] == -1);
1307 assert (r.a[2] == -1);
1308 assert (r.a[3] == -1);
1311 static void test_psraw_s (void)
1313 int32x2_encap_t s;
1314 int32x2_encap_t r;
1315 s.a[0] = -2;
1316 s.a[1] = -2;
1317 r.v = psraw_s (s.v, 1);
1318 assert (r.a[0] == -1);
1319 assert (r.a[1] == -1);
1322 static void test_psrlh_u (void)
1324 uint16x4_encap_t s;
1325 uint16x4_encap_t r;
1326 s.a[0] = 0xffef;
1327 s.a[1] = 0xffef;
1328 s.a[2] = 0xffef;
1329 s.a[3] = 0xffef;
1330 r.v = psrlh_u (s.v, 1);
1331 assert (r.a[0] == 0x7ff7);
1332 assert (r.a[1] == 0x7ff7);
1333 assert (r.a[2] == 0x7ff7);
1334 assert (r.a[3] == 0x7ff7);
1337 static void test_psrlw_u (void)
1339 uint32x2_encap_t s;
1340 uint32x2_encap_t r;
1341 s.a[0] = 0xffffffef;
1342 s.a[1] = 0xffffffef;
1343 r.v = psrlw_u (s.v, 1);
1344 assert (r.a[0] == 0x7ffffff7);
1345 assert (r.a[1] == 0x7ffffff7);
1348 static void test_psrlh_s (void)
1350 int16x4_encap_t s;
1351 int16x4_encap_t r;
1352 s.a[0] = -1;
1353 s.a[1] = -1;
1354 s.a[2] = -1;
1355 s.a[3] = -1;
1356 r.v = psrlh_s (s.v, 1);
1357 assert (r.a[0] == INT16x4_MAX);
1358 assert (r.a[1] == INT16x4_MAX);
1359 assert (r.a[2] == INT16x4_MAX);
1360 assert (r.a[3] == INT16x4_MAX);
1363 static void test_psrlw_s (void)
1365 int32x2_encap_t s;
1366 int32x2_encap_t r;
1367 s.a[0] = -1;
1368 s.a[1] = -1;
1369 r.v = psrlw_s (s.v, 1);
1370 assert (r.a[0] == INT32x2_MAX);
1371 assert (r.a[1] == INT32x2_MAX);
1374 static void test_psubw_u (void)
1376 uint32x2_encap_t s, t;
1377 uint32x2_encap_t r;
1378 s.a[0] = 3;
1379 s.a[1] = 4;
1380 t.a[0] = 2;
1381 t.a[1] = 1;
1382 r.v = psubw_u (s.v, t.v);
1383 assert (r.a[0] == 1);
1384 assert (r.a[1] == 3);
1387 static void test_psubw_s (void)
1389 int32x2_encap_t s, t;
1390 int32x2_encap_t r;
1391 s.a[0] = -2;
1392 s.a[1] = -1;
1393 t.a[0] = 3;
1394 t.a[1] = -4;
1395 r.v = psubw_s (s.v, t.v);
1396 assert (r.a[0] == -5);
1397 assert (r.a[1] == 3);
1400 static void test_psubh_u (void)
1402 uint16x4_encap_t s, t;
1403 uint16x4_encap_t r;
1404 s.a[0] = 5;
1405 s.a[1] = 6;
1406 s.a[2] = 7;
1407 s.a[3] = 8;
1408 t.a[0] = 1;
1409 t.a[1] = 2;
1410 t.a[2] = 3;
1411 t.a[3] = 4;
1412 r.v = psubh_u (s.v, t.v);
1413 assert (r.a[0] == 4);
1414 assert (r.a[1] == 4);
1415 assert (r.a[2] == 4);
1416 assert (r.a[3] == 4);
1419 static void test_psubh_s (void)
1421 int16x4_encap_t s, t;
1422 int16x4_encap_t r;
1423 s.a[0] = -10;
1424 s.a[1] = -20;
1425 s.a[2] = -30;
1426 s.a[3] = -40;
1427 t.a[0] = 1;
1428 t.a[1] = 2;
1429 t.a[2] = 3;
1430 t.a[3] = 4;
1431 r.v = psubh_s (s.v, t.v);
1432 assert (r.a[0] == -11);
1433 assert (r.a[1] == -22);
1434 assert (r.a[2] == -33);
1435 assert (r.a[3] == -44);
1438 static void test_psubb_u (void)
1440 uint8x8_encap_t s, t;
1441 uint8x8_encap_t r;
1442 s.a[0] = 10;
1443 s.a[1] = 11;
1444 s.a[2] = 12;
1445 s.a[3] = 13;
1446 s.a[4] = 14;
1447 s.a[5] = 15;
1448 s.a[6] = 16;
1449 s.a[7] = 17;
1450 t.a[0] = 1;
1451 t.a[1] = 2;
1452 t.a[2] = 3;
1453 t.a[3] = 4;
1454 t.a[4] = 5;
1455 t.a[5] = 6;
1456 t.a[6] = 7;
1457 t.a[7] = 8;
1458 r.v = psubb_u (s.v, t.v);
1459 assert (r.a[0] == 9);
1460 assert (r.a[1] == 9);
1461 assert (r.a[2] == 9);
1462 assert (r.a[3] == 9);
1463 assert (r.a[4] == 9);
1464 assert (r.a[5] == 9);
1465 assert (r.a[6] == 9);
1466 assert (r.a[7] == 9);
1469 static void test_psubb_s (void)
1471 int8x8_encap_t s, t;
1472 int8x8_encap_t r;
1473 s.a[0] = -10;
1474 s.a[1] = -20;
1475 s.a[2] = -30;
1476 s.a[3] = -40;
1477 s.a[4] = -50;
1478 s.a[5] = -60;
1479 s.a[6] = -70;
1480 s.a[7] = -80;
1481 t.a[0] = 1;
1482 t.a[1] = 2;
1483 t.a[2] = 3;
1484 t.a[3] = 4;
1485 t.a[4] = 5;
1486 t.a[5] = 6;
1487 t.a[6] = 7;
1488 t.a[7] = 8;
1489 r.v = psubb_s (s.v, t.v);
1490 assert (r.a[0] == -11);
1491 assert (r.a[1] == -22);
1492 assert (r.a[2] == -33);
1493 assert (r.a[3] == -44);
1494 assert (r.a[4] == -55);
1495 assert (r.a[5] == -66);
1496 assert (r.a[6] == -77);
1497 assert (r.a[7] == -88);
1500 static void test_psubd_u (void)
1502 uint64_t d = 789012;
1503 uint64_t e = 123456;
1504 uint64_t r;
1505 r = psubd_u (d, e);
1506 assert (r == 665556);
1509 static void test_psubd_s (void)
1511 int64_t d = 123456;
1512 int64_t e = -789012;
1513 int64_t r;
1514 r = psubd_s (d, e);
1515 assert (r == 912468);
1518 static void test_psubsh (void)
1520 int16x4_encap_t s, t;
1521 int16x4_encap_t r;
1522 s.a[0] = -1;
1523 s.a[1] = 0;
1524 s.a[2] = 1;
1525 s.a[3] = 2;
1526 t.a[0] = -INT16x4_MAX;
1527 t.a[1] = -INT16x4_MAX;
1528 t.a[2] = -INT16x4_MAX;
1529 t.a[3] = -INT16x4_MAX;
1530 r.v = psubsh (s.v, t.v);
1531 assert (r.a[0] == INT16x4_MAX - 1);
1532 assert (r.a[1] == INT16x4_MAX);
1533 assert (r.a[2] == INT16x4_MAX);
1534 assert (r.a[3] == INT16x4_MAX);
1537 static void test_psubsb (void)
1539 int8x8_encap_t s, t;
1540 int8x8_encap_t r;
1541 s.a[0] = -6;
1542 s.a[1] = -5;
1543 s.a[2] = -4;
1544 s.a[3] = -3;
1545 s.a[4] = -2;
1546 s.a[5] = -1;
1547 s.a[6] = 0;
1548 s.a[7] = 1;
1549 t.a[0] = -INT8x8_MAX;
1550 t.a[1] = -INT8x8_MAX;
1551 t.a[2] = -INT8x8_MAX;
1552 t.a[3] = -INT8x8_MAX;
1553 t.a[4] = -INT8x8_MAX;
1554 t.a[5] = -INT8x8_MAX;
1555 t.a[6] = -INT8x8_MAX;
1556 t.a[7] = -INT8x8_MAX;
1557 r.v = psubsb (s.v, t.v);
1558 assert (r.a[0] == INT8x8_MAX - 6);
1559 assert (r.a[1] == INT8x8_MAX - 5);
1560 assert (r.a[2] == INT8x8_MAX - 4);
1561 assert (r.a[3] == INT8x8_MAX - 3);
1562 assert (r.a[4] == INT8x8_MAX - 2);
1563 assert (r.a[5] == INT8x8_MAX - 1);
1564 assert (r.a[6] == INT8x8_MAX);
1565 assert (r.a[7] == INT8x8_MAX);
1568 static void test_psubush (void)
1570 uint16x4_encap_t s, t;
1571 uint16x4_encap_t r;
1572 s.a[0] = 0;
1573 s.a[1] = 1;
1574 s.a[2] = 2;
1575 s.a[3] = 3;
1576 t.a[0] = 1;
1577 t.a[1] = 1;
1578 t.a[2] = 3;
1579 t.a[3] = 3;
1580 r.v = psubush (s.v, t.v);
1581 assert (r.a[0] == 0);
1582 assert (r.a[1] == 0);
1583 assert (r.a[2] == 0);
1584 assert (r.a[3] == 0);
1587 static void test_psubusb (void)
1589 uint8x8_encap_t s, t;
1590 uint8x8_encap_t r;
1591 s.a[0] = 0;
1592 s.a[1] = 1;
1593 s.a[2] = 2;
1594 s.a[3] = 3;
1595 s.a[4] = 4;
1596 s.a[5] = 5;
1597 s.a[6] = 6;
1598 s.a[7] = 7;
1599 t.a[0] = 1;
1600 t.a[1] = 1;
1601 t.a[2] = 3;
1602 t.a[3] = 3;
1603 t.a[4] = 5;
1604 t.a[5] = 5;
1605 t.a[6] = 7;
1606 t.a[7] = 7;
1607 r.v = psubusb (s.v, t.v);
1608 assert (r.a[0] == 0);
1609 assert (r.a[1] == 0);
1610 assert (r.a[2] == 0);
1611 assert (r.a[3] == 0);
1612 assert (r.a[4] == 0);
1613 assert (r.a[5] == 0);
1614 assert (r.a[6] == 0);
1615 assert (r.a[7] == 0);
1618 static void test_punpckhbh_s (void)
1620 int8x8_encap_t s, t;
1621 int8x8_encap_t r;
1622 s.a[0] = -1;
1623 s.a[1] = -3;
1624 s.a[2] = -5;
1625 s.a[3] = -7;
1626 s.a[4] = -9;
1627 s.a[5] = -11;
1628 s.a[6] = -13;
1629 s.a[7] = -15;
1630 t.a[0] = 2;
1631 t.a[1] = 4;
1632 t.a[2] = 6;
1633 t.a[3] = 8;
1634 t.a[4] = 10;
1635 t.a[5] = 12;
1636 t.a[6] = 14;
1637 t.a[7] = 16;
1638 r.v = punpckhbh_s (s.v, t.v);
1639 assert (r.a[0] == -9);
1640 assert (r.a[1] == 10);
1641 assert (r.a[2] == -11);
1642 assert (r.a[3] == 12);
1643 assert (r.a[4] == -13);
1644 assert (r.a[5] == 14);
1645 assert (r.a[6] == -15);
1646 assert (r.a[7] == 16);
1649 static void test_punpckhbh_u (void)
1651 uint8x8_encap_t s, t;
1652 uint8x8_encap_t r;
1653 s.a[0] = 1;
1654 s.a[1] = 3;
1655 s.a[2] = 5;
1656 s.a[3] = 7;
1657 s.a[4] = 9;
1658 s.a[5] = 11;
1659 s.a[6] = 13;
1660 s.a[7] = 15;
1661 t.a[0] = 2;
1662 t.a[1] = 4;
1663 t.a[2] = 6;
1664 t.a[3] = 8;
1665 t.a[4] = 10;
1666 t.a[5] = 12;
1667 t.a[6] = 14;
1668 t.a[7] = 16;
1669 r.v = punpckhbh_u (s.v, t.v);
1670 assert (r.a[0] == 9);
1671 assert (r.a[1] == 10);
1672 assert (r.a[2] == 11);
1673 assert (r.a[3] == 12);
1674 assert (r.a[4] == 13);
1675 assert (r.a[5] == 14);
1676 assert (r.a[6] == 15);
1677 assert (r.a[7] == 16);
1680 static void test_punpckhhw_s (void)
1682 int16x4_encap_t s, t;
1683 int16x4_encap_t r;
1684 s.a[0] = -1;
1685 s.a[1] = 3;
1686 s.a[2] = -5;
1687 s.a[3] = 7;
1688 t.a[0] = -2;
1689 t.a[1] = 4;
1690 t.a[2] = -6;
1691 t.a[3] = 8;
1692 r.v = punpckhhw_s (s.v, t.v);
1693 assert (r.a[0] == -5);
1694 assert (r.a[1] == -6);
1695 assert (r.a[2] == 7);
1696 assert (r.a[3] == 8);
1699 static void test_punpckhhw_u (void)
1701 uint16x4_encap_t s, t;
1702 uint16x4_encap_t r;
1703 s.a[0] = 1;
1704 s.a[1] = 3;
1705 s.a[2] = 5;
1706 s.a[3] = 7;
1707 t.a[0] = 2;
1708 t.a[1] = 4;
1709 t.a[2] = 6;
1710 t.a[3] = 8;
1711 r.v = punpckhhw_u (s.v, t.v);
1712 assert (r.a[0] == 5);
1713 assert (r.a[1] == 6);
1714 assert (r.a[2] == 7);
1715 assert (r.a[3] == 8);
1718 static void test_punpckhwd_s (void)
1720 int32x2_encap_t s, t;
1721 int32x2_encap_t r;
1722 s.a[0] = 1;
1723 s.a[1] = 3;
1724 t.a[0] = 2;
1725 t.a[1] = -4;
1726 r.v = punpckhwd_s (s.v, t.v);
1727 assert (r.a[0] == 3);
1728 assert (r.a[1] == -4);
1731 static void test_punpckhwd_u (void)
1733 uint32x2_encap_t s, t;
1734 uint32x2_encap_t r;
1735 s.a[0] = 1;
1736 s.a[1] = 3;
1737 t.a[0] = 2;
1738 t.a[1] = 4;
1739 r.v = punpckhwd_u (s.v, t.v);
1740 assert (r.a[0] == 3);
1741 assert (r.a[1] == 4);
1744 static void test_punpcklbh_s (void)
1746 int8x8_encap_t s, t;
1747 int8x8_encap_t r;
1748 s.a[0] = -1;
1749 s.a[1] = -3;
1750 s.a[2] = -5;
1751 s.a[3] = -7;
1752 s.a[4] = -9;
1753 s.a[5] = -11;
1754 s.a[6] = -13;
1755 s.a[7] = -15;
1756 t.a[0] = 2;
1757 t.a[1] = 4;
1758 t.a[2] = 6;
1759 t.a[3] = 8;
1760 t.a[4] = 10;
1761 t.a[5] = 12;
1762 t.a[6] = 14;
1763 t.a[7] = 16;
1764 r.v = punpcklbh_s (s.v, t.v);
1765 assert (r.a[0] == -1);
1766 assert (r.a[1] == 2);
1767 assert (r.a[2] == -3);
1768 assert (r.a[3] == 4);
1769 assert (r.a[4] == -5);
1770 assert (r.a[5] == 6);
1771 assert (r.a[6] == -7);
1772 assert (r.a[7] == 8);
1775 static void test_punpcklbh_u (void)
1777 uint8x8_encap_t s, t;
1778 uint8x8_encap_t r;
1779 s.a[0] = 1;
1780 s.a[1] = 3;
1781 s.a[2] = 5;
1782 s.a[3] = 7;
1783 s.a[4] = 9;
1784 s.a[5] = 11;
1785 s.a[6] = 13;
1786 s.a[7] = 15;
1787 t.a[0] = 2;
1788 t.a[1] = 4;
1789 t.a[2] = 6;
1790 t.a[3] = 8;
1791 t.a[4] = 10;
1792 t.a[5] = 12;
1793 t.a[6] = 14;
1794 t.a[7] = 16;
1795 r.v = punpcklbh_u (s.v, t.v);
1796 assert (r.a[0] == 1);
1797 assert (r.a[1] == 2);
1798 assert (r.a[2] == 3);
1799 assert (r.a[3] == 4);
1800 assert (r.a[4] == 5);
1801 assert (r.a[5] == 6);
1802 assert (r.a[6] == 7);
1803 assert (r.a[7] == 8);
1806 static void test_punpcklhw_s (void)
1808 int16x4_encap_t s, t;
1809 int16x4_encap_t r;
1810 s.a[0] = -1;
1811 s.a[1] = 3;
1812 s.a[2] = -5;
1813 s.a[3] = 7;
1814 t.a[0] = -2;
1815 t.a[1] = 4;
1816 t.a[2] = -6;
1817 t.a[3] = 8;
1818 r.v = punpcklhw_s (s.v, t.v);
1819 assert (r.a[0] == -1);
1820 assert (r.a[1] == -2);
1821 assert (r.a[2] == 3);
1822 assert (r.a[3] == 4);
1825 static void test_punpcklhw_u (void)
1827 uint16x4_encap_t s, t;
1828 uint16x4_encap_t r;
1829 s.a[0] = 1;
1830 s.a[1] = 3;
1831 s.a[2] = 5;
1832 s.a[3] = 7;
1833 t.a[0] = 2;
1834 t.a[1] = 4;
1835 t.a[2] = 6;
1836 t.a[3] = 8;
1837 r.v = punpcklhw_u (s.v, t.v);
1838 assert (r.a[0] == 1);
1839 assert (r.a[1] == 2);
1840 assert (r.a[2] == 3);
1841 assert (r.a[3] == 4);
1844 static void test_punpcklwd_s (void)
1846 int32x2_encap_t s, t;
1847 int32x2_encap_t r;
1848 s.a[0] = 1;
1849 s.a[1] = 3;
1850 t.a[0] = -2;
1851 t.a[1] = 4;
1852 r.v = punpcklwd_s (s.v, t.v);
1853 assert (r.a[0] == 1);
1854 assert (r.a[1] == -2);
1857 static void test_punpcklwd_u (void)
1859 uint32x2_encap_t s, t;
1860 uint32x2_encap_t r;
1861 s.a[0] = 1;
1862 s.a[1] = 3;
1863 t.a[0] = 2;
1864 t.a[1] = 4;
1865 r.v = punpcklwd_u (s.v, t.v);
1866 assert (r.a[0] == 1);
1867 assert (r.a[1] == 2);
1870 int main (void)
1872 test_packsswh ();
1873 test_packsshb ();
1874 test_packushb ();
1875 test_paddw_u ();
1876 test_paddw_s ();
1877 test_paddh_u ();
1878 test_paddh_s ();
1879 test_paddb_u ();
1880 test_paddb_s ();
1881 test_paddd_u ();
1882 test_paddd_s ();
1883 test_paddsh ();
1884 test_paddsb ();
1885 test_paddush ();
1886 test_paddusb ();
1887 test_pandn_ud ();
1888 test_pandn_sd ();
1889 test_pandn_uw ();
1890 test_pandn_sw ();
1891 test_pandn_uh ();
1892 test_pandn_sh ();
1893 test_pandn_ub ();
1894 test_pandn_sb ();
1895 test_pavgh ();
1896 test_pavgb ();
1897 test_pcmpeqw_u ();
1898 test_pcmpeqh_u ();
1899 test_pcmpeqb_u ();
1900 test_pcmpeqw_s ();
1901 test_pcmpeqh_s ();
1902 test_pcmpeqb_s ();
1903 test_pcmpgtw_u ();
1904 test_pcmpgth_u ();
1905 test_pcmpgtb_u ();
1906 test_pcmpgtw_s ();
1907 test_pcmpgth_s ();
1908 test_pcmpgtb_s ();
1909 test_pextrh_u ();
1910 test_pextrh_s ();
1911 test_pinsrh_0123_u ();
1912 test_pinsrh_0123_s ();
1913 test_pmaddhw ();
1914 test_pmaxsh ();
1915 test_pmaxub ();
1916 test_pminsh ();
1917 test_pminub ();
1918 test_pmovmskb_u ();
1919 test_pmovmskb_s ();
1920 test_pmulhuh ();
1921 test_pmulhh ();
1922 test_pmullh ();
1923 test_pmuluw ();
1924 test_pasubub ();
1925 test_biadd ();
1926 test_psadbh ();
1927 test_pshufh_u ();
1928 test_pshufh_s ();
1929 test_psllh_u ();
1930 test_psllw_u ();
1931 test_psllh_s ();
1932 test_psllw_s ();
1933 test_psrah_u ();
1934 test_psraw_u ();
1935 test_psrah_s ();
1936 test_psraw_s ();
1937 test_psrlh_u ();
1938 test_psrlw_u ();
1939 test_psrlh_s ();
1940 test_psrlw_s ();
1941 test_psubw_u ();
1942 test_psubw_s ();
1943 test_psubh_u ();
1944 test_psubh_s ();
1945 test_psubb_u ();
1946 test_psubb_s ();
1947 test_psubd_u ();
1948 test_psubd_s ();
1949 test_psubsh ();
1950 test_psubsb ();
1951 test_psubush ();
1952 test_psubusb ();
1953 test_punpckhbh_s ();
1954 test_punpckhbh_u ();
1955 test_punpckhhw_s ();
1956 test_punpckhhw_u ();
1957 test_punpckhwd_s ();
1958 test_punpckhwd_u ();
1959 test_punpcklbh_s ();
1960 test_punpcklbh_u ();
1961 test_punpcklhw_s ();
1962 test_punpcklhw_u ();
1963 test_punpcklwd_s ();
1964 test_punpcklwd_u ();
1965 return 0;