#define SIMDE_TEST_ARM_NEON_INSN zip
#include <test/arm/neon/test-neon.h>
#include <simde/arm/neon/zip.h>
#if !defined(SIMDE_BUG_INTEL_857088)
static int
test_simde_vzip_f16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_float16_t a[4];
simde_float16_t b[4];
simde_float16_t r[2][4];
} test_vec[] = {
{ { SIMDE_FLOAT16_VALUE(-3.80), SIMDE_FLOAT16_VALUE(-6.90), SIMDE_FLOAT16_VALUE(-3.70), SIMDE_FLOAT16_VALUE(-1.00) },
{ SIMDE_FLOAT16_VALUE(-5.20), SIMDE_FLOAT16_VALUE(0.50), SIMDE_FLOAT16_VALUE(-4.20), SIMDE_FLOAT16_VALUE(6.20) },
{ { SIMDE_FLOAT16_VALUE(-3.80), SIMDE_FLOAT16_VALUE(-5.20), SIMDE_FLOAT16_VALUE(-6.90), SIMDE_FLOAT16_VALUE(0.50) },
{ SIMDE_FLOAT16_VALUE(-3.70), SIMDE_FLOAT16_VALUE(-4.20), SIMDE_FLOAT16_VALUE(-1.00), SIMDE_FLOAT16_VALUE(6.20) } } },
{ { SIMDE_FLOAT16_VALUE(2.50), SIMDE_FLOAT16_VALUE(6.90), SIMDE_FLOAT16_VALUE(-7.50), SIMDE_FLOAT16_VALUE(-1.90) },
{ SIMDE_FLOAT16_VALUE(9.00), SIMDE_FLOAT16_VALUE(3.50), SIMDE_FLOAT16_VALUE(-9.30), SIMDE_FLOAT16_VALUE(0.00) },
{ { SIMDE_FLOAT16_VALUE(2.50), SIMDE_FLOAT16_VALUE(9.00), SIMDE_FLOAT16_VALUE(6.90), SIMDE_FLOAT16_VALUE(3.50) },
{ SIMDE_FLOAT16_VALUE(-7.50), SIMDE_FLOAT16_VALUE(-9.30), SIMDE_FLOAT16_VALUE(-1.90), SIMDE_FLOAT16_VALUE(0.00) } } },
{ { SIMDE_FLOAT16_VALUE(-1.90), SIMDE_FLOAT16_VALUE(2.20), SIMDE_FLOAT16_VALUE(6.20), SIMDE_FLOAT16_VALUE(-4.20) },
{ SIMDE_FLOAT16_VALUE(-2.90), SIMDE_FLOAT16_VALUE(2.10), SIMDE_FLOAT16_VALUE(8.60), SIMDE_FLOAT16_VALUE(3.10) },
{ { SIMDE_FLOAT16_VALUE(-1.90), SIMDE_FLOAT16_VALUE(-2.90), SIMDE_FLOAT16_VALUE(2.20), SIMDE_FLOAT16_VALUE(2.10) },
{ SIMDE_FLOAT16_VALUE(6.20), SIMDE_FLOAT16_VALUE(8.60), SIMDE_FLOAT16_VALUE(-4.20), SIMDE_FLOAT16_VALUE(3.10) } } },
{ { SIMDE_FLOAT16_VALUE(8.30), SIMDE_FLOAT16_VALUE(0.80), SIMDE_FLOAT16_VALUE(2.00), SIMDE_FLOAT16_VALUE(5.00) },
{ SIMDE_FLOAT16_VALUE(8.00), SIMDE_FLOAT16_VALUE(-9.00), SIMDE_FLOAT16_VALUE(-9.80), SIMDE_FLOAT16_VALUE(-1.70) },
{ { SIMDE_FLOAT16_VALUE(8.30), SIMDE_FLOAT16_VALUE(8.00), SIMDE_FLOAT16_VALUE(0.80), SIMDE_FLOAT16_VALUE(-9.00) },
{ SIMDE_FLOAT16_VALUE(2.00), SIMDE_FLOAT16_VALUE(-9.80), SIMDE_FLOAT16_VALUE(5.00), SIMDE_FLOAT16_VALUE(-1.70) } } },
{ { SIMDE_FLOAT16_VALUE(9.10), SIMDE_FLOAT16_VALUE(1.80), SIMDE_FLOAT16_VALUE(-2.40), SIMDE_FLOAT16_VALUE(-4.10) },
{ SIMDE_FLOAT16_VALUE(0.10), SIMDE_FLOAT16_VALUE(-9.10), SIMDE_FLOAT16_VALUE(7.20), SIMDE_FLOAT16_VALUE(3.90) },
{ { SIMDE_FLOAT16_VALUE(9.10), SIMDE_FLOAT16_VALUE(0.10), SIMDE_FLOAT16_VALUE(1.80), SIMDE_FLOAT16_VALUE(-9.10) },
{ SIMDE_FLOAT16_VALUE(-2.40), SIMDE_FLOAT16_VALUE(7.20), SIMDE_FLOAT16_VALUE(-4.10), SIMDE_FLOAT16_VALUE(3.90) } } },
{ { SIMDE_FLOAT16_VALUE(-6.40), SIMDE_FLOAT16_VALUE(-2.50), SIMDE_FLOAT16_VALUE(-1.50), SIMDE_FLOAT16_VALUE(6.40) },
{ SIMDE_FLOAT16_VALUE(-6.10), SIMDE_FLOAT16_VALUE(-8.30), SIMDE_FLOAT16_VALUE(1.30), SIMDE_FLOAT16_VALUE(3.90) },
{ { SIMDE_FLOAT16_VALUE(-6.40), SIMDE_FLOAT16_VALUE(-6.10), SIMDE_FLOAT16_VALUE(-2.50), SIMDE_FLOAT16_VALUE(-8.30) },
{ SIMDE_FLOAT16_VALUE(-1.50), SIMDE_FLOAT16_VALUE(1.30), SIMDE_FLOAT16_VALUE(6.40), SIMDE_FLOAT16_VALUE(3.90) } } },
{ { SIMDE_FLOAT16_VALUE(6.40), SIMDE_FLOAT16_VALUE(-6.40), SIMDE_FLOAT16_VALUE(5.80), SIMDE_FLOAT16_VALUE(-0.10) },
{ SIMDE_FLOAT16_VALUE(5.50), SIMDE_FLOAT16_VALUE(2.10), SIMDE_FLOAT16_VALUE(3.10), SIMDE_FLOAT16_VALUE(-8.70) },
{ { SIMDE_FLOAT16_VALUE(6.40), SIMDE_FLOAT16_VALUE(5.50), SIMDE_FLOAT16_VALUE(-6.40), SIMDE_FLOAT16_VALUE(2.10) },
{ SIMDE_FLOAT16_VALUE(5.80), SIMDE_FLOAT16_VALUE(3.10), SIMDE_FLOAT16_VALUE(-0.10), SIMDE_FLOAT16_VALUE(-8.70) } } },
{ { SIMDE_FLOAT16_VALUE(-0.80), SIMDE_FLOAT16_VALUE(-1.00), SIMDE_FLOAT16_VALUE(-5.50), SIMDE_FLOAT16_VALUE(3.50) },
{ SIMDE_FLOAT16_VALUE(5.30), SIMDE_FLOAT16_VALUE(4.40), SIMDE_FLOAT16_VALUE(1.40), SIMDE_FLOAT16_VALUE(3.90) },
{ { SIMDE_FLOAT16_VALUE(-0.80), SIMDE_FLOAT16_VALUE(5.30), SIMDE_FLOAT16_VALUE(-1.00), SIMDE_FLOAT16_VALUE(4.40) },
{ SIMDE_FLOAT16_VALUE(-5.50), SIMDE_FLOAT16_VALUE(1.40), SIMDE_FLOAT16_VALUE(3.50), SIMDE_FLOAT16_VALUE(3.90) } } },
{ { SIMDE_FLOAT16_VALUE(8.90), SIMDE_FLOAT16_VALUE(3.40), SIMDE_FLOAT16_VALUE(-7.70), SIMDE_FLOAT16_VALUE(1.30) },
{ SIMDE_FLOAT16_VALUE(7.20), SIMDE_FLOAT16_VALUE(1.40), SIMDE_FLOAT16_VALUE(4.70), SIMDE_FLOAT16_VALUE(9.30) },
{ { SIMDE_FLOAT16_VALUE(8.90), SIMDE_FLOAT16_VALUE(7.20), SIMDE_FLOAT16_VALUE(3.40), SIMDE_FLOAT16_VALUE(1.40) },
{ SIMDE_FLOAT16_VALUE(-7.70), SIMDE_FLOAT16_VALUE(4.70), SIMDE_FLOAT16_VALUE(1.30), SIMDE_FLOAT16_VALUE(9.30) } } },
{ { SIMDE_FLOAT16_VALUE(2.40), SIMDE_FLOAT16_VALUE(-3.40), SIMDE_FLOAT16_VALUE(-4.30), SIMDE_FLOAT16_VALUE(2.20) },
{ SIMDE_FLOAT16_VALUE(2.80), SIMDE_FLOAT16_VALUE(9.00), SIMDE_FLOAT16_VALUE(7.40), SIMDE_FLOAT16_VALUE(-2.80) },
{ { SIMDE_FLOAT16_VALUE(2.40), SIMDE_FLOAT16_VALUE(2.80), SIMDE_FLOAT16_VALUE(-3.40), SIMDE_FLOAT16_VALUE(9.00) },
{ SIMDE_FLOAT16_VALUE(-4.30), SIMDE_FLOAT16_VALUE(7.40), SIMDE_FLOAT16_VALUE(2.20), SIMDE_FLOAT16_VALUE(-2.80) } } },
};
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_float16x4x2_t r = simde_vzip_f16(a, b);
simde_test_arm_neon_assert_equal_f16x4(r.val[0], simde_vld1_f16(test_vec[i].r[0]), 1);
simde_test_arm_neon_assert_equal_f16x4(r.val[1], simde_vld1_f16(test_vec[i].r[1]), 1);
}
return 0;
#else
for (int i = 0 ; i < 8 ; i++) {
simde_float16x4_t a = simde_test_arm_neon_random_f16x4(-1000.0f, 1000.0f);
simde_float16x4_t b = simde_test_arm_neon_random_f16x4(-1000.0f, 1000.0f);
simde_float16x4x2_t c = simde_vzip_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_f16x4x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_float32 a[2];
simde_float32 b[2];
simde_float32 r[2][2];
} test_vec[] = {
{ { SIMDE_FLOAT32_C( -358.82), SIMDE_FLOAT32_C( 78.84) },
{ SIMDE_FLOAT32_C( 983.85), SIMDE_FLOAT32_C( -720.74) },
{
{ SIMDE_FLOAT32_C( -358.82), SIMDE_FLOAT32_C( 983.85) },
{ SIMDE_FLOAT32_C( 78.84), SIMDE_FLOAT32_C( -720.74) },
},
},
{ { SIMDE_FLOAT32_C( 775.76), SIMDE_FLOAT32_C( 749.10) },
{ SIMDE_FLOAT32_C( -498.97), SIMDE_FLOAT32_C( 508.88) },
{
{ SIMDE_FLOAT32_C( 775.76), SIMDE_FLOAT32_C( -498.97) },
{ SIMDE_FLOAT32_C( 749.10), SIMDE_FLOAT32_C( 508.88) },
},
},
{ { SIMDE_FLOAT32_C( -772.99), SIMDE_FLOAT32_C( -138.42) },
{ SIMDE_FLOAT32_C( 768.93), SIMDE_FLOAT32_C( -389.94) },
{
{ SIMDE_FLOAT32_C( -772.99), SIMDE_FLOAT32_C( 768.93) },
{ SIMDE_FLOAT32_C( -138.42), SIMDE_FLOAT32_C( -389.94) },
},
},
{ { SIMDE_FLOAT32_C( 998.17), SIMDE_FLOAT32_C( -286.00) },
{ SIMDE_FLOAT32_C( 648.24), SIMDE_FLOAT32_C( -347.96) },
{
{ SIMDE_FLOAT32_C( 998.17), SIMDE_FLOAT32_C( 648.24) },
{ SIMDE_FLOAT32_C( -286.00), SIMDE_FLOAT32_C( -347.96) },
},
},
{ { SIMDE_FLOAT32_C( -694.32), SIMDE_FLOAT32_C( -443.35) },
{ SIMDE_FLOAT32_C( -763.65), SIMDE_FLOAT32_C( 250.75) },
{
{ SIMDE_FLOAT32_C( -694.32), SIMDE_FLOAT32_C( -763.65) },
{ SIMDE_FLOAT32_C( -443.35), SIMDE_FLOAT32_C( 250.75) },
},
},
{ { SIMDE_FLOAT32_C( -26.88), SIMDE_FLOAT32_C( -994.99) },
{ SIMDE_FLOAT32_C( 145.10), SIMDE_FLOAT32_C( -814.15) },
{
{ SIMDE_FLOAT32_C( -26.88), SIMDE_FLOAT32_C( 145.10) },
{ SIMDE_FLOAT32_C( -994.99), SIMDE_FLOAT32_C( -814.15) },
},
},
{ { SIMDE_FLOAT32_C( 982.86), SIMDE_FLOAT32_C( -888.57) },
{ SIMDE_FLOAT32_C( -651.00), SIMDE_FLOAT32_C( 623.08) },
{
{ SIMDE_FLOAT32_C( 982.86), SIMDE_FLOAT32_C( -651.00) },
{ SIMDE_FLOAT32_C( -888.57), SIMDE_FLOAT32_C( 623.08) },
},
},
{ { SIMDE_FLOAT32_C( -237.29), SIMDE_FLOAT32_C( 58.52) },
{ SIMDE_FLOAT32_C( -15.19), SIMDE_FLOAT32_C( 403.89) },
{
{ SIMDE_FLOAT32_C( -237.29), SIMDE_FLOAT32_C( -15.19) },
{ SIMDE_FLOAT32_C( 58.52), SIMDE_FLOAT32_C( 403.89) },
},
},
};
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_float32x2x2_t r = simde_vzip_f32(a, b);
simde_test_arm_neon_assert_equal_f32x2(r.val[0], simde_vld1_f32(test_vec[i].r[0]), 1);
simde_test_arm_neon_assert_equal_f32x2(r.val[1], simde_vld1_f32(test_vec[i].r[1]), 1);
}
return 0;
#else
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_float32x2x2_t c = simde_vzip_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_f32x2x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip_s8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int8_t a[8];
int8_t b[8];
int8_t r[2][8];
} test_vec[] = {
{ { -INT8_C( 26), -INT8_C( 14), -INT8_C( 73), -INT8_C( 66), INT8_C( 84), -INT8_C( 37), -INT8_C( 44), INT8_C( 48) },
{ -INT8_C( 17), INT8_C( 122), -INT8_C( 84), -INT8_C( 31), -INT8_C( 118), INT8_C( 66), -INT8_C( 5), -INT8_C( 66) },
{
{ -INT8_C( 26), -INT8_C( 17), -INT8_C( 14), INT8_C( 122), -INT8_C( 73), -INT8_C( 84), -INT8_C( 66), -INT8_C( 31) },
{ INT8_C( 84), -INT8_C( 118), -INT8_C( 37), INT8_C( 66), -INT8_C( 44), -INT8_C( 5), INT8_C( 48), -INT8_C( 66) },
},
},
{ { -INT8_C( 65), -INT8_C( 32), INT8_C( 65), -INT8_C( 83), INT8_C( 64), INT8_C( 26), -INT8_C( 27), -INT8_C( 82) },
{ INT8_C( 10), -INT8_C( 11), -INT8_C( 8), INT8_C( 126), INT8_MAX, INT8_C( 56), -INT8_C( 15), INT8_C( 101) },
{
{ -INT8_C( 65), INT8_C( 10), -INT8_C( 32), -INT8_C( 11), INT8_C( 65), -INT8_C( 8), -INT8_C( 83), INT8_C( 126) },
{ INT8_C( 64), INT8_MAX, INT8_C( 26), INT8_C( 56), -INT8_C( 27), -INT8_C( 15), -INT8_C( 82), INT8_C( 101) },
},
},
{ { INT8_C( 43), -INT8_C( 87), INT8_C( 35), INT8_MAX, -INT8_C( 124), -INT8_C( 9), -INT8_C( 80), INT8_C( 115) },
{ INT8_C( 114), INT8_C( 92), INT8_C( 85), -INT8_C( 4), -INT8_C( 98), INT8_C( 80), -INT8_C( 70), INT8_C( 94) },
{
{ INT8_C( 43), INT8_C( 114), -INT8_C( 87), INT8_C( 92), INT8_C( 35), INT8_C( 85), INT8_MAX, -INT8_C( 4) },
{ -INT8_C( 124), -INT8_C( 98), -INT8_C( 9), INT8_C( 80), -INT8_C( 80), -INT8_C( 70), INT8_C( 115), INT8_C( 94) },
},
},
{ { INT8_C( 48), -INT8_C( 5), INT8_C( 11), INT8_C( 113), INT8_C( 21), -INT8_C( 16), INT8_C( 31), INT8_C( 32) },
{ -INT8_C( 27), INT8_C( 24), -INT8_C( 98), INT8_C( 100), INT8_C( 80), -INT8_C( 112), -INT8_C( 55), INT8_C( 123) },
{
{ INT8_C( 48), -INT8_C( 27), -INT8_C( 5), INT8_C( 24), INT8_C( 11), -INT8_C( 98), INT8_C( 113), INT8_C( 100) },
{ INT8_C( 21), INT8_C( 80), -INT8_C( 16), -INT8_C( 112), INT8_C( 31), -INT8_C( 55), INT8_C( 32), INT8_C( 123) },
},
},
{ { INT8_C( 57), -INT8_C( 19), -INT8_C( 5), -INT8_C( 67), -INT8_C( 28), -INT8_C( 85), INT8_C( 49), INT8_C( 86) },
{ INT8_C( 7), -INT8_C( 122), INT8_C( 82), -INT8_C( 90), -INT8_C( 42), INT8_C( 13), INT8_C( 4), INT8_C( 6) },
{
{ INT8_C( 57), INT8_C( 7), -INT8_C( 19), -INT8_C( 122), -INT8_C( 5), INT8_C( 82), -INT8_C( 67), -INT8_C( 90) },
{ -INT8_C( 28), -INT8_C( 42), -INT8_C( 85), INT8_C( 13), INT8_C( 49), INT8_C( 4), INT8_C( 86), INT8_C( 6) },
},
},
{ { INT8_C( 8), INT8_C( 15), INT8_C( 119), INT8_C( 30), -INT8_C( 1), -INT8_C( 105), INT8_C( 62), -INT8_C( 28) },
{ -INT8_C( 81), -INT8_C( 36), INT8_C( 72), -INT8_C( 1), INT8_C( 108), INT8_C( 17), INT8_C( 123), -INT8_C( 91) },
{
{ INT8_C( 8), -INT8_C( 81), INT8_C( 15), -INT8_C( 36), INT8_C( 119), INT8_C( 72), INT8_C( 30), -INT8_C( 1) },
{ -INT8_C( 1), INT8_C( 108), -INT8_C( 105), INT8_C( 17), INT8_C( 62), INT8_C( 123), -INT8_C( 28), -INT8_C( 91) },
},
},
{ { -INT8_C( 2), INT8_C( 118), INT8_C( 99), -INT8_C( 29), INT8_C( 33), -INT8_C( 108), INT8_C( 57), INT8_C( 40) },
{ INT8_C( 26), -INT8_C( 116), -INT8_C( 50), -INT8_C( 16), -INT8_C( 103), -INT8_C( 46), -INT8_C( 10), -INT8_C( 95) },
{
{ -INT8_C( 2), INT8_C( 26), INT8_C( 118), -INT8_C( 116), INT8_C( 99), -INT8_C( 50), -INT8_C( 29), -INT8_C( 16) },
{ INT8_C( 33), -INT8_C( 103), -INT8_C( 108), -INT8_C( 46), INT8_C( 57), -INT8_C( 10), INT8_C( 40), -INT8_C( 95) },
},
},
{ { -INT8_C( 31), INT8_C( 110), -INT8_C( 65), -INT8_C( 32), INT8_C( 5), -INT8_C( 3), -INT8_C( 60), -INT8_C( 76) },
{ -INT8_C( 38), INT8_C( 12), -INT8_C( 77), INT8_C( 70), INT8_C( 30), INT8_C( 46), -INT8_C( 20), INT8_C( 28) },
{
{ -INT8_C( 31), -INT8_C( 38), INT8_C( 110), INT8_C( 12), -INT8_C( 65), -INT8_C( 77), -INT8_C( 32), INT8_C( 70) },
{ INT8_C( 5), INT8_C( 30), -INT8_C( 3), INT8_C( 46), -INT8_C( 60), -INT8_C( 20), -INT8_C( 76), INT8_C( 28) },
},
},
};
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_int8x8x2_t r = simde_vzip_s8(a, b);
simde_test_arm_neon_assert_equal_i8x8(r.val[0], simde_vld1_s8(test_vec[i].r[0]));
simde_test_arm_neon_assert_equal_i8x8(r.val[1], simde_vld1_s8(test_vec[i].r[1]));
}
return 0;
#else
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_int8x8x2_t c = simde_vzip_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_i8x8x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int16_t a[4];
int16_t b[4];
int16_t r[2][4];
} test_vec[] = {
{ { -INT16_C( 26683), INT16_C( 14034), -INT16_C( 3551), INT16_C( 32721) },
{ INT16_C( 2584), -INT16_C( 16387), -INT16_C( 1878), INT16_C( 21655) },
{
{ -INT16_C( 26683), INT16_C( 2584), INT16_C( 14034), -INT16_C( 16387) },
{ -INT16_C( 3551), -INT16_C( 1878), INT16_C( 32721), INT16_C( 21655) },
},
},
{ { -INT16_C( 3666), -INT16_C( 14488), INT16_C( 5375), INT16_C( 21517) },
{ -INT16_C( 18844), INT16_C( 26070), -INT16_C( 14981), INT16_C( 16854) },
{
{ -INT16_C( 3666), -INT16_C( 18844), -INT16_C( 14488), INT16_C( 26070) },
{ INT16_C( 5375), -INT16_C( 14981), INT16_C( 21517), INT16_C( 16854) },
},
},
{ { -INT16_C( 22436), INT16_C( 32119), INT16_C( 18586), -INT16_C( 19716) },
{ -INT16_C( 1454), -INT16_C( 910), INT16_C( 2546), -INT16_C( 24239) },
{
{ -INT16_C( 22436), -INT16_C( 1454), INT16_C( 32119), -INT16_C( 910) },
{ INT16_C( 18586), INT16_C( 2546), -INT16_C( 19716), -INT16_C( 24239) },
},
},
{ { -INT16_C( 17926), -INT16_C( 1688), INT16_C( 30157), INT16_C( 12621) },
{ INT16_C( 9003), -INT16_C( 22633), INT16_C( 28136), INT16_C( 17640) },
{
{ -INT16_C( 17926), INT16_C( 9003), -INT16_C( 1688), -INT16_C( 22633) },
{ INT16_C( 30157), INT16_C( 28136), INT16_C( 12621), INT16_C( 17640) },
},
},
{ { INT16_C( 24341), -INT16_C( 20543), -INT16_C( 16728), -INT16_C( 1439) },
{ -INT16_C( 11336), -INT16_C( 21769), INT16_C( 18653), -INT16_C( 10421) },
{
{ INT16_C( 24341), -INT16_C( 11336), -INT16_C( 20543), -INT16_C( 21769) },
{ -INT16_C( 16728), INT16_C( 18653), -INT16_C( 1439), -INT16_C( 10421) },
},
},
{ { -INT16_C( 19455), -INT16_C( 12335), INT16_C( 7721), INT16_C( 21760) },
{ -INT16_C( 26814), INT16_C( 11004), -INT16_C( 7164), INT16_C( 6511) },
{
{ -INT16_C( 19455), -INT16_C( 26814), -INT16_C( 12335), INT16_C( 11004) },
{ INT16_C( 7721), -INT16_C( 7164), INT16_C( 21760), INT16_C( 6511) },
},
},
{ { INT16_C( 12355), -INT16_C( 5176), INT16_C( 10990), -INT16_C( 22810) },
{ -INT16_C( 8707), -INT16_C( 9647), -INT16_C( 25563), INT16_C( 9906) },
{
{ INT16_C( 12355), -INT16_C( 8707), -INT16_C( 5176), -INT16_C( 9647) },
{ INT16_C( 10990), -INT16_C( 25563), -INT16_C( 22810), INT16_C( 9906) },
},
},
{ { -INT16_C( 31920), INT16_C( 31477), -INT16_C( 2399), -INT16_C( 7217) },
{ -INT16_C( 13427), -INT16_C( 28146), INT16_C( 32175), -INT16_C( 3413) },
{
{ -INT16_C( 31920), -INT16_C( 13427), INT16_C( 31477), -INT16_C( 28146) },
{ -INT16_C( 2399), INT16_C( 32175), -INT16_C( 7217), -INT16_C( 3413) },
},
},
};
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_int16x4x2_t r = simde_vzip_s16(a, b);
simde_test_arm_neon_assert_equal_i16x4(r.val[0], simde_vld1_s16(test_vec[i].r[0]));
simde_test_arm_neon_assert_equal_i16x4(r.val[1], simde_vld1_s16(test_vec[i].r[1]));
}
return 0;
#else
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_int16x4x2_t c = simde_vzip_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_i16x4x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int32_t a[2];
int32_t b[2];
int32_t r[2][2];
} test_vec[] = {
{ { -INT32_C( 960648692), -INT32_C( 1572658442) },
{ -INT32_C( 8820380), -INT32_C( 932021964) },
{
{ -INT32_C( 960648692), -INT32_C( 8820380) },
{ -INT32_C( 1572658442), -INT32_C( 932021964) },
},
},
{ { -INT32_C( 1950299668), INT32_C( 91704458) },
{ INT32_C( 1292135811), -INT32_C( 1098573390) },
{
{ -INT32_C( 1950299668), INT32_C( 1292135811) },
{ INT32_C( 91704458), -INT32_C( 1098573390) },
},
},
{ { -INT32_C( 1165737276), -INT32_C( 933443484) },
{ INT32_C( 1724372273), INT32_C( 992885071) },
{
{ -INT32_C( 1165737276), INT32_C( 1724372273) },
{ -INT32_C( 933443484), INT32_C( 992885071) },
},
},
{ { -INT32_C( 1916342526), -INT32_C( 1097712325) },
{ INT32_C( 1544263338), INT32_C( 1931120815) },
{
{ -INT32_C( 1916342526), INT32_C( 1544263338) },
{ -INT32_C( 1097712325), INT32_C( 1931120815) },
},
},
{ { INT32_C( 909025234), -INT32_C( 1728148889) },
{ -INT32_C( 1342257824), INT32_C( 32124414) },
{
{ INT32_C( 909025234), -INT32_C( 1342257824) },
{ -INT32_C( 1728148889), INT32_C( 32124414) },
},
},
{ { INT32_C( 1468968988), -INT32_C( 1760222995) },
{ INT32_C( 1710432438), -INT32_C( 2082927183) },
{
{ INT32_C( 1468968988), INT32_C( 1710432438) },
{ -INT32_C( 1760222995), -INT32_C( 2082927183) },
},
},
{ { INT32_C( 330958764), -INT32_C( 240338799) },
{ INT32_C( 2090904190), -INT32_C( 209876265) },
{
{ INT32_C( 330958764), INT32_C( 2090904190) },
{ -INT32_C( 240338799), -INT32_C( 209876265) },
},
},
{ { INT32_C( 659163962), -INT32_C( 507617493) },
{ INT32_C( 826782080), INT32_C( 1806966975) },
{
{ INT32_C( 659163962), INT32_C( 826782080) },
{ -INT32_C( 507617493), INT32_C( 1806966975) },
},
},
};
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_int32x2x2_t r = simde_vzip_s32(a, b);
simde_test_arm_neon_assert_equal_i32x2(r.val[0], simde_vld1_s32(test_vec[i].r[0]));
simde_test_arm_neon_assert_equal_i32x2(r.val[1], simde_vld1_s32(test_vec[i].r[1]));
}
return 0;
#else
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_int32x2x2_t c = simde_vzip_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_i32x2x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip_u8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint8_t a[8];
uint8_t b[8];
uint8_t r[2][8];
} test_vec[] = {
{ { UINT8_C( 45), UINT8_C(117), UINT8_C(190), UINT8_C(201), UINT8_C( 7), UINT8_C(205), UINT8_C( 18), UINT8_C(175) },
{ UINT8_C( 25), UINT8_C( 6), UINT8_C(174), UINT8_C(106), UINT8_C( 95), UINT8_C( 1), UINT8_C( 19), UINT8_C(123) },
{
{ UINT8_C( 45), UINT8_C( 25), UINT8_C(117), UINT8_C( 6), UINT8_C(190), UINT8_C(174), UINT8_C(201), UINT8_C(106) },
{ UINT8_C( 7), UINT8_C( 95), UINT8_C(205), UINT8_C( 1), UINT8_C( 18), UINT8_C( 19), UINT8_C(175), UINT8_C(123) },
},
},
{ { UINT8_C( 28), UINT8_C( 48), UINT8_C( 25), UINT8_C( 23), UINT8_C( 60), UINT8_C(125), UINT8_C(102), UINT8_C( 12) },
{ UINT8_C(248), UINT8_C( 49), UINT8_C( 20), UINT8_C(252), UINT8_C(118), UINT8_C(241), UINT8_C(127), UINT8_C(163) },
{
{ UINT8_C( 28), UINT8_C(248), UINT8_C( 48), UINT8_C( 49), UINT8_C( 25), UINT8_C( 20), UINT8_C( 23), UINT8_C(252) },
{ UINT8_C( 60), UINT8_C(118), UINT8_C(125), UINT8_C(241), UINT8_C(102), UINT8_C(127), UINT8_C( 12), UINT8_C(163) },
},
},
{ { UINT8_C(102), UINT8_C( 61), UINT8_C(109), UINT8_C(109), UINT8_C( 10), UINT8_C(127), UINT8_C( 28), UINT8_C( 36) },
{ UINT8_C(134), UINT8_C(202), UINT8_C(142), UINT8_C(229), UINT8_C(204), UINT8_C(161), UINT8_C( 96), UINT8_C(232) },
{
{ UINT8_C(102), UINT8_C(134), UINT8_C( 61), UINT8_C(202), UINT8_C(109), UINT8_C(142), UINT8_C(109), UINT8_C(229) },
{ UINT8_C( 10), UINT8_C(204), UINT8_C(127), UINT8_C(161), UINT8_C( 28), UINT8_C( 96), UINT8_C( 36), UINT8_C(232) },
},
},
{ { UINT8_C(210), UINT8_C(121), UINT8_MAX, UINT8_C( 14), UINT8_C(246), UINT8_C(101), UINT8_C( 27), UINT8_C(238) },
{ UINT8_C(150), UINT8_C( 47), UINT8_C(234), UINT8_C( 12), UINT8_C( 32), UINT8_C(105), UINT8_C(176), UINT8_C(135) },
{
{ UINT8_C(210), UINT8_C(150), UINT8_C(121), UINT8_C( 47), UINT8_MAX, UINT8_C(234), UINT8_C( 14), UINT8_C( 12) },
{ UINT8_C(246), UINT8_C( 32), UINT8_C(101), UINT8_C(105), UINT8_C( 27), UINT8_C(176), UINT8_C(238), UINT8_C(135) },
},
},
{ { UINT8_C(167), UINT8_C( 29), UINT8_C(244), UINT8_C(177), UINT8_C(156), UINT8_C( 17), UINT8_C(213), UINT8_C( 34) },
{ UINT8_C(219), UINT8_C(100), UINT8_C( 7), UINT8_C(167), UINT8_C( 5), UINT8_C(103), UINT8_C(144), UINT8_C(215) },
{
{ UINT8_C(167), UINT8_C(219), UINT8_C( 29), UINT8_C(100), UINT8_C(244), UINT8_C( 7), UINT8_C(177), UINT8_C(167) },
{ UINT8_C(156), UINT8_C( 5), UINT8_C( 17), UINT8_C(103), UINT8_C(213), UINT8_C(144), UINT8_C( 34), UINT8_C(215) },
},
},
{ { UINT8_C(224), UINT8_C(143), UINT8_C(230), UINT8_C(214), UINT8_C(245), UINT8_C( 1), UINT8_C(196), UINT8_C(139) },
{ UINT8_C( 48), UINT8_C(174), UINT8_C(152), UINT8_C( 81), UINT8_C( 24), UINT8_C( 72), UINT8_C(216), UINT8_C(191) },
{
{ UINT8_C(224), UINT8_C( 48), UINT8_C(143), UINT8_C(174), UINT8_C(230), UINT8_C(152), UINT8_C(214), UINT8_C( 81) },
{ UINT8_C(245), UINT8_C( 24), UINT8_C( 1), UINT8_C( 72), UINT8_C(196), UINT8_C(216), UINT8_C(139), UINT8_C(191) },
},
},
{ { UINT8_C(101), UINT8_C(204), UINT8_C(112), UINT8_C( 1), UINT8_C(221), UINT8_C( 70), UINT8_C( 36), UINT8_C(185) },
{ UINT8_C(170), UINT8_C( 43), UINT8_C( 96), UINT8_C(175), UINT8_C(147), UINT8_C(240), UINT8_C(135), UINT8_C(115) },
{
{ UINT8_C(101), UINT8_C(170), UINT8_C(204), UINT8_C( 43), UINT8_C(112), UINT8_C( 96), UINT8_C( 1), UINT8_C(175) },
{ UINT8_C(221), UINT8_C(147), UINT8_C( 70), UINT8_C(240), UINT8_C( 36), UINT8_C(135), UINT8_C(185), UINT8_C(115) },
},
},
{ { UINT8_C(128), UINT8_C(109), UINT8_C( 74), UINT8_C(117), UINT8_C(110), UINT8_C( 14), UINT8_C( 0), UINT8_C(158) },
{ UINT8_C(189), UINT8_C(152), UINT8_C(239), UINT8_C(213), UINT8_C(224), UINT8_C(199), UINT8_C(148), UINT8_C( 69) },
{
{ UINT8_C(128), UINT8_C(189), UINT8_C(109), UINT8_C(152), UINT8_C( 74), UINT8_C(239), UINT8_C(117), UINT8_C(213) },
{ UINT8_C(110), UINT8_C(224), UINT8_C( 14), UINT8_C(199), UINT8_C( 0), UINT8_C(148), UINT8_C(158), UINT8_C( 69) },
},
},
};
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_uint8x8x2_t r = simde_vzip_u8(a, b);
simde_test_arm_neon_assert_equal_u8x8(r.val[0], simde_vld1_u8(test_vec[i].r[0]));
simde_test_arm_neon_assert_equal_u8x8(r.val[1], simde_vld1_u8(test_vec[i].r[1]));
}
return 0;
#else
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_uint8x8x2_t c = simde_vzip_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_u8x8x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint16_t a[4];
uint16_t b[4];
uint16_t r[2][4];
} test_vec[] = {
{ { UINT16_C(39442), UINT16_C(17230), UINT16_C(36311), UINT16_C(63975) },
{ UINT16_C(17092), UINT16_C(21998), UINT16_C(48945), UINT16_C( 9146) },
{
{ UINT16_C(39442), UINT16_C(17092), UINT16_C(17230), UINT16_C(21998) },
{ UINT16_C(36311), UINT16_C(48945), UINT16_C(63975), UINT16_C( 9146) },
},
},
{ { UINT16_C(23687), UINT16_C(28300), UINT16_C(30888), UINT16_C(65167) },
{ UINT16_C(17067), UINT16_C(55130), UINT16_C(36877), UINT16_C( 8076) },
{
{ UINT16_C(23687), UINT16_C(17067), UINT16_C(28300), UINT16_C(55130) },
{ UINT16_C(30888), UINT16_C(36877), UINT16_C(65167), UINT16_C( 8076) },
},
},
{ { UINT16_C(55850), UINT16_C( 611), UINT16_C(19047), UINT16_C(11515) },
{ UINT16_C(60044), UINT16_C(48769), UINT16_C(15273), UINT16_C(12513) },
{
{ UINT16_C(55850), UINT16_C(60044), UINT16_C( 611), UINT16_C(48769) },
{ UINT16_C(19047), UINT16_C(15273), UINT16_C(11515), UINT16_C(12513) },
},
},
{ { UINT16_C(28055), UINT16_C(16542), UINT16_C(11749), UINT16_C(36926) },
{ UINT16_C(39023), UINT16_C(32103), UINT16_C(62248), UINT16_C(21404) },
{
{ UINT16_C(28055), UINT16_C(39023), UINT16_C(16542), UINT16_C(32103) },
{ UINT16_C(11749), UINT16_C(62248), UINT16_C(36926), UINT16_C(21404) },
},
},
{ { UINT16_C(65485), UINT16_C(13653), UINT16_C(20553), UINT16_C(54881) },
{ UINT16_C(57914), UINT16_C(58260), UINT16_C(29982), UINT16_C(46356) },
{
{ UINT16_C(65485), UINT16_C(57914), UINT16_C(13653), UINT16_C(58260) },
{ UINT16_C(20553), UINT16_C(29982), UINT16_C(54881), UINT16_C(46356) },
},
},
{ { UINT16_C(45794), UINT16_C(51445), UINT16_C(13280), UINT16_C(20312) },
{ UINT16_C(49356), UINT16_C(62668), UINT16_C(27059), UINT16_C(33095) },
{
{ UINT16_C(45794), UINT16_C(49356), UINT16_C(51445), UINT16_C(62668) },
{ UINT16_C(13280), UINT16_C(27059), UINT16_C(20312), UINT16_C(33095) },
},
},
{ { UINT16_C(40040), UINT16_C(45750), UINT16_C( 6125), UINT16_C(10120) },
{ UINT16_C( 7417), UINT16_C( 5899), UINT16_C( 8081), UINT16_C(29645) },
{
{ UINT16_C(40040), UINT16_C( 7417), UINT16_C(45750), UINT16_C( 5899) },
{ UINT16_C( 6125), UINT16_C( 8081), UINT16_C(10120), UINT16_C(29645) },
},
},
{ { UINT16_C(49873), UINT16_C(45371), UINT16_C(38134), UINT16_C(49665) },
{ UINT16_C(52564), UINT16_C( 1974), UINT16_C(65078), UINT16_C(40840) },
{
{ UINT16_C(49873), UINT16_C(52564), UINT16_C(45371), UINT16_C( 1974) },
{ UINT16_C(38134), UINT16_C(65078), UINT16_C(49665), UINT16_C(40840) },
},
},
};
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_uint16x4x2_t r = simde_vzip_u16(a, b);
simde_test_arm_neon_assert_equal_u16x4(r.val[0], simde_vld1_u16(test_vec[i].r[0]));
simde_test_arm_neon_assert_equal_u16x4(r.val[1], simde_vld1_u16(test_vec[i].r[1]));
}
return 0;
#else
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_uint16x4x2_t c = simde_vzip_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_u16x4x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint32_t a[2];
uint32_t b[2];
uint32_t r[2][2];
} test_vec[] = {
{ { UINT32_C(2533684775), UINT32_C(2516841981) },
{ UINT32_C( 791409457), UINT32_C(2232449215) },
{
{ UINT32_C(2533684775), UINT32_C( 791409457) },
{ UINT32_C(2516841981), UINT32_C(2232449215) },
},
},
{ { UINT32_C(3580136835), UINT32_C(1752780447) },
{ UINT32_C(2448707753), UINT32_C(1837365830) },
{
{ UINT32_C(3580136835), UINT32_C(2448707753) },
{ UINT32_C(1752780447), UINT32_C(1837365830) },
},
},
{ { UINT32_C(3976497136), UINT32_C(2927888252) },
{ UINT32_C(3135090683), UINT32_C(2856316455) },
{
{ UINT32_C(3976497136), UINT32_C(3135090683) },
{ UINT32_C(2927888252), UINT32_C(2856316455) },
},
},
{ { UINT32_C( 444638075), UINT32_C(2592274929) },
{ UINT32_C(2402056009), UINT32_C(1644015473) },
{
{ UINT32_C( 444638075), UINT32_C(2402056009) },
{ UINT32_C(2592274929), UINT32_C(1644015473) },
},
},
{ { UINT32_C(3008233783), UINT32_C( 73519625) },
{ UINT32_C(2847817601), UINT32_C(2824076589) },
{
{ UINT32_C(3008233783), UINT32_C(2847817601) },
{ UINT32_C( 73519625), UINT32_C(2824076589) },
},
},
{ { UINT32_C(2462241697), UINT32_C( 355288268) },
{ UINT32_C( 749033915), UINT32_C(1066246664) },
{
{ UINT32_C(2462241697), UINT32_C( 749033915) },
{ UINT32_C( 355288268), UINT32_C(1066246664) },
},
},
{ { UINT32_C(2901662883), UINT32_C( 816862382) },
{ UINT32_C(3235475091), UINT32_C( 224930924) },
{
{ UINT32_C(2901662883), UINT32_C(3235475091) },
{ UINT32_C( 816862382), UINT32_C( 224930924) },
},
},
{ { UINT32_C(3432983040), UINT32_C( 719506543) },
{ UINT32_C( 777488165), UINT32_C(3429753897) },
{
{ UINT32_C(3432983040), UINT32_C( 777488165) },
{ UINT32_C( 719506543), UINT32_C(3429753897) },
},
},
};
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_uint32x2x2_t r = simde_vzip_u32(a, b);
simde_test_arm_neon_assert_equal_u32x2(r.val[0], simde_vld1_u32(test_vec[i].r[0]));
simde_test_arm_neon_assert_equal_u32x2(r.val[1], simde_vld1_u32(test_vec[i].r[1]));
}
return 0;
#else
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_uint32x2x2_t c = simde_vzip_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_u32x2x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzipq_f16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_float16_t a[8];
simde_float16_t b[8];
simde_float16_t r[2][8];
} test_vec[] = {
{ { SIMDE_FLOAT16_VALUE(-0.70), SIMDE_FLOAT16_VALUE(-7.80), SIMDE_FLOAT16_VALUE(8.80), SIMDE_FLOAT16_VALUE(1.30), SIMDE_FLOAT16_VALUE(-8.00), SIMDE_FLOAT16_VALUE(-7.10), SIMDE_FLOAT16_VALUE(6.00), SIMDE_FLOAT16_VALUE(-0.60) },
{ SIMDE_FLOAT16_VALUE(3.70), SIMDE_FLOAT16_VALUE(2.20), SIMDE_FLOAT16_VALUE(7.00), SIMDE_FLOAT16_VALUE(7.50), SIMDE_FLOAT16_VALUE(10.00), SIMDE_FLOAT16_VALUE(9.70), SIMDE_FLOAT16_VALUE(-5.30), SIMDE_FLOAT16_VALUE(4.10) },
{ { SIMDE_FLOAT16_VALUE(-0.70), SIMDE_FLOAT16_VALUE(3.70), SIMDE_FLOAT16_VALUE(-7.80), SIMDE_FLOAT16_VALUE(2.20), SIMDE_FLOAT16_VALUE(8.80), SIMDE_FLOAT16_VALUE(7.00), SIMDE_FLOAT16_VALUE(1.30), SIMDE_FLOAT16_VALUE(7.50) },
{ SIMDE_FLOAT16_VALUE(-8.00), SIMDE_FLOAT16_VALUE(10.00), SIMDE_FLOAT16_VALUE(-7.10), SIMDE_FLOAT16_VALUE(9.70), SIMDE_FLOAT16_VALUE(6.00), SIMDE_FLOAT16_VALUE(-5.30), SIMDE_FLOAT16_VALUE(-0.60), SIMDE_FLOAT16_VALUE(4.10) } } },
{ { SIMDE_FLOAT16_VALUE(9.20), SIMDE_FLOAT16_VALUE(-4.70), SIMDE_FLOAT16_VALUE(-1.70), SIMDE_FLOAT16_VALUE(9.60), SIMDE_FLOAT16_VALUE(5.50), SIMDE_FLOAT16_VALUE(8.60), SIMDE_FLOAT16_VALUE(7.40), SIMDE_FLOAT16_VALUE(2.50) },
{ SIMDE_FLOAT16_VALUE(7.90), SIMDE_FLOAT16_VALUE(-4.20), SIMDE_FLOAT16_VALUE(4.20), SIMDE_FLOAT16_VALUE(5.90), SIMDE_FLOAT16_VALUE(-2.20), SIMDE_FLOAT16_VALUE(-1.80), SIMDE_FLOAT16_VALUE(7.70), SIMDE_FLOAT16_VALUE(6.80) },
{ { SIMDE_FLOAT16_VALUE(9.20), SIMDE_FLOAT16_VALUE(7.90), SIMDE_FLOAT16_VALUE(-4.70), SIMDE_FLOAT16_VALUE(-4.20), SIMDE_FLOAT16_VALUE(-1.70), SIMDE_FLOAT16_VALUE(4.20), SIMDE_FLOAT16_VALUE(9.60), SIMDE_FLOAT16_VALUE(5.90) },
{ SIMDE_FLOAT16_VALUE(5.50), SIMDE_FLOAT16_VALUE(-2.20), SIMDE_FLOAT16_VALUE(8.60), SIMDE_FLOAT16_VALUE(-1.80), SIMDE_FLOAT16_VALUE(7.40), SIMDE_FLOAT16_VALUE(7.70), SIMDE_FLOAT16_VALUE(2.50), SIMDE_FLOAT16_VALUE(6.80) } } },
{ { SIMDE_FLOAT16_VALUE(6.20), SIMDE_FLOAT16_VALUE(-6.40), SIMDE_FLOAT16_VALUE(9.00), SIMDE_FLOAT16_VALUE(-9.20), SIMDE_FLOAT16_VALUE(1.60), SIMDE_FLOAT16_VALUE(-9.00), SIMDE_FLOAT16_VALUE(8.30), SIMDE_FLOAT16_VALUE(-5.30) },
{ SIMDE_FLOAT16_VALUE(6.50), SIMDE_FLOAT16_VALUE(-7.90), SIMDE_FLOAT16_VALUE(-3.20), SIMDE_FLOAT16_VALUE(-4.10), SIMDE_FLOAT16_VALUE(-5.40), SIMDE_FLOAT16_VALUE(1.20), SIMDE_FLOAT16_VALUE(-7.10), SIMDE_FLOAT16_VALUE(8.80) },
{ { SIMDE_FLOAT16_VALUE(6.20), SIMDE_FLOAT16_VALUE(6.50), SIMDE_FLOAT16_VALUE(-6.40), SIMDE_FLOAT16_VALUE(-7.90), SIMDE_FLOAT16_VALUE(9.00), SIMDE_FLOAT16_VALUE(-3.20), SIMDE_FLOAT16_VALUE(-9.20), SIMDE_FLOAT16_VALUE(-4.10) },
{ SIMDE_FLOAT16_VALUE(1.60), SIMDE_FLOAT16_VALUE(-5.40), SIMDE_FLOAT16_VALUE(-9.00), SIMDE_FLOAT16_VALUE(1.20), SIMDE_FLOAT16_VALUE(8.30), SIMDE_FLOAT16_VALUE(-7.10), SIMDE_FLOAT16_VALUE(-5.30), SIMDE_FLOAT16_VALUE(8.80) } } },
{ { SIMDE_FLOAT16_VALUE(8.10), SIMDE_FLOAT16_VALUE(-3.80), SIMDE_FLOAT16_VALUE(4.00), SIMDE_FLOAT16_VALUE(8.40), SIMDE_FLOAT16_VALUE(4.70), SIMDE_FLOAT16_VALUE(1.30), SIMDE_FLOAT16_VALUE(9.60), SIMDE_FLOAT16_VALUE(-1.40) },
{ SIMDE_FLOAT16_VALUE(6.00), SIMDE_FLOAT16_VALUE(-2.30), SIMDE_FLOAT16_VALUE(-4.60), SIMDE_FLOAT16_VALUE(1.20), SIMDE_FLOAT16_VALUE(-4.70), SIMDE_FLOAT16_VALUE(-3.90), SIMDE_FLOAT16_VALUE(-5.40), SIMDE_FLOAT16_VALUE(-6.50) },
{ { SIMDE_FLOAT16_VALUE(8.10), SIMDE_FLOAT16_VALUE(6.00), SIMDE_FLOAT16_VALUE(-3.80), SIMDE_FLOAT16_VALUE(-2.30), SIMDE_FLOAT16_VALUE(4.00), SIMDE_FLOAT16_VALUE(-4.60), SIMDE_FLOAT16_VALUE(8.40), SIMDE_FLOAT16_VALUE(1.20) },
{ SIMDE_FLOAT16_VALUE(4.70), SIMDE_FLOAT16_VALUE(-4.70), SIMDE_FLOAT16_VALUE(1.30), SIMDE_FLOAT16_VALUE(-3.90), SIMDE_FLOAT16_VALUE(9.60), SIMDE_FLOAT16_VALUE(-5.40), SIMDE_FLOAT16_VALUE(-1.40), SIMDE_FLOAT16_VALUE(-6.50) } } },
{ { SIMDE_FLOAT16_VALUE(5.70), SIMDE_FLOAT16_VALUE(-4.80), SIMDE_FLOAT16_VALUE(-1.30), SIMDE_FLOAT16_VALUE(-6.60), SIMDE_FLOAT16_VALUE(-8.80), SIMDE_FLOAT16_VALUE(3.90), SIMDE_FLOAT16_VALUE(2.00), SIMDE_FLOAT16_VALUE(5.50) },
{ SIMDE_FLOAT16_VALUE(-5.60), SIMDE_FLOAT16_VALUE(-5.00), SIMDE_FLOAT16_VALUE(7.20), SIMDE_FLOAT16_VALUE(-5.20), SIMDE_FLOAT16_VALUE(7.00), SIMDE_FLOAT16_VALUE(6.80), SIMDE_FLOAT16_VALUE(5.00), SIMDE_FLOAT16_VALUE(8.60) },
{ { SIMDE_FLOAT16_VALUE(5.70), SIMDE_FLOAT16_VALUE(-5.60), SIMDE_FLOAT16_VALUE(-4.80), SIMDE_FLOAT16_VALUE(-5.00), SIMDE_FLOAT16_VALUE(-1.30), SIMDE_FLOAT16_VALUE(7.20), SIMDE_FLOAT16_VALUE(-6.60), SIMDE_FLOAT16_VALUE(-5.20) },
{ SIMDE_FLOAT16_VALUE(-8.80), SIMDE_FLOAT16_VALUE(7.00), SIMDE_FLOAT16_VALUE(3.90), SIMDE_FLOAT16_VALUE(6.80), SIMDE_FLOAT16_VALUE(2.00), SIMDE_FLOAT16_VALUE(5.00), SIMDE_FLOAT16_VALUE(5.50), SIMDE_FLOAT16_VALUE(8.60) } } },
{ { SIMDE_FLOAT16_VALUE(-9.30), SIMDE_FLOAT16_VALUE(-2.50), SIMDE_FLOAT16_VALUE(4.30), SIMDE_FLOAT16_VALUE(3.60), SIMDE_FLOAT16_VALUE(7.10), SIMDE_FLOAT16_VALUE(-6.00), SIMDE_FLOAT16_VALUE(-3.50), SIMDE_FLOAT16_VALUE(-9.20) },
{ SIMDE_FLOAT16_VALUE(6.30), SIMDE_FLOAT16_VALUE(-9.50), SIMDE_FLOAT16_VALUE(-7.90), SIMDE_FLOAT16_VALUE(-8.70), SIMDE_FLOAT16_VALUE(6.30), SIMDE_FLOAT16_VALUE(1.00), SIMDE_FLOAT16_VALUE(0.70), SIMDE_FLOAT16_VALUE(3.50) },
{ { SIMDE_FLOAT16_VALUE(-9.30), SIMDE_FLOAT16_VALUE(6.30), SIMDE_FLOAT16_VALUE(-2.50), SIMDE_FLOAT16_VALUE(-9.50), SIMDE_FLOAT16_VALUE(4.30), SIMDE_FLOAT16_VALUE(-7.90), SIMDE_FLOAT16_VALUE(3.60), SIMDE_FLOAT16_VALUE(-8.70) },
{ SIMDE_FLOAT16_VALUE(7.10), SIMDE_FLOAT16_VALUE(6.30), SIMDE_FLOAT16_VALUE(-6.00), SIMDE_FLOAT16_VALUE(1.00), SIMDE_FLOAT16_VALUE(-3.50), SIMDE_FLOAT16_VALUE(0.70), SIMDE_FLOAT16_VALUE(-9.20), SIMDE_FLOAT16_VALUE(3.50) } } },
{ { SIMDE_FLOAT16_VALUE(9.50), SIMDE_FLOAT16_VALUE(-2.70), SIMDE_FLOAT16_VALUE(-3.50), SIMDE_FLOAT16_VALUE(-8.20), SIMDE_FLOAT16_VALUE(3.70), SIMDE_FLOAT16_VALUE(8.50), SIMDE_FLOAT16_VALUE(5.40), SIMDE_FLOAT16_VALUE(-2.70) },
{ SIMDE_FLOAT16_VALUE(-4.40), SIMDE_FLOAT16_VALUE(-8.60), SIMDE_FLOAT16_VALUE(4.00), SIMDE_FLOAT16_VALUE(2.70), SIMDE_FLOAT16_VALUE(-0.70), SIMDE_FLOAT16_VALUE(-4.50), SIMDE_FLOAT16_VALUE(0.10), SIMDE_FLOAT16_VALUE(-5.00) },
{ { SIMDE_FLOAT16_VALUE(9.50), SIMDE_FLOAT16_VALUE(-4.40), SIMDE_FLOAT16_VALUE(-2.70), SIMDE_FLOAT16_VALUE(-8.60), SIMDE_FLOAT16_VALUE(-3.50), SIMDE_FLOAT16_VALUE(4.00), SIMDE_FLOAT16_VALUE(-8.20), SIMDE_FLOAT16_VALUE(2.70) },
{ SIMDE_FLOAT16_VALUE(3.70), SIMDE_FLOAT16_VALUE(-0.70), SIMDE_FLOAT16_VALUE(8.50), SIMDE_FLOAT16_VALUE(-4.50), SIMDE_FLOAT16_VALUE(5.40), SIMDE_FLOAT16_VALUE(0.10), SIMDE_FLOAT16_VALUE(-2.70), SIMDE_FLOAT16_VALUE(-5.00) } } },
{ { SIMDE_FLOAT16_VALUE(-7.00), SIMDE_FLOAT16_VALUE(9.30), SIMDE_FLOAT16_VALUE(-0.00), SIMDE_FLOAT16_VALUE(-9.00), SIMDE_FLOAT16_VALUE(6.30), SIMDE_FLOAT16_VALUE(-3.00), SIMDE_FLOAT16_VALUE(-2.70), SIMDE_FLOAT16_VALUE(4.80) },
{ SIMDE_FLOAT16_VALUE(9.20), SIMDE_FLOAT16_VALUE(1.10), SIMDE_FLOAT16_VALUE(8.80), SIMDE_FLOAT16_VALUE(-7.10), SIMDE_FLOAT16_VALUE(-0.30), SIMDE_FLOAT16_VALUE(-2.60), SIMDE_FLOAT16_VALUE(6.30), SIMDE_FLOAT16_VALUE(4.90) },
{ { SIMDE_FLOAT16_VALUE(-7.00), SIMDE_FLOAT16_VALUE(9.20), SIMDE_FLOAT16_VALUE(9.30), SIMDE_FLOAT16_VALUE(1.10), SIMDE_FLOAT16_VALUE(-0.00), SIMDE_FLOAT16_VALUE(8.80), SIMDE_FLOAT16_VALUE(-9.00), SIMDE_FLOAT16_VALUE(-7.10) },
{ SIMDE_FLOAT16_VALUE(6.30), SIMDE_FLOAT16_VALUE(-0.30), SIMDE_FLOAT16_VALUE(-3.00), SIMDE_FLOAT16_VALUE(-2.60), SIMDE_FLOAT16_VALUE(-2.70), SIMDE_FLOAT16_VALUE(6.30), SIMDE_FLOAT16_VALUE(4.80), SIMDE_FLOAT16_VALUE(4.90) } } },
{ { SIMDE_FLOAT16_VALUE(9.90), SIMDE_FLOAT16_VALUE(6.10), SIMDE_FLOAT16_VALUE(4.20), SIMDE_FLOAT16_VALUE(-5.60), SIMDE_FLOAT16_VALUE(7.00), SIMDE_FLOAT16_VALUE(-6.30), SIMDE_FLOAT16_VALUE(-9.20), SIMDE_FLOAT16_VALUE(7.50) },
{ SIMDE_FLOAT16_VALUE(-2.60), SIMDE_FLOAT16_VALUE(-5.90), SIMDE_FLOAT16_VALUE(1.70), SIMDE_FLOAT16_VALUE(3.60), SIMDE_FLOAT16_VALUE(-6.50), SIMDE_FLOAT16_VALUE(7.50), SIMDE_FLOAT16_VALUE(7.60), SIMDE_FLOAT16_VALUE(-5.10) },
{ { SIMDE_FLOAT16_VALUE(9.90), SIMDE_FLOAT16_VALUE(-2.60), SIMDE_FLOAT16_VALUE(6.10), SIMDE_FLOAT16_VALUE(-5.90), SIMDE_FLOAT16_VALUE(4.20), SIMDE_FLOAT16_VALUE(1.70), SIMDE_FLOAT16_VALUE(-5.60), SIMDE_FLOAT16_VALUE(3.60) },
{ SIMDE_FLOAT16_VALUE(7.00), SIMDE_FLOAT16_VALUE(-6.50), SIMDE_FLOAT16_VALUE(-6.30), SIMDE_FLOAT16_VALUE(7.50), SIMDE_FLOAT16_VALUE(-9.20), SIMDE_FLOAT16_VALUE(7.60), SIMDE_FLOAT16_VALUE(7.50), SIMDE_FLOAT16_VALUE(-5.10) } } },
{ { SIMDE_FLOAT16_VALUE(6.60), SIMDE_FLOAT16_VALUE(8.80), SIMDE_FLOAT16_VALUE(3.30), SIMDE_FLOAT16_VALUE(-2.10), SIMDE_FLOAT16_VALUE(-7.40), SIMDE_FLOAT16_VALUE(3.20), SIMDE_FLOAT16_VALUE(9.40), SIMDE_FLOAT16_VALUE(-4.50) },
{ SIMDE_FLOAT16_VALUE(4.00), SIMDE_FLOAT16_VALUE(1.10), SIMDE_FLOAT16_VALUE(7.00), SIMDE_FLOAT16_VALUE(-7.30), SIMDE_FLOAT16_VALUE(1.10), SIMDE_FLOAT16_VALUE(-7.80), SIMDE_FLOAT16_VALUE(-0.50), SIMDE_FLOAT16_VALUE(-0.40) },
{ { SIMDE_FLOAT16_VALUE(6.60), SIMDE_FLOAT16_VALUE(4.00), SIMDE_FLOAT16_VALUE(8.80), SIMDE_FLOAT16_VALUE(1.10), SIMDE_FLOAT16_VALUE(3.30), SIMDE_FLOAT16_VALUE(7.00), SIMDE_FLOAT16_VALUE(-2.10), SIMDE_FLOAT16_VALUE(-7.30) },
{ SIMDE_FLOAT16_VALUE(-7.40), SIMDE_FLOAT16_VALUE(1.10), SIMDE_FLOAT16_VALUE(3.20), SIMDE_FLOAT16_VALUE(-7.80), SIMDE_FLOAT16_VALUE(9.40), SIMDE_FLOAT16_VALUE(-0.50), SIMDE_FLOAT16_VALUE(-4.50), SIMDE_FLOAT16_VALUE(-0.40) } } },
};
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_float16x8x2_t r = simde_vzipq_f16(a, b);
simde_test_arm_neon_assert_equal_f16x8(r.val[0], simde_vld1q_f16(test_vec[i].r[0]), 1);
simde_test_arm_neon_assert_equal_f16x8(r.val[1], simde_vld1q_f16(test_vec[i].r[1]), 1);
}
return 0;
#else
for (int i = 0 ; i < 8 ; i++) {
simde_float16x8_t a = simde_test_arm_neon_random_f16x8(-1000.0f, 1000.0f);
simde_float16x8_t b = simde_test_arm_neon_random_f16x8(-1000.0f, 1000.0f);
simde_float16x8x2_t c = simde_vzipq_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_f16x8x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzipq_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_float32 a[4];
simde_float32 b[4];
simde_float32 r[2][4];
} test_vec[] = {
{ { SIMDE_FLOAT32_C( -748.99), SIMDE_FLOAT32_C( -706.11), SIMDE_FLOAT32_C( 869.97), SIMDE_FLOAT32_C( 247.18) },
{ SIMDE_FLOAT32_C( 281.30), SIMDE_FLOAT32_C( -318.87), SIMDE_FLOAT32_C( -402.07), SIMDE_FLOAT32_C( 850.87) },
{
{ SIMDE_FLOAT32_C( -748.99), SIMDE_FLOAT32_C( 281.30), SIMDE_FLOAT32_C( -706.11), SIMDE_FLOAT32_C( -318.87) },
{ SIMDE_FLOAT32_C( 869.97), SIMDE_FLOAT32_C( -402.07), SIMDE_FLOAT32_C( 247.18), SIMDE_FLOAT32_C( 850.87) },
},
},
{ { SIMDE_FLOAT32_C( -830.23), SIMDE_FLOAT32_C( -661.11), SIMDE_FLOAT32_C( -631.24), SIMDE_FLOAT32_C( 130.32) },
{ SIMDE_FLOAT32_C( -203.49), SIMDE_FLOAT32_C( 634.65), SIMDE_FLOAT32_C( 396.96), SIMDE_FLOAT32_C( 711.13) },
{
{ SIMDE_FLOAT32_C( -830.23), SIMDE_FLOAT32_C( -203.49), SIMDE_FLOAT32_C( -661.11), SIMDE_FLOAT32_C( 634.65) },
{ SIMDE_FLOAT32_C( -631.24), SIMDE_FLOAT32_C( 396.96), SIMDE_FLOAT32_C( 130.32), SIMDE_FLOAT32_C( 711.13) },
},
},
{ { SIMDE_FLOAT32_C( 282.82), SIMDE_FLOAT32_C( 202.09), SIMDE_FLOAT32_C( -453.11), SIMDE_FLOAT32_C( 640.01) },
{ SIMDE_FLOAT32_C( 822.42), SIMDE_FLOAT32_C( 187.30), SIMDE_FLOAT32_C( 18.58), SIMDE_FLOAT32_C( 809.63) },
{
{ SIMDE_FLOAT32_C( 282.82), SIMDE_FLOAT32_C( 822.42), SIMDE_FLOAT32_C( 202.09), SIMDE_FLOAT32_C( 187.30) },
{ SIMDE_FLOAT32_C( -453.11), SIMDE_FLOAT32_C( 18.58), SIMDE_FLOAT32_C( 640.01), SIMDE_FLOAT32_C( 809.63) },
},
},
{ { SIMDE_FLOAT32_C( -225.67), SIMDE_FLOAT32_C( 681.44), SIMDE_FLOAT32_C( 463.00), SIMDE_FLOAT32_C( 309.35) },
{ SIMDE_FLOAT32_C( 589.93), SIMDE_FLOAT32_C( 877.78), SIMDE_FLOAT32_C( 246.23), SIMDE_FLOAT32_C( 840.94) },
{
{ SIMDE_FLOAT32_C( -225.67), SIMDE_FLOAT32_C( 589.93), SIMDE_FLOAT32_C( 681.44), SIMDE_FLOAT32_C( 877.78) },
{ SIMDE_FLOAT32_C( 463.00), SIMDE_FLOAT32_C( 246.23), SIMDE_FLOAT32_C( 309.35), SIMDE_FLOAT32_C( 840.94) },
},
},
{ { SIMDE_FLOAT32_C( -828.33), SIMDE_FLOAT32_C( 116.19), SIMDE_FLOAT32_C( 88.12), SIMDE_FLOAT32_C( 452.97) },
{ SIMDE_FLOAT32_C( 797.32), SIMDE_FLOAT32_C( 686.05), SIMDE_FLOAT32_C( 303.84), SIMDE_FLOAT32_C( 967.09) },
{
{ SIMDE_FLOAT32_C( -828.33), SIMDE_FLOAT32_C( 797.32), SIMDE_FLOAT32_C( 116.19), SIMDE_FLOAT32_C( 686.05) },
{ SIMDE_FLOAT32_C( 88.12), SIMDE_FLOAT32_C( 303.84), SIMDE_FLOAT32_C( 452.97), SIMDE_FLOAT32_C( 967.09) },
},
},
{ { SIMDE_FLOAT32_C( -975.06), SIMDE_FLOAT32_C( 672.60), SIMDE_FLOAT32_C( 97.41), SIMDE_FLOAT32_C( -178.55) },
{ SIMDE_FLOAT32_C( 307.24), SIMDE_FLOAT32_C( -505.62), SIMDE_FLOAT32_C( -467.42), SIMDE_FLOAT32_C( -409.94) },
{
{ SIMDE_FLOAT32_C( -975.06), SIMDE_FLOAT32_C( 307.24), SIMDE_FLOAT32_C( 672.60), SIMDE_FLOAT32_C( -505.62) },
{ SIMDE_FLOAT32_C( 97.41), SIMDE_FLOAT32_C( -467.42), SIMDE_FLOAT32_C( -178.55), SIMDE_FLOAT32_C( -409.94) },
},
},
{ { SIMDE_FLOAT32_C( 696.47), SIMDE_FLOAT32_C( 79.47), SIMDE_FLOAT32_C( -769.92), SIMDE_FLOAT32_C( 518.88) },
{ SIMDE_FLOAT32_C( -733.23), SIMDE_FLOAT32_C( 248.65), SIMDE_FLOAT32_C( 328.52), SIMDE_FLOAT32_C( 41.09) },
{
{ SIMDE_FLOAT32_C( 696.47), SIMDE_FLOAT32_C( -733.23), SIMDE_FLOAT32_C( 79.47), SIMDE_FLOAT32_C( 248.65) },
{ SIMDE_FLOAT32_C( -769.92), SIMDE_FLOAT32_C( 328.52), SIMDE_FLOAT32_C( 518.88), SIMDE_FLOAT32_C( 41.09) },
},
},
{ { SIMDE_FLOAT32_C( -69.90), SIMDE_FLOAT32_C( -208.48), SIMDE_FLOAT32_C( -649.56), SIMDE_FLOAT32_C( -479.97) },
{ SIMDE_FLOAT32_C( -330.70), SIMDE_FLOAT32_C( 596.67), SIMDE_FLOAT32_C( -639.03), SIMDE_FLOAT32_C( -159.03) },
{
{ SIMDE_FLOAT32_C( -69.90), SIMDE_FLOAT32_C( -330.70), SIMDE_FLOAT32_C( -208.48), SIMDE_FLOAT32_C( 596.67) },
{ SIMDE_FLOAT32_C( -649.56), SIMDE_FLOAT32_C( -639.03), SIMDE_FLOAT32_C( -479.97), SIMDE_FLOAT32_C( -159.03) },
},
},
};
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_float32x4x2_t r = simde_vzipq_f32(a, b);
simde_test_arm_neon_assert_equal_f32x4(r.val[0], simde_vld1q_f32(test_vec[i].r[0]), 1);
simde_test_arm_neon_assert_equal_f32x4(r.val[1], simde_vld1q_f32(test_vec[i].r[1]), 1);
}
return 0;
#else
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_float32x4x2_t c = simde_vzipq_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_f32x4x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzipq_s8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int8_t a[16];
int8_t b[16];
int8_t r[2][16];
} test_vec[] = {
{ { INT8_C( 106), -INT8_C( 117), -INT8_C( 106), -INT8_C( 113), -INT8_C( 27), -INT8_C( 54), INT8_C( 13), -INT8_C( 22),
-INT8_C( 117), INT8_C( 99), INT8_C( 3), INT8_C( 35), INT8_C( 32), -INT8_C( 99), -INT8_C( 83), -INT8_C( 26) },
{ INT8_C( 80), -INT8_C( 97), -INT8_C( 66), INT8_C( 69), INT8_C( 11), -INT8_C( 96), -INT8_C( 40), INT8_C( 91),
-INT8_C( 122), INT8_C( 27), -INT8_C( 48), INT8_C( 8), INT8_C( 78), INT8_C( 103), -INT8_C( 89), -INT8_C( 72) },
{
{ INT8_C( 106), INT8_C( 80), -INT8_C( 117), -INT8_C( 97), -INT8_C( 106), -INT8_C( 66), -INT8_C( 113), INT8_C( 69),
-INT8_C( 27), INT8_C( 11), -INT8_C( 54), -INT8_C( 96), INT8_C( 13), -INT8_C( 40), -INT8_C( 22), INT8_C( 91) },
{ -INT8_C( 117), -INT8_C( 122), INT8_C( 99), INT8_C( 27), INT8_C( 3), -INT8_C( 48), INT8_C( 35), INT8_C( 8),
INT8_C( 32), INT8_C( 78), -INT8_C( 99), INT8_C( 103), -INT8_C( 83), -INT8_C( 89), -INT8_C( 26), -INT8_C( 72) },
},
},
{ { -INT8_C( 14), INT8_C( 61), INT8_C( 72), -INT8_C( 41), INT8_C( 7), INT8_C( 85), -INT8_C( 62), -INT8_C( 110),
-INT8_C( 72), -INT8_C( 59), -INT8_C( 75), -INT8_C( 39), INT8_C( 98), INT8_C( 98), -INT8_C( 65), -INT8_C( 78) },
{ INT8_C( 1), INT8_C( 126), -INT8_C( 8), INT8_C( 12), INT8_C( 30), -INT8_C( 48), INT8_C( 103), -INT8_C( 91),
-INT8_C( 21), INT8_C( 55), -INT8_C( 83), INT8_C( 57), -INT8_C( 98), INT8_C( 84), -INT8_C( 14), -INT8_C( 112) },
{
{ -INT8_C( 14), INT8_C( 1), INT8_C( 61), INT8_C( 126), INT8_C( 72), -INT8_C( 8), -INT8_C( 41), INT8_C( 12),
INT8_C( 7), INT8_C( 30), INT8_C( 85), -INT8_C( 48), -INT8_C( 62), INT8_C( 103), -INT8_C( 110), -INT8_C( 91) },
{ -INT8_C( 72), -INT8_C( 21), -INT8_C( 59), INT8_C( 55), -INT8_C( 75), -INT8_C( 83), -INT8_C( 39), INT8_C( 57),
INT8_C( 98), -INT8_C( 98), INT8_C( 98), INT8_C( 84), -INT8_C( 65), -INT8_C( 14), -INT8_C( 78), -INT8_C( 112) },
},
},
{ { -INT8_C( 111), INT8_C( 58), INT8_C( 104), -INT8_C( 104), -INT8_C( 113), INT8_C( 42), INT8_C( 42), INT8_C( 71),
-INT8_C( 17), -INT8_C( 33), INT8_C( 32), INT8_C( 82), INT8_C( 65), -INT8_C( 32), INT8_C( 4), INT8_C( 66) },
{ INT8_C( 94), -INT8_C( 4), INT8_C( 78), INT8_C( 124), -INT8_C( 51), -INT8_C( 74), INT8_C( 33), -INT8_C( 72),
-INT8_C( 19), -INT8_C( 50), -INT8_C( 14), -INT8_C( 116), INT8_C( 34), -INT8_C( 28), INT8_C( 28), -INT8_C( 77) },
{
{ -INT8_C( 111), INT8_C( 94), INT8_C( 58), -INT8_C( 4), INT8_C( 104), INT8_C( 78), -INT8_C( 104), INT8_C( 124),
-INT8_C( 113), -INT8_C( 51), INT8_C( 42), -INT8_C( 74), INT8_C( 42), INT8_C( 33), INT8_C( 71), -INT8_C( 72) },
{ -INT8_C( 17), -INT8_C( 19), -INT8_C( 33), -INT8_C( 50), INT8_C( 32), -INT8_C( 14), INT8_C( 82), -INT8_C( 116),
INT8_C( 65), INT8_C( 34), -INT8_C( 32), -INT8_C( 28), INT8_C( 4), INT8_C( 28), INT8_C( 66), -INT8_C( 77) },
},
},
{ { INT8_C( 30), -INT8_C( 124), INT8_C( 75), -INT8_C( 83), -INT8_C( 82), INT8_C( 117), -INT8_C( 12), -INT8_C( 98),
INT8_C( 84), INT8_C( 21), -INT8_C( 16), -INT8_C( 107), -INT8_C( 11), -INT8_C( 12), -INT8_C( 41), INT8_C( 83) },
{ -INT8_C( 15), INT8_C( 38), -INT8_C( 49), -INT8_C( 66), -INT8_C( 36), -INT8_C( 15), INT8_C( 118), -INT8_C( 55),
-INT8_C( 65), INT8_C( 104), INT8_C( 85), -INT8_C( 30), INT8_C( 76), INT8_C( 114), -INT8_C( 107), INT8_C( 106) },
{
{ INT8_C( 30), -INT8_C( 15), -INT8_C( 124), INT8_C( 38), INT8_C( 75), -INT8_C( 49), -INT8_C( 83), -INT8_C( 66),
-INT8_C( 82), -INT8_C( 36), INT8_C( 117), -INT8_C( 15), -INT8_C( 12), INT8_C( 118), -INT8_C( 98), -INT8_C( 55) },
{ INT8_C( 84), -INT8_C( 65), INT8_C( 21), INT8_C( 104), -INT8_C( 16), INT8_C( 85), -INT8_C( 107), -INT8_C( 30),
-INT8_C( 11), INT8_C( 76), -INT8_C( 12), INT8_C( 114), -INT8_C( 41), -INT8_C( 107), INT8_C( 83), INT8_C( 106) },
},
},
{ { -INT8_C( 10), -INT8_C( 31), INT8_C( 23), -INT8_C( 91), INT8_C( 86), INT8_C( 12), INT8_C( 67), -INT8_C( 85),
INT8_C( 33), INT8_C( 51), INT8_C( 64), INT8_C( 22), INT8_C( 39), INT8_C( 24), INT8_C( 105), INT8_C( 24) },
{ INT8_C( 62), INT8_C( 56), -INT8_C( 42), INT8_C( 26), INT8_C( 41), INT8_C( 77), -INT8_C( 29), -INT8_C( 23),
-INT8_C( 75), INT8_C( 57), -INT8_C( 53), INT8_C( 2), -INT8_C( 85), INT8_C( 96), INT8_C( 108), -INT8_C( 95) },
{
{ -INT8_C( 10), INT8_C( 62), -INT8_C( 31), INT8_C( 56), INT8_C( 23), -INT8_C( 42), -INT8_C( 91), INT8_C( 26),
INT8_C( 86), INT8_C( 41), INT8_C( 12), INT8_C( 77), INT8_C( 67), -INT8_C( 29), -INT8_C( 85), -INT8_C( 23) },
{ INT8_C( 33), -INT8_C( 75), INT8_C( 51), INT8_C( 57), INT8_C( 64), -INT8_C( 53), INT8_C( 22), INT8_C( 2),
INT8_C( 39), -INT8_C( 85), INT8_C( 24), INT8_C( 96), INT8_C( 105), INT8_C( 108), INT8_C( 24), -INT8_C( 95) },
},
},
{ { INT8_C( 65), -INT8_C( 124), INT8_C( 70), -INT8_C( 104), -INT8_C( 112), -INT8_C( 119), INT8_C( 67), -INT8_C( 79),
-INT8_C( 68), -INT8_C( 125), -INT8_C( 57), -INT8_C( 28), -INT8_C( 101), INT8_C( 48), -INT8_C( 4), -INT8_C( 39) },
{ INT8_C( 104), -INT8_C( 45), -INT8_C( 13), -INT8_C( 110), INT8_C( 32), -INT8_C( 41), INT8_C( 123), -INT8_C( 43),
INT8_C( 16), INT8_C( 70), -INT8_C( 41), -INT8_C( 69), -INT8_C( 90), INT8_C( 68), INT8_C( 92), -INT8_C( 24) },
{
{ INT8_C( 65), INT8_C( 104), -INT8_C( 124), -INT8_C( 45), INT8_C( 70), -INT8_C( 13), -INT8_C( 104), -INT8_C( 110),
-INT8_C( 112), INT8_C( 32), -INT8_C( 119), -INT8_C( 41), INT8_C( 67), INT8_C( 123), -INT8_C( 79), -INT8_C( 43) },
{ -INT8_C( 68), INT8_C( 16), -INT8_C( 125), INT8_C( 70), -INT8_C( 57), -INT8_C( 41), -INT8_C( 28), -INT8_C( 69),
-INT8_C( 101), -INT8_C( 90), INT8_C( 48), INT8_C( 68), -INT8_C( 4), INT8_C( 92), -INT8_C( 39), -INT8_C( 24) },
},
},
{ { -INT8_C( 56), -INT8_C( 93), INT8_MIN, INT8_C( 88), INT8_C( 44), -INT8_C( 61), INT8_C( 9), -INT8_C( 23),
INT8_C( 70), -INT8_C( 48), -INT8_C( 51), -INT8_C( 30), INT8_C( 0), -INT8_C( 55), -INT8_C( 69), INT8_C( 104) },
{ -INT8_C( 100), -INT8_C( 81), -INT8_C( 6), -INT8_C( 68), -INT8_C( 122), INT8_C( 117), -INT8_C( 110), -INT8_C( 106),
-INT8_C( 69), INT8_C( 105), INT8_C( 81), INT8_C( 98), -INT8_C( 83), -INT8_C( 83), INT8_C( 74), INT8_C( 117) },
{
{ -INT8_C( 56), -INT8_C( 100), -INT8_C( 93), -INT8_C( 81), INT8_MIN, -INT8_C( 6), INT8_C( 88), -INT8_C( 68),
INT8_C( 44), -INT8_C( 122), -INT8_C( 61), INT8_C( 117), INT8_C( 9), -INT8_C( 110), -INT8_C( 23), -INT8_C( 106) },
{ INT8_C( 70), -INT8_C( 69), -INT8_C( 48), INT8_C( 105), -INT8_C( 51), INT8_C( 81), -INT8_C( 30), INT8_C( 98),
INT8_C( 0), -INT8_C( 83), -INT8_C( 55), -INT8_C( 83), -INT8_C( 69), INT8_C( 74), INT8_C( 104), INT8_C( 117) },
},
},
{ { INT8_C( 80), -INT8_C( 54), -INT8_C( 51), INT8_C( 125), -INT8_C( 115), -INT8_C( 42), INT8_C( 102), -INT8_C( 45),
-INT8_C( 90), INT8_C( 51), -INT8_C( 75), -INT8_C( 90), -INT8_C( 4), INT8_C( 113), INT8_C( 15), -INT8_C( 103) },
{ INT8_C( 32), INT8_C( 9), INT8_C( 85), -INT8_C( 90), INT8_MAX, -INT8_C( 25), INT8_C( 60), INT8_C( 58),
INT8_C( 81), -INT8_C( 115), -INT8_C( 100), -INT8_C( 2), INT8_C( 58), -INT8_C( 26), INT8_C( 116), -INT8_C( 117) },
{
{ INT8_C( 80), INT8_C( 32), -INT8_C( 54), INT8_C( 9), -INT8_C( 51), INT8_C( 85), INT8_C( 125), -INT8_C( 90),
-INT8_C( 115), INT8_MAX, -INT8_C( 42), -INT8_C( 25), INT8_C( 102), INT8_C( 60), -INT8_C( 45), INT8_C( 58) },
{ -INT8_C( 90), INT8_C( 81), INT8_C( 51), -INT8_C( 115), -INT8_C( 75), -INT8_C( 100), -INT8_C( 90), -INT8_C( 2),
-INT8_C( 4), INT8_C( 58), INT8_C( 113), -INT8_C( 26), INT8_C( 15), INT8_C( 116), -INT8_C( 103), -INT8_C( 117) },
},
},
};
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_int8x16x2_t r = simde_vzipq_s8(a, b);
simde_test_arm_neon_assert_equal_i8x16(r.val[0], simde_vld1q_s8(test_vec[i].r[0]));
simde_test_arm_neon_assert_equal_i8x16(r.val[1], simde_vld1q_s8(test_vec[i].r[1]));
}
return 0;
#else
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_int8x16x2_t c = simde_vzipq_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_i8x16x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzipq_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int16_t a[8];
int16_t b[8];
int16_t r[2][8];
} test_vec[] = {
{ { INT16_C( 3008), -INT16_C( 17292), -INT16_C( 32024), -INT16_C( 11129), INT16_C( 23848), -INT16_C( 24759), INT16_C( 23386), INT16_C( 16016) },
{ INT16_C( 20554), INT16_C( 14369), -INT16_C( 8685), -INT16_C( 28269), INT16_C( 23126), INT16_C( 29189), INT16_C( 8337), INT16_C( 21143) },
{
{ INT16_C( 3008), INT16_C( 20554), -INT16_C( 17292), INT16_C( 14369), -INT16_C( 32024), -INT16_C( 8685), -INT16_C( 11129), -INT16_C( 28269) },
{ INT16_C( 23848), INT16_C( 23126), -INT16_C( 24759), INT16_C( 29189), INT16_C( 23386), INT16_C( 8337), INT16_C( 16016), INT16_C( 21143) },
},
},
{ { INT16_C( 3116), INT16_C( 5134), -INT16_C( 26994), -INT16_C( 18456), INT16_C( 13043), INT16_C( 19798), -INT16_C( 6515), -INT16_C( 10100) },
{ -INT16_C( 21194), INT16_C( 18704), -INT16_C( 23669), -INT16_C( 7718), -INT16_C( 8194), -INT16_C( 28844), -INT16_C( 5376), INT16_C( 11489) },
{
{ INT16_C( 3116), -INT16_C( 21194), INT16_C( 5134), INT16_C( 18704), -INT16_C( 26994), -INT16_C( 23669), -INT16_C( 18456), -INT16_C( 7718) },
{ INT16_C( 13043), -INT16_C( 8194), INT16_C( 19798), -INT16_C( 28844), -INT16_C( 6515), -INT16_C( 5376), -INT16_C( 10100), INT16_C( 11489) },
},
},
{ { -INT16_C( 3849), -INT16_C( 31168), INT16_C( 10630), INT16_C( 31037), -INT16_C( 27813), -INT16_C( 5946), INT16_C( 21113), -INT16_C( 20544) },
{ -INT16_C( 11777), -INT16_C( 29703), -INT16_C( 11404), INT16_C( 29292), -INT16_C( 16205), -INT16_C( 19710), -INT16_C( 7252), -INT16_C( 23585) },
{
{ -INT16_C( 3849), -INT16_C( 11777), -INT16_C( 31168), -INT16_C( 29703), INT16_C( 10630), -INT16_C( 11404), INT16_C( 31037), INT16_C( 29292) },
{ -INT16_C( 27813), -INT16_C( 16205), -INT16_C( 5946), -INT16_C( 19710), INT16_C( 21113), -INT16_C( 7252), -INT16_C( 20544), -INT16_C( 23585) },
},
},
{ { INT16_C( 8147), INT16_C( 22825), INT16_C( 26184), -INT16_C( 23598), -INT16_C( 26119), INT16_C( 29324), INT16_C( 19691), -INT16_C( 5342) },
{ INT16_C( 6941), -INT16_C( 28042), -INT16_C( 7442), -INT16_C( 24316), INT16_C( 1699), INT16_C( 20308), INT16_C( 13290), -INT16_C( 16910) },
{
{ INT16_C( 8147), INT16_C( 6941), INT16_C( 22825), -INT16_C( 28042), INT16_C( 26184), -INT16_C( 7442), -INT16_C( 23598), -INT16_C( 24316) },
{ -INT16_C( 26119), INT16_C( 1699), INT16_C( 29324), INT16_C( 20308), INT16_C( 19691), INT16_C( 13290), -INT16_C( 5342), -INT16_C( 16910) },
},
},
{ { INT16_C( 7251), -INT16_C( 25833), -INT16_C( 5758), INT16_C( 31807), -INT16_C( 13438), INT16_C( 28398), INT16_C( 4119), INT16_C( 13657) },
{ -INT16_C( 12501), INT16_C( 6855), -INT16_C( 13391), INT16_C( 21691), INT16_C( 4306), -INT16_C( 17245), -INT16_C( 27069), -INT16_C( 27015) },
{
{ INT16_C( 7251), -INT16_C( 12501), -INT16_C( 25833), INT16_C( 6855), -INT16_C( 5758), -INT16_C( 13391), INT16_C( 31807), INT16_C( 21691) },
{ -INT16_C( 13438), INT16_C( 4306), INT16_C( 28398), -INT16_C( 17245), INT16_C( 4119), -INT16_C( 27069), INT16_C( 13657), -INT16_C( 27015) },
},
},
{ { -INT16_C( 28494), INT16_C( 13362), INT16_C( 29050), -INT16_C( 848), -INT16_C( 24772), INT16_C( 21354), -INT16_C( 15441), -INT16_C( 9336) },
{ INT16_C( 20370), INT16_C( 17653), -INT16_C( 20453), -INT16_C( 4712), INT16_C( 15552), INT16_C( 1193), INT16_C( 8914), -INT16_C( 31590) },
{
{ -INT16_C( 28494), INT16_C( 20370), INT16_C( 13362), INT16_C( 17653), INT16_C( 29050), -INT16_C( 20453), -INT16_C( 848), -INT16_C( 4712) },
{ -INT16_C( 24772), INT16_C( 15552), INT16_C( 21354), INT16_C( 1193), -INT16_C( 15441), INT16_C( 8914), -INT16_C( 9336), -INT16_C( 31590) },
},
},
{ { -INT16_C( 13133), INT16_C( 11704), INT16_C( 26941), INT16_C( 31017), -INT16_C( 27640), -INT16_C( 18483), INT16_C( 21847), -INT16_C( 5486) },
{ -INT16_C( 30811), -INT16_C( 16338), -INT16_C( 14792), -INT16_C( 1875), INT16_C( 22018), -INT16_C( 11012), -INT16_C( 26760), INT16_C( 11096) },
{
{ -INT16_C( 13133), -INT16_C( 30811), INT16_C( 11704), -INT16_C( 16338), INT16_C( 26941), -INT16_C( 14792), INT16_C( 31017), -INT16_C( 1875) },
{ -INT16_C( 27640), INT16_C( 22018), -INT16_C( 18483), -INT16_C( 11012), INT16_C( 21847), -INT16_C( 26760), -INT16_C( 5486), INT16_C( 11096) },
},
},
{ { INT16_C( 4451), -INT16_C( 24232), -INT16_C( 32134), -INT16_C( 32230), -INT16_C( 6378), INT16_C( 27961), -INT16_C( 13251), -INT16_C( 7593) },
{ -INT16_C( 31405), -INT16_C( 29790), INT16_C( 20300), INT16_C( 20100), -INT16_C( 32603), INT16_C( 7459), INT16_C( 31511), INT16_C( 31561) },
{
{ INT16_C( 4451), -INT16_C( 31405), -INT16_C( 24232), -INT16_C( 29790), -INT16_C( 32134), INT16_C( 20300), -INT16_C( 32230), INT16_C( 20100) },
{ -INT16_C( 6378), -INT16_C( 32603), INT16_C( 27961), INT16_C( 7459), -INT16_C( 13251), INT16_C( 31511), -INT16_C( 7593), INT16_C( 31561) },
},
},
};
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_int16x8x2_t r = simde_vzipq_s16(a, b);
simde_test_arm_neon_assert_equal_i16x8(r.val[0], simde_vld1q_s16(test_vec[i].r[0]));
simde_test_arm_neon_assert_equal_i16x8(r.val[1], simde_vld1q_s16(test_vec[i].r[1]));
}
return 0;
#else
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_int16x8x2_t c = simde_vzipq_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_i16x8x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzipq_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int32_t a[4];
int32_t b[4];
int32_t r[2][4];
} test_vec[] = {
{ { -INT32_C( 99917994), -INT32_C( 280558692), INT32_C( 308406472), -INT32_C( 1858489826) },
{ INT32_C( 758961887), -INT32_C( 1062247511), -INT32_C( 830256915), INT32_C( 425864131) },
{
{ -INT32_C( 99917994), INT32_C( 758961887), -INT32_C( 280558692), -INT32_C( 1062247511) },
{ INT32_C( 308406472), -INT32_C( 830256915), -INT32_C( 1858489826), INT32_C( 425864131) },
},
},
{ { INT32_C( 638807690), INT32_C( 957700977), INT32_C( 1632400963), INT32_C( 133334312) },
{ INT32_C( 87371355), INT32_C( 2126898321), -INT32_C( 280213460), -INT32_C( 49696909) },
{
{ INT32_C( 638807690), INT32_C( 87371355), INT32_C( 957700977), INT32_C( 2126898321) },
{ INT32_C( 1632400963), -INT32_C( 280213460), INT32_C( 133334312), -INT32_C( 49696909) },
},
},
{ { -INT32_C( 1910236131), -INT32_C( 1161348745), -INT32_C( 669314128), -INT32_C( 186642791) },
{ -INT32_C( 822536900), INT32_C( 642563833), INT32_C( 2048235783), INT32_C( 1702370888) },
{
{ -INT32_C( 1910236131), -INT32_C( 822536900), -INT32_C( 1161348745), INT32_C( 642563833) },
{ -INT32_C( 669314128), INT32_C( 2048235783), -INT32_C( 186642791), INT32_C( 1702370888) },
},
},
{ { -INT32_C( 1292657605), -INT32_C( 2056406315), INT32_C( 1734248654), -INT32_C( 748994922) },
{ INT32_C( 1285641555), INT32_C( 443739411), -INT32_C( 829060986), -INT32_C( 516747866) },
{
{ -INT32_C( 1292657605), INT32_C( 1285641555), -INT32_C( 2056406315), INT32_C( 443739411) },
{ INT32_C( 1734248654), -INT32_C( 829060986), -INT32_C( 748994922), -INT32_C( 516747866) },
},
},
{ { INT32_C( 2123638441), -INT32_C( 1358691871), INT32_C( 538337929), -INT32_C( 202149472) },
{ -INT32_C( 633367354), INT32_C( 150254209), -INT32_C( 522811078), INT32_C( 1069681302) },
{
{ INT32_C( 2123638441), -INT32_C( 633367354), -INT32_C( 1358691871), INT32_C( 150254209) },
{ INT32_C( 538337929), -INT32_C( 522811078), -INT32_C( 202149472), INT32_C( 1069681302) },
},
},
{ { INT32_C( 297686576), -INT32_C( 524238249), -INT32_C( 1006578140), INT32_C( 246936392) },
{ INT32_C( 166262407), -INT32_C( 502145624), -INT32_C( 37492890), INT32_C( 574391793) },
{
{ INT32_C( 297686576), INT32_C( 166262407), -INT32_C( 524238249), -INT32_C( 502145624) },
{ -INT32_C( 1006578140), -INT32_C( 37492890), INT32_C( 246936392), INT32_C( 574391793) },
},
},
{ { INT32_C( 842267355), -INT32_C( 535628612), INT32_C( 312742858), -INT32_C( 1910416634) },
{ -INT32_C( 90764974), INT32_C( 1306372326), -INT32_C( 2125815665), INT32_C( 10716709) },
{
{ INT32_C( 842267355), -INT32_C( 90764974), -INT32_C( 535628612), INT32_C( 1306372326) },
{ INT32_C( 312742858), -INT32_C( 2125815665), -INT32_C( 1910416634), INT32_C( 10716709) },
},
},
{ { INT32_C( 1026741889), -INT32_C( 1793178422), INT32_C( 1588052567), INT32_C( 1894565918) },
{ -INT32_C( 1200978990), -INT32_C( 1174059221), INT32_C( 205213671), INT32_C( 1460461270) },
{
{ INT32_C( 1026741889), -INT32_C( 1200978990), -INT32_C( 1793178422), -INT32_C( 1174059221) },
{ INT32_C( 1588052567), INT32_C( 205213671), INT32_C( 1894565918), INT32_C( 1460461270) },
},
},
};
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_int32x4x2_t r = simde_vzipq_s32(a, b);
simde_test_arm_neon_assert_equal_i32x4(r.val[0], simde_vld1q_s32(test_vec[i].r[0]));
simde_test_arm_neon_assert_equal_i32x4(r.val[1], simde_vld1q_s32(test_vec[i].r[1]));
}
return 0;
#else
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_int32x4x2_t c = simde_vzipq_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_i32x4x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzipq_u8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint8_t a[16];
uint8_t b[16];
uint8_t r[2][16];
} test_vec[] = {
{ { UINT8_C(183), UINT8_C(104), UINT8_C(229), UINT8_C(148), UINT8_C(145), UINT8_C( 93), UINT8_C(206), UINT8_C( 25),
UINT8_C(179), UINT8_C(235), UINT8_C(112), UINT8_C( 10), UINT8_C( 54), UINT8_C(251), UINT8_C(230), UINT8_C(234) },
{ UINT8_C(252), UINT8_C( 45), UINT8_C( 96), UINT8_C(130), UINT8_C(187), UINT8_C( 4), UINT8_C(186), UINT8_C( 78),
UINT8_C( 95), UINT8_C( 69), UINT8_C(242), UINT8_C(216), UINT8_C(128), UINT8_C(201), UINT8_C(251), UINT8_C( 55) },
{
{ UINT8_C(183), UINT8_C(252), UINT8_C(104), UINT8_C( 45), UINT8_C(229), UINT8_C( 96), UINT8_C(148), UINT8_C(130),
UINT8_C(145), UINT8_C(187), UINT8_C( 93), UINT8_C( 4), UINT8_C(206), UINT8_C(186), UINT8_C( 25), UINT8_C( 78) },
{ UINT8_C(179), UINT8_C( 95), UINT8_C(235), UINT8_C( 69), UINT8_C(112), UINT8_C(242), UINT8_C( 10), UINT8_C(216),
UINT8_C( 54), UINT8_C(128), UINT8_C(251), UINT8_C(201), UINT8_C(230), UINT8_C(251), UINT8_C(234), UINT8_C( 55) },
},
},
{ { UINT8_C( 49), UINT8_C(224), UINT8_C(203), UINT8_C(195), UINT8_C( 61), UINT8_C(153), UINT8_C(220), UINT8_C(240),
UINT8_C(132), UINT8_C( 76), UINT8_C(251), UINT8_C(187), UINT8_C( 71), UINT8_C(225), UINT8_C(165), UINT8_C( 68) },
{ UINT8_C( 15), UINT8_C( 5), UINT8_C(198), UINT8_C(202), UINT8_C( 9), UINT8_C(128), UINT8_C( 24), UINT8_C(104),
UINT8_C(198), UINT8_C( 10), UINT8_C( 64), UINT8_C( 70), UINT8_C(211), UINT8_C( 59), UINT8_C(125), UINT8_C( 5) },
{
{ UINT8_C( 49), UINT8_C( 15), UINT8_C(224), UINT8_C( 5), UINT8_C(203), UINT8_C(198), UINT8_C(195), UINT8_C(202),
UINT8_C( 61), UINT8_C( 9), UINT8_C(153), UINT8_C(128), UINT8_C(220), UINT8_C( 24), UINT8_C(240), UINT8_C(104) },
{ UINT8_C(132), UINT8_C(198), UINT8_C( 76), UINT8_C( 10), UINT8_C(251), UINT8_C( 64), UINT8_C(187), UINT8_C( 70),
UINT8_C( 71), UINT8_C(211), UINT8_C(225), UINT8_C( 59), UINT8_C(165), UINT8_C(125), UINT8_C( 68), UINT8_C( 5) },
},
},
{ { UINT8_C( 27), UINT8_C( 72), UINT8_C(200), UINT8_C( 88), UINT8_C(225), UINT8_C(164), UINT8_C( 73), UINT8_C(102),
UINT8_C(240), UINT8_C( 68), UINT8_C( 33), UINT8_C( 55), UINT8_C( 37), UINT8_C(198), UINT8_C(123), UINT8_C( 52) },
{ UINT8_C(203), UINT8_C( 66), UINT8_MAX, UINT8_C(213), UINT8_C(194), UINT8_C( 23), UINT8_C( 61), UINT8_C(136),
UINT8_C( 34), UINT8_C(126), UINT8_C(206), UINT8_C(245), UINT8_C(185), UINT8_C( 75), UINT8_C(250), UINT8_C(213) },
{
{ UINT8_C( 27), UINT8_C(203), UINT8_C( 72), UINT8_C( 66), UINT8_C(200), UINT8_MAX, UINT8_C( 88), UINT8_C(213),
UINT8_C(225), UINT8_C(194), UINT8_C(164), UINT8_C( 23), UINT8_C( 73), UINT8_C( 61), UINT8_C(102), UINT8_C(136) },
{ UINT8_C(240), UINT8_C( 34), UINT8_C( 68), UINT8_C(126), UINT8_C( 33), UINT8_C(206), UINT8_C( 55), UINT8_C(245),
UINT8_C( 37), UINT8_C(185), UINT8_C(198), UINT8_C( 75), UINT8_C(123), UINT8_C(250), UINT8_C( 52), UINT8_C(213) },
},
},
{ { UINT8_C(147), UINT8_C(194), UINT8_C( 45), UINT8_C(117), UINT8_C(102), UINT8_C(118), UINT8_C(219), UINT8_C( 86),
UINT8_C(186), UINT8_C(252), UINT8_C(142), UINT8_C(224), UINT8_C(194), UINT8_C( 9), UINT8_C( 20), UINT8_C(141) },
{ UINT8_C( 75), UINT8_C( 19), UINT8_C( 98), UINT8_C( 14), UINT8_C( 43), UINT8_C(160), UINT8_C(150), UINT8_C( 77),
UINT8_C( 30), UINT8_C(101), UINT8_C( 66), UINT8_C(215), UINT8_C(176), UINT8_C( 61), UINT8_C(172), UINT8_C( 68) },
{
{ UINT8_C(147), UINT8_C( 75), UINT8_C(194), UINT8_C( 19), UINT8_C( 45), UINT8_C( 98), UINT8_C(117), UINT8_C( 14),
UINT8_C(102), UINT8_C( 43), UINT8_C(118), UINT8_C(160), UINT8_C(219), UINT8_C(150), UINT8_C( 86), UINT8_C( 77) },
{ UINT8_C(186), UINT8_C( 30), UINT8_C(252), UINT8_C(101), UINT8_C(142), UINT8_C( 66), UINT8_C(224), UINT8_C(215),
UINT8_C(194), UINT8_C(176), UINT8_C( 9), UINT8_C( 61), UINT8_C( 20), UINT8_C(172), UINT8_C(141), UINT8_C( 68) },
},
},
{ { UINT8_MAX, UINT8_C(218), UINT8_C(185), UINT8_C(102), UINT8_C( 80), UINT8_C(148), UINT8_C(188), UINT8_C( 11),
UINT8_C(144), UINT8_C( 74), UINT8_C(235), UINT8_C( 82), UINT8_C( 84), UINT8_MAX, UINT8_C(223), UINT8_C(159) },
{ UINT8_C( 19), UINT8_C( 66), UINT8_C(173), UINT8_C( 62), UINT8_C(226), UINT8_C( 68), UINT8_C(139), UINT8_C( 0),
UINT8_C(169), UINT8_C(205), UINT8_C(215), UINT8_C( 89), UINT8_C( 10), UINT8_C(132), UINT8_C(157), UINT8_C( 10) },
{
{ UINT8_MAX, UINT8_C( 19), UINT8_C(218), UINT8_C( 66), UINT8_C(185), UINT8_C(173), UINT8_C(102), UINT8_C( 62),
UINT8_C( 80), UINT8_C(226), UINT8_C(148), UINT8_C( 68), UINT8_C(188), UINT8_C(139), UINT8_C( 11), UINT8_C( 0) },
{ UINT8_C(144), UINT8_C(169), UINT8_C( 74), UINT8_C(205), UINT8_C(235), UINT8_C(215), UINT8_C( 82), UINT8_C( 89),
UINT8_C( 84), UINT8_C( 10), UINT8_MAX, UINT8_C(132), UINT8_C(223), UINT8_C(157), UINT8_C(159), UINT8_C( 10) },
},
},
{ { UINT8_C( 94), UINT8_C( 86), UINT8_C(112), UINT8_C(174), UINT8_C(234), UINT8_C( 44), UINT8_C(185), UINT8_C(122),
UINT8_C(119), UINT8_C(164), UINT8_C(204), UINT8_C(203), UINT8_C(164), UINT8_C(172), UINT8_C(106), UINT8_C(183) },
{ UINT8_C(238), UINT8_C( 24), UINT8_C(245), UINT8_C(208), UINT8_C( 92), UINT8_C(128), UINT8_C(208), UINT8_C( 5),
UINT8_C( 77), UINT8_C(167), UINT8_C( 94), UINT8_C( 88), UINT8_C( 43), UINT8_C(252), UINT8_C( 98), UINT8_C(137) },
{
{ UINT8_C( 94), UINT8_C(238), UINT8_C( 86), UINT8_C( 24), UINT8_C(112), UINT8_C(245), UINT8_C(174), UINT8_C(208),
UINT8_C(234), UINT8_C( 92), UINT8_C( 44), UINT8_C(128), UINT8_C(185), UINT8_C(208), UINT8_C(122), UINT8_C( 5) },
{ UINT8_C(119), UINT8_C( 77), UINT8_C(164), UINT8_C(167), UINT8_C(204), UINT8_C( 94), UINT8_C(203), UINT8_C( 88),
UINT8_C(164), UINT8_C( 43), UINT8_C(172), UINT8_C(252), UINT8_C(106), UINT8_C( 98), UINT8_C(183), UINT8_C(137) },
},
},
{ { UINT8_C( 82), UINT8_C(210), UINT8_C( 56), UINT8_C( 61), UINT8_C(254), UINT8_C(241), UINT8_C(183), UINT8_C(117),
UINT8_C(150), UINT8_C(132), UINT8_C( 64), UINT8_C( 58), UINT8_C( 48), UINT8_C(171), UINT8_C(241), UINT8_C( 30) },
{ UINT8_C(195), UINT8_C(230), UINT8_C(238), UINT8_C( 31), UINT8_C(102), UINT8_C(190), UINT8_C( 36), UINT8_C(179),
UINT8_C(101), UINT8_C(130), UINT8_C( 11), UINT8_C(145), UINT8_C(126), UINT8_C(109), UINT8_C( 26), UINT8_C(209) },
{
{ UINT8_C( 82), UINT8_C(195), UINT8_C(210), UINT8_C(230), UINT8_C( 56), UINT8_C(238), UINT8_C( 61), UINT8_C( 31),
UINT8_C(254), UINT8_C(102), UINT8_C(241), UINT8_C(190), UINT8_C(183), UINT8_C( 36), UINT8_C(117), UINT8_C(179) },
{ UINT8_C(150), UINT8_C(101), UINT8_C(132), UINT8_C(130), UINT8_C( 64), UINT8_C( 11), UINT8_C( 58), UINT8_C(145),
UINT8_C( 48), UINT8_C(126), UINT8_C(171), UINT8_C(109), UINT8_C(241), UINT8_C( 26), UINT8_C( 30), UINT8_C(209) },
},
},
{ { UINT8_C( 63), UINT8_C( 82), UINT8_C( 14), UINT8_C( 62), UINT8_C( 68), UINT8_C(197), UINT8_C(179), UINT8_C(218),
UINT8_C( 73), UINT8_C(244), UINT8_C( 20), UINT8_C(121), UINT8_C(159), UINT8_C( 5), UINT8_C(151), UINT8_C( 98) },
{ UINT8_C(235), UINT8_C(133), UINT8_C(129), UINT8_C( 81), UINT8_C( 67), UINT8_C(165), UINT8_C( 4), UINT8_C(169),
UINT8_C( 39), UINT8_C( 16), UINT8_C( 58), UINT8_C(166), UINT8_C(125), UINT8_C( 84), UINT8_C(119), UINT8_C(189) },
{
{ UINT8_C( 63), UINT8_C(235), UINT8_C( 82), UINT8_C(133), UINT8_C( 14), UINT8_C(129), UINT8_C( 62), UINT8_C( 81),
UINT8_C( 68), UINT8_C( 67), UINT8_C(197), UINT8_C(165), UINT8_C(179), UINT8_C( 4), UINT8_C(218), UINT8_C(169) },
{ UINT8_C( 73), UINT8_C( 39), UINT8_C(244), UINT8_C( 16), UINT8_C( 20), UINT8_C( 58), UINT8_C(121), UINT8_C(166),
UINT8_C(159), UINT8_C(125), UINT8_C( 5), UINT8_C( 84), UINT8_C(151), UINT8_C(119), UINT8_C( 98), UINT8_C(189) },
},
},
};
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_uint8x16x2_t r = simde_vzipq_u8(a, b);
simde_test_arm_neon_assert_equal_u8x16(r.val[0], simde_vld1q_u8(test_vec[i].r[0]));
simde_test_arm_neon_assert_equal_u8x16(r.val[1], simde_vld1q_u8(test_vec[i].r[1]));
}
return 0;
#else
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_uint8x16x2_t c = simde_vzipq_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_u8x16x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzipq_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint16_t a[8];
uint16_t b[8];
uint16_t r[2][8];
} test_vec[] = {
{ { UINT16_C(36776), UINT16_C(50991), UINT16_C(55785), UINT16_C( 4670), UINT16_C(53567), UINT16_C(64246), UINT16_C(18557), UINT16_C(28447) },
{ UINT16_C(38812), UINT16_C(39983), UINT16_C(53745), UINT16_C(29110), UINT16_C(47188), UINT16_C(39243), UINT16_C(50912), UINT16_C(34824) },
{
{ UINT16_C(36776), UINT16_C(38812), UINT16_C(50991), UINT16_C(39983), UINT16_C(55785), UINT16_C(53745), UINT16_C( 4670), UINT16_C(29110) },
{ UINT16_C(53567), UINT16_C(47188), UINT16_C(64246), UINT16_C(39243), UINT16_C(18557), UINT16_C(50912), UINT16_C(28447), UINT16_C(34824) },
},
},
{ { UINT16_C(14166), UINT16_C(16207), UINT16_C(36113), UINT16_C(20561), UINT16_C(18271), UINT16_C(56394), UINT16_C(27280), UINT16_C(11339) },
{ UINT16_C(31233), UINT16_C(62408), UINT16_C(32331), UINT16_C(41060), UINT16_C(44854), UINT16_C( 5945), UINT16_C(16758), UINT16_C(52383) },
{
{ UINT16_C(14166), UINT16_C(31233), UINT16_C(16207), UINT16_C(62408), UINT16_C(36113), UINT16_C(32331), UINT16_C(20561), UINT16_C(41060) },
{ UINT16_C(18271), UINT16_C(44854), UINT16_C(56394), UINT16_C( 5945), UINT16_C(27280), UINT16_C(16758), UINT16_C(11339), UINT16_C(52383) },
},
},
{ { UINT16_C(61304), UINT16_C(35083), UINT16_C(23932), UINT16_C(56282), UINT16_C( 9380), UINT16_C(13496), UINT16_C( 910), UINT16_C(36961) },
{ UINT16_C(10622), UINT16_C(51587), UINT16_C(59304), UINT16_C(56937), UINT16_C(41623), UINT16_C( 3573), UINT16_C(38371), UINT16_C(23769) },
{
{ UINT16_C(61304), UINT16_C(10622), UINT16_C(35083), UINT16_C(51587), UINT16_C(23932), UINT16_C(59304), UINT16_C(56282), UINT16_C(56937) },
{ UINT16_C( 9380), UINT16_C(41623), UINT16_C(13496), UINT16_C( 3573), UINT16_C( 910), UINT16_C(38371), UINT16_C(36961), UINT16_C(23769) },
},
},
{ { UINT16_C(58500), UINT16_C( 229), UINT16_C(48961), UINT16_C(59100), UINT16_C(38116), UINT16_C(29210), UINT16_C(31639), UINT16_C( 5378) },
{ UINT16_C(34213), UINT16_C(19935), UINT16_C(18541), UINT16_C( 1067), UINT16_C( 8683), UINT16_C(52753), UINT16_C(60086), UINT16_C(14890) },
{
{ UINT16_C(58500), UINT16_C(34213), UINT16_C( 229), UINT16_C(19935), UINT16_C(48961), UINT16_C(18541), UINT16_C(59100), UINT16_C( 1067) },
{ UINT16_C(38116), UINT16_C( 8683), UINT16_C(29210), UINT16_C(52753), UINT16_C(31639), UINT16_C(60086), UINT16_C( 5378), UINT16_C(14890) },
},
},
{ { UINT16_C( 4302), UINT16_C( 4154), UINT16_C( 5839), UINT16_C(46070), UINT16_C( 4266), UINT16_C(16934), UINT16_C(10380), UINT16_C(12631) },
{ UINT16_C(13998), UINT16_C( 7038), UINT16_C(43391), UINT16_C(27167), UINT16_C(12490), UINT16_C(32824), UINT16_C(25370), UINT16_C(59578) },
{
{ UINT16_C( 4302), UINT16_C(13998), UINT16_C( 4154), UINT16_C( 7038), UINT16_C( 5839), UINT16_C(43391), UINT16_C(46070), UINT16_C(27167) },
{ UINT16_C( 4266), UINT16_C(12490), UINT16_C(16934), UINT16_C(32824), UINT16_C(10380), UINT16_C(25370), UINT16_C(12631), UINT16_C(59578) },
},
},
{ { UINT16_C(62835), UINT16_C(17144), UINT16_C(60939), UINT16_C(46838), UINT16_C( 7423), UINT16_C(35832), UINT16_C(20292), UINT16_C(62140) },
{ UINT16_C(14982), UINT16_C( 1293), UINT16_C(11491), UINT16_C(44655), UINT16_C(42844), UINT16_C(30254), UINT16_C(59658), UINT16_C(32095) },
{
{ UINT16_C(62835), UINT16_C(14982), UINT16_C(17144), UINT16_C( 1293), UINT16_C(60939), UINT16_C(11491), UINT16_C(46838), UINT16_C(44655) },
{ UINT16_C( 7423), UINT16_C(42844), UINT16_C(35832), UINT16_C(30254), UINT16_C(20292), UINT16_C(59658), UINT16_C(62140), UINT16_C(32095) },
},
},
{ { UINT16_C(22494), UINT16_C(59840), UINT16_C(46662), UINT16_C(17823), UINT16_C(38866), UINT16_C( 5840), UINT16_C(36071), UINT16_C(27913) },
{ UINT16_C( 5830), UINT16_C(43378), UINT16_C(57667), UINT16_C(40791), UINT16_C(34440), UINT16_C(37654), UINT16_C(30063), UINT16_C(19728) },
{
{ UINT16_C(22494), UINT16_C( 5830), UINT16_C(59840), UINT16_C(43378), UINT16_C(46662), UINT16_C(57667), UINT16_C(17823), UINT16_C(40791) },
{ UINT16_C(38866), UINT16_C(34440), UINT16_C( 5840), UINT16_C(37654), UINT16_C(36071), UINT16_C(30063), UINT16_C(27913), UINT16_C(19728) },
},
},
{ { UINT16_C(53452), UINT16_C( 4662), UINT16_C(54918), UINT16_C(22615), UINT16_C(10093), UINT16_C(21615), UINT16_C(30899), UINT16_C(31169) },
{ UINT16_C(13198), UINT16_C(53539), UINT16_C(31252), UINT16_C(40305), UINT16_C(34560), UINT16_C(28464), UINT16_C(16636), UINT16_C(51388) },
{
{ UINT16_C(53452), UINT16_C(13198), UINT16_C( 4662), UINT16_C(53539), UINT16_C(54918), UINT16_C(31252), UINT16_C(22615), UINT16_C(40305) },
{ UINT16_C(10093), UINT16_C(34560), UINT16_C(21615), UINT16_C(28464), UINT16_C(30899), UINT16_C(16636), UINT16_C(31169), UINT16_C(51388) },
},
},
};
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_uint16x8x2_t r = simde_vzipq_u16(a, b);
simde_test_arm_neon_assert_equal_u16x8(r.val[0], simde_vld1q_u16(test_vec[i].r[0]));
simde_test_arm_neon_assert_equal_u16x8(r.val[1], simde_vld1q_u16(test_vec[i].r[1]));
}
return 0;
#else
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_uint16x8x2_t c = simde_vzipq_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_u16x8x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzipq_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint32_t a[4];
uint32_t b[4];
uint32_t r[2][4];
} test_vec[] = {
{ { UINT32_C(4087665949), UINT32_C(3816891322), UINT32_C(3003239570), UINT32_C(1218963958) },
{ UINT32_C(3855336699), UINT32_C(2367470621), UINT32_C(2238585450), UINT32_C(2997669013) },
{
{ UINT32_C(4087665949), UINT32_C(3855336699), UINT32_C(3816891322), UINT32_C(2367470621) },
{ UINT32_C(3003239570), UINT32_C(2238585450), UINT32_C(1218963958), UINT32_C(2997669013) },
},
},
{ { UINT32_C(1554403489), UINT32_C( 104802163), UINT32_C(3921232115), UINT32_C( 607215657) },
{ UINT32_C(1091239204), UINT32_C( 617555641), UINT32_C(3601415489), UINT32_C(2877904137) },
{
{ UINT32_C(1554403489), UINT32_C(1091239204), UINT32_C( 104802163), UINT32_C( 617555641) },
{ UINT32_C(3921232115), UINT32_C(3601415489), UINT32_C( 607215657), UINT32_C(2877904137) },
},
},
{ { UINT32_C( 419901350), UINT32_C(1243563606), UINT32_C(2939410566), UINT32_C(1574135096) },
{ UINT32_C( 463396194), UINT32_C(1161784580), UINT32_C(3021728171), UINT32_C(3831473214) },
{
{ UINT32_C( 419901350), UINT32_C( 463396194), UINT32_C(1243563606), UINT32_C(1161784580) },
{ UINT32_C(2939410566), UINT32_C(3021728171), UINT32_C(1574135096), UINT32_C(3831473214) },
},
},
{ { UINT32_C( 721315539), UINT32_C( 846470572), UINT32_C( 786540534), UINT32_C(1854649612) },
{ UINT32_C(2525637266), UINT32_C(1121700247), UINT32_C(4059559858), UINT32_C(1876252315) },
{
{ UINT32_C( 721315539), UINT32_C(2525637266), UINT32_C( 846470572), UINT32_C(1121700247) },
{ UINT32_C( 786540534), UINT32_C(4059559858), UINT32_C(1854649612), UINT32_C(1876252315) },
},
},
{ { UINT32_C(1771688893), UINT32_C(3885764081), UINT32_C(3239411124), UINT32_C(3308233010) },
{ UINT32_C(1650178507), UINT32_C( 900020099), UINT32_C(3374750766), UINT32_C(2939747570) },
{
{ UINT32_C(1771688893), UINT32_C(1650178507), UINT32_C(3885764081), UINT32_C( 900020099) },
{ UINT32_C(3239411124), UINT32_C(3374750766), UINT32_C(3308233010), UINT32_C(2939747570) },
},
},
{ { UINT32_C(3222917583), UINT32_C(2477241822), UINT32_C(1700052274), UINT32_C( 690651998) },
{ UINT32_C(3230369085), UINT32_C(3941937340), UINT32_C(3216252108), UINT32_C(3882806296) },
{
{ UINT32_C(3222917583), UINT32_C(3230369085), UINT32_C(2477241822), UINT32_C(3941937340) },
{ UINT32_C(1700052274), UINT32_C(3216252108), UINT32_C( 690651998), UINT32_C(3882806296) },
},
},
{ { UINT32_C(2628290494), UINT32_C(1865371452), UINT32_C(1792312076), UINT32_C(1150549511) },
{ UINT32_C(1074012035), UINT32_C( 472578383), UINT32_C( 769383957), UINT32_C(2299873739) },
{
{ UINT32_C(2628290494), UINT32_C(1074012035), UINT32_C(1865371452), UINT32_C( 472578383) },
{ UINT32_C(1792312076), UINT32_C( 769383957), UINT32_C(1150549511), UINT32_C(2299873739) },
},
},
{ { UINT32_C( 220577233), UINT32_C( 427578636), UINT32_C(3749925080), UINT32_C(3525515086) },
{ UINT32_C(2232559414), UINT32_C( 916536353), UINT32_C(3865345051), UINT32_C(2540665286) },
{
{ UINT32_C( 220577233), UINT32_C(2232559414), UINT32_C( 427578636), UINT32_C( 916536353) },
{ UINT32_C(3749925080), UINT32_C(3865345051), UINT32_C(3525515086), UINT32_C(2540665286) },
},
},
};
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_uint32x4x2_t r = simde_vzipq_u32(a, b);
simde_test_arm_neon_assert_equal_u32x4(r.val[0], simde_vld1q_u32(test_vec[i].r[0]));
simde_test_arm_neon_assert_equal_u32x4(r.val[1], simde_vld1q_u32(test_vec[i].r[1]));
}
return 0;
#else
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_uint32x4x2_t c = simde_vzipq_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_u32x4x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip_p8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_poly8_t a[8];
simde_poly8_t b[8];
simde_poly8_t r[2][8];
} test_vec[] = {
{ { SIMDE_POLY8_C( 45), SIMDE_POLY8_C(117), SIMDE_POLY8_C(190), SIMDE_POLY8_C(201), SIMDE_POLY8_C( 7), SIMDE_POLY8_C(205), SIMDE_POLY8_C( 18), SIMDE_POLY8_C(175) },
{ SIMDE_POLY8_C( 25), SIMDE_POLY8_C( 6), SIMDE_POLY8_C(174), SIMDE_POLY8_C(106), SIMDE_POLY8_C( 95), SIMDE_POLY8_C( 1), SIMDE_POLY8_C( 19), SIMDE_POLY8_C(123) },
{
{ SIMDE_POLY8_C( 45), SIMDE_POLY8_C( 25), SIMDE_POLY8_C(117), SIMDE_POLY8_C( 6), SIMDE_POLY8_C(190), SIMDE_POLY8_C(174), SIMDE_POLY8_C(201), SIMDE_POLY8_C(106) },
{ SIMDE_POLY8_C( 7), SIMDE_POLY8_C( 95), SIMDE_POLY8_C(205), SIMDE_POLY8_C( 1), SIMDE_POLY8_C( 18), SIMDE_POLY8_C( 19), SIMDE_POLY8_C(175), SIMDE_POLY8_C(123) },
},
},
{ { SIMDE_POLY8_C( 28), SIMDE_POLY8_C( 48), SIMDE_POLY8_C( 25), SIMDE_POLY8_C( 23), SIMDE_POLY8_C( 60), SIMDE_POLY8_C(125), SIMDE_POLY8_C(102), SIMDE_POLY8_C( 12) },
{ SIMDE_POLY8_C(248), SIMDE_POLY8_C( 49), SIMDE_POLY8_C( 20), SIMDE_POLY8_C(252), SIMDE_POLY8_C(118), SIMDE_POLY8_C(241), SIMDE_POLY8_C(127), SIMDE_POLY8_C(163) },
{
{ SIMDE_POLY8_C( 28), SIMDE_POLY8_C(248), SIMDE_POLY8_C( 48), SIMDE_POLY8_C( 49), SIMDE_POLY8_C( 25), SIMDE_POLY8_C( 20), SIMDE_POLY8_C( 23), SIMDE_POLY8_C(252) },
{ SIMDE_POLY8_C( 60), SIMDE_POLY8_C(118), SIMDE_POLY8_C(125), SIMDE_POLY8_C(241), SIMDE_POLY8_C(102), SIMDE_POLY8_C(127), SIMDE_POLY8_C( 12), SIMDE_POLY8_C(163) },
},
},
{ { SIMDE_POLY8_C(102), SIMDE_POLY8_C( 61), SIMDE_POLY8_C(109), SIMDE_POLY8_C(109), SIMDE_POLY8_C( 10), SIMDE_POLY8_C(127), SIMDE_POLY8_C( 28), SIMDE_POLY8_C( 36) },
{ SIMDE_POLY8_C(134), SIMDE_POLY8_C(202), SIMDE_POLY8_C(142), SIMDE_POLY8_C(229), SIMDE_POLY8_C(204), SIMDE_POLY8_C(161), SIMDE_POLY8_C( 96), SIMDE_POLY8_C(232) },
{
{ SIMDE_POLY8_C(102), SIMDE_POLY8_C(134), SIMDE_POLY8_C( 61), SIMDE_POLY8_C(202), SIMDE_POLY8_C(109), SIMDE_POLY8_C(142), SIMDE_POLY8_C(109), SIMDE_POLY8_C(229) },
{ SIMDE_POLY8_C( 10), SIMDE_POLY8_C(204), SIMDE_POLY8_C(127), SIMDE_POLY8_C(161), SIMDE_POLY8_C( 28), SIMDE_POLY8_C( 96), SIMDE_POLY8_C( 36), SIMDE_POLY8_C(232) },
},
},
{ { SIMDE_POLY8_C(210), SIMDE_POLY8_C(121), SIMDE_POLY8_C(UINT8_MAX), SIMDE_POLY8_C( 14), SIMDE_POLY8_C(246), SIMDE_POLY8_C(101), SIMDE_POLY8_C( 27), SIMDE_POLY8_C(238) },
{ SIMDE_POLY8_C(150), SIMDE_POLY8_C( 47), SIMDE_POLY8_C(234), SIMDE_POLY8_C( 12), SIMDE_POLY8_C( 32), SIMDE_POLY8_C(105), SIMDE_POLY8_C(176), SIMDE_POLY8_C(135) },
{
{ SIMDE_POLY8_C(210), SIMDE_POLY8_C(150), SIMDE_POLY8_C(121), SIMDE_POLY8_C( 47), SIMDE_POLY8_C(UINT8_MAX), SIMDE_POLY8_C(234), SIMDE_POLY8_C( 14), SIMDE_POLY8_C( 12) },
{ SIMDE_POLY8_C(246), SIMDE_POLY8_C( 32), SIMDE_POLY8_C(101), SIMDE_POLY8_C(105), SIMDE_POLY8_C( 27), SIMDE_POLY8_C(176), SIMDE_POLY8_C(238), SIMDE_POLY8_C(135) },
},
},
{ { SIMDE_POLY8_C(167), SIMDE_POLY8_C( 29), SIMDE_POLY8_C(244), SIMDE_POLY8_C(177), SIMDE_POLY8_C(156), SIMDE_POLY8_C( 17), SIMDE_POLY8_C(213), SIMDE_POLY8_C( 34) },
{ SIMDE_POLY8_C(219), SIMDE_POLY8_C(100), SIMDE_POLY8_C( 7), SIMDE_POLY8_C(167), SIMDE_POLY8_C( 5), SIMDE_POLY8_C(103), SIMDE_POLY8_C(144), SIMDE_POLY8_C(215) },
{
{ SIMDE_POLY8_C(167), SIMDE_POLY8_C(219), SIMDE_POLY8_C( 29), SIMDE_POLY8_C(100), SIMDE_POLY8_C(244), SIMDE_POLY8_C( 7), SIMDE_POLY8_C(177), SIMDE_POLY8_C(167) },
{ SIMDE_POLY8_C(156), SIMDE_POLY8_C( 5), SIMDE_POLY8_C( 17), SIMDE_POLY8_C(103), SIMDE_POLY8_C(213), SIMDE_POLY8_C(144), SIMDE_POLY8_C( 34), SIMDE_POLY8_C(215) },
},
},
{ { SIMDE_POLY8_C(224), SIMDE_POLY8_C(143), SIMDE_POLY8_C(230), SIMDE_POLY8_C(214), SIMDE_POLY8_C(245), SIMDE_POLY8_C( 1), SIMDE_POLY8_C(196), SIMDE_POLY8_C(139) },
{ SIMDE_POLY8_C( 48), SIMDE_POLY8_C(174), SIMDE_POLY8_C(152), SIMDE_POLY8_C( 81), SIMDE_POLY8_C( 24), SIMDE_POLY8_C( 72), SIMDE_POLY8_C(216), SIMDE_POLY8_C(191) },
{
{ SIMDE_POLY8_C(224), SIMDE_POLY8_C( 48), SIMDE_POLY8_C(143), SIMDE_POLY8_C(174), SIMDE_POLY8_C(230), SIMDE_POLY8_C(152), SIMDE_POLY8_C(214), SIMDE_POLY8_C( 81) },
{ SIMDE_POLY8_C(245), SIMDE_POLY8_C( 24), SIMDE_POLY8_C( 1), SIMDE_POLY8_C( 72), SIMDE_POLY8_C(196), SIMDE_POLY8_C(216), SIMDE_POLY8_C(139), SIMDE_POLY8_C(191) },
},
},
{ { SIMDE_POLY8_C(101), SIMDE_POLY8_C(204), SIMDE_POLY8_C(112), SIMDE_POLY8_C( 1), SIMDE_POLY8_C(221), SIMDE_POLY8_C( 70), SIMDE_POLY8_C( 36), SIMDE_POLY8_C(185) },
{ SIMDE_POLY8_C(170), SIMDE_POLY8_C( 43), SIMDE_POLY8_C( 96), SIMDE_POLY8_C(175), SIMDE_POLY8_C(147), SIMDE_POLY8_C(240), SIMDE_POLY8_C(135), SIMDE_POLY8_C(115) },
{
{ SIMDE_POLY8_C(101), SIMDE_POLY8_C(170), SIMDE_POLY8_C(204), SIMDE_POLY8_C( 43), SIMDE_POLY8_C(112), SIMDE_POLY8_C( 96), SIMDE_POLY8_C( 1), SIMDE_POLY8_C(175) },
{ SIMDE_POLY8_C(221), SIMDE_POLY8_C(147), SIMDE_POLY8_C( 70), SIMDE_POLY8_C(240), SIMDE_POLY8_C( 36), SIMDE_POLY8_C(135), SIMDE_POLY8_C(185), SIMDE_POLY8_C(115) },
},
},
{ { SIMDE_POLY8_C(128), SIMDE_POLY8_C(109), SIMDE_POLY8_C( 74), SIMDE_POLY8_C(117), SIMDE_POLY8_C(110), SIMDE_POLY8_C( 14), SIMDE_POLY8_C( 0), SIMDE_POLY8_C(158) },
{ SIMDE_POLY8_C(189), SIMDE_POLY8_C(152), SIMDE_POLY8_C(239), SIMDE_POLY8_C(213), SIMDE_POLY8_C(224), SIMDE_POLY8_C(199), SIMDE_POLY8_C(148), SIMDE_POLY8_C( 69) },
{
{ SIMDE_POLY8_C(128), SIMDE_POLY8_C(189), SIMDE_POLY8_C(109), SIMDE_POLY8_C(152), SIMDE_POLY8_C( 74), SIMDE_POLY8_C(239), SIMDE_POLY8_C(117), SIMDE_POLY8_C(213) },
{ SIMDE_POLY8_C(110), SIMDE_POLY8_C(224), SIMDE_POLY8_C( 14), SIMDE_POLY8_C(199), SIMDE_POLY8_C( 0), SIMDE_POLY8_C(148), SIMDE_POLY8_C(158), SIMDE_POLY8_C( 69) },
},
},
};
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_poly8x8x2_t r = simde_vzip_p8(a, b);
simde_test_arm_neon_assert_equal_p8x8(r.val[0], simde_vld1_p8(test_vec[i].r[0]));
simde_test_arm_neon_assert_equal_p8x8(r.val[1], simde_vld1_p8(test_vec[i].r[1]));
}
return 0;
#else
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_poly8x8x2_t c = simde_vzip_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_p8x8x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzip_p16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_poly16_t a[4];
simde_poly16_t b[4];
simde_poly16_t r[2][4];
} test_vec[] = {
{ { SIMDE_POLY16_C(39442), SIMDE_POLY16_C(17230), SIMDE_POLY16_C(36311), SIMDE_POLY16_C(63975) },
{ SIMDE_POLY16_C(17092), SIMDE_POLY16_C(21998), SIMDE_POLY16_C(48945), SIMDE_POLY16_C( 9146) },
{
{ SIMDE_POLY16_C(39442), SIMDE_POLY16_C(17092), SIMDE_POLY16_C(17230), SIMDE_POLY16_C(21998) },
{ SIMDE_POLY16_C(36311), SIMDE_POLY16_C(48945), SIMDE_POLY16_C(63975), SIMDE_POLY16_C( 9146) },
},
},
{ { SIMDE_POLY16_C(23687), SIMDE_POLY16_C(28300), SIMDE_POLY16_C(30888), SIMDE_POLY16_C(65167) },
{ SIMDE_POLY16_C(17067), SIMDE_POLY16_C(55130), SIMDE_POLY16_C(36877), SIMDE_POLY16_C( 8076) },
{
{ SIMDE_POLY16_C(23687), SIMDE_POLY16_C(17067), SIMDE_POLY16_C(28300), SIMDE_POLY16_C(55130) },
{ SIMDE_POLY16_C(30888), SIMDE_POLY16_C(36877), SIMDE_POLY16_C(65167), SIMDE_POLY16_C( 8076) },
},
},
{ { SIMDE_POLY16_C(55850), SIMDE_POLY16_C( 611), SIMDE_POLY16_C(19047), SIMDE_POLY16_C(11515) },
{ SIMDE_POLY16_C(60044), SIMDE_POLY16_C(48769), SIMDE_POLY16_C(15273), SIMDE_POLY16_C(12513) },
{
{ SIMDE_POLY16_C(55850), SIMDE_POLY16_C(60044), SIMDE_POLY16_C( 611), SIMDE_POLY16_C(48769) },
{ SIMDE_POLY16_C(19047), SIMDE_POLY16_C(15273), SIMDE_POLY16_C(11515), SIMDE_POLY16_C(12513) },
},
},
{ { SIMDE_POLY16_C(28055), SIMDE_POLY16_C(16542), SIMDE_POLY16_C(11749), SIMDE_POLY16_C(36926) },
{ SIMDE_POLY16_C(39023), SIMDE_POLY16_C(32103), SIMDE_POLY16_C(62248), SIMDE_POLY16_C(21404) },
{
{ SIMDE_POLY16_C(28055), SIMDE_POLY16_C(39023), SIMDE_POLY16_C(16542), SIMDE_POLY16_C(32103) },
{ SIMDE_POLY16_C(11749), SIMDE_POLY16_C(62248), SIMDE_POLY16_C(36926), SIMDE_POLY16_C(21404) },
},
},
{ { SIMDE_POLY16_C(65485), SIMDE_POLY16_C(13653), SIMDE_POLY16_C(20553), SIMDE_POLY16_C(54881) },
{ SIMDE_POLY16_C(57914), SIMDE_POLY16_C(58260), SIMDE_POLY16_C(29982), SIMDE_POLY16_C(46356) },
{
{ SIMDE_POLY16_C(65485), SIMDE_POLY16_C(57914), SIMDE_POLY16_C(13653), SIMDE_POLY16_C(58260) },
{ SIMDE_POLY16_C(20553), SIMDE_POLY16_C(29982), SIMDE_POLY16_C(54881), SIMDE_POLY16_C(46356) },
},
},
{ { SIMDE_POLY16_C(45794), SIMDE_POLY16_C(51445), SIMDE_POLY16_C(13280), SIMDE_POLY16_C(20312) },
{ SIMDE_POLY16_C(49356), SIMDE_POLY16_C(62668), SIMDE_POLY16_C(27059), SIMDE_POLY16_C(33095) },
{
{ SIMDE_POLY16_C(45794), SIMDE_POLY16_C(49356), SIMDE_POLY16_C(51445), SIMDE_POLY16_C(62668) },
{ SIMDE_POLY16_C(13280), SIMDE_POLY16_C(27059), SIMDE_POLY16_C(20312), SIMDE_POLY16_C(33095) },
},
},
{ { SIMDE_POLY16_C(40040), SIMDE_POLY16_C(45750), SIMDE_POLY16_C( 6125), SIMDE_POLY16_C(10120) },
{ SIMDE_POLY16_C( 7417), SIMDE_POLY16_C( 5899), SIMDE_POLY16_C( 8081), SIMDE_POLY16_C(29645) },
{
{ SIMDE_POLY16_C(40040), SIMDE_POLY16_C( 7417), SIMDE_POLY16_C(45750), SIMDE_POLY16_C( 5899) },
{ SIMDE_POLY16_C( 6125), SIMDE_POLY16_C( 8081), SIMDE_POLY16_C(10120), SIMDE_POLY16_C(29645) },
},
},
{ { SIMDE_POLY16_C(49873), SIMDE_POLY16_C(45371), SIMDE_POLY16_C(38134), SIMDE_POLY16_C(49665) },
{ SIMDE_POLY16_C(52564), SIMDE_POLY16_C( 1974), SIMDE_POLY16_C(65078), SIMDE_POLY16_C(40840) },
{
{ SIMDE_POLY16_C(49873), SIMDE_POLY16_C(52564), SIMDE_POLY16_C(45371), SIMDE_POLY16_C( 1974) },
{ SIMDE_POLY16_C(38134), SIMDE_POLY16_C(65078), SIMDE_POLY16_C(49665), SIMDE_POLY16_C(40840) },
},
},
};
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_poly16x4x2_t r = simde_vzip_p16(a, b);
simde_test_arm_neon_assert_equal_p16x4(r.val[0], simde_vld1_p16(test_vec[i].r[0]));
simde_test_arm_neon_assert_equal_p16x4(r.val[1], simde_vld1_p16(test_vec[i].r[1]));
}
return 0;
#else
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_poly16x4x2_t c = simde_vzip_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_p16x4x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzipq_p8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_poly8_t a[16];
simde_poly8_t b[16];
simde_poly8_t r[2][16];
} test_vec[] = {
{ { SIMDE_POLY8_C(183), SIMDE_POLY8_C(104), SIMDE_POLY8_C(229), SIMDE_POLY8_C(148), SIMDE_POLY8_C(145), SIMDE_POLY8_C( 93), SIMDE_POLY8_C(206), SIMDE_POLY8_C( 25),
SIMDE_POLY8_C(179), SIMDE_POLY8_C(235), SIMDE_POLY8_C(112), SIMDE_POLY8_C( 10), SIMDE_POLY8_C( 54), SIMDE_POLY8_C(251), SIMDE_POLY8_C(230), SIMDE_POLY8_C(234) },
{ SIMDE_POLY8_C(252), SIMDE_POLY8_C( 45), SIMDE_POLY8_C( 96), SIMDE_POLY8_C(130), SIMDE_POLY8_C(187), SIMDE_POLY8_C( 4), SIMDE_POLY8_C(186), SIMDE_POLY8_C( 78),
SIMDE_POLY8_C( 95), SIMDE_POLY8_C( 69), SIMDE_POLY8_C(242), SIMDE_POLY8_C(216), SIMDE_POLY8_C(128), SIMDE_POLY8_C(201), SIMDE_POLY8_C(251), SIMDE_POLY8_C( 55) },
{
{ SIMDE_POLY8_C(183), SIMDE_POLY8_C(252), SIMDE_POLY8_C(104), SIMDE_POLY8_C( 45), SIMDE_POLY8_C(229), SIMDE_POLY8_C( 96), SIMDE_POLY8_C(148), SIMDE_POLY8_C(130),
SIMDE_POLY8_C(145), SIMDE_POLY8_C(187), SIMDE_POLY8_C( 93), SIMDE_POLY8_C( 4), SIMDE_POLY8_C(206), SIMDE_POLY8_C(186), SIMDE_POLY8_C( 25), SIMDE_POLY8_C( 78) },
{ SIMDE_POLY8_C(179), SIMDE_POLY8_C( 95), SIMDE_POLY8_C(235), SIMDE_POLY8_C( 69), SIMDE_POLY8_C(112), SIMDE_POLY8_C(242), SIMDE_POLY8_C( 10), SIMDE_POLY8_C(216),
SIMDE_POLY8_C( 54), SIMDE_POLY8_C(128), SIMDE_POLY8_C(251), SIMDE_POLY8_C(201), SIMDE_POLY8_C(230), SIMDE_POLY8_C(251), SIMDE_POLY8_C(234), SIMDE_POLY8_C( 55) },
},
},
{ { SIMDE_POLY8_C( 49), SIMDE_POLY8_C(224), SIMDE_POLY8_C(203), SIMDE_POLY8_C(195), SIMDE_POLY8_C( 61), SIMDE_POLY8_C(153), SIMDE_POLY8_C(220), SIMDE_POLY8_C(240),
SIMDE_POLY8_C(132), SIMDE_POLY8_C( 76), SIMDE_POLY8_C(251), SIMDE_POLY8_C(187), SIMDE_POLY8_C( 71), SIMDE_POLY8_C(225), SIMDE_POLY8_C(165), SIMDE_POLY8_C( 68) },
{ SIMDE_POLY8_C( 15), SIMDE_POLY8_C( 5), SIMDE_POLY8_C(198), SIMDE_POLY8_C(202), SIMDE_POLY8_C( 9), SIMDE_POLY8_C(128), SIMDE_POLY8_C( 24), SIMDE_POLY8_C(104),
SIMDE_POLY8_C(198), SIMDE_POLY8_C( 10), SIMDE_POLY8_C( 64), SIMDE_POLY8_C( 70), SIMDE_POLY8_C(211), SIMDE_POLY8_C( 59), SIMDE_POLY8_C(125), SIMDE_POLY8_C( 5) },
{
{ SIMDE_POLY8_C( 49), SIMDE_POLY8_C( 15), SIMDE_POLY8_C(224), SIMDE_POLY8_C( 5), SIMDE_POLY8_C(203), SIMDE_POLY8_C(198), SIMDE_POLY8_C(195), SIMDE_POLY8_C(202),
SIMDE_POLY8_C( 61), SIMDE_POLY8_C( 9), SIMDE_POLY8_C(153), SIMDE_POLY8_C(128), SIMDE_POLY8_C(220), SIMDE_POLY8_C( 24), SIMDE_POLY8_C(240), SIMDE_POLY8_C(104) },
{ SIMDE_POLY8_C(132), SIMDE_POLY8_C(198), SIMDE_POLY8_C( 76), SIMDE_POLY8_C( 10), SIMDE_POLY8_C(251), SIMDE_POLY8_C( 64), SIMDE_POLY8_C(187), SIMDE_POLY8_C( 70),
SIMDE_POLY8_C( 71), SIMDE_POLY8_C(211), SIMDE_POLY8_C(225), SIMDE_POLY8_C( 59), SIMDE_POLY8_C(165), SIMDE_POLY8_C(125), SIMDE_POLY8_C( 68), SIMDE_POLY8_C( 5) },
},
},
{ { SIMDE_POLY8_C( 27), SIMDE_POLY8_C( 72), SIMDE_POLY8_C(200), SIMDE_POLY8_C( 88), SIMDE_POLY8_C(225), SIMDE_POLY8_C(164), SIMDE_POLY8_C( 73), SIMDE_POLY8_C(102),
SIMDE_POLY8_C(240), SIMDE_POLY8_C( 68), SIMDE_POLY8_C( 33), SIMDE_POLY8_C( 55), SIMDE_POLY8_C( 37), SIMDE_POLY8_C(198), SIMDE_POLY8_C(123), SIMDE_POLY8_C( 52) },
{ SIMDE_POLY8_C(203), SIMDE_POLY8_C( 66), SIMDE_POLY8_C(UINT8_MAX), SIMDE_POLY8_C(213), SIMDE_POLY8_C(194), SIMDE_POLY8_C( 23), SIMDE_POLY8_C( 61), SIMDE_POLY8_C(136),
SIMDE_POLY8_C( 34), SIMDE_POLY8_C(126), SIMDE_POLY8_C(206), SIMDE_POLY8_C(245), SIMDE_POLY8_C(185), SIMDE_POLY8_C( 75), SIMDE_POLY8_C(250), SIMDE_POLY8_C(213) },
{
{ SIMDE_POLY8_C( 27), SIMDE_POLY8_C(203), SIMDE_POLY8_C( 72), SIMDE_POLY8_C( 66), SIMDE_POLY8_C(200), SIMDE_POLY8_C(UINT8_MAX), SIMDE_POLY8_C( 88), SIMDE_POLY8_C(213),
SIMDE_POLY8_C(225), SIMDE_POLY8_C(194), SIMDE_POLY8_C(164), SIMDE_POLY8_C( 23), SIMDE_POLY8_C( 73), SIMDE_POLY8_C( 61), SIMDE_POLY8_C(102), SIMDE_POLY8_C(136) },
{ SIMDE_POLY8_C(240), SIMDE_POLY8_C( 34), SIMDE_POLY8_C( 68), SIMDE_POLY8_C(126), SIMDE_POLY8_C( 33), SIMDE_POLY8_C(206), SIMDE_POLY8_C( 55), SIMDE_POLY8_C(245),
SIMDE_POLY8_C( 37), SIMDE_POLY8_C(185), SIMDE_POLY8_C(198), SIMDE_POLY8_C( 75), SIMDE_POLY8_C(123), SIMDE_POLY8_C(250), SIMDE_POLY8_C( 52), SIMDE_POLY8_C(213) },
},
},
{ { SIMDE_POLY8_C(147), SIMDE_POLY8_C(194), SIMDE_POLY8_C( 45), SIMDE_POLY8_C(117), SIMDE_POLY8_C(102), SIMDE_POLY8_C(118), SIMDE_POLY8_C(219), SIMDE_POLY8_C( 86),
SIMDE_POLY8_C(186), SIMDE_POLY8_C(252), SIMDE_POLY8_C(142), SIMDE_POLY8_C(224), SIMDE_POLY8_C(194), SIMDE_POLY8_C( 9), SIMDE_POLY8_C( 20), SIMDE_POLY8_C(141) },
{ SIMDE_POLY8_C( 75), SIMDE_POLY8_C( 19), SIMDE_POLY8_C( 98), SIMDE_POLY8_C( 14), SIMDE_POLY8_C( 43), SIMDE_POLY8_C(160), SIMDE_POLY8_C(150), SIMDE_POLY8_C( 77),
SIMDE_POLY8_C( 30), SIMDE_POLY8_C(101), SIMDE_POLY8_C( 66), SIMDE_POLY8_C(215), SIMDE_POLY8_C(176), SIMDE_POLY8_C( 61), SIMDE_POLY8_C(172), SIMDE_POLY8_C( 68) },
{
{ SIMDE_POLY8_C(147), SIMDE_POLY8_C( 75), SIMDE_POLY8_C(194), SIMDE_POLY8_C( 19), SIMDE_POLY8_C( 45), SIMDE_POLY8_C( 98), SIMDE_POLY8_C(117), SIMDE_POLY8_C( 14),
SIMDE_POLY8_C(102), SIMDE_POLY8_C( 43), SIMDE_POLY8_C(118), SIMDE_POLY8_C(160), SIMDE_POLY8_C(219), SIMDE_POLY8_C(150), SIMDE_POLY8_C( 86), SIMDE_POLY8_C( 77) },
{ SIMDE_POLY8_C(186), SIMDE_POLY8_C( 30), SIMDE_POLY8_C(252), SIMDE_POLY8_C(101), SIMDE_POLY8_C(142), SIMDE_POLY8_C( 66), SIMDE_POLY8_C(224), SIMDE_POLY8_C(215),
SIMDE_POLY8_C(194), SIMDE_POLY8_C(176), SIMDE_POLY8_C( 9), SIMDE_POLY8_C( 61), SIMDE_POLY8_C( 20), SIMDE_POLY8_C(172), SIMDE_POLY8_C(141), SIMDE_POLY8_C( 68) },
},
},
{ { SIMDE_POLY8_C(UINT8_MAX), SIMDE_POLY8_C(218), SIMDE_POLY8_C(185), SIMDE_POLY8_C(102), SIMDE_POLY8_C( 80), SIMDE_POLY8_C(148), SIMDE_POLY8_C(188), SIMDE_POLY8_C( 11),
SIMDE_POLY8_C(144), SIMDE_POLY8_C( 74), SIMDE_POLY8_C(235), SIMDE_POLY8_C( 82), SIMDE_POLY8_C( 84), SIMDE_POLY8_C(UINT8_MAX), SIMDE_POLY8_C(223), SIMDE_POLY8_C(159) },
{ SIMDE_POLY8_C( 19), SIMDE_POLY8_C( 66), SIMDE_POLY8_C(173), SIMDE_POLY8_C( 62), SIMDE_POLY8_C(226), SIMDE_POLY8_C( 68), SIMDE_POLY8_C(139), SIMDE_POLY8_C( 0),
SIMDE_POLY8_C(169), SIMDE_POLY8_C(205), SIMDE_POLY8_C(215), SIMDE_POLY8_C( 89), SIMDE_POLY8_C( 10), SIMDE_POLY8_C(132), SIMDE_POLY8_C(157), SIMDE_POLY8_C( 10) },
{
{ SIMDE_POLY8_C(UINT8_MAX), SIMDE_POLY8_C( 19), SIMDE_POLY8_C(218), SIMDE_POLY8_C( 66), SIMDE_POLY8_C(185), SIMDE_POLY8_C(173), SIMDE_POLY8_C(102), SIMDE_POLY8_C( 62),
SIMDE_POLY8_C( 80), SIMDE_POLY8_C(226), SIMDE_POLY8_C(148), SIMDE_POLY8_C( 68), SIMDE_POLY8_C(188), SIMDE_POLY8_C(139), SIMDE_POLY8_C( 11), SIMDE_POLY8_C( 0) },
{ SIMDE_POLY8_C(144), SIMDE_POLY8_C(169), SIMDE_POLY8_C( 74), SIMDE_POLY8_C(205), SIMDE_POLY8_C(235), SIMDE_POLY8_C(215), SIMDE_POLY8_C( 82), SIMDE_POLY8_C( 89),
SIMDE_POLY8_C( 84), SIMDE_POLY8_C( 10), SIMDE_POLY8_C(UINT8_MAX), SIMDE_POLY8_C(132), SIMDE_POLY8_C(223), SIMDE_POLY8_C(157), SIMDE_POLY8_C(159), SIMDE_POLY8_C( 10) },
},
},
{ { SIMDE_POLY8_C( 94), SIMDE_POLY8_C( 86), SIMDE_POLY8_C(112), SIMDE_POLY8_C(174), SIMDE_POLY8_C(234), SIMDE_POLY8_C( 44), SIMDE_POLY8_C(185), SIMDE_POLY8_C(122),
SIMDE_POLY8_C(119), SIMDE_POLY8_C(164), SIMDE_POLY8_C(204), SIMDE_POLY8_C(203), SIMDE_POLY8_C(164), SIMDE_POLY8_C(172), SIMDE_POLY8_C(106), SIMDE_POLY8_C(183) },
{ SIMDE_POLY8_C(238), SIMDE_POLY8_C( 24), SIMDE_POLY8_C(245), SIMDE_POLY8_C(208), SIMDE_POLY8_C( 92), SIMDE_POLY8_C(128), SIMDE_POLY8_C(208), SIMDE_POLY8_C( 5),
SIMDE_POLY8_C( 77), SIMDE_POLY8_C(167), SIMDE_POLY8_C( 94), SIMDE_POLY8_C( 88), SIMDE_POLY8_C( 43), SIMDE_POLY8_C(252), SIMDE_POLY8_C( 98), SIMDE_POLY8_C(137) },
{
{ SIMDE_POLY8_C( 94), SIMDE_POLY8_C(238), SIMDE_POLY8_C( 86), SIMDE_POLY8_C( 24), SIMDE_POLY8_C(112), SIMDE_POLY8_C(245), SIMDE_POLY8_C(174), SIMDE_POLY8_C(208),
SIMDE_POLY8_C(234), SIMDE_POLY8_C( 92), SIMDE_POLY8_C( 44), SIMDE_POLY8_C(128), SIMDE_POLY8_C(185), SIMDE_POLY8_C(208), SIMDE_POLY8_C(122), SIMDE_POLY8_C( 5) },
{ SIMDE_POLY8_C(119), SIMDE_POLY8_C( 77), SIMDE_POLY8_C(164), SIMDE_POLY8_C(167), SIMDE_POLY8_C(204), SIMDE_POLY8_C( 94), SIMDE_POLY8_C(203), SIMDE_POLY8_C( 88),
SIMDE_POLY8_C(164), SIMDE_POLY8_C( 43), SIMDE_POLY8_C(172), SIMDE_POLY8_C(252), SIMDE_POLY8_C(106), SIMDE_POLY8_C( 98), SIMDE_POLY8_C(183), SIMDE_POLY8_C(137) },
},
},
{ { SIMDE_POLY8_C( 82), SIMDE_POLY8_C(210), SIMDE_POLY8_C( 56), SIMDE_POLY8_C( 61), SIMDE_POLY8_C(254), SIMDE_POLY8_C(241), SIMDE_POLY8_C(183), SIMDE_POLY8_C(117),
SIMDE_POLY8_C(150), SIMDE_POLY8_C(132), SIMDE_POLY8_C( 64), SIMDE_POLY8_C( 58), SIMDE_POLY8_C( 48), SIMDE_POLY8_C(171), SIMDE_POLY8_C(241), SIMDE_POLY8_C( 30) },
{ SIMDE_POLY8_C(195), SIMDE_POLY8_C(230), SIMDE_POLY8_C(238), SIMDE_POLY8_C( 31), SIMDE_POLY8_C(102), SIMDE_POLY8_C(190), SIMDE_POLY8_C( 36), SIMDE_POLY8_C(179),
SIMDE_POLY8_C(101), SIMDE_POLY8_C(130), SIMDE_POLY8_C( 11), SIMDE_POLY8_C(145), SIMDE_POLY8_C(126), SIMDE_POLY8_C(109), SIMDE_POLY8_C( 26), SIMDE_POLY8_C(209) },
{
{ SIMDE_POLY8_C( 82), SIMDE_POLY8_C(195), SIMDE_POLY8_C(210), SIMDE_POLY8_C(230), SIMDE_POLY8_C( 56), SIMDE_POLY8_C(238), SIMDE_POLY8_C( 61), SIMDE_POLY8_C( 31),
SIMDE_POLY8_C(254), SIMDE_POLY8_C(102), SIMDE_POLY8_C(241), SIMDE_POLY8_C(190), SIMDE_POLY8_C(183), SIMDE_POLY8_C( 36), SIMDE_POLY8_C(117), SIMDE_POLY8_C(179) },
{ SIMDE_POLY8_C(150), SIMDE_POLY8_C(101), SIMDE_POLY8_C(132), SIMDE_POLY8_C(130), SIMDE_POLY8_C( 64), SIMDE_POLY8_C( 11), SIMDE_POLY8_C( 58), SIMDE_POLY8_C(145),
SIMDE_POLY8_C( 48), SIMDE_POLY8_C(126), SIMDE_POLY8_C(171), SIMDE_POLY8_C(109), SIMDE_POLY8_C(241), SIMDE_POLY8_C( 26), SIMDE_POLY8_C( 30), SIMDE_POLY8_C(209) },
},
},
{ { SIMDE_POLY8_C( 63), SIMDE_POLY8_C( 82), SIMDE_POLY8_C( 14), SIMDE_POLY8_C( 62), SIMDE_POLY8_C( 68), SIMDE_POLY8_C(197), SIMDE_POLY8_C(179), SIMDE_POLY8_C(218),
SIMDE_POLY8_C( 73), SIMDE_POLY8_C(244), SIMDE_POLY8_C( 20), SIMDE_POLY8_C(121), SIMDE_POLY8_C(159), SIMDE_POLY8_C( 5), SIMDE_POLY8_C(151), SIMDE_POLY8_C( 98) },
{ SIMDE_POLY8_C(235), SIMDE_POLY8_C(133), SIMDE_POLY8_C(129), SIMDE_POLY8_C( 81), SIMDE_POLY8_C( 67), SIMDE_POLY8_C(165), SIMDE_POLY8_C( 4), SIMDE_POLY8_C(169),
SIMDE_POLY8_C( 39), SIMDE_POLY8_C( 16), SIMDE_POLY8_C( 58), SIMDE_POLY8_C(166), SIMDE_POLY8_C(125), SIMDE_POLY8_C( 84), SIMDE_POLY8_C(119), SIMDE_POLY8_C(189) },
{
{ SIMDE_POLY8_C( 63), SIMDE_POLY8_C(235), SIMDE_POLY8_C( 82), SIMDE_POLY8_C(133), SIMDE_POLY8_C( 14), SIMDE_POLY8_C(129), SIMDE_POLY8_C( 62), SIMDE_POLY8_C( 81),
SIMDE_POLY8_C( 68), SIMDE_POLY8_C( 67), SIMDE_POLY8_C(197), SIMDE_POLY8_C(165), SIMDE_POLY8_C(179), SIMDE_POLY8_C( 4), SIMDE_POLY8_C(218), SIMDE_POLY8_C(169) },
{ SIMDE_POLY8_C( 73), SIMDE_POLY8_C( 39), SIMDE_POLY8_C(244), SIMDE_POLY8_C( 16), SIMDE_POLY8_C( 20), SIMDE_POLY8_C( 58), SIMDE_POLY8_C(121), SIMDE_POLY8_C(166),
SIMDE_POLY8_C(159), SIMDE_POLY8_C(125), SIMDE_POLY8_C( 5), SIMDE_POLY8_C( 84), SIMDE_POLY8_C(151), SIMDE_POLY8_C(119), SIMDE_POLY8_C( 98), SIMDE_POLY8_C(189) },
},
},
};
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_poly8x16x2_t r = simde_vzipq_p8(a, b);
simde_test_arm_neon_assert_equal_p8x16(r.val[0], simde_vld1q_p8(test_vec[i].r[0]));
simde_test_arm_neon_assert_equal_p8x16(r.val[1], simde_vld1q_p8(test_vec[i].r[1]));
}
return 0;
#else
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_poly8x16x2_t c = simde_vzipq_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_p8x16x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vzipq_p16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_poly16_t a[8];
simde_poly16_t b[8];
simde_poly16_t r[2][8];
} test_vec[] = {
{ { SIMDE_POLY16_C(36776), SIMDE_POLY16_C(50991), SIMDE_POLY16_C(55785), SIMDE_POLY16_C( 4670), SIMDE_POLY16_C(53567), SIMDE_POLY16_C(64246), SIMDE_POLY16_C(18557), SIMDE_POLY16_C(28447) },
{ SIMDE_POLY16_C(38812), SIMDE_POLY16_C(39983), SIMDE_POLY16_C(53745), SIMDE_POLY16_C(29110), SIMDE_POLY16_C(47188), SIMDE_POLY16_C(39243), SIMDE_POLY16_C(50912), SIMDE_POLY16_C(34824) },
{
{ SIMDE_POLY16_C(36776), SIMDE_POLY16_C(38812), SIMDE_POLY16_C(50991), SIMDE_POLY16_C(39983), SIMDE_POLY16_C(55785), SIMDE_POLY16_C(53745), SIMDE_POLY16_C( 4670), SIMDE_POLY16_C(29110) },
{ SIMDE_POLY16_C(53567), SIMDE_POLY16_C(47188), SIMDE_POLY16_C(64246), SIMDE_POLY16_C(39243), SIMDE_POLY16_C(18557), SIMDE_POLY16_C(50912), SIMDE_POLY16_C(28447), SIMDE_POLY16_C(34824) },
},
},
{ { SIMDE_POLY16_C(14166), SIMDE_POLY16_C(16207), SIMDE_POLY16_C(36113), SIMDE_POLY16_C(20561), SIMDE_POLY16_C(18271), SIMDE_POLY16_C(56394), SIMDE_POLY16_C(27280), SIMDE_POLY16_C(11339) },
{ SIMDE_POLY16_C(31233), SIMDE_POLY16_C(62408), SIMDE_POLY16_C(32331), SIMDE_POLY16_C(41060), SIMDE_POLY16_C(44854), SIMDE_POLY16_C( 5945), SIMDE_POLY16_C(16758), SIMDE_POLY16_C(52383) },
{
{ SIMDE_POLY16_C(14166), SIMDE_POLY16_C(31233), SIMDE_POLY16_C(16207), SIMDE_POLY16_C(62408), SIMDE_POLY16_C(36113), SIMDE_POLY16_C(32331), SIMDE_POLY16_C(20561), SIMDE_POLY16_C(41060) },
{ SIMDE_POLY16_C(18271), SIMDE_POLY16_C(44854), SIMDE_POLY16_C(56394), SIMDE_POLY16_C( 5945), SIMDE_POLY16_C(27280), SIMDE_POLY16_C(16758), SIMDE_POLY16_C(11339), SIMDE_POLY16_C(52383) },
},
},
{ { SIMDE_POLY16_C(61304), SIMDE_POLY16_C(35083), SIMDE_POLY16_C(23932), SIMDE_POLY16_C(56282), SIMDE_POLY16_C( 9380), SIMDE_POLY16_C(13496), SIMDE_POLY16_C( 910), SIMDE_POLY16_C(36961) },
{ SIMDE_POLY16_C(10622), SIMDE_POLY16_C(51587), SIMDE_POLY16_C(59304), SIMDE_POLY16_C(56937), SIMDE_POLY16_C(41623), SIMDE_POLY16_C( 3573), SIMDE_POLY16_C(38371), SIMDE_POLY16_C(23769) },
{
{ SIMDE_POLY16_C(61304), SIMDE_POLY16_C(10622), SIMDE_POLY16_C(35083), SIMDE_POLY16_C(51587), SIMDE_POLY16_C(23932), SIMDE_POLY16_C(59304), SIMDE_POLY16_C(56282), SIMDE_POLY16_C(56937) },
{ SIMDE_POLY16_C( 9380), SIMDE_POLY16_C(41623), SIMDE_POLY16_C(13496), SIMDE_POLY16_C( 3573), SIMDE_POLY16_C( 910), SIMDE_POLY16_C(38371), SIMDE_POLY16_C(36961), SIMDE_POLY16_C(23769) },
},
},
{ { SIMDE_POLY16_C(58500), SIMDE_POLY16_C( 229), SIMDE_POLY16_C(48961), SIMDE_POLY16_C(59100), SIMDE_POLY16_C(38116), SIMDE_POLY16_C(29210), SIMDE_POLY16_C(31639), SIMDE_POLY16_C( 5378) },
{ SIMDE_POLY16_C(34213), SIMDE_POLY16_C(19935), SIMDE_POLY16_C(18541), SIMDE_POLY16_C( 1067), SIMDE_POLY16_C( 8683), SIMDE_POLY16_C(52753), SIMDE_POLY16_C(60086), SIMDE_POLY16_C(14890) },
{
{ SIMDE_POLY16_C(58500), SIMDE_POLY16_C(34213), SIMDE_POLY16_C( 229), SIMDE_POLY16_C(19935), SIMDE_POLY16_C(48961), SIMDE_POLY16_C(18541), SIMDE_POLY16_C(59100), SIMDE_POLY16_C( 1067) },
{ SIMDE_POLY16_C(38116), SIMDE_POLY16_C( 8683), SIMDE_POLY16_C(29210), SIMDE_POLY16_C(52753), SIMDE_POLY16_C(31639), SIMDE_POLY16_C(60086), SIMDE_POLY16_C( 5378), SIMDE_POLY16_C(14890) },
},
},
{ { SIMDE_POLY16_C( 4302), SIMDE_POLY16_C( 4154), SIMDE_POLY16_C( 5839), SIMDE_POLY16_C(46070), SIMDE_POLY16_C( 4266), SIMDE_POLY16_C(16934), SIMDE_POLY16_C(10380), SIMDE_POLY16_C(12631) },
{ SIMDE_POLY16_C(13998), SIMDE_POLY16_C( 7038), SIMDE_POLY16_C(43391), SIMDE_POLY16_C(27167), SIMDE_POLY16_C(12490), SIMDE_POLY16_C(32824), SIMDE_POLY16_C(25370), SIMDE_POLY16_C(59578) },
{
{ SIMDE_POLY16_C( 4302), SIMDE_POLY16_C(13998), SIMDE_POLY16_C( 4154), SIMDE_POLY16_C( 7038), SIMDE_POLY16_C( 5839), SIMDE_POLY16_C(43391), SIMDE_POLY16_C(46070), SIMDE_POLY16_C(27167) },
{ SIMDE_POLY16_C( 4266), SIMDE_POLY16_C(12490), SIMDE_POLY16_C(16934), SIMDE_POLY16_C(32824), SIMDE_POLY16_C(10380), SIMDE_POLY16_C(25370), SIMDE_POLY16_C(12631), SIMDE_POLY16_C(59578) },
},
},
{ { SIMDE_POLY16_C(62835), SIMDE_POLY16_C(17144), SIMDE_POLY16_C(60939), SIMDE_POLY16_C(46838), SIMDE_POLY16_C( 7423), SIMDE_POLY16_C(35832), SIMDE_POLY16_C(20292), SIMDE_POLY16_C(62140) },
{ SIMDE_POLY16_C(14982), SIMDE_POLY16_C( 1293), SIMDE_POLY16_C(11491), SIMDE_POLY16_C(44655), SIMDE_POLY16_C(42844), SIMDE_POLY16_C(30254), SIMDE_POLY16_C(59658), SIMDE_POLY16_C(32095) },
{
{ SIMDE_POLY16_C(62835), SIMDE_POLY16_C(14982), SIMDE_POLY16_C(17144), SIMDE_POLY16_C( 1293), SIMDE_POLY16_C(60939), SIMDE_POLY16_C(11491), SIMDE_POLY16_C(46838), SIMDE_POLY16_C(44655) },
{ SIMDE_POLY16_C( 7423), SIMDE_POLY16_C(42844), SIMDE_POLY16_C(35832), SIMDE_POLY16_C(30254), SIMDE_POLY16_C(20292), SIMDE_POLY16_C(59658), SIMDE_POLY16_C(62140), SIMDE_POLY16_C(32095) },
},
},
{ { SIMDE_POLY16_C(22494), SIMDE_POLY16_C(59840), SIMDE_POLY16_C(46662), SIMDE_POLY16_C(17823), SIMDE_POLY16_C(38866), SIMDE_POLY16_C( 5840), SIMDE_POLY16_C(36071), SIMDE_POLY16_C(27913) },
{ SIMDE_POLY16_C( 5830), SIMDE_POLY16_C(43378), SIMDE_POLY16_C(57667), SIMDE_POLY16_C(40791), SIMDE_POLY16_C(34440), SIMDE_POLY16_C(37654), SIMDE_POLY16_C(30063), SIMDE_POLY16_C(19728) },
{
{ SIMDE_POLY16_C(22494), SIMDE_POLY16_C( 5830), SIMDE_POLY16_C(59840), SIMDE_POLY16_C(43378), SIMDE_POLY16_C(46662), SIMDE_POLY16_C(57667), SIMDE_POLY16_C(17823), SIMDE_POLY16_C(40791) },
{ SIMDE_POLY16_C(38866), SIMDE_POLY16_C(34440), SIMDE_POLY16_C( 5840), SIMDE_POLY16_C(37654), SIMDE_POLY16_C(36071), SIMDE_POLY16_C(30063), SIMDE_POLY16_C(27913), SIMDE_POLY16_C(19728) },
},
},
{ { SIMDE_POLY16_C(53452), SIMDE_POLY16_C( 4662), SIMDE_POLY16_C(54918), SIMDE_POLY16_C(22615), SIMDE_POLY16_C(10093), SIMDE_POLY16_C(21615), SIMDE_POLY16_C(30899), SIMDE_POLY16_C(31169) },
{ SIMDE_POLY16_C(13198), SIMDE_POLY16_C(53539), SIMDE_POLY16_C(31252), SIMDE_POLY16_C(40305), SIMDE_POLY16_C(34560), SIMDE_POLY16_C(28464), SIMDE_POLY16_C(16636), SIMDE_POLY16_C(51388) },
{
{ SIMDE_POLY16_C(53452), SIMDE_POLY16_C(13198), SIMDE_POLY16_C( 4662), SIMDE_POLY16_C(53539), SIMDE_POLY16_C(54918), SIMDE_POLY16_C(31252), SIMDE_POLY16_C(22615), SIMDE_POLY16_C(40305) },
{ SIMDE_POLY16_C(10093), SIMDE_POLY16_C(34560), SIMDE_POLY16_C(21615), SIMDE_POLY16_C(28464), SIMDE_POLY16_C(30899), SIMDE_POLY16_C(16636), SIMDE_POLY16_C(31169), SIMDE_POLY16_C(51388) },
},
},
};
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_poly16x8x2_t r = simde_vzipq_p16(a, b);
simde_test_arm_neon_assert_equal_p16x8(r.val[0], simde_vld1q_p16(test_vec[i].r[0]));
simde_test_arm_neon_assert_equal_p16x8(r.val[1], simde_vld1q_p16(test_vec[i].r[1]));
}
return 0;
#else
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_poly16x8x2_t c = simde_vzipq_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_p16x8x2(2, c, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
#endif
SIMDE_TEST_FUNC_LIST_BEGIN
#if !defined(SIMDE_BUG_INTEL_857088)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vzipq_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vzipq_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vzipq_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vzipq_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vzipq_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vzipq_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vzipq_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vzipq_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip_p8)
SIMDE_TEST_FUNC_LIST_ENTRY(vzip_p16)
SIMDE_TEST_FUNC_LIST_ENTRY(vzipq_p8)
SIMDE_TEST_FUNC_LIST_ENTRY(vzipq_p16)
#endif
SIMDE_TEST_FUNC_LIST_END
#include <test/arm/neon/test-neon-footer.h>