580 lines
28 KiB
C
580 lines
28 KiB
C
#define SIMDE_TEST_ARM_NEON_INSN cltz
|
|
|
|
#include "test-neon.h"
|
|
#include "../../../simde/arm/neon/cltz.h"
|
|
#include "../../../simde/arm/neon/reinterpret.h"
|
|
|
|
static int
|
|
test_simde_vcltz_f32 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
simde_float32 a[2];
|
|
uint32_t r[2];
|
|
} test_vec[] = {
|
|
{ { SIMDE_FLOAT32_C( -600.28), SIMDE_FLOAT32_C( -155.01) },
|
|
{ UINT32_MAX, UINT32_MAX } },
|
|
{ { SIMDE_FLOAT32_C( 941.01), SIMDE_FLOAT32_C( 717.45) },
|
|
{ UINT32_C( 0), UINT32_C( 0) } },
|
|
{ { SIMDE_FLOAT32_C( 22.41), SIMDE_FLOAT32_C( -542.54) },
|
|
{ UINT32_C( 0), UINT32_MAX } },
|
|
{ { SIMDE_FLOAT32_C( -400.37), SIMDE_FLOAT32_C( -711.08) },
|
|
{ UINT32_MAX, UINT32_MAX } },
|
|
{ { SIMDE_FLOAT32_C( 591.87), SIMDE_FLOAT32_C( -579.22) },
|
|
{ UINT32_C( 0), UINT32_MAX } },
|
|
{ { SIMDE_FLOAT32_C( -322.37), SIMDE_FLOAT32_C( 93.44) },
|
|
{ UINT32_MAX, UINT32_C( 0) } },
|
|
{ { SIMDE_FLOAT32_C( -455.16), SIMDE_FLOAT32_C( 540.07) },
|
|
{ UINT32_MAX, UINT32_C( 0) } },
|
|
{ { SIMDE_FLOAT32_C( 983.37), SIMDE_FLOAT32_C( 113.16) },
|
|
{ UINT32_C( 0), UINT32_C( 0) } }
|
|
};
|
|
|
|
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_uint32x2_t r = simde_vcltz_f32(a);
|
|
|
|
simde_test_arm_neon_assert_equal_u32x2(r, simde_vld1_u32(test_vec[i].r));
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
test_simde_vcltz_f64 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
simde_float64 a[1];
|
|
uint64_t r[1];
|
|
} test_vec[] = {
|
|
{ { SIMDE_FLOAT64_C( -383.68) },
|
|
{ UINT64_MAX } },
|
|
{ { SIMDE_FLOAT64_C( -437.89) },
|
|
{ UINT64_MAX } },
|
|
{ { SIMDE_FLOAT64_C( 762.24) },
|
|
{ UINT64_C( 0) } },
|
|
{ { SIMDE_FLOAT64_C( -529.26) },
|
|
{ UINT64_MAX } },
|
|
{ { SIMDE_FLOAT64_C( 863.53) },
|
|
{ UINT64_C( 0) } },
|
|
{ { SIMDE_FLOAT64_C( -770.66) },
|
|
{ UINT64_MAX } },
|
|
{ { SIMDE_FLOAT64_C( -387.78) },
|
|
{ UINT64_MAX } },
|
|
{ { SIMDE_FLOAT64_C( 354.63) },
|
|
{ UINT64_C( 0) } }
|
|
};
|
|
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
|
simde_float64x1_t a = simde_vld1_f64(test_vec[i].a);
|
|
simde_uint64x1_t r = simde_vcltz_f64(a);
|
|
|
|
simde_test_arm_neon_assert_equal_u64x1(r, simde_vld1_u64(test_vec[i].r));
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
test_simde_vcltz_s8 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
int8_t a[8];
|
|
uint8_t r[8];
|
|
} test_vec[] = {
|
|
{ { INT8_C( 123), INT8_C( 25), INT8_C( 43), -INT8_C( 6), INT8_C( 91), INT8_C( 15), -INT8_C( 4), -INT8_C( 78) },
|
|
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX } },
|
|
{ { INT8_C( 9), -INT8_C( 67), INT8_C( 14), INT8_C( 50), INT8_MAX, -INT8_C( 98), INT8_C( 122), INT8_C( 87) },
|
|
{ UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0) } },
|
|
{ { -INT8_C( 59), -INT8_C( 40), INT8_C( 23), -INT8_C( 123), INT8_C( 0), INT8_C( 81), -INT8_C( 111), -INT8_C( 11) },
|
|
{ UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX } },
|
|
{ { INT8_C( 78), -INT8_C( 120), -INT8_C( 45), INT8_C( 104), INT8_C( 116), -INT8_C( 31), -INT8_C( 94), -INT8_C( 17) },
|
|
{ UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX } },
|
|
{ { -INT8_C( 6), -INT8_C( 51), -INT8_C( 23), INT8_C( 86), -INT8_C( 36), -INT8_C( 27), INT8_C( 8), -INT8_C( 27) },
|
|
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX } },
|
|
{ { -INT8_C( 94), INT8_C( 22), INT8_C( 24), INT8_C( 33), -INT8_C( 76), -INT8_C( 110), INT8_C( 120), INT8_C( 121) },
|
|
{ UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0) } },
|
|
{ { INT8_C( 106), -INT8_C( 113), -INT8_C( 2), INT8_C( 106), -INT8_C( 32), -INT8_C( 112), INT8_C( 95), INT8_C( 47) },
|
|
{ UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0) } },
|
|
{ { INT8_C( 24), INT8_C( 51), -INT8_C( 105), -INT8_C( 116), INT8_C( 20), INT8_C( 57), INT8_C( 123), INT8_C( 14) },
|
|
{ UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } }
|
|
};
|
|
|
|
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_uint8x8_t r = simde_vcltz_s8(a);
|
|
|
|
simde_test_arm_neon_assert_equal_u8x8(r, simde_vld1_u8(test_vec[i].r));
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
test_simde_vcltz_s16 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
int16_t a[4];
|
|
uint16_t r[4];
|
|
} test_vec[] = {
|
|
{ { -INT16_C( 3899), -INT16_C( 2710), -INT16_C( 12036), INT16_C( 14864) },
|
|
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_C( 0) } },
|
|
{ { INT16_C( 15179), -INT16_C( 3300), -INT16_C( 24965), -INT16_C( 23761) },
|
|
{ UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_MAX } },
|
|
{ { INT16_C( 27808), -INT16_C( 10552), -INT16_C( 3829), -INT16_C( 15215) },
|
|
{ UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_MAX } },
|
|
{ { -INT16_C( 18422), -INT16_C( 27002), INT16_C( 16021), INT16_C( 23504) },
|
|
{ UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_C( 0) } },
|
|
{ { INT16_C( 14894), INT16_C( 10832), INT16_C( 24586), INT16_C( 21860) },
|
|
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
|
|
{ { -INT16_C( 32613), INT16_C( 5704), INT16_C( 30494), -INT16_C( 16455) },
|
|
{ UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_MAX } },
|
|
{ { -INT16_C( 32285), -INT16_C( 4203), INT16_C( 9843), INT16_C( 32179) },
|
|
{ UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_C( 0) } },
|
|
{ { INT16_C( 14814), INT16_C( 29715), -INT16_C( 7305), -INT16_C( 23089) },
|
|
{ UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_MAX } }
|
|
};
|
|
|
|
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_uint16x4_t r = simde_vcltz_s16(a);
|
|
|
|
simde_test_arm_neon_assert_equal_u16x4(r, simde_vld1_u16(test_vec[i].r));
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
test_simde_vcltz_s32 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
int32_t a[2];
|
|
uint32_t r[2];
|
|
} test_vec[] = {
|
|
{ { INT32_C( 887751135), -INT32_C( 1880768565) },
|
|
{ UINT32_C( 0), UINT32_MAX } },
|
|
{ { INT32_C( 1143275059), -INT32_C( 106841879) },
|
|
{ UINT32_C( 0), UINT32_MAX } },
|
|
{ { -INT32_C( 1429312649), INT32_C( 192520880) },
|
|
{ UINT32_MAX, UINT32_C( 0) } },
|
|
{ { -INT32_C( 1228640489), -INT32_C( 1630219841) },
|
|
{ UINT32_MAX, UINT32_MAX } },
|
|
{ { -INT32_C( 1630290221), -INT32_C( 1322403714) },
|
|
{ UINT32_MAX, UINT32_MAX } },
|
|
{ { -INT32_C( 1594535498), -INT32_C( 2120641014) },
|
|
{ UINT32_MAX, UINT32_MAX } },
|
|
{ { -INT32_C( 1322555391), INT32_C( 566076426) },
|
|
{ UINT32_MAX, UINT32_C( 0) } },
|
|
{ { -INT32_C( 757628653), INT32_C( 628206418) },
|
|
{ UINT32_MAX, UINT32_C( 0) } }
|
|
};
|
|
|
|
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_uint32x2_t r = simde_vcltz_s32(a);
|
|
|
|
simde_test_arm_neon_assert_equal_u32x2(r, simde_vld1_u32(test_vec[i].r));
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
test_simde_vcltz_s64 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
int64_t a[1];
|
|
uint64_t r[1];
|
|
} test_vec[] = {
|
|
{ { -INT64_C( 8326563804285590750) },
|
|
{ UINT64_MAX } },
|
|
{ { -INT64_C( 3208424567556038596) },
|
|
{ UINT64_MAX } },
|
|
{ { INT64_C( 2329024188526806682) },
|
|
{ UINT64_C( 0) } },
|
|
{ { -INT64_C( 8809616594128501407) },
|
|
{ UINT64_MAX } },
|
|
{ { INT64_C( 106393993243962263) },
|
|
{ UINT64_C( 0) } },
|
|
{ { -INT64_C( 6536608672518002276) },
|
|
{ UINT64_MAX } },
|
|
{ { INT64_C( 8384819676651960083) },
|
|
{ UINT64_C( 0) } },
|
|
{ { INT64_C( 9028095364871221859) },
|
|
{ UINT64_C( 0) } }
|
|
};
|
|
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
|
simde_int64x1_t a = simde_vld1_s64(test_vec[i].a);
|
|
simde_uint64x1_t r = simde_vcltz_s64(a);
|
|
|
|
simde_test_arm_neon_assert_equal_u64x1(r, simde_vld1_u64(test_vec[i].r));
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
test_simde_vcltzq_f32 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
simde_float32 a[4];
|
|
uint32_t r[4];
|
|
} test_vec[] = {
|
|
{ { SIMDE_FLOAT32_C( -442.45), SIMDE_FLOAT32_C( 552.37), SIMDE_FLOAT32_C( -139.46), SIMDE_FLOAT32_C( 880.73) },
|
|
{ UINT32_MAX, UINT32_C( 0), UINT32_MAX, UINT32_C( 0) } },
|
|
{ { SIMDE_FLOAT32_C( -535.61), SIMDE_FLOAT32_C( -314.97), SIMDE_FLOAT32_C( -324.37), SIMDE_FLOAT32_C( -863.63) },
|
|
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } },
|
|
{ { SIMDE_FLOAT32_C( -142.67), SIMDE_FLOAT32_C( -456.23), SIMDE_FLOAT32_C( 330.18), SIMDE_FLOAT32_C( -127.74) },
|
|
{ UINT32_MAX, UINT32_MAX, UINT32_C( 0), UINT32_MAX } },
|
|
{ { SIMDE_FLOAT32_C( 725.38), SIMDE_FLOAT32_C( -382.66), SIMDE_FLOAT32_C( 959.27), SIMDE_FLOAT32_C( -336.93) },
|
|
{ UINT32_C( 0), UINT32_MAX, UINT32_C( 0), UINT32_MAX } },
|
|
{ { SIMDE_FLOAT32_C( 249.07), SIMDE_FLOAT32_C( 860.93), SIMDE_FLOAT32_C( 46.17), SIMDE_FLOAT32_C( 812.32) },
|
|
{ UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
|
|
{ { SIMDE_FLOAT32_C( -849.19), SIMDE_FLOAT32_C( -336.50), SIMDE_FLOAT32_C( 322.45), SIMDE_FLOAT32_C( -511.47) },
|
|
{ UINT32_MAX, UINT32_MAX, UINT32_C( 0), UINT32_MAX } },
|
|
{ { SIMDE_FLOAT32_C( -105.46), SIMDE_FLOAT32_C( 857.83), SIMDE_FLOAT32_C( 267.60), SIMDE_FLOAT32_C( -602.28) },
|
|
{ UINT32_MAX, UINT32_C( 0), UINT32_C( 0), UINT32_MAX } },
|
|
{ { SIMDE_FLOAT32_C( 768.23), SIMDE_FLOAT32_C( -752.53), SIMDE_FLOAT32_C( -518.24), SIMDE_FLOAT32_C( -674.22) },
|
|
{ UINT32_C( 0), UINT32_MAX, UINT32_MAX, UINT32_MAX } }
|
|
};
|
|
|
|
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_uint32x4_t r = simde_vcltzq_f32(a);
|
|
simde_test_arm_neon_assert_equal_u32x4(r, simde_vld1q_u32(test_vec[i].r));
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
test_simde_vcltzq_f64 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
simde_float64 a[2];
|
|
uint64_t r[2];
|
|
} test_vec[] = {
|
|
{ { SIMDE_FLOAT64_C( -80.27), SIMDE_FLOAT64_C( 326.82) },
|
|
{ UINT64_MAX, UINT64_C( 0) } },
|
|
{ { SIMDE_FLOAT64_C( -489.46), SIMDE_FLOAT64_C( -457.68) },
|
|
{ UINT64_MAX, UINT64_MAX } },
|
|
{ { SIMDE_FLOAT64_C( -441.47), SIMDE_FLOAT64_C( 2.14) },
|
|
{ UINT64_MAX, UINT64_C( 0) } },
|
|
{ { SIMDE_FLOAT64_C( -692.88), SIMDE_FLOAT64_C( 270.65) },
|
|
{ UINT64_MAX, UINT64_C( 0) } },
|
|
{ { SIMDE_FLOAT64_C( 806.25), SIMDE_FLOAT64_C( 705.39) },
|
|
{ UINT64_C( 0), UINT64_C( 0) } },
|
|
{ { SIMDE_FLOAT64_C( -398.22), SIMDE_FLOAT64_C( -504.15) },
|
|
{ UINT64_MAX, UINT64_MAX } },
|
|
{ { SIMDE_FLOAT64_C( 952.43), SIMDE_FLOAT64_C( -573.18) },
|
|
{ UINT64_C( 0), UINT64_MAX } },
|
|
{ { SIMDE_FLOAT64_C( -443.24), SIMDE_FLOAT64_C( 861.65) },
|
|
{ UINT64_MAX, UINT64_C( 0) } }
|
|
};
|
|
|
|
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_uint64x2_t r = simde_vcltzq_f64(a);
|
|
|
|
simde_test_arm_neon_assert_equal_u64x2(r, simde_vld1q_u64(test_vec[i].r));
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
test_simde_vcltzq_s8 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
int8_t a[16];
|
|
uint8_t r[16];
|
|
} test_vec[] = {
|
|
{ { INT8_C( 120), INT8_C( 63), INT8_C( 43), -INT8_C( 2), -INT8_C( 79), INT8_C( 47), INT8_C( 121), INT8_C( 7),
|
|
INT8_C( 59), INT8_MAX, -INT8_C( 81), -INT8_C( 20), -INT8_C( 61), -INT8_C( 30), INT8_C( 90), INT8_C( 60) },
|
|
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
|
|
UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0) } },
|
|
{ { -INT8_C( 87), INT8_C( 32), INT8_C( 104), -INT8_C( 78), INT8_C( 22), INT8_C( 85), -INT8_C( 93), -INT8_C( 97),
|
|
INT8_C( 26), -INT8_C( 7), -INT8_C( 98), INT8_C( 56), -INT8_C( 40), INT8_C( 11), INT8_C( 103), INT8_C( 81) },
|
|
{ UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX,
|
|
UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
|
|
{ { INT8_C( 74), -INT8_C( 110), INT8_C( 79), -INT8_C( 5), -INT8_C( 63), -INT8_C( 55), INT8_C( 2), -INT8_C( 4),
|
|
INT8_C( 72), -INT8_C( 79), -INT8_C( 23), INT8_C( 11), -INT8_C( 109), INT8_C( 67), INT8_C( 72), INT8_C( 60) },
|
|
{ UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX,
|
|
UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0) } },
|
|
{ { INT8_C( 99), -INT8_C( 80), -INT8_C( 18), INT8_C( 121), INT8_C( 5), -INT8_C( 111), INT8_C( 25), INT8_C( 31),
|
|
-INT8_C( 118), -INT8_C( 73), INT8_C( 87), INT8_C( 99), -INT8_C( 61), -INT8_C( 65), -INT8_C( 76), INT8_C( 13) },
|
|
{ UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0),
|
|
UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0) } },
|
|
{ { INT8_C( 81), INT8_C( 3), INT8_C( 9), INT8_C( 19), -INT8_C( 52), INT8_C( 11), INT8_C( 15), INT8_C( 21),
|
|
-INT8_C( 67), -INT8_C( 8), INT8_C( 32), INT8_C( 80), INT8_C( 60), INT8_C( 104), -INT8_C( 115), -INT8_C( 97) },
|
|
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0),
|
|
UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_MAX } },
|
|
{ { INT8_C( 24), INT8_C( 123), INT8_C( 25), INT8_C( 29), INT8_C( 13), INT8_C( 50), INT8_C( 61), -INT8_C( 105),
|
|
-INT8_C( 23), -INT8_C( 108), -INT8_C( 6), -INT8_C( 84), INT8_C( 83), -INT8_C( 82), -INT8_C( 70), -INT8_C( 91) },
|
|
{ UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_C( 0), UINT8_MAX,
|
|
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX } },
|
|
{ { -INT8_C( 78), -INT8_C( 61), -INT8_C( 72), INT8_C( 126), -INT8_C( 50), -INT8_C( 57), -INT8_C( 109), -INT8_C( 117),
|
|
-INT8_C( 64), -INT8_C( 76), -INT8_C( 36), -INT8_C( 4), INT8_C( 28), INT8_C( 105), -INT8_C( 101), INT8_C( 53) },
|
|
{ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
|
|
UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_C( 0), UINT8_MAX, UINT8_C( 0) } },
|
|
{ { -INT8_C( 28), -INT8_C( 76), INT8_C( 82), -INT8_C( 15), -INT8_C( 26), -INT8_C( 113), -INT8_C( 119), -INT8_C( 48),
|
|
INT8_C( 36), -INT8_C( 125), INT8_C( 124), INT8_C( 119), INT8_C( 50), INT8_C( 54), INT8_C( 28), -INT8_C( 28) },
|
|
{ UINT8_MAX, UINT8_MAX, UINT8_C( 0), UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
|
|
UINT8_C( 0), UINT8_MAX, 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_int8x16_t a = simde_vld1q_s8(test_vec[i].a);
|
|
simde_uint8x16_t r = simde_vcltzq_s8(a);
|
|
|
|
simde_test_arm_neon_assert_equal_u8x16(r, simde_vld1q_u8(test_vec[i].r));
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
test_simde_vcltzq_s16 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
int16_t a[8];
|
|
uint16_t r[8];
|
|
} test_vec[] = {
|
|
{ { -INT16_C( 30173), INT16_C( 19444), -INT16_C( 28978), -INT16_C( 15017), INT16_C( 17496), INT16_C( 7636), -INT16_C( 12918), INT16_C( 3110) },
|
|
{ UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_C( 0) } },
|
|
{ { -INT16_C( 17031), INT16_C( 23923), -INT16_C( 15294), INT16_C( 828), INT16_C( 7152), -INT16_C( 19786), INT16_C( 22798), INT16_C( 12797) },
|
|
{ UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_C( 0) } },
|
|
{ { -INT16_C( 3613), -INT16_C( 20099), -INT16_C( 11137), -INT16_C( 10378), INT16_C( 19224), -INT16_C( 23820), INT16_C( 6936), -INT16_C( 27986) },
|
|
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_MAX } },
|
|
{ { INT16_C( 8920), INT16_C( 6895), INT16_C( 11238), -INT16_C( 10723), -INT16_C( 11450), INT16_C( 21896), -INT16_C( 31188), INT16_C( 3974) },
|
|
{ UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_C( 0) } },
|
|
{ { INT16_C( 887), -INT16_C( 2111), INT16_C( 14295), -INT16_C( 4146), -INT16_C( 15486), -INT16_C( 25711), INT16_C( 16606), -INT16_C( 18899) },
|
|
{ UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_MAX } },
|
|
{ { INT16_C( 7266), INT16_C( 18640), -INT16_C( 4792), -INT16_C( 29153), -INT16_C( 22591), -INT16_C( 4637), INT16_C( 27181), -INT16_C( 23043) },
|
|
{ UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_MAX } },
|
|
{ { -INT16_C( 16787), INT16_C( 17820), INT16_C( 27381), INT16_C( 30772), -INT16_C( 14803), INT16_C( 2835), INT16_C( 16390), INT16_C( 26817) },
|
|
{ UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_C( 0) } },
|
|
{ { -INT16_C( 28324), -INT16_C( 23376), -INT16_C( 12417), INT16_C( 16435), INT16_C( 5751), -INT16_C( 23507), INT16_C( 10880), -INT16_C( 4535) },
|
|
{ UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_C( 0), UINT16_C( 0), UINT16_MAX, UINT16_C( 0), UINT16_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_uint16x8_t r = simde_vcltzq_s16(a);
|
|
|
|
simde_test_arm_neon_assert_equal_u16x8(r, simde_vld1q_u16(test_vec[i].r));
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
test_simde_vcltzq_s32 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
int32_t a[4];
|
|
uint32_t r[4];
|
|
} test_vec[] = {
|
|
{ { INT32_C( 104066264), INT32_C( 1548859983), -INT32_C( 983940808), INT32_C( 1490571068) },
|
|
{ UINT32_C( 0), UINT32_C( 0), UINT32_MAX, UINT32_C( 0) } },
|
|
{ { -INT32_C( 222302292), -INT32_C( 1438018326), INT32_C( 756148753), -INT32_C( 1515649587) },
|
|
{ UINT32_MAX, UINT32_MAX, UINT32_C( 0), UINT32_MAX } },
|
|
{ { INT32_C( 1085070577), -INT32_C( 811729513), INT32_C( 2073425726), -INT32_C( 221024954) },
|
|
{ UINT32_C( 0), UINT32_MAX, UINT32_C( 0), UINT32_MAX } },
|
|
{ { INT32_C( 1189450332), INT32_C( 955264550), -INT32_C( 446365160), -INT32_C( 108392953) },
|
|
{ UINT32_C( 0), UINT32_C( 0), UINT32_MAX, UINT32_MAX } },
|
|
{ { -INT32_C( 2126956822), INT32_C( 1917965875), INT32_C( 351135437), -INT32_C( 1358512045) },
|
|
{ UINT32_MAX, UINT32_C( 0), UINT32_C( 0), UINT32_MAX } },
|
|
{ { INT32_C( 2046159698), INT32_C( 833742105), -INT32_C( 283765017), INT32_C( 250126628) },
|
|
{ UINT32_C( 0), UINT32_C( 0), UINT32_MAX, UINT32_C( 0) } },
|
|
{ { INT32_C( 193995223), -INT32_C( 981605896), INT32_C( 450456263), INT32_C( 2093604906) },
|
|
{ UINT32_C( 0), UINT32_MAX, UINT32_C( 0), UINT32_C( 0) } },
|
|
{ { -INT32_C( 436879669), -INT32_C( 1961449821), -INT32_C( 528863812), -INT32_C( 1511038258) },
|
|
{ UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX } }
|
|
};
|
|
|
|
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_uint32x4_t r = simde_vcltzq_s32(a);
|
|
simde_test_arm_neon_assert_equal_u32x4(r, simde_vld1q_u32(test_vec[i].r));
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
test_simde_vcltzq_s64 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
int64_t a[2];
|
|
uint64_t r[2];
|
|
} test_vec[] = {
|
|
{ { -INT64_C( 4367700174058313457), -INT64_C( 7730538683494878666) },
|
|
{ UINT64_MAX, UINT64_MAX } },
|
|
{ { -INT64_C( 4741576537993497024), -INT64_C( 8245872675751211559) },
|
|
{ UINT64_MAX, UINT64_MAX } },
|
|
{ { INT64_C( 7856281297696352367), -INT64_C( 4329458411663726768) },
|
|
{ UINT64_C( 0), UINT64_MAX } },
|
|
{ { -INT64_C( 2313814442133127710), -INT64_C( 2844345970244083077) },
|
|
{ UINT64_MAX, UINT64_MAX } },
|
|
{ { -INT64_C( 5627489208313822654), INT64_C( 7589113511113448203) },
|
|
{ UINT64_MAX, UINT64_C( 0) } },
|
|
{ { -INT64_C( 552410599904063889), -INT64_C( 4948198726902374637) },
|
|
{ UINT64_MAX, UINT64_MAX } },
|
|
{ { -INT64_C( 6932135403521281863), INT64_C( 3956552763142165751) },
|
|
{ UINT64_MAX, UINT64_C( 0) } },
|
|
{ { -INT64_C( 378018798689814963), -INT64_C( 2029775254167571808) },
|
|
{ UINT64_MAX, UINT64_MAX } }
|
|
};
|
|
|
|
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_uint64x2_t r = simde_vcltzq_s64(a);
|
|
simde_test_arm_neon_assert_equal_u64x2(r, simde_vld1q_u64(test_vec[i].r));
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
test_simde_vcltzd_s64 (SIMDE_MUNIT_TEST_ARGS) {
|
|
#if 1
|
|
static const struct {
|
|
int64_t a;
|
|
uint64_t r;
|
|
} test_vec[] = {
|
|
{ INT64_C( 4895556179217159423),
|
|
UINT64_C( 0) },
|
|
{ -INT64_C( 5958045163452274988),
|
|
UINT64_MAX },
|
|
{ -INT64_C( 7404907283308324771),
|
|
UINT64_MAX },
|
|
{ -INT64_C( 5357149720396651297),
|
|
UINT64_MAX },
|
|
{ INT64_C( 3626495416649243816),
|
|
UINT64_C( 0) },
|
|
{ INT64_C( 2771735539879904332),
|
|
UINT64_C( 0) },
|
|
{ -INT64_C( 8777399505245099129),
|
|
UINT64_MAX },
|
|
{ -INT64_C( 7459753252293551091),
|
|
UINT64_MAX }
|
|
};
|
|
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
|
uint64_t r = simde_vcltzd_s64(test_vec[i].a);
|
|
simde_assert_equal_u64(r, test_vec[i].r);
|
|
}
|
|
|
|
return 0;
|
|
#else
|
|
fputc('\n', stdout);
|
|
for (int i = 0 ; i < 8 ; i++) {
|
|
int64_t a = simde_test_codegen_random_i64();
|
|
uint64_t r = simde_vcltzd_s64(a);
|
|
|
|
simde_test_codegen_write_i64(2, a, SIMDE_TEST_VEC_POS_FIRST);
|
|
simde_test_codegen_write_u64(2, r, SIMDE_TEST_VEC_POS_LAST);
|
|
}
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
static int
|
|
test_simde_vcltzd_f64 (SIMDE_MUNIT_TEST_ARGS) {
|
|
#if 1
|
|
static const struct {
|
|
simde_float64_t a;
|
|
uint64_t r;
|
|
} test_vec[] = {
|
|
{ SIMDE_FLOAT64_C( 918.77),
|
|
UINT64_C( 0) },
|
|
{ SIMDE_FLOAT64_C( -706.44),
|
|
UINT64_MAX },
|
|
{ SIMDE_FLOAT64_C( -108.73),
|
|
UINT64_MAX },
|
|
{ SIMDE_FLOAT64_C( -943.89),
|
|
UINT64_MAX },
|
|
{ SIMDE_FLOAT64_C( 654.01),
|
|
UINT64_C( 0) },
|
|
{ SIMDE_FLOAT64_C( 689.80),
|
|
UINT64_C( 0) },
|
|
{ SIMDE_FLOAT64_C( 101.37),
|
|
UINT64_C( 0) },
|
|
{ SIMDE_FLOAT64_C( 763.46),
|
|
UINT64_C( 0) }
|
|
};
|
|
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
|
uint64_t r = simde_vcltzd_f64(test_vec[i].a);
|
|
simde_assert_equal_u64(r, test_vec[i].r);
|
|
}
|
|
|
|
return 0;
|
|
#else
|
|
fputc('\n', stdout);
|
|
for (int i = 0 ; i < 8 ; i++) {
|
|
simde_float64_t a = simde_test_codegen_random_f64(-1000, 1000);
|
|
uint64_t r = simde_vcltzd_f64(a);
|
|
|
|
simde_test_codegen_write_f64(2, a, SIMDE_TEST_VEC_POS_FIRST);
|
|
simde_test_codegen_write_u64(2, r, SIMDE_TEST_VEC_POS_LAST);
|
|
}
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
static int
|
|
test_simde_vcltzs_f32 (SIMDE_MUNIT_TEST_ARGS) {
|
|
#if 1
|
|
static const struct {
|
|
simde_float32_t a;
|
|
uint32_t r;
|
|
} test_vec[] = {
|
|
{ SIMDE_FLOAT32_C( 418.80),
|
|
UINT32_C( 0) },
|
|
{ SIMDE_FLOAT32_C( -38.64),
|
|
UINT32_MAX },
|
|
{ SIMDE_FLOAT32_C( 835.62),
|
|
UINT32_C( 0) },
|
|
{ SIMDE_FLOAT32_C( -210.67),
|
|
UINT32_MAX },
|
|
{ SIMDE_FLOAT32_C( 753.71),
|
|
UINT32_C( 0) },
|
|
{ SIMDE_FLOAT32_C( 601.27),
|
|
UINT32_C( 0) },
|
|
{ SIMDE_FLOAT32_C( -439.56),
|
|
UINT32_MAX },
|
|
{ SIMDE_FLOAT32_C( 192.08),
|
|
UINT32_C( 0) }
|
|
};
|
|
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
|
uint32_t r = simde_vcltzs_f32(test_vec[i].a);
|
|
simde_assert_equal_u32(r, test_vec[i].r);
|
|
}
|
|
|
|
return 0;
|
|
#else
|
|
fputc('\n', stdout);
|
|
for (int i = 0 ; i < 8 ; i++) {
|
|
simde_float32_t a = simde_test_codegen_random_f32(-1000, 1000);
|
|
uint32_t r = simde_vcltzs_f32(a);
|
|
|
|
simde_test_codegen_write_f32(2, a, SIMDE_TEST_VEC_POS_FIRST);
|
|
simde_test_codegen_write_u32(2, r, SIMDE_TEST_VEC_POS_LAST);
|
|
}
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
SIMDE_TEST_FUNC_LIST_BEGIN
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vcltz_f32)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vcltz_f64)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vcltz_s8)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vcltz_s16)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vcltz_s32)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vcltz_s64)
|
|
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vcltzq_f32)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vcltzq_f64)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vcltzq_s8)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vcltzq_s16)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vcltzq_s32)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vcltzq_s64)
|
|
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vcltzd_f64)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vcltzd_s64)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vcltzs_f32)
|
|
SIMDE_TEST_FUNC_LIST_END
|
|
|
|
#include "test-neon-footer.h"
|