libdpf/thirdparty/simde/test/arm/neon/zip2.c
Ryan Henry 3f10e05176 Update googletest to 1.18.0 and SIMDe to 0.8.2.
Googletest 1.18 asks for CMake 3.13 or newer, so configuring the tests no longer warns that CMake compatibility below 3.10 is deprecated.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-24 14:30:19 -06:00

1464 lines
98 KiB
C

#define SIMDE_TEST_ARM_NEON_INSN zip2
#include <test/arm/neon/test-neon.h>
#include <simde/arm/neon/zip2.h>
static int
test_simde_vzip2_f16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_float16_t a[4];
simde_float16_t b[4];
simde_float16_t r[4];
} test_vec[] = {
{ { SIMDE_FLOAT16_VALUE(-7.80), SIMDE_FLOAT16_VALUE(3.70), SIMDE_FLOAT16_VALUE(4.10), SIMDE_FLOAT16_VALUE(5.50) },
{ SIMDE_FLOAT16_VALUE(-6.10), SIMDE_FLOAT16_VALUE(1.40), SIMDE_FLOAT16_VALUE(5.30), SIMDE_FLOAT16_VALUE(4.90) },
{ SIMDE_FLOAT16_VALUE(4.10), SIMDE_FLOAT16_VALUE(5.30), SIMDE_FLOAT16_VALUE(5.50), SIMDE_FLOAT16_VALUE(4.90) } },
{ { SIMDE_FLOAT16_VALUE(3.90), SIMDE_FLOAT16_VALUE(4.50), SIMDE_FLOAT16_VALUE(4.60), SIMDE_FLOAT16_VALUE(3.60) },
{ SIMDE_FLOAT16_VALUE(6.30), SIMDE_FLOAT16_VALUE(-1.60), SIMDE_FLOAT16_VALUE(4.20), SIMDE_FLOAT16_VALUE(8.40) },
{ SIMDE_FLOAT16_VALUE(4.60), SIMDE_FLOAT16_VALUE(4.20), SIMDE_FLOAT16_VALUE(3.60), SIMDE_FLOAT16_VALUE(8.40) } },
{ { SIMDE_FLOAT16_VALUE(1.10), SIMDE_FLOAT16_VALUE(5.00), SIMDE_FLOAT16_VALUE(1.50), SIMDE_FLOAT16_VALUE(1.60) },
{ SIMDE_FLOAT16_VALUE(-2.60), SIMDE_FLOAT16_VALUE(-8.10), SIMDE_FLOAT16_VALUE(-4.10), SIMDE_FLOAT16_VALUE(-6.60) },
{ SIMDE_FLOAT16_VALUE(1.50), SIMDE_FLOAT16_VALUE(-4.10), SIMDE_FLOAT16_VALUE(1.60), SIMDE_FLOAT16_VALUE(-6.60) } },
{ { SIMDE_FLOAT16_VALUE(-6.90), SIMDE_FLOAT16_VALUE(-8.40), SIMDE_FLOAT16_VALUE(0.60), SIMDE_FLOAT16_VALUE(9.60) },
{ SIMDE_FLOAT16_VALUE(-0.90), SIMDE_FLOAT16_VALUE(2.00), SIMDE_FLOAT16_VALUE(-2.30), SIMDE_FLOAT16_VALUE(7.80) },
{ SIMDE_FLOAT16_VALUE(0.60), SIMDE_FLOAT16_VALUE(-2.30), SIMDE_FLOAT16_VALUE(9.60), SIMDE_FLOAT16_VALUE(7.80) } },
{ { SIMDE_FLOAT16_VALUE(-5.80), SIMDE_FLOAT16_VALUE(9.60), SIMDE_FLOAT16_VALUE(-1.90), SIMDE_FLOAT16_VALUE(8.80) },
{ SIMDE_FLOAT16_VALUE(-0.50), SIMDE_FLOAT16_VALUE(3.40), SIMDE_FLOAT16_VALUE(2.50), SIMDE_FLOAT16_VALUE(-3.40) },
{ SIMDE_FLOAT16_VALUE(-1.90), SIMDE_FLOAT16_VALUE(2.50), SIMDE_FLOAT16_VALUE(8.80), SIMDE_FLOAT16_VALUE(-3.40) } },
{ { SIMDE_FLOAT16_VALUE(-2.00), SIMDE_FLOAT16_VALUE(6.10), SIMDE_FLOAT16_VALUE(7.80), SIMDE_FLOAT16_VALUE(6.40) },
{ SIMDE_FLOAT16_VALUE(8.60), SIMDE_FLOAT16_VALUE(8.80), SIMDE_FLOAT16_VALUE(-8.00), SIMDE_FLOAT16_VALUE(-8.80) },
{ SIMDE_FLOAT16_VALUE(7.80), SIMDE_FLOAT16_VALUE(-8.00), SIMDE_FLOAT16_VALUE(6.40), SIMDE_FLOAT16_VALUE(-8.80) } },
{ { SIMDE_FLOAT16_VALUE(3.00), SIMDE_FLOAT16_VALUE(6.20), SIMDE_FLOAT16_VALUE(-2.60), SIMDE_FLOAT16_VALUE(6.00) },
{ SIMDE_FLOAT16_VALUE(-5.60), SIMDE_FLOAT16_VALUE(-5.10), SIMDE_FLOAT16_VALUE(2.90), SIMDE_FLOAT16_VALUE(-6.70) },
{ SIMDE_FLOAT16_VALUE(-2.60), SIMDE_FLOAT16_VALUE(2.90), SIMDE_FLOAT16_VALUE(6.00), SIMDE_FLOAT16_VALUE(-6.70) } },
{ { SIMDE_FLOAT16_VALUE(-9.50), SIMDE_FLOAT16_VALUE(-4.40), SIMDE_FLOAT16_VALUE(1.30), SIMDE_FLOAT16_VALUE(9.80) },
{ SIMDE_FLOAT16_VALUE(-5.40), SIMDE_FLOAT16_VALUE(-6.20), SIMDE_FLOAT16_VALUE(-9.50), SIMDE_FLOAT16_VALUE(-3.00) },
{ SIMDE_FLOAT16_VALUE(1.30), SIMDE_FLOAT16_VALUE(-9.50), SIMDE_FLOAT16_VALUE(9.80), SIMDE_FLOAT16_VALUE(-3.00) } },
{ { SIMDE_FLOAT16_VALUE(9.40), SIMDE_FLOAT16_VALUE(-1.10), SIMDE_FLOAT16_VALUE(4.60), SIMDE_FLOAT16_VALUE(2.20) },
{ SIMDE_FLOAT16_VALUE(2.40), SIMDE_FLOAT16_VALUE(-5.90), SIMDE_FLOAT16_VALUE(8.40), SIMDE_FLOAT16_VALUE(-7.20) },
{ SIMDE_FLOAT16_VALUE(4.60), SIMDE_FLOAT16_VALUE(8.40), SIMDE_FLOAT16_VALUE(2.20), SIMDE_FLOAT16_VALUE(-7.20) } },
{ { SIMDE_FLOAT16_VALUE(-6.70), SIMDE_FLOAT16_VALUE(2.90), SIMDE_FLOAT16_VALUE(-2.00), SIMDE_FLOAT16_VALUE(-5.40) },
{ SIMDE_FLOAT16_VALUE(2.20), SIMDE_FLOAT16_VALUE(8.50), SIMDE_FLOAT16_VALUE(-7.00), SIMDE_FLOAT16_VALUE(-6.10) },
{ SIMDE_FLOAT16_VALUE(-2.00), SIMDE_FLOAT16_VALUE(-7.00), SIMDE_FLOAT16_VALUE(-5.40), SIMDE_FLOAT16_VALUE(-6.10) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float16x4_t a = simde_vld1_f16(test_vec[i].a);
simde_float16x4_t b = simde_vld1_f16(test_vec[i].b);
simde_float16x4_t r = simde_vzip2_f16(a, b);
simde_test_arm_neon_assert_equal_f16x4(r, simde_vld1_f16(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_float16x4_t a = simde_test_arm_neon_random_f16x4(-100.0f, 100.0f);
simde_float16x4_t b = simde_test_arm_neon_random_f16x4(-100.0f, 100.0f);
simde_float16x4_t r = simde_vzip2_f16(a, b);
simde_test_arm_neon_write_f16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_f16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_f16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_float32 a[2];
simde_float32 b[2];
simde_float32 r[2];
} test_vec[] = {
{ { SIMDE_FLOAT32_C( -56.55), SIMDE_FLOAT32_C( 618.01) },
{ SIMDE_FLOAT32_C( 834.26), SIMDE_FLOAT32_C( -509.20) },
{ SIMDE_FLOAT32_C( 618.01), SIMDE_FLOAT32_C( -509.20) } },
{ { SIMDE_FLOAT32_C( 293.29), SIMDE_FLOAT32_C( -837.93) },
{ SIMDE_FLOAT32_C( -408.68), SIMDE_FLOAT32_C( 430.47) },
{ SIMDE_FLOAT32_C( -837.93), SIMDE_FLOAT32_C( 430.47) } },
{ { SIMDE_FLOAT32_C( 222.04), SIMDE_FLOAT32_C( -192.86) },
{ SIMDE_FLOAT32_C( 566.42), SIMDE_FLOAT32_C( 826.36) },
{ SIMDE_FLOAT32_C( -192.86), SIMDE_FLOAT32_C( 826.36) } },
{ { SIMDE_FLOAT32_C( -395.53), SIMDE_FLOAT32_C( 599.03) },
{ SIMDE_FLOAT32_C( -555.41), SIMDE_FLOAT32_C( 22.87) },
{ SIMDE_FLOAT32_C( 599.03), SIMDE_FLOAT32_C( 22.87) } },
{ { SIMDE_FLOAT32_C( 968.44), SIMDE_FLOAT32_C( 95.81) },
{ SIMDE_FLOAT32_C( -638.58), SIMDE_FLOAT32_C( 816.26) },
{ SIMDE_FLOAT32_C( 95.81), SIMDE_FLOAT32_C( 816.26) } },
{ { SIMDE_FLOAT32_C( -762.51), SIMDE_FLOAT32_C( 946.71) },
{ SIMDE_FLOAT32_C( -370.92), SIMDE_FLOAT32_C( 887.37) },
{ SIMDE_FLOAT32_C( 946.71), SIMDE_FLOAT32_C( 887.37) } },
{ { SIMDE_FLOAT32_C( -457.71), SIMDE_FLOAT32_C( -445.84) },
{ SIMDE_FLOAT32_C( -147.78), SIMDE_FLOAT32_C( -754.97) },
{ SIMDE_FLOAT32_C( -445.84), SIMDE_FLOAT32_C( -754.97) } },
{ { SIMDE_FLOAT32_C( 814.41), SIMDE_FLOAT32_C( 434.23) },
{ SIMDE_FLOAT32_C( 418.66), SIMDE_FLOAT32_C( -242.14) },
{ SIMDE_FLOAT32_C( 434.23), SIMDE_FLOAT32_C( -242.14) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float32x2_t a = simde_vld1_f32(test_vec[i].a);
simde_float32x2_t b = simde_vld1_f32(test_vec[i].b);
simde_float32x2_t r = simde_vzip2_f32(a, b);
simde_test_arm_neon_assert_equal_f32x2(r, simde_vld1_f32(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_float32x2_t a = simde_test_arm_neon_random_f32x2(-1000.0f, 1000.0f);
simde_float32x2_t b = simde_test_arm_neon_random_f32x2(-1000.0f, 1000.0f);
simde_float32x2_t r = simde_vzip2_f32(a, b);
simde_test_arm_neon_write_f32x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_f32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_f32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2_s8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int8_t a[8];
int8_t b[8];
int8_t r[8];
} test_vec[] = {
{ { INT8_C( 70), -INT8_C( 80), -INT8_C( 52), INT8_C( 94), INT8_C( 33), INT8_C( 70), -INT8_C( 2), INT8_C( 95) },
{ -INT8_C( 15), INT8_C( 85), INT8_MAX, INT8_C( 75), -INT8_C( 126), INT8_C( 59), INT8_C( 49), -INT8_C( 48) },
{ INT8_C( 33), -INT8_C( 126), INT8_C( 70), INT8_C( 59), -INT8_C( 2), INT8_C( 49), INT8_C( 95), -INT8_C( 48) } },
{ { INT8_C( 95), INT8_C( 87), INT8_C( 16), INT8_C( 40), INT8_C( 102), -INT8_C( 8), INT8_C( 74), -INT8_C( 100) },
{ -INT8_C( 117), -INT8_C( 49), INT8_C( 35), -INT8_C( 122), -INT8_C( 72), -INT8_C( 81), -INT8_C( 87), -INT8_C( 2) },
{ INT8_C( 102), -INT8_C( 72), -INT8_C( 8), -INT8_C( 81), INT8_C( 74), -INT8_C( 87), -INT8_C( 100), -INT8_C( 2) } },
{ { INT8_C( 95), INT8_C( 117), INT8_C( 93), -INT8_C( 127), -INT8_C( 68), INT8_C( 91), -INT8_C( 32), -INT8_C( 83) },
{ -INT8_C( 80), INT8_C( 96), -INT8_C( 8), INT8_C( 50), -INT8_C( 101), INT8_C( 42), INT8_C( 3), -INT8_C( 6) },
{ -INT8_C( 68), -INT8_C( 101), INT8_C( 91), INT8_C( 42), -INT8_C( 32), INT8_C( 3), -INT8_C( 83), -INT8_C( 6) } },
{ { -INT8_C( 127), INT8_C( 19), INT8_C( 34), -INT8_C( 25), INT8_C( 11), INT8_C( 109), -INT8_C( 125), -INT8_C( 106) },
{ INT8_C( 60), -INT8_C( 89), INT8_C( 28), -INT8_C( 12), INT8_C( 86), -INT8_C( 59), -INT8_C( 13), -INT8_C( 75) },
{ INT8_C( 11), INT8_C( 86), INT8_C( 109), -INT8_C( 59), -INT8_C( 125), -INT8_C( 13), -INT8_C( 106), -INT8_C( 75) } },
{ { INT8_C( 59), INT8_C( 80), INT8_C( 54), -INT8_C( 9), -INT8_C( 85), INT8_C( 23), -INT8_C( 92), INT8_C( 91) },
{ INT8_C( 119), -INT8_C( 100), -INT8_C( 114), INT8_C( 18), -INT8_C( 58), -INT8_C( 111), INT8_C( 12), INT8_C( 72) },
{ -INT8_C( 85), -INT8_C( 58), INT8_C( 23), -INT8_C( 111), -INT8_C( 92), INT8_C( 12), INT8_C( 91), INT8_C( 72) } },
{ { -INT8_C( 92), INT8_C( 47), INT8_C( 47), -INT8_C( 81), -INT8_C( 100), -INT8_C( 77), INT8_C( 69), -INT8_C( 40) },
{ INT8_C( 90), INT8_C( 97), -INT8_C( 51), -INT8_C( 80), INT8_C( 38), -INT8_C( 64), INT8_C( 101), INT8_C( 97) },
{ -INT8_C( 100), INT8_C( 38), -INT8_C( 77), -INT8_C( 64), INT8_C( 69), INT8_C( 101), -INT8_C( 40), INT8_C( 97) } },
{ { INT8_C( 16), -INT8_C( 100), INT8_C( 88), -INT8_C( 69), -INT8_C( 77), -INT8_C( 4), INT8_C( 22), INT8_C( 42) },
{ -INT8_C( 103), -INT8_C( 92), INT8_C( 60), INT8_C( 95), INT8_C( 53), INT8_C( 72), -INT8_C( 89), -INT8_C( 39) },
{ -INT8_C( 77), INT8_C( 53), -INT8_C( 4), INT8_C( 72), INT8_C( 22), -INT8_C( 89), INT8_C( 42), -INT8_C( 39) } },
{ { INT8_C( 119), -INT8_C( 41), -INT8_C( 120), INT8_C( 19), -INT8_C( 118), -INT8_C( 51), -INT8_C( 20), -INT8_C( 28) },
{ INT8_C( 46), -INT8_C( 71), -INT8_C( 108), INT8_C( 85), INT8_C( 121), -INT8_C( 7), -INT8_C( 74), -INT8_C( 119) },
{ -INT8_C( 118), INT8_C( 121), -INT8_C( 51), -INT8_C( 7), -INT8_C( 20), -INT8_C( 74), -INT8_C( 28), -INT8_C( 119) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int8x8_t a = simde_vld1_s8(test_vec[i].a);
simde_int8x8_t b = simde_vld1_s8(test_vec[i].b);
simde_int8x8_t r = simde_vzip2_s8(a, b);
simde_test_arm_neon_assert_equal_i8x8(r, simde_vld1_s8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int8x8_t a = simde_test_arm_neon_random_i8x8();
simde_int8x8_t b = simde_test_arm_neon_random_i8x8();
simde_int8x8_t r = simde_vzip2_s8(a, b);
simde_test_arm_neon_write_i8x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i8x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i8x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int16_t a[4];
int16_t b[4];
int16_t r[4];
} test_vec[] = {
{ { INT16_C( 31586), -INT16_C( 31027), INT16_C( 5600), -INT16_C( 5698) },
{ INT16_C( 32317), INT16_C( 13734), INT16_C( 18228), -INT16_C( 31524) },
{ INT16_C( 5600), INT16_C( 18228), -INT16_C( 5698), -INT16_C( 31524) } },
{ { INT16_C( 11907), INT16_C( 17733), INT16_C( 12727), -INT16_C( 17795) },
{ INT16_C( 19182), -INT16_C( 25509), INT16_C( 32649), -INT16_C( 5297) },
{ INT16_C( 12727), INT16_C( 32649), -INT16_C( 17795), -INT16_C( 5297) } },
{ { INT16_C( 7419), -INT16_C( 9359), INT16_C( 12082), INT16_C( 28612) },
{ INT16_C( 27310), -INT16_C( 7516), -INT16_C( 32590), INT16_C( 13671) },
{ INT16_C( 12082), -INT16_C( 32590), INT16_C( 28612), INT16_C( 13671) } },
{ { -INT16_C( 21329), INT16_C( 26234), -INT16_C( 2083), -INT16_C( 13280) },
{ INT16_C( 31553), -INT16_C( 13464), -INT16_C( 18438), -INT16_C( 2634) },
{ -INT16_C( 2083), -INT16_C( 18438), -INT16_C( 13280), -INT16_C( 2634) } },
{ { INT16_C( 10452), INT16_C( 1744), -INT16_C( 27561), INT16_C( 1397) },
{ INT16_C( 6655), -INT16_C( 19992), INT16_C( 20378), INT16_C( 18918) },
{ -INT16_C( 27561), INT16_C( 20378), INT16_C( 1397), INT16_C( 18918) } },
{ { INT16_C( 24827), -INT16_C( 9809), -INT16_C( 12457), -INT16_C( 26459) },
{ INT16_C( 3402), INT16_C( 17507), INT16_C( 6853), -INT16_C( 26310) },
{ -INT16_C( 12457), INT16_C( 6853), -INT16_C( 26459), -INT16_C( 26310) } },
{ { INT16_C( 2626), -INT16_C( 26209), INT16_C( 5279), -INT16_C( 24929) },
{ -INT16_C( 30931), -INT16_C( 14513), INT16_C( 13782), -INT16_C( 12016) },
{ INT16_C( 5279), INT16_C( 13782), -INT16_C( 24929), -INT16_C( 12016) } },
{ { -INT16_C( 16491), -INT16_C( 4950), INT16_C( 20366), -INT16_C( 10108) },
{ -INT16_C( 6051), INT16_C( 8733), INT16_C( 22274), INT16_C( 17595) },
{ INT16_C( 20366), INT16_C( 22274), -INT16_C( 10108), INT16_C( 17595) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int16x4_t a = simde_vld1_s16(test_vec[i].a);
simde_int16x4_t b = simde_vld1_s16(test_vec[i].b);
simde_int16x4_t r = simde_vzip2_s16(a, b);
simde_test_arm_neon_assert_equal_i16x4(r, simde_vld1_s16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int16x4_t a = simde_test_arm_neon_random_i16x4();
simde_int16x4_t b = simde_test_arm_neon_random_i16x4();
simde_int16x4_t r = simde_vzip2_s16(a, b);
simde_test_arm_neon_write_i16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int32_t a[2];
int32_t b[2];
int32_t r[2];
} test_vec[] = {
{ { -INT32_C( 1128440363), INT32_C( 500102932) },
{ -INT32_C( 826084822), INT32_C( 2023511124) },
{ INT32_C( 500102932), INT32_C( 2023511124) } },
{ { INT32_C( 1458785856), -INT32_C( 835584527) },
{ -INT32_C( 586230260), INT32_C( 2044523428) },
{ -INT32_C( 835584527), INT32_C( 2044523428) } },
{ { INT32_C( 1681234256), -INT32_C( 1149172847) },
{ INT32_C( 1250510070), -INT32_C( 658365032) },
{ -INT32_C( 1149172847), -INT32_C( 658365032) } },
{ { INT32_C( 1697559923), -INT32_C( 1087152205) },
{ -INT32_C( 644070859), -INT32_C( 2058127307) },
{ -INT32_C( 1087152205), -INT32_C( 2058127307) } },
{ { -INT32_C( 1561753583), -INT32_C( 2107807092) },
{ INT32_C( 1187833774), -INT32_C( 2145415668) },
{ -INT32_C( 2107807092), -INT32_C( 2145415668) } },
{ { -INT32_C( 152744637), -INT32_C( 491448147) },
{ -INT32_C( 1883483814), -INT32_C( 619442231) },
{ -INT32_C( 491448147), -INT32_C( 619442231) } },
{ { INT32_C( 595459479), INT32_C( 379968360) },
{ -INT32_C( 832736830), INT32_C( 1129217279) },
{ INT32_C( 379968360), INT32_C( 1129217279) } },
{ { INT32_C( 1983460297), -INT32_C( 1504055476) },
{ INT32_C( 171316544), -INT32_C( 1142601180) },
{ -INT32_C( 1504055476), -INT32_C( 1142601180) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int32x2_t a = simde_vld1_s32(test_vec[i].a);
simde_int32x2_t b = simde_vld1_s32(test_vec[i].b);
simde_int32x2_t r = simde_vzip2_s32(a, b);
simde_test_arm_neon_assert_equal_i32x2(r, simde_vld1_s32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int32x2_t a = simde_test_arm_neon_random_i32x2();
simde_int32x2_t b = simde_test_arm_neon_random_i32x2();
simde_int32x2_t r = simde_vzip2_s32(a, b);
simde_test_arm_neon_write_i32x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2_u8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint8_t a[8];
uint8_t b[8];
uint8_t r[8];
} test_vec[] = {
{ { UINT8_C( 92), UINT8_C( 83), UINT8_C( 54), UINT8_C(128), UINT8_C(189), UINT8_C(177), UINT8_C(148), UINT8_C(204) },
{ UINT8_C( 3), UINT8_C( 8), UINT8_C( 33), UINT8_C( 35), UINT8_C( 77), UINT8_C(187), UINT8_C(189), UINT8_C(155) },
{ UINT8_C(189), UINT8_C( 77), UINT8_C(177), UINT8_C(187), UINT8_C(148), UINT8_C(189), UINT8_C(204), UINT8_C(155) } },
{ { UINT8_C(183), UINT8_C( 14), UINT8_C( 96), UINT8_C(141), UINT8_C( 14), UINT8_C(153), UINT8_C(229), UINT8_C( 0) },
{ UINT8_C(117), UINT8_C(187), UINT8_C(126), UINT8_C(177), UINT8_C(175), UINT8_C(115), UINT8_C(204), UINT8_C( 11) },
{ UINT8_C( 14), UINT8_C(175), UINT8_C(153), UINT8_C(115), UINT8_C(229), UINT8_C(204), UINT8_C( 0), UINT8_C( 11) } },
{ { UINT8_C(198), UINT8_C( 2), UINT8_C(139), UINT8_C(131), UINT8_C(179), UINT8_C( 31), UINT8_C( 80), UINT8_C(182) },
{ UINT8_C( 40), UINT8_C(113), UINT8_C(218), UINT8_C(117), UINT8_C( 44), UINT8_C(151), UINT8_C( 16), UINT8_C(228) },
{ UINT8_C(179), UINT8_C( 44), UINT8_C( 31), UINT8_C(151), UINT8_C( 80), UINT8_C( 16), UINT8_C(182), UINT8_C(228) } },
{ { UINT8_C(166), UINT8_C(112), UINT8_C(113), UINT8_C(180), UINT8_C( 9), UINT8_C( 86), UINT8_C(181), UINT8_C(126) },
{ UINT8_C( 17), UINT8_C( 51), UINT8_C( 47), UINT8_C(192), UINT8_C(166), UINT8_C(251), UINT8_C(203), UINT8_C(108) },
{ UINT8_C( 9), UINT8_C(166), UINT8_C( 86), UINT8_C(251), UINT8_C(181), UINT8_C(203), UINT8_C(126), UINT8_C(108) } },
{ { UINT8_C(254), UINT8_C( 86), UINT8_C(239), UINT8_C(177), UINT8_C(118), UINT8_C( 63), UINT8_C(104), UINT8_C(158) },
{ UINT8_C(177), UINT8_C( 66), UINT8_C( 19), UINT8_C(221), UINT8_C(217), UINT8_C( 35), UINT8_C(193), UINT8_C(127) },
{ UINT8_C(118), UINT8_C(217), UINT8_C( 63), UINT8_C( 35), UINT8_C(104), UINT8_C(193), UINT8_C(158), UINT8_C(127) } },
{ { UINT8_C(147), UINT8_C( 50), UINT8_C( 52), UINT8_C(156), UINT8_C(136), UINT8_C(233), UINT8_C( 27), UINT8_C(154) },
{ UINT8_C( 28), UINT8_C( 74), UINT8_C( 90), UINT8_C(194), UINT8_C( 70), UINT8_C( 38), UINT8_C( 46), UINT8_C( 68) },
{ UINT8_C(136), UINT8_C( 70), UINT8_C(233), UINT8_C( 38), UINT8_C( 27), UINT8_C( 46), UINT8_C(154), UINT8_C( 68) } },
{ { UINT8_C(124), UINT8_C( 29), UINT8_C(245), UINT8_C(242), UINT8_C( 93), UINT8_C( 93), UINT8_C(144), UINT8_C( 14) },
{ UINT8_C(159), UINT8_C(163), UINT8_C(235), UINT8_C(121), UINT8_C(198), UINT8_C(173), UINT8_C(248), UINT8_C( 89) },
{ UINT8_C( 93), UINT8_C(198), UINT8_C( 93), UINT8_C(173), UINT8_C(144), UINT8_C(248), UINT8_C( 14), UINT8_C( 89) } },
{ { UINT8_C(223), UINT8_C( 44), UINT8_C(246), UINT8_C(104), UINT8_C( 21), UINT8_C( 17), UINT8_C( 2), UINT8_C( 49) },
{ UINT8_C( 91), UINT8_C( 92), UINT8_C(243), UINT8_C(161), UINT8_C(130), UINT8_C( 33), UINT8_C(229), UINT8_MAX },
{ UINT8_C( 21), UINT8_C(130), UINT8_C( 17), UINT8_C( 33), UINT8_C( 2), UINT8_C(229), UINT8_C( 49), UINT8_MAX } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint8x8_t a = simde_vld1_u8(test_vec[i].a);
simde_uint8x8_t b = simde_vld1_u8(test_vec[i].b);
simde_uint8x8_t r = simde_vzip2_u8(a, b);
simde_test_arm_neon_assert_equal_u8x8(r, simde_vld1_u8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint8x8_t a = simde_test_arm_neon_random_u8x8();
simde_uint8x8_t b = simde_test_arm_neon_random_u8x8();
simde_uint8x8_t r = simde_vzip2_u8(a, b);
simde_test_arm_neon_write_u8x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_u8x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u8x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint16_t a[4];
uint16_t b[4];
uint16_t r[4];
} test_vec[] = {
{ { UINT16_C(17902), UINT16_C(53967), UINT16_C(20983), UINT16_C(42835) },
{ UINT16_C(47613), UINT16_C(55873), UINT16_C(16028), UINT16_C(21060) },
{ UINT16_C(20983), UINT16_C(16028), UINT16_C(42835), UINT16_C(21060) } },
{ { UINT16_C(47255), UINT16_C(46865), UINT16_C(60625), UINT16_C(64413) },
{ UINT16_C(53844), UINT16_C(24480), UINT16_C(58718), UINT16_C(19663) },
{ UINT16_C(60625), UINT16_C(58718), UINT16_C(64413), UINT16_C(19663) } },
{ { UINT16_C(40490), UINT16_C( 8478), UINT16_C(29168), UINT16_C(60872) },
{ UINT16_C( 2346), UINT16_C(51143), UINT16_C( 3144), UINT16_C(57113) },
{ UINT16_C(29168), UINT16_C( 3144), UINT16_C(60872), UINT16_C(57113) } },
{ { UINT16_C(10948), UINT16_C(38295), UINT16_C(13334), UINT16_C(27536) },
{ UINT16_C(12550), UINT16_C(25802), UINT16_C(39190), UINT16_C(16560) },
{ UINT16_C(13334), UINT16_C(39190), UINT16_C(27536), UINT16_C(16560) } },
{ { UINT16_C(52792), UINT16_C(10337), UINT16_C(10559), UINT16_C(27157) },
{ UINT16_C(56626), UINT16_C(31281), UINT16_C(19177), UINT16_C(44378) },
{ UINT16_C(10559), UINT16_C(19177), UINT16_C(27157), UINT16_C(44378) } },
{ { UINT16_C(61813), UINT16_C(35650), UINT16_C(54053), UINT16_C(11254) },
{ UINT16_C(49156), UINT16_C( 6800), UINT16_C(16474), UINT16_C(37466) },
{ UINT16_C(54053), UINT16_C(16474), UINT16_C(11254), UINT16_C(37466) } },
{ { UINT16_C(47887), UINT16_C(20154), UINT16_C(53220), UINT16_C( 5816) },
{ UINT16_C(59820), UINT16_C(38289), UINT16_C(60212), UINT16_C(43330) },
{ UINT16_C(53220), UINT16_C(60212), UINT16_C( 5816), UINT16_C(43330) } },
{ { UINT16_C(34268), UINT16_C( 308), UINT16_C(11096), UINT16_C(23596) },
{ UINT16_C(48363), UINT16_C(17782), UINT16_C(53501), UINT16_C( 3287) },
{ UINT16_C(11096), UINT16_C(53501), UINT16_C(23596), UINT16_C( 3287) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint16x4_t a = simde_vld1_u16(test_vec[i].a);
simde_uint16x4_t b = simde_vld1_u16(test_vec[i].b);
simde_uint16x4_t r = simde_vzip2_u16(a, b);
simde_test_arm_neon_assert_equal_u16x4(r, simde_vld1_u16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint16x4_t a = simde_test_arm_neon_random_u16x4();
simde_uint16x4_t b = simde_test_arm_neon_random_u16x4();
simde_uint16x4_t r = simde_vzip2_u16(a, b);
simde_test_arm_neon_write_u16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_u16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint32_t a[2];
uint32_t b[2];
uint32_t r[2];
} test_vec[] = {
{ { UINT32_C( 711269039), UINT32_C(1500404369) },
{ UINT32_C( 481603462), UINT32_C(3826687848) },
{ UINT32_C(1500404369), UINT32_C(3826687848) } },
{ { UINT32_C(2274796837), UINT32_C(1676736426) },
{ UINT32_C(1950206382), UINT32_C(1098409105) },
{ UINT32_C(1676736426), UINT32_C(1098409105) } },
{ { UINT32_C( 275504510), UINT32_C(3194608184) },
{ UINT32_C(4057603465), UINT32_C(3805671612) },
{ UINT32_C(3194608184), UINT32_C(3805671612) } },
{ { UINT32_C(1080650902), UINT32_C( 295917923) },
{ UINT32_C(3028672803), UINT32_C(3287678277) },
{ UINT32_C( 295917923), UINT32_C(3287678277) } },
{ { UINT32_C( 332620251), UINT32_C(3302046779) },
{ UINT32_C( 381070169), UINT32_C( 855149468) },
{ UINT32_C(3302046779), UINT32_C( 855149468) } },
{ { UINT32_C(1517445623), UINT32_C(3714848186) },
{ UINT32_C( 999485942), UINT32_C(3405744111) },
{ UINT32_C(3714848186), UINT32_C(3405744111) } },
{ { UINT32_C( 601740008), UINT32_C(1760079375) },
{ UINT32_C(4118715993), UINT32_C( 556234281) },
{ UINT32_C(1760079375), UINT32_C( 556234281) } },
{ { UINT32_C(2457573847), UINT32_C(2775574447) },
{ UINT32_C(3370189273), UINT32_C(1905451145) },
{ UINT32_C(2775574447), UINT32_C(1905451145) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint32x2_t a = simde_vld1_u32(test_vec[i].a);
simde_uint32x2_t b = simde_vld1_u32(test_vec[i].b);
simde_uint32x2_t r = simde_vzip2_u32(a, b);
simde_test_arm_neon_assert_equal_u32x2(r, simde_vld1_u32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint32x2_t a = simde_test_arm_neon_random_u32x2();
simde_uint32x2_t b = simde_test_arm_neon_random_u32x2();
simde_uint32x2_t r = simde_vzip2_u32(a, b);
simde_test_arm_neon_write_u32x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_u32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2q_f16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_float16_t a[8];
simde_float16_t b[8];
simde_float16_t r[8];
} test_vec[] = {
{ { SIMDE_FLOAT16_VALUE(9.60), SIMDE_FLOAT16_VALUE(6.90), SIMDE_FLOAT16_VALUE(7.80), SIMDE_FLOAT16_VALUE(7.90), SIMDE_FLOAT16_VALUE(-5.80), SIMDE_FLOAT16_VALUE(1.70), SIMDE_FLOAT16_VALUE(-8.70), SIMDE_FLOAT16_VALUE(8.20) },
{ SIMDE_FLOAT16_VALUE(1.80), SIMDE_FLOAT16_VALUE(4.00), SIMDE_FLOAT16_VALUE(-1.80), SIMDE_FLOAT16_VALUE(9.70), SIMDE_FLOAT16_VALUE(7.10), SIMDE_FLOAT16_VALUE(4.80), SIMDE_FLOAT16_VALUE(6.70), SIMDE_FLOAT16_VALUE(-0.60) },
{ SIMDE_FLOAT16_VALUE(-5.80), SIMDE_FLOAT16_VALUE(7.10), SIMDE_FLOAT16_VALUE(1.70), SIMDE_FLOAT16_VALUE(4.80), SIMDE_FLOAT16_VALUE(-8.70), SIMDE_FLOAT16_VALUE(6.70), SIMDE_FLOAT16_VALUE(8.20), SIMDE_FLOAT16_VALUE(-0.60) } },
{ { SIMDE_FLOAT16_VALUE(-7.70), SIMDE_FLOAT16_VALUE(1.10), SIMDE_FLOAT16_VALUE(0.70), SIMDE_FLOAT16_VALUE(1.50), SIMDE_FLOAT16_VALUE(6.60), SIMDE_FLOAT16_VALUE(3.40), SIMDE_FLOAT16_VALUE(7.10), SIMDE_FLOAT16_VALUE(7.20) },
{ SIMDE_FLOAT16_VALUE(-5.50), SIMDE_FLOAT16_VALUE(-7.70), SIMDE_FLOAT16_VALUE(-6.50), SIMDE_FLOAT16_VALUE(-5.60), SIMDE_FLOAT16_VALUE(-1.30), SIMDE_FLOAT16_VALUE(-2.00), SIMDE_FLOAT16_VALUE(3.60), SIMDE_FLOAT16_VALUE(-1.80) },
{ SIMDE_FLOAT16_VALUE(6.60), SIMDE_FLOAT16_VALUE(-1.30), SIMDE_FLOAT16_VALUE(3.40), SIMDE_FLOAT16_VALUE(-2.00), SIMDE_FLOAT16_VALUE(7.10), SIMDE_FLOAT16_VALUE(3.60), SIMDE_FLOAT16_VALUE(7.20), SIMDE_FLOAT16_VALUE(-1.80) } },
{ { SIMDE_FLOAT16_VALUE(3.40), SIMDE_FLOAT16_VALUE(9.40), SIMDE_FLOAT16_VALUE(1.00), SIMDE_FLOAT16_VALUE(4.70), SIMDE_FLOAT16_VALUE(5.40), SIMDE_FLOAT16_VALUE(2.20), SIMDE_FLOAT16_VALUE(8.50), SIMDE_FLOAT16_VALUE(-10.00) },
{ SIMDE_FLOAT16_VALUE(2.70), SIMDE_FLOAT16_VALUE(-7.30), SIMDE_FLOAT16_VALUE(8.40), SIMDE_FLOAT16_VALUE(7.10), SIMDE_FLOAT16_VALUE(-9.50), SIMDE_FLOAT16_VALUE(9.90), SIMDE_FLOAT16_VALUE(-9.70), SIMDE_FLOAT16_VALUE(6.00) },
{ SIMDE_FLOAT16_VALUE(5.40), SIMDE_FLOAT16_VALUE(-9.50), SIMDE_FLOAT16_VALUE(2.20), SIMDE_FLOAT16_VALUE(9.90), SIMDE_FLOAT16_VALUE(8.50), SIMDE_FLOAT16_VALUE(-9.70), SIMDE_FLOAT16_VALUE(-10.00), SIMDE_FLOAT16_VALUE(6.00) } },
{ { SIMDE_FLOAT16_VALUE(-3.60), SIMDE_FLOAT16_VALUE(-8.20), SIMDE_FLOAT16_VALUE(-1.30), SIMDE_FLOAT16_VALUE(1.00), SIMDE_FLOAT16_VALUE(-2.80), SIMDE_FLOAT16_VALUE(9.00), SIMDE_FLOAT16_VALUE(1.60), SIMDE_FLOAT16_VALUE(-9.60) },
{ SIMDE_FLOAT16_VALUE(-4.10), SIMDE_FLOAT16_VALUE(-5.20), SIMDE_FLOAT16_VALUE(-5.80), SIMDE_FLOAT16_VALUE(4.80), SIMDE_FLOAT16_VALUE(1.00), SIMDE_FLOAT16_VALUE(5.80), SIMDE_FLOAT16_VALUE(-5.10), SIMDE_FLOAT16_VALUE(-4.20) },
{ SIMDE_FLOAT16_VALUE(-2.80), SIMDE_FLOAT16_VALUE(1.00), SIMDE_FLOAT16_VALUE(9.00), SIMDE_FLOAT16_VALUE(5.80), SIMDE_FLOAT16_VALUE(1.60), SIMDE_FLOAT16_VALUE(-5.10), SIMDE_FLOAT16_VALUE(-9.60), SIMDE_FLOAT16_VALUE(-4.20) } },
{ { SIMDE_FLOAT16_VALUE(4.50), SIMDE_FLOAT16_VALUE(0.10), SIMDE_FLOAT16_VALUE(4.20), SIMDE_FLOAT16_VALUE(-0.40), SIMDE_FLOAT16_VALUE(-3.90), SIMDE_FLOAT16_VALUE(2.20), SIMDE_FLOAT16_VALUE(7.50), SIMDE_FLOAT16_VALUE(-5.50) },
{ SIMDE_FLOAT16_VALUE(2.60), SIMDE_FLOAT16_VALUE(-3.70), SIMDE_FLOAT16_VALUE(-0.10), SIMDE_FLOAT16_VALUE(-5.50), SIMDE_FLOAT16_VALUE(-9.50), SIMDE_FLOAT16_VALUE(8.50), SIMDE_FLOAT16_VALUE(8.80), SIMDE_FLOAT16_VALUE(5.00) },
{ SIMDE_FLOAT16_VALUE(-3.90), SIMDE_FLOAT16_VALUE(-9.50), SIMDE_FLOAT16_VALUE(2.20), SIMDE_FLOAT16_VALUE(8.50), SIMDE_FLOAT16_VALUE(7.50), SIMDE_FLOAT16_VALUE(8.80), SIMDE_FLOAT16_VALUE(-5.50), SIMDE_FLOAT16_VALUE(5.00) } },
{ { SIMDE_FLOAT16_VALUE(9.20), SIMDE_FLOAT16_VALUE(5.90), SIMDE_FLOAT16_VALUE(-1.20), SIMDE_FLOAT16_VALUE(-3.00), SIMDE_FLOAT16_VALUE(-1.20), SIMDE_FLOAT16_VALUE(9.40), SIMDE_FLOAT16_VALUE(-3.20), SIMDE_FLOAT16_VALUE(-3.40) },
{ SIMDE_FLOAT16_VALUE(-6.80), SIMDE_FLOAT16_VALUE(-8.80), SIMDE_FLOAT16_VALUE(-6.60), SIMDE_FLOAT16_VALUE(-7.30), SIMDE_FLOAT16_VALUE(8.80), SIMDE_FLOAT16_VALUE(-9.90), SIMDE_FLOAT16_VALUE(0.90), SIMDE_FLOAT16_VALUE(-6.90) },
{ SIMDE_FLOAT16_VALUE(-1.20), SIMDE_FLOAT16_VALUE(8.80), SIMDE_FLOAT16_VALUE(9.40), SIMDE_FLOAT16_VALUE(-9.90), SIMDE_FLOAT16_VALUE(-3.20), SIMDE_FLOAT16_VALUE(0.90), SIMDE_FLOAT16_VALUE(-3.40), SIMDE_FLOAT16_VALUE(-6.90) } },
{ { SIMDE_FLOAT16_VALUE(-8.80), SIMDE_FLOAT16_VALUE(-4.00), SIMDE_FLOAT16_VALUE(-0.80), SIMDE_FLOAT16_VALUE(5.20), SIMDE_FLOAT16_VALUE(5.20), SIMDE_FLOAT16_VALUE(-3.00), SIMDE_FLOAT16_VALUE(-0.70), SIMDE_FLOAT16_VALUE(2.80) },
{ SIMDE_FLOAT16_VALUE(-8.50), SIMDE_FLOAT16_VALUE(2.90), SIMDE_FLOAT16_VALUE(-0.80), SIMDE_FLOAT16_VALUE(2.70), SIMDE_FLOAT16_VALUE(-0.60), SIMDE_FLOAT16_VALUE(-9.30), SIMDE_FLOAT16_VALUE(-8.50), SIMDE_FLOAT16_VALUE(-6.80) },
{ SIMDE_FLOAT16_VALUE(5.20), SIMDE_FLOAT16_VALUE(-0.60), SIMDE_FLOAT16_VALUE(-3.00), SIMDE_FLOAT16_VALUE(-9.30), SIMDE_FLOAT16_VALUE(-0.70), SIMDE_FLOAT16_VALUE(-8.50), SIMDE_FLOAT16_VALUE(2.80), SIMDE_FLOAT16_VALUE(-6.80) } },
{ { SIMDE_FLOAT16_VALUE(6.70), SIMDE_FLOAT16_VALUE(3.80), SIMDE_FLOAT16_VALUE(8.80), SIMDE_FLOAT16_VALUE(-0.40), SIMDE_FLOAT16_VALUE(5.30), SIMDE_FLOAT16_VALUE(-5.00), SIMDE_FLOAT16_VALUE(-3.80), SIMDE_FLOAT16_VALUE(-2.00) },
{ SIMDE_FLOAT16_VALUE(-5.30), SIMDE_FLOAT16_VALUE(0.60), SIMDE_FLOAT16_VALUE(7.70), SIMDE_FLOAT16_VALUE(0.90), SIMDE_FLOAT16_VALUE(7.90), SIMDE_FLOAT16_VALUE(3.10), SIMDE_FLOAT16_VALUE(-2.70), SIMDE_FLOAT16_VALUE(2.20) },
{ SIMDE_FLOAT16_VALUE(5.30), SIMDE_FLOAT16_VALUE(7.90), SIMDE_FLOAT16_VALUE(-5.00), SIMDE_FLOAT16_VALUE(3.10), SIMDE_FLOAT16_VALUE(-3.80), SIMDE_FLOAT16_VALUE(-2.70), SIMDE_FLOAT16_VALUE(-2.00), SIMDE_FLOAT16_VALUE(2.20) } },
{ { SIMDE_FLOAT16_VALUE(-7.90), SIMDE_FLOAT16_VALUE(-3.30), SIMDE_FLOAT16_VALUE(3.20), SIMDE_FLOAT16_VALUE(4.60), SIMDE_FLOAT16_VALUE(-9.00), SIMDE_FLOAT16_VALUE(-0.30), SIMDE_FLOAT16_VALUE(-3.10), SIMDE_FLOAT16_VALUE(2.50) },
{ SIMDE_FLOAT16_VALUE(9.40), SIMDE_FLOAT16_VALUE(0.90), SIMDE_FLOAT16_VALUE(4.50), SIMDE_FLOAT16_VALUE(6.90), SIMDE_FLOAT16_VALUE(0.80), SIMDE_FLOAT16_VALUE(-1.70), SIMDE_FLOAT16_VALUE(-0.50), SIMDE_FLOAT16_VALUE(-3.40) },
{ SIMDE_FLOAT16_VALUE(-9.00), SIMDE_FLOAT16_VALUE(0.80), SIMDE_FLOAT16_VALUE(-0.30), SIMDE_FLOAT16_VALUE(-1.70), SIMDE_FLOAT16_VALUE(-3.10), SIMDE_FLOAT16_VALUE(-0.50), SIMDE_FLOAT16_VALUE(2.50), SIMDE_FLOAT16_VALUE(-3.40) } },
{ { SIMDE_FLOAT16_VALUE(6.10), SIMDE_FLOAT16_VALUE(-8.00), SIMDE_FLOAT16_VALUE(8.60), SIMDE_FLOAT16_VALUE(9.70), SIMDE_FLOAT16_VALUE(8.40), SIMDE_FLOAT16_VALUE(-2.60), SIMDE_FLOAT16_VALUE(8.70), SIMDE_FLOAT16_VALUE(-1.30) },
{ SIMDE_FLOAT16_VALUE(-1.30), SIMDE_FLOAT16_VALUE(-9.90), SIMDE_FLOAT16_VALUE(7.30), SIMDE_FLOAT16_VALUE(1.20), SIMDE_FLOAT16_VALUE(1.70), SIMDE_FLOAT16_VALUE(5.20), SIMDE_FLOAT16_VALUE(-8.60), SIMDE_FLOAT16_VALUE(5.90) },
{ SIMDE_FLOAT16_VALUE(8.40), SIMDE_FLOAT16_VALUE(1.70), SIMDE_FLOAT16_VALUE(-2.60), SIMDE_FLOAT16_VALUE(5.20), SIMDE_FLOAT16_VALUE(8.70), SIMDE_FLOAT16_VALUE(-8.60), SIMDE_FLOAT16_VALUE(-1.30), SIMDE_FLOAT16_VALUE(5.90) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float16x8_t a = simde_vld1q_f16(test_vec[i].a);
simde_float16x8_t b = simde_vld1q_f16(test_vec[i].b);
simde_float16x8_t r = simde_vzip2q_f16(a, b);
simde_test_arm_neon_assert_equal_f16x8(r, simde_vld1q_f16(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_float16x8_t a = simde_test_arm_neon_random_f16x8(-100.0f, 100.0f);
simde_float16x8_t b = simde_test_arm_neon_random_f16x8(-100.0f, 100.0f);
simde_float16x8_t r = simde_vzip2q_f16(a, b);
simde_test_arm_neon_write_f16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_f16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_f16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2q_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_float32 a[4];
simde_float32 b[4];
simde_float32 r[4];
} test_vec[] = {
{ { SIMDE_FLOAT32_C( 991.39), SIMDE_FLOAT32_C( -819.33), SIMDE_FLOAT32_C( -284.09), SIMDE_FLOAT32_C( -188.89) },
{ SIMDE_FLOAT32_C( -984.89), SIMDE_FLOAT32_C( -117.35), SIMDE_FLOAT32_C( 890.93), SIMDE_FLOAT32_C( 277.64) },
{ SIMDE_FLOAT32_C( -284.09), SIMDE_FLOAT32_C( 890.93), SIMDE_FLOAT32_C( -188.89), SIMDE_FLOAT32_C( 277.64) } },
{ { SIMDE_FLOAT32_C( 299.93), SIMDE_FLOAT32_C( 132.15), SIMDE_FLOAT32_C( -176.04), SIMDE_FLOAT32_C( 602.01) },
{ SIMDE_FLOAT32_C( 395.84), SIMDE_FLOAT32_C( 482.13), SIMDE_FLOAT32_C( 505.78), SIMDE_FLOAT32_C( -624.38) },
{ SIMDE_FLOAT32_C( -176.04), SIMDE_FLOAT32_C( 505.78), SIMDE_FLOAT32_C( 602.01), SIMDE_FLOAT32_C( -624.38) } },
{ { SIMDE_FLOAT32_C( -485.02), SIMDE_FLOAT32_C( 246.12), SIMDE_FLOAT32_C( -226.41), SIMDE_FLOAT32_C( -660.41) },
{ SIMDE_FLOAT32_C( 304.88), SIMDE_FLOAT32_C( 546.13), SIMDE_FLOAT32_C( 742.69), SIMDE_FLOAT32_C( -648.05) },
{ SIMDE_FLOAT32_C( -226.41), SIMDE_FLOAT32_C( 742.69), SIMDE_FLOAT32_C( -660.41), SIMDE_FLOAT32_C( -648.05) } },
{ { SIMDE_FLOAT32_C( -973.16), SIMDE_FLOAT32_C( 350.44), SIMDE_FLOAT32_C( 651.48), SIMDE_FLOAT32_C( -776.37) },
{ SIMDE_FLOAT32_C( -169.18), SIMDE_FLOAT32_C( 445.04), SIMDE_FLOAT32_C( -966.52), SIMDE_FLOAT32_C( -177.79) },
{ SIMDE_FLOAT32_C( 651.48), SIMDE_FLOAT32_C( -966.52), SIMDE_FLOAT32_C( -776.37), SIMDE_FLOAT32_C( -177.79) } },
{ { SIMDE_FLOAT32_C( 625.71), SIMDE_FLOAT32_C( -250.61), SIMDE_FLOAT32_C( 633.32), SIMDE_FLOAT32_C( 640.82) },
{ SIMDE_FLOAT32_C( 632.04), SIMDE_FLOAT32_C( 524.25), SIMDE_FLOAT32_C( -81.55), SIMDE_FLOAT32_C( -68.03) },
{ SIMDE_FLOAT32_C( 633.32), SIMDE_FLOAT32_C( -81.55), SIMDE_FLOAT32_C( 640.82), SIMDE_FLOAT32_C( -68.03) } },
{ { SIMDE_FLOAT32_C( -343.59), SIMDE_FLOAT32_C( 742.42), SIMDE_FLOAT32_C( -466.02), SIMDE_FLOAT32_C( -947.75) },
{ SIMDE_FLOAT32_C( 224.55), SIMDE_FLOAT32_C( -960.24), SIMDE_FLOAT32_C( -572.13), SIMDE_FLOAT32_C( 739.52) },
{ SIMDE_FLOAT32_C( -466.02), SIMDE_FLOAT32_C( -572.13), SIMDE_FLOAT32_C( -947.75), SIMDE_FLOAT32_C( 739.52) } },
{ { SIMDE_FLOAT32_C( 285.88), SIMDE_FLOAT32_C( 201.46), SIMDE_FLOAT32_C( -920.88), SIMDE_FLOAT32_C( -409.24) },
{ SIMDE_FLOAT32_C( -252.40), SIMDE_FLOAT32_C( 821.81), SIMDE_FLOAT32_C( -57.30), SIMDE_FLOAT32_C( -225.56) },
{ SIMDE_FLOAT32_C( -920.88), SIMDE_FLOAT32_C( -57.30), SIMDE_FLOAT32_C( -409.24), SIMDE_FLOAT32_C( -225.56) } },
{ { SIMDE_FLOAT32_C( 172.25), SIMDE_FLOAT32_C( -405.81), SIMDE_FLOAT32_C( -1.92), SIMDE_FLOAT32_C( -996.93) },
{ SIMDE_FLOAT32_C( -960.77), SIMDE_FLOAT32_C( 31.56), SIMDE_FLOAT32_C( -174.72), SIMDE_FLOAT32_C( 664.94) },
{ SIMDE_FLOAT32_C( -1.92), SIMDE_FLOAT32_C( -174.72), SIMDE_FLOAT32_C( -996.93), SIMDE_FLOAT32_C( 664.94) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float32x4_t a = simde_vld1q_f32(test_vec[i].a);
simde_float32x4_t b = simde_vld1q_f32(test_vec[i].b);
simde_float32x4_t r = simde_vzip2q_f32(a, b);
simde_test_arm_neon_assert_equal_f32x4(r, simde_vld1q_f32(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_float32x4_t a = simde_test_arm_neon_random_f32x4(-1000.0f, 1000.0f);
simde_float32x4_t b = simde_test_arm_neon_random_f32x4(-1000.0f, 1000.0f);
simde_float32x4_t r = simde_vzip2q_f32(a, b);
simde_test_arm_neon_write_f32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_f32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_f32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2q_s8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int8_t a[16];
int8_t b[16];
int8_t r[16];
} test_vec[] = {
{ { INT8_C( 85), INT8_C( 12), INT8_C( 36), INT8_C( 28), INT8_C( 122), INT8_C( 111), INT8_C( 64), -INT8_C( 98),
-INT8_C( 65), INT8_C( 75), INT8_C( 48), -INT8_C( 66), INT8_C( 91), -INT8_C( 17), -INT8_C( 68), -INT8_C( 84) },
{ INT8_C( 66), -INT8_C( 115), -INT8_C( 31), -INT8_C( 33), INT8_C( 20), INT8_MIN, INT8_C( 7), -INT8_C( 96),
-INT8_C( 89), -INT8_C( 66), -INT8_C( 35), INT8_C( 3), INT8_MAX, INT8_C( 12), INT8_C( 18), -INT8_C( 44) },
{ -INT8_C( 65), -INT8_C( 89), INT8_C( 75), -INT8_C( 66), INT8_C( 48), -INT8_C( 35), -INT8_C( 66), INT8_C( 3),
INT8_C( 91), INT8_MAX, -INT8_C( 17), INT8_C( 12), -INT8_C( 68), INT8_C( 18), -INT8_C( 84), -INT8_C( 44) } },
{ { INT8_C( 25), INT8_C( 54), -INT8_C( 15), -INT8_C( 109), -INT8_C( 90), INT8_C( 49), INT8_C( 49), INT8_C( 101),
INT8_C( 124), INT8_C( 97), INT8_C( 35), -INT8_C( 41), INT8_C( 80), -INT8_C( 32), -INT8_C( 125), -INT8_C( 109) },
{ INT8_C( 109), INT8_C( 100), INT8_C( 114), -INT8_C( 126), -INT8_C( 28), INT8_C( 121), INT8_C( 34), -INT8_C( 116),
INT8_C( 56), -INT8_C( 1), -INT8_C( 113), -INT8_C( 73), INT8_C( 12), -INT8_C( 94), -INT8_C( 117), INT8_C( 37) },
{ INT8_C( 124), INT8_C( 56), INT8_C( 97), -INT8_C( 1), INT8_C( 35), -INT8_C( 113), -INT8_C( 41), -INT8_C( 73),
INT8_C( 80), INT8_C( 12), -INT8_C( 32), -INT8_C( 94), -INT8_C( 125), -INT8_C( 117), -INT8_C( 109), INT8_C( 37) } },
{ { -INT8_C( 40), INT8_C( 124), -INT8_C( 72), INT8_C( 126), -INT8_C( 83), -INT8_C( 23), -INT8_C( 28), INT8_C( 41),
INT8_C( 74), INT8_C( 7), INT8_C( 0), -INT8_C( 102), -INT8_C( 25), -INT8_C( 125), INT8_C( 45), INT8_C( 85) },
{ -INT8_C( 25), -INT8_C( 97), -INT8_C( 41), -INT8_C( 52), INT8_C( 25), -INT8_C( 7), INT8_C( 88), INT8_C( 81),
-INT8_C( 7), -INT8_C( 25), INT8_C( 8), INT8_C( 5), -INT8_C( 119), -INT8_C( 109), INT8_C( 42), INT8_C( 98) },
{ INT8_C( 74), -INT8_C( 7), INT8_C( 7), -INT8_C( 25), INT8_C( 0), INT8_C( 8), -INT8_C( 102), INT8_C( 5),
-INT8_C( 25), -INT8_C( 119), -INT8_C( 125), -INT8_C( 109), INT8_C( 45), INT8_C( 42), INT8_C( 85), INT8_C( 98) } },
{ { INT8_C( 16), -INT8_C( 30), -INT8_C( 32), -INT8_C( 67), -INT8_C( 53), -INT8_C( 60), -INT8_C( 25), INT8_C( 21),
-INT8_C( 52), -INT8_C( 25), -INT8_C( 81), -INT8_C( 77), INT8_C( 107), -INT8_C( 35), INT8_C( 8), INT8_C( 82) },
{ INT8_C( 124), -INT8_C( 33), INT8_C( 30), -INT8_C( 107), -INT8_C( 39), INT8_C( 118), -INT8_C( 26), -INT8_C( 46),
INT8_C( 94), -INT8_C( 18), -INT8_C( 41), -INT8_C( 25), -INT8_C( 126), INT8_C( 1), INT8_C( 73), -INT8_C( 110) },
{ -INT8_C( 52), INT8_C( 94), -INT8_C( 25), -INT8_C( 18), -INT8_C( 81), -INT8_C( 41), -INT8_C( 77), -INT8_C( 25),
INT8_C( 107), -INT8_C( 126), -INT8_C( 35), INT8_C( 1), INT8_C( 8), INT8_C( 73), INT8_C( 82), -INT8_C( 110) } },
{ { -INT8_C( 29), INT8_C( 42), INT8_C( 79), -INT8_C( 82), -INT8_C( 18), INT8_C( 54), -INT8_C( 61), -INT8_C( 70),
INT8_C( 30), INT8_C( 114), INT8_C( 110), -INT8_C( 119), INT8_C( 79), INT8_C( 118), -INT8_C( 37), -INT8_C( 52) },
{ INT8_C( 86), -INT8_C( 6), INT8_C( 97), INT8_C( 47), INT8_C( 112), INT8_C( 72), INT8_C( 1), -INT8_C( 50),
INT8_C( 54), -INT8_C( 40), -INT8_C( 74), -INT8_C( 72), -INT8_C( 39), -INT8_C( 1), INT8_C( 74), -INT8_C( 68) },
{ INT8_C( 30), INT8_C( 54), INT8_C( 114), -INT8_C( 40), INT8_C( 110), -INT8_C( 74), -INT8_C( 119), -INT8_C( 72),
INT8_C( 79), -INT8_C( 39), INT8_C( 118), -INT8_C( 1), -INT8_C( 37), INT8_C( 74), -INT8_C( 52), -INT8_C( 68) } },
{ { INT8_C( 41), -INT8_C( 102), INT8_C( 106), INT8_C( 24), -INT8_C( 48), INT8_C( 45), -INT8_C( 46), -INT8_C( 18),
-INT8_C( 97), INT8_C( 64), INT8_C( 119), -INT8_C( 17), -INT8_C( 73), INT8_C( 83), -INT8_C( 69), INT8_C( 13) },
{ INT8_C( 77), INT8_C( 28), INT8_C( 60), -INT8_C( 67), INT8_C( 100), INT8_C( 61), -INT8_C( 116), -INT8_C( 101),
INT8_C( 21), INT8_C( 66), INT8_C( 83), -INT8_C( 18), INT8_C( 65), -INT8_C( 98), -INT8_C( 86), INT8_C( 107) },
{ -INT8_C( 97), INT8_C( 21), INT8_C( 64), INT8_C( 66), INT8_C( 119), INT8_C( 83), -INT8_C( 17), -INT8_C( 18),
-INT8_C( 73), INT8_C( 65), INT8_C( 83), -INT8_C( 98), -INT8_C( 69), -INT8_C( 86), INT8_C( 13), INT8_C( 107) } },
{ { INT8_C( 56), INT8_C( 20), -INT8_C( 125), INT8_C( 8), INT8_C( 65), INT8_C( 85), -INT8_C( 9), -INT8_C( 32),
-INT8_C( 106), INT8_C( 110), -INT8_C( 49), INT8_C( 77), -INT8_C( 63), -INT8_C( 118), INT8_C( 90), INT8_C( 14) },
{ -INT8_C( 89), -INT8_C( 106), -INT8_C( 52), INT8_C( 11), -INT8_C( 45), INT8_C( 88), -INT8_C( 90), -INT8_C( 24),
-INT8_C( 102), -INT8_C( 6), -INT8_C( 42), -INT8_C( 37), -INT8_C( 104), INT8_MIN, INT8_C( 70), -INT8_C( 48) },
{ -INT8_C( 106), -INT8_C( 102), INT8_C( 110), -INT8_C( 6), -INT8_C( 49), -INT8_C( 42), INT8_C( 77), -INT8_C( 37),
-INT8_C( 63), -INT8_C( 104), -INT8_C( 118), INT8_MIN, INT8_C( 90), INT8_C( 70), INT8_C( 14), -INT8_C( 48) } },
{ { -INT8_C( 108), -INT8_C( 55), -INT8_C( 40), -INT8_C( 43), INT8_C( 31), -INT8_C( 49), -INT8_C( 75), -INT8_C( 75),
INT8_C( 62), -INT8_C( 123), INT8_C( 2), -INT8_C( 1), INT8_C( 15), INT8_C( 92), INT8_C( 14), -INT8_C( 74) },
{ -INT8_C( 14), -INT8_C( 38), -INT8_C( 62), -INT8_C( 59), INT8_C( 50), INT8_C( 104), -INT8_C( 83), -INT8_C( 52),
INT8_C( 98), -INT8_C( 125), -INT8_C( 89), -INT8_C( 6), INT8_C( 3), -INT8_C( 18), -INT8_C( 54), -INT8_C( 105) },
{ INT8_C( 62), INT8_C( 98), -INT8_C( 123), -INT8_C( 125), INT8_C( 2), -INT8_C( 89), -INT8_C( 1), -INT8_C( 6),
INT8_C( 15), INT8_C( 3), INT8_C( 92), -INT8_C( 18), INT8_C( 14), -INT8_C( 54), -INT8_C( 74), -INT8_C( 105) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int8x16_t a = simde_vld1q_s8(test_vec[i].a);
simde_int8x16_t b = simde_vld1q_s8(test_vec[i].b);
simde_int8x16_t r = simde_vzip2q_s8(a, b);
simde_test_arm_neon_assert_equal_i8x16(r, simde_vld1q_s8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int8x16_t a = simde_test_arm_neon_random_i8x16();
simde_int8x16_t b = simde_test_arm_neon_random_i8x16();
simde_int8x16_t r = simde_vzip2q_s8(a, b);
simde_test_arm_neon_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2q_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int16_t a[8];
int16_t b[8];
int16_t r[8];
} test_vec[] = {
{ { INT16_C( 29172), INT16_C( 1064), -INT16_C( 10040), -INT16_C( 22031), INT16_C( 23069), INT16_C( 25595), INT16_C( 31505), -INT16_C( 6235) },
{ -INT16_C( 20461), -INT16_C( 29355), INT16_C( 11474), -INT16_C( 31606), INT16_C( 1073), -INT16_C( 19233), -INT16_C( 22064), -INT16_C( 15219) },
{ INT16_C( 23069), INT16_C( 1073), INT16_C( 25595), -INT16_C( 19233), INT16_C( 31505), -INT16_C( 22064), -INT16_C( 6235), -INT16_C( 15219) } },
{ { -INT16_C( 19174), -INT16_C( 7224), -INT16_C( 18034), -INT16_C( 21620), -INT16_C( 30957), INT16_C( 9231), -INT16_C( 19454), INT16_C( 5644) },
{ INT16_C( 24932), INT16_C( 13987), INT16_C( 11661), -INT16_C( 16710), -INT16_C( 26319), INT16_C( 370), INT16_C( 67), INT16_C( 24006) },
{ -INT16_C( 30957), -INT16_C( 26319), INT16_C( 9231), INT16_C( 370), -INT16_C( 19454), INT16_C( 67), INT16_C( 5644), INT16_C( 24006) } },
{ { -INT16_C( 29003), INT16_C( 17216), -INT16_C( 13240), INT16_C( 23535), -INT16_C( 428), INT16_C( 22144), -INT16_C( 29518), INT16_C( 5740) },
{ INT16_C( 4077), INT16_C( 31308), INT16_C( 1852), INT16_C( 27960), -INT16_C( 21856), -INT16_C( 7313), INT16_C( 13738), INT16_C( 24641) },
{ -INT16_C( 428), -INT16_C( 21856), INT16_C( 22144), -INT16_C( 7313), -INT16_C( 29518), INT16_C( 13738), INT16_C( 5740), INT16_C( 24641) } },
{ { -INT16_C( 32317), INT16_C( 2979), -INT16_C( 28082), -INT16_C( 23961), -INT16_C( 6256), INT16_C( 17144), INT16_C( 25971), INT16_C( 24664) },
{ -INT16_C( 23180), -INT16_C( 20006), INT16_C( 4780), INT16_C( 19486), -INT16_C( 29252), INT16_C( 26416), INT16_C( 29122), -INT16_C( 31033) },
{ -INT16_C( 6256), -INT16_C( 29252), INT16_C( 17144), INT16_C( 26416), INT16_C( 25971), INT16_C( 29122), INT16_C( 24664), -INT16_C( 31033) } },
{ { INT16_C( 27378), INT16_C( 16529), -INT16_C( 1795), -INT16_C( 29214), -INT16_C( 9249), INT16_C( 21200), INT16_C( 10304), -INT16_C( 19278) },
{ -INT16_C( 29491), INT16_C( 31077), -INT16_C( 31586), INT16_C( 23494), -INT16_C( 2543), -INT16_C( 11070), -INT16_C( 30361), INT16_C( 22874) },
{ -INT16_C( 9249), -INT16_C( 2543), INT16_C( 21200), -INT16_C( 11070), INT16_C( 10304), -INT16_C( 30361), -INT16_C( 19278), INT16_C( 22874) } },
{ { -INT16_C( 5133), -INT16_C( 3942), INT16_C( 31972), -INT16_C( 15490), INT16_C( 20055), -INT16_C( 26858), -INT16_C( 14218), INT16_C( 17484) },
{ -INT16_C( 20139), -INT16_C( 3139), -INT16_C( 31947), INT16_C( 18254), INT16_C( 4217), -INT16_C( 8165), INT16_C( 30105), -INT16_C( 29382) },
{ INT16_C( 20055), INT16_C( 4217), -INT16_C( 26858), -INT16_C( 8165), -INT16_C( 14218), INT16_C( 30105), INT16_C( 17484), -INT16_C( 29382) } },
{ { -INT16_C( 11168), INT16_C( 17533), -INT16_C( 1200), -INT16_C( 22520), INT16_C( 7753), -INT16_C( 16321), -INT16_C( 29722), INT16_C( 15108) },
{ -INT16_C( 16067), INT16_C( 29231), INT16_C( 32069), -INT16_C( 16711), -INT16_C( 11122), INT16_C( 10143), -INT16_C( 9911), -INT16_C( 21836) },
{ INT16_C( 7753), -INT16_C( 11122), -INT16_C( 16321), INT16_C( 10143), -INT16_C( 29722), -INT16_C( 9911), INT16_C( 15108), -INT16_C( 21836) } },
{ { INT16_C( 12973), -INT16_C( 530), -INT16_C( 2515), INT16_C( 30629), -INT16_C( 6892), -INT16_C( 1225), INT16_C( 15216), -INT16_C( 21194) },
{ INT16_C( 26108), INT16_C( 16672), -INT16_C( 9757), INT16_C( 28928), -INT16_C( 24658), -INT16_C( 2152), INT16_C( 19832), INT16_C( 9633) },
{ -INT16_C( 6892), -INT16_C( 24658), -INT16_C( 1225), -INT16_C( 2152), INT16_C( 15216), INT16_C( 19832), -INT16_C( 21194), INT16_C( 9633) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int16x8_t a = simde_vld1q_s16(test_vec[i].a);
simde_int16x8_t b = simde_vld1q_s16(test_vec[i].b);
simde_int16x8_t r = simde_vzip2q_s16(a, b);
simde_test_arm_neon_assert_equal_i16x8(r, simde_vld1q_s16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int16x8_t a = simde_test_arm_neon_random_i16x8();
simde_int16x8_t b = simde_test_arm_neon_random_i16x8();
simde_int16x8_t r = simde_vzip2q_s16(a, b);
simde_test_arm_neon_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2q_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int32_t a[4];
int32_t b[4];
int32_t r[4];
} test_vec[] = {
{ { -INT32_C( 447870806), INT32_C( 1960556641), INT32_C( 1546653011), -INT32_C( 295568563) },
{ -INT32_C( 145715186), INT32_C( 1570097258), -INT32_C( 1928396662), -INT32_C( 810854875) },
{ INT32_C( 1546653011), -INT32_C( 1928396662), -INT32_C( 295568563), -INT32_C( 810854875) } },
{ { -INT32_C( 1078593186), INT32_C( 70553777), -INT32_C( 345938787), INT32_C( 1842987615) },
{ -INT32_C( 1134220974), INT32_C( 2065300209), INT32_C( 537471482), -INT32_C( 554716033) },
{ -INT32_C( 345938787), INT32_C( 537471482), INT32_C( 1842987615), -INT32_C( 554716033) } },
{ { INT32_C( 1604166829), -INT32_C( 765210316), -INT32_C( 1782725579), -INT32_C( 654141818) },
{ -INT32_C( 1332385857), INT32_C( 1546366817), INT32_C( 1467757784), -INT32_C( 1774883864) },
{ -INT32_C( 1782725579), INT32_C( 1467757784), -INT32_C( 654141818), -INT32_C( 1774883864) } },
{ { INT32_C( 1156961040), -INT32_C( 636069724), -INT32_C( 1552952547), INT32_C( 679244137) },
{ INT32_C( 987239129), -INT32_C( 1718221631), INT32_C( 569381432), -INT32_C( 1900599682) },
{ -INT32_C( 1552952547), INT32_C( 569381432), INT32_C( 679244137), -INT32_C( 1900599682) } },
{ { -INT32_C( 1647137543), INT32_C( 561506564), INT32_C( 650503868), INT32_C( 827212120) },
{ INT32_C( 342566739), INT32_C( 1672282667), -INT32_C( 1836802540), -INT32_C( 1121961020) },
{ INT32_C( 650503868), -INT32_C( 1836802540), INT32_C( 827212120), -INT32_C( 1121961020) } },
{ { -INT32_C( 329583641), -INT32_C( 1743924516), INT32_C( 280941240), INT32_C( 1732316436) },
{ INT32_C( 1602006324), -INT32_C( 1010685521), -INT32_C( 1957279801), INT32_C( 1783133826) },
{ INT32_C( 280941240), -INT32_C( 1957279801), INT32_C( 1732316436), INT32_C( 1783133826) } },
{ { INT32_C( 1163305833), INT32_C( 769549173), INT32_C( 1245617206), -INT32_C( 575570007) },
{ -INT32_C( 616813268), INT32_C( 513802071), -INT32_C( 928320186), -INT32_C( 718081429) },
{ INT32_C( 1245617206), -INT32_C( 928320186), -INT32_C( 575570007), -INT32_C( 718081429) } },
{ { INT32_C( 169511061), INT32_C( 574159084), INT32_C( 1047295637), INT32_C( 572268021) },
{ -INT32_C( 1560455093), -INT32_C( 1648321449), -INT32_C( 43619695), -INT32_C( 221079459) },
{ INT32_C( 1047295637), -INT32_C( 43619695), INT32_C( 572268021), -INT32_C( 221079459) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int32x4_t a = simde_vld1q_s32(test_vec[i].a);
simde_int32x4_t b = simde_vld1q_s32(test_vec[i].b);
simde_int32x4_t r = simde_vzip2q_s32(a, b);
simde_test_arm_neon_assert_equal_i32x4(r, simde_vld1q_s32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int32x4_t a = simde_test_arm_neon_random_i32x4();
simde_int32x4_t b = simde_test_arm_neon_random_i32x4();
simde_int32x4_t r = simde_vzip2q_s32(a, b);
simde_test_arm_neon_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2q_s64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int64_t a[2];
int64_t b[2];
int64_t r[2];
} test_vec[] = {
{ { INT64_C( 3389154455161181546), INT64_C( 7789600881989832426) },
{ -INT64_C( 6216138325886961127), INT64_C( 8128889602060271500) },
{ INT64_C( 7789600881989832426), INT64_C( 8128889602060271500) } },
{ { INT64_C( 4280588231775133491), -INT64_C( 3843400407768008318) },
{ -INT64_C( 2503139029515142790), INT64_C( 4595617808483249743) },
{ -INT64_C( 3843400407768008318), INT64_C( 4595617808483249743) } },
{ { -INT64_C( 6190516375007038583), INT64_C( 8490571704889211736) },
{ -INT64_C( 8558999586011666166), -INT64_C( 4175499598915218751) },
{ INT64_C( 8490571704889211736), -INT64_C( 4175499598915218751) } },
{ { -INT64_C( 4905907207152761576), INT64_C( 7900326818308542771) },
{ -INT64_C( 4070128137537015102), INT64_C( 2402004138219365202) },
{ INT64_C( 7900326818308542771), INT64_C( 2402004138219365202) } },
{ { -INT64_C( 2286056552104069593), INT64_C( 7416498006436743965) },
{ INT64_C( 518167619684185188), -INT64_C( 8109598195675904694) },
{ INT64_C( 7416498006436743965), -INT64_C( 8109598195675904694) } },
{ { INT64_C( 4498921349512353505), -INT64_C( 7820595108767695508) },
{ INT64_C( 727944592766064991), INT64_C( 9001237270419583218) },
{ -INT64_C( 7820595108767695508), INT64_C( 9001237270419583218) } },
{ { -INT64_C( 3312544423324482393), -INT64_C( 3478649799431698953) },
{ -INT64_C( 3026702744038492620), -INT64_C( 3115054789748040787) },
{ -INT64_C( 3478649799431698953), -INT64_C( 3115054789748040787) } },
{ { INT64_C( 4780188694459830302), -INT64_C( 4059675570677991062) },
{ INT64_C( 3931846471610764248), -INT64_C( 498416479562121196) },
{ -INT64_C( 4059675570677991062), -INT64_C( 498416479562121196) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int64x2_t a = simde_vld1q_s64(test_vec[i].a);
simde_int64x2_t b = simde_vld1q_s64(test_vec[i].b);
simde_int64x2_t r = simde_vzip2q_s64(a, b);
simde_test_arm_neon_assert_equal_i64x2(r, simde_vld1q_s64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int64x2_t a = simde_test_arm_neon_random_i64x2();
simde_int64x2_t b = simde_test_arm_neon_random_i64x2();
simde_int64x2_t r = simde_vzip2q_s64(a, b);
simde_test_arm_neon_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2q_u8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint8_t a[16];
uint8_t b[16];
uint8_t r[16];
} test_vec[] = {
{ { UINT8_C(127), UINT8_C( 19), UINT8_C(254), UINT8_C( 88), UINT8_C( 56), UINT8_C( 15), UINT8_C( 99), UINT8_C( 77),
UINT8_C( 51), UINT8_C(112), UINT8_C( 89), UINT8_C(110), UINT8_C(170), UINT8_C( 43), UINT8_C( 97), UINT8_C( 38) },
{ UINT8_C(185), UINT8_C(103), UINT8_C( 79), UINT8_C(147), UINT8_C( 2), UINT8_C( 18), UINT8_C(242), UINT8_C(119),
UINT8_C( 51), UINT8_C( 19), UINT8_C( 24), UINT8_C( 45), UINT8_C(135), UINT8_C(119), UINT8_C( 0), UINT8_C( 6) },
{ UINT8_C( 51), UINT8_C( 51), UINT8_C(112), UINT8_C( 19), UINT8_C( 89), UINT8_C( 24), UINT8_C(110), UINT8_C( 45),
UINT8_C(170), UINT8_C(135), UINT8_C( 43), UINT8_C(119), UINT8_C( 97), UINT8_C( 0), UINT8_C( 38), UINT8_C( 6) } },
{ { UINT8_C(139), UINT8_C(254), UINT8_C( 95), UINT8_C(195), UINT8_C( 14), UINT8_C(194), UINT8_C( 16), UINT8_C( 65),
UINT8_C( 50), UINT8_C(105), UINT8_C(175), UINT8_C(220), UINT8_C(148), UINT8_C( 16), UINT8_C( 3), UINT8_C( 78) },
{ UINT8_C(120), UINT8_C( 82), UINT8_C(225), UINT8_C(122), UINT8_C(100), UINT8_C(211), UINT8_C(241), UINT8_C(151),
UINT8_C(230), UINT8_C( 10), UINT8_C(196), UINT8_C(109), UINT8_C(129), UINT8_C(196), UINT8_C(116), UINT8_C( 12) },
{ UINT8_C( 50), UINT8_C(230), UINT8_C(105), UINT8_C( 10), UINT8_C(175), UINT8_C(196), UINT8_C(220), UINT8_C(109),
UINT8_C(148), UINT8_C(129), UINT8_C( 16), UINT8_C(196), UINT8_C( 3), UINT8_C(116), UINT8_C( 78), UINT8_C( 12) } },
{ { UINT8_C(195), UINT8_C(211), UINT8_C(207), UINT8_C(209), UINT8_C(149), UINT8_C(223), UINT8_C( 18), UINT8_C(199),
UINT8_C( 72), UINT8_C(193), UINT8_C(163), UINT8_C(221), UINT8_C(210), UINT8_C(166), UINT8_C( 43), UINT8_C( 74) },
{ UINT8_C(248), UINT8_C( 12), UINT8_C(196), UINT8_C( 93), UINT8_C(223), UINT8_C(182), UINT8_C(244), UINT8_C(197),
UINT8_C(192), UINT8_C(185), UINT8_C( 51), UINT8_C( 65), UINT8_C(125), UINT8_C(167), UINT8_C( 78), UINT8_C( 64) },
{ UINT8_C( 72), UINT8_C(192), UINT8_C(193), UINT8_C(185), UINT8_C(163), UINT8_C( 51), UINT8_C(221), UINT8_C( 65),
UINT8_C(210), UINT8_C(125), UINT8_C(166), UINT8_C(167), UINT8_C( 43), UINT8_C( 78), UINT8_C( 74), UINT8_C( 64) } },
{ { UINT8_C(122), UINT8_C( 29), UINT8_C( 17), UINT8_C( 15), UINT8_C(253), UINT8_C( 35), UINT8_C(214), UINT8_C( 69),
UINT8_C(229), UINT8_C(121), UINT8_C( 34), UINT8_C(183), UINT8_C( 32), UINT8_C( 77), UINT8_C( 1), UINT8_C( 24) },
{ UINT8_C( 89), UINT8_C(197), UINT8_C(117), UINT8_C( 56), UINT8_C(123), UINT8_C(106), UINT8_C(254), UINT8_C( 59),
UINT8_C( 35), UINT8_C( 49), UINT8_C(125), UINT8_C(160), UINT8_C(216), UINT8_C(203), UINT8_C(225), UINT8_C( 82) },
{ UINT8_C(229), UINT8_C( 35), UINT8_C(121), UINT8_C( 49), UINT8_C( 34), UINT8_C(125), UINT8_C(183), UINT8_C(160),
UINT8_C( 32), UINT8_C(216), UINT8_C( 77), UINT8_C(203), UINT8_C( 1), UINT8_C(225), UINT8_C( 24), UINT8_C( 82) } },
{ { UINT8_C(232), UINT8_C(242), UINT8_C( 97), UINT8_C(229), UINT8_C( 22), UINT8_C( 55), UINT8_C( 43), UINT8_C(251),
UINT8_C(176), UINT8_C( 77), UINT8_C(178), UINT8_C(208), UINT8_C(155), UINT8_C(179), UINT8_C(233), UINT8_C(244) },
{ UINT8_C(120), UINT8_C( 94), UINT8_C( 45), UINT8_C(244), UINT8_C(200), UINT8_C( 43), UINT8_C( 47), UINT8_C(235),
UINT8_C( 92), UINT8_C(172), UINT8_C(140), UINT8_C( 52), UINT8_C(119), UINT8_C(109), UINT8_C(134), UINT8_C( 96) },
{ UINT8_C(176), UINT8_C( 92), UINT8_C( 77), UINT8_C(172), UINT8_C(178), UINT8_C(140), UINT8_C(208), UINT8_C( 52),
UINT8_C(155), UINT8_C(119), UINT8_C(179), UINT8_C(109), UINT8_C(233), UINT8_C(134), UINT8_C(244), UINT8_C( 96) } },
{ { UINT8_C( 95), UINT8_C(231), UINT8_C( 69), UINT8_C(117), UINT8_C( 30), UINT8_C(112), UINT8_C(112), UINT8_C(206),
UINT8_C(190), UINT8_C( 34), UINT8_C(159), UINT8_C( 89), UINT8_C(213), UINT8_C(136), UINT8_C( 77), UINT8_C( 78) },
{ UINT8_C(230), UINT8_C(122), UINT8_C( 66), UINT8_C(175), UINT8_C(165), UINT8_C(113), UINT8_C(154), UINT8_C( 1),
UINT8_C( 30), UINT8_C( 38), UINT8_C( 53), UINT8_C(149), UINT8_C(147), UINT8_C(187), UINT8_C(245), UINT8_C(243) },
{ UINT8_C(190), UINT8_C( 30), UINT8_C( 34), UINT8_C( 38), UINT8_C(159), UINT8_C( 53), UINT8_C( 89), UINT8_C(149),
UINT8_C(213), UINT8_C(147), UINT8_C(136), UINT8_C(187), UINT8_C( 77), UINT8_C(245), UINT8_C( 78), UINT8_C(243) } },
{ { UINT8_C(162), UINT8_C( 59), UINT8_C(104), UINT8_C(192), UINT8_C(171), UINT8_C(217), UINT8_C(143), UINT8_C(105),
UINT8_C(251), UINT8_C( 46), UINT8_C(194), UINT8_C(209), UINT8_C(182), UINT8_C( 16), UINT8_C( 31), UINT8_C(156) },
{ UINT8_C(138), UINT8_C( 97), UINT8_C( 75), UINT8_C( 48), UINT8_C(210), UINT8_C(230), UINT8_C( 49), UINT8_C(240),
UINT8_C( 12), UINT8_C(103), UINT8_C(134), UINT8_C(160), UINT8_C( 34), UINT8_C(123), UINT8_C(147), UINT8_C(197) },
{ UINT8_C(251), UINT8_C( 12), UINT8_C( 46), UINT8_C(103), UINT8_C(194), UINT8_C(134), UINT8_C(209), UINT8_C(160),
UINT8_C(182), UINT8_C( 34), UINT8_C( 16), UINT8_C(123), UINT8_C( 31), UINT8_C(147), UINT8_C(156), UINT8_C(197) } },
{ { UINT8_C(182), UINT8_C(251), UINT8_C(133), UINT8_C( 98), UINT8_C(212), UINT8_C( 20), UINT8_C(203), UINT8_C(208),
UINT8_C( 66), UINT8_C(142), UINT8_C(161), UINT8_C(248), UINT8_C(158), UINT8_C(192), UINT8_C(149), UINT8_C( 40) },
{ UINT8_C( 33), UINT8_C(224), UINT8_C( 88), UINT8_C(243), UINT8_C(198), UINT8_C(138), UINT8_C(228), UINT8_C(211),
UINT8_C(241), UINT8_C(106), UINT8_C(115), UINT8_C( 19), UINT8_C(229), UINT8_C( 6), UINT8_C(216), UINT8_C(156) },
{ UINT8_C( 66), UINT8_C(241), UINT8_C(142), UINT8_C(106), UINT8_C(161), UINT8_C(115), UINT8_C(248), UINT8_C( 19),
UINT8_C(158), UINT8_C(229), UINT8_C(192), UINT8_C( 6), UINT8_C(149), UINT8_C(216), UINT8_C( 40), UINT8_C(156) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint8x16_t a = simde_vld1q_u8(test_vec[i].a);
simde_uint8x16_t b = simde_vld1q_u8(test_vec[i].b);
simde_uint8x16_t r = simde_vzip2q_u8(a, b);
simde_test_arm_neon_assert_equal_u8x16(r, simde_vld1q_u8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint8x16_t a = simde_test_arm_neon_random_u8x16();
simde_uint8x16_t b = simde_test_arm_neon_random_u8x16();
simde_uint8x16_t r = simde_vzip2q_u8(a, b);
simde_test_arm_neon_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_u8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2q_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint16_t a[8];
uint16_t b[8];
uint16_t r[8];
} test_vec[] = {
{ { UINT16_C(56843), UINT16_C(48859), UINT16_C(62267), UINT16_C(16307), UINT16_C(14313), UINT16_C(51328), UINT16_C(63506), UINT16_C(34614) },
{ UINT16_C(29688), UINT16_C(53182), UINT16_C(19541), UINT16_C(62702), UINT16_C(38625), UINT16_C( 4081), UINT16_C(60683), UINT16_C( 5668) },
{ UINT16_C(14313), UINT16_C(38625), UINT16_C(51328), UINT16_C( 4081), UINT16_C(63506), UINT16_C(60683), UINT16_C(34614), UINT16_C( 5668) } },
{ { UINT16_C(65484), UINT16_C( 2005), UINT16_C(35058), UINT16_C(56390), UINT16_C(51135), UINT16_C(53668), UINT16_C(55999), UINT16_C(46936) },
{ UINT16_C( 5965), UINT16_C(41607), UINT16_C(30051), UINT16_C(17814), UINT16_C(34571), UINT16_C( 5716), UINT16_C(31093), UINT16_C(16685) },
{ UINT16_C(51135), UINT16_C(34571), UINT16_C(53668), UINT16_C( 5716), UINT16_C(55999), UINT16_C(31093), UINT16_C(46936), UINT16_C(16685) } },
{ { UINT16_C( 632), UINT16_C(27464), UINT16_C(36490), UINT16_C(19015), UINT16_C(60245), UINT16_C( 5403), UINT16_C(29893), UINT16_C( 5068) },
{ UINT16_C(21387), UINT16_C(61109), UINT16_C(19657), UINT16_C(54323), UINT16_C(35027), UINT16_C(18667), UINT16_C( 6145), UINT16_C(31113) },
{ UINT16_C(60245), UINT16_C(35027), UINT16_C( 5403), UINT16_C(18667), UINT16_C(29893), UINT16_C( 6145), UINT16_C( 5068), UINT16_C(31113) } },
{ { UINT16_C(53530), UINT16_C(42212), UINT16_C(11104), UINT16_C(46574), UINT16_C( 2582), UINT16_C(56522), UINT16_C(38782), UINT16_C( 2543) },
{ UINT16_C(42218), UINT16_C(46071), UINT16_C(11248), UINT16_C(50312), UINT16_C(29619), UINT16_C(46092), UINT16_C(38539), UINT16_C(42285) },
{ UINT16_C( 2582), UINT16_C(29619), UINT16_C(56522), UINT16_C(46092), UINT16_C(38782), UINT16_C(38539), UINT16_C( 2543), UINT16_C(42285) } },
{ { UINT16_C( 4711), UINT16_C(51017), UINT16_C(14397), UINT16_C(21629), UINT16_C(18242), UINT16_C(49200), UINT16_C( 8158), UINT16_C(51657) },
{ UINT16_C(49347), UINT16_C(46204), UINT16_C( 1259), UINT16_C(40568), UINT16_C(33911), UINT16_C( 594), UINT16_C(32794), UINT16_C(33447) },
{ UINT16_C(18242), UINT16_C(33911), UINT16_C(49200), UINT16_C( 594), UINT16_C( 8158), UINT16_C(32794), UINT16_C(51657), UINT16_C(33447) } },
{ { UINT16_C(61842), UINT16_C(53065), UINT16_C(50729), UINT16_C(27427), UINT16_C(21262), UINT16_C(60459), UINT16_C(62578), UINT16_C(14005) },
{ UINT16_C(12980), UINT16_C(41194), UINT16_C(25142), UINT16_C(44606), UINT16_C(37350), UINT16_C( 432), UINT16_C(22545), UINT16_C(41859) },
{ UINT16_C(21262), UINT16_C(37350), UINT16_C(60459), UINT16_C( 432), UINT16_C(62578), UINT16_C(22545), UINT16_C(14005), UINT16_C(41859) } },
{ { UINT16_C(52297), UINT16_C(29298), UINT16_C(38547), UINT16_C(41437), UINT16_C( 2281), UINT16_C(23693), UINT16_C(17404), UINT16_C(45202) },
{ UINT16_C(31861), UINT16_C(43856), UINT16_C(36830), UINT16_C(50265), UINT16_C( 2592), UINT16_C(12741), UINT16_C(18530), UINT16_C(43988) },
{ UINT16_C( 2281), UINT16_C( 2592), UINT16_C(23693), UINT16_C(12741), UINT16_C(17404), UINT16_C(18530), UINT16_C(45202), UINT16_C(43988) } },
{ { UINT16_C(17941), UINT16_C(43037), UINT16_C(64220), UINT16_C(50761), UINT16_C(54786), UINT16_C(65058), UINT16_C(46105), UINT16_C(36526) },
{ UINT16_C(65328), UINT16_C( 3642), UINT16_C(37774), UINT16_C(44754), UINT16_C(39069), UINT16_C(65503), UINT16_C(46048), UINT16_C(62890) },
{ UINT16_C(54786), UINT16_C(39069), UINT16_C(65058), UINT16_C(65503), UINT16_C(46105), UINT16_C(46048), UINT16_C(36526), UINT16_C(62890) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint16x8_t a = simde_vld1q_u16(test_vec[i].a);
simde_uint16x8_t b = simde_vld1q_u16(test_vec[i].b);
simde_uint16x8_t r = simde_vzip2q_u16(a, b);
simde_test_arm_neon_assert_equal_u16x8(r, simde_vld1q_u16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint16x8_t a = simde_test_arm_neon_random_u16x8();
simde_uint16x8_t b = simde_test_arm_neon_random_u16x8();
simde_uint16x8_t r = simde_vzip2q_u16(a, b);
simde_test_arm_neon_write_u16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_u16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2q_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint32_t a[4];
uint32_t b[4];
uint32_t r[4];
} test_vec[] = {
{ { UINT32_C( 478890778), UINT32_C(1273886894), UINT32_C( 298449113), UINT32_C(1553786033) },
{ UINT32_C(3000604583), UINT32_C(2965413592), UINT32_C(2252713574), UINT32_C(1703353163) },
{ UINT32_C( 298449113), UINT32_C(2252713574), UINT32_C(1553786033), UINT32_C(1703353163) } },
{ { UINT32_C( 360780391), UINT32_C(3831524875), UINT32_C( 418720102), UINT32_C(3027538189) },
{ UINT32_C( 6769960), UINT32_C(1387341804), UINT32_C( 551089877), UINT32_C(2038849298) },
{ UINT32_C( 418720102), UINT32_C( 551089877), UINT32_C(3027538189), UINT32_C(2038849298) } },
{ { UINT32_C(2106460018), UINT32_C(3697405814), UINT32_C( 653547032), UINT32_C( 265972199) },
{ UINT32_C(2718974390), UINT32_C(1056227688), UINT32_C(3378433207), UINT32_C(2655183916) },
{ UINT32_C( 653547032), UINT32_C(3378433207), UINT32_C( 265972199), UINT32_C(2655183916) } },
{ { UINT32_C(1645990380), UINT32_C(3627973824), UINT32_C(3120444370), UINT32_C(1388894620) },
{ UINT32_C(2213926938), UINT32_C(1371662745), UINT32_C(3793362870), UINT32_C(4034944260) },
{ UINT32_C(3120444370), UINT32_C(3793362870), UINT32_C(1388894620), UINT32_C(4034944260) } },
{ { UINT32_C(3998391086), UINT32_C(3922104343), UINT32_C(1604502979), UINT32_C(3098700446) },
{ UINT32_C(3694896963), UINT32_C(1177418896), UINT32_C( 539510812), UINT32_C(3541084325) },
{ UINT32_C(1604502979), UINT32_C( 539510812), UINT32_C(3098700446), UINT32_C(3541084325) } },
{ { UINT32_C(1522623043), UINT32_C(3057879026), UINT32_C(3927303500), UINT32_C(2476984144) },
{ UINT32_C(4285521518), UINT32_C(4148534747), UINT32_C(2316791525), UINT32_C(1516054294) },
{ UINT32_C(3927303500), UINT32_C(2316791525), UINT32_C(2476984144), UINT32_C(1516054294) } },
{ { UINT32_C(2075401865), UINT32_C(4063361189), UINT32_C( 769411037), UINT32_C(2109767438) },
{ UINT32_C( 964440158), UINT32_C(2989539789), UINT32_C(1178355503), UINT32_C(4154497390) },
{ UINT32_C( 769411037), UINT32_C(1178355503), UINT32_C(2109767438), UINT32_C(4154497390) } },
{ { UINT32_C(1550996663), UINT32_C( 709796940), UINT32_C(4183239659), UINT32_C( 141957290) },
{ UINT32_C( 356643400), UINT32_C(3821498804), UINT32_C( 640222136), UINT32_C(1394461084) },
{ UINT32_C(4183239659), UINT32_C( 640222136), UINT32_C( 141957290), UINT32_C(1394461084) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint32x4_t a = simde_vld1q_u32(test_vec[i].a);
simde_uint32x4_t b = simde_vld1q_u32(test_vec[i].b);
simde_uint32x4_t r = simde_vzip2q_u32(a, b);
simde_test_arm_neon_assert_equal_u32x4(r, simde_vld1q_u32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint32x4_t a = simde_test_arm_neon_random_u32x4();
simde_uint32x4_t b = simde_test_arm_neon_random_u32x4();
simde_uint32x4_t r = simde_vzip2q_u32(a, b);
simde_test_arm_neon_write_u32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_u32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2q_u64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint64_t a[2];
uint64_t b[2];
uint64_t r[2];
} test_vec[] = {
{ { UINT64_C( 4280958701235489246), UINT64_C(11535681782777318835) },
{ UINT64_C( 6878166422813626130), UINT64_C(12381793737624657829) },
{ UINT64_C(11535681782777318835), UINT64_C(12381793737624657829) } },
{ { UINT64_C(14969386940695648064), UINT64_C( 3104490981576679679) },
{ UINT64_C(13112230382089857197), UINT64_C( 8545878496494894880) },
{ UINT64_C( 3104490981576679679), UINT64_C( 8545878496494894880) } },
{ { UINT64_C( 1374078459952243238), UINT64_C( 7285027289849944533) },
{ UINT64_C(14288505062639445382), UINT64_C(13466410036153779510) },
{ UINT64_C( 7285027289849944533), UINT64_C(13466410036153779510) } },
{ { UINT64_C( 7247714085351774830), UINT64_C( 4721016760819653991) },
{ UINT64_C(12717357733718164241), UINT64_C(17002494307029758118) },
{ UINT64_C( 4721016760819653991), UINT64_C(17002494307029758118) } },
{ { UINT64_C( 7263466160932188377), UINT64_C(11249156841034424097) },
{ UINT64_C(13453888246246536075), UINT64_C(12135486648795582720) },
{ UINT64_C(11249156841034424097), UINT64_C(12135486648795582720) } },
{ { UINT64_C(18103026683644860376), UINT64_C( 5847067349770288893) },
{ UINT64_C( 5239669095272970216), UINT64_C( 7805915270211808220) },
{ UINT64_C( 5847067349770288893), UINT64_C( 7805915270211808220) } },
{ { UINT64_C( 4673466768805750021), UINT64_C(10327578197059285819) },
{ UINT64_C(10372990280714201189), UINT64_C(17217137029729139438) },
{ UINT64_C(10327578197059285819), UINT64_C(17217137029729139438) } },
{ { UINT64_C(16823101498774663667), UINT64_C(10561851715167600732) },
{ UINT64_C( 5847417664724475876), UINT64_C(16412457277402079725) },
{ UINT64_C(10561851715167600732), UINT64_C(16412457277402079725) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint64x2_t a = simde_vld1q_u64(test_vec[i].a);
simde_uint64x2_t b = simde_vld1q_u64(test_vec[i].b);
simde_uint64x2_t r = simde_vzip2q_u64(a, b);
simde_test_arm_neon_assert_equal_u64x2(r, simde_vld1q_u64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint64x2_t a = simde_test_arm_neon_random_u64x2();
simde_uint64x2_t b = simde_test_arm_neon_random_u64x2();
simde_uint64x2_t r = simde_vzip2q_u64(a, b);
simde_test_arm_neon_write_u64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_u64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2_p8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_poly8_t a[8];
simde_poly8_t b[8];
simde_poly8_t r[8];
} test_vec[] = {
{ { SIMDE_POLY8_C( 92), SIMDE_POLY8_C( 83), SIMDE_POLY8_C( 54), SIMDE_POLY8_C(128), SIMDE_POLY8_C(189), SIMDE_POLY8_C(177), SIMDE_POLY8_C(148), SIMDE_POLY8_C(204) },
{ SIMDE_POLY8_C( 3), SIMDE_POLY8_C( 8), SIMDE_POLY8_C( 33), SIMDE_POLY8_C( 35), SIMDE_POLY8_C( 77), SIMDE_POLY8_C(187), SIMDE_POLY8_C(189), SIMDE_POLY8_C(155) },
{ SIMDE_POLY8_C(189), SIMDE_POLY8_C( 77), SIMDE_POLY8_C(177), SIMDE_POLY8_C(187), SIMDE_POLY8_C(148), SIMDE_POLY8_C(189), SIMDE_POLY8_C(204), SIMDE_POLY8_C(155) } },
{ { SIMDE_POLY8_C(183), SIMDE_POLY8_C( 14), SIMDE_POLY8_C( 96), SIMDE_POLY8_C(141), SIMDE_POLY8_C( 14), SIMDE_POLY8_C(153), SIMDE_POLY8_C(229), SIMDE_POLY8_C( 0) },
{ SIMDE_POLY8_C(117), SIMDE_POLY8_C(187), SIMDE_POLY8_C(126), SIMDE_POLY8_C(177), SIMDE_POLY8_C(175), SIMDE_POLY8_C(115), SIMDE_POLY8_C(204), SIMDE_POLY8_C( 11) },
{ SIMDE_POLY8_C( 14), SIMDE_POLY8_C(175), SIMDE_POLY8_C(153), SIMDE_POLY8_C(115), SIMDE_POLY8_C(229), SIMDE_POLY8_C(204), SIMDE_POLY8_C( 0), SIMDE_POLY8_C( 11) } },
{ { SIMDE_POLY8_C(198), SIMDE_POLY8_C( 2), SIMDE_POLY8_C(139), SIMDE_POLY8_C(131), SIMDE_POLY8_C(179), SIMDE_POLY8_C( 31), SIMDE_POLY8_C( 80), SIMDE_POLY8_C(182) },
{ SIMDE_POLY8_C( 40), SIMDE_POLY8_C(113), SIMDE_POLY8_C(218), SIMDE_POLY8_C(117), SIMDE_POLY8_C( 44), SIMDE_POLY8_C(151), SIMDE_POLY8_C( 16), SIMDE_POLY8_C(228) },
{ SIMDE_POLY8_C(179), SIMDE_POLY8_C( 44), SIMDE_POLY8_C( 31), SIMDE_POLY8_C(151), SIMDE_POLY8_C( 80), SIMDE_POLY8_C( 16), SIMDE_POLY8_C(182), SIMDE_POLY8_C(228) } },
{ { SIMDE_POLY8_C(166), SIMDE_POLY8_C(112), SIMDE_POLY8_C(113), SIMDE_POLY8_C(180), SIMDE_POLY8_C( 9), SIMDE_POLY8_C( 86), SIMDE_POLY8_C(181), SIMDE_POLY8_C(126) },
{ SIMDE_POLY8_C( 17), SIMDE_POLY8_C( 51), SIMDE_POLY8_C( 47), SIMDE_POLY8_C(192), SIMDE_POLY8_C(166), SIMDE_POLY8_C(251), SIMDE_POLY8_C(203), SIMDE_POLY8_C(108) },
{ SIMDE_POLY8_C( 9), SIMDE_POLY8_C(166), SIMDE_POLY8_C( 86), SIMDE_POLY8_C(251), SIMDE_POLY8_C(181), SIMDE_POLY8_C(203), SIMDE_POLY8_C(126), SIMDE_POLY8_C(108) } },
{ { SIMDE_POLY8_C(254), SIMDE_POLY8_C( 86), SIMDE_POLY8_C(239), SIMDE_POLY8_C(177), SIMDE_POLY8_C(118), SIMDE_POLY8_C( 63), SIMDE_POLY8_C(104), SIMDE_POLY8_C(158) },
{ SIMDE_POLY8_C(177), SIMDE_POLY8_C( 66), SIMDE_POLY8_C( 19), SIMDE_POLY8_C(221), SIMDE_POLY8_C(217), SIMDE_POLY8_C( 35), SIMDE_POLY8_C(193), SIMDE_POLY8_C(127) },
{ SIMDE_POLY8_C(118), SIMDE_POLY8_C(217), SIMDE_POLY8_C( 63), SIMDE_POLY8_C( 35), SIMDE_POLY8_C(104), SIMDE_POLY8_C(193), SIMDE_POLY8_C(158), SIMDE_POLY8_C(127) } },
{ { SIMDE_POLY8_C(147), SIMDE_POLY8_C( 50), SIMDE_POLY8_C( 52), SIMDE_POLY8_C(156), SIMDE_POLY8_C(136), SIMDE_POLY8_C(233), SIMDE_POLY8_C( 27), SIMDE_POLY8_C(154) },
{ SIMDE_POLY8_C( 28), SIMDE_POLY8_C( 74), SIMDE_POLY8_C( 90), SIMDE_POLY8_C(194), SIMDE_POLY8_C( 70), SIMDE_POLY8_C( 38), SIMDE_POLY8_C( 46), SIMDE_POLY8_C( 68) },
{ SIMDE_POLY8_C(136), SIMDE_POLY8_C( 70), SIMDE_POLY8_C(233), SIMDE_POLY8_C( 38), SIMDE_POLY8_C( 27), SIMDE_POLY8_C( 46), SIMDE_POLY8_C(154), SIMDE_POLY8_C( 68) } },
{ { SIMDE_POLY8_C(124), SIMDE_POLY8_C( 29), SIMDE_POLY8_C(245), SIMDE_POLY8_C(242), SIMDE_POLY8_C( 93), SIMDE_POLY8_C( 93), SIMDE_POLY8_C(144), SIMDE_POLY8_C( 14) },
{ SIMDE_POLY8_C(159), SIMDE_POLY8_C(163), SIMDE_POLY8_C(235), SIMDE_POLY8_C(121), SIMDE_POLY8_C(198), SIMDE_POLY8_C(173), SIMDE_POLY8_C(248), SIMDE_POLY8_C( 89) },
{ SIMDE_POLY8_C( 93), SIMDE_POLY8_C(198), SIMDE_POLY8_C( 93), SIMDE_POLY8_C(173), SIMDE_POLY8_C(144), SIMDE_POLY8_C(248), SIMDE_POLY8_C( 14), SIMDE_POLY8_C( 89) } },
{ { SIMDE_POLY8_C(223), SIMDE_POLY8_C( 44), SIMDE_POLY8_C(246), SIMDE_POLY8_C(104), SIMDE_POLY8_C( 21), SIMDE_POLY8_C( 17), SIMDE_POLY8_C( 2), SIMDE_POLY8_C( 49) },
{ SIMDE_POLY8_C( 91), SIMDE_POLY8_C( 92), SIMDE_POLY8_C(243), SIMDE_POLY8_C(161), SIMDE_POLY8_C(130), SIMDE_POLY8_C( 33), SIMDE_POLY8_C(229), SIMDE_POLY8_C(UINT8_MAX) },
{ SIMDE_POLY8_C( 21), SIMDE_POLY8_C(130), SIMDE_POLY8_C( 17), SIMDE_POLY8_C( 33), SIMDE_POLY8_C( 2), SIMDE_POLY8_C(229), SIMDE_POLY8_C( 49), SIMDE_POLY8_C(UINT8_MAX) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_poly8x8_t a = simde_vld1_p8(test_vec[i].a);
simde_poly8x8_t b = simde_vld1_p8(test_vec[i].b);
simde_poly8x8_t r = simde_vzip2_p8(a, b);
simde_test_arm_neon_assert_equal_p8x8(r, simde_vld1_p8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_poly8x8_t a = simde_test_arm_neon_random_p8x8();
simde_poly8x8_t b = simde_test_arm_neon_random_p8x8();
simde_poly8x8_t r = simde_vzip2_p8(a, b);
simde_test_arm_neon_write_p8x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_p8x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_p8x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2_p16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_poly16_t a[4];
simde_poly16_t b[4];
simde_poly16_t r[4];
} test_vec[] = {
{ { SIMDE_POLY16_C(17902), SIMDE_POLY16_C(53967), SIMDE_POLY16_C(20983), SIMDE_POLY16_C(42835) },
{ SIMDE_POLY16_C(47613), SIMDE_POLY16_C(55873), SIMDE_POLY16_C(16028), SIMDE_POLY16_C(21060) },
{ SIMDE_POLY16_C(20983), SIMDE_POLY16_C(16028), SIMDE_POLY16_C(42835), SIMDE_POLY16_C(21060) } },
{ { SIMDE_POLY16_C(47255), SIMDE_POLY16_C(46865), SIMDE_POLY16_C(60625), SIMDE_POLY16_C(64413) },
{ SIMDE_POLY16_C(53844), SIMDE_POLY16_C(24480), SIMDE_POLY16_C(58718), SIMDE_POLY16_C(19663) },
{ SIMDE_POLY16_C(60625), SIMDE_POLY16_C(58718), SIMDE_POLY16_C(64413), SIMDE_POLY16_C(19663) } },
{ { SIMDE_POLY16_C(40490), SIMDE_POLY16_C( 8478), SIMDE_POLY16_C(29168), SIMDE_POLY16_C(60872) },
{ SIMDE_POLY16_C( 2346), SIMDE_POLY16_C(51143), SIMDE_POLY16_C( 3144), SIMDE_POLY16_C(57113) },
{ SIMDE_POLY16_C(29168), SIMDE_POLY16_C( 3144), SIMDE_POLY16_C(60872), SIMDE_POLY16_C(57113) } },
{ { SIMDE_POLY16_C(10948), SIMDE_POLY16_C(38295), SIMDE_POLY16_C(13334), SIMDE_POLY16_C(27536) },
{ SIMDE_POLY16_C(12550), SIMDE_POLY16_C(25802), SIMDE_POLY16_C(39190), SIMDE_POLY16_C(16560) },
{ SIMDE_POLY16_C(13334), SIMDE_POLY16_C(39190), SIMDE_POLY16_C(27536), SIMDE_POLY16_C(16560) } },
{ { SIMDE_POLY16_C(52792), SIMDE_POLY16_C(10337), SIMDE_POLY16_C(10559), SIMDE_POLY16_C(27157) },
{ SIMDE_POLY16_C(56626), SIMDE_POLY16_C(31281), SIMDE_POLY16_C(19177), SIMDE_POLY16_C(44378) },
{ SIMDE_POLY16_C(10559), SIMDE_POLY16_C(19177), SIMDE_POLY16_C(27157), SIMDE_POLY16_C(44378) } },
{ { SIMDE_POLY16_C(61813), SIMDE_POLY16_C(35650), SIMDE_POLY16_C(54053), SIMDE_POLY16_C(11254) },
{ SIMDE_POLY16_C(49156), SIMDE_POLY16_C( 6800), SIMDE_POLY16_C(16474), SIMDE_POLY16_C(37466) },
{ SIMDE_POLY16_C(54053), SIMDE_POLY16_C(16474), SIMDE_POLY16_C(11254), SIMDE_POLY16_C(37466) } },
{ { SIMDE_POLY16_C(47887), SIMDE_POLY16_C(20154), SIMDE_POLY16_C(53220), SIMDE_POLY16_C( 5816) },
{ SIMDE_POLY16_C(59820), SIMDE_POLY16_C(38289), SIMDE_POLY16_C(60212), SIMDE_POLY16_C(43330) },
{ SIMDE_POLY16_C(53220), SIMDE_POLY16_C(60212), SIMDE_POLY16_C( 5816), SIMDE_POLY16_C(43330) } },
{ { SIMDE_POLY16_C(34268), SIMDE_POLY16_C( 308), SIMDE_POLY16_C(11096), SIMDE_POLY16_C(23596) },
{ SIMDE_POLY16_C(48363), SIMDE_POLY16_C(17782), SIMDE_POLY16_C(53501), SIMDE_POLY16_C( 3287) },
{ SIMDE_POLY16_C(11096), SIMDE_POLY16_C(53501), SIMDE_POLY16_C(23596), SIMDE_POLY16_C( 3287) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_poly16x4_t a = simde_vld1_p16(test_vec[i].a);
simde_poly16x4_t b = simde_vld1_p16(test_vec[i].b);
simde_poly16x4_t r = simde_vzip2_p16(a, b);
simde_test_arm_neon_assert_equal_p16x4(r, simde_vld1_p16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_poly16x4_t a = simde_test_arm_neon_random_p16x4();
simde_poly16x4_t b = simde_test_arm_neon_random_p16x4();
simde_poly16x4_t r = simde_vzip2_p16(a, b);
simde_test_arm_neon_write_p16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_p16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_p16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2q_p8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_poly8_t a[16];
simde_poly8_t b[16];
simde_poly8_t r[16];
} test_vec[] = {
{ { SIMDE_POLY8_C(127), SIMDE_POLY8_C( 19), SIMDE_POLY8_C(254), SIMDE_POLY8_C( 88), SIMDE_POLY8_C( 56), SIMDE_POLY8_C( 15), SIMDE_POLY8_C( 99), SIMDE_POLY8_C( 77),
SIMDE_POLY8_C( 51), SIMDE_POLY8_C(112), SIMDE_POLY8_C( 89), SIMDE_POLY8_C(110), SIMDE_POLY8_C(170), SIMDE_POLY8_C( 43), SIMDE_POLY8_C( 97), SIMDE_POLY8_C( 38) },
{ SIMDE_POLY8_C(185), SIMDE_POLY8_C(103), SIMDE_POLY8_C( 79), SIMDE_POLY8_C(147), SIMDE_POLY8_C( 2), SIMDE_POLY8_C( 18), SIMDE_POLY8_C(242), SIMDE_POLY8_C(119),
SIMDE_POLY8_C( 51), SIMDE_POLY8_C( 19), SIMDE_POLY8_C( 24), SIMDE_POLY8_C( 45), SIMDE_POLY8_C(135), SIMDE_POLY8_C(119), SIMDE_POLY8_C( 0), SIMDE_POLY8_C( 6) },
{ SIMDE_POLY8_C( 51), SIMDE_POLY8_C( 51), SIMDE_POLY8_C(112), SIMDE_POLY8_C( 19), SIMDE_POLY8_C( 89), SIMDE_POLY8_C( 24), SIMDE_POLY8_C(110), SIMDE_POLY8_C( 45),
SIMDE_POLY8_C(170), SIMDE_POLY8_C(135), SIMDE_POLY8_C( 43), SIMDE_POLY8_C(119), SIMDE_POLY8_C( 97), SIMDE_POLY8_C( 0), SIMDE_POLY8_C( 38), SIMDE_POLY8_C( 6) } },
{ { SIMDE_POLY8_C(139), SIMDE_POLY8_C(254), SIMDE_POLY8_C( 95), SIMDE_POLY8_C(195), SIMDE_POLY8_C( 14), SIMDE_POLY8_C(194), SIMDE_POLY8_C( 16), SIMDE_POLY8_C( 65),
SIMDE_POLY8_C( 50), SIMDE_POLY8_C(105), SIMDE_POLY8_C(175), SIMDE_POLY8_C(220), SIMDE_POLY8_C(148), SIMDE_POLY8_C( 16), SIMDE_POLY8_C( 3), SIMDE_POLY8_C( 78) },
{ SIMDE_POLY8_C(120), SIMDE_POLY8_C( 82), SIMDE_POLY8_C(225), SIMDE_POLY8_C(122), SIMDE_POLY8_C(100), SIMDE_POLY8_C(211), SIMDE_POLY8_C(241), SIMDE_POLY8_C(151),
SIMDE_POLY8_C(230), SIMDE_POLY8_C( 10), SIMDE_POLY8_C(196), SIMDE_POLY8_C(109), SIMDE_POLY8_C(129), SIMDE_POLY8_C(196), SIMDE_POLY8_C(116), SIMDE_POLY8_C( 12) },
{ SIMDE_POLY8_C( 50), SIMDE_POLY8_C(230), SIMDE_POLY8_C(105), SIMDE_POLY8_C( 10), SIMDE_POLY8_C(175), SIMDE_POLY8_C(196), SIMDE_POLY8_C(220), SIMDE_POLY8_C(109),
SIMDE_POLY8_C(148), SIMDE_POLY8_C(129), SIMDE_POLY8_C( 16), SIMDE_POLY8_C(196), SIMDE_POLY8_C( 3), SIMDE_POLY8_C(116), SIMDE_POLY8_C( 78), SIMDE_POLY8_C( 12) } },
{ { SIMDE_POLY8_C(195), SIMDE_POLY8_C(211), SIMDE_POLY8_C(207), SIMDE_POLY8_C(209), SIMDE_POLY8_C(149), SIMDE_POLY8_C(223), SIMDE_POLY8_C( 18), SIMDE_POLY8_C(199),
SIMDE_POLY8_C( 72), SIMDE_POLY8_C(193), SIMDE_POLY8_C(163), SIMDE_POLY8_C(221), SIMDE_POLY8_C(210), SIMDE_POLY8_C(166), SIMDE_POLY8_C( 43), SIMDE_POLY8_C( 74) },
{ SIMDE_POLY8_C(248), SIMDE_POLY8_C( 12), SIMDE_POLY8_C(196), SIMDE_POLY8_C( 93), SIMDE_POLY8_C(223), SIMDE_POLY8_C(182), SIMDE_POLY8_C(244), SIMDE_POLY8_C(197),
SIMDE_POLY8_C(192), SIMDE_POLY8_C(185), SIMDE_POLY8_C( 51), SIMDE_POLY8_C( 65), SIMDE_POLY8_C(125), SIMDE_POLY8_C(167), SIMDE_POLY8_C( 78), SIMDE_POLY8_C( 64) },
{ SIMDE_POLY8_C( 72), SIMDE_POLY8_C(192), SIMDE_POLY8_C(193), SIMDE_POLY8_C(185), SIMDE_POLY8_C(163), SIMDE_POLY8_C( 51), SIMDE_POLY8_C(221), SIMDE_POLY8_C( 65),
SIMDE_POLY8_C(210), SIMDE_POLY8_C(125), SIMDE_POLY8_C(166), SIMDE_POLY8_C(167), SIMDE_POLY8_C( 43), SIMDE_POLY8_C( 78), SIMDE_POLY8_C( 74), SIMDE_POLY8_C( 64) } },
{ { SIMDE_POLY8_C(122), SIMDE_POLY8_C( 29), SIMDE_POLY8_C( 17), SIMDE_POLY8_C( 15), SIMDE_POLY8_C(253), SIMDE_POLY8_C( 35), SIMDE_POLY8_C(214), SIMDE_POLY8_C( 69),
SIMDE_POLY8_C(229), SIMDE_POLY8_C(121), SIMDE_POLY8_C( 34), SIMDE_POLY8_C(183), SIMDE_POLY8_C( 32), SIMDE_POLY8_C( 77), SIMDE_POLY8_C( 1), SIMDE_POLY8_C( 24) },
{ SIMDE_POLY8_C( 89), SIMDE_POLY8_C(197), SIMDE_POLY8_C(117), SIMDE_POLY8_C( 56), SIMDE_POLY8_C(123), SIMDE_POLY8_C(106), SIMDE_POLY8_C(254), SIMDE_POLY8_C( 59),
SIMDE_POLY8_C( 35), SIMDE_POLY8_C( 49), SIMDE_POLY8_C(125), SIMDE_POLY8_C(160), SIMDE_POLY8_C(216), SIMDE_POLY8_C(203), SIMDE_POLY8_C(225), SIMDE_POLY8_C( 82) },
{ SIMDE_POLY8_C(229), SIMDE_POLY8_C( 35), SIMDE_POLY8_C(121), SIMDE_POLY8_C( 49), SIMDE_POLY8_C( 34), SIMDE_POLY8_C(125), SIMDE_POLY8_C(183), SIMDE_POLY8_C(160),
SIMDE_POLY8_C( 32), SIMDE_POLY8_C(216), SIMDE_POLY8_C( 77), SIMDE_POLY8_C(203), SIMDE_POLY8_C( 1), SIMDE_POLY8_C(225), SIMDE_POLY8_C( 24), SIMDE_POLY8_C( 82) } },
{ { SIMDE_POLY8_C(232), SIMDE_POLY8_C(242), SIMDE_POLY8_C( 97), SIMDE_POLY8_C(229), SIMDE_POLY8_C( 22), SIMDE_POLY8_C( 55), SIMDE_POLY8_C( 43), SIMDE_POLY8_C(251),
SIMDE_POLY8_C(176), SIMDE_POLY8_C( 77), SIMDE_POLY8_C(178), SIMDE_POLY8_C(208), SIMDE_POLY8_C(155), SIMDE_POLY8_C(179), SIMDE_POLY8_C(233), SIMDE_POLY8_C(244) },
{ SIMDE_POLY8_C(120), SIMDE_POLY8_C( 94), SIMDE_POLY8_C( 45), SIMDE_POLY8_C(244), SIMDE_POLY8_C(200), SIMDE_POLY8_C( 43), SIMDE_POLY8_C( 47), SIMDE_POLY8_C(235),
SIMDE_POLY8_C( 92), SIMDE_POLY8_C(172), SIMDE_POLY8_C(140), SIMDE_POLY8_C( 52), SIMDE_POLY8_C(119), SIMDE_POLY8_C(109), SIMDE_POLY8_C(134), SIMDE_POLY8_C( 96) },
{ SIMDE_POLY8_C(176), SIMDE_POLY8_C( 92), SIMDE_POLY8_C( 77), SIMDE_POLY8_C(172), SIMDE_POLY8_C(178), SIMDE_POLY8_C(140), SIMDE_POLY8_C(208), SIMDE_POLY8_C( 52),
SIMDE_POLY8_C(155), SIMDE_POLY8_C(119), SIMDE_POLY8_C(179), SIMDE_POLY8_C(109), SIMDE_POLY8_C(233), SIMDE_POLY8_C(134), SIMDE_POLY8_C(244), SIMDE_POLY8_C( 96) } },
{ { SIMDE_POLY8_C( 95), SIMDE_POLY8_C(231), SIMDE_POLY8_C( 69), SIMDE_POLY8_C(117), SIMDE_POLY8_C( 30), SIMDE_POLY8_C(112), SIMDE_POLY8_C(112), SIMDE_POLY8_C(206),
SIMDE_POLY8_C(190), SIMDE_POLY8_C( 34), SIMDE_POLY8_C(159), SIMDE_POLY8_C( 89), SIMDE_POLY8_C(213), SIMDE_POLY8_C(136), SIMDE_POLY8_C( 77), SIMDE_POLY8_C( 78) },
{ SIMDE_POLY8_C(230), SIMDE_POLY8_C(122), SIMDE_POLY8_C( 66), SIMDE_POLY8_C(175), SIMDE_POLY8_C(165), SIMDE_POLY8_C(113), SIMDE_POLY8_C(154), SIMDE_POLY8_C( 1),
SIMDE_POLY8_C( 30), SIMDE_POLY8_C( 38), SIMDE_POLY8_C( 53), SIMDE_POLY8_C(149), SIMDE_POLY8_C(147), SIMDE_POLY8_C(187), SIMDE_POLY8_C(245), SIMDE_POLY8_C(243) },
{ SIMDE_POLY8_C(190), SIMDE_POLY8_C( 30), SIMDE_POLY8_C( 34), SIMDE_POLY8_C( 38), SIMDE_POLY8_C(159), SIMDE_POLY8_C( 53), SIMDE_POLY8_C( 89), SIMDE_POLY8_C(149),
SIMDE_POLY8_C(213), SIMDE_POLY8_C(147), SIMDE_POLY8_C(136), SIMDE_POLY8_C(187), SIMDE_POLY8_C( 77), SIMDE_POLY8_C(245), SIMDE_POLY8_C( 78), SIMDE_POLY8_C(243) } },
{ { SIMDE_POLY8_C(162), SIMDE_POLY8_C( 59), SIMDE_POLY8_C(104), SIMDE_POLY8_C(192), SIMDE_POLY8_C(171), SIMDE_POLY8_C(217), SIMDE_POLY8_C(143), SIMDE_POLY8_C(105),
SIMDE_POLY8_C(251), SIMDE_POLY8_C( 46), SIMDE_POLY8_C(194), SIMDE_POLY8_C(209), SIMDE_POLY8_C(182), SIMDE_POLY8_C( 16), SIMDE_POLY8_C( 31), SIMDE_POLY8_C(156) },
{ SIMDE_POLY8_C(138), SIMDE_POLY8_C( 97), SIMDE_POLY8_C( 75), SIMDE_POLY8_C( 48), SIMDE_POLY8_C(210), SIMDE_POLY8_C(230), SIMDE_POLY8_C( 49), SIMDE_POLY8_C(240),
SIMDE_POLY8_C( 12), SIMDE_POLY8_C(103), SIMDE_POLY8_C(134), SIMDE_POLY8_C(160), SIMDE_POLY8_C( 34), SIMDE_POLY8_C(123), SIMDE_POLY8_C(147), SIMDE_POLY8_C(197) },
{ SIMDE_POLY8_C(251), SIMDE_POLY8_C( 12), SIMDE_POLY8_C( 46), SIMDE_POLY8_C(103), SIMDE_POLY8_C(194), SIMDE_POLY8_C(134), SIMDE_POLY8_C(209), SIMDE_POLY8_C(160),
SIMDE_POLY8_C(182), SIMDE_POLY8_C( 34), SIMDE_POLY8_C( 16), SIMDE_POLY8_C(123), SIMDE_POLY8_C( 31), SIMDE_POLY8_C(147), SIMDE_POLY8_C(156), SIMDE_POLY8_C(197) } },
{ { SIMDE_POLY8_C(182), SIMDE_POLY8_C(251), SIMDE_POLY8_C(133), SIMDE_POLY8_C( 98), SIMDE_POLY8_C(212), SIMDE_POLY8_C( 20), SIMDE_POLY8_C(203), SIMDE_POLY8_C(208),
SIMDE_POLY8_C( 66), SIMDE_POLY8_C(142), SIMDE_POLY8_C(161), SIMDE_POLY8_C(248), SIMDE_POLY8_C(158), SIMDE_POLY8_C(192), SIMDE_POLY8_C(149), SIMDE_POLY8_C( 40) },
{ SIMDE_POLY8_C( 33), SIMDE_POLY8_C(224), SIMDE_POLY8_C( 88), SIMDE_POLY8_C(243), SIMDE_POLY8_C(198), SIMDE_POLY8_C(138), SIMDE_POLY8_C(228), SIMDE_POLY8_C(211),
SIMDE_POLY8_C(241), SIMDE_POLY8_C(106), SIMDE_POLY8_C(115), SIMDE_POLY8_C( 19), SIMDE_POLY8_C(229), SIMDE_POLY8_C( 6), SIMDE_POLY8_C(216), SIMDE_POLY8_C(156) },
{ SIMDE_POLY8_C( 66), SIMDE_POLY8_C(241), SIMDE_POLY8_C(142), SIMDE_POLY8_C(106), SIMDE_POLY8_C(161), SIMDE_POLY8_C(115), SIMDE_POLY8_C(248), SIMDE_POLY8_C( 19),
SIMDE_POLY8_C(158), SIMDE_POLY8_C(229), SIMDE_POLY8_C(192), SIMDE_POLY8_C( 6), SIMDE_POLY8_C(149), SIMDE_POLY8_C(216), SIMDE_POLY8_C( 40), SIMDE_POLY8_C(156) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_poly8x16_t a = simde_vld1q_p8(test_vec[i].a);
simde_poly8x16_t b = simde_vld1q_p8(test_vec[i].b);
simde_poly8x16_t r = simde_vzip2q_p8(a, b);
simde_test_arm_neon_assert_equal_p8x16(r, simde_vld1q_p8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_poly8x16_t a = simde_test_arm_neon_random_p8x16();
simde_poly8x16_t b = simde_test_arm_neon_random_p8x16();
simde_poly8x16_t r = simde_vzip2q_p8(a, b);
simde_test_arm_neon_write_p8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_p8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_p8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2q_p16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_poly16_t a[8];
simde_poly16_t b[8];
simde_poly16_t r[8];
} test_vec[] = {
{ { SIMDE_POLY16_C(56843), SIMDE_POLY16_C(48859), SIMDE_POLY16_C(62267), SIMDE_POLY16_C(16307), SIMDE_POLY16_C(14313), SIMDE_POLY16_C(51328), SIMDE_POLY16_C(63506), SIMDE_POLY16_C(34614) },
{ SIMDE_POLY16_C(29688), SIMDE_POLY16_C(53182), SIMDE_POLY16_C(19541), SIMDE_POLY16_C(62702), SIMDE_POLY16_C(38625), SIMDE_POLY16_C( 4081), SIMDE_POLY16_C(60683), SIMDE_POLY16_C( 5668) },
{ SIMDE_POLY16_C(14313), SIMDE_POLY16_C(38625), SIMDE_POLY16_C(51328), SIMDE_POLY16_C( 4081), SIMDE_POLY16_C(63506), SIMDE_POLY16_C(60683), SIMDE_POLY16_C(34614), SIMDE_POLY16_C( 5668) } },
{ { SIMDE_POLY16_C(65484), SIMDE_POLY16_C( 2005), SIMDE_POLY16_C(35058), SIMDE_POLY16_C(56390), SIMDE_POLY16_C(51135), SIMDE_POLY16_C(53668), SIMDE_POLY16_C(55999), SIMDE_POLY16_C(46936) },
{ SIMDE_POLY16_C( 5965), SIMDE_POLY16_C(41607), SIMDE_POLY16_C(30051), SIMDE_POLY16_C(17814), SIMDE_POLY16_C(34571), SIMDE_POLY16_C( 5716), SIMDE_POLY16_C(31093), SIMDE_POLY16_C(16685) },
{ SIMDE_POLY16_C(51135), SIMDE_POLY16_C(34571), SIMDE_POLY16_C(53668), SIMDE_POLY16_C( 5716), SIMDE_POLY16_C(55999), SIMDE_POLY16_C(31093), SIMDE_POLY16_C(46936), SIMDE_POLY16_C(16685) } },
{ { SIMDE_POLY16_C( 632), SIMDE_POLY16_C(27464), SIMDE_POLY16_C(36490), SIMDE_POLY16_C(19015), SIMDE_POLY16_C(60245), SIMDE_POLY16_C( 5403), SIMDE_POLY16_C(29893), SIMDE_POLY16_C( 5068) },
{ SIMDE_POLY16_C(21387), SIMDE_POLY16_C(61109), SIMDE_POLY16_C(19657), SIMDE_POLY16_C(54323), SIMDE_POLY16_C(35027), SIMDE_POLY16_C(18667), SIMDE_POLY16_C( 6145), SIMDE_POLY16_C(31113) },
{ SIMDE_POLY16_C(60245), SIMDE_POLY16_C(35027), SIMDE_POLY16_C( 5403), SIMDE_POLY16_C(18667), SIMDE_POLY16_C(29893), SIMDE_POLY16_C( 6145), SIMDE_POLY16_C( 5068), SIMDE_POLY16_C(31113) } },
{ { SIMDE_POLY16_C(53530), SIMDE_POLY16_C(42212), SIMDE_POLY16_C(11104), SIMDE_POLY16_C(46574), SIMDE_POLY16_C( 2582), SIMDE_POLY16_C(56522), SIMDE_POLY16_C(38782), SIMDE_POLY16_C( 2543) },
{ SIMDE_POLY16_C(42218), SIMDE_POLY16_C(46071), SIMDE_POLY16_C(11248), SIMDE_POLY16_C(50312), SIMDE_POLY16_C(29619), SIMDE_POLY16_C(46092), SIMDE_POLY16_C(38539), SIMDE_POLY16_C(42285) },
{ SIMDE_POLY16_C( 2582), SIMDE_POLY16_C(29619), SIMDE_POLY16_C(56522), SIMDE_POLY16_C(46092), SIMDE_POLY16_C(38782), SIMDE_POLY16_C(38539), SIMDE_POLY16_C( 2543), SIMDE_POLY16_C(42285) } },
{ { SIMDE_POLY16_C( 4711), SIMDE_POLY16_C(51017), SIMDE_POLY16_C(14397), SIMDE_POLY16_C(21629), SIMDE_POLY16_C(18242), SIMDE_POLY16_C(49200), SIMDE_POLY16_C( 8158), SIMDE_POLY16_C(51657) },
{ SIMDE_POLY16_C(49347), SIMDE_POLY16_C(46204), SIMDE_POLY16_C( 1259), SIMDE_POLY16_C(40568), SIMDE_POLY16_C(33911), SIMDE_POLY16_C( 594), SIMDE_POLY16_C(32794), SIMDE_POLY16_C(33447) },
{ SIMDE_POLY16_C(18242), SIMDE_POLY16_C(33911), SIMDE_POLY16_C(49200), SIMDE_POLY16_C( 594), SIMDE_POLY16_C( 8158), SIMDE_POLY16_C(32794), SIMDE_POLY16_C(51657), SIMDE_POLY16_C(33447) } },
{ { SIMDE_POLY16_C(61842), SIMDE_POLY16_C(53065), SIMDE_POLY16_C(50729), SIMDE_POLY16_C(27427), SIMDE_POLY16_C(21262), SIMDE_POLY16_C(60459), SIMDE_POLY16_C(62578), SIMDE_POLY16_C(14005) },
{ SIMDE_POLY16_C(12980), SIMDE_POLY16_C(41194), SIMDE_POLY16_C(25142), SIMDE_POLY16_C(44606), SIMDE_POLY16_C(37350), SIMDE_POLY16_C( 432), SIMDE_POLY16_C(22545), SIMDE_POLY16_C(41859) },
{ SIMDE_POLY16_C(21262), SIMDE_POLY16_C(37350), SIMDE_POLY16_C(60459), SIMDE_POLY16_C( 432), SIMDE_POLY16_C(62578), SIMDE_POLY16_C(22545), SIMDE_POLY16_C(14005), SIMDE_POLY16_C(41859) } },
{ { SIMDE_POLY16_C(52297), SIMDE_POLY16_C(29298), SIMDE_POLY16_C(38547), SIMDE_POLY16_C(41437), SIMDE_POLY16_C( 2281), SIMDE_POLY16_C(23693), SIMDE_POLY16_C(17404), SIMDE_POLY16_C(45202) },
{ SIMDE_POLY16_C(31861), SIMDE_POLY16_C(43856), SIMDE_POLY16_C(36830), SIMDE_POLY16_C(50265), SIMDE_POLY16_C( 2592), SIMDE_POLY16_C(12741), SIMDE_POLY16_C(18530), SIMDE_POLY16_C(43988) },
{ SIMDE_POLY16_C( 2281), SIMDE_POLY16_C( 2592), SIMDE_POLY16_C(23693), SIMDE_POLY16_C(12741), SIMDE_POLY16_C(17404), SIMDE_POLY16_C(18530), SIMDE_POLY16_C(45202), SIMDE_POLY16_C(43988) } },
{ { SIMDE_POLY16_C(17941), SIMDE_POLY16_C(43037), SIMDE_POLY16_C(64220), SIMDE_POLY16_C(50761), SIMDE_POLY16_C(54786), SIMDE_POLY16_C(65058), SIMDE_POLY16_C(46105), SIMDE_POLY16_C(36526) },
{ SIMDE_POLY16_C(65328), SIMDE_POLY16_C( 3642), SIMDE_POLY16_C(37774), SIMDE_POLY16_C(44754), SIMDE_POLY16_C(39069), SIMDE_POLY16_C(65503), SIMDE_POLY16_C(46048), SIMDE_POLY16_C(62890) },
{ SIMDE_POLY16_C(54786), SIMDE_POLY16_C(39069), SIMDE_POLY16_C(65058), SIMDE_POLY16_C(65503), SIMDE_POLY16_C(46105), SIMDE_POLY16_C(46048), SIMDE_POLY16_C(36526), SIMDE_POLY16_C(62890) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_poly16x8_t a = simde_vld1q_p16(test_vec[i].a);
simde_poly16x8_t b = simde_vld1q_p16(test_vec[i].b);
simde_poly16x8_t r = simde_vzip2q_p16(a, b);
simde_test_arm_neon_assert_equal_p16x8(r, simde_vld1q_p16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_poly16x8_t a = simde_test_arm_neon_random_p16x8();
simde_poly16x8_t b = simde_test_arm_neon_random_p16x8();
simde_poly16x8_t r = simde_vzip2q_p16(a, b);
simde_test_arm_neon_write_p16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_p16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_p16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip2q_p64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_poly64_t a[2];
simde_poly64_t b[2];
simde_poly64_t r[2];
} test_vec[] = {
{ { SIMDE_POLY64_C( 4280958701235489246), SIMDE_POLY64_C(11535681782777318835) },
{ SIMDE_POLY64_C( 6878166422813626130), SIMDE_POLY64_C(12381793737624657829) },
{ SIMDE_POLY64_C(11535681782777318835), SIMDE_POLY64_C(12381793737624657829) } },
{ { SIMDE_POLY64_C(14969386940695648064), SIMDE_POLY64_C( 3104490981576679679) },
{ SIMDE_POLY64_C(13112230382089857197), SIMDE_POLY64_C( 8545878496494894880) },
{ SIMDE_POLY64_C( 3104490981576679679), SIMDE_POLY64_C( 8545878496494894880) } },
{ { SIMDE_POLY64_C( 1374078459952243238), SIMDE_POLY64_C( 7285027289849944533) },
{ SIMDE_POLY64_C(14288505062639445382), SIMDE_POLY64_C(13466410036153779510) },
{ SIMDE_POLY64_C( 7285027289849944533), SIMDE_POLY64_C(13466410036153779510) } },
{ { SIMDE_POLY64_C( 7247714085351774830), SIMDE_POLY64_C( 4721016760819653991) },
{ SIMDE_POLY64_C(12717357733718164241), SIMDE_POLY64_C(17002494307029758118) },
{ SIMDE_POLY64_C( 4721016760819653991), SIMDE_POLY64_C(17002494307029758118) } },
{ { SIMDE_POLY64_C( 7263466160932188377), SIMDE_POLY64_C(11249156841034424097) },
{ SIMDE_POLY64_C(13453888246246536075), SIMDE_POLY64_C(12135486648795582720) },
{ SIMDE_POLY64_C(11249156841034424097), SIMDE_POLY64_C(12135486648795582720) } },
{ { SIMDE_POLY64_C(18103026683644860376), SIMDE_POLY64_C( 5847067349770288893) },
{ SIMDE_POLY64_C( 5239669095272970216), SIMDE_POLY64_C( 7805915270211808220) },
{ SIMDE_POLY64_C( 5847067349770288893), SIMDE_POLY64_C( 7805915270211808220) } },
{ { SIMDE_POLY64_C( 4673466768805750021), SIMDE_POLY64_C(10327578197059285819) },
{ SIMDE_POLY64_C(10372990280714201189), SIMDE_POLY64_C(17217137029729139438) },
{ SIMDE_POLY64_C(10327578197059285819), SIMDE_POLY64_C(17217137029729139438) } },
{ { SIMDE_POLY64_C(16823101498774663667), SIMDE_POLY64_C(10561851715167600732) },
{ SIMDE_POLY64_C( 5847417664724475876), SIMDE_POLY64_C(16412457277402079725) },
{ SIMDE_POLY64_C(10561851715167600732), SIMDE_POLY64_C(16412457277402079725) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_poly64x2_t a = simde_vld1q_p64(test_vec[i].a);
simde_poly64x2_t b = simde_vld1q_p64(test_vec[i].b);
simde_poly64x2_t r = simde_vzip2q_p64(a, b);
simde_test_arm_neon_assert_equal_p64x2(r, simde_vld1q_p64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_poly64x2_t a = simde_test_arm_neon_random_p64x2();
simde_poly64x2_t b = simde_test_arm_neon_random_p64x2();
simde_poly64x2_t r = simde_vzip2q_p64(a, b);
simde_test_arm_neon_write_p64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_p64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_p64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
SIMDE_TEST_FUNC_LIST_BEGIN
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2q_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2q_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2q_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2q_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2q_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2q_s64)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2q_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2q_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2q_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2q_u64)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2_p8)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2_p16)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2q_p8)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2q_p16)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip2q_p64)
SIMDE_TEST_FUNC_LIST_END
#include <test/arm/neon/test-neon-footer.h>