155 lines
7.2 KiB
C
155 lines
7.2 KiB
C
|
|
#define SIMDE_TEST_ARM_NEON_INSN qmovun
|
||
|
|
|
||
|
|
#include "test-neon.h"
|
||
|
|
#include "../../../simde/arm/neon/qmovun.h"
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vqmovun_s16 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
int16_t a[8];
|
||
|
|
uint8_t r[8];
|
||
|
|
} test_vec[] = {
|
||
|
|
{ { -INT16_C( 18345), INT16_C( 7399), -INT16_C( 5353), -INT16_C( 25148), -INT16_C( 27188), INT16_C( 13769), INT16_C( 990), INT16_C( 9688) },
|
||
|
|
{ UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX } },
|
||
|
|
{ { INT16_C( 27133), INT16_C( 15294), -INT16_C( 22736), INT16_C( 17779), INT16_C( 32692), INT16_C( 10966), INT16_C( 17328), INT16_C( 1930) },
|
||
|
|
{ UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
|
||
|
|
{ { INT16_C( 29179), INT16_C( 4643), -INT16_C( 6308), INT16_C( 10671), INT16_C( 30844), INT16_C( 23134), INT16_C( 13948), INT16_C( 31103) },
|
||
|
|
{ UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX } },
|
||
|
|
{ { INT16_C( 16031), -INT16_C( 12364), INT16_C( 10213), -INT16_C( 26091), -INT16_C( 5210), INT16_C( 22468), INT16_C( 20014), INT16_C( 10590) },
|
||
|
|
{ UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX } },
|
||
|
|
{ { -INT16_C( 32064), INT16_C( 7227), -INT16_C( 5527), -INT16_C( 6587), -INT16_C( 23709), -INT16_C( 8384), -INT16_C( 16167), INT16_C( 30808) },
|
||
|
|
{ UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX } },
|
||
|
|
{ { INT16_C( 3326), -INT16_C( 7352), INT16_C( 23859), -INT16_C( 9859), INT16_C( 16712), INT16_C( 30256), -INT16_C( 28784), INT16_C( 20639) },
|
||
|
|
{ UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX } },
|
||
|
|
{ { -INT16_C( 9711), INT16_C( 31340), -INT16_C( 19772), INT16_C( 10080), -INT16_C( 24235), INT16_C( 12038), INT16_C( 24161), INT16_C( 24487) },
|
||
|
|
{ UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX } },
|
||
|
|
{ { -INT16_C( 4246), -INT16_C( 25278), -INT16_C( 16308), -INT16_C( 27529), -INT16_C( 22783), -INT16_C( 28406), -INT16_C( 22218), INT16_C( 18401) },
|
||
|
|
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX } },
|
||
|
|
|
||
|
|
};
|
||
|
|
|
||
|
|
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_uint8x8_t r = simde_vqmovun_s16(a);
|
||
|
|
|
||
|
|
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_int16x8_t a = simde_test_arm_neon_random_i16x8();
|
||
|
|
simde_uint8x8_t r = simde_vqmovun_s16(a);
|
||
|
|
|
||
|
|
simde_test_arm_neon_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
simde_test_arm_neon_write_u8x8(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vqmovun_s32 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
int32_t a[4];
|
||
|
|
uint16_t r[4];
|
||
|
|
} test_vec[] = {
|
||
|
|
{ { INT32_C( 1811669884), -INT32_C( 1616095694), INT32_C( 1505503431), INT32_C( 410694829) },
|
||
|
|
{ UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_MAX } },
|
||
|
|
{ { -INT32_C( 428853893), INT32_C( 1008142342), INT32_C( 497592662), INT32_C( 932503994) },
|
||
|
|
{ UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_MAX } },
|
||
|
|
{ { -INT32_C( 140341307), -INT32_C( 1399435547), INT32_C( 604394358), -INT32_C( 2109964281) },
|
||
|
|
{ UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_C( 0) } },
|
||
|
|
{ { -INT32_C( 1133990474), INT32_C( 200835253), -INT32_C( 483876823), INT32_C( 1176157313) },
|
||
|
|
{ UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_MAX } },
|
||
|
|
{ { INT32_C( 826195275), -INT32_C( 2099391477), INT32_C( 782689063), INT32_C( 447799908) },
|
||
|
|
{ UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_MAX } },
|
||
|
|
{ { INT32_C( 1171659151), -INT32_C( 1034891623), -INT32_C( 274368146), -INT32_C( 2127118283) },
|
||
|
|
{ UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
|
||
|
|
{ { -INT32_C( 2001570691), INT32_C( 1879740232), -INT32_C( 677465997), INT32_C( 586239891) },
|
||
|
|
{ UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_MAX } },
|
||
|
|
{ { INT32_C( 23578472), INT32_C( 63158421), INT32_C( 1727162417), -INT32_C( 1511577560) },
|
||
|
|
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_C( 0) } },
|
||
|
|
|
||
|
|
};
|
||
|
|
|
||
|
|
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_uint16x4_t r = simde_vqmovun_s32(a);
|
||
|
|
|
||
|
|
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_int32x4_t a = simde_test_arm_neon_random_i32x4();
|
||
|
|
simde_uint16x4_t r = simde_vqmovun_s32(a);
|
||
|
|
|
||
|
|
simde_test_arm_neon_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
simde_test_arm_neon_write_u16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vqmovun_s64 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
#if 1
|
||
|
|
static const struct {
|
||
|
|
int64_t a[2];
|
||
|
|
uint32_t r[2];
|
||
|
|
} test_vec[] = {
|
||
|
|
{ { -INT64_C( 5425750683829434048), -INT64_C( 7162323672895373370) },
|
||
|
|
{ UINT32_C( 0), UINT32_C( 0) } },
|
||
|
|
{ { -INT64_C( 5585277752272748202), INT64_C( 1967427466993443775) },
|
||
|
|
{ UINT32_C( 0), UINT32_MAX } },
|
||
|
|
{ { INT64_C( 8318933209745641790), -INT64_C( 3732010236125240056) },
|
||
|
|
{ UINT32_MAX, UINT32_C( 0) } },
|
||
|
|
{ { -INT64_C( 907126553308030658), -INT64_C( 2749521670418995231) },
|
||
|
|
{ UINT32_C( 0), UINT32_C( 0) } },
|
||
|
|
{ { -INT64_C( 4634756288245928563), -INT64_C( 3859146670975987666) },
|
||
|
|
{ UINT32_C( 0), UINT32_C( 0) } },
|
||
|
|
{ { INT64_C( 5751074110553797031), -INT64_C( 8626675892199145774) },
|
||
|
|
{ UINT32_MAX, UINT32_C( 0) } },
|
||
|
|
{ { INT64_C( 1533037962395377360), -INT64_C( 3163731268945142079) },
|
||
|
|
{ UINT32_MAX, UINT32_C( 0) } },
|
||
|
|
{ { INT64_C( 6204411644969261404), -INT64_C( 2791938161888713282) },
|
||
|
|
{ UINT32_MAX, UINT32_C( 0) } },
|
||
|
|
|
||
|
|
};
|
||
|
|
|
||
|
|
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_uint32x2_t r = simde_vqmovun_s64(a);
|
||
|
|
|
||
|
|
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_int64x2_t a = simde_test_arm_neon_random_i64x2();
|
||
|
|
simde_uint32x2_t r = simde_vqmovun_s64(a);
|
||
|
|
|
||
|
|
simde_test_arm_neon_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
|
||
|
|
simde_test_arm_neon_write_u32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
SIMDE_TEST_FUNC_LIST_BEGIN
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vqmovun_s16)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vqmovun_s32)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vqmovun_s64)
|
||
|
|
SIMDE_TEST_FUNC_LIST_END
|
||
|
|
|
||
|
|
#include "test-neon-footer.h"
|