#define SIMDE_TEST_ARM_NEON_INSN trn1
#include <test/arm/neon/test-neon.h>
#include <simde/arm/neon/trn1.h>
static int
test_simde_vtrn1_f16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_float16_t a[4];
simde_float16_t b[4];
simde_float16_t r[4];
} test_vec[] = {
{ { SIMDE_FLOAT16_VALUE( 11.105), SIMDE_FLOAT16_VALUE( - 63.267), SIMDE_FLOAT16_VALUE( - 15.443), SIMDE_FLOAT16_VALUE( - 77.497) },
{ SIMDE_FLOAT16_VALUE( 99.692), SIMDE_FLOAT16_VALUE( - 68.474), SIMDE_FLOAT16_VALUE( - 55.887), SIMDE_FLOAT16_VALUE( - 21.106) },
{ SIMDE_FLOAT16_VALUE( 11.105), SIMDE_FLOAT16_VALUE( 99.692), SIMDE_FLOAT16_VALUE( - 15.443), SIMDE_FLOAT16_VALUE( - 55.887) } },
{ { SIMDE_FLOAT16_VALUE( - 52.862), SIMDE_FLOAT16_VALUE( - 88.095), SIMDE_FLOAT16_VALUE( 55.948), SIMDE_FLOAT16_VALUE( - 84.989) },
{ SIMDE_FLOAT16_VALUE( - 27.479), SIMDE_FLOAT16_VALUE( - 14.155), SIMDE_FLOAT16_VALUE( 73.644), SIMDE_FLOAT16_VALUE( - 71.624) },
{ SIMDE_FLOAT16_VALUE( - 52.862), SIMDE_FLOAT16_VALUE( - 27.479), SIMDE_FLOAT16_VALUE( 55.948), SIMDE_FLOAT16_VALUE( 73.644) } },
{ { SIMDE_FLOAT16_VALUE( 57.467), SIMDE_FLOAT16_VALUE( - 90.025), SIMDE_FLOAT16_VALUE( 11.725), SIMDE_FLOAT16_VALUE( 82.468) },
{ SIMDE_FLOAT16_VALUE( 85.913), SIMDE_FLOAT16_VALUE( - 65.687), SIMDE_FLOAT16_VALUE( - 18.534), SIMDE_FLOAT16_VALUE( - 19.093) },
{ SIMDE_FLOAT16_VALUE( 57.467), SIMDE_FLOAT16_VALUE( 85.913), SIMDE_FLOAT16_VALUE( 11.725), SIMDE_FLOAT16_VALUE( - 18.534) } },
{ { SIMDE_FLOAT16_VALUE( - 27.762), SIMDE_FLOAT16_VALUE( 58.179), SIMDE_FLOAT16_VALUE( - 53.292), SIMDE_FLOAT16_VALUE( - 33.595) },
{ SIMDE_FLOAT16_VALUE( - 49.071), SIMDE_FLOAT16_VALUE( - 66.212), SIMDE_FLOAT16_VALUE( - 65.087), SIMDE_FLOAT16_VALUE( 86.615) },
{ SIMDE_FLOAT16_VALUE( - 27.762), SIMDE_FLOAT16_VALUE( - 49.071), SIMDE_FLOAT16_VALUE( - 53.292), SIMDE_FLOAT16_VALUE( - 65.087) } },
{ { SIMDE_FLOAT16_VALUE( 38.277), SIMDE_FLOAT16_VALUE( - 95.558), SIMDE_FLOAT16_VALUE( 26.475), SIMDE_FLOAT16_VALUE( - 96.782) },
{ SIMDE_FLOAT16_VALUE( 68.464), SIMDE_FLOAT16_VALUE( - 65.232), SIMDE_FLOAT16_VALUE( 26.296), SIMDE_FLOAT16_VALUE( 11.376) },
{ SIMDE_FLOAT16_VALUE( 38.277), SIMDE_FLOAT16_VALUE( 68.464), SIMDE_FLOAT16_VALUE( 26.475), SIMDE_FLOAT16_VALUE( 26.296) } },
{ { SIMDE_FLOAT16_VALUE( - 48.285), SIMDE_FLOAT16_VALUE( 24.604), SIMDE_FLOAT16_VALUE( 69.617), SIMDE_FLOAT16_VALUE( 66.002) },
{ SIMDE_FLOAT16_VALUE( 0.920), SIMDE_FLOAT16_VALUE( - 90.358), SIMDE_FLOAT16_VALUE( 2.468), SIMDE_FLOAT16_VALUE( - 37.903) },
{ SIMDE_FLOAT16_VALUE( - 48.285), SIMDE_FLOAT16_VALUE( 0.920), SIMDE_FLOAT16_VALUE( 69.617), SIMDE_FLOAT16_VALUE( 2.468) } },
{ { SIMDE_FLOAT16_VALUE( - 46.735), SIMDE_FLOAT16_VALUE( - 76.326), SIMDE_FLOAT16_VALUE( - 33.544), SIMDE_FLOAT16_VALUE( 0.423) },
{ SIMDE_FLOAT16_VALUE( - 37.682), SIMDE_FLOAT16_VALUE( - 51.421), SIMDE_FLOAT16_VALUE( 98.911), SIMDE_FLOAT16_VALUE( 97.679) },
{ SIMDE_FLOAT16_VALUE( - 46.735), SIMDE_FLOAT16_VALUE( - 37.682), SIMDE_FLOAT16_VALUE( - 33.544), SIMDE_FLOAT16_VALUE( 98.911) } },
{ { SIMDE_FLOAT16_VALUE( - 98.472), SIMDE_FLOAT16_VALUE( - 2.386), SIMDE_FLOAT16_VALUE( - 66.666), SIMDE_FLOAT16_VALUE( 27.183) },
{ SIMDE_FLOAT16_VALUE( 23.202), SIMDE_FLOAT16_VALUE( 1.710), SIMDE_FLOAT16_VALUE( 58.950), SIMDE_FLOAT16_VALUE( - 44.528) },
{ SIMDE_FLOAT16_VALUE( - 98.472), SIMDE_FLOAT16_VALUE( 23.202), SIMDE_FLOAT16_VALUE( - 66.666), SIMDE_FLOAT16_VALUE( 58.950) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float16x4_t a = simde_vld1_f16(test_vec[i].a);
simde_float16x4_t b = simde_vld1_f16(test_vec[i].b);
simde_float16x4_t r = simde_vtrn1_f16(a, b);
simde_test_arm_neon_assert_equal_f16x4(r, simde_vld1_f16(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_float16x4_t a = simde_test_arm_neon_random_f16x4(-100.0f, 100.0f);
simde_float16x4_t b = simde_test_arm_neon_random_f16x4(-100.0f, 100.0f);
simde_float16x4_t r = simde_vtrn1_f16(a, b);
simde_test_arm_neon_write_f16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_f16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_f16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_float32 a[2];
simde_float32 b[2];
simde_float32 r[2];
} test_vec[] = {
{ { SIMDE_FLOAT32_C( -734.98), SIMDE_FLOAT32_C( 365.45) },
{ SIMDE_FLOAT32_C( -158.72), SIMDE_FLOAT32_C( 801.49) },
{ SIMDE_FLOAT32_C( -734.98), SIMDE_FLOAT32_C( -158.72) } },
{ { SIMDE_FLOAT32_C( -244.32), SIMDE_FLOAT32_C( 246.47) },
{ SIMDE_FLOAT32_C( -998.98), SIMDE_FLOAT32_C( -876.14) },
{ SIMDE_FLOAT32_C( -244.32), SIMDE_FLOAT32_C( -998.98) } },
{ { SIMDE_FLOAT32_C( 821.58), SIMDE_FLOAT32_C( 188.36) },
{ SIMDE_FLOAT32_C( 526.46), SIMDE_FLOAT32_C( 806.12) },
{ SIMDE_FLOAT32_C( 821.58), SIMDE_FLOAT32_C( 526.46) } },
{ { SIMDE_FLOAT32_C( 231.60), SIMDE_FLOAT32_C( -192.02) },
{ SIMDE_FLOAT32_C( -230.26), SIMDE_FLOAT32_C( -950.64) },
{ SIMDE_FLOAT32_C( 231.60), SIMDE_FLOAT32_C( -230.26) } },
{ { SIMDE_FLOAT32_C( 514.95), SIMDE_FLOAT32_C( -326.95) },
{ SIMDE_FLOAT32_C( -930.10), SIMDE_FLOAT32_C( 113.30) },
{ SIMDE_FLOAT32_C( 514.95), SIMDE_FLOAT32_C( -930.10) } },
{ { SIMDE_FLOAT32_C( 562.02), SIMDE_FLOAT32_C( -958.09) },
{ SIMDE_FLOAT32_C( 753.36), SIMDE_FLOAT32_C( -955.88) },
{ SIMDE_FLOAT32_C( 562.02), SIMDE_FLOAT32_C( 753.36) } },
{ { SIMDE_FLOAT32_C( 690.44), SIMDE_FLOAT32_C( -991.78) },
{ SIMDE_FLOAT32_C( 276.78), SIMDE_FLOAT32_C( 537.69) },
{ SIMDE_FLOAT32_C( 690.44), SIMDE_FLOAT32_C( 276.78) } },
{ { SIMDE_FLOAT32_C( -86.37), SIMDE_FLOAT32_C( -105.16) },
{ SIMDE_FLOAT32_C( 319.11), SIMDE_FLOAT32_C( 178.65) },
{ SIMDE_FLOAT32_C( -86.37), SIMDE_FLOAT32_C( 319.11) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float32x2_t a = simde_vld1_f32(test_vec[i].a);
simde_float32x2_t b = simde_vld1_f32(test_vec[i].b);
simde_float32x2_t r = simde_vtrn1_f32(a, b);
simde_test_arm_neon_assert_equal_f32x2(r, simde_vld1_f32(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_float32x2_t a = simde_test_arm_neon_random_f32x2(-1000.0f, 1000.0f);
simde_float32x2_t b = simde_test_arm_neon_random_f32x2(-1000.0f, 1000.0f);
simde_float32x2_t r = simde_vtrn1_f32(a, b);
simde_test_arm_neon_write_f32x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_f32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_f32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1_s8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int8_t a[8];
int8_t b[8];
int8_t r[8];
} test_vec[] = {
{ { -INT8_C( 60), -INT8_C( 45), -INT8_C( 88), -INT8_C( 68), -INT8_C( 80), INT8_C( 32), INT8_C( 27), -INT8_C( 59) },
{ INT8_C( 0), INT8_C( 78), -INT8_C( 30), -INT8_C( 82), -INT8_C( 119), INT8_C( 46), INT8_C( 17), INT8_C( 49) },
{ -INT8_C( 60), INT8_C( 0), -INT8_C( 88), -INT8_C( 30), -INT8_C( 80), -INT8_C( 119), INT8_C( 27), INT8_C( 17) } },
{ { INT8_C( 101), INT8_C( 29), INT8_C( 88), INT8_C( 118), -INT8_C( 106), -INT8_C( 13), -INT8_C( 99), INT8_C( 125) },
{ INT8_C( 71), -INT8_C( 38), INT8_C( 116), -INT8_C( 26), -INT8_C( 54), -INT8_C( 111), INT8_C( 13), -INT8_C( 114) },
{ INT8_C( 101), INT8_C( 71), INT8_C( 88), INT8_C( 116), -INT8_C( 106), -INT8_C( 54), -INT8_C( 99), INT8_C( 13) } },
{ { INT8_C( 101), -INT8_C( 75), INT8_C( 75), INT8_C( 21), -INT8_C( 43), INT8_C( 102), -INT8_C( 37), -INT8_C( 42) },
{ -INT8_C( 75), -INT8_C( 67), -INT8_C( 124), INT8_C( 62), -INT8_C( 20), -INT8_C( 107), INT8_C( 112), INT8_C( 81) },
{ INT8_C( 101), -INT8_C( 75), INT8_C( 75), -INT8_C( 124), -INT8_C( 43), -INT8_C( 20), -INT8_C( 37), INT8_C( 112) } },
{ { -INT8_C( 77), -INT8_C( 56), -INT8_C( 57), INT8_C( 73), -INT8_C( 69), INT8_C( 100), -INT8_C( 58), INT8_C( 2) },
{ INT8_C( 62), INT8_C( 58), -INT8_C( 23), INT8_C( 8), -INT8_C( 52), -INT8_C( 10), -INT8_C( 105), INT8_C( 49) },
{ -INT8_C( 77), INT8_C( 62), -INT8_C( 57), -INT8_C( 23), -INT8_C( 69), -INT8_C( 52), -INT8_C( 58), -INT8_C( 105) } },
{ { -INT8_C( 84), -INT8_C( 30), INT8_C( 70), -INT8_C( 127), INT8_C( 72), INT8_C( 33), INT8_C( 87), -INT8_C( 3) },
{ -INT8_C( 33), -INT8_C( 37), INT8_C( 60), -INT8_C( 53), INT8_C( 113), -INT8_C( 84), INT8_C( 28), INT8_C( 36) },
{ -INT8_C( 84), -INT8_C( 33), INT8_C( 70), INT8_C( 60), INT8_C( 72), INT8_C( 113), INT8_C( 87), INT8_C( 28) } },
{ { INT8_C( 116), -INT8_C( 29), INT8_C( 109), INT8_C( 47), INT8_C( 71), INT8_C( 51), INT8_C( 50), -INT8_C( 123) },
{ INT8_C( 110), INT8_C( 27), -INT8_C( 115), INT8_C( 58), INT8_C( 17), INT8_C( 36), INT8_C( 107), -INT8_C( 67) },
{ INT8_C( 116), INT8_C( 110), INT8_C( 109), -INT8_C( 115), INT8_C( 71), INT8_C( 17), INT8_C( 50), INT8_C( 107) } },
{ { INT8_C( 6), -INT8_C( 79), INT8_C( 63), INT8_C( 79), -INT8_C( 45), -INT8_C( 106), INT8_C( 76), -INT8_C( 78) },
{ INT8_C( 114), -INT8_C( 120), INT8_C( 125), -INT8_C( 29), INT8_C( 52), -INT8_C( 103), INT8_C( 7), -INT8_C( 88) },
{ INT8_C( 6), INT8_C( 114), INT8_C( 63), INT8_C( 125), -INT8_C( 45), INT8_C( 52), INT8_C( 76), INT8_C( 7) } },
{ { INT8_C( 124), INT8_C( 116), -INT8_C( 40), -INT8_C( 61), -INT8_C( 89), INT8_C( 10), INT8_C( 72), INT8_C( 21) },
{ INT8_C( 37), -INT8_C( 43), INT8_C( 79), INT8_C( 54), -INT8_C( 6), -INT8_C( 70), -INT8_C( 12), INT8_C( 0) },
{ INT8_C( 124), INT8_C( 37), -INT8_C( 40), INT8_C( 79), -INT8_C( 89), -INT8_C( 6), INT8_C( 72), -INT8_C( 12) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int8x8_t a = simde_vld1_s8(test_vec[i].a);
simde_int8x8_t b = simde_vld1_s8(test_vec[i].b);
simde_int8x8_t r = simde_vtrn1_s8(a, b);
simde_test_arm_neon_assert_equal_i8x8(r, simde_vld1_s8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int8x8_t a = simde_test_arm_neon_random_i8x8();
simde_int8x8_t b = simde_test_arm_neon_random_i8x8();
simde_int8x8_t r = simde_vtrn1_s8(a, b);
simde_test_arm_neon_write_i8x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i8x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i8x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int16_t a[4];
int16_t b[4];
int16_t r[4];
} test_vec[] = {
{ { -INT16_C( 12600), INT16_C( 17726), INT16_C( 25964), -INT16_C( 31246) },
{ INT16_C( 29446), INT16_C( 19730), INT16_C( 5918), INT16_C( 11654) },
{ -INT16_C( 12600), INT16_C( 29446), INT16_C( 25964), INT16_C( 5918) } },
{ { INT16_C( 20514), INT16_C( 22734), -INT16_C( 2490), -INT16_C( 23811) },
{ -INT16_C( 13108), INT16_C( 28476), -INT16_C( 13288), -INT16_C( 8175) },
{ INT16_C( 20514), -INT16_C( 13108), -INT16_C( 2490), -INT16_C( 13288) } },
{ { INT16_C( 20378), INT16_C( 1574), INT16_C( 6324), -INT16_C( 17781) },
{ -INT16_C( 24948), -INT16_C( 22008), -INT16_C( 29003), -INT16_C( 10280) },
{ INT16_C( 20378), -INT16_C( 24948), INT16_C( 6324), -INT16_C( 29003) } },
{ { -INT16_C( 22817), INT16_C( 9519), INT16_C( 11676), INT16_C( 26823) },
{ INT16_C( 1273), INT16_C( 4823), -INT16_C( 5936), INT16_C( 27378) },
{ -INT16_C( 22817), INT16_C( 1273), INT16_C( 11676), -INT16_C( 5936) } },
{ { INT16_C( 6199), -INT16_C( 5264), -INT16_C( 975), -INT16_C( 16986) },
{ -INT16_C( 20838), INT16_C( 20327), INT16_C( 16188), INT16_C( 6951) },
{ INT16_C( 6199), -INT16_C( 20838), -INT16_C( 975), INT16_C( 16188) } },
{ { INT16_C( 22245), -INT16_C( 32447), INT16_C( 2179), INT16_C( 32233) },
{ -INT16_C( 16372), -INT16_C( 9073), -INT16_C( 32344), -INT16_C( 8378) },
{ INT16_C( 22245), -INT16_C( 16372), INT16_C( 2179), -INT16_C( 32344) } },
{ { -INT16_C( 18534), -INT16_C( 13365), INT16_C( 29107), INT16_C( 19848) },
{ -INT16_C( 4321), INT16_C( 23452), -INT16_C( 15569), INT16_C( 5239) },
{ -INT16_C( 18534), -INT16_C( 4321), INT16_C( 29107), -INT16_C( 15569) } },
{ { -INT16_C( 18406), -INT16_C( 25194), INT16_C( 32704), -INT16_C( 13030) },
{ -INT16_C( 22208), -INT16_C( 5975), -INT16_C( 4053), -INT16_C( 14904) },
{ -INT16_C( 18406), -INT16_C( 22208), INT16_C( 32704), -INT16_C( 4053) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int16x4_t a = simde_vld1_s16(test_vec[i].a);
simde_int16x4_t b = simde_vld1_s16(test_vec[i].b);
simde_int16x4_t r = simde_vtrn1_s16(a, b);
simde_test_arm_neon_assert_equal_i16x4(r, simde_vld1_s16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int16x4_t a = simde_test_arm_neon_random_i16x4();
simde_int16x4_t b = simde_test_arm_neon_random_i16x4();
simde_int16x4_t r = simde_vtrn1_s16(a, b);
simde_test_arm_neon_write_i16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int32_t a[2];
int32_t b[2];
int32_t r[2];
} test_vec[] = {
{ { -INT32_C( 2113992025), INT32_C( 1335496731) },
{ -INT32_C( 441354692), -INT32_C( 150353327) },
{ -INT32_C( 2113992025), -INT32_C( 441354692) } },
{ { INT32_C( 131230526), -INT32_C( 1810676118) },
{ INT32_C( 2093845), -INT32_C( 1520903682) },
{ INT32_C( 131230526), INT32_C( 2093845) } },
{ { -INT32_C( 14264092), -INT32_C( 1538342552) },
{ -INT32_C( 2004287433), INT32_C( 159421386) },
{ -INT32_C( 14264092), -INT32_C( 2004287433) } },
{ { INT32_C( 1762677502), -INT32_C( 1375919208) },
{ INT32_C( 363666710), -INT32_C( 625342986) },
{ INT32_C( 1762677502), INT32_C( 363666710) } },
{ { -INT32_C( 975511203), -INT32_C( 647419742) },
{ -INT32_C( 211684568), -INT32_C( 2063801978) },
{ -INT32_C( 975511203), -INT32_C( 211684568) } },
{ { -INT32_C( 873657293), INT32_C( 1182329647) },
{ -INT32_C( 27581176), -INT32_C( 1999039189) },
{ -INT32_C( 873657293), -INT32_C( 27581176) } },
{ { -INT32_C( 1739672586), INT32_C( 74561499) },
{ INT32_C( 821547946), -INT32_C( 390728780) },
{ -INT32_C( 1739672586), INT32_C( 821547946) } },
{ { INT32_C( 783524607), -INT32_C( 1787548531) },
{ INT32_C( 2090127185), -INT32_C( 620401179) },
{ INT32_C( 783524607), INT32_C( 2090127185) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int32x2_t a = simde_vld1_s32(test_vec[i].a);
simde_int32x2_t b = simde_vld1_s32(test_vec[i].b);
simde_int32x2_t r = simde_vtrn1_s32(a, b);
simde_test_arm_neon_assert_equal_i32x2(r, simde_vld1_s32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int32x2_t a = simde_test_arm_neon_random_i32x2();
simde_int32x2_t b = simde_test_arm_neon_random_i32x2();
simde_int32x2_t r = simde_vtrn1_s32(a, b);
simde_test_arm_neon_write_i32x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1_u8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint8_t a[8];
uint8_t b[8];
uint8_t r[8];
} test_vec[] = {
{ { UINT8_C(180), UINT8_C(234), UINT8_C( 38), UINT8_C(184), UINT8_C(112), UINT8_C( 40), UINT8_C(124), UINT8_C( 20) },
{ UINT8_C( 30), UINT8_C(250), UINT8_C( 91), UINT8_C( 78), UINT8_C(166), UINT8_C(229), UINT8_C(128), UINT8_C(117) },
{ UINT8_C(180), UINT8_C( 30), UINT8_C( 38), UINT8_C( 91), UINT8_C(112), UINT8_C(166), UINT8_C(124), UINT8_C(128) } },
{ { UINT8_C( 51), UINT8_C(233), UINT8_C(232), UINT8_C( 60), UINT8_C(220), UINT8_C( 27), UINT8_C(182), UINT8_C(252) },
{ UINT8_C( 75), UINT8_C( 64), UINT8_C(212), UINT8_C(237), UINT8_C( 88), UINT8_C( 50), UINT8_C( 94), UINT8_C( 12) },
{ UINT8_C( 51), UINT8_C( 75), UINT8_C(232), UINT8_C(212), UINT8_C(220), UINT8_C( 88), UINT8_C(182), UINT8_C( 94) } },
{ { UINT8_C( 28), UINT8_C(133), UINT8_C(196), UINT8_C(140), UINT8_C(173), UINT8_C( 64), UINT8_C(161), UINT8_C(204) },
{ UINT8_C( 59), UINT8_C(252), UINT8_C( 26), UINT8_C(225), UINT8_C(225), UINT8_C(154), UINT8_C( 86), UINT8_C( 21) },
{ UINT8_C( 28), UINT8_C( 59), UINT8_C(196), UINT8_C( 26), UINT8_C(173), UINT8_C(225), UINT8_C(161), UINT8_C( 86) } },
{ { UINT8_C(132), UINT8_C( 62), UINT8_C( 81), UINT8_C( 96), UINT8_C( 89), UINT8_C( 7), UINT8_C( 92), UINT8_C(164) },
{ UINT8_C( 71), UINT8_C( 49), UINT8_C(145), UINT8_C(159), UINT8_C( 99), UINT8_C(240), UINT8_C(171), UINT8_C(127) },
{ UINT8_C(132), UINT8_C( 71), UINT8_C( 81), UINT8_C(145), UINT8_C( 89), UINT8_C( 99), UINT8_C( 92), UINT8_C(171) } },
{ { UINT8_C(117), UINT8_C(111), UINT8_C( 12), UINT8_C( 34), UINT8_C(176), UINT8_C(173), UINT8_C(238), UINT8_C(235) },
{ UINT8_C(169), UINT8_C( 9), UINT8_C(204), UINT8_C(138), UINT8_C(163), UINT8_C( 34), UINT8_C(159), UINT8_C( 39) },
{ UINT8_C(117), UINT8_C(169), UINT8_C( 12), UINT8_C(204), UINT8_C(176), UINT8_C(163), UINT8_C(238), UINT8_C(159) } },
{ { UINT8_C( 97), UINT8_C(240), UINT8_C(136), UINT8_C(186), UINT8_C(247), UINT8_C(228), UINT8_C( 95), UINT8_C( 62) },
{ UINT8_C( 21), UINT8_C(240), UINT8_C(221), UINT8_C(120), UINT8_C(224), UINT8_C(136), UINT8_C(248), UINT8_C( 85) },
{ UINT8_C( 97), UINT8_C( 21), UINT8_C(136), UINT8_C(221), UINT8_C(247), UINT8_C(224), UINT8_C( 95), UINT8_C(248) } },
{ { UINT8_C(248), UINT8_C( 4), UINT8_C(120), UINT8_C(168), UINT8_C(177), UINT8_C(102), UINT8_C(147), UINT8_C( 90) },
{ UINT8_C(111), UINT8_C( 95), UINT8_C(228), UINT8_C( 19), UINT8_C(129), UINT8_C(132), UINT8_C( 58), UINT8_C(226) },
{ UINT8_C(248), UINT8_C(111), UINT8_C(120), UINT8_C(228), UINT8_C(177), UINT8_C(129), UINT8_C(147), UINT8_C( 58) } },
{ { UINT8_C(116), UINT8_C(194), UINT8_C(157), UINT8_C(108), UINT8_C(167), UINT8_C(252), UINT8_C(170), UINT8_C(188) },
{ UINT8_C(236), UINT8_C(136), UINT8_C( 53), UINT8_C(205), UINT8_C( 16), UINT8_C( 45), UINT8_C( 34), UINT8_C( 8) },
{ UINT8_C(116), UINT8_C(236), UINT8_C(157), UINT8_C( 53), UINT8_C(167), UINT8_C( 16), UINT8_C(170), UINT8_C( 34) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint8x8_t a = simde_vld1_u8(test_vec[i].a);
simde_uint8x8_t b = simde_vld1_u8(test_vec[i].b);
simde_uint8x8_t r = simde_vtrn1_u8(a, b);
simde_test_arm_neon_assert_equal_u8x8(r, simde_vld1_u8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint8x8_t a = simde_test_arm_neon_random_u8x8();
simde_uint8x8_t b = simde_test_arm_neon_random_u8x8();
simde_uint8x8_t r = simde_vtrn1_u8(a, b);
simde_test_arm_neon_write_u8x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_u8x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u8x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint16_t a[4];
uint16_t b[4];
uint16_t r[4];
} test_vec[] = {
{ { UINT16_C(60788), UINT16_C(40466), UINT16_C(30557), UINT16_C(47308) },
{ UINT16_C(27512), UINT16_C( 3061), UINT16_C(41915), UINT16_C(15633) },
{ UINT16_C(60788), UINT16_C(27512), UINT16_C(30557), UINT16_C(41915) } },
{ { UINT16_C(31826), UINT16_C(40911), UINT16_C(11794), UINT16_C( 5983) },
{ UINT16_C(15515), UINT16_C(15720), UINT16_C(44460), UINT16_C( 8198) },
{ UINT16_C(31826), UINT16_C(15515), UINT16_C(11794), UINT16_C(44460) } },
{ { UINT16_C( 6298), UINT16_C(63678), UINT16_C(35471), UINT16_C( 1968) },
{ UINT16_C(42485), UINT16_C(45331), UINT16_C( 9289), UINT16_C(39918) },
{ UINT16_C( 6298), UINT16_C(42485), UINT16_C(35471), UINT16_C( 9289) } },
{ { UINT16_C(48544), UINT16_C(45627), UINT16_C(39659), UINT16_C(34762) },
{ UINT16_C(13015), UINT16_C(33732), UINT16_C(51936), UINT16_C(31395) },
{ UINT16_C(48544), UINT16_C(13015), UINT16_C(39659), UINT16_C(51936) } },
{ { UINT16_C(25058), UINT16_C(29298), UINT16_C( 8940), UINT16_C(57721) },
{ UINT16_C(36040), UINT16_C( 4498), UINT16_C(32944), UINT16_C(20908) },
{ UINT16_C(25058), UINT16_C(36040), UINT16_C( 8940), UINT16_C(32944) } },
{ { UINT16_C(59197), UINT16_C(10499), UINT16_C(52610), UINT16_C(22960) },
{ UINT16_C(29696), UINT16_C(57564), UINT16_C(32575), UINT16_C( 8538) },
{ UINT16_C(59197), UINT16_C(29696), UINT16_C(52610), UINT16_C(32575) } },
{ { UINT16_C(52704), UINT16_C(52371), UINT16_C( 3567), UINT16_C(47022) },
{ UINT16_C(16537), UINT16_C(19144), UINT16_C(30145), UINT16_C(65179) },
{ UINT16_C(52704), UINT16_C(16537), UINT16_C( 3567), UINT16_C(30145) } },
{ { UINT16_C(40540), UINT16_C(56871), UINT16_C(55148), UINT16_C(27703) },
{ UINT16_C( 4940), UINT16_C(35660), UINT16_C(42642), UINT16_C(29612) },
{ UINT16_C(40540), UINT16_C( 4940), UINT16_C(55148), UINT16_C(42642) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint16x4_t a = simde_vld1_u16(test_vec[i].a);
simde_uint16x4_t b = simde_vld1_u16(test_vec[i].b);
simde_uint16x4_t r = simde_vtrn1_u16(a, b);
simde_test_arm_neon_assert_equal_u16x4(r, simde_vld1_u16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint16x4_t a = simde_test_arm_neon_random_u16x4();
simde_uint16x4_t b = simde_test_arm_neon_random_u16x4();
simde_uint16x4_t r = simde_vtrn1_u16(a, b);
simde_test_arm_neon_write_u16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_u16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint32_t a[2];
uint32_t b[2];
uint32_t r[2];
} test_vec[] = {
{ { UINT32_C( 434122982), UINT32_C(2452681820) },
{ UINT32_C(2633101907), UINT32_C(3594086343) },
{ UINT32_C( 434122982), UINT32_C(2633101907) } },
{ { UINT32_C(3976061469), UINT32_C(1299237744) },
{ UINT32_C(3511335039), UINT32_C(2688013498) },
{ UINT32_C(3976061469), UINT32_C(3511335039) } },
{ { UINT32_C(1622808580), UINT32_C(1626532364) },
{ UINT32_C(2768036828), UINT32_C(1736062282) },
{ UINT32_C(1622808580), UINT32_C(2768036828) } },
{ { UINT32_C(2270394135), UINT32_C(3251946562) },
{ UINT32_C( 915545980), UINT32_C(4158049011) },
{ UINT32_C(2270394135), UINT32_C( 915545980) } },
{ { UINT32_C(3998716130), UINT32_C(1464748410) },
{ UINT32_C(1996180012), UINT32_C(2547873151) },
{ UINT32_C(3998716130), UINT32_C(1996180012) } },
{ { UINT32_C( 773730540), UINT32_C(1894773748) },
{ UINT32_C( 94798354), UINT32_C( 788299084) },
{ UINT32_C( 773730540), UINT32_C( 94798354) } },
{ { UINT32_C(2283557645), UINT32_C(3370085276) },
{ UINT32_C( 893311669), UINT32_C(1003232079) },
{ UINT32_C(2283557645), UINT32_C( 893311669) } },
{ { UINT32_C(1080683083), UINT32_C(4021311709) },
{ UINT32_C( 653547482), UINT32_C(3780440276) },
{ UINT32_C(1080683083), UINT32_C( 653547482) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint32x2_t a = simde_vld1_u32(test_vec[i].a);
simde_uint32x2_t b = simde_vld1_u32(test_vec[i].b);
simde_uint32x2_t r = simde_vtrn1_u32(a, b);
simde_test_arm_neon_assert_equal_u32x2(r, simde_vld1_u32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint32x2_t a = simde_test_arm_neon_random_u32x2();
simde_uint32x2_t b = simde_test_arm_neon_random_u32x2();
simde_uint32x2_t r = simde_vtrn1_u32(a, b);
simde_test_arm_neon_write_u32x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_u32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1q_f16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_float16_t a[8];
simde_float16_t b[8];
simde_float16_t r[8];
} test_vec[] = {
{ { SIMDE_FLOAT16_VALUE( - 50.625), SIMDE_FLOAT16_VALUE( 30.747), SIMDE_FLOAT16_VALUE( 18.487), SIMDE_FLOAT16_VALUE( 57.491),
SIMDE_FLOAT16_VALUE( - 21.129), SIMDE_FLOAT16_VALUE( 15.440), SIMDE_FLOAT16_VALUE( - 52.593), SIMDE_FLOAT16_VALUE( - 4.727) },
{ SIMDE_FLOAT16_VALUE( 44.277), SIMDE_FLOAT16_VALUE( - 25.789), SIMDE_FLOAT16_VALUE( - 25.136), SIMDE_FLOAT16_VALUE( 33.647),
SIMDE_FLOAT16_VALUE( - 95.841), SIMDE_FLOAT16_VALUE( 52.244), SIMDE_FLOAT16_VALUE( - 21.627), SIMDE_FLOAT16_VALUE( 66.122) },
{ SIMDE_FLOAT16_VALUE( - 50.625), SIMDE_FLOAT16_VALUE( 44.277), SIMDE_FLOAT16_VALUE( 18.487), SIMDE_FLOAT16_VALUE( - 25.136),
SIMDE_FLOAT16_VALUE( - 21.129), SIMDE_FLOAT16_VALUE( - 95.841), SIMDE_FLOAT16_VALUE( - 52.593), SIMDE_FLOAT16_VALUE( - 21.627) } },
{ { SIMDE_FLOAT16_VALUE( - 6.913), SIMDE_FLOAT16_VALUE( - 94.272), SIMDE_FLOAT16_VALUE( 11.297), SIMDE_FLOAT16_VALUE( 3.058),
SIMDE_FLOAT16_VALUE( - 5.001), SIMDE_FLOAT16_VALUE( - 7.243), SIMDE_FLOAT16_VALUE( 48.542), SIMDE_FLOAT16_VALUE( - 21.366) },
{ SIMDE_FLOAT16_VALUE( 18.542), SIMDE_FLOAT16_VALUE( 92.836), SIMDE_FLOAT16_VALUE( - 53.782), SIMDE_FLOAT16_VALUE( - 54.711),
SIMDE_FLOAT16_VALUE( 46.595), SIMDE_FLOAT16_VALUE( 50.270), SIMDE_FLOAT16_VALUE( 64.443), SIMDE_FLOAT16_VALUE( - 32.873) },
{ SIMDE_FLOAT16_VALUE( - 6.913), SIMDE_FLOAT16_VALUE( 18.542), SIMDE_FLOAT16_VALUE( 11.297), SIMDE_FLOAT16_VALUE( - 53.782),
SIMDE_FLOAT16_VALUE( - 5.001), SIMDE_FLOAT16_VALUE( 46.595), SIMDE_FLOAT16_VALUE( 48.542), SIMDE_FLOAT16_VALUE( 64.443) } },
{ { SIMDE_FLOAT16_VALUE( 92.715), SIMDE_FLOAT16_VALUE( 49.477), SIMDE_FLOAT16_VALUE( 85.205), SIMDE_FLOAT16_VALUE( 90.565),
SIMDE_FLOAT16_VALUE( - 47.228), SIMDE_FLOAT16_VALUE( - 61.293), SIMDE_FLOAT16_VALUE( 80.419), SIMDE_FLOAT16_VALUE( 32.831) },
{ SIMDE_FLOAT16_VALUE( - 59.790), SIMDE_FLOAT16_VALUE( 90.991), SIMDE_FLOAT16_VALUE( 9.151), SIMDE_FLOAT16_VALUE( 81.903),
SIMDE_FLOAT16_VALUE( 36.535), SIMDE_FLOAT16_VALUE( - 5.406), SIMDE_FLOAT16_VALUE( - 73.592), SIMDE_FLOAT16_VALUE( 52.041) },
{ SIMDE_FLOAT16_VALUE( 92.715), SIMDE_FLOAT16_VALUE( - 59.790), SIMDE_FLOAT16_VALUE( 85.205), SIMDE_FLOAT16_VALUE( 9.151),
SIMDE_FLOAT16_VALUE( - 47.228), SIMDE_FLOAT16_VALUE( 36.535), SIMDE_FLOAT16_VALUE( 80.419), SIMDE_FLOAT16_VALUE( - 73.592) } },
{ { SIMDE_FLOAT16_VALUE( - 5.048), SIMDE_FLOAT16_VALUE( - 15.367), SIMDE_FLOAT16_VALUE( - 85.673), SIMDE_FLOAT16_VALUE( 94.930),
SIMDE_FLOAT16_VALUE( 82.348), SIMDE_FLOAT16_VALUE( - 3.141), SIMDE_FLOAT16_VALUE( 83.294), SIMDE_FLOAT16_VALUE( 25.936) },
{ SIMDE_FLOAT16_VALUE( 96.385), SIMDE_FLOAT16_VALUE( - 79.579), SIMDE_FLOAT16_VALUE( - 4.256), SIMDE_FLOAT16_VALUE( - 34.022),
SIMDE_FLOAT16_VALUE( 82.922), SIMDE_FLOAT16_VALUE( - 1.174), SIMDE_FLOAT16_VALUE( 40.213), SIMDE_FLOAT16_VALUE( 55.100) },
{ SIMDE_FLOAT16_VALUE( - 5.048), SIMDE_FLOAT16_VALUE( 96.385), SIMDE_FLOAT16_VALUE( - 85.673), SIMDE_FLOAT16_VALUE( - 4.256),
SIMDE_FLOAT16_VALUE( 82.348), SIMDE_FLOAT16_VALUE( 82.922), SIMDE_FLOAT16_VALUE( 83.294), SIMDE_FLOAT16_VALUE( 40.213) } },
{ { SIMDE_FLOAT16_VALUE( 19.062), SIMDE_FLOAT16_VALUE( 43.816), SIMDE_FLOAT16_VALUE( - 30.166), SIMDE_FLOAT16_VALUE( - 39.978),
SIMDE_FLOAT16_VALUE( - 39.433), SIMDE_FLOAT16_VALUE( 11.691), SIMDE_FLOAT16_VALUE( 7.837), SIMDE_FLOAT16_VALUE( 17.290) },
{ SIMDE_FLOAT16_VALUE( 8.433), SIMDE_FLOAT16_VALUE( 16.426), SIMDE_FLOAT16_VALUE( - 43.558), SIMDE_FLOAT16_VALUE( 96.327),
SIMDE_FLOAT16_VALUE( - 25.953), SIMDE_FLOAT16_VALUE( - 22.456), SIMDE_FLOAT16_VALUE( - 81.824), SIMDE_FLOAT16_VALUE( 87.942) },
{ SIMDE_FLOAT16_VALUE( 19.062), SIMDE_FLOAT16_VALUE( 8.433), SIMDE_FLOAT16_VALUE( - 30.166), SIMDE_FLOAT16_VALUE( - 43.558),
SIMDE_FLOAT16_VALUE( - 39.433), SIMDE_FLOAT16_VALUE( - 25.953), SIMDE_FLOAT16_VALUE( 7.837), SIMDE_FLOAT16_VALUE( - 81.824) } },
{ { SIMDE_FLOAT16_VALUE( - 11.648), SIMDE_FLOAT16_VALUE( - 29.171), SIMDE_FLOAT16_VALUE( 80.053), SIMDE_FLOAT16_VALUE( - 68.578),
SIMDE_FLOAT16_VALUE( - 48.654), SIMDE_FLOAT16_VALUE( - 99.755), SIMDE_FLOAT16_VALUE( - 90.352), SIMDE_FLOAT16_VALUE( 89.383) },
{ SIMDE_FLOAT16_VALUE( - 33.866), SIMDE_FLOAT16_VALUE( - 47.474), SIMDE_FLOAT16_VALUE( - 66.626), SIMDE_FLOAT16_VALUE( - 97.760),
SIMDE_FLOAT16_VALUE( - 84.997), SIMDE_FLOAT16_VALUE( 67.434), SIMDE_FLOAT16_VALUE( - 97.087), SIMDE_FLOAT16_VALUE( - 32.962) },
{ SIMDE_FLOAT16_VALUE( - 11.648), SIMDE_FLOAT16_VALUE( - 33.866), SIMDE_FLOAT16_VALUE( 80.053), SIMDE_FLOAT16_VALUE( - 66.626),
SIMDE_FLOAT16_VALUE( - 48.654), SIMDE_FLOAT16_VALUE( - 84.997), SIMDE_FLOAT16_VALUE( - 90.352), SIMDE_FLOAT16_VALUE( - 97.087) } },
{ { SIMDE_FLOAT16_VALUE( 99.618), SIMDE_FLOAT16_VALUE( - 77.016), SIMDE_FLOAT16_VALUE( - 80.554), SIMDE_FLOAT16_VALUE( - 81.723),
SIMDE_FLOAT16_VALUE( 10.169), SIMDE_FLOAT16_VALUE( 23.695), SIMDE_FLOAT16_VALUE( - 19.190), SIMDE_FLOAT16_VALUE( 95.941) },
{ SIMDE_FLOAT16_VALUE( - 51.304), SIMDE_FLOAT16_VALUE( - 96.429), SIMDE_FLOAT16_VALUE( 13.144), SIMDE_FLOAT16_VALUE( - 7.245),
SIMDE_FLOAT16_VALUE( 29.744), SIMDE_FLOAT16_VALUE( 29.133), SIMDE_FLOAT16_VALUE( 74.282), SIMDE_FLOAT16_VALUE( - 74.127) },
{ SIMDE_FLOAT16_VALUE( 99.618), SIMDE_FLOAT16_VALUE( - 51.304), SIMDE_FLOAT16_VALUE( - 80.554), SIMDE_FLOAT16_VALUE( 13.144),
SIMDE_FLOAT16_VALUE( 10.169), SIMDE_FLOAT16_VALUE( 29.744), SIMDE_FLOAT16_VALUE( - 19.190), SIMDE_FLOAT16_VALUE( 74.282) } },
{ { SIMDE_FLOAT16_VALUE( 83.161), SIMDE_FLOAT16_VALUE( - 1.215), SIMDE_FLOAT16_VALUE( 78.312), SIMDE_FLOAT16_VALUE( - 84.448),
SIMDE_FLOAT16_VALUE( 81.889), SIMDE_FLOAT16_VALUE( 3.516), SIMDE_FLOAT16_VALUE( 29.221), SIMDE_FLOAT16_VALUE( - 43.978) },
{ SIMDE_FLOAT16_VALUE( 5.808), SIMDE_FLOAT16_VALUE( - 80.158), SIMDE_FLOAT16_VALUE( - 16.019), SIMDE_FLOAT16_VALUE( 94.441),
SIMDE_FLOAT16_VALUE( 76.241), SIMDE_FLOAT16_VALUE( 17.818), SIMDE_FLOAT16_VALUE( - 76.931), SIMDE_FLOAT16_VALUE( 91.708) },
{ SIMDE_FLOAT16_VALUE( 83.161), SIMDE_FLOAT16_VALUE( 5.808), SIMDE_FLOAT16_VALUE( 78.312), SIMDE_FLOAT16_VALUE( - 16.019),
SIMDE_FLOAT16_VALUE( 81.889), SIMDE_FLOAT16_VALUE( 76.241), SIMDE_FLOAT16_VALUE( 29.221), SIMDE_FLOAT16_VALUE( - 76.931) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float16x8_t a = simde_vld1q_f16(test_vec[i].a);
simde_float16x8_t b = simde_vld1q_f16(test_vec[i].b);
simde_float16x8_t r = simde_vtrn1q_f16(a, b);
simde_test_arm_neon_assert_equal_f16x8(r, simde_vld1q_f16(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_float16x8_t a = simde_test_arm_neon_random_f16x8(-100.0f, 100.0f);
simde_float16x8_t b = simde_test_arm_neon_random_f16x8(-100.0f, 100.0f);
simde_float16x8_t r = simde_vtrn1q_f16(a, b);
simde_test_arm_neon_write_f16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_f16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_f16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1q_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_float32 a[4];
simde_float32 b[4];
simde_float32 r[4];
} test_vec[] = {
{ { SIMDE_FLOAT32_C( -522.18), SIMDE_FLOAT32_C( 365.36), SIMDE_FLOAT32_C( -879.25), SIMDE_FLOAT32_C( -911.32) },
{ SIMDE_FLOAT32_C( 508.26), SIMDE_FLOAT32_C( 535.56), SIMDE_FLOAT32_C( -927.14), SIMDE_FLOAT32_C( -145.00) },
{ SIMDE_FLOAT32_C( -522.18), SIMDE_FLOAT32_C( 508.26), SIMDE_FLOAT32_C( -879.25), SIMDE_FLOAT32_C( -927.14) } },
{ { SIMDE_FLOAT32_C( -644.24), SIMDE_FLOAT32_C( 758.58), SIMDE_FLOAT32_C( 592.05), SIMDE_FLOAT32_C( 670.85) },
{ SIMDE_FLOAT32_C( 408.23), SIMDE_FLOAT32_C( -493.59), SIMDE_FLOAT32_C( -660.12), SIMDE_FLOAT32_C( 163.68) },
{ SIMDE_FLOAT32_C( -644.24), SIMDE_FLOAT32_C( 408.23), SIMDE_FLOAT32_C( 592.05), SIMDE_FLOAT32_C( -660.12) } },
{ { SIMDE_FLOAT32_C( -787.94), SIMDE_FLOAT32_C( -882.32), SIMDE_FLOAT32_C( 367.24), SIMDE_FLOAT32_C( -16.83) },
{ SIMDE_FLOAT32_C( -482.56), SIMDE_FLOAT32_C( -96.42), SIMDE_FLOAT32_C( -722.75), SIMDE_FLOAT32_C( -446.06) },
{ SIMDE_FLOAT32_C( -787.94), SIMDE_FLOAT32_C( -482.56), SIMDE_FLOAT32_C( 367.24), SIMDE_FLOAT32_C( -722.75) } },
{ { SIMDE_FLOAT32_C( -23.04), SIMDE_FLOAT32_C( 914.12), SIMDE_FLOAT32_C( 495.70), SIMDE_FLOAT32_C( 665.01) },
{ SIMDE_FLOAT32_C( 292.03), SIMDE_FLOAT32_C( -265.04), SIMDE_FLOAT32_C( 537.61), SIMDE_FLOAT32_C( 769.84) },
{ SIMDE_FLOAT32_C( -23.04), SIMDE_FLOAT32_C( 292.03), SIMDE_FLOAT32_C( 495.70), SIMDE_FLOAT32_C( 537.61) } },
{ { SIMDE_FLOAT32_C( -899.68), SIMDE_FLOAT32_C( 658.36), SIMDE_FLOAT32_C( 858.52), SIMDE_FLOAT32_C( 608.58) },
{ SIMDE_FLOAT32_C( 193.92), SIMDE_FLOAT32_C( 931.38), SIMDE_FLOAT32_C( -536.43), SIMDE_FLOAT32_C( 549.69) },
{ SIMDE_FLOAT32_C( -899.68), SIMDE_FLOAT32_C( 193.92), SIMDE_FLOAT32_C( 858.52), SIMDE_FLOAT32_C( -536.43) } },
{ { SIMDE_FLOAT32_C( 689.97), SIMDE_FLOAT32_C( -944.37), SIMDE_FLOAT32_C( 220.54), SIMDE_FLOAT32_C( 98.20) },
{ SIMDE_FLOAT32_C( -437.96), SIMDE_FLOAT32_C( 560.42), SIMDE_FLOAT32_C( -738.12), SIMDE_FLOAT32_C( -225.90) },
{ SIMDE_FLOAT32_C( 689.97), SIMDE_FLOAT32_C( -437.96), SIMDE_FLOAT32_C( 220.54), SIMDE_FLOAT32_C( -738.12) } },
{ { SIMDE_FLOAT32_C( 678.09), SIMDE_FLOAT32_C( 629.12), SIMDE_FLOAT32_C( 757.27), SIMDE_FLOAT32_C( -804.46) },
{ SIMDE_FLOAT32_C( -467.30), SIMDE_FLOAT32_C( -965.48), SIMDE_FLOAT32_C( -250.52), SIMDE_FLOAT32_C( 509.67) },
{ SIMDE_FLOAT32_C( 678.09), SIMDE_FLOAT32_C( -467.30), SIMDE_FLOAT32_C( 757.27), SIMDE_FLOAT32_C( -250.52) } },
{ { SIMDE_FLOAT32_C( 948.64), SIMDE_FLOAT32_C( -754.82), SIMDE_FLOAT32_C( 174.67), SIMDE_FLOAT32_C( 240.67) },
{ SIMDE_FLOAT32_C( -19.85), SIMDE_FLOAT32_C( -287.72), SIMDE_FLOAT32_C( 10.52), SIMDE_FLOAT32_C( 80.47) },
{ SIMDE_FLOAT32_C( 948.64), SIMDE_FLOAT32_C( -19.85), SIMDE_FLOAT32_C( 174.67), SIMDE_FLOAT32_C( 10.52) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float32x4_t a = simde_vld1q_f32(test_vec[i].a);
simde_float32x4_t b = simde_vld1q_f32(test_vec[i].b);
simde_float32x4_t r = simde_vtrn1q_f32(a, b);
simde_test_arm_neon_assert_equal_f32x4(r, simde_vld1q_f32(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_float32x4_t a = simde_test_arm_neon_random_f32x4(-1000.0f, 1000.0f);
simde_float32x4_t b = simde_test_arm_neon_random_f32x4(-1000.0f, 1000.0f);
simde_float32x4_t r = simde_vtrn1q_f32(a, b);
simde_test_arm_neon_write_f32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_f32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_f32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1q_f64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_float64 a[2];
simde_float64 b[2];
simde_float64 r[2];
} test_vec[] = {
{ { SIMDE_FLOAT64_C( -499.12), SIMDE_FLOAT64_C( -611.84) },
{ SIMDE_FLOAT64_C( 618.92), SIMDE_FLOAT64_C( -353.88) },
{ SIMDE_FLOAT64_C( -499.12), SIMDE_FLOAT64_C( 618.92) } },
{ { SIMDE_FLOAT64_C( 542.91), SIMDE_FLOAT64_C( 443.42) },
{ SIMDE_FLOAT64_C( -774.93), SIMDE_FLOAT64_C( 219.66) },
{ SIMDE_FLOAT64_C( 542.91), SIMDE_FLOAT64_C( -774.93) } },
{ { SIMDE_FLOAT64_C( 43.30), SIMDE_FLOAT64_C( 437.28) },
{ SIMDE_FLOAT64_C( 412.68), SIMDE_FLOAT64_C( -401.41) },
{ SIMDE_FLOAT64_C( 43.30), SIMDE_FLOAT64_C( 412.68) } },
{ { SIMDE_FLOAT64_C( 823.43), SIMDE_FLOAT64_C( 254.13) },
{ SIMDE_FLOAT64_C( -356.45), SIMDE_FLOAT64_C( 862.90) },
{ SIMDE_FLOAT64_C( 823.43), SIMDE_FLOAT64_C( -356.45) } },
{ { SIMDE_FLOAT64_C( -30.73), SIMDE_FLOAT64_C( 631.32) },
{ SIMDE_FLOAT64_C( 321.40), SIMDE_FLOAT64_C( 984.72) },
{ SIMDE_FLOAT64_C( -30.73), SIMDE_FLOAT64_C( 321.40) } },
{ { SIMDE_FLOAT64_C( 283.84), SIMDE_FLOAT64_C( -391.31) },
{ SIMDE_FLOAT64_C( 957.98), SIMDE_FLOAT64_C( 515.26) },
{ SIMDE_FLOAT64_C( 283.84), SIMDE_FLOAT64_C( 957.98) } },
{ { SIMDE_FLOAT64_C( -327.25), SIMDE_FLOAT64_C( -666.99) },
{ SIMDE_FLOAT64_C( -844.37), SIMDE_FLOAT64_C( -877.10) },
{ SIMDE_FLOAT64_C( -327.25), SIMDE_FLOAT64_C( -844.37) } },
{ { SIMDE_FLOAT64_C( 397.41), SIMDE_FLOAT64_C( -596.55) },
{ SIMDE_FLOAT64_C( 732.55), SIMDE_FLOAT64_C( 898.29) },
{ SIMDE_FLOAT64_C( 397.41), SIMDE_FLOAT64_C( 732.55) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float64x2_t a = simde_vld1q_f64(test_vec[i].a);
simde_float64x2_t b = simde_vld1q_f64(test_vec[i].b);
simde_float64x2_t r = simde_vtrn1q_f64(a, b);
simde_test_arm_neon_assert_equal_f64x2(r, simde_vld1q_f64(test_vec[i].r), 1);
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_float64x2_t a = simde_test_arm_neon_random_f64x2(SIMDE_FLOAT64_C(-1000.0), SIMDE_FLOAT64_C(1000.0));
simde_float64x2_t b = simde_test_arm_neon_random_f64x2(SIMDE_FLOAT64_C(-1000.0), SIMDE_FLOAT64_C(1000.0));
simde_float64x2_t r = simde_vtrn1q_f64(a, b);
simde_test_arm_neon_write_f64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_f64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_f64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1q_s8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int8_t a[16];
int8_t b[16];
int8_t r[16];
} test_vec[] = {
{ { -INT8_C( 5), INT8_C( 91), -INT8_C( 64), -INT8_C( 51), -INT8_C( 31), -INT8_C( 105), -INT8_C( 45), INT8_C( 96),
INT8_C( 5), -INT8_C( 120), INT8_C( 11), INT8_C( 81), -INT8_C( 40), INT8_C( 33), INT8_C( 126), -INT8_C( 48) },
{ -INT8_C( 4), -INT8_C( 12), INT8_C( 64), -INT8_C( 88), INT8_C( 17), INT8_C( 67), -INT8_C( 83), INT8_C( 106),
INT8_C( 71), -INT8_C( 114), INT8_C( 1), INT8_C( 60), INT8_C( 54), INT8_C( 81), INT8_C( 123), INT8_C( 49) },
{ -INT8_C( 5), -INT8_C( 4), -INT8_C( 64), INT8_C( 64), -INT8_C( 31), INT8_C( 17), -INT8_C( 45), -INT8_C( 83),
INT8_C( 5), INT8_C( 71), INT8_C( 11), INT8_C( 1), -INT8_C( 40), INT8_C( 54), INT8_C( 126), INT8_C( 123) } },
{ { -INT8_C( 84), INT8_C( 59), -INT8_C( 2), -INT8_C( 115), -INT8_C( 46), -INT8_C( 47), -INT8_C( 19), -INT8_C( 40),
INT8_C( 89), -INT8_C( 8), INT8_C( 41), INT8_C( 50), INT8_C( 25), -INT8_C( 89), INT8_C( 2), INT8_C( 21) },
{ -INT8_C( 101), INT8_C( 67), -INT8_C( 67), -INT8_C( 83), -INT8_C( 122), INT8_C( 107), INT8_C( 23), -INT8_C( 50),
-INT8_C( 7), INT8_C( 25), INT8_C( 10), INT8_C( 47), INT8_C( 106), -INT8_C( 123), INT8_C( 97), INT8_C( 22) },
{ -INT8_C( 84), -INT8_C( 101), -INT8_C( 2), -INT8_C( 67), -INT8_C( 46), -INT8_C( 122), -INT8_C( 19), INT8_C( 23),
INT8_C( 89), -INT8_C( 7), INT8_C( 41), INT8_C( 10), INT8_C( 25), INT8_C( 106), INT8_C( 2), INT8_C( 97) } },
{ { -INT8_C( 64), INT8_C( 95), -INT8_C( 93), -INT8_C( 110), INT8_C( 49), -INT8_C( 111), INT8_C( 106), -INT8_C( 118),
-INT8_C( 119), -INT8_C( 109), -INT8_C( 68), -INT8_C( 93), INT8_C( 59), -INT8_C( 65), -INT8_C( 72), -INT8_C( 42) },
{ INT8_C( 2), INT8_C( 118), -INT8_C( 125), -INT8_C( 120), -INT8_C( 31), -INT8_C( 101), INT8_C( 86), -INT8_C( 38),
-INT8_C( 76), INT8_C( 96), INT8_C( 9), INT8_C( 30), -INT8_C( 27), INT8_C( 106), INT8_C( 52), -INT8_C( 91) },
{ -INT8_C( 64), INT8_C( 2), -INT8_C( 93), -INT8_C( 125), INT8_C( 49), -INT8_C( 31), INT8_C( 106), INT8_C( 86),
-INT8_C( 119), -INT8_C( 76), -INT8_C( 68), INT8_C( 9), INT8_C( 59), -INT8_C( 27), -INT8_C( 72), INT8_C( 52) } },
{ { -INT8_C( 54), -INT8_C( 41), INT8_C( 56), -INT8_C( 5), INT8_C( 104), -INT8_C( 94), -INT8_C( 123), -INT8_C( 14),
INT8_C( 54), INT8_C( 66), -INT8_C( 107), INT8_C( 113), INT8_C( 1), INT8_C( 77), INT8_C( 71), INT8_C( 3) },
{ -INT8_C( 61), -INT8_C( 53), -INT8_C( 117), -INT8_C( 92), INT8_C( 102), -INT8_C( 30), INT8_C( 126), INT8_C( 26),
INT8_C( 66), -INT8_C( 120), INT8_C( 56), INT8_C( 40), -INT8_C( 14), INT8_C( 108), -INT8_C( 51), -INT8_C( 68) },
{ -INT8_C( 54), -INT8_C( 61), INT8_C( 56), -INT8_C( 117), INT8_C( 104), INT8_C( 102), -INT8_C( 123), INT8_C( 126),
INT8_C( 54), INT8_C( 66), -INT8_C( 107), INT8_C( 56), INT8_C( 1), -INT8_C( 14), INT8_C( 71), -INT8_C( 51) } },
{ { INT8_C( 67), INT8_C( 5), -INT8_C( 73), -INT8_C( 84), -INT8_C( 88), INT8_C( 61), -INT8_C( 98), -INT8_C( 34),
INT8_MAX, INT8_C( 51), INT8_C( 79), INT8_MIN, INT8_MIN, -INT8_C( 106), -INT8_C( 125), INT8_C( 68) },
{ INT8_C( 97), INT8_C( 14), -INT8_C( 24), -INT8_C( 57), -INT8_C( 16), INT8_C( 103), -INT8_C( 31), INT8_C( 51),
-INT8_C( 17), INT8_C( 25), INT8_C( 91), -INT8_C( 31), -INT8_C( 123), INT8_C( 40), -INT8_C( 98), -INT8_C( 55) },
{ INT8_C( 67), INT8_C( 97), -INT8_C( 73), -INT8_C( 24), -INT8_C( 88), -INT8_C( 16), -INT8_C( 98), -INT8_C( 31),
INT8_MAX, -INT8_C( 17), INT8_C( 79), INT8_C( 91), INT8_MIN, -INT8_C( 123), -INT8_C( 125), -INT8_C( 98) } },
{ { INT8_C( 46), INT8_C( 85), INT8_C( 117), -INT8_C( 42), -INT8_C( 110), INT8_C( 19), -INT8_C( 76), INT8_C( 17),
INT8_C( 70), INT8_C( 3), -INT8_C( 111), -INT8_C( 58), -INT8_C( 103), INT8_C( 20), INT8_C( 10), -INT8_C( 5) },
{ INT8_C( 35), -INT8_C( 13), -INT8_C( 62), INT8_C( 19), INT8_C( 90), -INT8_C( 92), INT8_C( 70), INT8_C( 73),
-INT8_C( 67), -INT8_C( 95), INT8_C( 42), INT8_C( 67), -INT8_C( 54), -INT8_C( 56), INT8_C( 12), -INT8_C( 8) },
{ INT8_C( 46), INT8_C( 35), INT8_C( 117), -INT8_C( 62), -INT8_C( 110), INT8_C( 90), -INT8_C( 76), INT8_C( 70),
INT8_C( 70), -INT8_C( 67), -INT8_C( 111), INT8_C( 42), -INT8_C( 103), -INT8_C( 54), INT8_C( 10), INT8_C( 12) } },
{ { INT8_C( 30), -INT8_C( 127), -INT8_C( 50), -INT8_C( 80), -INT8_C( 108), -INT8_C( 126), -INT8_C( 62), -INT8_C( 38),
-INT8_C( 123), INT8_C( 83), -INT8_C( 96), INT8_C( 30), INT8_C( 104), -INT8_C( 85), INT8_C( 25), -INT8_C( 117) },
{ -INT8_C( 98), -INT8_C( 36), -INT8_C( 98), -INT8_C( 8), INT8_MIN, -INT8_C( 27), INT8_C( 65), INT8_C( 61),
-INT8_C( 122), INT8_C( 107), INT8_MIN, INT8_C( 80), INT8_C( 52), -INT8_C( 116), INT8_C( 72), INT8_C( 82) },
{ INT8_C( 30), -INT8_C( 98), -INT8_C( 50), -INT8_C( 98), -INT8_C( 108), INT8_MIN, -INT8_C( 62), INT8_C( 65),
-INT8_C( 123), -INT8_C( 122), -INT8_C( 96), INT8_MIN, INT8_C( 104), INT8_C( 52), INT8_C( 25), INT8_C( 72) } },
{ { INT8_C( 13), INT8_C( 22), INT8_C( 2), -INT8_C( 95), -INT8_C( 104), -INT8_C( 60), INT8_C( 123), INT8_C( 29),
INT8_C( 24), INT8_C( 28), INT8_C( 60), INT8_MIN, -INT8_C( 57), INT8_C( 85), INT8_C( 11), INT8_C( 101) },
{ INT8_C( 49), -INT8_C( 87), INT8_C( 93), -INT8_C( 79), -INT8_C( 114), -INT8_C( 98), -INT8_C( 17), INT8_C( 21),
INT8_C( 9), INT8_C( 111), INT8_C( 101), INT8_C( 61), -INT8_C( 4), -INT8_C( 82), -INT8_C( 113), INT8_C( 9) },
{ INT8_C( 13), INT8_C( 49), INT8_C( 2), INT8_C( 93), -INT8_C( 104), -INT8_C( 114), INT8_C( 123), -INT8_C( 17),
INT8_C( 24), INT8_C( 9), INT8_C( 60), INT8_C( 101), -INT8_C( 57), -INT8_C( 4), INT8_C( 11), -INT8_C( 113) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int8x16_t a = simde_vld1q_s8(test_vec[i].a);
simde_int8x16_t b = simde_vld1q_s8(test_vec[i].b);
simde_int8x16_t r = simde_vtrn1q_s8(a, b);
simde_test_arm_neon_assert_equal_i8x16(r, simde_vld1q_s8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int8x16_t a = simde_test_arm_neon_random_i8x16();
simde_int8x16_t b = simde_test_arm_neon_random_i8x16();
simde_int8x16_t r = simde_vtrn1q_s8(a, b);
simde_test_arm_neon_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1q_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int16_t a[8];
int16_t b[8];
int16_t r[8];
} test_vec[] = {
{ { INT16_C( 14817), -INT16_C( 15912), INT16_C( 6827), -INT16_C( 16841), -INT16_C( 15885), INT16_C( 6412), INT16_C( 12676), INT16_C( 26747) },
{ INT16_C( 31336), INT16_C( 23842), INT16_C( 32211), -INT16_C( 23641), INT16_C( 22041), -INT16_C( 28634), -INT16_C( 6631), -INT16_C( 1058) },
{ INT16_C( 14817), INT16_C( 31336), INT16_C( 6827), INT16_C( 32211), -INT16_C( 15885), INT16_C( 22041), INT16_C( 12676), -INT16_C( 6631) } },
{ { -INT16_C( 18913), -INT16_C( 13636), -INT16_C( 3119), -INT16_C( 15224), -INT16_C( 27468), INT16_C( 14558), INT16_C( 22981), INT16_C( 11680) },
{ -INT16_C( 15405), -INT16_C( 22902), INT16_C( 12864), INT16_C( 22857), INT16_C( 28552), -INT16_C( 24086), -INT16_C( 14251), INT16_C( 29852) },
{ -INT16_C( 18913), -INT16_C( 15405), -INT16_C( 3119), INT16_C( 12864), -INT16_C( 27468), INT16_C( 28552), INT16_C( 22981), -INT16_C( 14251) } },
{ { INT16_C( 22655), INT16_C( 20543), -INT16_C( 14517), INT16_C( 20), -INT16_C( 3492), INT16_C( 8504), -INT16_C( 9908), INT16_C( 8015) },
{ -INT16_C( 9828), -INT16_C( 9018), INT16_C( 3851), -INT16_C( 27850), INT16_C( 8319), -INT16_C( 11211), -INT16_C( 11800), INT16_C( 26441) },
{ INT16_C( 22655), -INT16_C( 9828), -INT16_C( 14517), INT16_C( 3851), -INT16_C( 3492), INT16_C( 8319), -INT16_C( 9908), -INT16_C( 11800) } },
{ { -INT16_C( 30678), INT16_C( 30135), -INT16_C( 13233), -INT16_C( 21643), -INT16_C( 20802), INT16_C( 2765), INT16_C( 7303), INT16_C( 9002) },
{ -INT16_C( 3851), INT16_C( 511), INT16_C( 13823), INT16_C( 32404), -INT16_C( 13995), INT16_C( 15955), -INT16_C( 25445), -INT16_C( 14939) },
{ -INT16_C( 30678), -INT16_C( 3851), -INT16_C( 13233), INT16_C( 13823), -INT16_C( 20802), -INT16_C( 13995), INT16_C( 7303), -INT16_C( 25445) } },
{ { INT16_C( 23844), INT16_C( 29498), -INT16_C( 20439), -INT16_C( 6369), -INT16_C( 5026), -INT16_C( 6670), INT16_C( 7176), -INT16_C( 760) },
{ INT16_C( 1804), INT16_C( 3070), -INT16_C( 27843), -INT16_C( 28022), -INT16_C( 8868), -INT16_C( 2096), INT16_C( 30329), -INT16_C( 25156) },
{ INT16_C( 23844), INT16_C( 1804), -INT16_C( 20439), -INT16_C( 27843), -INT16_C( 5026), -INT16_C( 8868), INT16_C( 7176), INT16_C( 30329) } },
{ { -INT16_C( 2093), -INT16_C( 1008), INT16_C( 12199), INT16_C( 1507), -INT16_C( 10981), INT16_C( 9194), -INT16_C( 3343), -INT16_C( 735) },
{ INT16_C( 8185), INT16_C( 13833), -INT16_C( 27726), INT16_C( 4041), -INT16_C( 26256), -INT16_C( 5882), -INT16_C( 15601), -INT16_C( 7546) },
{ -INT16_C( 2093), INT16_C( 8185), INT16_C( 12199), -INT16_C( 27726), -INT16_C( 10981), -INT16_C( 26256), -INT16_C( 3343), -INT16_C( 15601) } },
{ { -INT16_C( 26950), INT16_C( 25054), -INT16_C( 15674), -INT16_C( 7834), INT16_C( 20631), -INT16_C( 30459), INT16_C( 9794), INT16_C( 15238) },
{ -INT16_C( 28859), -INT16_C( 1934), INT16_C( 15138), -INT16_C( 28153), INT16_C( 3540), -INT16_C( 7045), INT16_C( 464), -INT16_C( 30010) },
{ -INT16_C( 26950), -INT16_C( 28859), -INT16_C( 15674), INT16_C( 15138), INT16_C( 20631), INT16_C( 3540), INT16_C( 9794), INT16_C( 464) } },
{ { -INT16_C( 23144), INT16_C( 24299), INT16_C( 20839), -INT16_C( 449), INT16_C( 17569), -INT16_C( 7289), INT16_C( 3690), -INT16_C( 20449) },
{ -INT16_C( 28259), -INT16_C( 16216), -INT16_C( 20532), -INT16_C( 24494), -INT16_C( 12612), -INT16_C( 29308), INT16_C( 19407), INT16_C( 26391) },
{ -INT16_C( 23144), -INT16_C( 28259), INT16_C( 20839), -INT16_C( 20532), INT16_C( 17569), -INT16_C( 12612), INT16_C( 3690), INT16_C( 19407) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int16x8_t a = simde_vld1q_s16(test_vec[i].a);
simde_int16x8_t b = simde_vld1q_s16(test_vec[i].b);
simde_int16x8_t r = simde_vtrn1q_s16(a, b);
simde_test_arm_neon_assert_equal_i16x8(r, simde_vld1q_s16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int16x8_t a = simde_test_arm_neon_random_i16x8();
simde_int16x8_t b = simde_test_arm_neon_random_i16x8();
simde_int16x8_t r = simde_vtrn1q_s16(a, b);
simde_test_arm_neon_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1q_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int32_t a[4];
int32_t b[4];
int32_t r[4];
} test_vec[] = {
{ { -INT32_C( 1341418916), INT32_C( 777003733), -INT32_C( 1026009579), INT32_C( 1018759377) },
{ -INT32_C( 587710840), -INT32_C( 1130803257), INT32_C( 296467978), INT32_C( 730158286) },
{ -INT32_C( 1341418916), -INT32_C( 587710840), -INT32_C( 1026009579), INT32_C( 296467978) } },
{ { -INT32_C( 1126461209), -INT32_C( 924111949), INT32_C( 1401668482), INT32_C( 1418675403) },
{ INT32_C( 1227917186), -INT32_C( 536426026), INT32_C( 1441902983), -INT32_C( 310348026) },
{ -INT32_C( 1126461209), INT32_C( 1227917186), INT32_C( 1401668482), INT32_C( 1441902983) } },
{ { -INT32_C( 1163306233), INT32_C( 159618183), INT32_C( 593235544), -INT32_C( 730338478) },
{ INT32_C( 1209968498), -INT32_C( 148364176), -INT32_C( 615704107), -INT32_C( 1731670640) },
{ -INT32_C( 1163306233), INT32_C( 1209968498), INT32_C( 593235544), -INT32_C( 615704107) } },
{ { -INT32_C( 1336774103), INT32_C( 1589236998), INT32_C( 897717731), INT32_C( 1913321728) },
{ INT32_C( 297412769), INT32_C( 554295884), -INT32_C( 1929554181), INT32_C( 1277478179) },
{ -INT32_C( 1336774103), INT32_C( 297412769), INT32_C( 897717731), -INT32_C( 1929554181) } },
{ { INT32_C( 1056732727), INT32_C( 798799180), -INT32_C( 899342646), -INT32_C( 1187221736) },
{ -INT32_C( 473237865), -INT32_C( 737881128), INT32_C( 1298137385), -INT32_C( 23493433) },
{ INT32_C( 1056732727), -INT32_C( 473237865), -INT32_C( 899342646), INT32_C( 1298137385) } },
{ { INT32_C( 1178375930), INT32_C( 376887627), INT32_C( 266394615), -INT32_C( 506978998) },
{ -INT32_C( 322661613), -INT32_C( 1866413978), -INT32_C( 1847779126), -INT32_C( 1634765148) },
{ INT32_C( 1178375930), -INT32_C( 322661613), INT32_C( 266394615), -INT32_C( 1847779126) } },
{ { INT32_C( 1491454988), -INT32_C( 1670489179), -INT32_C( 2136191434), INT32_C( 2137093227) },
{ INT32_C( 1852515591), -INT32_C( 1208079379), -INT32_C( 280437941), INT32_C( 1586354257) },
{ INT32_C( 1491454988), INT32_C( 1852515591), -INT32_C( 2136191434), -INT32_C( 280437941) } },
{ { INT32_C( 1236693668), INT32_C( 65348813), -INT32_C( 561802894), INT32_C( 224257030) },
{ -INT32_C( 142882807), INT32_C( 1051621875), -INT32_C( 1506937004), INT32_C( 1929689807) },
{ INT32_C( 1236693668), -INT32_C( 142882807), -INT32_C( 561802894), -INT32_C( 1506937004) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int32x4_t a = simde_vld1q_s32(test_vec[i].a);
simde_int32x4_t b = simde_vld1q_s32(test_vec[i].b);
simde_int32x4_t r = simde_vtrn1q_s32(a, b);
simde_test_arm_neon_assert_equal_i32x4(r, simde_vld1q_s32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int32x4_t a = simde_test_arm_neon_random_i32x4();
simde_int32x4_t b = simde_test_arm_neon_random_i32x4();
simde_int32x4_t r = simde_vtrn1q_s32(a, b);
simde_test_arm_neon_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1q_s64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
int64_t a[2];
int64_t b[2];
int64_t r[2];
} test_vec[] = {
{ { INT64_C( 2370942768217045703), INT64_C( 3834060604335488599) },
{ INT64_C( 5962793575161641133), INT64_C( 2451362664542500656) },
{ INT64_C( 2370942768217045703), INT64_C( 5962793575161641133) } },
{ { -INT64_C( 91528125595492425), INT64_C( 8454808771016685138) },
{ INT64_C( 1997428809620116027), INT64_C( 2503757759122402625) },
{ -INT64_C( 91528125595492425), INT64_C( 1997428809620116027) } },
{ { -INT64_C( 3375599107157742718), INT64_C( 3758894877307401709) },
{ INT64_C( 4548726874596619289), -INT64_C( 2068388762230178113) },
{ -INT64_C( 3375599107157742718), INT64_C( 4548726874596619289) } },
{ { INT64_C( 7752440428129683270), -INT64_C( 1741121954605135960) },
{ -INT64_C( 9134413012119359234), -INT64_C( 464162460032952246) },
{ INT64_C( 7752440428129683270), -INT64_C( 9134413012119359234) } },
{ { INT64_C( 8495572088113830653), INT64_C( 5733906210614609629) },
{ -INT64_C( 3197405612916048547), INT64_C( 4488976398999767712) },
{ INT64_C( 8495572088113830653), -INT64_C( 3197405612916048547) } },
{ { INT64_C( 4533049365362183078), INT64_C( 5280325345817001894) },
{ -INT64_C( 4948321176345078792), -INT64_C( 8876213478574075309) },
{ INT64_C( 4533049365362183078), -INT64_C( 4948321176345078792) } },
{ { -INT64_C( 3385053066255955098), INT64_C( 6995515642783330015) },
{ -INT64_C( 2776126643429474653), INT64_C( 5146839089142400778) },
{ -INT64_C( 3385053066255955098), -INT64_C( 2776126643429474653) } },
{ { INT64_C( 2649826617627403465), INT64_C( 4813228284004306689) },
{ -INT64_C( 1088892655976271997), INT64_C( 6352686333166178304) },
{ INT64_C( 2649826617627403465), -INT64_C( 1088892655976271997) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int64x2_t a = simde_vld1q_s64(test_vec[i].a);
simde_int64x2_t b = simde_vld1q_s64(test_vec[i].b);
simde_int64x2_t r = simde_vtrn1q_s64(a, b);
simde_test_arm_neon_assert_equal_i64x2(r, simde_vld1q_s64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int64x2_t a = simde_test_arm_neon_random_i64x2();
simde_int64x2_t b = simde_test_arm_neon_random_i64x2();
simde_int64x2_t r = simde_vtrn1q_s64(a, b);
simde_test_arm_neon_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1q_u8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint8_t a[16];
uint8_t b[16];
uint8_t r[16];
} test_vec[] = {
{ { UINT8_C( 32), UINT8_C(105), UINT8_C( 60), UINT8_C( 17), UINT8_C(121), UINT8_C(145), UINT8_C( 45), UINT8_C(135),
UINT8_C(225), UINT8_C( 38), UINT8_C(228), UINT8_C( 88), UINT8_C(200), UINT8_C(213), UINT8_C(147), UINT8_C(151) },
{ UINT8_C(177), UINT8_C(122), UINT8_C(147), UINT8_C( 63), UINT8_C(245), UINT8_C(244), UINT8_C(140), UINT8_C(165),
UINT8_C(180), UINT8_C( 76), UINT8_C( 77), UINT8_C(249), UINT8_C( 12), UINT8_C( 91), UINT8_C( 53), UINT8_C( 45) },
{ UINT8_C( 32), UINT8_C(177), UINT8_C( 60), UINT8_C(147), UINT8_C(121), UINT8_C(245), UINT8_C( 45), UINT8_C(140),
UINT8_C(225), UINT8_C(180), UINT8_C(228), UINT8_C( 77), UINT8_C(200), UINT8_C( 12), UINT8_C(147), UINT8_C( 53) } },
{ { UINT8_C(196), UINT8_C(113), UINT8_C( 62), UINT8_C( 61), UINT8_C( 2), UINT8_C(108), UINT8_C(196), UINT8_C(228),
UINT8_C(146), UINT8_C(168), UINT8_C( 60), UINT8_C( 90), UINT8_C(126), UINT8_C(207), UINT8_C(241), UINT8_C( 47) },
{ UINT8_C( 73), UINT8_C(133), UINT8_C(110), UINT8_C( 62), UINT8_C(121), UINT8_C(251), UINT8_C(227), UINT8_C( 45),
UINT8_C( 71), UINT8_C( 49), UINT8_C( 38), UINT8_C( 83), UINT8_C(140), UINT8_C( 91), UINT8_C(128), UINT8_C( 80) },
{ UINT8_C(196), UINT8_C( 73), UINT8_C( 62), UINT8_C(110), UINT8_C( 2), UINT8_C(121), UINT8_C(196), UINT8_C(227),
UINT8_C(146), UINT8_C( 71), UINT8_C( 60), UINT8_C( 38), UINT8_C(126), UINT8_C(140), UINT8_C(241), UINT8_C(128) } },
{ { UINT8_C(204), UINT8_C(191), UINT8_C(141), UINT8_C(206), UINT8_C( 43), UINT8_C( 81), UINT8_C(178), UINT8_C(189),
UINT8_C(250), UINT8_C(238), UINT8_C( 23), UINT8_C(120), UINT8_C(189), UINT8_C( 9), UINT8_C(167), UINT8_C( 7) },
{ UINT8_C(142), UINT8_C( 21), UINT8_C( 69), UINT8_C( 7), UINT8_C( 16), UINT8_C( 41), UINT8_C( 52), UINT8_C( 87),
UINT8_C( 90), UINT8_C( 90), UINT8_C(171), UINT8_C(230), UINT8_C(181), UINT8_C( 43), UINT8_C( 54), UINT8_C(129) },
{ UINT8_C(204), UINT8_C(142), UINT8_C(141), UINT8_C( 69), UINT8_C( 43), UINT8_C( 16), UINT8_C(178), UINT8_C( 52),
UINT8_C(250), UINT8_C( 90), UINT8_C( 23), UINT8_C(171), UINT8_C(189), UINT8_C(181), UINT8_C(167), UINT8_C( 54) } },
{ { UINT8_C(234), UINT8_C(195), UINT8_C( 79), UINT8_C( 21), UINT8_C( 20), UINT8_C( 2), UINT8_C(210), UINT8_C( 14),
UINT8_C(240), UINT8_C(234), UINT8_C(134), UINT8_C(174), UINT8_C(243), UINT8_C( 45), UINT8_C(181), UINT8_C(129) },
{ UINT8_C( 67), UINT8_C(250), UINT8_C(136), UINT8_C( 83), UINT8_C( 35), UINT8_C(188), UINT8_C(171), UINT8_C(125),
UINT8_C( 22), UINT8_C( 86), UINT8_C( 99), UINT8_C(203), UINT8_C(129), UINT8_C(153), UINT8_C( 76), UINT8_C(108) },
{ UINT8_C(234), UINT8_C( 67), UINT8_C( 79), UINT8_C(136), UINT8_C( 20), UINT8_C( 35), UINT8_C(210), UINT8_C(171),
UINT8_C(240), UINT8_C( 22), UINT8_C(134), UINT8_C( 99), UINT8_C(243), UINT8_C(129), UINT8_C(181), UINT8_C( 76) } },
{ { UINT8_C( 92), UINT8_C(155), UINT8_C(129), UINT8_C(113), UINT8_C(157), UINT8_C( 84), UINT8_C(127), UINT8_C(142),
UINT8_C( 62), UINT8_C( 6), UINT8_C( 60), UINT8_C( 49), UINT8_C( 51), UINT8_C(241), UINT8_C(178), UINT8_C(118) },
{ UINT8_C(235), UINT8_C( 58), UINT8_C(202), UINT8_C( 15), UINT8_C(246), UINT8_C(117), UINT8_C(140), UINT8_C( 12),
UINT8_C(203), UINT8_C(240), UINT8_C(215), UINT8_C( 76), UINT8_C(137), UINT8_C( 35), UINT8_C(184), UINT8_C(230) },
{ UINT8_C( 92), UINT8_C(235), UINT8_C(129), UINT8_C(202), UINT8_C(157), UINT8_C(246), UINT8_C(127), UINT8_C(140),
UINT8_C( 62), UINT8_C(203), UINT8_C( 60), UINT8_C(215), UINT8_C( 51), UINT8_C(137), UINT8_C(178), UINT8_C(184) } },
{ { UINT8_C(190), UINT8_C( 58), UINT8_C( 87), UINT8_C( 92), UINT8_C(142), UINT8_C(214), UINT8_C(234), UINT8_C(204),
UINT8_C(220), UINT8_C( 38), UINT8_C(253), UINT8_C( 16), UINT8_C( 23), UINT8_C(175), UINT8_C(134), UINT8_C( 2) },
{ UINT8_C(233), UINT8_C( 80), UINT8_C( 17), UINT8_C(223), UINT8_C(197), UINT8_C(158), UINT8_C(235), UINT8_C(144),
UINT8_C(142), UINT8_C(194), UINT8_C(221), UINT8_C( 23), UINT8_C(229), UINT8_C(149), UINT8_C(253), UINT8_C(163) },
{ UINT8_C(190), UINT8_C(233), UINT8_C( 87), UINT8_C( 17), UINT8_C(142), UINT8_C(197), UINT8_C(234), UINT8_C(235),
UINT8_C(220), UINT8_C(142), UINT8_C(253), UINT8_C(221), UINT8_C( 23), UINT8_C(229), UINT8_C(134), UINT8_C(253) } },
{ { UINT8_C(207), UINT8_C( 84), UINT8_MAX, UINT8_C( 93), UINT8_C( 43), UINT8_C(233), UINT8_C( 41), UINT8_C( 7),
UINT8_C( 15), UINT8_C( 38), UINT8_C( 23), UINT8_C( 38), UINT8_C(213), UINT8_C(158), UINT8_C( 41), UINT8_C(190) },
{ UINT8_C(238), UINT8_C( 58), UINT8_C(157), UINT8_C(180), UINT8_C(216), UINT8_C(136), UINT8_C( 68), UINT8_C(102),
UINT8_C( 74), UINT8_C( 33), UINT8_C(126), UINT8_C( 47), UINT8_C(183), UINT8_C(123), UINT8_C(211), UINT8_C(134) },
{ UINT8_C(207), UINT8_C(238), UINT8_MAX, UINT8_C(157), UINT8_C( 43), UINT8_C(216), UINT8_C( 41), UINT8_C( 68),
UINT8_C( 15), UINT8_C( 74), UINT8_C( 23), UINT8_C(126), UINT8_C(213), UINT8_C(183), UINT8_C( 41), UINT8_C(211) } },
{ { UINT8_C(208), UINT8_C(210), UINT8_C(228), UINT8_C(251), UINT8_C(188), UINT8_C( 13), UINT8_C( 2), UINT8_C(203),
UINT8_C( 52), UINT8_C( 26), UINT8_C(242), UINT8_C( 9), UINT8_C(184), UINT8_C( 27), UINT8_C(200), UINT8_C(166) },
{ UINT8_C( 85), UINT8_C(101), UINT8_C( 90), UINT8_C( 46), UINT8_C(238), UINT8_C(159), UINT8_C(148), UINT8_C( 56),
UINT8_C(192), UINT8_C( 18), UINT8_C(104), UINT8_C(119), UINT8_C(142), UINT8_C( 59), UINT8_C(254), UINT8_C( 94) },
{ UINT8_C(208), UINT8_C( 85), UINT8_C(228), UINT8_C( 90), UINT8_C(188), UINT8_C(238), UINT8_C( 2), UINT8_C(148),
UINT8_C( 52), UINT8_C(192), UINT8_C(242), UINT8_C(104), UINT8_C(184), UINT8_C(142), UINT8_C(200), UINT8_C(254) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint8x16_t a = simde_vld1q_u8(test_vec[i].a);
simde_uint8x16_t b = simde_vld1q_u8(test_vec[i].b);
simde_uint8x16_t r = simde_vtrn1q_u8(a, b);
simde_test_arm_neon_assert_equal_u8x16(r, simde_vld1q_u8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint8x16_t a = simde_test_arm_neon_random_u8x16();
simde_uint8x16_t b = simde_test_arm_neon_random_u8x16();
simde_uint8x16_t r = simde_vtrn1q_u8(a, b);
simde_test_arm_neon_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_u8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1q_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint16_t a[8];
uint16_t b[8];
uint16_t r[8];
} test_vec[] = {
{ { UINT16_C(14167), UINT16_C(21279), UINT16_C(48551), UINT16_C(14943), UINT16_C(56959), UINT16_C( 3699), UINT16_C(63440), UINT16_C(55030) },
{ UINT16_C(40429), UINT16_C(42656), UINT16_C(10703), UINT16_C(50757), UINT16_C(39485), UINT16_C(24810), UINT16_C(45053), UINT16_C(22004) },
{ UINT16_C(14167), UINT16_C(40429), UINT16_C(48551), UINT16_C(10703), UINT16_C(56959), UINT16_C(39485), UINT16_C(63440), UINT16_C(45053) } },
{ { UINT16_C( 5094), UINT16_C(36264), UINT16_C( 2001), UINT16_C(20680), UINT16_C(15333), UINT16_C(46430), UINT16_C(21555), UINT16_C( 8331) },
{ UINT16_C(11505), UINT16_C(49351), UINT16_C( 3157), UINT16_C(37510), UINT16_C(28839), UINT16_C(42226), UINT16_C(59167), UINT16_C( 1785) },
{ UINT16_C( 5094), UINT16_C(11505), UINT16_C( 2001), UINT16_C( 3157), UINT16_C(15333), UINT16_C(28839), UINT16_C(21555), UINT16_C(59167) } },
{ { UINT16_C(41466), UINT16_C(52115), UINT16_C(23464), UINT16_C(36124), UINT16_C(31383), UINT16_C(51778), UINT16_C(52943), UINT16_C(49386) },
{ UINT16_C(45562), UINT16_C(20353), UINT16_C( 1982), UINT16_C(26082), UINT16_C(54392), UINT16_C(38665), UINT16_C( 955), UINT16_C(46749) },
{ UINT16_C(41466), UINT16_C(45562), UINT16_C(23464), UINT16_C( 1982), UINT16_C(31383), UINT16_C(54392), UINT16_C(52943), UINT16_C( 955) } },
{ { UINT16_C(12708), UINT16_C(19841), UINT16_C(40332), UINT16_C( 9178), UINT16_C( 7448), UINT16_C(59373), UINT16_C(55531), UINT16_C(58791) },
{ UINT16_C(10377), UINT16_C(18228), UINT16_C( 5680), UINT16_C(43180), UINT16_C(46827), UINT16_C(42559), UINT16_C(56761), UINT16_C(23900) },
{ UINT16_C(12708), UINT16_C(10377), UINT16_C(40332), UINT16_C( 5680), UINT16_C( 7448), UINT16_C(46827), UINT16_C(55531), UINT16_C(56761) } },
{ { UINT16_C(56846), UINT16_C(39594), UINT16_C(34171), UINT16_C(37822), UINT16_C(43938), UINT16_C(36218), UINT16_C( 8835), UINT16_C( 3442) },
{ UINT16_C(42570), UINT16_C(31316), UINT16_C( 445), UINT16_C(43042), UINT16_C(25271), UINT16_C(28750), UINT16_C(43839), UINT16_C(19917) },
{ UINT16_C(56846), UINT16_C(42570), UINT16_C(34171), UINT16_C( 445), UINT16_C(43938), UINT16_C(25271), UINT16_C( 8835), UINT16_C(43839) } },
{ { UINT16_C(30857), UINT16_C( 1255), UINT16_C(42493), UINT16_C(40856), UINT16_C( 4689), UINT16_C(54316), UINT16_C(40500), UINT16_C(32737) },
{ UINT16_C(13892), UINT16_C( 505), UINT16_C( 7223), UINT16_C(61097), UINT16_C(63614), UINT16_C(48478), UINT16_C(11171), UINT16_C(11274) },
{ UINT16_C(30857), UINT16_C(13892), UINT16_C(42493), UINT16_C( 7223), UINT16_C( 4689), UINT16_C(63614), UINT16_C(40500), UINT16_C(11171) } },
{ { UINT16_C(61859), UINT16_C(41008), UINT16_C(51351), UINT16_C(59455), UINT16_C(27611), UINT16_C( 4028), UINT16_C(40457), UINT16_C(20110) },
{ UINT16_C(35028), UINT16_C( 2895), UINT16_C(63908), UINT16_C( 8953), UINT16_C(22513), UINT16_C(38111), UINT16_C(59778), UINT16_C( 9920) },
{ UINT16_C(61859), UINT16_C(35028), UINT16_C(51351), UINT16_C(63908), UINT16_C(27611), UINT16_C(22513), UINT16_C(40457), UINT16_C(59778) } },
{ { UINT16_C(61658), UINT16_C(29126), UINT16_C( 1721), UINT16_C(37977), UINT16_C( 5745), UINT16_C(31651), UINT16_C(12980), UINT16_C(35017) },
{ UINT16_C( 6330), UINT16_C(24211), UINT16_C(35857), UINT16_C( 640), UINT16_C(24547), UINT16_C(26006), UINT16_C(22088), UINT16_C( 8843) },
{ UINT16_C(61658), UINT16_C( 6330), UINT16_C( 1721), UINT16_C(35857), UINT16_C( 5745), UINT16_C(24547), UINT16_C(12980), UINT16_C(22088) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint16x8_t a = simde_vld1q_u16(test_vec[i].a);
simde_uint16x8_t b = simde_vld1q_u16(test_vec[i].b);
simde_uint16x8_t r = simde_vtrn1q_u16(a, b);
simde_test_arm_neon_assert_equal_u16x8(r, simde_vld1q_u16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint16x8_t a = simde_test_arm_neon_random_u16x8();
simde_uint16x8_t b = simde_test_arm_neon_random_u16x8();
simde_uint16x8_t r = simde_vtrn1q_u16(a, b);
simde_test_arm_neon_write_u16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_u16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1q_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint32_t a[4];
uint32_t b[4];
uint32_t r[4];
} test_vec[] = {
{ { UINT32_C( 497895404), UINT32_C(1842434419), UINT32_C(2057525496), UINT32_C(2082404662) },
{ UINT32_C( 744362374), UINT32_C(1722726623), UINT32_C(2688313178), UINT32_C(3645033197) },
{ UINT32_C( 497895404), UINT32_C( 744362374), UINT32_C(2057525496), UINT32_C(2688313178) } },
{ { UINT32_C(2230775569), UINT32_C( 955369280), UINT32_C(1454544160), UINT32_C( 366203278) },
{ UINT32_C(3242275298), UINT32_C(1143468009), UINT32_C(1155818583), UINT32_C(1058874926) },
{ UINT32_C(2230775569), UINT32_C(3242275298), UINT32_C(1454544160), UINT32_C(1155818583) } },
{ { UINT32_C(1438848021), UINT32_C(4220433883), UINT32_C(3629269066), UINT32_C(4092405009) },
{ UINT32_C(1068772950), UINT32_C(1971575838), UINT32_C(1857644608), UINT32_C(2762856078) },
{ UINT32_C(1438848021), UINT32_C(1068772950), UINT32_C(3629269066), UINT32_C(1857644608) } },
{ { UINT32_C(3338236138), UINT32_C(1874954021), UINT32_C(3645379528), UINT32_C(2395813176) },
{ UINT32_C(2194571620), UINT32_C(2650231133), UINT32_C(1208725689), UINT32_C(1911339142) },
{ UINT32_C(3338236138), UINT32_C(2194571620), UINT32_C(3645379528), UINT32_C(1208725689) } },
{ { UINT32_C(1312285993), UINT32_C( 901707885), UINT32_C(1141769740), UINT32_C(2681461563) },
{ UINT32_C(3122766173), UINT32_C(2891454706), UINT32_C(1341416392), UINT32_C(1170268188) },
{ UINT32_C(1312285993), UINT32_C(3122766173), UINT32_C(1141769740), UINT32_C(1341416392) } },
{ { UINT32_C( 848558021), UINT32_C(4217852399), UINT32_C(2470475351), UINT32_C(2922517329) },
{ UINT32_C(2791920820), UINT32_C( 894615916), UINT32_C(1082410532), UINT32_C(3968156710) },
{ UINT32_C( 848558021), UINT32_C(2791920820), UINT32_C(2470475351), UINT32_C(1082410532) } },
{ { UINT32_C( 706615611), UINT32_C(3257304682), UINT32_C(1297442556), UINT32_C( 771524473) },
{ UINT32_C(1221813723), UINT32_C(1249715750), UINT32_C(2475360620), UINT32_C(2155810885) },
{ UINT32_C( 706615611), UINT32_C(1221813723), UINT32_C(1297442556), UINT32_C(2475360620) } },
{ { UINT32_C(2494209321), UINT32_C( 525783075), UINT32_C(2943200054), UINT32_C( 249325874) },
{ UINT32_C(4099322062), UINT32_C(1111413718), UINT32_C( 433441236), UINT32_C( 60380378) },
{ UINT32_C(2494209321), UINT32_C(4099322062), UINT32_C(2943200054), UINT32_C( 433441236) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint32x4_t a = simde_vld1q_u32(test_vec[i].a);
simde_uint32x4_t b = simde_vld1q_u32(test_vec[i].b);
simde_uint32x4_t r = simde_vtrn1q_u32(a, b);
simde_test_arm_neon_assert_equal_u32x4(r, simde_vld1q_u32(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint32x4_t a = simde_test_arm_neon_random_u32x4();
simde_uint32x4_t b = simde_test_arm_neon_random_u32x4();
simde_uint32x4_t r = simde_vtrn1q_u32(a, b);
simde_test_arm_neon_write_u32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_u32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1q_u64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
uint64_t a[2];
uint64_t b[2];
uint64_t r[2];
} test_vec[] = {
{ { UINT64_C( 4815427970974768462), UINT64_C( 6946629186605919678) },
{ UINT64_C(17577554379567712573), UINT64_C( 9507926976227586244) },
{ UINT64_C( 4815427970974768462), UINT64_C(17577554379567712573) } },
{ { UINT64_C(17783107680982229326), UINT64_C( 7694430944701500407) },
{ UINT64_C(14946435657532704485), UINT64_C( 1392019949421056920) },
{ UINT64_C(17783107680982229326), UINT64_C(14946435657532704485) } },
{ { UINT64_C( 720685969029384403), UINT64_C(13170277731653498159) },
{ UINT64_C( 4546836441613680191), UINT64_C(15944534928651032686) },
{ UINT64_C( 720685969029384403), UINT64_C( 4546836441613680191) } },
{ { UINT64_C( 8377513640867717158), UINT64_C( 3252891876890621085) },
{ UINT64_C( 6754432899425457110), UINT64_C( 5553173804405016872) },
{ UINT64_C( 8377513640867717158), UINT64_C( 6754432899425457110) } },
{ { UINT64_C( 9111002919100414135), UINT64_C(12652601303620206972) },
{ UINT64_C(14317480457102167653), UINT64_C(14926910591795282610) },
{ UINT64_C( 9111002919100414135), UINT64_C(14317480457102167653) } },
{ { UINT64_C(17465588781926821122), UINT64_C(14197020995446656893) },
{ UINT64_C(14728401471583891713), UINT64_C( 7779348683327627021) },
{ UINT64_C(17465588781926821122), UINT64_C(14728401471583891713) } },
{ { UINT64_C( 8854554042291961977), UINT64_C( 3541753660244507904) },
{ UINT64_C( 1724092549986008839), UINT64_C(15666108166636934036) },
{ UINT64_C( 8854554042291961977), UINT64_C( 1724092549986008839) } },
{ { UINT64_C( 7595788518996621554), UINT64_C( 1677572234304633318) },
{ UINT64_C(16235800240466695983), UINT64_C(12894166098514972345) },
{ UINT64_C( 7595788518996621554), UINT64_C(16235800240466695983) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint64x2_t a = simde_vld1q_u64(test_vec[i].a);
simde_uint64x2_t b = simde_vld1q_u64(test_vec[i].b);
simde_uint64x2_t r = simde_vtrn1q_u64(a, b);
simde_test_arm_neon_assert_equal_u64x2(r, simde_vld1q_u64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint64x2_t a = simde_test_arm_neon_random_u64x2();
simde_uint64x2_t b = simde_test_arm_neon_random_u64x2();
simde_uint64x2_t r = simde_vtrn1q_u64(a, b);
simde_test_arm_neon_write_u64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_u64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1_p8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_poly8_t a[8];
simde_poly8_t b[8];
simde_poly8_t r[8];
} test_vec[] = {
{ { SIMDE_POLY8_C(180), SIMDE_POLY8_C(234), SIMDE_POLY8_C( 38), SIMDE_POLY8_C(184), SIMDE_POLY8_C(112), SIMDE_POLY8_C( 40), SIMDE_POLY8_C(124), SIMDE_POLY8_C( 20) },
{ SIMDE_POLY8_C( 30), SIMDE_POLY8_C(250), SIMDE_POLY8_C( 91), SIMDE_POLY8_C( 78), SIMDE_POLY8_C(166), SIMDE_POLY8_C(229), SIMDE_POLY8_C(128), SIMDE_POLY8_C(117) },
{ SIMDE_POLY8_C(180), SIMDE_POLY8_C( 30), SIMDE_POLY8_C( 38), SIMDE_POLY8_C( 91), SIMDE_POLY8_C(112), SIMDE_POLY8_C(166), SIMDE_POLY8_C(124), SIMDE_POLY8_C(128) } },
{ { SIMDE_POLY8_C( 51), SIMDE_POLY8_C(233), SIMDE_POLY8_C(232), SIMDE_POLY8_C( 60), SIMDE_POLY8_C(220), SIMDE_POLY8_C( 27), SIMDE_POLY8_C(182), SIMDE_POLY8_C(252) },
{ SIMDE_POLY8_C( 75), SIMDE_POLY8_C( 64), SIMDE_POLY8_C(212), SIMDE_POLY8_C(237), SIMDE_POLY8_C( 88), SIMDE_POLY8_C( 50), SIMDE_POLY8_C( 94), SIMDE_POLY8_C( 12) },
{ SIMDE_POLY8_C( 51), SIMDE_POLY8_C( 75), SIMDE_POLY8_C(232), SIMDE_POLY8_C(212), SIMDE_POLY8_C(220), SIMDE_POLY8_C( 88), SIMDE_POLY8_C(182), SIMDE_POLY8_C( 94) } },
{ { SIMDE_POLY8_C( 28), SIMDE_POLY8_C(133), SIMDE_POLY8_C(196), SIMDE_POLY8_C(140), SIMDE_POLY8_C(173), SIMDE_POLY8_C( 64), SIMDE_POLY8_C(161), SIMDE_POLY8_C(204) },
{ SIMDE_POLY8_C( 59), SIMDE_POLY8_C(252), SIMDE_POLY8_C( 26), SIMDE_POLY8_C(225), SIMDE_POLY8_C(225), SIMDE_POLY8_C(154), SIMDE_POLY8_C( 86), SIMDE_POLY8_C( 21) },
{ SIMDE_POLY8_C( 28), SIMDE_POLY8_C( 59), SIMDE_POLY8_C(196), SIMDE_POLY8_C( 26), SIMDE_POLY8_C(173), SIMDE_POLY8_C(225), SIMDE_POLY8_C(161), SIMDE_POLY8_C( 86) } },
{ { SIMDE_POLY8_C(132), SIMDE_POLY8_C( 62), SIMDE_POLY8_C( 81), SIMDE_POLY8_C( 96), SIMDE_POLY8_C( 89), SIMDE_POLY8_C( 7), SIMDE_POLY8_C( 92), SIMDE_POLY8_C(164) },
{ SIMDE_POLY8_C( 71), SIMDE_POLY8_C( 49), SIMDE_POLY8_C(145), SIMDE_POLY8_C(159), SIMDE_POLY8_C( 99), SIMDE_POLY8_C(240), SIMDE_POLY8_C(171), SIMDE_POLY8_C(127) },
{ SIMDE_POLY8_C(132), SIMDE_POLY8_C( 71), SIMDE_POLY8_C( 81), SIMDE_POLY8_C(145), SIMDE_POLY8_C( 89), SIMDE_POLY8_C( 99), SIMDE_POLY8_C( 92), SIMDE_POLY8_C(171) } },
{ { SIMDE_POLY8_C(117), SIMDE_POLY8_C(111), SIMDE_POLY8_C( 12), SIMDE_POLY8_C( 34), SIMDE_POLY8_C(176), SIMDE_POLY8_C(173), SIMDE_POLY8_C(238), SIMDE_POLY8_C(235) },
{ SIMDE_POLY8_C(169), SIMDE_POLY8_C( 9), SIMDE_POLY8_C(204), SIMDE_POLY8_C(138), SIMDE_POLY8_C(163), SIMDE_POLY8_C( 34), SIMDE_POLY8_C(159), SIMDE_POLY8_C( 39) },
{ SIMDE_POLY8_C(117), SIMDE_POLY8_C(169), SIMDE_POLY8_C( 12), SIMDE_POLY8_C(204), SIMDE_POLY8_C(176), SIMDE_POLY8_C(163), SIMDE_POLY8_C(238), SIMDE_POLY8_C(159) } },
{ { SIMDE_POLY8_C( 97), SIMDE_POLY8_C(240), SIMDE_POLY8_C(136), SIMDE_POLY8_C(186), SIMDE_POLY8_C(247), SIMDE_POLY8_C(228), SIMDE_POLY8_C( 95), SIMDE_POLY8_C( 62) },
{ SIMDE_POLY8_C( 21), SIMDE_POLY8_C(240), SIMDE_POLY8_C(221), SIMDE_POLY8_C(120), SIMDE_POLY8_C(224), SIMDE_POLY8_C(136), SIMDE_POLY8_C(248), SIMDE_POLY8_C( 85) },
{ SIMDE_POLY8_C( 97), SIMDE_POLY8_C( 21), SIMDE_POLY8_C(136), SIMDE_POLY8_C(221), SIMDE_POLY8_C(247), SIMDE_POLY8_C(224), SIMDE_POLY8_C( 95), SIMDE_POLY8_C(248) } },
{ { SIMDE_POLY8_C(248), SIMDE_POLY8_C( 4), SIMDE_POLY8_C(120), SIMDE_POLY8_C(168), SIMDE_POLY8_C(177), SIMDE_POLY8_C(102), SIMDE_POLY8_C(147), SIMDE_POLY8_C( 90) },
{ SIMDE_POLY8_C(111), SIMDE_POLY8_C( 95), SIMDE_POLY8_C(228), SIMDE_POLY8_C( 19), SIMDE_POLY8_C(129), SIMDE_POLY8_C(132), SIMDE_POLY8_C( 58), SIMDE_POLY8_C(226) },
{ SIMDE_POLY8_C(248), SIMDE_POLY8_C(111), SIMDE_POLY8_C(120), SIMDE_POLY8_C(228), SIMDE_POLY8_C(177), SIMDE_POLY8_C(129), SIMDE_POLY8_C(147), SIMDE_POLY8_C( 58) } },
{ { SIMDE_POLY8_C(116), SIMDE_POLY8_C(194), SIMDE_POLY8_C(157), SIMDE_POLY8_C(108), SIMDE_POLY8_C(167), SIMDE_POLY8_C(252), SIMDE_POLY8_C(170), SIMDE_POLY8_C(188) },
{ SIMDE_POLY8_C(236), SIMDE_POLY8_C(136), SIMDE_POLY8_C( 53), SIMDE_POLY8_C(205), SIMDE_POLY8_C( 16), SIMDE_POLY8_C( 45), SIMDE_POLY8_C( 34), SIMDE_POLY8_C( 8) },
{ SIMDE_POLY8_C(116), SIMDE_POLY8_C(236), SIMDE_POLY8_C(157), SIMDE_POLY8_C( 53), SIMDE_POLY8_C(167), SIMDE_POLY8_C( 16), SIMDE_POLY8_C(170), SIMDE_POLY8_C( 34) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_poly8x8_t a = simde_vld1_p8(test_vec[i].a);
simde_poly8x8_t b = simde_vld1_p8(test_vec[i].b);
simde_poly8x8_t r = simde_vtrn1_p8(a, b);
simde_test_arm_neon_assert_equal_p8x8(r, simde_vld1_p8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_poly8x8_t a = simde_test_arm_neon_random_p8x8();
simde_poly8x8_t b = simde_test_arm_neon_random_p8x8();
simde_poly8x8_t r = simde_vtrn1_p8(a, b);
simde_test_arm_neon_write_p8x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_p8x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_p8x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1_p16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_poly16_t a[4];
simde_poly16_t b[4];
simde_poly16_t r[4];
} test_vec[] = {
{ { SIMDE_POLY16_C(60788), SIMDE_POLY16_C(40466), SIMDE_POLY16_C(30557), SIMDE_POLY16_C(47308) },
{ SIMDE_POLY16_C(27512), SIMDE_POLY16_C( 3061), SIMDE_POLY16_C(41915), SIMDE_POLY16_C(15633) },
{ SIMDE_POLY16_C(60788), SIMDE_POLY16_C(27512), SIMDE_POLY16_C(30557), SIMDE_POLY16_C(41915) } },
{ { SIMDE_POLY16_C(31826), SIMDE_POLY16_C(40911), SIMDE_POLY16_C(11794), SIMDE_POLY16_C( 5983) },
{ SIMDE_POLY16_C(15515), SIMDE_POLY16_C(15720), SIMDE_POLY16_C(44460), SIMDE_POLY16_C( 8198) },
{ SIMDE_POLY16_C(31826), SIMDE_POLY16_C(15515), SIMDE_POLY16_C(11794), SIMDE_POLY16_C(44460) } },
{ { SIMDE_POLY16_C( 6298), SIMDE_POLY16_C(63678), SIMDE_POLY16_C(35471), SIMDE_POLY16_C( 1968) },
{ SIMDE_POLY16_C(42485), SIMDE_POLY16_C(45331), SIMDE_POLY16_C( 9289), SIMDE_POLY16_C(39918) },
{ SIMDE_POLY16_C( 6298), SIMDE_POLY16_C(42485), SIMDE_POLY16_C(35471), SIMDE_POLY16_C( 9289) } },
{ { SIMDE_POLY16_C(48544), SIMDE_POLY16_C(45627), SIMDE_POLY16_C(39659), SIMDE_POLY16_C(34762) },
{ SIMDE_POLY16_C(13015), SIMDE_POLY16_C(33732), SIMDE_POLY16_C(51936), SIMDE_POLY16_C(31395) },
{ SIMDE_POLY16_C(48544), SIMDE_POLY16_C(13015), SIMDE_POLY16_C(39659), SIMDE_POLY16_C(51936) } },
{ { SIMDE_POLY16_C(25058), SIMDE_POLY16_C(29298), SIMDE_POLY16_C( 8940), SIMDE_POLY16_C(57721) },
{ SIMDE_POLY16_C(36040), SIMDE_POLY16_C( 4498), SIMDE_POLY16_C(32944), SIMDE_POLY16_C(20908) },
{ SIMDE_POLY16_C(25058), SIMDE_POLY16_C(36040), SIMDE_POLY16_C( 8940), SIMDE_POLY16_C(32944) } },
{ { SIMDE_POLY16_C(59197), SIMDE_POLY16_C(10499), SIMDE_POLY16_C(52610), SIMDE_POLY16_C(22960) },
{ SIMDE_POLY16_C(29696), SIMDE_POLY16_C(57564), SIMDE_POLY16_C(32575), SIMDE_POLY16_C( 8538) },
{ SIMDE_POLY16_C(59197), SIMDE_POLY16_C(29696), SIMDE_POLY16_C(52610), SIMDE_POLY16_C(32575) } },
{ { SIMDE_POLY16_C(52704), SIMDE_POLY16_C(52371), SIMDE_POLY16_C( 3567), SIMDE_POLY16_C(47022) },
{ SIMDE_POLY16_C(16537), SIMDE_POLY16_C(19144), SIMDE_POLY16_C(30145), SIMDE_POLY16_C(65179) },
{ SIMDE_POLY16_C(52704), SIMDE_POLY16_C(16537), SIMDE_POLY16_C( 3567), SIMDE_POLY16_C(30145) } },
{ { SIMDE_POLY16_C(40540), SIMDE_POLY16_C(56871), SIMDE_POLY16_C(55148), SIMDE_POLY16_C(27703) },
{ SIMDE_POLY16_C( 4940), SIMDE_POLY16_C(35660), SIMDE_POLY16_C(42642), SIMDE_POLY16_C(29612) },
{ SIMDE_POLY16_C(40540), SIMDE_POLY16_C( 4940), SIMDE_POLY16_C(55148), SIMDE_POLY16_C(42642) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_poly16x4_t a = simde_vld1_p16(test_vec[i].a);
simde_poly16x4_t b = simde_vld1_p16(test_vec[i].b);
simde_poly16x4_t r = simde_vtrn1_p16(a, b);
simde_test_arm_neon_assert_equal_p16x4(r, simde_vld1_p16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_poly16x4_t a = simde_test_arm_neon_random_p16x4();
simde_poly16x4_t b = simde_test_arm_neon_random_p16x4();
simde_poly16x4_t r = simde_vtrn1_p16(a, b);
simde_test_arm_neon_write_p16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_p16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_p16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1q_p8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_poly8_t a[16];
simde_poly8_t b[16];
simde_poly8_t r[16];
} test_vec[] = {
{ { SIMDE_POLY8_C( 32), SIMDE_POLY8_C(105), SIMDE_POLY8_C( 60), SIMDE_POLY8_C( 17), SIMDE_POLY8_C(121), SIMDE_POLY8_C(145), SIMDE_POLY8_C( 45), SIMDE_POLY8_C(135),
SIMDE_POLY8_C(225), SIMDE_POLY8_C( 38), SIMDE_POLY8_C(228), SIMDE_POLY8_C( 88), SIMDE_POLY8_C(200), SIMDE_POLY8_C(213), SIMDE_POLY8_C(147), SIMDE_POLY8_C(151) },
{ SIMDE_POLY8_C(177), SIMDE_POLY8_C(122), SIMDE_POLY8_C(147), SIMDE_POLY8_C( 63), SIMDE_POLY8_C(245), SIMDE_POLY8_C(244), SIMDE_POLY8_C(140), SIMDE_POLY8_C(165),
SIMDE_POLY8_C(180), SIMDE_POLY8_C( 76), SIMDE_POLY8_C( 77), SIMDE_POLY8_C(249), SIMDE_POLY8_C( 12), SIMDE_POLY8_C( 91), SIMDE_POLY8_C( 53), SIMDE_POLY8_C( 45) },
{ SIMDE_POLY8_C( 32), SIMDE_POLY8_C(177), SIMDE_POLY8_C( 60), SIMDE_POLY8_C(147), SIMDE_POLY8_C(121), SIMDE_POLY8_C(245), SIMDE_POLY8_C( 45), SIMDE_POLY8_C(140),
SIMDE_POLY8_C(225), SIMDE_POLY8_C(180), SIMDE_POLY8_C(228), SIMDE_POLY8_C( 77), SIMDE_POLY8_C(200), SIMDE_POLY8_C( 12), SIMDE_POLY8_C(147), SIMDE_POLY8_C( 53) } },
{ { SIMDE_POLY8_C(196), SIMDE_POLY8_C(113), SIMDE_POLY8_C( 62), SIMDE_POLY8_C( 61), SIMDE_POLY8_C( 2), SIMDE_POLY8_C(108), SIMDE_POLY8_C(196), SIMDE_POLY8_C(228),
SIMDE_POLY8_C(146), SIMDE_POLY8_C(168), SIMDE_POLY8_C( 60), SIMDE_POLY8_C( 90), SIMDE_POLY8_C(126), SIMDE_POLY8_C(207), SIMDE_POLY8_C(241), SIMDE_POLY8_C( 47) },
{ SIMDE_POLY8_C( 73), SIMDE_POLY8_C(133), SIMDE_POLY8_C(110), SIMDE_POLY8_C( 62), SIMDE_POLY8_C(121), SIMDE_POLY8_C(251), SIMDE_POLY8_C(227), SIMDE_POLY8_C( 45),
SIMDE_POLY8_C( 71), SIMDE_POLY8_C( 49), SIMDE_POLY8_C( 38), SIMDE_POLY8_C( 83), SIMDE_POLY8_C(140), SIMDE_POLY8_C( 91), SIMDE_POLY8_C(128), SIMDE_POLY8_C( 80) },
{ SIMDE_POLY8_C(196), SIMDE_POLY8_C( 73), SIMDE_POLY8_C( 62), SIMDE_POLY8_C(110), SIMDE_POLY8_C( 2), SIMDE_POLY8_C(121), SIMDE_POLY8_C(196), SIMDE_POLY8_C(227),
SIMDE_POLY8_C(146), SIMDE_POLY8_C( 71), SIMDE_POLY8_C( 60), SIMDE_POLY8_C( 38), SIMDE_POLY8_C(126), SIMDE_POLY8_C(140), SIMDE_POLY8_C(241), SIMDE_POLY8_C(128) } },
{ { SIMDE_POLY8_C(204), SIMDE_POLY8_C(191), SIMDE_POLY8_C(141), SIMDE_POLY8_C(206), SIMDE_POLY8_C( 43), SIMDE_POLY8_C( 81), SIMDE_POLY8_C(178), SIMDE_POLY8_C(189),
SIMDE_POLY8_C(250), SIMDE_POLY8_C(238), SIMDE_POLY8_C( 23), SIMDE_POLY8_C(120), SIMDE_POLY8_C(189), SIMDE_POLY8_C( 9), SIMDE_POLY8_C(167), SIMDE_POLY8_C( 7) },
{ SIMDE_POLY8_C(142), SIMDE_POLY8_C( 21), SIMDE_POLY8_C( 69), SIMDE_POLY8_C( 7), SIMDE_POLY8_C( 16), SIMDE_POLY8_C( 41), SIMDE_POLY8_C( 52), SIMDE_POLY8_C( 87),
SIMDE_POLY8_C( 90), SIMDE_POLY8_C( 90), SIMDE_POLY8_C(171), SIMDE_POLY8_C(230), SIMDE_POLY8_C(181), SIMDE_POLY8_C( 43), SIMDE_POLY8_C( 54), SIMDE_POLY8_C(129) },
{ SIMDE_POLY8_C(204), SIMDE_POLY8_C(142), SIMDE_POLY8_C(141), SIMDE_POLY8_C( 69), SIMDE_POLY8_C( 43), SIMDE_POLY8_C( 16), SIMDE_POLY8_C(178), SIMDE_POLY8_C( 52),
SIMDE_POLY8_C(250), SIMDE_POLY8_C( 90), SIMDE_POLY8_C( 23), SIMDE_POLY8_C(171), SIMDE_POLY8_C(189), SIMDE_POLY8_C(181), SIMDE_POLY8_C(167), SIMDE_POLY8_C( 54) } },
{ { SIMDE_POLY8_C(234), SIMDE_POLY8_C(195), SIMDE_POLY8_C( 79), SIMDE_POLY8_C( 21), SIMDE_POLY8_C( 20), SIMDE_POLY8_C( 2), SIMDE_POLY8_C(210), SIMDE_POLY8_C( 14),
SIMDE_POLY8_C(240), SIMDE_POLY8_C(234), SIMDE_POLY8_C(134), SIMDE_POLY8_C(174), SIMDE_POLY8_C(243), SIMDE_POLY8_C( 45), SIMDE_POLY8_C(181), SIMDE_POLY8_C(129) },
{ SIMDE_POLY8_C( 67), SIMDE_POLY8_C(250), SIMDE_POLY8_C(136), SIMDE_POLY8_C( 83), SIMDE_POLY8_C( 35), SIMDE_POLY8_C(188), SIMDE_POLY8_C(171), SIMDE_POLY8_C(125),
SIMDE_POLY8_C( 22), SIMDE_POLY8_C( 86), SIMDE_POLY8_C( 99), SIMDE_POLY8_C(203), SIMDE_POLY8_C(129), SIMDE_POLY8_C(153), SIMDE_POLY8_C( 76), SIMDE_POLY8_C(108) },
{ SIMDE_POLY8_C(234), SIMDE_POLY8_C( 67), SIMDE_POLY8_C( 79), SIMDE_POLY8_C(136), SIMDE_POLY8_C( 20), SIMDE_POLY8_C( 35), SIMDE_POLY8_C(210), SIMDE_POLY8_C(171),
SIMDE_POLY8_C(240), SIMDE_POLY8_C( 22), SIMDE_POLY8_C(134), SIMDE_POLY8_C( 99), SIMDE_POLY8_C(243), SIMDE_POLY8_C(129), SIMDE_POLY8_C(181), SIMDE_POLY8_C( 76) } },
{ { SIMDE_POLY8_C( 92), SIMDE_POLY8_C(155), SIMDE_POLY8_C(129), SIMDE_POLY8_C(113), SIMDE_POLY8_C(157), SIMDE_POLY8_C( 84), SIMDE_POLY8_C(127), SIMDE_POLY8_C(142),
SIMDE_POLY8_C( 62), SIMDE_POLY8_C( 6), SIMDE_POLY8_C( 60), SIMDE_POLY8_C( 49), SIMDE_POLY8_C( 51), SIMDE_POLY8_C(241), SIMDE_POLY8_C(178), SIMDE_POLY8_C(118) },
{ SIMDE_POLY8_C(235), SIMDE_POLY8_C( 58), SIMDE_POLY8_C(202), SIMDE_POLY8_C( 15), SIMDE_POLY8_C(246), SIMDE_POLY8_C(117), SIMDE_POLY8_C(140), SIMDE_POLY8_C( 12),
SIMDE_POLY8_C(203), SIMDE_POLY8_C(240), SIMDE_POLY8_C(215), SIMDE_POLY8_C( 76), SIMDE_POLY8_C(137), SIMDE_POLY8_C( 35), SIMDE_POLY8_C(184), SIMDE_POLY8_C(230) },
{ SIMDE_POLY8_C( 92), SIMDE_POLY8_C(235), SIMDE_POLY8_C(129), SIMDE_POLY8_C(202), SIMDE_POLY8_C(157), SIMDE_POLY8_C(246), SIMDE_POLY8_C(127), SIMDE_POLY8_C(140),
SIMDE_POLY8_C( 62), SIMDE_POLY8_C(203), SIMDE_POLY8_C( 60), SIMDE_POLY8_C(215), SIMDE_POLY8_C( 51), SIMDE_POLY8_C(137), SIMDE_POLY8_C(178), SIMDE_POLY8_C(184) } },
{ { SIMDE_POLY8_C(190), SIMDE_POLY8_C( 58), SIMDE_POLY8_C( 87), SIMDE_POLY8_C( 92), SIMDE_POLY8_C(142), SIMDE_POLY8_C(214), SIMDE_POLY8_C(234), SIMDE_POLY8_C(204),
SIMDE_POLY8_C(220), SIMDE_POLY8_C( 38), SIMDE_POLY8_C(253), SIMDE_POLY8_C( 16), SIMDE_POLY8_C( 23), SIMDE_POLY8_C(175), SIMDE_POLY8_C(134), SIMDE_POLY8_C( 2) },
{ SIMDE_POLY8_C(233), SIMDE_POLY8_C( 80), SIMDE_POLY8_C( 17), SIMDE_POLY8_C(223), SIMDE_POLY8_C(197), SIMDE_POLY8_C(158), SIMDE_POLY8_C(235), SIMDE_POLY8_C(144),
SIMDE_POLY8_C(142), SIMDE_POLY8_C(194), SIMDE_POLY8_C(221), SIMDE_POLY8_C( 23), SIMDE_POLY8_C(229), SIMDE_POLY8_C(149), SIMDE_POLY8_C(253), SIMDE_POLY8_C(163) },
{ SIMDE_POLY8_C(190), SIMDE_POLY8_C(233), SIMDE_POLY8_C( 87), SIMDE_POLY8_C( 17), SIMDE_POLY8_C(142), SIMDE_POLY8_C(197), SIMDE_POLY8_C(234), SIMDE_POLY8_C(235),
SIMDE_POLY8_C(220), SIMDE_POLY8_C(142), SIMDE_POLY8_C(253), SIMDE_POLY8_C(221), SIMDE_POLY8_C( 23), SIMDE_POLY8_C(229), SIMDE_POLY8_C(134), SIMDE_POLY8_C(253) } },
{ { SIMDE_POLY8_C(207), SIMDE_POLY8_C( 84), SIMDE_POLY8_C(UINT8_MAX), SIMDE_POLY8_C( 93), SIMDE_POLY8_C( 43), SIMDE_POLY8_C(233), SIMDE_POLY8_C( 41), SIMDE_POLY8_C( 7),
SIMDE_POLY8_C( 15), SIMDE_POLY8_C( 38), SIMDE_POLY8_C( 23), SIMDE_POLY8_C( 38), SIMDE_POLY8_C(213), SIMDE_POLY8_C(158), SIMDE_POLY8_C( 41), SIMDE_POLY8_C(190) },
{ SIMDE_POLY8_C(238), SIMDE_POLY8_C( 58), SIMDE_POLY8_C(157), SIMDE_POLY8_C(180), SIMDE_POLY8_C(216), SIMDE_POLY8_C(136), SIMDE_POLY8_C( 68), SIMDE_POLY8_C(102),
SIMDE_POLY8_C( 74), SIMDE_POLY8_C( 33), SIMDE_POLY8_C(126), SIMDE_POLY8_C( 47), SIMDE_POLY8_C(183), SIMDE_POLY8_C(123), SIMDE_POLY8_C(211), SIMDE_POLY8_C(134) },
{ SIMDE_POLY8_C(207), SIMDE_POLY8_C(238), SIMDE_POLY8_C(UINT8_MAX), SIMDE_POLY8_C(157), SIMDE_POLY8_C( 43), SIMDE_POLY8_C(216), SIMDE_POLY8_C( 41), SIMDE_POLY8_C( 68),
SIMDE_POLY8_C( 15), SIMDE_POLY8_C( 74), SIMDE_POLY8_C( 23), SIMDE_POLY8_C(126), SIMDE_POLY8_C(213), SIMDE_POLY8_C(183), SIMDE_POLY8_C( 41), SIMDE_POLY8_C(211) } },
{ { SIMDE_POLY8_C(208), SIMDE_POLY8_C(210), SIMDE_POLY8_C(228), SIMDE_POLY8_C(251), SIMDE_POLY8_C(188), SIMDE_POLY8_C( 13), SIMDE_POLY8_C( 2), SIMDE_POLY8_C(203),
SIMDE_POLY8_C( 52), SIMDE_POLY8_C( 26), SIMDE_POLY8_C(242), SIMDE_POLY8_C( 9), SIMDE_POLY8_C(184), SIMDE_POLY8_C( 27), SIMDE_POLY8_C(200), SIMDE_POLY8_C(166) },
{ SIMDE_POLY8_C( 85), SIMDE_POLY8_C(101), SIMDE_POLY8_C( 90), SIMDE_POLY8_C( 46), SIMDE_POLY8_C(238), SIMDE_POLY8_C(159), SIMDE_POLY8_C(148), SIMDE_POLY8_C( 56),
SIMDE_POLY8_C(192), SIMDE_POLY8_C( 18), SIMDE_POLY8_C(104), SIMDE_POLY8_C(119), SIMDE_POLY8_C(142), SIMDE_POLY8_C( 59), SIMDE_POLY8_C(254), SIMDE_POLY8_C( 94) },
{ SIMDE_POLY8_C(208), SIMDE_POLY8_C( 85), SIMDE_POLY8_C(228), SIMDE_POLY8_C( 90), SIMDE_POLY8_C(188), SIMDE_POLY8_C(238), SIMDE_POLY8_C( 2), SIMDE_POLY8_C(148),
SIMDE_POLY8_C( 52), SIMDE_POLY8_C(192), SIMDE_POLY8_C(242), SIMDE_POLY8_C(104), SIMDE_POLY8_C(184), SIMDE_POLY8_C(142), SIMDE_POLY8_C(200), SIMDE_POLY8_C(254) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_poly8x16_t a = simde_vld1q_p8(test_vec[i].a);
simde_poly8x16_t b = simde_vld1q_p8(test_vec[i].b);
simde_poly8x16_t r = simde_vtrn1q_p8(a, b);
simde_test_arm_neon_assert_equal_p8x16(r, simde_vld1q_p8(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_poly8x16_t a = simde_test_arm_neon_random_p8x16();
simde_poly8x16_t b = simde_test_arm_neon_random_p8x16();
simde_poly8x16_t r = simde_vtrn1q_p8(a, b);
simde_test_arm_neon_write_p8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_p8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_p8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1q_p16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_poly16_t a[8];
simde_poly16_t b[8];
simde_poly16_t r[8];
} test_vec[] = {
{ { SIMDE_POLY16_C(14167), SIMDE_POLY16_C(21279), SIMDE_POLY16_C(48551), SIMDE_POLY16_C(14943), SIMDE_POLY16_C(56959), SIMDE_POLY16_C( 3699), SIMDE_POLY16_C(63440), SIMDE_POLY16_C(55030) },
{ SIMDE_POLY16_C(40429), SIMDE_POLY16_C(42656), SIMDE_POLY16_C(10703), SIMDE_POLY16_C(50757), SIMDE_POLY16_C(39485), SIMDE_POLY16_C(24810), SIMDE_POLY16_C(45053), SIMDE_POLY16_C(22004) },
{ SIMDE_POLY16_C(14167), SIMDE_POLY16_C(40429), SIMDE_POLY16_C(48551), SIMDE_POLY16_C(10703), SIMDE_POLY16_C(56959), SIMDE_POLY16_C(39485), SIMDE_POLY16_C(63440), SIMDE_POLY16_C(45053) } },
{ { SIMDE_POLY16_C( 5094), SIMDE_POLY16_C(36264), SIMDE_POLY16_C( 2001), SIMDE_POLY16_C(20680), SIMDE_POLY16_C(15333), SIMDE_POLY16_C(46430), SIMDE_POLY16_C(21555), SIMDE_POLY16_C( 8331) },
{ SIMDE_POLY16_C(11505), SIMDE_POLY16_C(49351), SIMDE_POLY16_C( 3157), SIMDE_POLY16_C(37510), SIMDE_POLY16_C(28839), SIMDE_POLY16_C(42226), SIMDE_POLY16_C(59167), SIMDE_POLY16_C( 1785) },
{ SIMDE_POLY16_C( 5094), SIMDE_POLY16_C(11505), SIMDE_POLY16_C( 2001), SIMDE_POLY16_C( 3157), SIMDE_POLY16_C(15333), SIMDE_POLY16_C(28839), SIMDE_POLY16_C(21555), SIMDE_POLY16_C(59167) } },
{ { SIMDE_POLY16_C(41466), SIMDE_POLY16_C(52115), SIMDE_POLY16_C(23464), SIMDE_POLY16_C(36124), SIMDE_POLY16_C(31383), SIMDE_POLY16_C(51778), SIMDE_POLY16_C(52943), SIMDE_POLY16_C(49386) },
{ SIMDE_POLY16_C(45562), SIMDE_POLY16_C(20353), SIMDE_POLY16_C( 1982), SIMDE_POLY16_C(26082), SIMDE_POLY16_C(54392), SIMDE_POLY16_C(38665), SIMDE_POLY16_C( 955), SIMDE_POLY16_C(46749) },
{ SIMDE_POLY16_C(41466), SIMDE_POLY16_C(45562), SIMDE_POLY16_C(23464), SIMDE_POLY16_C( 1982), SIMDE_POLY16_C(31383), SIMDE_POLY16_C(54392), SIMDE_POLY16_C(52943), SIMDE_POLY16_C( 955) } },
{ { SIMDE_POLY16_C(12708), SIMDE_POLY16_C(19841), SIMDE_POLY16_C(40332), SIMDE_POLY16_C( 9178), SIMDE_POLY16_C( 7448), SIMDE_POLY16_C(59373), SIMDE_POLY16_C(55531), SIMDE_POLY16_C(58791) },
{ SIMDE_POLY16_C(10377), SIMDE_POLY16_C(18228), SIMDE_POLY16_C( 5680), SIMDE_POLY16_C(43180), SIMDE_POLY16_C(46827), SIMDE_POLY16_C(42559), SIMDE_POLY16_C(56761), SIMDE_POLY16_C(23900) },
{ SIMDE_POLY16_C(12708), SIMDE_POLY16_C(10377), SIMDE_POLY16_C(40332), SIMDE_POLY16_C( 5680), SIMDE_POLY16_C( 7448), SIMDE_POLY16_C(46827), SIMDE_POLY16_C(55531), SIMDE_POLY16_C(56761) } },
{ { SIMDE_POLY16_C(56846), SIMDE_POLY16_C(39594), SIMDE_POLY16_C(34171), SIMDE_POLY16_C(37822), SIMDE_POLY16_C(43938), SIMDE_POLY16_C(36218), SIMDE_POLY16_C( 8835), SIMDE_POLY16_C( 3442) },
{ SIMDE_POLY16_C(42570), SIMDE_POLY16_C(31316), SIMDE_POLY16_C( 445), SIMDE_POLY16_C(43042), SIMDE_POLY16_C(25271), SIMDE_POLY16_C(28750), SIMDE_POLY16_C(43839), SIMDE_POLY16_C(19917) },
{ SIMDE_POLY16_C(56846), SIMDE_POLY16_C(42570), SIMDE_POLY16_C(34171), SIMDE_POLY16_C( 445), SIMDE_POLY16_C(43938), SIMDE_POLY16_C(25271), SIMDE_POLY16_C( 8835), SIMDE_POLY16_C(43839) } },
{ { SIMDE_POLY16_C(30857), SIMDE_POLY16_C( 1255), SIMDE_POLY16_C(42493), SIMDE_POLY16_C(40856), SIMDE_POLY16_C( 4689), SIMDE_POLY16_C(54316), SIMDE_POLY16_C(40500), SIMDE_POLY16_C(32737) },
{ SIMDE_POLY16_C(13892), SIMDE_POLY16_C( 505), SIMDE_POLY16_C( 7223), SIMDE_POLY16_C(61097), SIMDE_POLY16_C(63614), SIMDE_POLY16_C(48478), SIMDE_POLY16_C(11171), SIMDE_POLY16_C(11274) },
{ SIMDE_POLY16_C(30857), SIMDE_POLY16_C(13892), SIMDE_POLY16_C(42493), SIMDE_POLY16_C( 7223), SIMDE_POLY16_C( 4689), SIMDE_POLY16_C(63614), SIMDE_POLY16_C(40500), SIMDE_POLY16_C(11171) } },
{ { SIMDE_POLY16_C(61859), SIMDE_POLY16_C(41008), SIMDE_POLY16_C(51351), SIMDE_POLY16_C(59455), SIMDE_POLY16_C(27611), SIMDE_POLY16_C( 4028), SIMDE_POLY16_C(40457), SIMDE_POLY16_C(20110) },
{ SIMDE_POLY16_C(35028), SIMDE_POLY16_C( 2895), SIMDE_POLY16_C(63908), SIMDE_POLY16_C( 8953), SIMDE_POLY16_C(22513), SIMDE_POLY16_C(38111), SIMDE_POLY16_C(59778), SIMDE_POLY16_C( 9920) },
{ SIMDE_POLY16_C(61859), SIMDE_POLY16_C(35028), SIMDE_POLY16_C(51351), SIMDE_POLY16_C(63908), SIMDE_POLY16_C(27611), SIMDE_POLY16_C(22513), SIMDE_POLY16_C(40457), SIMDE_POLY16_C(59778) } },
{ { SIMDE_POLY16_C(61658), SIMDE_POLY16_C(29126), SIMDE_POLY16_C( 1721), SIMDE_POLY16_C(37977), SIMDE_POLY16_C( 5745), SIMDE_POLY16_C(31651), SIMDE_POLY16_C(12980), SIMDE_POLY16_C(35017) },
{ SIMDE_POLY16_C( 6330), SIMDE_POLY16_C(24211), SIMDE_POLY16_C(35857), SIMDE_POLY16_C( 640), SIMDE_POLY16_C(24547), SIMDE_POLY16_C(26006), SIMDE_POLY16_C(22088), SIMDE_POLY16_C( 8843) },
{ SIMDE_POLY16_C(61658), SIMDE_POLY16_C( 6330), SIMDE_POLY16_C( 1721), SIMDE_POLY16_C(35857), SIMDE_POLY16_C( 5745), SIMDE_POLY16_C(24547), SIMDE_POLY16_C(12980), SIMDE_POLY16_C(22088) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_poly16x8_t a = simde_vld1q_p16(test_vec[i].a);
simde_poly16x8_t b = simde_vld1q_p16(test_vec[i].b);
simde_poly16x8_t r = simde_vtrn1q_p16(a, b);
simde_test_arm_neon_assert_equal_p16x8(r, simde_vld1q_p16(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_poly16x8_t a = simde_test_arm_neon_random_p16x8();
simde_poly16x8_t b = simde_test_arm_neon_random_p16x8();
simde_poly16x8_t r = simde_vtrn1q_p16(a, b);
simde_test_arm_neon_write_p16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_p16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_p16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vtrn1q_p64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
simde_poly64_t a[2];
simde_poly64_t b[2];
simde_poly64_t r[2];
} test_vec[] = {
{ { SIMDE_POLY64_C( 4815427970974768462), SIMDE_POLY64_C( 6946629186605919678) },
{ SIMDE_POLY64_C(17577554379567712573), SIMDE_POLY64_C( 9507926976227586244) },
{ SIMDE_POLY64_C( 4815427970974768462), SIMDE_POLY64_C(17577554379567712573) } },
{ { SIMDE_POLY64_C(17783107680982229326), SIMDE_POLY64_C( 7694430944701500407) },
{ SIMDE_POLY64_C(14946435657532704485), SIMDE_POLY64_C( 1392019949421056920) },
{ SIMDE_POLY64_C(17783107680982229326), SIMDE_POLY64_C(14946435657532704485) } },
{ { SIMDE_POLY64_C( 720685969029384403), SIMDE_POLY64_C(13170277731653498159) },
{ SIMDE_POLY64_C( 4546836441613680191), SIMDE_POLY64_C(15944534928651032686) },
{ SIMDE_POLY64_C( 720685969029384403), SIMDE_POLY64_C( 4546836441613680191) } },
{ { SIMDE_POLY64_C( 8377513640867717158), SIMDE_POLY64_C( 3252891876890621085) },
{ SIMDE_POLY64_C( 6754432899425457110), SIMDE_POLY64_C( 5553173804405016872) },
{ SIMDE_POLY64_C( 8377513640867717158), SIMDE_POLY64_C( 6754432899425457110) } },
{ { SIMDE_POLY64_C( 9111002919100414135), SIMDE_POLY64_C(12652601303620206972) },
{ SIMDE_POLY64_C(14317480457102167653), SIMDE_POLY64_C(14926910591795282610) },
{ SIMDE_POLY64_C( 9111002919100414135), SIMDE_POLY64_C(14317480457102167653) } },
{ { SIMDE_POLY64_C(17465588781926821122), SIMDE_POLY64_C(14197020995446656893) },
{ SIMDE_POLY64_C(14728401471583891713), SIMDE_POLY64_C( 7779348683327627021) },
{ SIMDE_POLY64_C(17465588781926821122), SIMDE_POLY64_C(14728401471583891713) } },
{ { SIMDE_POLY64_C( 8854554042291961977), SIMDE_POLY64_C( 3541753660244507904) },
{ SIMDE_POLY64_C( 1724092549986008839), SIMDE_POLY64_C(15666108166636934036) },
{ SIMDE_POLY64_C( 8854554042291961977), SIMDE_POLY64_C( 1724092549986008839) } },
{ { SIMDE_POLY64_C( 7595788518996621554), SIMDE_POLY64_C( 1677572234304633318) },
{ SIMDE_POLY64_C(16235800240466695983), SIMDE_POLY64_C(12894166098514972345) },
{ SIMDE_POLY64_C( 7595788518996621554), SIMDE_POLY64_C(16235800240466695983) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_poly64x2_t a = simde_vld1q_p64(test_vec[i].a);
simde_poly64x2_t b = simde_vld1q_p64(test_vec[i].b);
simde_poly64x2_t r = simde_vtrn1q_p64(a, b);
simde_test_arm_neon_assert_equal_p64x2(r, simde_vld1q_p64(test_vec[i].r));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_poly64x2_t a = simde_test_arm_neon_random_p64x2();
simde_poly64x2_t b = simde_test_arm_neon_random_p64x2();
simde_poly64x2_t r = simde_vtrn1q_p64(a, b);
simde_test_arm_neon_write_p64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_p64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_p64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
SIMDE_TEST_FUNC_LIST_BEGIN
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_f64)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_s64)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_u64)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_p8)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_p16)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_p8)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_p16)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_p64)
SIMDE_TEST_FUNC_LIST_END
#include <test/arm/neon/test-neon-footer.h>