| /* Test cases for ST Microelectronics Loongson-2E/2F SIMD intrinsics. |
| Copyright (C) 2008 Free Software Foundation, Inc. |
| Contributed by CodeSourcery. |
| |
| This file is part of GCC. |
| |
| GCC is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 3, or (at your option) |
| any later version. |
| |
| GCC is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GCC; see the file COPYING3. If not see |
| <http://www.gnu.org/licenses/>. */ |
| |
| /* { dg-do run { target { ! { mips*-mti-linux* mips*-img-linux* } } } } */ |
| /* loongson.h does not handle or check for MIPS16ness or |
| microMIPSness. There doesn't seem any good reason for it to, given |
| that the Loongson processors do not support either. The effective target |
| mips_nanlegacy is required for a toolchain without the legacy NaN support |
| because inclusion of some system headers e.g. stdint.h will fail due to not |
| finding stubs-o32_hard.h. */ |
| /* { dg-require-effective-target mips_nanlegacy } */ |
| /* { dg-options "-mloongson-mmi -mhard-float -mno-micromips -mno-mips16 -flax-vector-conversions (REQUIRES_STDLIB)" } */ |
| |
| #include "loongson-mmiintrin.h" |
| #include <stdio.h> |
| #include <stdint.h> |
| #include <assert.h> |
| #include <limits.h> |
| |
| typedef union { int32x2_t v; int32_t a[2]; } int32x2_encap_t; |
| typedef union { int16x4_t v; int16_t a[4]; } int16x4_encap_t; |
| typedef union { int8x8_t v; int8_t a[8]; } int8x8_encap_t; |
| typedef union { uint32x2_t v; uint32_t a[2]; } uint32x2_encap_t; |
| typedef union { uint16x4_t v; uint16_t a[4]; } uint16x4_encap_t; |
| typedef union { uint8x8_t v; uint8_t a[8]; } uint8x8_encap_t; |
| |
| #define UINT16x4_MAX USHRT_MAX |
| #define UINT8x8_MAX UCHAR_MAX |
| #define INT8x8_MAX SCHAR_MAX |
| #define INT16x4_MAX SHRT_MAX |
| #define INT32x2_MAX INT_MAX |
| |
| static void test_packsswh (void) |
| { |
| int32x2_encap_t s, t; |
| int16x4_encap_t r; |
| s.a[0] = INT16x4_MAX - 2; |
| s.a[1] = INT16x4_MAX - 1; |
| t.a[0] = INT16x4_MAX; |
| t.a[1] = INT16x4_MAX + 1; |
| r.v = packsswh (s.v, t.v); |
| assert (r.a[0] == INT16x4_MAX - 2); |
| assert (r.a[1] == INT16x4_MAX - 1); |
| assert (r.a[2] == INT16x4_MAX); |
| assert (r.a[3] == INT16x4_MAX); |
| } |
| |
| static void test_packsshb (void) |
| { |
| int16x4_encap_t s, t; |
| int8x8_encap_t r; |
| s.a[0] = INT8x8_MAX - 6; |
| s.a[1] = INT8x8_MAX - 5; |
| s.a[2] = INT8x8_MAX - 4; |
| s.a[3] = INT8x8_MAX - 3; |
| t.a[0] = INT8x8_MAX - 2; |
| t.a[1] = INT8x8_MAX - 1; |
| t.a[2] = INT8x8_MAX; |
| t.a[3] = INT8x8_MAX + 1; |
| r.v = packsshb (s.v, t.v); |
| assert (r.a[0] == INT8x8_MAX - 6); |
| assert (r.a[1] == INT8x8_MAX - 5); |
| assert (r.a[2] == INT8x8_MAX - 4); |
| assert (r.a[3] == INT8x8_MAX - 3); |
| assert (r.a[4] == INT8x8_MAX - 2); |
| assert (r.a[5] == INT8x8_MAX - 1); |
| assert (r.a[6] == INT8x8_MAX); |
| assert (r.a[7] == INT8x8_MAX); |
| } |
| |
| static void test_packushb (void) |
| { |
| uint16x4_encap_t s, t; |
| uint8x8_encap_t r; |
| s.a[0] = UINT8x8_MAX - 6; |
| s.a[1] = UINT8x8_MAX - 5; |
| s.a[2] = UINT8x8_MAX - 4; |
| s.a[3] = UINT8x8_MAX - 3; |
| t.a[0] = UINT8x8_MAX - 2; |
| t.a[1] = UINT8x8_MAX - 1; |
| t.a[2] = UINT8x8_MAX; |
| t.a[3] = UINT8x8_MAX + 1; |
| r.v = packushb (s.v, t.v); |
| assert (r.a[0] == UINT8x8_MAX - 6); |
| assert (r.a[1] == UINT8x8_MAX - 5); |
| assert (r.a[2] == UINT8x8_MAX - 4); |
| assert (r.a[3] == UINT8x8_MAX - 3); |
| assert (r.a[4] == UINT8x8_MAX - 2); |
| assert (r.a[5] == UINT8x8_MAX - 1); |
| assert (r.a[6] == UINT8x8_MAX); |
| assert (r.a[7] == UINT8x8_MAX); |
| } |
| |
| static void test_paddw_u (void) |
| { |
| uint32x2_encap_t s, t; |
| uint32x2_encap_t r; |
| s.a[0] = 1; |
| s.a[1] = 2; |
| t.a[0] = 3; |
| t.a[1] = 4; |
| r.v = paddw_u (s.v, t.v); |
| assert (r.a[0] == 4); |
| assert (r.a[1] == 6); |
| } |
| |
| static void test_paddw_s (void) |
| { |
| int32x2_encap_t s, t; |
| int32x2_encap_t r; |
| s.a[0] = -2; |
| s.a[1] = -1; |
| t.a[0] = 3; |
| t.a[1] = 4; |
| r.v = paddw_s (s.v, t.v); |
| assert (r.a[0] == 1); |
| assert (r.a[1] == 3); |
| } |
| |
| static void test_paddh_u (void) |
| { |
| uint16x4_encap_t s, t; |
| uint16x4_encap_t r; |
| s.a[0] = 1; |
| s.a[1] = 2; |
| s.a[2] = 3; |
| s.a[3] = 4; |
| t.a[0] = 5; |
| t.a[1] = 6; |
| t.a[2] = 7; |
| t.a[3] = 8; |
| r.v = paddh_u (s.v, t.v); |
| assert (r.a[0] == 6); |
| assert (r.a[1] == 8); |
| assert (r.a[2] == 10); |
| assert (r.a[3] == 12); |
| } |
| |
| static void test_paddh_s (void) |
| { |
| int16x4_encap_t s, t; |
| int16x4_encap_t r; |
| s.a[0] = -10; |
| s.a[1] = -20; |
| s.a[2] = -30; |
| s.a[3] = -40; |
| t.a[0] = 1; |
| t.a[1] = 2; |
| t.a[2] = 3; |
| t.a[3] = 4; |
| r.v = paddh_s (s.v, t.v); |
| assert (r.a[0] == -9); |
| assert (r.a[1] == -18); |
| assert (r.a[2] == -27); |
| assert (r.a[3] == -36); |
| } |
| |
| static void test_paddb_u (void) |
| { |
| uint8x8_encap_t s, t; |
| uint8x8_encap_t r; |
| s.a[0] = 1; |
| s.a[1] = 2; |
| s.a[2] = 3; |
| s.a[3] = 4; |
| s.a[4] = 5; |
| s.a[5] = 6; |
| s.a[6] = 7; |
| s.a[7] = 8; |
| t.a[0] = 9; |
| t.a[1] = 10; |
| t.a[2] = 11; |
| t.a[3] = 12; |
| t.a[4] = 13; |
| t.a[5] = 14; |
| t.a[6] = 15; |
| t.a[7] = 16; |
| r.v = paddb_u (s.v, t.v); |
| assert (r.a[0] == 10); |
| assert (r.a[1] == 12); |
| assert (r.a[2] == 14); |
| assert (r.a[3] == 16); |
| assert (r.a[4] == 18); |
| assert (r.a[5] == 20); |
| assert (r.a[6] == 22); |
| assert (r.a[7] == 24); |
| } |
| |
| static void test_paddb_s (void) |
| { |
| int8x8_encap_t s, t; |
| int8x8_encap_t r; |
| s.a[0] = -10; |
| s.a[1] = -20; |
| s.a[2] = -30; |
| s.a[3] = -40; |
| s.a[4] = -50; |
| s.a[5] = -60; |
| s.a[6] = -70; |
| s.a[7] = -80; |
| t.a[0] = 1; |
| t.a[1] = 2; |
| t.a[2] = 3; |
| t.a[3] = 4; |
| t.a[4] = 5; |
| t.a[5] = 6; |
| t.a[6] = 7; |
| t.a[7] = 8; |
| r.v = paddb_s (s.v, t.v); |
| assert (r.a[0] == -9); |
| assert (r.a[1] == -18); |
| assert (r.a[2] == -27); |
| assert (r.a[3] == -36); |
| assert (r.a[4] == -45); |
| assert (r.a[5] == -54); |
| assert (r.a[6] == -63); |
| assert (r.a[7] == -72); |
| } |
| |
| static void test_paddd_u (void) |
| { |
| uint64_t d = 123456; |
| uint64_t e = 789012; |
| uint64_t r; |
| r = paddd_u (d, e); |
| assert (r == 912468); |
| } |
| |
| static void test_paddd_s (void) |
| { |
| int64_t d = 123456; |
| int64_t e = -789012; |
| int64_t r; |
| r = paddd_s (d, e); |
| assert (r == -665556); |
| } |
| |
| static void test_paddsh (void) |
| { |
| int16x4_encap_t s, t; |
| int16x4_encap_t r; |
| s.a[0] = -1; |
| s.a[1] = 0; |
| s.a[2] = 1; |
| s.a[3] = 2; |
| t.a[0] = INT16x4_MAX; |
| t.a[1] = INT16x4_MAX; |
| t.a[2] = INT16x4_MAX; |
| t.a[3] = INT16x4_MAX; |
| r.v = paddsh (s.v, t.v); |
| assert (r.a[0] == INT16x4_MAX - 1); |
| assert (r.a[1] == INT16x4_MAX); |
| assert (r.a[2] == INT16x4_MAX); |
| assert (r.a[3] == INT16x4_MAX); |
| } |
| |
| static void test_paddsb (void) |
| { |
| int8x8_encap_t s, t; |
| int8x8_encap_t r; |
| s.a[0] = -6; |
| s.a[1] = -5; |
| s.a[2] = -4; |
| s.a[3] = -3; |
| s.a[4] = -2; |
| s.a[5] = -1; |
| s.a[6] = 0; |
| s.a[7] = 1; |
| t.a[0] = INT8x8_MAX; |
| t.a[1] = INT8x8_MAX; |
| t.a[2] = INT8x8_MAX; |
| t.a[3] = INT8x8_MAX; |
| t.a[4] = INT8x8_MAX; |
| t.a[5] = INT8x8_MAX; |
| t.a[6] = INT8x8_MAX; |
| t.a[7] = INT8x8_MAX; |
| r.v = paddsb (s.v, t.v); |
| assert (r.a[0] == INT8x8_MAX - 6); |
| assert (r.a[1] == INT8x8_MAX - 5); |
| assert (r.a[2] == INT8x8_MAX - 4); |
| assert (r.a[3] == INT8x8_MAX - 3); |
| assert (r.a[4] == INT8x8_MAX - 2); |
| assert (r.a[5] == INT8x8_MAX - 1); |
| assert (r.a[6] == INT8x8_MAX); |
| assert (r.a[7] == INT8x8_MAX); |
| } |
| |
| static void test_paddush (void) |
| { |
| uint16x4_encap_t s, t; |
| uint16x4_encap_t r; |
| s.a[0] = 0; |
| s.a[1] = 1; |
| s.a[2] = 0; |
| s.a[3] = 1; |
| t.a[0] = UINT16x4_MAX; |
| t.a[1] = UINT16x4_MAX; |
| t.a[2] = UINT16x4_MAX; |
| t.a[3] = UINT16x4_MAX; |
| r.v = paddush (s.v, t.v); |
| assert (r.a[0] == UINT16x4_MAX); |
| assert (r.a[1] == UINT16x4_MAX); |
| assert (r.a[2] == UINT16x4_MAX); |
| assert (r.a[3] == UINT16x4_MAX); |
| } |
| |
| static void test_paddusb (void) |
| { |
| uint8x8_encap_t s, t; |
| uint8x8_encap_t r; |
| s.a[0] = 0; |
| s.a[1] = 1; |
| s.a[2] = 0; |
| s.a[3] = 1; |
| s.a[4] = 0; |
| s.a[5] = 1; |
| s.a[6] = 0; |
| s.a[7] = 1; |
| t.a[0] = UINT8x8_MAX; |
| t.a[1] = UINT8x8_MAX; |
| t.a[2] = UINT8x8_MAX; |
| t.a[3] = UINT8x8_MAX; |
| t.a[4] = UINT8x8_MAX; |
| t.a[5] = UINT8x8_MAX; |
| t.a[6] = UINT8x8_MAX; |
| t.a[7] = UINT8x8_MAX; |
| r.v = paddusb (s.v, t.v); |
| assert (r.a[0] == UINT8x8_MAX); |
| assert (r.a[1] == UINT8x8_MAX); |
| assert (r.a[2] == UINT8x8_MAX); |
| assert (r.a[3] == UINT8x8_MAX); |
| assert (r.a[4] == UINT8x8_MAX); |
| assert (r.a[5] == UINT8x8_MAX); |
| assert (r.a[6] == UINT8x8_MAX); |
| assert (r.a[7] == UINT8x8_MAX); |
| } |
| |
| static void test_pandn_ud (void) |
| { |
| uint64_t d1 = 0x0000ffff0000ffffull; |
| uint64_t d2 = 0x0000ffff0000ffffull; |
| uint64_t r; |
| r = pandn_ud (d1, d2); |
| assert (r == 0); |
| } |
| |
| static void test_pandn_sd (void) |
| { |
| int64_t d1 = (int64_t) 0x0000000000000000ull; |
| int64_t d2 = (int64_t) 0xfffffffffffffffeull; |
| int64_t r; |
| r = pandn_sd (d1, d2); |
| assert (r == -2); |
| } |
| |
| static void test_pandn_uw (void) |
| { |
| uint32x2_encap_t s, t; |
| uint32x2_encap_t r; |
| s.a[0] = 0xffffffff; |
| s.a[1] = 0x00000000; |
| t.a[0] = 0x00000000; |
| t.a[1] = 0xffffffff; |
| r.v = pandn_uw (s.v, t.v); |
| assert (r.a[0] == 0x00000000); |
| assert (r.a[1] == 0xffffffff); |
| } |
| |
| static void test_pandn_sw (void) |
| { |
| int32x2_encap_t s, t; |
| int32x2_encap_t r; |
| s.a[0] = 0xffffffff; |
| s.a[1] = 0x00000000; |
| t.a[0] = 0xffffffff; |
| t.a[1] = 0xfffffffe; |
| r.v = pandn_sw (s.v, t.v); |
| assert (r.a[0] == 0); |
| assert (r.a[1] == -2); |
| } |
| |
| static void test_pandn_uh (void) |
| { |
| uint16x4_encap_t s, t; |
| uint16x4_encap_t r; |
| s.a[0] = 0xffff; |
| s.a[1] = 0x0000; |
| s.a[2] = 0xffff; |
| s.a[3] = 0x0000; |
| t.a[0] = 0x0000; |
| t.a[1] = 0xffff; |
| t.a[2] = 0x0000; |
| t.a[3] = 0xffff; |
| r.v = pandn_uh (s.v, t.v); |
| assert (r.a[0] == 0x0000); |
| assert (r.a[1] == 0xffff); |
| assert (r.a[2] == 0x0000); |
| assert (r.a[3] == 0xffff); |
| } |
| |
| static void test_pandn_sh (void) |
| { |
| int16x4_encap_t s, t; |
| int16x4_encap_t r; |
| s.a[0] = 0xffff; |
| s.a[1] = 0x0000; |
| s.a[2] = 0xffff; |
| s.a[3] = 0x0000; |
| t.a[0] = 0xffff; |
| t.a[1] = 0xfffe; |
| t.a[2] = 0xffff; |
| t.a[3] = 0xfffe; |
| r.v = pandn_sh (s.v, t.v); |
| assert (r.a[0] == 0); |
| assert (r.a[1] == -2); |
| assert (r.a[2] == 0); |
| assert (r.a[3] == -2); |
| } |
| |
| static void test_pandn_ub (void) |
| { |
| uint8x8_encap_t s, t; |
| uint8x8_encap_t r; |
| s.a[0] = 0xff; |
| s.a[1] = 0x00; |
| s.a[2] = 0xff; |
| s.a[3] = 0x00; |
| s.a[4] = 0xff; |
| s.a[5] = 0x00; |
| s.a[6] = 0xff; |
| s.a[7] = 0x00; |
| t.a[0] = 0x00; |
| t.a[1] = 0xff; |
| t.a[2] = 0x00; |
| t.a[3] = 0xff; |
| t.a[4] = 0x00; |
| t.a[5] = 0xff; |
| t.a[6] = 0x00; |
| t.a[7] = 0xff; |
| r.v = pandn_ub (s.v, t.v); |
| assert (r.a[0] == 0x00); |
| assert (r.a[1] == 0xff); |
| assert (r.a[2] == 0x00); |
| assert (r.a[3] == 0xff); |
| assert (r.a[4] == 0x00); |
| assert (r.a[5] == 0xff); |
| assert (r.a[6] == 0x00); |
| assert (r.a[7] == 0xff); |
| } |
| |
| static void test_pandn_sb (void) |
| { |
| int8x8_encap_t s, t; |
| int8x8_encap_t r; |
| s.a[0] = 0xff; |
| s.a[1] = 0x00; |
| s.a[2] = 0xff; |
| s.a[3] = 0x00; |
| s.a[4] = 0xff; |
| s.a[5] = 0x00; |
| s.a[6] = 0xff; |
| s.a[7] = 0x00; |
| t.a[0] = 0xff; |
| t.a[1] = 0xfe; |
| t.a[2] = 0xff; |
| t.a[3] = 0xfe; |
| t.a[4] = 0xff; |
| t.a[5] = 0xfe; |
| t.a[6] = 0xff; |
| t.a[7] = 0xfe; |
| r.v = pandn_sb (s.v, t.v); |
| assert (r.a[0] == 0); |
| assert (r.a[1] == -2); |
| assert (r.a[2] == 0); |
| assert (r.a[3] == -2); |
| assert (r.a[4] == 0); |
| assert (r.a[5] == -2); |
| assert (r.a[6] == 0); |
| assert (r.a[7] == -2); |
| } |
| |
| static void test_pavgh (void) |
| { |
| uint16x4_encap_t s, t; |
| uint16x4_encap_t r; |
| s.a[0] = 1; |
| s.a[1] = 2; |
| s.a[2] = 3; |
| s.a[3] = 4; |
| t.a[0] = 5; |
| t.a[1] = 6; |
| t.a[2] = 7; |
| t.a[3] = 8; |
| r.v = pavgh (s.v, t.v); |
| assert (r.a[0] == 3); |
| assert (r.a[1] == 4); |
| assert (r.a[2] == 5); |
| assert (r.a[3] == 6); |
| } |
| |
| static void test_pavgb (void) |
| { |
| uint8x8_encap_t s, t; |
| uint8x8_encap_t r; |
| s.a[0] = 1; |
| s.a[1] = 2; |
| s.a[2] = 3; |
| s.a[3] = 4; |
| s.a[4] = 1; |
| s.a[5] = 2; |
| s.a[6] = 3; |
| s.a[7] = 4; |
| t.a[0] = 5; |
| t.a[1] = 6; |
| t.a[2] = 7; |
| t.a[3] = 8; |
| t.a[4] = 5; |
| t.a[5] = 6; |
| t.a[6] = 7; |
| t.a[7] = 8; |
| r.v = pavgb (s.v, t.v); |
| assert (r.a[0] == 3); |
| assert (r.a[1] == 4); |
| assert (r.a[2] == 5); |
| assert (r.a[3] == 6); |
| assert (r.a[4] == 3); |
| assert (r.a[5] == 4); |
| assert (r.a[6] == 5); |
| assert (r.a[7] == 6); |
| } |
| |
| static void test_pcmpeqw_u (void) |
| { |
| uint32x2_encap_t s, t; |
| uint32x2_encap_t r; |
| s.a[0] = 42; |
| s.a[1] = 43; |
| t.a[0] = 43; |
| t.a[1] = 43; |
| r.v = pcmpeqw_u (s.v, t.v); |
| assert (r.a[0] == 0x00000000); |
| assert (r.a[1] == 0xffffffff); |
| } |
| |
| static void test_pcmpeqh_u (void) |
| { |
| uint16x4_encap_t s, t; |
| uint16x4_encap_t r; |
| s.a[0] = 42; |
| s.a[1] = 43; |
| s.a[2] = 42; |
| s.a[3] = 43; |
| t.a[0] = 43; |
| t.a[1] = 43; |
| t.a[2] = 43; |
| t.a[3] = 43; |
| r.v = pcmpeqh_u (s.v, t.v); |
| assert (r.a[0] == 0x0000); |
| assert (r.a[1] == 0xffff); |
| assert (r.a[2] == 0x0000); |
| assert (r.a[3] == 0xffff); |
| } |
| |
| static void test_pcmpeqb_u (void) |
| { |
| uint8x8_encap_t s, t; |
| uint8x8_encap_t r; |
| s.a[0] = 42; |
| s.a[1] = 43; |
| s.a[2] = 42; |
| s.a[3] = 43; |
| s.a[4] = 42; |
| s.a[5] = 43; |
| s.a[6] = 42; |
| s.a[7] = 43; |
| t.a[0] = 43; |
| t.a[1] = 43; |
| t.a[2] = 43; |
| t.a[3] = 43; |
| t.a[4] = 43; |
| t.a[5] = 43; |
| t.a[6] = 43; |
| t.a[7] = 43; |
| r.v = pcmpeqb_u (s.v, t.v); |
| assert (r.a[0] == 0x00); |
| assert (r.a[1] == 0xff); |
| assert (r.a[2] == 0x00); |
| assert (r.a[3] == 0xff); |
| assert (r.a[4] == 0x00); |
| assert (r.a[5] == 0xff); |
| assert (r.a[6] == 0x00); |
| assert (r.a[7] == 0xff); |
| } |
| |
| static void test_pcmpeqw_s (void) |
| { |
| int32x2_encap_t s, t; |
| int32x2_encap_t r; |
| s.a[0] = -42; |
| s.a[1] = -42; |
| t.a[0] = 42; |
| t.a[1] = -42; |
| r.v = pcmpeqw_s (s.v, t.v); |
| assert (r.a[0] == 0); |
| assert (r.a[1] == -1); |
| } |
| |
| static void test_pcmpeqh_s (void) |
| { |
| int16x4_encap_t s, t; |
| int16x4_encap_t r; |
| s.a[0] = -42; |
| s.a[1] = -42; |
| s.a[2] = -42; |
| s.a[3] = -42; |
| t.a[0] = 42; |
| t.a[1] = -42; |
| t.a[2] = 42; |
| t.a[3] = -42; |
| r.v = pcmpeqh_s (s.v, t.v); |
| assert (r.a[0] == 0); |
| assert (r.a[1] == -1); |
| assert (r.a[2] == 0); |
| assert (r.a[3] == -1); |
| } |
| |
| static void test_pcmpeqb_s (void) |
| { |
| int8x8_encap_t s, t; |
| int8x8_encap_t r; |
| s.a[0] = -42; |
| s.a[1] = -42; |
| s.a[2] = -42; |
| s.a[3] = -42; |
| s.a[4] = -42; |
| s.a[5] = -42; |
| s.a[6] = -42; |
| s.a[7] = -42; |
| t.a[0] = 42; |
| t.a[1] = -42; |
| t.a[2] = 42; |
| t.a[3] = -42; |
| t.a[4] = 42; |
| t.a[5] = -42; |
| t.a[6] = 42; |
| t.a[7] = -42; |
| r.v = pcmpeqb_s (s.v, t.v); |
| assert (r.a[0] == 0); |
| assert (r.a[1] == -1); |
| assert (r.a[2] == 0); |
| assert (r.a[3] == -1); |
| assert (r.a[4] == 0); |
| assert (r.a[5] == -1); |
| assert (r.a[6] == 0); |
| assert (r.a[7] == -1); |
| } |
| |
| static void test_pcmpgtw_u (void) |
| { |
| uint32x2_encap_t s, t; |
| uint32x2_encap_t r; |
| s.a[0] = 42; |
| s.a[1] = 43; |
| t.a[0] = 43; |
| t.a[1] = 42; |
| r.v = pcmpgtw_u (s.v, t.v); |
| assert (r.a[0] == 0x00000000); |
| assert (r.a[1] == 0xffffffff); |
| } |
| |
| static void test_pcmpgth_u (void) |
| { |
| uint16x4_encap_t s, t; |
| uint16x4_encap_t r; |
| s.a[0] = 40; |
| s.a[1] = 41; |
| s.a[2] = 42; |
| s.a[3] = 43; |
| t.a[0] = 40; |
| t.a[1] = 41; |
| t.a[2] = 43; |
| t.a[3] = 42; |
| r.v = pcmpgth_u (s.v, t.v); |
| assert (r.a[0] == 0x0000); |
| assert (r.a[1] == 0x0000); |
| assert (r.a[2] == 0x0000); |
| assert (r.a[3] == 0xffff); |
| } |
| |
| static void test_pcmpgtb_u (void) |
| { |
| uint8x8_encap_t s, t; |
| uint8x8_encap_t r; |
| s.a[0] = 40; |
| s.a[1] = 41; |
| s.a[2] = 42; |
| s.a[3] = 43; |
| s.a[4] = 44; |
| s.a[5] = 45; |
| s.a[6] = 46; |
| s.a[7] = 47; |
| t.a[0] = 48; |
| t.a[1] = 47; |
| t.a[2] = 46; |
| t.a[3] = 45; |
| t.a[4] = 44; |
| t.a[5] = 43; |
| t.a[6] = 42; |
| t.a[7] = 41; |
| r.v = pcmpgtb_u (s.v, t.v); |
| assert (r.a[0] == 0x00); |
| assert (r.a[1] == 0x00); |
| assert (r.a[2] == 0x00); |
| assert (r.a[3] == 0x00); |
| assert (r.a[4] == 0x00); |
| assert (r.a[5] == 0xff); |
| assert (r.a[6] == 0xff); |
| assert (r.a[7] == 0xff); |
| } |
| |
| static void test_pcmpgtw_s (void) |
| { |
| int32x2_encap_t s, t; |
| int32x2_encap_t r; |
| s.a[0] = 42; |
| s.a[1] = -42; |
| t.a[0] = -42; |
| t.a[1] = -42; |
| r.v = pcmpgtw_s (s.v, t.v); |
| assert (r.a[0] == -1); |
| assert (r.a[1] == 0); |
| } |
| |
| static void test_pcmpgth_s (void) |
| { |
| int16x4_encap_t s, t; |
| int16x4_encap_t r; |
| s.a[0] = -42; |
| s.a[1] = -42; |
| s.a[2] = -42; |
| s.a[3] = -42; |
| t.a[0] = 42; |
| t.a[1] = 43; |
| t.a[2] = 44; |
| t.a[3] = -43; |
| r.v = pcmpgth_s (s.v, t.v); |
| assert (r.a[0] == 0); |
| assert (r.a[1] == 0); |
| assert (r.a[2] == 0); |
| assert (r.a[3] == -1); |
| } |
| |
| static void test_pcmpgtb_s (void) |
| { |
| int8x8_encap_t s, t; |
| int8x8_encap_t r; |
| s.a[0] = -42; |
| s.a[1] = -42; |
| s.a[2] = -42; |
| s.a[3] = -42; |
| s.a[4] = 42; |
| s.a[5] = 42; |
| s.a[6] = 42; |
| s.a[7] = 42; |
| t.a[0] = -45; |
| t.a[1] = -44; |
| t.a[2] = -43; |
| t.a[3] = -42; |
| t.a[4] = 42; |
| t.a[5] = 43; |
| t.a[6] = 41; |
| t.a[7] = 40; |
| r.v = pcmpgtb_s (s.v, t.v); |
| assert (r.a[0] == -1); |
| assert (r.a[1] == -1); |
| assert (r.a[2] == -1); |
| assert (r.a[3] == 0); |
| assert (r.a[4] == 0); |
| assert (r.a[5] == 0); |
| assert (r.a[6] == -1); |
| assert (r.a[7] == -1); |
| } |
| |
| static void test_pextrh_u (void) |
| { |
| uint16x4_encap_t s; |
| uint16x4_encap_t r; |
| s.a[0] = 40; |
| s.a[1] = 41; |
| s.a[2] = 42; |
| s.a[3] = 43; |
| r.v = pextrh_u (s.v, 1); |
| assert (r.a[0] == 41); |
| assert (r.a[1] == 0); |
| assert (r.a[2] == 0); |
| assert (r.a[3] == 0); |
| } |
| |
| static void test_pextrh_s (void) |
| { |
| int16x4_encap_t s; |
| int16x4_encap_t r; |
| s.a[0] = -40; |
| s.a[1] = -41; |
| s.a[2] = -42; |
| s.a[3] = -43; |
| r.v = pextrh_s (s.v, 2); |
| assert (r.a[0] == -42); |
| assert (r.a[1] == 0); |
| assert (r.a[2] == 0); |
| assert (r.a[3] == 0); |
| } |
| |
| static void test_pinsrh_0123_u (void) |
| { |
| uint16x4_encap_t s, t; |
| uint16x4_encap_t r; |
| s.a[0] = 42; |
| s.a[1] = 0; |
| s.a[2] = 0; |
| s.a[3] = 0; |
| t.a[0] = 0; |
| t.a[1] = 0; |
| t.a[2] = 0; |
| t.a[3] = 0; |
| r.v = pinsrh_0_u (t.v, s.v); |
| r.v = pinsrh_1_u (r.v, s.v); |
| r.v = pinsrh_2_u (r.v, s.v); |
| r.v = pinsrh_3_u (r.v, s.v); |
| assert (r.a[0] == 42); |
| assert (r.a[1] == 42); |
| assert (r.a[2] == 42); |
| assert (r.a[3] == 42); |
| } |
| |
| static void test_pinsrh_0123_s (void) |
| { |
| int16x4_encap_t s, t; |
| int16x4_encap_t r; |
| s.a[0] = -42; |
| s.a[1] = 0; |
| s.a[2] = 0; |
| s.a[3] = 0; |
| t.a[0] = 0; |
| t.a[1] = 0; |
| t.a[2] = 0; |
| t.a[3] = 0; |
| r.v = pinsrh_0_s (t.v, s.v); |
| r.v = pinsrh_1_s (r.v, s.v); |
| r.v = pinsrh_2_s (r.v, s.v); |
| r.v = pinsrh_3_s (r.v, s.v); |
| assert (r.a[0] == -42); |
| assert (r.a[1] == -42); |
| assert (r.a[2] == -42); |
| assert (r.a[3] == -42); |
| } |
| |
| static void test_pmaddhw (void) |
| { |
| int16x4_encap_t s, t; |
| int32x2_encap_t r; |
| s.a[0] = -5; |
| s.a[1] = -4; |
| s.a[2] = -3; |
| s.a[3] = -2; |
| t.a[0] = 10; |
| t.a[1] = 11; |
| t.a[2] = 12; |
| t.a[3] = 13; |
| r.v = pmaddhw (s.v, t.v); |
| assert (r.a[0] == (-5*10 + -4*11)); |
| assert (r.a[1] == (-3*12 + -2*13)); |
| } |
| |
| static void test_pmaxsh (void) |
| { |
| int16x4_encap_t s, t; |
| int16x4_encap_t r; |
| s.a[0] = -20; |
| s.a[1] = 40; |
| s.a[2] = -10; |
| s.a[3] = 50; |
| t.a[0] = 20; |
| t.a[1] = -40; |
| t.a[2] = 10; |
| t.a[3] = -50; |
| r.v = pmaxsh (s.v, t.v); |
| assert (r.a[0] == 20); |
| assert (r.a[1] == 40); |
| assert (r.a[2] == 10); |
| assert (r.a[3] == 50); |
| } |
| |
| static void test_pmaxub (void) |
| { |
| uint8x8_encap_t s, t; |
| uint8x8_encap_t r; |
| s.a[0] = 10; |
| s.a[1] = 20; |
| s.a[2] = 30; |
| s.a[3] = 40; |
| s.a[4] = 50; |
| s.a[5] = 60; |
| s.a[6] = 70; |
| s.a[7] = 80; |
| t.a[0] = 80; |
| t.a[1] = 70; |
| t.a[2] = 60; |
| t.a[3] = 50; |
| t.a[4] = 40; |
| t.a[5] = 30; |
| t.a[6] = 20; |
| t.a[7] = 10; |
| r.v = pmaxub (s.v, t.v); |
| assert (r.a[0] == 80); |
| assert (r.a[1] == 70); |
| assert (r.a[2] == 60); |
| assert (r.a[3] == 50); |
| assert (r.a[4] == 50); |
| assert (r.a[5] == 60); |
| assert (r.a[6] == 70); |
| assert (r.a[7] == 80); |
| } |
| |
| static void test_pminsh (void) |
| { |
| int16x4_encap_t s, t; |
| int16x4_encap_t r; |
| s.a[0] = -20; |
| s.a[1] = 40; |
| s.a[2] = -10; |
| s.a[3] = 50; |
| t.a[0] = 20; |
| t.a[1] = -40; |
| t.a[2] = 10; |
| t.a[3] = -50; |
| r.v = pminsh (s.v, t.v); |
| assert (r.a[0] == -20); |
| assert (r.a[1] == -40); |
| assert (r.a[2] == -10); |
| assert (r.a[3] == -50); |
| } |
| |
| static void test_pminub (void) |
| { |
| uint8x8_encap_t s, t; |
| uint8x8_encap_t r; |
| s.a[0] = 10; |
| s.a[1] = 20; |
| s.a[2] = 30; |
| s.a[3] = 40; |
| s.a[4] = 50; |
| s.a[5] = 60; |
| s.a[6] = 70; |
| s.a[7] = 80; |
| t.a[0] = 80; |
| t.a[1] = 70; |
| t.a[2] = 60; |
| t.a[3] = 50; |
| t.a[4] = 40; |
| t.a[5] = 30; |
| t.a[6] = 20; |
| t.a[7] = 10; |
| r.v = pminub (s.v, t.v); |
| assert (r.a[0] == 10); |
| assert (r.a[1] == 20); |
| assert (r.a[2] == 30); |
| assert (r.a[3] == 40); |
| assert (r.a[4] == 40); |
| assert (r.a[5] == 30); |
| assert (r.a[6] == 20); |
| assert (r.a[7] == 10); |
| } |
| |
| static void test_pmovmskb_u (void) |
| { |
| uint8x8_encap_t s; |
| uint8x8_encap_t r; |
| s.a[0] = 0xf0; |
| s.a[1] = 0x40; |
| s.a[2] = 0xf0; |
| s.a[3] = 0x40; |
| s.a[4] = 0xf0; |
| s.a[5] = 0x40; |
| s.a[6] = 0xf0; |
| s.a[7] = 0x40; |
| r.v = pmovmskb_u (s.v); |
| assert (r.a[0] == 0x55); |
| assert (r.a[1] == 0); |
| assert (r.a[2] == 0); |
| assert (r.a[3] == 0); |
| assert (r.a[4] == 0); |
| assert (r.a[5] == 0); |
| assert (r.a[6] == 0); |
| assert (r.a[7] == 0); |
| } |
| |
| static void test_pmovmskb_s (void) |
| { |
| int8x8_encap_t s; |
| int8x8_encap_t r; |
| s.a[0] = -1; |
| s.a[1] = 1; |
| s.a[2] = -1; |
| s.a[3] = 1; |
| s.a[4] = -1; |
| s.a[5] = 1; |
| s.a[6] = -1; |
| s.a[7] = 1; |
| r.v = pmovmskb_s (s.v); |
| assert (r.a[0] == 0x55); |
| assert (r.a[1] == 0); |
| assert (r.a[2] == 0); |
| assert (r.a[3] == 0); |
| assert (r.a[4] == 0); |
| assert (r.a[5] == 0); |
| assert (r.a[6] == 0); |
| assert (r.a[7] == 0); |
| } |
| |
| static void test_pmulhuh (void) |
| { |
| uint16x4_encap_t s, t; |
| uint16x4_encap_t r; |
| s.a[0] = 0xff00; |
| s.a[1] = 0xff00; |
| s.a[2] = 0xff00; |
| s.a[3] = 0xff00; |
| t.a[0] = 16; |
| t.a[1] = 16; |
| t.a[2] = 16; |
| t.a[3] = 16; |
| r.v = pmulhuh (s.v, t.v); |
| assert (r.a[0] == 0x000f); |
| assert (r.a[1] == 0x000f); |
| assert (r.a[2] == 0x000f); |
| assert (r.a[3] == 0x000f); |
| } |
| |
| static void test_pmulhh (void) |
| { |
| int16x4_encap_t s, t; |
| int16x4_encap_t r; |
| s.a[0] = 0x0ff0; |
| s.a[1] = 0x0ff0; |
| s.a[2] = 0x0ff0; |
| s.a[3] = 0x0ff0; |
| t.a[0] = -16*16; |
| t.a[1] = -16*16; |
| t.a[2] = -16*16; |
| t.a[3] = -16*16; |
| r.v = pmulhh (s.v, t.v); |
| assert (r.a[0] == -16); |
| assert (r.a[1] == -16); |
| assert (r.a[2] == -16); |
| assert (r.a[3] == -16); |
| } |
| |
| static void test_pmullh (void) |
| { |
| int16x4_encap_t s, t; |
| int16x4_encap_t r; |
| s.a[0] = 0x0ff0; |
| s.a[1] = 0x0ff0; |
| s.a[2] = 0x0ff0; |
| s.a[3] = 0x0ff0; |
| t.a[0] = -16*16; |
| t.a[1] = -16*16; |
| t.a[2] = -16*16; |
| t.a[3] = -16*16; |
| r.v = pmullh (s.v, t.v); |
| assert (r.a[0] == 4096); |
| assert (r.a[1] == 4096); |
| assert (r.a[2] == 4096); |
| assert (r.a[3] == 4096); |
| } |
| |
| static void test_pmuluw (void) |
| { |
| uint32x2_encap_t s, t; |
| uint64_t r; |
| s.a[0] = 0xdeadbeef; |
| s.a[1] = 0; |
| t.a[0] = 0x0f00baaa; |
| t.a[1] = 0; |
| r = pmuluw (s.v, t.v); |
| assert (r == 0xd0cd08e1d1a70b6ull); |
| } |
| |
| static void test_pasubub (void) |
| { |
| uint8x8_encap_t s, t; |
| uint8x8_encap_t r; |
| s.a[0] = 10; |
| s.a[1] = 20; |
| s.a[2] = 30; |
| s.a[3] = 40; |
| s.a[4] = 50; |
| s.a[5] = 60; |
| s.a[6] = 70; |
| s.a[7] = 80; |
| t.a[0] = 80; |
| t.a[1] = 70; |
| t.a[2] = 60; |
| t.a[3] = 50; |
| t.a[4] = 40; |
| t.a[5] = 30; |
| t.a[6] = 20; |
| t.a[7] = 10; |
| r.v = pasubub (s.v, t.v); |
| assert (r.a[0] == 70); |
| assert (r.a[1] == 50); |
| assert (r.a[2] == 30); |
| assert (r.a[3] == 10); |
| assert (r.a[4] == 10); |
| assert (r.a[5] == 30); |
| assert (r.a[6] == 50); |
| assert (r.a[7] == 70); |
| } |
| |
| static void test_biadd (void) |
| { |
| uint8x8_encap_t s; |
| uint16x4_encap_t r; |
| s.a[0] = 10; |
| s.a[1] = 20; |
| s.a[2] = 30; |
| s.a[3] = 40; |
| s.a[4] = 50; |
| s.a[5] = 60; |
| s.a[6] = 70; |
| s.a[7] = 80; |
| r.v = biadd (s.v); |
| assert (r.a[0] == 360); |
| assert (r.a[1] == 0); |
| assert (r.a[2] == 0); |
| assert (r.a[3] == 0); |
| } |
| |
| static void test_psadbh (void) |
| { |
| uint8x8_encap_t s, t; |
| uint16x4_encap_t r; |
| s.a[0] = 10; |
| s.a[1] = 20; |
| s.a[2] = 30; |
| s.a[3] = 40; |
| s.a[4] = 50; |
| s.a[5] = 60; |
| s.a[6] = 70; |
| s.a[7] = 80; |
| t.a[0] = 80; |
| t.a[1] = 70; |
| t.a[2] = 60; |
| t.a[3] = 50; |
| t.a[4] = 40; |
| t.a[5] = 30; |
| t.a[6] = 20; |
| t.a[7] = 10; |
| r.v = psadbh (s.v, t.v); |
| assert (r.a[0] == 0x0140); |
| assert (r.a[1] == 0); |
| assert (r.a[2] == 0); |
| assert (r.a[3] == 0); |
| } |
| |
| static void test_pshufh_u (void) |
| { |
| uint16x4_encap_t s; |
| uint16x4_encap_t r; |
| s.a[0] = 1; |
| s.a[1] = 2; |
| s.a[2] = 3; |
| s.a[3] = 4; |
| r.a[0] = 0; |
| r.a[1] = 0; |
| r.a[2] = 0; |
| r.a[3] = 0; |
| r.v = pshufh_u (r.v, s.v, 0xe5); |
| assert (r.a[0] == 2); |
| assert (r.a[1] == 2); |
| assert (r.a[2] == 3); |
| assert (r.a[3] == 4); |
| } |
| |
| static void test_pshufh_s (void) |
| { |
| int16x4_encap_t s; |
| int16x4_encap_t r; |
| s.a[0] = -1; |
| s.a[1] = 2; |
| s.a[2] = -3; |
| s.a[3] = 4; |
| r.a[0] = 0; |
| r.a[1] = 0; |
| r.a[2] = 0; |
| r.a[3] = 0; |
| r.v = pshufh_s (r.v, s.v, 0xe5); |
| assert (r.a[0] == 2); |
| assert (r.a[1] == 2); |
| assert (r.a[2] == -3); |
| assert (r.a[3] == 4); |
| } |
| |
| static void test_psllh_u (void) |
| { |
| uint16x4_encap_t s; |
| uint16x4_encap_t r; |
| s.a[0] = 0xffff; |
| s.a[1] = 0xffff; |
| s.a[2] = 0xffff; |
| s.a[3] = 0xffff; |
| r.v = psllh_u (s.v, 1); |
| assert (r.a[0] == 0xfffe); |
| assert (r.a[1] == 0xfffe); |
| assert (r.a[2] == 0xfffe); |
| assert (r.a[3] == 0xfffe); |
| } |
| |
| static void test_psllw_u (void) |
| { |
| uint32x2_encap_t s; |
| uint32x2_encap_t r; |
| s.a[0] = 0xffffffff; |
| s.a[1] = 0xffffffff; |
| r.v = psllw_u (s.v, 2); |
| assert (r.a[0] == 0xfffffffc); |
| assert (r.a[1] == 0xfffffffc); |
| } |
| |
| static void test_psllh_s (void) |
| { |
| int16x4_encap_t s; |
| int16x4_encap_t r; |
| s.a[0] = -1; |
| s.a[1] = -1; |
| s.a[2] = -1; |
| s.a[3] = -1; |
| r.v = psllh_s (s.v, 1); |
| assert (r.a[0] == -2); |
| assert (r.a[1] == -2); |
| assert (r.a[2] == -2); |
| assert (r.a[3] == -2); |
| } |
| |
| static void test_psllw_s (void) |
| { |
| int32x2_encap_t s; |
| int32x2_encap_t r; |
| s.a[0] = -1; |
| s.a[1] = -1; |
| r.v = psllw_s (s.v, 2); |
| assert (r.a[0] == -4); |
| assert (r.a[1] == -4); |
| } |
| |
| static void test_psrah_u (void) |
| { |
| uint16x4_encap_t s; |
| uint16x4_encap_t r; |
| s.a[0] = 0xffef; |
| s.a[1] = 0xffef; |
| s.a[2] = 0xffef; |
| s.a[3] = 0xffef; |
| r.v = psrah_u (s.v, 1); |
| assert (r.a[0] == 0xfff7); |
| assert (r.a[1] == 0xfff7); |
| assert (r.a[2] == 0xfff7); |
| assert (r.a[3] == 0xfff7); |
| } |
| |
| static void test_psraw_u (void) |
| { |
| uint32x2_encap_t s; |
| uint32x2_encap_t r; |
| s.a[0] = 0xffffffef; |
| s.a[1] = 0xffffffef; |
| r.v = psraw_u (s.v, 1); |
| assert (r.a[0] == 0xfffffff7); |
| assert (r.a[1] == 0xfffffff7); |
| } |
| |
| static void test_psrah_s (void) |
| { |
| int16x4_encap_t s; |
| int16x4_encap_t r; |
| s.a[0] = -2; |
| s.a[1] = -2; |
| s.a[2] = -2; |
| s.a[3] = -2; |
| r.v = psrah_s (s.v, 1); |
| assert (r.a[0] == -1); |
| assert (r.a[1] == -1); |
| assert (r.a[2] == -1); |
| assert (r.a[3] == -1); |
| } |
| |
| static void test_psraw_s (void) |
| { |
| int32x2_encap_t s; |
| int32x2_encap_t r; |
| s.a[0] = -2; |
| s.a[1] = -2; |
| r.v = psraw_s (s.v, 1); |
| assert (r.a[0] == -1); |
| assert (r.a[1] == -1); |
| } |
| |
| static void test_psrlh_u (void) |
| { |
| uint16x4_encap_t s; |
| uint16x4_encap_t r; |
| s.a[0] = 0xffef; |
| s.a[1] = 0xffef; |
| s.a[2] = 0xffef; |
| s.a[3] = 0xffef; |
| r.v = psrlh_u (s.v, 1); |
| assert (r.a[0] == 0x7ff7); |
| assert (r.a[1] == 0x7ff7); |
| assert (r.a[2] == 0x7ff7); |
| assert (r.a[3] == 0x7ff7); |
| } |
| |
| static void test_psrlw_u (void) |
| { |
| uint32x2_encap_t s; |
| uint32x2_encap_t r; |
| s.a[0] = 0xffffffef; |
| s.a[1] = 0xffffffef; |
| r.v = psrlw_u (s.v, 1); |
| assert (r.a[0] == 0x7ffffff7); |
| assert (r.a[1] == 0x7ffffff7); |
| } |
| |
| static void test_psrlh_s (void) |
| { |
| int16x4_encap_t s; |
| int16x4_encap_t r; |
| s.a[0] = -1; |
| s.a[1] = -1; |
| s.a[2] = -1; |
| s.a[3] = -1; |
| r.v = psrlh_s (s.v, 1); |
| assert (r.a[0] == INT16x4_MAX); |
| assert (r.a[1] == INT16x4_MAX); |
| assert (r.a[2] == INT16x4_MAX); |
| assert (r.a[3] == INT16x4_MAX); |
| } |
| |
| static void test_psrlw_s (void) |
| { |
| int32x2_encap_t s; |
| int32x2_encap_t r; |
| s.a[0] = -1; |
| s.a[1] = -1; |
| r.v = psrlw_s (s.v, 1); |
| assert (r.a[0] == INT32x2_MAX); |
| assert (r.a[1] == INT32x2_MAX); |
| } |
| |
| static void test_psubw_u (void) |
| { |
| uint32x2_encap_t s, t; |
| uint32x2_encap_t r; |
| s.a[0] = 3; |
| s.a[1] = 4; |
| t.a[0] = 2; |
| t.a[1] = 1; |
| r.v = psubw_u (s.v, t.v); |
| assert (r.a[0] == 1); |
| assert (r.a[1] == 3); |
| } |
| |
| static void test_psubw_s (void) |
| { |
| int32x2_encap_t s, t; |
| int32x2_encap_t r; |
| s.a[0] = -2; |
| s.a[1] = -1; |
| t.a[0] = 3; |
| t.a[1] = -4; |
| r.v = psubw_s (s.v, t.v); |
| assert (r.a[0] == -5); |
| assert (r.a[1] == 3); |
| } |
| |
| static void test_psubh_u (void) |
| { |
| uint16x4_encap_t s, t; |
| uint16x4_encap_t r; |
| s.a[0] = 5; |
| s.a[1] = 6; |
| s.a[2] = 7; |
| s.a[3] = 8; |
| t.a[0] = 1; |
| t.a[1] = 2; |
| t.a[2] = 3; |
| t.a[3] = 4; |
| r.v = psubh_u (s.v, t.v); |
| assert (r.a[0] == 4); |
| assert (r.a[1] == 4); |
| assert (r.a[2] == 4); |
| assert (r.a[3] == 4); |
| } |
| |
| static void test_psubh_s (void) |
| { |
| int16x4_encap_t s, t; |
| int16x4_encap_t r; |
| s.a[0] = -10; |
| s.a[1] = -20; |
| s.a[2] = -30; |
| s.a[3] = -40; |
| t.a[0] = 1; |
| t.a[1] = 2; |
| t.a[2] = 3; |
| t.a[3] = 4; |
| r.v = psubh_s (s.v, t.v); |
| assert (r.a[0] == -11); |
| assert (r.a[1] == -22); |
| assert (r.a[2] == -33); |
| assert (r.a[3] == -44); |
| } |
| |
| static void test_psubb_u (void) |
| { |
| uint8x8_encap_t s, t; |
| uint8x8_encap_t r; |
| s.a[0] = 10; |
| s.a[1] = 11; |
| s.a[2] = 12; |
| s.a[3] = 13; |
| s.a[4] = 14; |
| s.a[5] = 15; |
| s.a[6] = 16; |
| s.a[7] = 17; |
| t.a[0] = 1; |
| t.a[1] = 2; |
| t.a[2] = 3; |
| t.a[3] = 4; |
| t.a[4] = 5; |
| t.a[5] = 6; |
| t.a[6] = 7; |
| t.a[7] = 8; |
| r.v = psubb_u (s.v, t.v); |
| assert (r.a[0] == 9); |
| assert (r.a[1] == 9); |
| assert (r.a[2] == 9); |
| assert (r.a[3] == 9); |
| assert (r.a[4] == 9); |
| assert (r.a[5] == 9); |
| assert (r.a[6] == 9); |
| assert (r.a[7] == 9); |
| } |
| |
| static void test_psubb_s (void) |
| { |
| int8x8_encap_t s, t; |
| int8x8_encap_t r; |
| s.a[0] = -10; |
| s.a[1] = -20; |
| s.a[2] = -30; |
| s.a[3] = -40; |
| s.a[4] = -50; |
| s.a[5] = -60; |
| s.a[6] = -70; |
| s.a[7] = -80; |
| t.a[0] = 1; |
| t.a[1] = 2; |
| t.a[2] = 3; |
| t.a[3] = 4; |
| t.a[4] = 5; |
| t.a[5] = 6; |
| t.a[6] = 7; |
| t.a[7] = 8; |
| r.v = psubb_s (s.v, t.v); |
| assert (r.a[0] == -11); |
| assert (r.a[1] == -22); |
| assert (r.a[2] == -33); |
| assert (r.a[3] == -44); |
| assert (r.a[4] == -55); |
| assert (r.a[5] == -66); |
| assert (r.a[6] == -77); |
| assert (r.a[7] == -88); |
| } |
| |
| static void test_psubd_u (void) |
| { |
| uint64_t d = 789012; |
| uint64_t e = 123456; |
| uint64_t r; |
| r = psubd_u (d, e); |
| assert (r == 665556); |
| } |
| |
| static void test_psubd_s (void) |
| { |
| int64_t d = 123456; |
| int64_t e = -789012; |
| int64_t r; |
| r = psubd_s (d, e); |
| assert (r == 912468); |
| } |
| |
| static void test_psubsh (void) |
| { |
| int16x4_encap_t s, t; |
| int16x4_encap_t r; |
| s.a[0] = -1; |
| s.a[1] = 0; |
| s.a[2] = 1; |
| s.a[3] = 2; |
| t.a[0] = -INT16x4_MAX; |
| t.a[1] = -INT16x4_MAX; |
| t.a[2] = -INT16x4_MAX; |
| t.a[3] = -INT16x4_MAX; |
| r.v = psubsh (s.v, t.v); |
| assert (r.a[0] == INT16x4_MAX - 1); |
| assert (r.a[1] == INT16x4_MAX); |
| assert (r.a[2] == INT16x4_MAX); |
| assert (r.a[3] == INT16x4_MAX); |
| } |
| |
| static void test_psubsb (void) |
| { |
| int8x8_encap_t s, t; |
| int8x8_encap_t r; |
| s.a[0] = -6; |
| s.a[1] = -5; |
| s.a[2] = -4; |
| s.a[3] = -3; |
| s.a[4] = -2; |
| s.a[5] = -1; |
| s.a[6] = 0; |
| s.a[7] = 1; |
| t.a[0] = -INT8x8_MAX; |
| t.a[1] = -INT8x8_MAX; |
| t.a[2] = -INT8x8_MAX; |
| t.a[3] = -INT8x8_MAX; |
| t.a[4] = -INT8x8_MAX; |
| t.a[5] = -INT8x8_MAX; |
| t.a[6] = -INT8x8_MAX; |
| t.a[7] = -INT8x8_MAX; |
| r.v = psubsb (s.v, t.v); |
| assert (r.a[0] == INT8x8_MAX - 6); |
| assert (r.a[1] == INT8x8_MAX - 5); |
| assert (r.a[2] == INT8x8_MAX - 4); |
| assert (r.a[3] == INT8x8_MAX - 3); |
| assert (r.a[4] == INT8x8_MAX - 2); |
| assert (r.a[5] == INT8x8_MAX - 1); |
| assert (r.a[6] == INT8x8_MAX); |
| assert (r.a[7] == INT8x8_MAX); |
| } |
| |
| static void test_psubush (void) |
| { |
| uint16x4_encap_t s, t; |
| uint16x4_encap_t r; |
| s.a[0] = 0; |
| s.a[1] = 1; |
| s.a[2] = 2; |
| s.a[3] = 3; |
| t.a[0] = 1; |
| t.a[1] = 1; |
| t.a[2] = 3; |
| t.a[3] = 3; |
| r.v = psubush (s.v, t.v); |
| assert (r.a[0] == 0); |
| assert (r.a[1] == 0); |
| assert (r.a[2] == 0); |
| assert (r.a[3] == 0); |
| } |
| |
| static void test_psubusb (void) |
| { |
| uint8x8_encap_t s, t; |
| uint8x8_encap_t r; |
| s.a[0] = 0; |
| s.a[1] = 1; |
| s.a[2] = 2; |
| s.a[3] = 3; |
| s.a[4] = 4; |
| s.a[5] = 5; |
| s.a[6] = 6; |
| s.a[7] = 7; |
| t.a[0] = 1; |
| t.a[1] = 1; |
| t.a[2] = 3; |
| t.a[3] = 3; |
| t.a[4] = 5; |
| t.a[5] = 5; |
| t.a[6] = 7; |
| t.a[7] = 7; |
| r.v = psubusb (s.v, t.v); |
| assert (r.a[0] == 0); |
| assert (r.a[1] == 0); |
| assert (r.a[2] == 0); |
| assert (r.a[3] == 0); |
| assert (r.a[4] == 0); |
| assert (r.a[5] == 0); |
| assert (r.a[6] == 0); |
| assert (r.a[7] == 0); |
| } |
| |
| static void test_punpckhbh_s (void) |
| { |
| int8x8_encap_t s, t; |
| int8x8_encap_t r; |
| s.a[0] = -1; |
| s.a[1] = -3; |
| s.a[2] = -5; |
| s.a[3] = -7; |
| s.a[4] = -9; |
| s.a[5] = -11; |
| s.a[6] = -13; |
| s.a[7] = -15; |
| t.a[0] = 2; |
| t.a[1] = 4; |
| t.a[2] = 6; |
| t.a[3] = 8; |
| t.a[4] = 10; |
| t.a[5] = 12; |
| t.a[6] = 14; |
| t.a[7] = 16; |
| r.v = punpckhbh_s (s.v, t.v); |
| assert (r.a[0] == -9); |
| assert (r.a[1] == 10); |
| assert (r.a[2] == -11); |
| assert (r.a[3] == 12); |
| assert (r.a[4] == -13); |
| assert (r.a[5] == 14); |
| assert (r.a[6] == -15); |
| assert (r.a[7] == 16); |
| } |
| |
| static void test_punpckhbh_u (void) |
| { |
| uint8x8_encap_t s, t; |
| uint8x8_encap_t r; |
| s.a[0] = 1; |
| s.a[1] = 3; |
| s.a[2] = 5; |
| s.a[3] = 7; |
| s.a[4] = 9; |
| s.a[5] = 11; |
| s.a[6] = 13; |
| s.a[7] = 15; |
| t.a[0] = 2; |
| t.a[1] = 4; |
| t.a[2] = 6; |
| t.a[3] = 8; |
| t.a[4] = 10; |
| t.a[5] = 12; |
| t.a[6] = 14; |
| t.a[7] = 16; |
| r.v = punpckhbh_u (s.v, t.v); |
| assert (r.a[0] == 9); |
| assert (r.a[1] == 10); |
| assert (r.a[2] == 11); |
| assert (r.a[3] == 12); |
| assert (r.a[4] == 13); |
| assert (r.a[5] == 14); |
| assert (r.a[6] == 15); |
| assert (r.a[7] == 16); |
| } |
| |
| static void test_punpckhhw_s (void) |
| { |
| int16x4_encap_t s, t; |
| int16x4_encap_t r; |
| s.a[0] = -1; |
| s.a[1] = 3; |
| s.a[2] = -5; |
| s.a[3] = 7; |
| t.a[0] = -2; |
| t.a[1] = 4; |
| t.a[2] = -6; |
| t.a[3] = 8; |
| r.v = punpckhhw_s (s.v, t.v); |
| assert (r.a[0] == -5); |
| assert (r.a[1] == -6); |
| assert (r.a[2] == 7); |
| assert (r.a[3] == 8); |
| } |
| |
| static void test_punpckhhw_u (void) |
| { |
| uint16x4_encap_t s, t; |
| uint16x4_encap_t r; |
| s.a[0] = 1; |
| s.a[1] = 3; |
| s.a[2] = 5; |
| s.a[3] = 7; |
| t.a[0] = 2; |
| t.a[1] = 4; |
| t.a[2] = 6; |
| t.a[3] = 8; |
| r.v = punpckhhw_u (s.v, t.v); |
| assert (r.a[0] == 5); |
| assert (r.a[1] == 6); |
| assert (r.a[2] == 7); |
| assert (r.a[3] == 8); |
| } |
| |
| static void test_punpckhwd_s (void) |
| { |
| int32x2_encap_t s, t; |
| int32x2_encap_t r; |
| s.a[0] = 1; |
| s.a[1] = 3; |
| t.a[0] = 2; |
| t.a[1] = -4; |
| r.v = punpckhwd_s (s.v, t.v); |
| assert (r.a[0] == 3); |
| assert (r.a[1] == -4); |
| } |
| |
| static void test_punpckhwd_u (void) |
| { |
| uint32x2_encap_t s, t; |
| uint32x2_encap_t r; |
| s.a[0] = 1; |
| s.a[1] = 3; |
| t.a[0] = 2; |
| t.a[1] = 4; |
| r.v = punpckhwd_u (s.v, t.v); |
| assert (r.a[0] == 3); |
| assert (r.a[1] == 4); |
| } |
| |
| static void test_punpcklbh_s (void) |
| { |
| int8x8_encap_t s, t; |
| int8x8_encap_t r; |
| s.a[0] = -1; |
| s.a[1] = -3; |
| s.a[2] = -5; |
| s.a[3] = -7; |
| s.a[4] = -9; |
| s.a[5] = -11; |
| s.a[6] = -13; |
| s.a[7] = -15; |
| t.a[0] = 2; |
| t.a[1] = 4; |
| t.a[2] = 6; |
| t.a[3] = 8; |
| t.a[4] = 10; |
| t.a[5] = 12; |
| t.a[6] = 14; |
| t.a[7] = 16; |
| r.v = punpcklbh_s (s.v, t.v); |
| assert (r.a[0] == -1); |
| assert (r.a[1] == 2); |
| assert (r.a[2] == -3); |
| assert (r.a[3] == 4); |
| assert (r.a[4] == -5); |
| assert (r.a[5] == 6); |
| assert (r.a[6] == -7); |
| assert (r.a[7] == 8); |
| } |
| |
| static void test_punpcklbh_u (void) |
| { |
| uint8x8_encap_t s, t; |
| uint8x8_encap_t r; |
| s.a[0] = 1; |
| s.a[1] = 3; |
| s.a[2] = 5; |
| s.a[3] = 7; |
| s.a[4] = 9; |
| s.a[5] = 11; |
| s.a[6] = 13; |
| s.a[7] = 15; |
| t.a[0] = 2; |
| t.a[1] = 4; |
| t.a[2] = 6; |
| t.a[3] = 8; |
| t.a[4] = 10; |
| t.a[5] = 12; |
| t.a[6] = 14; |
| t.a[7] = 16; |
| r.v = punpcklbh_u (s.v, t.v); |
| assert (r.a[0] == 1); |
| assert (r.a[1] == 2); |
| assert (r.a[2] == 3); |
| assert (r.a[3] == 4); |
| assert (r.a[4] == 5); |
| assert (r.a[5] == 6); |
| assert (r.a[6] == 7); |
| assert (r.a[7] == 8); |
| } |
| |
| static void test_punpcklhw_s (void) |
| { |
| int16x4_encap_t s, t; |
| int16x4_encap_t r; |
| s.a[0] = -1; |
| s.a[1] = 3; |
| s.a[2] = -5; |
| s.a[3] = 7; |
| t.a[0] = -2; |
| t.a[1] = 4; |
| t.a[2] = -6; |
| t.a[3] = 8; |
| r.v = punpcklhw_s (s.v, t.v); |
| assert (r.a[0] == -1); |
| assert (r.a[1] == -2); |
| assert (r.a[2] == 3); |
| assert (r.a[3] == 4); |
| } |
| |
| static void test_punpcklhw_u (void) |
| { |
| uint16x4_encap_t s, t; |
| uint16x4_encap_t r; |
| s.a[0] = 1; |
| s.a[1] = 3; |
| s.a[2] = 5; |
| s.a[3] = 7; |
| t.a[0] = 2; |
| t.a[1] = 4; |
| t.a[2] = 6; |
| t.a[3] = 8; |
| r.v = punpcklhw_u (s.v, t.v); |
| assert (r.a[0] == 1); |
| assert (r.a[1] == 2); |
| assert (r.a[2] == 3); |
| assert (r.a[3] == 4); |
| } |
| |
| static void test_punpcklwd_s (void) |
| { |
| int32x2_encap_t s, t; |
| int32x2_encap_t r; |
| s.a[0] = 1; |
| s.a[1] = 3; |
| t.a[0] = -2; |
| t.a[1] = 4; |
| r.v = punpcklwd_s (s.v, t.v); |
| assert (r.a[0] == 1); |
| assert (r.a[1] == -2); |
| } |
| |
| static void test_punpcklwd_u (void) |
| { |
| uint32x2_encap_t s, t; |
| uint32x2_encap_t r; |
| s.a[0] = 1; |
| s.a[1] = 3; |
| t.a[0] = 2; |
| t.a[1] = 4; |
| r.v = punpcklwd_u (s.v, t.v); |
| assert (r.a[0] == 1); |
| assert (r.a[1] == 2); |
| } |
| |
| int main (void) |
| { |
| test_packsswh (); |
| test_packsshb (); |
| test_packushb (); |
| test_paddw_u (); |
| test_paddw_s (); |
| test_paddh_u (); |
| test_paddh_s (); |
| test_paddb_u (); |
| test_paddb_s (); |
| test_paddd_u (); |
| test_paddd_s (); |
| test_paddsh (); |
| test_paddsb (); |
| test_paddush (); |
| test_paddusb (); |
| test_pandn_ud (); |
| test_pandn_sd (); |
| test_pandn_uw (); |
| test_pandn_sw (); |
| test_pandn_uh (); |
| test_pandn_sh (); |
| test_pandn_ub (); |
| test_pandn_sb (); |
| test_pavgh (); |
| test_pavgb (); |
| test_pcmpeqw_u (); |
| test_pcmpeqh_u (); |
| test_pcmpeqb_u (); |
| test_pcmpeqw_s (); |
| test_pcmpeqh_s (); |
| test_pcmpeqb_s (); |
| test_pcmpgtw_u (); |
| test_pcmpgth_u (); |
| test_pcmpgtb_u (); |
| test_pcmpgtw_s (); |
| test_pcmpgth_s (); |
| test_pcmpgtb_s (); |
| test_pextrh_u (); |
| test_pextrh_s (); |
| test_pinsrh_0123_u (); |
| test_pinsrh_0123_s (); |
| test_pmaddhw (); |
| test_pmaxsh (); |
| test_pmaxub (); |
| test_pminsh (); |
| test_pminub (); |
| test_pmovmskb_u (); |
| test_pmovmskb_s (); |
| test_pmulhuh (); |
| test_pmulhh (); |
| test_pmullh (); |
| test_pmuluw (); |
| test_pasubub (); |
| test_biadd (); |
| test_psadbh (); |
| test_pshufh_u (); |
| test_pshufh_s (); |
| test_psllh_u (); |
| test_psllw_u (); |
| test_psllh_s (); |
| test_psllw_s (); |
| test_psrah_u (); |
| test_psraw_u (); |
| test_psrah_s (); |
| test_psraw_s (); |
| test_psrlh_u (); |
| test_psrlw_u (); |
| test_psrlh_s (); |
| test_psrlw_s (); |
| test_psubw_u (); |
| test_psubw_s (); |
| test_psubh_u (); |
| test_psubh_s (); |
| test_psubb_u (); |
| test_psubb_s (); |
| test_psubd_u (); |
| test_psubd_s (); |
| test_psubsh (); |
| test_psubsb (); |
| test_psubush (); |
| test_psubusb (); |
| test_punpckhbh_s (); |
| test_punpckhbh_u (); |
| test_punpckhhw_s (); |
| test_punpckhhw_u (); |
| test_punpckhwd_s (); |
| test_punpckhwd_u (); |
| test_punpcklbh_s (); |
| test_punpcklbh_u (); |
| test_punpcklhw_s (); |
| test_punpcklhw_u (); |
| test_punpcklwd_s (); |
| test_punpcklwd_u (); |
| return 0; |
| } |