libdpf/thirdparty/simde/test/arm/neon/qshrn_high_n.c

688 lines
63 KiB
C
Raw Permalink Normal View History

#define SIMDE_TEST_ARM_NEON_INSN qshrn_high_n
#include "test-neon.h"
#include "../../../simde/arm/neon/qshrn_high_n.h"
static int
test_simde_vqshrn_high_n_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
int16_t a[8];
int8_t r[8];
int8_t r1[16];
int8_t r3[16];
int8_t r5[16];
int8_t r6[16];
int8_t r8[16];
} test_vec[] = {
{ { INT16_C( 10216), -INT16_C( 24429), -INT16_C( 14067), INT16_C( 9392), INT16_C( 19587), -INT16_C( 32492), INT16_C( 28881), INT16_C( 10954) },
{ -INT8_C( 121), INT8_C( 23), -INT8_C( 125), -INT8_C( 11), INT8_C( 79), -INT8_C( 3), INT8_C( 106), -INT8_C( 121) },
{ -INT8_C( 121), INT8_C( 23), -INT8_C( 125), -INT8_C( 11), INT8_C( 79), -INT8_C( 3), INT8_C( 106), -INT8_C( 121), INT8_MAX, INT8_MIN, INT8_MIN, INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MAX },
{ -INT8_C( 121), INT8_C( 23), -INT8_C( 125), -INT8_C( 11), INT8_C( 79), -INT8_C( 3), INT8_C( 106), -INT8_C( 121), INT8_MAX, INT8_MIN, INT8_MIN, INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MAX },
{ -INT8_C( 121), INT8_C( 23), -INT8_C( 125), -INT8_C( 11), INT8_C( 79), -INT8_C( 3), INT8_C( 106), -INT8_C( 121), INT8_MAX, INT8_MIN, INT8_MIN, INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MAX },
{ -INT8_C( 121), INT8_C( 23), -INT8_C( 125), -INT8_C( 11), INT8_C( 79), -INT8_C( 3), INT8_C( 106), -INT8_C( 121), INT8_MAX, INT8_MIN, INT8_MIN, INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MAX },
{ -INT8_C( 121), INT8_C( 23), -INT8_C( 125), -INT8_C( 11), INT8_C( 79), -INT8_C( 3), INT8_C( 106), -INT8_C( 121), INT8_C( 39), -INT8_C( 96), -INT8_C( 55), INT8_C( 36), INT8_C( 76), -INT8_C( 127), INT8_C( 112), INT8_C( 42) } },
{ { -INT16_C( 22100), -INT16_C( 27202), INT16_C( 31275), INT16_C( 29280), -INT16_C( 27394), INT16_C( 8677), -INT16_C( 8078), -INT16_C( 13655) },
{ -INT8_C( 22), INT8_C( 103), INT8_C( 106), INT8_C( 121), -INT8_C( 74), INT8_C( 26), -INT8_C( 122), INT8_C( 30) },
{ -INT8_C( 22), INT8_C( 103), INT8_C( 106), INT8_C( 121), -INT8_C( 74), INT8_C( 26), -INT8_C( 122), INT8_C( 30), INT8_MIN, INT8_MIN, INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MIN },
{ -INT8_C( 22), INT8_C( 103), INT8_C( 106), INT8_C( 121), -INT8_C( 74), INT8_C( 26), -INT8_C( 122), INT8_C( 30), INT8_MIN, INT8_MIN, INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MIN },
{ -INT8_C( 22), INT8_C( 103), INT8_C( 106), INT8_C( 121), -INT8_C( 74), INT8_C( 26), -INT8_C( 122), INT8_C( 30), INT8_MIN, INT8_MIN, INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MIN },
{ -INT8_C( 22), INT8_C( 103), INT8_C( 106), INT8_C( 121), -INT8_C( 74), INT8_C( 26), -INT8_C( 122), INT8_C( 30), INT8_MIN, INT8_MIN, INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, -INT8_C( 127), INT8_MIN },
{ -INT8_C( 22), INT8_C( 103), INT8_C( 106), INT8_C( 121), -INT8_C( 74), INT8_C( 26), -INT8_C( 122), INT8_C( 30), -INT8_C( 87), -INT8_C( 107), INT8_C( 122), INT8_C( 114), -INT8_C( 108), INT8_C( 33), -INT8_C( 32), -INT8_C( 54) } },
{ { -INT16_C( 14844), INT16_C( 23748), INT16_C( 15764), INT16_C( 11881), -INT16_C( 14418), INT16_C( 14298), INT16_C( 22528), INT16_C( 16001) },
{ INT8_C( 5), INT8_C( 52), -INT8_C( 101), -INT8_C( 65), -INT8_C( 50), INT8_C( 52), INT8_C( 73), -INT8_C( 83) },
{ INT8_C( 5), INT8_C( 52), -INT8_C( 101), -INT8_C( 65), -INT8_C( 50), INT8_C( 52), INT8_C( 73), -INT8_C( 83), INT8_MIN, INT8_MAX, INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MAX, INT8_MAX },
{ INT8_C( 5), INT8_C( 52), -INT8_C( 101), -INT8_C( 65), -INT8_C( 50), INT8_C( 52), INT8_C( 73), -INT8_C( 83), INT8_MIN, INT8_MAX, INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MAX, INT8_MAX },
{ INT8_C( 5), INT8_C( 52), -INT8_C( 101), -INT8_C( 65), -INT8_C( 50), INT8_C( 52), INT8_C( 73), -INT8_C( 83), INT8_MIN, INT8_MAX, INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MAX, INT8_MAX },
{ INT8_C( 5), INT8_C( 52), -INT8_C( 101), -INT8_C( 65), -INT8_C( 50), INT8_C( 52), INT8_C( 73), -INT8_C( 83), INT8_MIN, INT8_MAX, INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MAX, INT8_MAX },
{ INT8_C( 5), INT8_C( 52), -INT8_C( 101), -INT8_C( 65), -INT8_C( 50), INT8_C( 52), INT8_C( 73), -INT8_C( 83), -INT8_C( 58), INT8_C( 92), INT8_C( 61), INT8_C( 46), -INT8_C( 57), INT8_C( 55), INT8_C( 88), INT8_C( 62) } },
{ { -INT16_C( 23532), -INT16_C( 12659), -INT16_C( 29861), INT16_C( 16868), -INT16_C( 22458), INT16_C( 28700), -INT16_C( 18092), -INT16_C( 7765) },
{ INT8_C( 56), INT8_C( 77), -INT8_C( 23), -INT8_C( 108), -INT8_C( 86), INT8_C( 93), INT8_C( 52), INT8_C( 68) },
{ INT8_C( 56), INT8_C( 77), -INT8_C( 23), -INT8_C( 108), -INT8_C( 86), INT8_C( 93), INT8_C( 52), INT8_C( 68), INT8_MIN, INT8_MIN, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MIN },
{ INT8_C( 56), INT8_C( 77), -INT8_C( 23), -INT8_C( 108), -INT8_C( 86), INT8_C( 93), INT8_C( 52), INT8_C( 68), INT8_MIN, INT8_MIN, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MIN },
{ INT8_C( 56), INT8_C( 77), -INT8_C( 23), -INT8_C( 108), -INT8_C( 86), INT8_C( 93), INT8_C( 52), INT8_C( 68), INT8_MIN, INT8_MIN, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MIN },
{ INT8_C( 56), INT8_C( 77), -INT8_C( 23), -INT8_C( 108), -INT8_C( 86), INT8_C( 93), INT8_C( 52), INT8_C( 68), INT8_MIN, INT8_MIN, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, -INT8_C( 122) },
{ INT8_C( 56), INT8_C( 77), -INT8_C( 23), -INT8_C( 108), -INT8_C( 86), INT8_C( 93), INT8_C( 52), INT8_C( 68), -INT8_C( 92), -INT8_C( 50), -INT8_C( 117), INT8_C( 65), -INT8_C( 88), INT8_C( 112), -INT8_C( 71), -INT8_C( 31) } },
{ { INT16_C( 20461), -INT16_C( 741), -INT16_C( 4533), -INT16_C( 9203), -INT16_C( 31212), -INT16_C( 3743), -INT16_C( 21233), INT16_C( 27370) },
{ -INT8_C( 17), INT8_C( 23), -INT8_C( 109), INT8_C( 27), -INT8_C( 77), INT8_C( 99), INT8_C( 76), -INT8_C( 44) },
{ -INT8_C( 17), INT8_C( 23), -INT8_C( 109), INT8_C( 27), -INT8_C( 77), INT8_C( 99), INT8_C( 76), -INT8_C( 44), INT8_MAX, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MAX },
{ -INT8_C( 17), INT8_C( 23), -INT8_C( 109), INT8_C( 27), -INT8_C( 77), INT8_C( 99), INT8_C( 76), -INT8_C( 44), INT8_MAX, -INT8_C( 93), INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MAX },
{ -INT8_C( 17), INT8_C( 23), -INT8_C( 109), INT8_C( 27), -INT8_C( 77), INT8_C( 99), INT8_C( 76), -INT8_C( 44), INT8_MAX, -INT8_C( 24), INT8_MIN, INT8_MIN, INT8_MIN, -INT8_C( 117), INT8_MIN, INT8_MAX },
{ -INT8_C( 17), INT8_C( 23), -INT8_C( 109), INT8_C( 27), -INT8_C( 77), INT8_C( 99), INT8_C( 76), -INT8_C( 44), INT8_MAX, -INT8_C( 12), -INT8_C( 71), INT8_MIN, INT8_MIN, -INT8_C( 59), INT8_MIN, INT8_MAX },
{ -INT8_C( 17), INT8_C( 23), -INT8_C( 109), INT8_C( 27), -INT8_C( 77), INT8_C( 99), INT8_C( 76), -INT8_C( 44), INT8_C( 79), -INT8_C( 3), -INT8_C( 18), -INT8_C( 36), -INT8_C( 122), -INT8_C( 15), -INT8_C( 83), INT8_C( 106) } },
{ { INT16_C( 19560), INT16_C( 13455), -INT16_C( 28972), INT16_C( 26862), -INT16_C( 30243), -INT16_C( 30157), -INT16_C( 12184), INT16_C( 20625) },
{ -INT8_C( 72), -INT8_C( 18), INT8_C( 24), -INT8_C( 24), -INT8_C( 59), -INT8_C( 62), -INT8_C( 102), INT8_C( 109) },
{ -INT8_C( 72), -INT8_C( 18), INT8_C( 24), -INT8_C( 24), -INT8_C( 59), -INT8_C( 62), -INT8_C( 102), INT8_C( 109), INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MAX },
{ -INT8_C( 72), -INT8_C( 18), INT8_C( 24), -INT8_C( 24), -INT8_C( 59), -INT8_C( 62), -INT8_C( 102), INT8_C( 109), INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MAX },
{ -INT8_C( 72), -INT8_C( 18), INT8_C( 24), -INT8_C( 24), -INT8_C( 59), -INT8_C( 62), -INT8_C( 102), INT8_C( 109), INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MAX },
{ -INT8_C( 72), -INT8_C( 18), INT8_C( 24), -INT8_C( 24), -INT8_C( 59), -INT8_C( 62), -INT8_C( 102), INT8_C( 109), INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MAX },
{ -INT8_C( 72), -INT8_C( 18), INT8_C( 24), -INT8_C( 24), -INT8_C( 59), -INT8_C( 62), -INT8_C( 102), INT8_C( 109), INT8_C( 76), INT8_C( 52), -INT8_C( 114), INT8_C( 104), -INT8_C( 119), -INT8_C( 118), -INT8_C( 48), INT8_C( 80) } },
{ { INT16_C( 1314), INT16_C( 14771), -INT16_C( 18655), INT16_C( 21202), -INT16_C( 13604), -INT16_C( 4043), -INT16_C( 28213), -INT16_C( 19543) },
{ INT8_C( 104), -INT8_C( 117), -INT8_C( 52), -INT8_C( 101), -INT8_C( 25), -INT8_C( 59), -INT8_C( 62), INT8_C( 70) },
{ INT8_C( 104), -INT8_C( 117), -INT8_C( 52), -INT8_C( 101), -INT8_C( 25), -INT8_C( 59), -INT8_C( 62), INT8_C( 70), INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN },
{ INT8_C( 104), -INT8_C( 117), -INT8_C( 52), -INT8_C( 101), -INT8_C( 25), -INT8_C( 59), -INT8_C( 62), INT8_C( 70), INT8_MAX, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MIN, INT8_MIN, INT8_MIN },
{ INT8_C( 104), -INT8_C( 117), -INT8_C( 52), -INT8_C( 101), -INT8_C( 25), -INT8_C( 59), -INT8_C( 62), INT8_C( 70), INT8_C( 41), INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, -INT8_C( 127), INT8_MIN, INT8_MIN },
{ INT8_C( 104), -INT8_C( 117), -INT8_C( 52), -INT8_C( 101), -INT8_C( 25), -INT8_C( 59), -INT8_C( 62), INT8_C( 70), INT8_C( 20), INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, -INT8_C( 64), INT8_MIN, INT8_MIN },
{ INT8_C( 104), -INT8_C( 117), -INT8_C( 52), -INT8_C( 101), -INT8_C( 25), -INT8_C( 59), -INT8_C( 62), INT8_C( 70), INT8_C( 5), INT8_C( 57), -INT8_C( 73), INT8_C( 82), -INT8_C( 54), -INT8_C( 16), -INT8_C( 111), -INT8_C( 77) } },
{ { INT16_C( 21984), INT16_C( 7535), -INT16_C( 11054), -INT16_C( 15541), INT16_C( 6702), -INT16_C( 19675), -INT16_C( 10927), -INT16_C( 26787) },
{ INT8_C( 122), -INT8_C( 123), INT8_C( 84), -INT8_C( 127), INT8_C( 82), -INT8_C( 67), -INT8_C( 85), INT8_C( 43) },
{ INT8_C( 122), -INT8_C( 123), INT8_C( 84), -INT8_C( 127), INT8_C( 82), -INT8_C( 67), -INT8_C( 85), INT8_C( 43), INT8_MAX, INT8_MAX, INT8_MIN, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MIN, INT8_MIN },
{ INT8_C( 122), -INT8_C( 123), INT8_C( 84), -INT8_C( 127), INT8_C( 82), -INT8_C( 67), -INT8_C( 85), INT8_C( 43), INT8_MAX, INT8_MAX, INT8_MIN, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MIN, INT8_MIN },
{ INT8_C( 122), -INT8_C( 123), INT8_C( 84), -INT8_C( 127), INT8_C( 82), -INT8_C( 67), -INT8_C( 85), INT8_C( 43), INT8_MAX, INT8_MAX, INT8_MIN, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MIN, INT8_MIN },
{ INT8_C( 122), -INT8_C( 123), INT8_C( 84), -INT8_C( 127), INT8_C( 82), -INT8_C( 67), -INT8_C( 85), INT8_C( 43), INT8_MAX, INT8_C( 117), INT8_MIN, INT8_MIN, INT8_C( 104), INT8_MIN, INT8_MIN, INT8_MIN },
{ INT8_C( 122), -INT8_C( 123), INT8_C( 84), -INT8_C( 127), INT8_C( 82), -INT8_C( 67), -INT8_C( 85), INT8_C( 43), INT8_C( 85), INT8_C( 29), -INT8_C( 44), -INT8_C( 61), INT8_C( 26), -INT8_C( 77), -INT8_C( 43), -INT8_C( 105) } },
};
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_int8x8_t r = simde_vld1_s8(test_vec[i].r);
simde_int8x16_t r1 = simde_vqshrn_high_n_s16(r, a, 1);
simde_int8x16_t r3 = simde_vqshrn_high_n_s16(r, a, 3);
simde_int8x16_t r5 = simde_vqshrn_high_n_s16(r, a, 5);
simde_int8x16_t r6 = simde_vqshrn_high_n_s16(r, a, 6);
simde_int8x16_t r8 = simde_vqshrn_high_n_s16(r, a, 8);
simde_test_arm_neon_assert_equal_i8x16(r1, simde_vld1q_s8(test_vec[i].r1));
simde_test_arm_neon_assert_equal_i8x16(r3, simde_vld1q_s8(test_vec[i].r3));
simde_test_arm_neon_assert_equal_i8x16(r5, simde_vld1q_s8(test_vec[i].r5));
simde_test_arm_neon_assert_equal_i8x16(r6, simde_vld1q_s8(test_vec[i].r6));
simde_test_arm_neon_assert_equal_i8x16(r8, simde_vld1q_s8(test_vec[i].r8));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int16x8_t a = simde_test_arm_neon_random_i16x8();
simde_int8x8_t r = simde_test_arm_neon_random_i8x8();
simde_int8x16_t r1 = simde_vqshrn_high_n_s16(r, a, 1);
simde_int8x16_t r3 = simde_vqshrn_high_n_s16(r, a, 3);
simde_int8x16_t r5 = simde_vqshrn_high_n_s16(r, a, 5);
simde_int8x16_t r6 = simde_vqshrn_high_n_s16(r, a, 6);
simde_int8x16_t r8 = simde_vqshrn_high_n_s16(r, a, 8);
simde_test_arm_neon_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i8x8(2, r, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i8x16(2, r1, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i8x16(2, r3, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i8x16(2, r5, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i8x16(2, r6, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i8x16(2, r8, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqshrn_high_n_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
int32_t a[4];
int16_t r[4];
int16_t r3[8];
int16_t r6[8];
int16_t r10[8];
int16_t r13[8];
int16_t r16[8];
} test_vec[] = {
{ { INT32_C(1129261466), -INT32_C(1639403369), INT32_C( 71313492), -INT32_C(1496180707) },
{ INT16_C( 1331), -INT16_C( 29205), -INT16_C( 30587), INT16_C( 25424) },
{ INT16_C( 1331), -INT16_C( 29205), -INT16_C( 30587), INT16_C( 25424), INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN },
{ INT16_C( 1331), -INT16_C( 29205), -INT16_C( 30587), INT16_C( 25424), INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN },
{ INT16_C( 1331), -INT16_C( 29205), -INT16_C( 30587), INT16_C( 25424), INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN },
{ INT16_C( 1331), -INT16_C( 29205), -INT16_C( 30587), INT16_C( 25424), INT16_MAX, INT16_MIN, INT16_C( 8705), INT16_MIN },
{ INT16_C( 1331), -INT16_C( 29205), -INT16_C( 30587), INT16_C( 25424), INT16_C( 17231), -INT16_C( 25016), INT16_C( 1088), -INT16_C( 22830) } },
{ { -INT32_C(1459014421), -INT32_C(1515670200), INT32_C( 82559049), -INT32_C(2077923617) },
{ -INT16_C( 28066), -INT16_C( 29382), -INT16_C( 27745), INT16_C( 20378) },
{ -INT16_C( 28066), -INT16_C( 29382), -INT16_C( 27745), INT16_C( 20378), INT16_MIN, INT16_MIN, INT16_MAX, INT16_MIN },
{ -INT16_C( 28066), -INT16_C( 29382), -INT16_C( 27745), INT16_C( 20378), INT16_MIN, INT16_MIN, INT16_MAX, INT16_MIN },
{ -INT16_C( 28066), -INT16_C( 29382), -INT16_C( 27745), INT16_C( 20378), INT16_MIN, INT16_MIN, INT16_MAX, INT16_MIN },
{ -INT16_C( 28066), -INT16_C( 29382), -INT16_C( 27745), INT16_C( 20378), INT16_MIN, INT16_MIN, INT16_C( 10078), INT16_MIN },
{ -INT16_C( 28066), -INT16_C( 29382), -INT16_C( 27745), INT16_C( 20378), -INT16_C( 22263), -INT16_C( 23128), INT16_C( 1259), -INT16_C( 31707) } },
{ { -INT32_C(1669005205), -INT32_C( 361496326), INT32_C(1142570396), -INT32_C(1170924398) },
{ -INT16_C( 21246), -INT16_C( 7755), -INT16_C( 21005), -INT16_C( 8489) },
{ -INT16_C( 21246), -INT16_C( 7755), -INT16_C( 21005), -INT16_C( 8489), INT16_MIN, INT16_MIN, INT16_MAX, INT16_MIN },
{ -INT16_C( 21246), -INT16_C( 7755), -INT16_C( 21005), -INT16_C( 8489), INT16_MIN, INT16_MIN, INT16_MAX, INT16_MIN },
{ -INT16_C( 21246), -INT16_C( 7755), -INT16_C( 21005), -INT16_C( 8489), INT16_MIN, INT16_MIN, INT16_MAX, INT16_MIN },
{ -INT16_C( 21246), -INT16_C( 7755), -INT16_C( 21005), -INT16_C( 8489), INT16_MIN, INT16_MIN, INT16_MAX, INT16_MIN },
{ -INT16_C( 21246), -INT16_C( 7755), -INT16_C( 21005), -INT16_C( 8489), -INT16_C( 25467), -INT16_C( 5516), INT16_C( 17434), -INT16_C( 17867) } },
{ { INT32_C( 991737227), -INT32_C( 247956976), INT32_C(1830904832), INT32_C( 925103331) },
{ -INT16_C( 20572), -INT16_C( 16805), -INT16_C( 11538), INT16_C( 29449) },
{ -INT16_C( 20572), -INT16_C( 16805), -INT16_C( 11538), INT16_C( 29449), INT16_MAX, INT16_MIN, INT16_MAX, INT16_MAX },
{ -INT16_C( 20572), -INT16_C( 16805), -INT16_C( 11538), INT16_C( 29449), INT16_MAX, INT16_MIN, INT16_MAX, INT16_MAX },
{ -INT16_C( 20572), -INT16_C( 16805), -INT16_C( 11538), INT16_C( 29449), INT16_MAX, INT16_MIN, INT16_MAX, INT16_MAX },
{ -INT16_C( 20572), -INT16_C( 16805), -INT16_C( 11538), INT16_C( 29449), INT16_MAX, -INT16_C( 30269), INT16_MAX, INT16_MAX },
{ -INT16_C( 20572), -INT16_C( 16805), -INT16_C( 11538), INT16_C( 29449), INT16_C( 15132), -INT16_C( 3784), INT16_C( 27937), INT16_C( 14115) } },
{ { INT32_C( 521682632), -INT32_C(1873599869), -INT32_C(1886854197), INT32_C( 834818051) },
{ -INT16_C( 8241), INT16_C( 15746), -INT16_C( 2), INT16_C( 2910) },
{ -INT16_C( 8241), INT16_C( 15746), -INT16_C( 2), INT16_C( 2910), INT16_MAX, INT16_MIN, INT16_MIN, INT16_MAX },
{ -INT16_C( 8241), INT16_C( 15746), -INT16_C( 2), INT16_C( 2910), INT16_MAX, INT16_MIN, INT16_MIN, INT16_MAX },
{ -INT16_C( 8241), INT16_C( 15746), -INT16_C( 2), INT16_C( 2910), INT16_MAX, INT16_MIN, INT16_MIN, INT16_MAX },
{ -INT16_C( 8241), INT16_C( 15746), -INT16_C( 2), INT16_C( 2910), INT16_MAX, INT16_MIN, INT16_MIN, INT16_MAX },
{ -INT16_C( 8241), INT16_C( 15746), -INT16_C( 2), INT16_C( 2910), INT16_C( 7960), -INT16_C( 28589), -INT16_C( 28792), INT16_C( 12738) } },
{ { INT32_C( 752569105), -INT32_C(1056108898), -INT32_C( 55610933), -INT32_C(1139322037) },
{ -INT16_C( 30067), -INT16_C( 9119), -INT16_C( 6313), -INT16_C( 28795) },
{ -INT16_C( 30067), -INT16_C( 9119), -INT16_C( 6313), -INT16_C( 28795), INT16_MAX, INT16_MIN, INT16_MIN, INT16_MIN },
{ -INT16_C( 30067), -INT16_C( 9119), -INT16_C( 6313), -INT16_C( 28795), INT16_MAX, INT16_MIN, INT16_MIN, INT16_MIN },
{ -INT16_C( 30067), -INT16_C( 9119), -INT16_C( 6313), -INT16_C( 28795), INT16_MAX, INT16_MIN, INT16_MIN, INT16_MIN },
{ -INT16_C( 30067), -INT16_C( 9119), -INT16_C( 6313), -INT16_C( 28795), INT16_MAX, INT16_MIN, -INT16_C( 6789), INT16_MIN },
{ -INT16_C( 30067), -INT16_C( 9119), -INT16_C( 6313), -INT16_C( 28795), INT16_C( 11483), -INT16_C( 16115), -INT16_C( 849), -INT16_C( 17385) } },
{ { -INT32_C( 13538846), INT32_C( 294134544), -INT32_C( 36755682), INT32_C( 542562851) },
{ INT16_C( 4346), INT16_C( 1839), -INT16_C( 32259), INT16_C( 30305) },
{ INT16_C( 4346), INT16_C( 1839), -INT16_C( 32259), INT16_C( 30305), INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX },
{ INT16_C( 4346), INT16_C( 1839), -INT16_C( 32259), INT16_C( 30305), INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX },
{ INT16_C( 4346), INT16_C( 1839), -INT16_C( 32259), INT16_C( 30305), -INT16_C( 13222), INT16_MAX, INT16_MIN, INT16_MAX },
{ INT16_C( 4346), INT16_C( 1839), -INT16_C( 32259), INT16_C( 30305), -INT16_C( 1653), INT16_MAX, -INT16_C( 4487), INT16_MAX },
{ INT16_C( 4346), INT16_C( 1839), -INT16_C( 32259), INT16_C( 30305), -INT16_C( 207), INT16_C( 4488), -INT16_C( 561), INT16_C( 8278) } },
{ { INT32_C( 173726430), -INT32_C(1101904268), -INT32_C( 100277379), INT32_C( 952928107) },
{ INT16_C( 2900), -INT16_C( 20521), INT16_C( 26827), INT16_C( 7019) },
{ INT16_C( 2900), -INT16_C( 20521), INT16_C( 26827), INT16_C( 7019), INT16_MAX, INT16_MIN, INT16_MIN, INT16_MAX },
{ INT16_C( 2900), -INT16_C( 20521), INT16_C( 26827), INT16_C( 7019), INT16_MAX, INT16_MIN, INT16_MIN, INT16_MAX },
{ INT16_C( 2900), -INT16_C( 20521), INT16_C( 26827), INT16_C( 7019), INT16_MAX, INT16_MIN, INT16_MIN, INT16_MAX },
{ INT16_C( 2900), -INT16_C( 20521), INT16_C( 26827), INT16_C( 7019), INT16_C( 21206), INT16_MIN, -INT16_C( 12241), INT16_MAX },
{ INT16_C( 2900), -INT16_C( 20521), INT16_C( 26827), INT16_C( 7019), INT16_C( 2650), -INT16_C( 16814), -INT16_C( 1531), INT16_C( 14540) } },
};
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_int16x4_t r = simde_vld1_s16(test_vec[i].r);
simde_int16x8_t r3 = simde_vqshrn_high_n_s32(r, a, 3);
simde_int16x8_t r6 = simde_vqshrn_high_n_s32(r, a, 6);
simde_int16x8_t r10 = simde_vqshrn_high_n_s32(r, a, 10);
simde_int16x8_t r13 = simde_vqshrn_high_n_s32(r, a, 13);
simde_int16x8_t r16 = simde_vqshrn_high_n_s32(r, a, 16);
simde_test_arm_neon_assert_equal_i16x8(r3, simde_vld1q_s16(test_vec[i].r3));
simde_test_arm_neon_assert_equal_i16x8(r6, simde_vld1q_s16(test_vec[i].r6));
simde_test_arm_neon_assert_equal_i16x8(r10, simde_vld1q_s16(test_vec[i].r10));
simde_test_arm_neon_assert_equal_i16x8(r13, simde_vld1q_s16(test_vec[i].r13));
simde_test_arm_neon_assert_equal_i16x8(r16, simde_vld1q_s16(test_vec[i].r16));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int32x4_t a = simde_test_arm_neon_random_i32x4();
simde_int16x4_t r = simde_test_arm_neon_random_i16x4();
simde_int16x8_t r3 = simde_vqshrn_high_n_s32(r, a, 3);
simde_int16x8_t r6 = simde_vqshrn_high_n_s32(r, a, 6);
simde_int16x8_t r10 = simde_vqshrn_high_n_s32(r, a, 10);
simde_int16x8_t r13 = simde_vqshrn_high_n_s32(r, a, 13);
simde_int16x8_t r16 = simde_vqshrn_high_n_s32(r, a, 16);
simde_test_arm_neon_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i16x4(2, r, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i16x8(2, r3, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i16x8(2, r6, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i16x8(2, r10, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i16x8(2, r13, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i16x8(2, r16, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqshrn_high_n_s64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
int64_t a[2];
int32_t r[2];
int32_t r6[4];
int32_t r13[4];
int32_t r19[4];
int32_t r26[4];
int32_t r32[4];
} test_vec[] = {
{ { -INT64_C(765171249508011034), -INT64_C(4525319093864694895) },
{ -INT32_C(1566369049), -INT32_C(984125454) },
{ -INT32_C(1566369049), -INT32_C(984125454), INT32_MIN, INT32_MIN },
{ -INT32_C(1566369049), -INT32_C(984125454), INT32_MIN, INT32_MIN },
{ -INT32_C(1566369049), -INT32_C(984125454), INT32_MIN, INT32_MIN },
{ -INT32_C(1566369049), -INT32_C(984125454), INT32_MIN, INT32_MIN },
{ -INT32_C(1566369049), -INT32_C(984125454), -INT32_C(178155315), -INT32_C(1053632958) } },
{ { -INT64_C(3161110402208284557), INT64_C(1691993124931351958) },
{ -INT32_C(360166921), INT32_C(56480042) },
{ -INT32_C(360166921), INT32_C(56480042), INT32_MIN, INT32_MAX },
{ -INT32_C(360166921), INT32_C(56480042), INT32_MIN, INT32_MAX },
{ -INT32_C(360166921), INT32_C(56480042), INT32_MIN, INT32_MAX },
{ -INT32_C(360166921), INT32_C(56480042), INT32_MIN, INT32_MAX },
{ -INT32_C(360166921), INT32_C(56480042), -INT32_C(736003370), INT32_C(393947848) } },
{ { -INT64_C(6810743514283196592), -INT64_C(3960885338091995016) },
{ INT32_C(1536115396), -INT32_C(290743308) },
{ INT32_C(1536115396), -INT32_C(290743308), INT32_MIN, INT32_MIN },
{ INT32_C(1536115396), -INT32_C(290743308), INT32_MIN, INT32_MIN },
{ INT32_C(1536115396), -INT32_C(290743308), INT32_MIN, INT32_MIN },
{ INT32_C(1536115396), -INT32_C(290743308), INT32_MIN, INT32_MIN },
{ INT32_C(1536115396), -INT32_C(290743308), -INT32_C(1585749797), -INT32_C(922215483) } },
{ { INT64_C(1012374666276996287), INT64_C(5445809416200044057) },
{ -INT32_C(1308095952), -INT32_C(784194256) },
{ -INT32_C(1308095952), -INT32_C(784194256), INT32_MAX, INT32_MAX },
{ -INT32_C(1308095952), -INT32_C(784194256), INT32_MAX, INT32_MAX },
{ -INT32_C(1308095952), -INT32_C(784194256), INT32_MAX, INT32_MAX },
{ -INT32_C(1308095952), -INT32_C(784194256), INT32_MAX, INT32_MAX },
{ -INT32_C(1308095952), -INT32_C(784194256), INT32_C(235711845), INT32_C(1267951311) } },
{ { INT64_C(378766495890448787), -INT64_C(7944518708464066992) },
{ -INT32_C(366409358), INT32_C(1396245526) },
{ -INT32_C(366409358), INT32_C(1396245526), INT32_MAX, INT32_MIN },
{ -INT32_C(366409358), INT32_C(1396245526), INT32_MAX, INT32_MIN },
{ -INT32_C(366409358), INT32_C(1396245526), INT32_MAX, INT32_MIN },
{ -INT32_C(366409358), INT32_C(1396245526), INT32_MAX, INT32_MIN },
{ -INT32_C(366409358), INT32_C(1396245526), INT32_C(88188447), -INT32_C(1849727405) } },
{ { -INT64_C(8933309892358046918), -INT64_C(1273532278696929068) },
{ INT32_C(443286716), -INT32_C(1983115849) },
{ INT32_C(443286716), -INT32_C(1983115849), INT32_MIN, INT32_MIN },
{ INT32_C(443286716), -INT32_C(1983115849), INT32_MIN, INT32_MIN },
{ INT32_C(443286716), -INT32_C(1983115849), INT32_MIN, INT32_MIN },
{ INT32_C(443286716), -INT32_C(1983115849), INT32_MIN, INT32_MIN },
{ INT32_C(443286716), -INT32_C(1983115849), -INT32_C(2079948293), -INT32_C(296517341) } },
{ { INT64_C(2163653472670588741), -INT64_C(2442964316617231425) },
{ -INT32_C(1546863875), INT32_C(1785966531) },
{ -INT32_C(1546863875), INT32_C(1785966531), INT32_MAX, INT32_MIN },
{ -INT32_C(1546863875), INT32_C(1785966531), INT32_MAX, INT32_MIN },
{ -INT32_C(1546863875), INT32_C(1785966531), INT32_MAX, INT32_MIN },
{ -INT32_C(1546863875), INT32_C(1785966531), INT32_MAX, INT32_MIN },
{ -INT32_C(1546863875), INT32_C(1785966531), INT32_C(503764830), -INT32_C(568796955) } },
{ { -INT64_C(3574845421579539086), -INT64_C(2305885010680092105) },
{ INT32_C(91844711), -INT32_C(723757095) },
{ INT32_C(91844711), -INT32_C(723757095), INT32_MIN, INT32_MIN },
{ INT32_C(91844711), -INT32_C(723757095), INT32_MIN, INT32_MIN },
{ INT32_C(91844711), -INT32_C(723757095), INT32_MIN, INT32_MIN },
{ INT32_C(91844711), -INT32_C(723757095), INT32_MIN, INT32_MIN },
{ INT32_C(91844711), -INT32_C(723757095), -INT32_C(832333561), -INT32_C(536880692) } },
};
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_int32x2_t r = simde_vld1_s32(test_vec[i].r);
simde_int32x4_t r6 = simde_vqshrn_high_n_s64(r, a, 6);
simde_int32x4_t r13 = simde_vqshrn_high_n_s64(r, a, 13);
simde_int32x4_t r19 = simde_vqshrn_high_n_s64(r, a, 19);
simde_int32x4_t r26 = simde_vqshrn_high_n_s64(r, a, 26);
simde_int32x4_t r32 = simde_vqshrn_high_n_s64(r, a, 32);
simde_test_arm_neon_assert_equal_i32x4(r6, simde_vld1q_s32(test_vec[i].r6));
simde_test_arm_neon_assert_equal_i32x4(r13, simde_vld1q_s32(test_vec[i].r13));
simde_test_arm_neon_assert_equal_i32x4(r19, simde_vld1q_s32(test_vec[i].r19));
simde_test_arm_neon_assert_equal_i32x4(r26, simde_vld1q_s32(test_vec[i].r26));
simde_test_arm_neon_assert_equal_i32x4(r32, simde_vld1q_s32(test_vec[i].r32));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_int64x2_t a = simde_test_arm_neon_random_i64x2();
simde_int32x2_t r = simde_test_arm_neon_random_i32x2();
simde_int32x4_t r6 = simde_vqshrn_high_n_s64(r, a, 6);
simde_int32x4_t r13 = simde_vqshrn_high_n_s64(r, a, 13);
simde_int32x4_t r19 = simde_vqshrn_high_n_s64(r, a, 19);
simde_int32x4_t r26 = simde_vqshrn_high_n_s64(r, a, 26);
simde_int32x4_t r32 = simde_vqshrn_high_n_s64(r, a, 32);
simde_test_arm_neon_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_i32x2(2, r, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i32x4(2, r6, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i32x4(2, r13, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i32x4(2, r19, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i32x4(2, r26, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_i32x4(2, r32, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqshrn_high_n_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
uint16_t a[8];
uint8_t r[8];
uint8_t r1[16];
uint8_t r3[16];
uint8_t r5[16];
uint8_t r6[16];
uint8_t r8[16];
} test_vec[] = {
{ { UINT16_C( 1105), UINT16_C( 6921), UINT16_C( 48895), UINT16_C( 26266), UINT16_C( 24330), UINT16_C( 16692), UINT16_C( 7067), UINT16_C( 37251) },
{ UINT8_C( 147), UINT8_C( 72), UINT8_C( 41), UINT8_C( 186), UINT8_C( 224), UINT8_C( 59), UINT8_C( 125), UINT8_C( 92) },
{ UINT8_C( 147), UINT8_C( 72), UINT8_C( 41), UINT8_C( 186), UINT8_C( 224), UINT8_C( 59), UINT8_C( 125), UINT8_C( 92), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 147), UINT8_C( 72), UINT8_C( 41), UINT8_C( 186), UINT8_C( 224), UINT8_C( 59), UINT8_C( 125), UINT8_C( 92), UINT8_C( 138), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 147), UINT8_C( 72), UINT8_C( 41), UINT8_C( 186), UINT8_C( 224), UINT8_C( 59), UINT8_C( 125), UINT8_C( 92), UINT8_C( 34), UINT8_C( 216), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 220), UINT8_MAX },
{ UINT8_C( 147), UINT8_C( 72), UINT8_C( 41), UINT8_C( 186), UINT8_C( 224), UINT8_C( 59), UINT8_C( 125), UINT8_C( 92), UINT8_C( 17), UINT8_C( 108), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 110), UINT8_MAX },
{ UINT8_C( 147), UINT8_C( 72), UINT8_C( 41), UINT8_C( 186), UINT8_C( 224), UINT8_C( 59), UINT8_C( 125), UINT8_C( 92), UINT8_C( 4), UINT8_C( 27), UINT8_C( 190), UINT8_C( 102), UINT8_C( 95), UINT8_C( 65), UINT8_C( 27), UINT8_C( 145) } },
{ { UINT16_C( 54415), UINT16_C( 52396), UINT16_C( 44348), UINT16_C( 19843), UINT16_C( 21304), UINT16_C( 58585), UINT16_C( 20228), UINT16_C( 37437) },
{ UINT8_C( 83), UINT8_C( 107), UINT8_C( 8), UINT8_C( 150), UINT8_C( 99), UINT8_C( 77), UINT8_C( 232), UINT8_C( 49) },
{ UINT8_C( 83), UINT8_C( 107), UINT8_C( 8), UINT8_C( 150), UINT8_C( 99), UINT8_C( 77), UINT8_C( 232), UINT8_C( 49), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 83), UINT8_C( 107), UINT8_C( 8), UINT8_C( 150), UINT8_C( 99), UINT8_C( 77), UINT8_C( 232), UINT8_C( 49), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 83), UINT8_C( 107), UINT8_C( 8), UINT8_C( 150), UINT8_C( 99), UINT8_C( 77), UINT8_C( 232), UINT8_C( 49), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 83), UINT8_C( 107), UINT8_C( 8), UINT8_C( 150), UINT8_C( 99), UINT8_C( 77), UINT8_C( 232), UINT8_C( 49), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 83), UINT8_C( 107), UINT8_C( 8), UINT8_C( 150), UINT8_C( 99), UINT8_C( 77), UINT8_C( 232), UINT8_C( 49), UINT8_C( 212), UINT8_C( 204), UINT8_C( 173), UINT8_C( 77), UINT8_C( 83), UINT8_C( 228), UINT8_C( 79), UINT8_C( 146) } },
{ { UINT16_C( 2035), UINT16_C( 27462), UINT16_C( 56467), UINT16_C( 311), UINT16_C( 791), UINT16_C( 31983), UINT16_C( 27022), UINT16_C( 28573) },
{ UINT8_C( 68), UINT8_C( 37), UINT8_C( 8), UINT8_C( 62), UINT8_C( 24), UINT8_C( 133), UINT8_C( 210), UINT8_C( 117) },
{ UINT8_C( 68), UINT8_C( 37), UINT8_C( 8), UINT8_C( 62), UINT8_C( 24), UINT8_C( 133), UINT8_C( 210), UINT8_C( 117), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 155), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 68), UINT8_C( 37), UINT8_C( 8), UINT8_C( 62), UINT8_C( 24), UINT8_C( 133), UINT8_C( 210), UINT8_C( 117), UINT8_C( 254), UINT8_MAX, UINT8_MAX, UINT8_C( 38), UINT8_C( 98), UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 68), UINT8_C( 37), UINT8_C( 8), UINT8_C( 62), UINT8_C( 24), UINT8_C( 133), UINT8_C( 210), UINT8_C( 117), UINT8_C( 63), UINT8_MAX, UINT8_MAX, UINT8_C( 9), UINT8_C( 24), UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 68), UINT8_C( 37), UINT8_C( 8), UINT8_C( 62), UINT8_C( 24), UINT8_C( 133), UINT8_C( 210), UINT8_C( 117), UINT8_C( 31), UINT8_MAX, UINT8_MAX, UINT8_C( 4), UINT8_C( 12), UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 68), UINT8_C( 37), UINT8_C( 8), UINT8_C( 62), UINT8_C( 24), UINT8_C( 133), UINT8_C( 210), UINT8_C( 117), UINT8_C( 7), UINT8_C( 107), UINT8_C( 220), UINT8_C( 1), UINT8_C( 3), UINT8_C( 124), UINT8_C( 105), UINT8_C( 111) } },
{ { UINT16_C( 24051), UINT16_C( 261), UINT16_C( 14783), UINT16_C( 63186), UINT16_C( 2150), UINT16_C( 16210), UINT16_C( 15740), UINT16_C( 31367) },
{ UINT8_C( 26), UINT8_C( 102), UINT8_C( 106), UINT8_C( 141), UINT8_C( 181), UINT8_C( 117), UINT8_C( 54), UINT8_C( 45) },
{ UINT8_C( 26), UINT8_C( 102), UINT8_C( 106), UINT8_C( 141), UINT8_C( 181), UINT8_C( 117), UINT8_C( 54), UINT8_C( 45), UINT8_MAX, UINT8_C( 130), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 26), UINT8_C( 102), UINT8_C( 106), UINT8_C( 141), UINT8_C( 181), UINT8_C( 117), UINT8_C( 54), UINT8_C( 45), UINT8_MAX, UINT8_C( 32), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 26), UINT8_C( 102), UINT8_C( 106), UINT8_C( 141), UINT8_C( 181), UINT8_C( 117), UINT8_C( 54), UINT8_C( 45), UINT8_MAX, UINT8_C( 8), UINT8_MAX, UINT8_MAX, UINT8_C( 67), UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 26), UINT8_C( 102), UINT8_C( 106), UINT8_C( 141), UINT8_C( 181), UINT8_C( 117), UINT8_C( 54), UINT8_C( 45), UINT8_MAX, UINT8_C( 4), UINT8_C( 230), UINT8_MAX, UINT8_C( 33), UINT8_C( 253), UINT8_C( 245), UINT8_MAX },
{ UINT8_C( 26), UINT8_C( 102), UINT8_C( 106), UINT8_C( 141), UINT8_C( 181), UINT8_C( 117), UINT8_C( 54), UINT8_C( 45), UINT8_C( 93), UINT8_C( 1), UINT8_C( 57), UINT8_C( 246), UINT8_C( 8), UINT8_C( 63), UINT8_C( 61), UINT8_C( 122) } },
{ { UINT16_C( 8851), UINT16_C( 30702), UINT16_C( 11103), UINT16_C( 45088), UINT16_C( 21022), UINT16_C( 2460), UINT16_C( 17797), UINT16_C( 18061) },
{ UINT8_C( 61), UINT8_C( 231), UINT8_C( 92), UINT8_C( 213), UINT8_C( 101), UINT8_C( 122), UINT8_C( 50), UINT8_C( 195) },
{ UINT8_C( 61), UINT8_C( 231), UINT8_C( 92), UINT8_C( 213), UINT8_C( 101), UINT8_C( 122), UINT8_C( 50), UINT8_C( 195), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 61), UINT8_C( 231), UINT8_C( 92), UINT8_C( 213), UINT8_C( 101), UINT8_C( 122), UINT8_C( 50), UINT8_C( 195), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 61), UINT8_C( 231), UINT8_C( 92), UINT8_C( 213), UINT8_C( 101), UINT8_C( 122), UINT8_C( 50), UINT8_C( 195), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 76), UINT8_MAX, UINT8_MAX },
{ UINT8_C( 61), UINT8_C( 231), UINT8_C( 92), UINT8_C( 213), UINT8_C( 101), UINT8_C( 122), UINT8_C( 50), UINT8_C( 195), UINT8_C( 138), UINT8_MAX, UINT8_C( 173), UINT8_MAX, UINT8_MAX, UINT8_C( 38), UINT8_MAX, UINT8_MAX },
{ UINT8_C( 61), UINT8_C( 231), UINT8_C( 92), UINT8_C( 213), UINT8_C( 101), UINT8_C( 122), UINT8_C( 50), UINT8_C( 195), UINT8_C( 34), UINT8_C( 119), UINT8_C( 43), UINT8_C( 176), UINT8_C( 82), UINT8_C( 9), UINT8_C( 69), UINT8_C( 70) } },
{ { UINT16_C( 52972), UINT16_C( 55056), UINT16_C( 8297), UINT16_C( 49512), UINT16_C( 26081), UINT16_C( 29542), UINT16_C( 35273), UINT16_C( 26373) },
{ UINT8_C( 16), UINT8_C( 151), UINT8_C( 73), UINT8_C( 22), UINT8_C( 214), UINT8_C( 25), UINT8_C( 123), UINT8_C( 96) },
{ UINT8_C( 16), UINT8_C( 151), UINT8_C( 73), UINT8_C( 22), UINT8_C( 214), UINT8_C( 25), UINT8_C( 123), UINT8_C( 96), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 16), UINT8_C( 151), UINT8_C( 73), UINT8_C( 22), UINT8_C( 214), UINT8_C( 25), UINT8_C( 123), UINT8_C( 96), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 16), UINT8_C( 151), UINT8_C( 73), UINT8_C( 22), UINT8_C( 214), UINT8_C( 25), UINT8_C( 123), UINT8_C( 96), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 16), UINT8_C( 151), UINT8_C( 73), UINT8_C( 22), UINT8_C( 214), UINT8_C( 25), UINT8_C( 123), UINT8_C( 96), UINT8_MAX, UINT8_MAX, UINT8_C( 129), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 16), UINT8_C( 151), UINT8_C( 73), UINT8_C( 22), UINT8_C( 214), UINT8_C( 25), UINT8_C( 123), UINT8_C( 96), UINT8_C( 206), UINT8_C( 215), UINT8_C( 32), UINT8_C( 193), UINT8_C( 101), UINT8_C( 115), UINT8_C( 137), UINT8_C( 103) } },
{ { UINT16_C( 34631), UINT16_C( 19191), UINT16_C( 10930), UINT16_C( 25238), UINT16_C( 4654), UINT16_C( 17428), UINT16_C( 38959), UINT16_C( 64073) },
{ UINT8_C( 78), UINT8_C( 84), UINT8_C( 151), UINT8_C( 79), UINT8_C( 210), UINT8_C( 96), UINT8_C( 183), UINT8_C( 231) },
{ UINT8_C( 78), UINT8_C( 84), UINT8_C( 151), UINT8_C( 79), UINT8_C( 210), UINT8_C( 96), UINT8_C( 183), UINT8_C( 231), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 78), UINT8_C( 84), UINT8_C( 151), UINT8_C( 79), UINT8_C( 210), UINT8_C( 96), UINT8_C( 183), UINT8_C( 231), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 78), UINT8_C( 84), UINT8_C( 151), UINT8_C( 79), UINT8_C( 210), UINT8_C( 96), UINT8_C( 183), UINT8_C( 231), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 145), UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 78), UINT8_C( 84), UINT8_C( 151), UINT8_C( 79), UINT8_C( 210), UINT8_C( 96), UINT8_C( 183), UINT8_C( 231), UINT8_MAX, UINT8_MAX, UINT8_C( 170), UINT8_MAX, UINT8_C( 72), UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 78), UINT8_C( 84), UINT8_C( 151), UINT8_C( 79), UINT8_C( 210), UINT8_C( 96), UINT8_C( 183), UINT8_C( 231), UINT8_C( 135), UINT8_C( 74), UINT8_C( 42), UINT8_C( 98), UINT8_C( 18), UINT8_C( 68), UINT8_C( 152), UINT8_C( 250) } },
{ { UINT16_C( 11068), UINT16_C( 33326), UINT16_C( 23470), UINT16_C( 17170), UINT16_C( 12419), UINT16_C( 39286), UINT16_C( 59545), UINT16_C( 8118) },
{ UINT8_C( 199), UINT8_C( 1), UINT8_C( 73), UINT8_C( 132), UINT8_C( 228), UINT8_C( 136), UINT8_C( 135), UINT8_C( 152) },
{ UINT8_C( 199), UINT8_C( 1), UINT8_C( 73), UINT8_C( 132), UINT8_C( 228), UINT8_C( 136), UINT8_C( 135), UINT8_C( 152), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 199), UINT8_C( 1), UINT8_C( 73), UINT8_C( 132), UINT8_C( 228), UINT8_C( 136), UINT8_C( 135), UINT8_C( 152), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX },
{ UINT8_C( 199), UINT8_C( 1), UINT8_C( 73), UINT8_C( 132), UINT8_C( 228), UINT8_C( 136), UINT8_C( 135), UINT8_C( 152), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 253) },
{ UINT8_C( 199), UINT8_C( 1), UINT8_C( 73), UINT8_C( 132), UINT8_C( 228), UINT8_C( 136), UINT8_C( 135), UINT8_C( 152), UINT8_C( 172), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 194), UINT8_MAX, UINT8_MAX, UINT8_C( 126) },
{ UINT8_C( 199), UINT8_C( 1), UINT8_C( 73), UINT8_C( 132), UINT8_C( 228), UINT8_C( 136), UINT8_C( 135), UINT8_C( 152), UINT8_C( 43), UINT8_C( 130), UINT8_C( 91), UINT8_C( 67), UINT8_C( 48), UINT8_C( 153), UINT8_C( 232), UINT8_C( 31) } },
};
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_uint8x8_t r = simde_vld1_u8(test_vec[i].r);
simde_uint8x16_t r1 = simde_vqshrn_high_n_u16(r, a, 1);
simde_uint8x16_t r3 = simde_vqshrn_high_n_u16(r, a, 3);
simde_uint8x16_t r5 = simde_vqshrn_high_n_u16(r, a, 5);
simde_uint8x16_t r6 = simde_vqshrn_high_n_u16(r, a, 6);
simde_uint8x16_t r8 = simde_vqshrn_high_n_u16(r, a, 8);
simde_test_arm_neon_assert_equal_u8x16(r1, simde_vld1q_u8(test_vec[i].r1));
simde_test_arm_neon_assert_equal_u8x16(r3, simde_vld1q_u8(test_vec[i].r3));
simde_test_arm_neon_assert_equal_u8x16(r5, simde_vld1q_u8(test_vec[i].r5));
simde_test_arm_neon_assert_equal_u8x16(r6, simde_vld1q_u8(test_vec[i].r6));
simde_test_arm_neon_assert_equal_u8x16(r8, simde_vld1q_u8(test_vec[i].r8));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint16x8_t a = simde_test_arm_neon_random_u16x8();
simde_uint8x8_t r = simde_test_arm_neon_random_u8x8();
simde_uint8x16_t r1 = simde_vqshrn_high_n_u16(r, a, 1);
simde_uint8x16_t r3 = simde_vqshrn_high_n_u16(r, a, 3);
simde_uint8x16_t r5 = simde_vqshrn_high_n_u16(r, a, 5);
simde_uint8x16_t r6 = simde_vqshrn_high_n_u16(r, a, 6);
simde_uint8x16_t r8 = simde_vqshrn_high_n_u16(r, a, 8);
simde_test_arm_neon_write_u16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_u8x8(2, r, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u8x16(2, r1, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u8x16(2, r3, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u8x16(2, r5, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u8x16(2, r6, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u8x16(2, r8, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqshrn_high_n_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
uint32_t a[4];
uint16_t r[4];
uint16_t r3[8];
uint16_t r6[8];
uint16_t r10[8];
uint16_t r13[8];
uint16_t r16[8];
} test_vec[] = {
{ { UINT32_C(2361451199), UINT32_C(3928353983), UINT32_C(2203416184), UINT32_C(2489499857) },
{ UINT16_C(26690), UINT16_C(31011), UINT16_C( 645), UINT16_C(43088) },
{ UINT16_C(26690), UINT16_C(31011), UINT16_C( 645), UINT16_C(43088), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(26690), UINT16_C(31011), UINT16_C( 645), UINT16_C(43088), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(26690), UINT16_C(31011), UINT16_C( 645), UINT16_C(43088), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(26690), UINT16_C(31011), UINT16_C( 645), UINT16_C(43088), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(26690), UINT16_C(31011), UINT16_C( 645), UINT16_C(43088), UINT16_C(36032), UINT16_C(59941), UINT16_C(33621), UINT16_C(37986) } },
{ { UINT32_C(306270981), UINT32_C(4245752686), UINT32_C(1259241961), UINT32_C(1394342818) },
{ UINT16_C(53839), UINT16_C(54788), UINT16_C(41601), UINT16_C(52605) },
{ UINT16_C(53839), UINT16_C(54788), UINT16_C(41601), UINT16_C(52605), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(53839), UINT16_C(54788), UINT16_C(41601), UINT16_C(52605), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(53839), UINT16_C(54788), UINT16_C(41601), UINT16_C(52605), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(53839), UINT16_C(54788), UINT16_C(41601), UINT16_C(52605), UINT16_C(37386), UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(53839), UINT16_C(54788), UINT16_C(41601), UINT16_C(52605), UINT16_C(4673), UINT16_C(64785), UINT16_C(19214), UINT16_C(21275) } },
{ { UINT32_C(1329624828), UINT32_C(2258156829), UINT32_C(2018646584), UINT32_C(3202299265) },
{ UINT16_C(53341), UINT16_C(23984), UINT16_C(34377), UINT16_C(1206) },
{ UINT16_C(53341), UINT16_C(23984), UINT16_C(34377), UINT16_C(1206), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(53341), UINT16_C(23984), UINT16_C(34377), UINT16_C(1206), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(53341), UINT16_C(23984), UINT16_C(34377), UINT16_C(1206), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(53341), UINT16_C(23984), UINT16_C(34377), UINT16_C(1206), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(53341), UINT16_C(23984), UINT16_C(34377), UINT16_C(1206), UINT16_C(20288), UINT16_C(34456), UINT16_C(30802), UINT16_C(48863) } },
{ { UINT32_C(56824135), UINT32_C(2334585118), UINT32_C(2534667093), UINT32_C(1779495218) },
{ UINT16_C(48657), UINT16_C(6925), UINT16_C(4288), UINT16_C(28798) },
{ UINT16_C(48657), UINT16_C(6925), UINT16_C(4288), UINT16_C(28798), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(48657), UINT16_C(6925), UINT16_C(4288), UINT16_C(28798), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(48657), UINT16_C(6925), UINT16_C(4288), UINT16_C(28798), UINT16_C(55492), UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(48657), UINT16_C(6925), UINT16_C(4288), UINT16_C(28798), UINT16_C(6936), UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(48657), UINT16_C(6925), UINT16_C(4288), UINT16_C(28798), UINT16_C( 867), UINT16_C(35622), UINT16_C(38675), UINT16_C(27152) } },
{ { UINT32_C(2307010385), UINT32_C(786094078), UINT32_C(4213990281), UINT32_C(514701508) },
{ UINT16_C(50041), UINT16_C(42001), UINT16_C(29125), UINT16_C(15908) },
{ UINT16_C(50041), UINT16_C(42001), UINT16_C(29125), UINT16_C(15908), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(50041), UINT16_C(42001), UINT16_C(29125), UINT16_C(15908), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(50041), UINT16_C(42001), UINT16_C(29125), UINT16_C(15908), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(50041), UINT16_C(42001), UINT16_C(29125), UINT16_C(15908), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_C(62829) },
{ UINT16_C(50041), UINT16_C(42001), UINT16_C(29125), UINT16_C(15908), UINT16_C(35202), UINT16_C(11994), UINT16_C(64300), UINT16_C(7853) } },
{ { UINT32_C(2928194567), UINT32_C(711630444), UINT32_C(1409143013), UINT32_C(91264893) },
{ UINT16_C(46467), UINT16_C(49351), UINT16_C(47593), UINT16_C(14136) },
{ UINT16_C(46467), UINT16_C(49351), UINT16_C(47593), UINT16_C(14136), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(46467), UINT16_C(49351), UINT16_C(47593), UINT16_C(14136), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(46467), UINT16_C(49351), UINT16_C(47593), UINT16_C(14136), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(46467), UINT16_C(49351), UINT16_C(47593), UINT16_C(14136), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_C(11140) },
{ UINT16_C(46467), UINT16_C(49351), UINT16_C(47593), UINT16_C(14136), UINT16_C(44680), UINT16_C(10858), UINT16_C(21501), UINT16_C(1392) } },
{ { UINT32_C(3282209478), UINT32_C(2025208263), UINT32_C(1022708302), UINT32_C(4060576734) },
{ UINT16_C(40872), UINT16_C(52756), UINT16_C(49418), UINT16_C( 549) },
{ UINT16_C(40872), UINT16_C(52756), UINT16_C(49418), UINT16_C( 549), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(40872), UINT16_C(52756), UINT16_C(49418), UINT16_C( 549), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(40872), UINT16_C(52756), UINT16_C(49418), UINT16_C( 549), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(40872), UINT16_C(52756), UINT16_C(49418), UINT16_C( 549), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(40872), UINT16_C(52756), UINT16_C(49418), UINT16_C( 549), UINT16_C(50082), UINT16_C(30902), UINT16_C(15605), UINT16_C(61959) } },
{ { UINT32_C(2112066869), UINT32_C(2506561151), UINT32_C(3159742828), UINT32_C(1886997040) },
{ UINT16_C(33103), UINT16_C(44697), UINT16_C(3298), UINT16_C(41095) },
{ UINT16_C(33103), UINT16_C(44697), UINT16_C(3298), UINT16_C(41095), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(33103), UINT16_C(44697), UINT16_C(3298), UINT16_C(41095), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(33103), UINT16_C(44697), UINT16_C(3298), UINT16_C(41095), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(33103), UINT16_C(44697), UINT16_C(3298), UINT16_C(41095), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX },
{ UINT16_C(33103), UINT16_C(44697), UINT16_C(3298), UINT16_C(41095), UINT16_C(32227), UINT16_C(38247), UINT16_C(48213), UINT16_C(28793) } },
};
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_uint16x4_t r = simde_vld1_u16(test_vec[i].r);
simde_uint16x8_t r3 = simde_vqshrn_high_n_u32(r, a, 3);
simde_uint16x8_t r6 = simde_vqshrn_high_n_u32(r, a, 6);
simde_uint16x8_t r10 = simde_vqshrn_high_n_u32(r, a, 10);
simde_uint16x8_t r13 = simde_vqshrn_high_n_u32(r, a, 13);
simde_uint16x8_t r16 = simde_vqshrn_high_n_u32(r, a, 16);
simde_test_arm_neon_assert_equal_u16x8(r3, simde_vld1q_u16(test_vec[i].r3));
simde_test_arm_neon_assert_equal_u16x8(r6, simde_vld1q_u16(test_vec[i].r6));
simde_test_arm_neon_assert_equal_u16x8(r10, simde_vld1q_u16(test_vec[i].r10));
simde_test_arm_neon_assert_equal_u16x8(r13, simde_vld1q_u16(test_vec[i].r13));
simde_test_arm_neon_assert_equal_u16x8(r16, simde_vld1q_u16(test_vec[i].r16));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint32x4_t a = simde_test_arm_neon_random_u32x4();
simde_uint16x4_t r = simde_test_arm_neon_random_u16x4();
simde_uint16x8_t r3 = simde_vqshrn_high_n_u32(r, a, 3);
simde_uint16x8_t r6 = simde_vqshrn_high_n_u32(r, a, 6);
simde_uint16x8_t r10 = simde_vqshrn_high_n_u32(r, a, 10);
simde_uint16x8_t r13 = simde_vqshrn_high_n_u32(r, a, 13);
simde_uint16x8_t r16 = simde_vqshrn_high_n_u32(r, a, 16);
simde_test_arm_neon_write_u32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_u16x4(2, r, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u16x8(2, r3, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u16x8(2, r6, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u16x8(2, r10, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u16x8(2, r13, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u16x8(2, r16, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vqshrn_high_n_u64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
uint64_t a[2];
uint32_t r[2];
uint32_t r6[4];
uint32_t r13[4];
uint32_t r19[4];
uint32_t r26[4];
uint32_t r32[4];
} test_vec[] = {
{ { UINT64_C(5153608494813095252), UINT64_C(15801484430927645942) },
{ UINT32_C(1149783980), UINT32_C(778382986) },
{ UINT32_C(1149783980), UINT32_C(778382986), UINT32_MAX, UINT32_MAX },
{ UINT32_C(1149783980), UINT32_C(778382986), UINT32_MAX, UINT32_MAX },
{ UINT32_C(1149783980), UINT32_C(778382986), UINT32_MAX, UINT32_MAX },
{ UINT32_C(1149783980), UINT32_C(778382986), UINT32_MAX, UINT32_MAX },
{ UINT32_C(1149783980), UINT32_C(778382986), UINT32_C(1199917982), UINT32_C(3679069790) } },
{ { UINT64_C(13858666046941017502), UINT64_C(17181432487780316057) },
{ UINT32_C(2555790628), UINT32_C(4208570593) },
{ UINT32_C(2555790628), UINT32_C(4208570593), UINT32_MAX, UINT32_MAX },
{ UINT32_C(2555790628), UINT32_C(4208570593), UINT32_MAX, UINT32_MAX },
{ UINT32_C(2555790628), UINT32_C(4208570593), UINT32_MAX, UINT32_MAX },
{ UINT32_C(2555790628), UINT32_C(4208570593), UINT32_MAX, UINT32_MAX },
{ UINT32_C(2555790628), UINT32_C(4208570593), UINT32_C(3226722135), UINT32_C(4000363985) } },
{ { UINT64_C(7611247938741977904), UINT64_C(16019258039644149976) },
{ UINT32_C(813398151), UINT32_C(3091258712) },
{ UINT32_C(813398151), UINT32_C(3091258712), UINT32_MAX, UINT32_MAX },
{ UINT32_C(813398151), UINT32_C(3091258712), UINT32_MAX, UINT32_MAX },
{ UINT32_C(813398151), UINT32_C(3091258712), UINT32_MAX, UINT32_MAX },
{ UINT32_C(813398151), UINT32_C(3091258712), UINT32_MAX, UINT32_MAX },
{ UINT32_C(813398151), UINT32_C(3091258712), UINT32_C(1772131756), UINT32_C(3729774160) } },
{ { UINT64_C(11739101929472879634), UINT64_C(15478438981995682412) },
{ UINT32_C(160744076), UINT32_C(3176789119) },
{ UINT32_C(160744076), UINT32_C(3176789119), UINT32_MAX, UINT32_MAX },
{ UINT32_C(160744076), UINT32_C(3176789119), UINT32_MAX, UINT32_MAX },
{ UINT32_C(160744076), UINT32_C(3176789119), UINT32_MAX, UINT32_MAX },
{ UINT32_C(160744076), UINT32_C(3176789119), UINT32_MAX, UINT32_MAX },
{ UINT32_C(160744076), UINT32_C(3176789119), UINT32_C(2733222658), UINT32_C(3603854910) } },
{ { UINT64_C(13918965383802178048), UINT64_C(988305148310810066) },
{ UINT32_C(1680278688), UINT32_C(551691632) },
{ UINT32_C(1680278688), UINT32_C(551691632), UINT32_MAX, UINT32_MAX },
{ UINT32_C(1680278688), UINT32_C(551691632), UINT32_MAX, UINT32_MAX },
{ UINT32_C(1680278688), UINT32_C(551691632), UINT32_MAX, UINT32_MAX },
{ UINT32_C(1680278688), UINT32_C(551691632), UINT32_MAX, UINT32_MAX },
{ UINT32_C(1680278688), UINT32_C(551691632), UINT32_C(3240761669), UINT32_C(230107723) } },
{ { UINT64_C(12655452248050541842), UINT64_C(9682272096452148561) },
{ UINT32_C(780484345), UINT32_C(2945636890) },
{ UINT32_C(780484345), UINT32_C(2945636890), UINT32_MAX, UINT32_MAX },
{ UINT32_C(780484345), UINT32_C(2945636890), UINT32_MAX, UINT32_MAX },
{ UINT32_C(780484345), UINT32_C(2945636890), UINT32_MAX, UINT32_MAX },
{ UINT32_C(780484345), UINT32_C(2945636890), UINT32_MAX, UINT32_MAX },
{ UINT32_C(780484345), UINT32_C(2945636890), UINT32_C(2946577092), UINT32_C(2254329644) } },
{ { UINT64_C(4711763874410978498), UINT64_C(9840987415755556929) },
{ UINT32_C(275444936), UINT32_C(1358980049) },
{ UINT32_C(275444936), UINT32_C(1358980049), UINT32_MAX, UINT32_MAX },
{ UINT32_C(275444936), UINT32_C(1358980049), UINT32_MAX, UINT32_MAX },
{ UINT32_C(275444936), UINT32_C(1358980049), UINT32_MAX, UINT32_MAX },
{ UINT32_C(275444936), UINT32_C(1358980049), UINT32_MAX, UINT32_MAX },
{ UINT32_C(275444936), UINT32_C(1358980049), UINT32_C(1097043015), UINT32_C(2291283434) } },
{ { UINT64_C(18279397249888037655), UINT64_C(4293313567125042273) },
{ UINT32_C(2733055859), UINT32_C(2742207168) },
{ UINT32_C(2733055859), UINT32_C(2742207168), UINT32_MAX, UINT32_MAX },
{ UINT32_C(2733055859), UINT32_C(2742207168), UINT32_MAX, UINT32_MAX },
{ UINT32_C(2733055859), UINT32_C(2742207168), UINT32_MAX, UINT32_MAX },
{ UINT32_C(2733055859), UINT32_C(2742207168), UINT32_MAX, UINT32_MAX },
{ UINT32_C(2733055859), UINT32_C(2742207168), UINT32_C(4256003827), UINT32_C(999614961) } },
};
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_uint32x2_t r = simde_vld1_u32(test_vec[i].r);
simde_uint32x4_t r6 = simde_vqshrn_high_n_u64(r, a, 6);
simde_uint32x4_t r13 = simde_vqshrn_high_n_u64(r, a, 13);
simde_uint32x4_t r19 = simde_vqshrn_high_n_u64(r, a, 19);
simde_uint32x4_t r26 = simde_vqshrn_high_n_u64(r, a, 26);
simde_uint32x4_t r32 = simde_vqshrn_high_n_u64(r, a, 32);
simde_test_arm_neon_assert_equal_u32x4(r6, simde_vld1q_u32(test_vec[i].r6));
simde_test_arm_neon_assert_equal_u32x4(r13, simde_vld1q_u32(test_vec[i].r13));
simde_test_arm_neon_assert_equal_u32x4(r19, simde_vld1q_u32(test_vec[i].r19));
simde_test_arm_neon_assert_equal_u32x4(r26, simde_vld1q_u32(test_vec[i].r26));
simde_test_arm_neon_assert_equal_u32x4(r32, simde_vld1q_u32(test_vec[i].r32));
}
return 0;
#else
fputc('\n', stdout);
for (int i = 0 ; i < 8 ; i++) {
simde_uint64x2_t a = simde_test_arm_neon_random_u64x2();
simde_uint32x2_t r = simde_test_arm_neon_random_u32x2();
simde_uint32x4_t r6 = simde_vqshrn_high_n_u64(r, a, 6);
simde_uint32x4_t r13 = simde_vqshrn_high_n_u64(r, a, 13);
simde_uint32x4_t r19 = simde_vqshrn_high_n_u64(r, a, 19);
simde_uint32x4_t r26 = simde_vqshrn_high_n_u64(r, a, 26);
simde_uint32x4_t r32 = simde_vqshrn_high_n_u64(r, a, 32);
simde_test_arm_neon_write_u64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_arm_neon_write_u32x2(2, r, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u32x4(2, r6, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u32x4(2, r13, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u32x4(2, r19, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u32x4(2, r26, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_u32x4(2, r32, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
SIMDE_TEST_FUNC_LIST_BEGIN
SIMDE_TEST_FUNC_LIST_ENTRY(vqshrn_high_n_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vqshrn_high_n_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vqshrn_high_n_s64)
SIMDE_TEST_FUNC_LIST_ENTRY(vqshrn_high_n_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vqshrn_high_n_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vqshrn_high_n_u64)
SIMDE_TEST_FUNC_LIST_END
#include "test-neon-footer.h"