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

1911 lines
103 KiB
C
Raw Permalink Normal View History

#define SIMDE_TEST_ARM_NEON_INSN ld2_dup
#include "test-neon.h"
#include "../../../simde/arm/neon/ld2_dup.h"
#if !defined(SIMDE_BUG_INTEL_857088)
static int
test_simde_vld2_dup_f16 (SIMDE_MUNIT_TEST_ARGS) {
struct {
simde_float16_t a[2];
simde_float16_t unused[2];
simde_float16_t r[2][4];
} test_vec[] = {
{ { SIMDE_FLOAT16_VALUE(39.04), SIMDE_FLOAT16_VALUE(10.61) },
{ SIMDE_FLOAT16_VALUE(-41.47), SIMDE_FLOAT16_VALUE(28.54)},
{ { SIMDE_FLOAT16_VALUE(39.04), SIMDE_FLOAT16_VALUE(39.04), SIMDE_FLOAT16_VALUE(39.04), SIMDE_FLOAT16_VALUE(39.04) },
{ SIMDE_FLOAT16_VALUE(10.61), SIMDE_FLOAT16_VALUE(10.61), SIMDE_FLOAT16_VALUE(10.61), SIMDE_FLOAT16_VALUE(10.61) } } },
{ { SIMDE_FLOAT16_VALUE(-26.09), SIMDE_FLOAT16_VALUE(-32.09) },
{ SIMDE_FLOAT16_VALUE(-21.60), SIMDE_FLOAT16_VALUE(-5.65)},
{ { SIMDE_FLOAT16_VALUE(-26.09), SIMDE_FLOAT16_VALUE(-26.09), SIMDE_FLOAT16_VALUE(-26.09), SIMDE_FLOAT16_VALUE(-26.09) },
{ SIMDE_FLOAT16_VALUE(-32.09), SIMDE_FLOAT16_VALUE(-32.09), SIMDE_FLOAT16_VALUE(-32.09), SIMDE_FLOAT16_VALUE(-32.09) } } },
{ { SIMDE_FLOAT16_VALUE(27.51), SIMDE_FLOAT16_VALUE(-41.83) },
{ SIMDE_FLOAT16_VALUE(21.45), SIMDE_FLOAT16_VALUE(9.79)},
{ { SIMDE_FLOAT16_VALUE(27.51), SIMDE_FLOAT16_VALUE(27.51), SIMDE_FLOAT16_VALUE(27.51), SIMDE_FLOAT16_VALUE(27.51) },
{ SIMDE_FLOAT16_VALUE(-41.83), SIMDE_FLOAT16_VALUE(-41.83), SIMDE_FLOAT16_VALUE(-41.83), SIMDE_FLOAT16_VALUE(-41.83) } } },
{ { SIMDE_FLOAT16_VALUE(-19.53), SIMDE_FLOAT16_VALUE(-7.90) },
{ SIMDE_FLOAT16_VALUE(-3.62), SIMDE_FLOAT16_VALUE(17.75)},
{ { SIMDE_FLOAT16_VALUE(-19.53), SIMDE_FLOAT16_VALUE(-19.53), SIMDE_FLOAT16_VALUE(-19.53), SIMDE_FLOAT16_VALUE(-19.53) },
{ SIMDE_FLOAT16_VALUE(-7.90), SIMDE_FLOAT16_VALUE(-7.90), SIMDE_FLOAT16_VALUE(-7.90), SIMDE_FLOAT16_VALUE(-7.90) } } },
{ { SIMDE_FLOAT16_VALUE(-22.86), SIMDE_FLOAT16_VALUE(5.30) },
{ SIMDE_FLOAT16_VALUE(-42.71), SIMDE_FLOAT16_VALUE(-2.30)},
{ { SIMDE_FLOAT16_VALUE(-22.86), SIMDE_FLOAT16_VALUE(-22.86), SIMDE_FLOAT16_VALUE(-22.86), SIMDE_FLOAT16_VALUE(-22.86) },
{ SIMDE_FLOAT16_VALUE(5.30), SIMDE_FLOAT16_VALUE(5.30), SIMDE_FLOAT16_VALUE(5.30), SIMDE_FLOAT16_VALUE(5.30) } } },
{ { SIMDE_FLOAT16_VALUE(4.74), SIMDE_FLOAT16_VALUE(43.69) },
{ SIMDE_FLOAT16_VALUE(-49.64), SIMDE_FLOAT16_VALUE(-29.99)},
{ { SIMDE_FLOAT16_VALUE(4.74), SIMDE_FLOAT16_VALUE(4.74), SIMDE_FLOAT16_VALUE(4.74), SIMDE_FLOAT16_VALUE(4.74) },
{ SIMDE_FLOAT16_VALUE(43.69), SIMDE_FLOAT16_VALUE(43.69), SIMDE_FLOAT16_VALUE(43.69), SIMDE_FLOAT16_VALUE(43.69) } } },
{ { SIMDE_FLOAT16_VALUE(-1.69), SIMDE_FLOAT16_VALUE(-25.30) },
{ SIMDE_FLOAT16_VALUE(4.77), SIMDE_FLOAT16_VALUE(22.66)},
{ { SIMDE_FLOAT16_VALUE(-1.69), SIMDE_FLOAT16_VALUE(-1.69), SIMDE_FLOAT16_VALUE(-1.69), SIMDE_FLOAT16_VALUE(-1.69) },
{ SIMDE_FLOAT16_VALUE(-25.30), SIMDE_FLOAT16_VALUE(-25.30), SIMDE_FLOAT16_VALUE(-25.30), SIMDE_FLOAT16_VALUE(-25.30) } } },
{ { SIMDE_FLOAT16_VALUE(45.42), SIMDE_FLOAT16_VALUE(-42.46) },
{ SIMDE_FLOAT16_VALUE(-4.86), SIMDE_FLOAT16_VALUE(42.78)},
{ { SIMDE_FLOAT16_VALUE(45.42), SIMDE_FLOAT16_VALUE(45.42), SIMDE_FLOAT16_VALUE(45.42), SIMDE_FLOAT16_VALUE(45.42) },
{ SIMDE_FLOAT16_VALUE(-42.46), SIMDE_FLOAT16_VALUE(-42.46), SIMDE_FLOAT16_VALUE(-42.46), SIMDE_FLOAT16_VALUE(-42.46) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float16x4x2_t r = simde_vld2_dup_f16(test_vec[i].a);
simde_float16x4x2_t expected = {
{simde_vld1_f16(test_vec[i].r[0]), simde_vld1_f16(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_f16x4(r.val[0], expected.val[0], INT_MAX);
simde_test_arm_neon_assert_equal_f16x4(r.val[1], expected.val[1], INT_MAX);
}
return 0;
}
static int
test_simde_vld2_dup_f32 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
float a[2];
float unused[2];
float r[2][2];
} test_vec[] = {
{ { SIMDE_FLOAT32_C(2307.68), SIMDE_FLOAT32_C(-1583.29) },
{ SIMDE_FLOAT32_C(2731.95), SIMDE_FLOAT32_C(2210.99)},
{ { SIMDE_FLOAT32_C(2307.68), SIMDE_FLOAT32_C(2307.68) },
{ SIMDE_FLOAT32_C(-1583.29), SIMDE_FLOAT32_C(-1583.29) } } },
{ { SIMDE_FLOAT32_C(2852.12), SIMDE_FLOAT32_C(-4110.41) },
{ SIMDE_FLOAT32_C(-2600.49), SIMDE_FLOAT32_C(2857.57)},
{ { SIMDE_FLOAT32_C(2852.12), SIMDE_FLOAT32_C(2852.12) },
{ SIMDE_FLOAT32_C(-4110.41), SIMDE_FLOAT32_C(-4110.41) } } },
{ { SIMDE_FLOAT32_C(-3149.95), SIMDE_FLOAT32_C(-4330.61) },
{ SIMDE_FLOAT32_C(-560.25), SIMDE_FLOAT32_C(-1571.36)},
{ { SIMDE_FLOAT32_C(-3149.95), SIMDE_FLOAT32_C(-3149.95) },
{ SIMDE_FLOAT32_C(-4330.61), SIMDE_FLOAT32_C(-4330.61) } } },
{ { SIMDE_FLOAT32_C(3391.61), SIMDE_FLOAT32_C(1571.53) },
{ SIMDE_FLOAT32_C(-2233.86), SIMDE_FLOAT32_C(-4968.04)},
{ { SIMDE_FLOAT32_C(3391.61), SIMDE_FLOAT32_C(3391.61) },
{ SIMDE_FLOAT32_C(1571.53), SIMDE_FLOAT32_C(1571.53) } } },
{ { SIMDE_FLOAT32_C(4895.92), SIMDE_FLOAT32_C(507.81) },
{ SIMDE_FLOAT32_C(-2108.13), SIMDE_FLOAT32_C(-3826.15)},
{ { SIMDE_FLOAT32_C(4895.92), SIMDE_FLOAT32_C(4895.92) },
{ SIMDE_FLOAT32_C(507.81), SIMDE_FLOAT32_C(507.81) } } },
{ { SIMDE_FLOAT32_C(-4259.22), SIMDE_FLOAT32_C(-855.54) },
{ SIMDE_FLOAT32_C(-377.33), SIMDE_FLOAT32_C(-2791.55)},
{ { SIMDE_FLOAT32_C(-4259.22), SIMDE_FLOAT32_C(-4259.22) },
{ SIMDE_FLOAT32_C(-855.54), SIMDE_FLOAT32_C(-855.54) } } },
{ { SIMDE_FLOAT32_C(1929.17), SIMDE_FLOAT32_C(-2568.21) },
{ SIMDE_FLOAT32_C(3645.74), SIMDE_FLOAT32_C(4258.92)},
{ { SIMDE_FLOAT32_C(1929.17), SIMDE_FLOAT32_C(1929.17) },
{ SIMDE_FLOAT32_C(-2568.21), SIMDE_FLOAT32_C(-2568.21) } } },
{ { SIMDE_FLOAT32_C(2173.72), SIMDE_FLOAT32_C(-600.35) },
{ SIMDE_FLOAT32_C(-4586.50), SIMDE_FLOAT32_C(2988.62)},
{ { SIMDE_FLOAT32_C(2173.72), SIMDE_FLOAT32_C(2173.72) },
{ SIMDE_FLOAT32_C(-600.35), SIMDE_FLOAT32_C(-600.35) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float32x2x2_t r = simde_vld2_dup_f32(test_vec[i].a);
simde_float32x2x2_t expected = {
{simde_vld1_f32(test_vec[i].r[0]), simde_vld1_f32(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_f32x2(r.val[0], expected.val[0], INT_MAX);
simde_test_arm_neon_assert_equal_f32x2(r.val[1], expected.val[1], INT_MAX);
}
return 0;
}
static int
test_simde_vld2_dup_f64 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
simde_float64 a[2];
simde_float64 unused[2];
simde_float64 r[2][1];
} test_vec[] = {
{ { SIMDE_FLOAT64_C(21082.19), SIMDE_FLOAT64_C(47343.37) },
{ SIMDE_FLOAT64_C(49432.61), SIMDE_FLOAT64_C(-21543.65)},
{ { SIMDE_FLOAT64_C(21082.19) },
{ SIMDE_FLOAT64_C(47343.37) } } },
{ { SIMDE_FLOAT64_C(-41608.33), SIMDE_FLOAT64_C(-36883.25) },
{ SIMDE_FLOAT64_C(30575.24), SIMDE_FLOAT64_C(-12584.71)},
{ { SIMDE_FLOAT64_C(-41608.33) },
{ SIMDE_FLOAT64_C(-36883.25) } } },
{ { SIMDE_FLOAT64_C(49759.50), SIMDE_FLOAT64_C(-5992.61) },
{ SIMDE_FLOAT64_C(23231.80), SIMDE_FLOAT64_C(24747.06)},
{ { SIMDE_FLOAT64_C(49759.50) },
{ SIMDE_FLOAT64_C(-5992.61) } } },
{ { SIMDE_FLOAT64_C(40497.30), SIMDE_FLOAT64_C(-28566.42) },
{ SIMDE_FLOAT64_C(43080.67), SIMDE_FLOAT64_C(-27130.92)},
{ { SIMDE_FLOAT64_C(40497.30) },
{ SIMDE_FLOAT64_C(-28566.42) } } },
{ { SIMDE_FLOAT64_C(-18240.39), SIMDE_FLOAT64_C(10269.59) },
{ SIMDE_FLOAT64_C(11473.99), SIMDE_FLOAT64_C(13282.75)},
{ { SIMDE_FLOAT64_C(-18240.39) },
{ SIMDE_FLOAT64_C(10269.59) } } },
{ { SIMDE_FLOAT64_C(41195.98), SIMDE_FLOAT64_C(-22372.11) },
{ SIMDE_FLOAT64_C(26718.51), SIMDE_FLOAT64_C(-24527.72)},
{ { SIMDE_FLOAT64_C(41195.98) },
{ SIMDE_FLOAT64_C(-22372.11) } } },
{ { SIMDE_FLOAT64_C(-34223.23), SIMDE_FLOAT64_C(43205.97) },
{ SIMDE_FLOAT64_C(-125.59), SIMDE_FLOAT64_C(1552.92)},
{ { SIMDE_FLOAT64_C(-34223.23) },
{ SIMDE_FLOAT64_C(43205.97) } } },
{ { SIMDE_FLOAT64_C(-47799.32), SIMDE_FLOAT64_C(8831.04) },
{ SIMDE_FLOAT64_C(29486.79), SIMDE_FLOAT64_C(36070.91)},
{ { SIMDE_FLOAT64_C(-47799.32) },
{ SIMDE_FLOAT64_C(8831.04) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float64x1x2_t r = simde_vld2_dup_f64(test_vec[i].a);
simde_float64x1x2_t expected = {
{simde_vld1_f64(test_vec[i].r[0]), simde_vld1_f64(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_f64x1(r.val[0], expected.val[0], INT_MAX);
simde_test_arm_neon_assert_equal_f64x1(r.val[1], expected.val[1], INT_MAX);
}
return 0;
}
static int
test_simde_vld2_dup_s8 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
int8_t a[2];
int8_t unused[2];
int8_t r[2][8];
} test_vec[] = {
{ { -INT8_C(44), -INT8_C(10) },
{ INT8_C(11), -INT8_C(46)},
{ { -INT8_C(44), -INT8_C(44), -INT8_C(44), -INT8_C(44),
-INT8_C(44), -INT8_C(44), -INT8_C(44), -INT8_C(44) },
{ -INT8_C(10), -INT8_C(10), -INT8_C(10), -INT8_C(10),
-INT8_C(10), -INT8_C(10), -INT8_C(10), -INT8_C(10) } } },
{ { -INT8_C(36), INT8_C(0) },
{ INT8_C(3), INT8_C(7)},
{ { -INT8_C(36), -INT8_C(36), -INT8_C(36), -INT8_C(36),
-INT8_C(36), -INT8_C(36), -INT8_C(36), -INT8_C(36) },
{ INT8_C(0), INT8_C(0), INT8_C(0), INT8_C(0),
INT8_C(0), INT8_C(0), INT8_C(0), INT8_C(0) } } },
{ { INT8_C(41), -INT8_C(47) },
{ INT8_C(1), -INT8_C(40)},
{ { INT8_C(41), INT8_C(41), INT8_C(41), INT8_C(41),
INT8_C(41), INT8_C(41), INT8_C(41), INT8_C(41) },
{ -INT8_C(47), -INT8_C(47), -INT8_C(47), -INT8_C(47),
-INT8_C(47), -INT8_C(47), -INT8_C(47), -INT8_C(47) } } },
{ { INT8_C(40), -INT8_C(26) },
{ -INT8_C(40), INT8_C(1)},
{ { INT8_C(40), INT8_C(40), INT8_C(40), INT8_C(40),
INT8_C(40), INT8_C(40), INT8_C(40), INT8_C(40) },
{ -INT8_C(26), -INT8_C(26), -INT8_C(26), -INT8_C(26),
-INT8_C(26), -INT8_C(26), -INT8_C(26), -INT8_C(26) } } },
{ { INT8_C(27), -INT8_C(41) },
{ -INT8_C(12), -INT8_C(34)},
{ { INT8_C(27), INT8_C(27), INT8_C(27), INT8_C(27),
INT8_C(27), INT8_C(27), INT8_C(27), INT8_C(27) },
{ -INT8_C(41), -INT8_C(41), -INT8_C(41), -INT8_C(41),
-INT8_C(41), -INT8_C(41), -INT8_C(41), -INT8_C(41) } } },
{ { INT8_C(0), INT8_C(10) },
{ -INT8_C(17), INT8_C(42)},
{ { INT8_C(0), INT8_C(0), INT8_C(0), INT8_C(0),
INT8_C(0), INT8_C(0), INT8_C(0), INT8_C(0) },
{ INT8_C(10), INT8_C(10), INT8_C(10), INT8_C(10),
INT8_C(10), INT8_C(10), INT8_C(10), INT8_C(10) } } },
{ { -INT8_C(31), -INT8_C(20) },
{ -INT8_C(18), -INT8_C(32)},
{ { -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31),
-INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31) },
{ -INT8_C(20), -INT8_C(20), -INT8_C(20), -INT8_C(20),
-INT8_C(20), -INT8_C(20), -INT8_C(20), -INT8_C(20) } } },
{ { INT8_C(14), -INT8_C(5) },
{ -INT8_C(17), INT8_C(17)},
{ { INT8_C(14), INT8_C(14), INT8_C(14), INT8_C(14),
INT8_C(14), INT8_C(14), INT8_C(14), INT8_C(14) },
{ -INT8_C(5), -INT8_C(5), -INT8_C(5), -INT8_C(5),
-INT8_C(5), -INT8_C(5), -INT8_C(5), -INT8_C(5) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int8x8x2_t r = simde_vld2_dup_s8(test_vec[i].a);
simde_int8x8x2_t expected = {
{simde_vld1_s8(test_vec[i].r[0]), simde_vld1_s8(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_i8x8(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_i8x8(r.val[1], expected.val[1]);
}
return 0;
}
static int
test_simde_vld2_dup_s16 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
int16_t a[2];
int16_t unused[2];
int16_t r[2][4];
} test_vec[] = {
{ { -INT16_C(4410), INT16_C(4292) },
{ INT16_C(4011), -INT16_C(684)},
{ { -INT16_C(4410), -INT16_C(4410), -INT16_C(4410), -INT16_C(4410) },
{ INT16_C(4292), INT16_C(4292), INT16_C(4292), INT16_C(4292) } } },
{ { -INT16_C(385), INT16_C(937) },
{ -INT16_C(2080), -INT16_C(604)},
{ { -INT16_C(385), -INT16_C(385), -INT16_C(385), -INT16_C(385) },
{ INT16_C(937), INT16_C(937), INT16_C(937), INT16_C(937) } } },
{ { INT16_C(1583), -INT16_C(4297) },
{ -INT16_C(444), INT16_C(2137)},
{ { INT16_C(1583), INT16_C(1583), INT16_C(1583), INT16_C(1583) },
{ -INT16_C(4297), -INT16_C(4297), -INT16_C(4297), -INT16_C(4297) } } },
{ { INT16_C(851), INT16_C(2552) },
{ INT16_C(729), -INT16_C(3035)},
{ { INT16_C(851), INT16_C(851), INT16_C(851), INT16_C(851) },
{ INT16_C(2552), INT16_C(2552), INT16_C(2552), INT16_C(2552) } } },
{ { INT16_C(4380), -INT16_C(3253) },
{ -INT16_C(1679), INT16_C(1203)},
{ { INT16_C(4380), INT16_C(4380), INT16_C(4380), INT16_C(4380) },
{ -INT16_C(3253), -INT16_C(3253), -INT16_C(3253), -INT16_C(3253) } } },
{ { -INT16_C(524), -INT16_C(21) },
{ INT16_C(797), INT16_C(255)},
{ { -INT16_C(524), -INT16_C(524), -INT16_C(524), -INT16_C(524) },
{ -INT16_C(21), -INT16_C(21), -INT16_C(21), -INT16_C(21) } } },
{ { -INT16_C(186), -INT16_C(581) },
{ -INT16_C(3301), -INT16_C(4925)},
{ { -INT16_C(186), -INT16_C(186), -INT16_C(186), -INT16_C(186) },
{ -INT16_C(581), -INT16_C(581), -INT16_C(581), -INT16_C(581) } } },
{ { -INT16_C(1648), INT16_C(2898) },
{ -INT16_C(2578), INT16_C(2614)},
{ { -INT16_C(1648), -INT16_C(1648), -INT16_C(1648), -INT16_C(1648) },
{ INT16_C(2898), INT16_C(2898), INT16_C(2898), INT16_C(2898) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int16x4x2_t r = simde_vld2_dup_s16(test_vec[i].a);
simde_int16x4x2_t expected = {
{simde_vld1_s16(test_vec[i].r[0]), simde_vld1_s16(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_i16x4(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_i16x4(r.val[1], expected.val[1]);
}
return 0;
}
static int
test_simde_vld2_dup_s32 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
int32_t a[2];
int32_t unused[2];
int32_t r[2][2];
} test_vec[] = {
{ { -INT32_C(423975), INT32_C(232951) },
{ INT32_C(10395), INT32_C(421653)},
{ { -INT32_C(423975), -INT32_C(423975) },
{ INT32_C(232951), INT32_C(232951) } } },
{ { -INT32_C(145011), -INT32_C(212273) },
{ INT32_C(183013), INT32_C(475303)},
{ { -INT32_C(145011), -INT32_C(145011) },
{ -INT32_C(212273), -INT32_C(212273) } } },
{ { INT32_C(58903), -INT32_C(376587) },
{ INT32_C(139539), INT32_C(95681)},
{ { INT32_C(58903), INT32_C(58903) },
{ -INT32_C(376587), -INT32_C(376587) } } },
{ { -INT32_C(192673), INT32_C(65349) },
{ INT32_C(165140), INT32_C(318086)},
{ { -INT32_C(192673), -INT32_C(192673) },
{ INT32_C(65349), INT32_C(65349) } } },
{ { INT32_C(233617), INT32_C(369077) },
{ INT32_C(447975), INT32_C(362104)},
{ { INT32_C(233617), INT32_C(233617) },
{ INT32_C(369077), INT32_C(369077) } } },
{ { -INT32_C(293844), INT32_C(124382) },
{ -INT32_C(131540), -INT32_C(38739)},
{ { -INT32_C(293844), -INT32_C(293844) },
{ INT32_C(124382), INT32_C(124382) } } },
{ { -INT32_C(198129), -INT32_C(404701) },
{ INT32_C(277076), -INT32_C(95884)},
{ { -INT32_C(198129), -INT32_C(198129) },
{ -INT32_C(404701), -INT32_C(404701) } } },
{ { -INT32_C(79259), -INT32_C(145497) },
{ -INT32_C(286896), INT32_C(459476)},
{ { -INT32_C(79259), -INT32_C(79259) },
{ -INT32_C(145497), -INT32_C(145497) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int32x2x2_t r = simde_vld2_dup_s32(test_vec[i].a);
simde_int32x2x2_t expected = {
{simde_vld1_s32(test_vec[i].r[0]), simde_vld1_s32(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_i32x2(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_i32x2(r.val[1], expected.val[1]);
}
return 0;
}
static int
test_simde_vld2_dup_s64 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
int64_t a[2];
int64_t unused[2];
int64_t r[2][1];
} test_vec[] = {
{ { -INT64_C(16075735), -INT64_C(41986772) },
{ INT64_C(1992980), -INT64_C(18040045)},
{ { -INT64_C(16075735) },
{ -INT64_C(41986772) } } },
{ { INT64_C(45666736), INT64_C(14603987) },
{ INT64_C(5576751), -INT64_C(32015067)},
{ { INT64_C(45666736) },
{ INT64_C(14603987) } } },
{ { INT64_C(22903463), -INT64_C(26683670) },
{ INT64_C(31335237), -INT64_C(35045895)},
{ { INT64_C(22903463) },
{ -INT64_C(26683670) } } },
{ { -INT64_C(2725423), INT64_C(14936754) },
{ -INT64_C(15271657), -INT64_C(33623481)},
{ { -INT64_C(2725423) },
{ INT64_C(14936754) } } },
{ { -INT64_C(41889667), -INT64_C(48507508) },
{ -INT64_C(40708285), INT64_C(19288415)},
{ { -INT64_C(41889667) },
{ -INT64_C(48507508) } } },
{ { -INT64_C(45608478), INT64_C(30343871) },
{ INT64_C(46346252), -INT64_C(2149923)},
{ { -INT64_C(45608478) },
{ INT64_C(30343871) } } },
{ { INT64_C(17093091), -INT64_C(49483236) },
{ -INT64_C(13243908), -INT64_C(37644879)},
{ { INT64_C(17093091) },
{ -INT64_C(49483236) } } },
{ { -INT64_C(9604042), INT64_C(42837322) },
{ -INT64_C(47932845), INT64_C(29714084)},
{ { -INT64_C(9604042) },
{ INT64_C(42837322) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int64x1x2_t r = simde_vld2_dup_s64(test_vec[i].a);
simde_int64x1x2_t expected = {
{simde_vld1_s64(test_vec[i].r[0]), simde_vld1_s64(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_i64x1(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_i64x1(r.val[1], expected.val[1]);
}
return 0;
}
static int
test_simde_vld2_dup_u8 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
uint8_t a[2];
uint8_t unused[2];
uint8_t r[2][8];
} test_vec[] = {
{ { UINT8_C(94), UINT8_C(65) },
{ UINT8_C(68), UINT8_C(15)},
{ { UINT8_C(94), UINT8_C(94), UINT8_C(94), UINT8_C(94),
UINT8_C(94), UINT8_C(94), UINT8_C(94), UINT8_C(94) },
{ UINT8_C(65), UINT8_C(65), UINT8_C(65), UINT8_C(65),
UINT8_C(65), UINT8_C(65), UINT8_C(65), UINT8_C(65) } } },
{ { UINT8_C(89), UINT8_C(88) },
{ UINT8_C(87), UINT8_C(56)},
{ { UINT8_C(89), UINT8_C(89), UINT8_C(89), UINT8_C(89),
UINT8_C(89), UINT8_C(89), UINT8_C(89), UINT8_C(89) },
{ UINT8_C(88), UINT8_C(88), UINT8_C(88), UINT8_C(88),
UINT8_C(88), UINT8_C(88), UINT8_C(88), UINT8_C(88) } } },
{ { UINT8_C(28), UINT8_C(34) },
{ UINT8_C(99), UINT8_C(65)},
{ { UINT8_C(28), UINT8_C(28), UINT8_C(28), UINT8_C(28),
UINT8_C(28), UINT8_C(28), UINT8_C(28), UINT8_C(28) },
{ UINT8_C(34), UINT8_C(34), UINT8_C(34), UINT8_C(34),
UINT8_C(34), UINT8_C(34), UINT8_C(34), UINT8_C(34) } } },
{ { UINT8_C(44), UINT8_C(68) },
{ UINT8_C(10), UINT8_C(26)},
{ { UINT8_C(44), UINT8_C(44), UINT8_C(44), UINT8_C(44),
UINT8_C(44), UINT8_C(44), UINT8_C(44), UINT8_C(44) },
{ UINT8_C(68), UINT8_C(68), UINT8_C(68), UINT8_C(68),
UINT8_C(68), UINT8_C(68), UINT8_C(68), UINT8_C(68) } } },
{ { UINT8_C(47), UINT8_C(62) },
{ UINT8_C(86), UINT8_C(81)},
{ { UINT8_C(47), UINT8_C(47), UINT8_C(47), UINT8_C(47),
UINT8_C(47), UINT8_C(47), UINT8_C(47), UINT8_C(47) },
{ UINT8_C(62), UINT8_C(62), UINT8_C(62), UINT8_C(62),
UINT8_C(62), UINT8_C(62), UINT8_C(62), UINT8_C(62) } } },
{ { UINT8_C(53), UINT8_C(60) },
{ UINT8_C(43), UINT8_C(84)},
{ { UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53),
UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53) },
{ UINT8_C(60), UINT8_C(60), UINT8_C(60), UINT8_C(60),
UINT8_C(60), UINT8_C(60), UINT8_C(60), UINT8_C(60) } } },
{ { UINT8_C(15), UINT8_C(10) },
{ UINT8_C(26), UINT8_C(7)},
{ { UINT8_C(15), UINT8_C(15), UINT8_C(15), UINT8_C(15),
UINT8_C(15), UINT8_C(15), UINT8_C(15), UINT8_C(15) },
{ UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10),
UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10) } } },
{ { UINT8_C(64), UINT8_C(33) },
{ UINT8_C(81), UINT8_C(53)},
{ { UINT8_C(64), UINT8_C(64), UINT8_C(64), UINT8_C(64),
UINT8_C(64), UINT8_C(64), UINT8_C(64), UINT8_C(64) },
{ UINT8_C(33), UINT8_C(33), UINT8_C(33), UINT8_C(33),
UINT8_C(33), UINT8_C(33), UINT8_C(33), UINT8_C(33) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint8x8x2_t r = simde_vld2_dup_u8(test_vec[i].a);
simde_uint8x8x2_t expected = {
{simde_vld1_u8(test_vec[i].r[0]), simde_vld1_u8(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_u8x8(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_u8x8(r.val[1], expected.val[1]);
}
return 0;
}
static int
test_simde_vld2_dup_u16 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
uint16_t a[2];
uint16_t unused[2];
uint16_t r[2][4];
} test_vec[] = {
{ { UINT16_C(7277), UINT16_C(6201) },
{ UINT16_C(9680), UINT16_C(3544)},
{ { UINT16_C(7277), UINT16_C(7277), UINT16_C(7277), UINT16_C(7277) },
{ UINT16_C(6201), UINT16_C(6201), UINT16_C(6201), UINT16_C(6201) } } },
{ { UINT16_C(2944), UINT16_C(5592) },
{ UINT16_C(9662), UINT16_C(4267)},
{ { UINT16_C(2944), UINT16_C(2944), UINT16_C(2944), UINT16_C(2944) },
{ UINT16_C(5592), UINT16_C(5592), UINT16_C(5592), UINT16_C(5592) } } },
{ { UINT16_C(8742), UINT16_C(6060) },
{ UINT16_C(3824), UINT16_C(2303)},
{ { UINT16_C(8742), UINT16_C(8742), UINT16_C(8742), UINT16_C(8742) },
{ UINT16_C(6060), UINT16_C(6060), UINT16_C(6060), UINT16_C(6060) } } },
{ { UINT16_C(9964), UINT16_C(5944) },
{ UINT16_C(4767), UINT16_C(7055)},
{ { UINT16_C(9964), UINT16_C(9964), UINT16_C(9964), UINT16_C(9964) },
{ UINT16_C(5944), UINT16_C(5944), UINT16_C(5944), UINT16_C(5944) } } },
{ { UINT16_C(6764), UINT16_C(915) },
{ UINT16_C(2455), UINT16_C(4422)},
{ { UINT16_C(6764), UINT16_C(6764), UINT16_C(6764), UINT16_C(6764) },
{ UINT16_C(915), UINT16_C(915), UINT16_C(915), UINT16_C(915) } } },
{ { UINT16_C(3051), UINT16_C(2687) },
{ UINT16_C(3858), UINT16_C(7628)},
{ { UINT16_C(3051), UINT16_C(3051), UINT16_C(3051), UINT16_C(3051) },
{ UINT16_C(2687), UINT16_C(2687), UINT16_C(2687), UINT16_C(2687) } } },
{ { UINT16_C(2343), UINT16_C(2688) },
{ UINT16_C(3196), UINT16_C(4003)},
{ { UINT16_C(2343), UINT16_C(2343), UINT16_C(2343), UINT16_C(2343) },
{ UINT16_C(2688), UINT16_C(2688), UINT16_C(2688), UINT16_C(2688) } } },
{ { UINT16_C(6885), UINT16_C(4075) },
{ UINT16_C(1096), UINT16_C(2437)},
{ { UINT16_C(6885), UINT16_C(6885), UINT16_C(6885), UINT16_C(6885) },
{ UINT16_C(4075), UINT16_C(4075), UINT16_C(4075), UINT16_C(4075) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint16x4x2_t r = simde_vld2_dup_u16(test_vec[i].a);
simde_uint16x4x2_t expected = {
{simde_vld1_u16(test_vec[i].r[0]), simde_vld1_u16(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_u16x4(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_u16x4(r.val[1], expected.val[1]);
}
return 0;
}
static int
test_simde_vld2_dup_u32 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
uint32_t a[2];
uint32_t unused[2];
uint32_t r[2][2];
} test_vec[] = {
{ { UINT32_C(8806364), UINT32_C(5747175) },
{ UINT32_C(62640), UINT32_C(51477)},
{ { UINT32_C(8806364), UINT32_C(8806364) },
{ UINT32_C(5747175), UINT32_C(5747175) } } },
{ { UINT32_C(6190067), UINT32_C(9926025) },
{ UINT32_C(5527107), UINT32_C(2621754)},
{ { UINT32_C(6190067), UINT32_C(6190067) },
{ UINT32_C(9926025), UINT32_C(9926025) } } },
{ { UINT32_C(7713063), UINT32_C(1058099) },
{ UINT32_C(5449836), UINT32_C(7469060)},
{ { UINT32_C(7713063), UINT32_C(7713063) },
{ UINT32_C(1058099), UINT32_C(1058099) } } },
{ { UINT32_C(9037710), UINT32_C(8162655) },
{ UINT32_C(6515501), UINT32_C(8695502)},
{ { UINT32_C(9037710), UINT32_C(9037710) },
{ UINT32_C(8162655), UINT32_C(8162655) } } },
{ { UINT32_C(3473717), UINT32_C(4274463) },
{ UINT32_C(2777529), UINT32_C(4443635)},
{ { UINT32_C(3473717), UINT32_C(3473717) },
{ UINT32_C(4274463), UINT32_C(4274463) } } },
{ { UINT32_C(2223044), UINT32_C(6511474) },
{ UINT32_C(2931518), UINT32_C(3607081)},
{ { UINT32_C(2223044), UINT32_C(2223044) },
{ UINT32_C(6511474), UINT32_C(6511474) } } },
{ { UINT32_C(2577872), UINT32_C(6180197) },
{ UINT32_C(9858974), UINT32_C(1298189)},
{ { UINT32_C(2577872), UINT32_C(2577872) },
{ UINT32_C(6180197), UINT32_C(6180197) } } },
{ { UINT32_C(3511221), UINT32_C(9972720) },
{ UINT32_C(4216133), UINT32_C(7465157)},
{ { UINT32_C(3511221), UINT32_C(3511221) },
{ UINT32_C(9972720), UINT32_C(9972720) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint32x2x2_t r = simde_vld2_dup_u32(test_vec[i].a);
simde_uint32x2x2_t expected = {
{simde_vld1_u32(test_vec[i].r[0]), simde_vld1_u32(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_u32x2(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_u32x2(r.val[1], expected.val[1]);
}
return 0;
}
static int
test_simde_vld2_dup_u64 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
uint64_t a[2];
uint64_t unused[2];
uint64_t r[2][1];
} test_vec[] = {
{ { UINT64_C(406306774), UINT64_C(832079054) },
{ UINT64_C(942691710), UINT64_C(590244517)},
{ { UINT64_C(406306774) },
{ UINT64_C(832079054) } } },
{ { UINT64_C(209815625), UINT64_C(142491912) },
{ UINT64_C(346572474), UINT64_C(762924904)},
{ { UINT64_C(209815625) },
{ UINT64_C(142491912) } } },
{ { UINT64_C(329793009), UINT64_C(224060866) },
{ UINT64_C(648830943), UINT64_C(251128938)},
{ { UINT64_C(329793009) },
{ UINT64_C(224060866) } } },
{ { UINT64_C(353732428), UINT64_C(38041495) },
{ UINT64_C(142075049), UINT64_C(500056775)},
{ { UINT64_C(353732428) },
{ UINT64_C(38041495) } } },
{ { UINT64_C(396112989), UINT64_C(999174752) },
{ UINT64_C(69563384), UINT64_C(343798648)},
{ { UINT64_C(396112989) },
{ UINT64_C(999174752) } } },
{ { UINT64_C(321475295), UINT64_C(362221548) },
{ UINT64_C(851265818), UINT64_C(259349005)},
{ { UINT64_C(321475295) },
{ UINT64_C(362221548) } } },
{ { UINT64_C(424982958), UINT64_C(188017536) },
{ UINT64_C(162916083), UINT64_C(282151345)},
{ { UINT64_C(424982958) },
{ UINT64_C(188017536) } } },
{ { UINT64_C(49743777), UINT64_C(694072886) },
{ UINT64_C(998695309), UINT64_C(891182183)},
{ { UINT64_C(49743777) },
{ UINT64_C(694072886) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint64x1x2_t r = simde_vld2_dup_u64(test_vec[i].a);
simde_uint64x1x2_t expected = {
{simde_vld1_u64(test_vec[i].r[0]), simde_vld1_u64(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_u64x1(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_u64x1(r.val[1], expected.val[1]);
}
return 0;
}
static int
test_simde_vld2q_dup_f16 (SIMDE_MUNIT_TEST_ARGS) {
struct {
simde_float16_t a[2];
simde_float16_t unused[2];
simde_float16_t r[2][8];
} test_vec[] = {
{ { SIMDE_FLOAT16_VALUE(44.20), SIMDE_FLOAT16_VALUE(24.16) },
{ SIMDE_FLOAT16_VALUE(-44.99), SIMDE_FLOAT16_VALUE(0.06)},
{ { SIMDE_FLOAT16_VALUE(44.20), SIMDE_FLOAT16_VALUE(44.20), SIMDE_FLOAT16_VALUE(44.20), SIMDE_FLOAT16_VALUE(44.20),
SIMDE_FLOAT16_VALUE(44.20), SIMDE_FLOAT16_VALUE(44.20), SIMDE_FLOAT16_VALUE(44.20), SIMDE_FLOAT16_VALUE(44.20) },
{ SIMDE_FLOAT16_VALUE(24.16), SIMDE_FLOAT16_VALUE(24.16), SIMDE_FLOAT16_VALUE(24.16), SIMDE_FLOAT16_VALUE(24.16),
SIMDE_FLOAT16_VALUE(24.16), SIMDE_FLOAT16_VALUE(24.16), SIMDE_FLOAT16_VALUE(24.16), SIMDE_FLOAT16_VALUE(24.16) } } },
{ { SIMDE_FLOAT16_VALUE(49.42), SIMDE_FLOAT16_VALUE(2.99) },
{ SIMDE_FLOAT16_VALUE(-44.29), SIMDE_FLOAT16_VALUE(-47.80)},
{ { SIMDE_FLOAT16_VALUE(49.42), SIMDE_FLOAT16_VALUE(49.42), SIMDE_FLOAT16_VALUE(49.42), SIMDE_FLOAT16_VALUE(49.42),
SIMDE_FLOAT16_VALUE(49.42), SIMDE_FLOAT16_VALUE(49.42), SIMDE_FLOAT16_VALUE(49.42), SIMDE_FLOAT16_VALUE(49.42) },
{ SIMDE_FLOAT16_VALUE(2.99), SIMDE_FLOAT16_VALUE(2.99), SIMDE_FLOAT16_VALUE(2.99), SIMDE_FLOAT16_VALUE(2.99),
SIMDE_FLOAT16_VALUE(2.99), SIMDE_FLOAT16_VALUE(2.99), SIMDE_FLOAT16_VALUE(2.99), SIMDE_FLOAT16_VALUE(2.99) } } },
{ { SIMDE_FLOAT16_VALUE(-4.29), SIMDE_FLOAT16_VALUE(-21.75) },
{ SIMDE_FLOAT16_VALUE(18.84), SIMDE_FLOAT16_VALUE(47.44)},
{ { SIMDE_FLOAT16_VALUE(-4.29), SIMDE_FLOAT16_VALUE(-4.29), SIMDE_FLOAT16_VALUE(-4.29), SIMDE_FLOAT16_VALUE(-4.29),
SIMDE_FLOAT16_VALUE(-4.29), SIMDE_FLOAT16_VALUE(-4.29), SIMDE_FLOAT16_VALUE(-4.29), SIMDE_FLOAT16_VALUE(-4.29) },
{ SIMDE_FLOAT16_VALUE(-21.75), SIMDE_FLOAT16_VALUE(-21.75), SIMDE_FLOAT16_VALUE(-21.75), SIMDE_FLOAT16_VALUE(-21.75),
SIMDE_FLOAT16_VALUE(-21.75), SIMDE_FLOAT16_VALUE(-21.75), SIMDE_FLOAT16_VALUE(-21.75), SIMDE_FLOAT16_VALUE(-21.75) } } },
{ { SIMDE_FLOAT16_VALUE(14.92), SIMDE_FLOAT16_VALUE(32.44) },
{ SIMDE_FLOAT16_VALUE(32.42), SIMDE_FLOAT16_VALUE(-11.78)},
{ { SIMDE_FLOAT16_VALUE(14.92), SIMDE_FLOAT16_VALUE(14.92), SIMDE_FLOAT16_VALUE(14.92), SIMDE_FLOAT16_VALUE(14.92),
SIMDE_FLOAT16_VALUE(14.92), SIMDE_FLOAT16_VALUE(14.92), SIMDE_FLOAT16_VALUE(14.92), SIMDE_FLOAT16_VALUE(14.92) },
{ SIMDE_FLOAT16_VALUE(32.44), SIMDE_FLOAT16_VALUE(32.44), SIMDE_FLOAT16_VALUE(32.44), SIMDE_FLOAT16_VALUE(32.44),
SIMDE_FLOAT16_VALUE(32.44), SIMDE_FLOAT16_VALUE(32.44), SIMDE_FLOAT16_VALUE(32.44), SIMDE_FLOAT16_VALUE(32.44) } } },
{ { SIMDE_FLOAT16_VALUE(-15.04), SIMDE_FLOAT16_VALUE(-22.71) },
{ SIMDE_FLOAT16_VALUE(21.86), SIMDE_FLOAT16_VALUE(-1.79)},
{ { SIMDE_FLOAT16_VALUE(-15.04), SIMDE_FLOAT16_VALUE(-15.04), SIMDE_FLOAT16_VALUE(-15.04), SIMDE_FLOAT16_VALUE(-15.04),
SIMDE_FLOAT16_VALUE(-15.04), SIMDE_FLOAT16_VALUE(-15.04), SIMDE_FLOAT16_VALUE(-15.04), SIMDE_FLOAT16_VALUE(-15.04) },
{ SIMDE_FLOAT16_VALUE(-22.71), SIMDE_FLOAT16_VALUE(-22.71), SIMDE_FLOAT16_VALUE(-22.71), SIMDE_FLOAT16_VALUE(-22.71),
SIMDE_FLOAT16_VALUE(-22.71), SIMDE_FLOAT16_VALUE(-22.71), SIMDE_FLOAT16_VALUE(-22.71), SIMDE_FLOAT16_VALUE(-22.71) } } },
{ { SIMDE_FLOAT16_VALUE(2.97), SIMDE_FLOAT16_VALUE(23.53) },
{ SIMDE_FLOAT16_VALUE(-46.16), SIMDE_FLOAT16_VALUE(23.15)},
{ { SIMDE_FLOAT16_VALUE(2.97), SIMDE_FLOAT16_VALUE(2.97), SIMDE_FLOAT16_VALUE(2.97), SIMDE_FLOAT16_VALUE(2.97),
SIMDE_FLOAT16_VALUE(2.97), SIMDE_FLOAT16_VALUE(2.97), SIMDE_FLOAT16_VALUE(2.97), SIMDE_FLOAT16_VALUE(2.97) },
{ SIMDE_FLOAT16_VALUE(23.53), SIMDE_FLOAT16_VALUE(23.53), SIMDE_FLOAT16_VALUE(23.53), SIMDE_FLOAT16_VALUE(23.53),
SIMDE_FLOAT16_VALUE(23.53), SIMDE_FLOAT16_VALUE(23.53), SIMDE_FLOAT16_VALUE(23.53), SIMDE_FLOAT16_VALUE(23.53) } } },
{ { SIMDE_FLOAT16_VALUE(9.52), SIMDE_FLOAT16_VALUE(-32.92) },
{ SIMDE_FLOAT16_VALUE(24.32), SIMDE_FLOAT16_VALUE(39.39)},
{ { SIMDE_FLOAT16_VALUE(9.52), SIMDE_FLOAT16_VALUE(9.52), SIMDE_FLOAT16_VALUE(9.52), SIMDE_FLOAT16_VALUE(9.52),
SIMDE_FLOAT16_VALUE(9.52), SIMDE_FLOAT16_VALUE(9.52), SIMDE_FLOAT16_VALUE(9.52), SIMDE_FLOAT16_VALUE(9.52) },
{ SIMDE_FLOAT16_VALUE(-32.92), SIMDE_FLOAT16_VALUE(-32.92), SIMDE_FLOAT16_VALUE(-32.92), SIMDE_FLOAT16_VALUE(-32.92),
SIMDE_FLOAT16_VALUE(-32.92), SIMDE_FLOAT16_VALUE(-32.92), SIMDE_FLOAT16_VALUE(-32.92), SIMDE_FLOAT16_VALUE(-32.92) } } },
{ { SIMDE_FLOAT16_VALUE(-26.46), SIMDE_FLOAT16_VALUE(24.31) },
{ SIMDE_FLOAT16_VALUE(14.82), SIMDE_FLOAT16_VALUE(-40.92)},
{ { SIMDE_FLOAT16_VALUE(-26.46), SIMDE_FLOAT16_VALUE(-26.46), SIMDE_FLOAT16_VALUE(-26.46), SIMDE_FLOAT16_VALUE(-26.46),
SIMDE_FLOAT16_VALUE(-26.46), SIMDE_FLOAT16_VALUE(-26.46), SIMDE_FLOAT16_VALUE(-26.46), SIMDE_FLOAT16_VALUE(-26.46) },
{ SIMDE_FLOAT16_VALUE(24.31), SIMDE_FLOAT16_VALUE(24.31), SIMDE_FLOAT16_VALUE(24.31), SIMDE_FLOAT16_VALUE(24.31),
SIMDE_FLOAT16_VALUE(24.31), SIMDE_FLOAT16_VALUE(24.31), SIMDE_FLOAT16_VALUE(24.31), SIMDE_FLOAT16_VALUE(24.31) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float16x8x2_t r = simde_vld2q_dup_f16(test_vec[i].a);
simde_float16x8x2_t expected = {
{simde_vld1q_f16(test_vec[i].r[0]), simde_vld1q_f16(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_f16x8(r.val[0], expected.val[0], INT_MAX);
simde_test_arm_neon_assert_equal_f16x8(r.val[1], expected.val[1], INT_MAX);
}
return 0;
}
static int
test_simde_vld2q_dup_f32 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
float a[2];
float unused[2];
float r[2][4];
} test_vec[] = {
{ { SIMDE_FLOAT32_C(-36.86), SIMDE_FLOAT32_C(-3235.75) },
{ SIMDE_FLOAT32_C(-1620.77), SIMDE_FLOAT32_C(-2598.23)},
{ { SIMDE_FLOAT32_C(-36.86), SIMDE_FLOAT32_C(-36.86), SIMDE_FLOAT32_C(-36.86), SIMDE_FLOAT32_C(-36.86) },
{ SIMDE_FLOAT32_C(-3235.75), SIMDE_FLOAT32_C(-3235.75), SIMDE_FLOAT32_C(-3235.75), SIMDE_FLOAT32_C(-3235.75) } } },
{ { SIMDE_FLOAT32_C(-22.58), SIMDE_FLOAT32_C(-1940.17) },
{ SIMDE_FLOAT32_C(404.34), SIMDE_FLOAT32_C(2212.34)},
{ { SIMDE_FLOAT32_C(-22.58), SIMDE_FLOAT32_C(-22.58), SIMDE_FLOAT32_C(-22.58), SIMDE_FLOAT32_C(-22.58) },
{ SIMDE_FLOAT32_C(-1940.17), SIMDE_FLOAT32_C(-1940.17), SIMDE_FLOAT32_C(-1940.17), SIMDE_FLOAT32_C(-1940.17) } } },
{ { SIMDE_FLOAT32_C(1792.73), SIMDE_FLOAT32_C(3138.56) },
{ SIMDE_FLOAT32_C(-468.64), SIMDE_FLOAT32_C(-4526.15)},
{ { SIMDE_FLOAT32_C(1792.73), SIMDE_FLOAT32_C(1792.73), SIMDE_FLOAT32_C(1792.73), SIMDE_FLOAT32_C(1792.73) },
{ SIMDE_FLOAT32_C(3138.56), SIMDE_FLOAT32_C(3138.56), SIMDE_FLOAT32_C(3138.56), SIMDE_FLOAT32_C(3138.56) } } },
{ { SIMDE_FLOAT32_C(1849.53), SIMDE_FLOAT32_C(-3910.03) },
{ SIMDE_FLOAT32_C(-4396.76), SIMDE_FLOAT32_C(-3095.12)},
{ { SIMDE_FLOAT32_C(1849.53), SIMDE_FLOAT32_C(1849.53), SIMDE_FLOAT32_C(1849.53), SIMDE_FLOAT32_C(1849.53) },
{ SIMDE_FLOAT32_C(-3910.03), SIMDE_FLOAT32_C(-3910.03), SIMDE_FLOAT32_C(-3910.03), SIMDE_FLOAT32_C(-3910.03) } } },
{ { SIMDE_FLOAT32_C(1942.57), SIMDE_FLOAT32_C(-2284.97) },
{ SIMDE_FLOAT32_C(2327.82), SIMDE_FLOAT32_C(700.88)},
{ { SIMDE_FLOAT32_C(1942.57), SIMDE_FLOAT32_C(1942.57), SIMDE_FLOAT32_C(1942.57), SIMDE_FLOAT32_C(1942.57) },
{ SIMDE_FLOAT32_C(-2284.97), SIMDE_FLOAT32_C(-2284.97), SIMDE_FLOAT32_C(-2284.97), SIMDE_FLOAT32_C(-2284.97) } } },
{ { SIMDE_FLOAT32_C(2044.12), SIMDE_FLOAT32_C(636.75) },
{ SIMDE_FLOAT32_C(1647.09), SIMDE_FLOAT32_C(105.34)},
{ { SIMDE_FLOAT32_C(2044.12), SIMDE_FLOAT32_C(2044.12), SIMDE_FLOAT32_C(2044.12), SIMDE_FLOAT32_C(2044.12) },
{ SIMDE_FLOAT32_C(636.75), SIMDE_FLOAT32_C(636.75), SIMDE_FLOAT32_C(636.75), SIMDE_FLOAT32_C(636.75) } } },
{ { SIMDE_FLOAT32_C(4347.49), SIMDE_FLOAT32_C(1671.95) },
{ SIMDE_FLOAT32_C(-2453.27), SIMDE_FLOAT32_C(-3619.39)},
{ { SIMDE_FLOAT32_C(4347.49), SIMDE_FLOAT32_C(4347.49), SIMDE_FLOAT32_C(4347.49), SIMDE_FLOAT32_C(4347.49) },
{ SIMDE_FLOAT32_C(1671.95), SIMDE_FLOAT32_C(1671.95), SIMDE_FLOAT32_C(1671.95), SIMDE_FLOAT32_C(1671.95) } } },
{ { SIMDE_FLOAT32_C(-4696.01), SIMDE_FLOAT32_C(2725.12) },
{ SIMDE_FLOAT32_C(4041.30), SIMDE_FLOAT32_C(3596.24)},
{ { SIMDE_FLOAT32_C(-4696.01), SIMDE_FLOAT32_C(-4696.01), SIMDE_FLOAT32_C(-4696.01), SIMDE_FLOAT32_C(-4696.01) },
{ SIMDE_FLOAT32_C(2725.12), SIMDE_FLOAT32_C(2725.12), SIMDE_FLOAT32_C(2725.12), SIMDE_FLOAT32_C(2725.12) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float32x4x2_t r = simde_vld2q_dup_f32(test_vec[i].a);
simde_float32x4x2_t expected = {
{simde_vld1q_f32(test_vec[i].r[0]), simde_vld1q_f32(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_f32x4(r.val[0], expected.val[0], INT_MAX);
simde_test_arm_neon_assert_equal_f32x4(r.val[1], expected.val[1], INT_MAX);
}
return 0;
}
static int
test_simde_vld2q_dup_f64 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
simde_float64 a[2];
simde_float64 unused[2];
simde_float64 r[2][2];
} test_vec[] = {
{ { SIMDE_FLOAT64_C(-6318.09), SIMDE_FLOAT64_C(38696.63) },
{ SIMDE_FLOAT64_C(-27977.77), SIMDE_FLOAT64_C(-12787.81)},
{ { SIMDE_FLOAT64_C(-6318.09), SIMDE_FLOAT64_C(-6318.09) },
{ SIMDE_FLOAT64_C(38696.63), SIMDE_FLOAT64_C(38696.63) } } },
{ { SIMDE_FLOAT64_C(-21625.08), SIMDE_FLOAT64_C(26911.10) },
{ SIMDE_FLOAT64_C(33404.93), SIMDE_FLOAT64_C(33236.51)},
{ { SIMDE_FLOAT64_C(-21625.08), SIMDE_FLOAT64_C(-21625.08) },
{ SIMDE_FLOAT64_C(26911.10), SIMDE_FLOAT64_C(26911.10) } } },
{ { SIMDE_FLOAT64_C(-35341.89), SIMDE_FLOAT64_C(-4671.89) },
{ SIMDE_FLOAT64_C(-24439.53), SIMDE_FLOAT64_C(-25942.73)},
{ { SIMDE_FLOAT64_C(-35341.89), SIMDE_FLOAT64_C(-35341.89) },
{ SIMDE_FLOAT64_C(-4671.89), SIMDE_FLOAT64_C(-4671.89) } } },
{ { SIMDE_FLOAT64_C(23971.09), SIMDE_FLOAT64_C(43928.74) },
{ SIMDE_FLOAT64_C(-4938.80), SIMDE_FLOAT64_C(39585.23)},
{ { SIMDE_FLOAT64_C(23971.09), SIMDE_FLOAT64_C(23971.09) },
{ SIMDE_FLOAT64_C(43928.74), SIMDE_FLOAT64_C(43928.74) } } },
{ { SIMDE_FLOAT64_C(29978.96), SIMDE_FLOAT64_C(34924.24) },
{ SIMDE_FLOAT64_C(-11437.93), SIMDE_FLOAT64_C(-33530.62)},
{ { SIMDE_FLOAT64_C(29978.96), SIMDE_FLOAT64_C(29978.96) },
{ SIMDE_FLOAT64_C(34924.24), SIMDE_FLOAT64_C(34924.24) } } },
{ { SIMDE_FLOAT64_C(44018.29), SIMDE_FLOAT64_C(33685.76) },
{ SIMDE_FLOAT64_C(-13974.59), SIMDE_FLOAT64_C(-14748.18)},
{ { SIMDE_FLOAT64_C(44018.29), SIMDE_FLOAT64_C(44018.29) },
{ SIMDE_FLOAT64_C(33685.76), SIMDE_FLOAT64_C(33685.76) } } },
{ { SIMDE_FLOAT64_C(-14298.09), SIMDE_FLOAT64_C(-13821.65) },
{ SIMDE_FLOAT64_C(-5506.59), SIMDE_FLOAT64_C(7420.16)},
{ { SIMDE_FLOAT64_C(-14298.09), SIMDE_FLOAT64_C(-14298.09) },
{ SIMDE_FLOAT64_C(-13821.65), SIMDE_FLOAT64_C(-13821.65) } } },
{ { SIMDE_FLOAT64_C(-9654.44), SIMDE_FLOAT64_C(40543.01) },
{ SIMDE_FLOAT64_C(29651.86), SIMDE_FLOAT64_C(16915.17)},
{ { SIMDE_FLOAT64_C(-9654.44), SIMDE_FLOAT64_C(-9654.44) },
{ SIMDE_FLOAT64_C(40543.01), SIMDE_FLOAT64_C(40543.01) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float64x2x2_t r = simde_vld2q_dup_f64(test_vec[i].a);
simde_float64x2x2_t expected = {
{simde_vld1q_f64(test_vec[i].r[0]), simde_vld1q_f64(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_f64x2(r.val[0], expected.val[0], INT_MAX);
simde_test_arm_neon_assert_equal_f64x2(r.val[1], expected.val[1], INT_MAX);
}
return 0;
}
static int
test_simde_vld2q_dup_s8 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
int8_t a[2];
int8_t unused[2];
int8_t r[2][16];
} test_vec[] = {
{ { INT8_C(21), -INT8_C(48) },
{ INT8_C(32), -INT8_C(39)},
{ { INT8_C(21), INT8_C(21), INT8_C(21), INT8_C(21), INT8_C(21), INT8_C(21), INT8_C(21), INT8_C(21),
INT8_C(21), INT8_C(21), INT8_C(21), INT8_C(21), INT8_C(21), INT8_C(21), INT8_C(21), INT8_C(21) },
{ -INT8_C(48), -INT8_C(48), -INT8_C(48), -INT8_C(48), -INT8_C(48), -INT8_C(48), -INT8_C(48), -INT8_C(48),
-INT8_C(48), -INT8_C(48), -INT8_C(48), -INT8_C(48), -INT8_C(48), -INT8_C(48), -INT8_C(48), -INT8_C(48) } } },
{ { INT8_C(3), INT8_C(43) },
{ INT8_C(49), -INT8_C(35)},
{ { INT8_C(3), INT8_C(3), INT8_C(3), INT8_C(3), INT8_C(3), INT8_C(3), INT8_C(3), INT8_C(3),
INT8_C(3), INT8_C(3), INT8_C(3), INT8_C(3), INT8_C(3), INT8_C(3), INT8_C(3), INT8_C(3) },
{ INT8_C(43), INT8_C(43), INT8_C(43), INT8_C(43), INT8_C(43), INT8_C(43), INT8_C(43), INT8_C(43),
INT8_C(43), INT8_C(43), INT8_C(43), INT8_C(43), INT8_C(43), INT8_C(43), INT8_C(43), INT8_C(43) } } },
{ { INT8_C(12), -INT8_C(47) },
{ -INT8_C(17), INT8_C(2)},
{ { INT8_C(12), INT8_C(12), INT8_C(12), INT8_C(12), INT8_C(12), INT8_C(12), INT8_C(12), INT8_C(12),
INT8_C(12), INT8_C(12), INT8_C(12), INT8_C(12), INT8_C(12), INT8_C(12), INT8_C(12), INT8_C(12) },
{ -INT8_C(47), -INT8_C(47), -INT8_C(47), -INT8_C(47), -INT8_C(47), -INT8_C(47), -INT8_C(47), -INT8_C(47),
-INT8_C(47), -INT8_C(47), -INT8_C(47), -INT8_C(47), -INT8_C(47), -INT8_C(47), -INT8_C(47), -INT8_C(47) } } },
{ { -INT8_C(31), -INT8_C(27) },
{ INT8_C(34), -INT8_C(28)},
{ { -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31),
-INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31) },
{ -INT8_C(27), -INT8_C(27), -INT8_C(27), -INT8_C(27), -INT8_C(27), -INT8_C(27), -INT8_C(27), -INT8_C(27),
-INT8_C(27), -INT8_C(27), -INT8_C(27), -INT8_C(27), -INT8_C(27), -INT8_C(27), -INT8_C(27), -INT8_C(27) } } },
{ { -INT8_C(21), -INT8_C(17) },
{ INT8_C(30), -INT8_C(40)},
{ { -INT8_C(21), -INT8_C(21), -INT8_C(21), -INT8_C(21), -INT8_C(21), -INT8_C(21), -INT8_C(21), -INT8_C(21),
-INT8_C(21), -INT8_C(21), -INT8_C(21), -INT8_C(21), -INT8_C(21), -INT8_C(21), -INT8_C(21), -INT8_C(21) },
{ -INT8_C(17), -INT8_C(17), -INT8_C(17), -INT8_C(17), -INT8_C(17), -INT8_C(17), -INT8_C(17), -INT8_C(17),
-INT8_C(17), -INT8_C(17), -INT8_C(17), -INT8_C(17), -INT8_C(17), -INT8_C(17), -INT8_C(17), -INT8_C(17) } } },
{ { INT8_C(26), -INT8_C(31) },
{ INT8_C(18), INT8_C(14)},
{ { INT8_C(26), INT8_C(26), INT8_C(26), INT8_C(26), INT8_C(26), INT8_C(26), INT8_C(26), INT8_C(26),
INT8_C(26), INT8_C(26), INT8_C(26), INT8_C(26), INT8_C(26), INT8_C(26), INT8_C(26), INT8_C(26) },
{ -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31),
-INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31) } } },
{ { INT8_C(47), -INT8_C(31) },
{ -INT8_C(7), INT8_C(20)},
{ { INT8_C(47), INT8_C(47), INT8_C(47), INT8_C(47), INT8_C(47), INT8_C(47), INT8_C(47), INT8_C(47),
INT8_C(47), INT8_C(47), INT8_C(47), INT8_C(47), INT8_C(47), INT8_C(47), INT8_C(47), INT8_C(47) },
{ -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31),
-INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31), -INT8_C(31) } } },
{ { INT8_C(42), -INT8_C(10) },
{ -INT8_C(38), INT8_C(37)},
{ { INT8_C(42), INT8_C(42), INT8_C(42), INT8_C(42), INT8_C(42), INT8_C(42), INT8_C(42), INT8_C(42),
INT8_C(42), INT8_C(42), INT8_C(42), INT8_C(42), INT8_C(42), INT8_C(42), INT8_C(42), INT8_C(42) },
{ -INT8_C(10), -INT8_C(10), -INT8_C(10), -INT8_C(10), -INT8_C(10), -INT8_C(10), -INT8_C(10), -INT8_C(10),
-INT8_C(10), -INT8_C(10), -INT8_C(10), -INT8_C(10), -INT8_C(10), -INT8_C(10), -INT8_C(10), -INT8_C(10) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int8x16x2_t r = simde_vld2q_dup_s8(test_vec[i].a);
simde_int8x16x2_t expected = {
{simde_vld1q_s8(test_vec[i].r[0]), simde_vld1q_s8(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_i8x16(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_i8x16(r.val[1], expected.val[1]);
}
return 0;
}
static int
test_simde_vld2q_dup_s16 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
int16_t a[2];
int16_t unused[2];
int16_t r[2][8];
} test_vec[] = {
{ { INT16_C(2407), -INT16_C(2601) },
{ -INT16_C(3548), INT16_C(1088)},
{ { INT16_C(2407), INT16_C(2407), INT16_C(2407), INT16_C(2407),
INT16_C(2407), INT16_C(2407), INT16_C(2407), INT16_C(2407) },
{ -INT16_C(2601), -INT16_C(2601), -INT16_C(2601), -INT16_C(2601),
-INT16_C(2601), -INT16_C(2601), -INT16_C(2601), -INT16_C(2601) } } },
{ { -INT16_C(4900), INT16_C(3927) },
{ -INT16_C(2400), -INT16_C(4330)},
{ { -INT16_C(4900), -INT16_C(4900), -INT16_C(4900), -INT16_C(4900),
-INT16_C(4900), -INT16_C(4900), -INT16_C(4900), -INT16_C(4900) },
{ INT16_C(3927), INT16_C(3927), INT16_C(3927), INT16_C(3927),
INT16_C(3927), INT16_C(3927), INT16_C(3927), INT16_C(3927) } } },
{ { -INT16_C(564), -INT16_C(1118) },
{ INT16_C(1031), -INT16_C(151)},
{ { -INT16_C(564), -INT16_C(564), -INT16_C(564), -INT16_C(564),
-INT16_C(564), -INT16_C(564), -INT16_C(564), -INT16_C(564) },
{ -INT16_C(1118), -INT16_C(1118), -INT16_C(1118), -INT16_C(1118),
-INT16_C(1118), -INT16_C(1118), -INT16_C(1118), -INT16_C(1118) } } },
{ { INT16_C(1703), INT16_C(2374) },
{ -INT16_C(4899), -INT16_C(3132)},
{ { INT16_C(1703), INT16_C(1703), INT16_C(1703), INT16_C(1703),
INT16_C(1703), INT16_C(1703), INT16_C(1703), INT16_C(1703) },
{ INT16_C(2374), INT16_C(2374), INT16_C(2374), INT16_C(2374),
INT16_C(2374), INT16_C(2374), INT16_C(2374), INT16_C(2374) } } },
{ { INT16_C(4278), INT16_C(4104) },
{ -INT16_C(2252), INT16_C(2469)},
{ { INT16_C(4278), INT16_C(4278), INT16_C(4278), INT16_C(4278),
INT16_C(4278), INT16_C(4278), INT16_C(4278), INT16_C(4278) },
{ INT16_C(4104), INT16_C(4104), INT16_C(4104), INT16_C(4104),
INT16_C(4104), INT16_C(4104), INT16_C(4104), INT16_C(4104) } } },
{ { -INT16_C(1164), -INT16_C(4939) },
{ -INT16_C(3858), INT16_C(4548)},
{ { -INT16_C(1164), -INT16_C(1164), -INT16_C(1164), -INT16_C(1164),
-INT16_C(1164), -INT16_C(1164), -INT16_C(1164), -INT16_C(1164) },
{ -INT16_C(4939), -INT16_C(4939), -INT16_C(4939), -INT16_C(4939),
-INT16_C(4939), -INT16_C(4939), -INT16_C(4939), -INT16_C(4939) } } },
{ { -INT16_C(3397), INT16_C(3662) },
{ INT16_C(4517), -INT16_C(1655)},
{ { -INT16_C(3397), -INT16_C(3397), -INT16_C(3397), -INT16_C(3397),
-INT16_C(3397), -INT16_C(3397), -INT16_C(3397), -INT16_C(3397) },
{ INT16_C(3662), INT16_C(3662), INT16_C(3662), INT16_C(3662),
INT16_C(3662), INT16_C(3662), INT16_C(3662), INT16_C(3662) } } },
{ { -INT16_C(3636), INT16_C(1082) },
{ -INT16_C(3186), INT16_C(4513)},
{ { -INT16_C(3636), -INT16_C(3636), -INT16_C(3636), -INT16_C(3636),
-INT16_C(3636), -INT16_C(3636), -INT16_C(3636), -INT16_C(3636) },
{ INT16_C(1082), INT16_C(1082), INT16_C(1082), INT16_C(1082),
INT16_C(1082), INT16_C(1082), INT16_C(1082), INT16_C(1082) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int16x8x2_t r = simde_vld2q_dup_s16(test_vec[i].a);
simde_int16x8x2_t expected = {
{simde_vld1q_s16(test_vec[i].r[0]), simde_vld1q_s16(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_i16x8(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_i16x8(r.val[1], expected.val[1]);
}
return 0;
}
static int
test_simde_vld2q_dup_s32 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
int32_t a[2];
int32_t unused[2];
int32_t r[2][4];
} test_vec[] = {
{ { -INT32_C(320215), -INT32_C(128824) },
{ -INT32_C(84416), INT32_C(173924)},
{ { -INT32_C(320215), -INT32_C(320215), -INT32_C(320215), -INT32_C(320215) },
{ -INT32_C(128824), -INT32_C(128824), -INT32_C(128824), -INT32_C(128824) } } },
{ { -INT32_C(352719), -INT32_C(124530) },
{ INT32_C(469272), -INT32_C(259438)},
{ { -INT32_C(352719), -INT32_C(352719), -INT32_C(352719), -INT32_C(352719) },
{ -INT32_C(124530), -INT32_C(124530), -INT32_C(124530), -INT32_C(124530) } } },
{ { INT32_C(26840), -INT32_C(67706) },
{ INT32_C(306244), -INT32_C(394994)},
{ { INT32_C(26840), INT32_C(26840), INT32_C(26840), INT32_C(26840) },
{ -INT32_C(67706), -INT32_C(67706), -INT32_C(67706), -INT32_C(67706) } } },
{ { INT32_C(386819), -INT32_C(52375) },
{ -INT32_C(221686), INT32_C(458634)},
{ { INT32_C(386819), INT32_C(386819), INT32_C(386819), INT32_C(386819) },
{ -INT32_C(52375), -INT32_C(52375), -INT32_C(52375), -INT32_C(52375) } } },
{ { INT32_C(71692), -INT32_C(6908) },
{ -INT32_C(241460), INT32_C(376961)},
{ { INT32_C(71692), INT32_C(71692), INT32_C(71692), INT32_C(71692) },
{ -INT32_C(6908), -INT32_C(6908), -INT32_C(6908), -INT32_C(6908) } } },
{ { -INT32_C(153484), INT32_C(220056) },
{ INT32_C(497409), -INT32_C(429618)},
{ { -INT32_C(153484), -INT32_C(153484), -INT32_C(153484), -INT32_C(153484) },
{ INT32_C(220056), INT32_C(220056), INT32_C(220056), INT32_C(220056) } } },
{ { INT32_C(445458), -INT32_C(422069) },
{ -INT32_C(473699), -INT32_C(169167)},
{ { INT32_C(445458), INT32_C(445458), INT32_C(445458), INT32_C(445458) },
{ -INT32_C(422069), -INT32_C(422069), -INT32_C(422069), -INT32_C(422069) } } },
{ { INT32_C(142131), -INT32_C(97847) },
{ -INT32_C(394989), -INT32_C(267336)},
{ { INT32_C(142131), INT32_C(142131), INT32_C(142131), INT32_C(142131) },
{ -INT32_C(97847), -INT32_C(97847), -INT32_C(97847), -INT32_C(97847) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int32x4x2_t r = simde_vld2q_dup_s32(test_vec[i].a);
simde_int32x4x2_t expected = {
{simde_vld1q_s32(test_vec[i].r[0]), simde_vld1q_s32(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_i32x4(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_i32x4(r.val[1], expected.val[1]);
}
return 0;
}
static int
test_simde_vld2q_dup_s64 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
int64_t a[2];
int64_t unused[2];
int64_t r[2][2];
} test_vec[] = {
{ { -INT64_C(15235051), -INT64_C(30008301) },
{ INT64_C(31964111), -INT64_C(24641971)},
{ { -INT64_C(15235051), -INT64_C(15235051) },
{ -INT64_C(30008301), -INT64_C(30008301) } } },
{ { -INT64_C(16181149), INT64_C(3841670) },
{ -INT64_C(27973863), INT64_C(39259391)},
{ { -INT64_C(16181149), -INT64_C(16181149) },
{ INT64_C(3841670), INT64_C(3841670) } } },
{ { INT64_C(48064682), INT64_C(41855966) },
{ -INT64_C(10570224), INT64_C(38329774)},
{ { INT64_C(48064682), INT64_C(48064682) },
{ INT64_C(41855966), INT64_C(41855966) } } },
{ { -INT64_C(90740), INT64_C(37361034) },
{ INT64_C(44464818), INT64_C(15207495)},
{ { -INT64_C(90740), -INT64_C(90740) },
{ INT64_C(37361034), INT64_C(37361034) } } },
{ { INT64_C(21453155), INT64_C(22061973) },
{ -INT64_C(31158130), INT64_C(38690033)},
{ { INT64_C(21453155), INT64_C(21453155) },
{ INT64_C(22061973), INT64_C(22061973) } } },
{ { -INT64_C(21071153), -INT64_C(25469385) },
{ INT64_C(14847780), INT64_C(9714022)},
{ { -INT64_C(21071153), -INT64_C(21071153) },
{ -INT64_C(25469385), -INT64_C(25469385) } } },
{ { -INT64_C(21428279), -INT64_C(33446233) },
{ INT64_C(33284182), -INT64_C(519364)},
{ { -INT64_C(21428279), -INT64_C(21428279) },
{ -INT64_C(33446233), -INT64_C(33446233) } } },
{ { INT64_C(40007009), INT64_C(23627817) },
{ INT64_C(29955083), INT64_C(41266286)},
{ { INT64_C(40007009), INT64_C(40007009) },
{ INT64_C(23627817), INT64_C(23627817) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_int64x2x2_t r = simde_vld2q_dup_s64(test_vec[i].a);
simde_int64x2x2_t expected = {
{simde_vld1q_s64(test_vec[i].r[0]), simde_vld1q_s64(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_i64x2(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_i64x2(r.val[1], expected.val[1]);
}
return 0;
}
static int
test_simde_vld2q_dup_u8 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
uint8_t a[2];
uint8_t unused[2];
uint8_t r[2][16];
} test_vec[] = {
{ { UINT8_C(96), UINT8_C(23) },
{ UINT8_C(44), UINT8_C(91)},
{ { UINT8_C(96), UINT8_C(96), UINT8_C(96), UINT8_C(96), UINT8_C(96), UINT8_C(96), UINT8_C(96), UINT8_C(96),
UINT8_C(96), UINT8_C(96), UINT8_C(96), UINT8_C(96), UINT8_C(96), UINT8_C(96), UINT8_C(96), UINT8_C(96) },
{ UINT8_C(23), UINT8_C(23), UINT8_C(23), UINT8_C(23), UINT8_C(23), UINT8_C(23), UINT8_C(23), UINT8_C(23),
UINT8_C(23), UINT8_C(23), UINT8_C(23), UINT8_C(23), UINT8_C(23), UINT8_C(23), UINT8_C(23), UINT8_C(23) } } },
{ { UINT8_C(53), UINT8_C(10) },
{ UINT8_C(65), UINT8_C(22)},
{ { UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53),
UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53) },
{ UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10),
UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10) } } },
{ { UINT8_C(83), UINT8_C(3) },
{ UINT8_C(50), UINT8_C(69)},
{ { UINT8_C(83), UINT8_C(83), UINT8_C(83), UINT8_C(83), UINT8_C(83), UINT8_C(83), UINT8_C(83), UINT8_C(83),
UINT8_C(83), UINT8_C(83), UINT8_C(83), UINT8_C(83), UINT8_C(83), UINT8_C(83), UINT8_C(83), UINT8_C(83) },
{ UINT8_C(3), UINT8_C(3), UINT8_C(3), UINT8_C(3), UINT8_C(3), UINT8_C(3), UINT8_C(3), UINT8_C(3),
UINT8_C(3), UINT8_C(3), UINT8_C(3), UINT8_C(3), UINT8_C(3), UINT8_C(3), UINT8_C(3), UINT8_C(3) } } },
{ { UINT8_C(48), UINT8_C(62) },
{ UINT8_C(64), UINT8_C(80)},
{ { UINT8_C(48), UINT8_C(48), UINT8_C(48), UINT8_C(48), UINT8_C(48), UINT8_C(48), UINT8_C(48), UINT8_C(48),
UINT8_C(48), UINT8_C(48), UINT8_C(48), UINT8_C(48), UINT8_C(48), UINT8_C(48), UINT8_C(48), UINT8_C(48) },
{ UINT8_C(62), UINT8_C(62), UINT8_C(62), UINT8_C(62), UINT8_C(62), UINT8_C(62), UINT8_C(62), UINT8_C(62),
UINT8_C(62), UINT8_C(62), UINT8_C(62), UINT8_C(62), UINT8_C(62), UINT8_C(62), UINT8_C(62), UINT8_C(62) } } },
{ { UINT8_C(33), UINT8_C(39) },
{ UINT8_C(0), UINT8_C(10)},
{ { UINT8_C(33), UINT8_C(33), UINT8_C(33), UINT8_C(33), UINT8_C(33), UINT8_C(33), UINT8_C(33), UINT8_C(33),
UINT8_C(33), UINT8_C(33), UINT8_C(33), UINT8_C(33), UINT8_C(33), UINT8_C(33), UINT8_C(33), UINT8_C(33) },
{ UINT8_C(39), UINT8_C(39), UINT8_C(39), UINT8_C(39), UINT8_C(39), UINT8_C(39), UINT8_C(39), UINT8_C(39),
UINT8_C(39), UINT8_C(39), UINT8_C(39), UINT8_C(39), UINT8_C(39), UINT8_C(39), UINT8_C(39), UINT8_C(39) } } },
{ { UINT8_C(53), UINT8_C(22) },
{ UINT8_C(79), UINT8_C(9)},
{ { UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53),
UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53), UINT8_C(53) },
{ UINT8_C(22), UINT8_C(22), UINT8_C(22), UINT8_C(22), UINT8_C(22), UINT8_C(22), UINT8_C(22), UINT8_C(22),
UINT8_C(22), UINT8_C(22), UINT8_C(22), UINT8_C(22), UINT8_C(22), UINT8_C(22), UINT8_C(22), UINT8_C(22) } } },
{ { UINT8_C(54), UINT8_C(10) },
{ UINT8_C(3), UINT8_C(83)},
{ { UINT8_C(54), UINT8_C(54), UINT8_C(54), UINT8_C(54), UINT8_C(54), UINT8_C(54), UINT8_C(54), UINT8_C(54),
UINT8_C(54), UINT8_C(54), UINT8_C(54), UINT8_C(54), UINT8_C(54), UINT8_C(54), UINT8_C(54), UINT8_C(54) },
{ UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10),
UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10), UINT8_C(10) } } },
{ { UINT8_C(9), UINT8_C(80) },
{ UINT8_C(74), UINT8_C(55)},
{ { UINT8_C(9), UINT8_C(9), UINT8_C(9), UINT8_C(9), UINT8_C(9), UINT8_C(9), UINT8_C(9), UINT8_C(9),
UINT8_C(9), UINT8_C(9), UINT8_C(9), UINT8_C(9), UINT8_C(9), UINT8_C(9), UINT8_C(9), UINT8_C(9) },
{ UINT8_C(80), UINT8_C(80), UINT8_C(80), UINT8_C(80), UINT8_C(80), UINT8_C(80), UINT8_C(80), UINT8_C(80),
UINT8_C(80), UINT8_C(80), UINT8_C(80), UINT8_C(80), UINT8_C(80), UINT8_C(80), UINT8_C(80), UINT8_C(80) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint8x16x2_t r = simde_vld2q_dup_u8(test_vec[i].a);
simde_uint8x16x2_t expected = {
{simde_vld1q_u8(test_vec[i].r[0]), simde_vld1q_u8(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_u8x16(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_u8x16(r.val[1], expected.val[1]);
}
return 0;
}
static int
test_simde_vld2q_dup_u16 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
uint16_t a[2];
uint16_t unused[2];
uint16_t r[2][8];
} test_vec[] = {
{ { UINT16_C(6058), UINT16_C(6273) },
{ UINT16_C(6301), UINT16_C(7423)},
{ { UINT16_C(6058), UINT16_C(6058), UINT16_C(6058), UINT16_C(6058),
UINT16_C(6058), UINT16_C(6058), UINT16_C(6058), UINT16_C(6058) },
{ UINT16_C(6273), UINT16_C(6273), UINT16_C(6273), UINT16_C(6273),
UINT16_C(6273), UINT16_C(6273), UINT16_C(6273), UINT16_C(6273) } } },
{ { UINT16_C(7176), UINT16_C(4578) },
{ UINT16_C(9644), UINT16_C(9994)},
{ { UINT16_C(7176), UINT16_C(7176), UINT16_C(7176), UINT16_C(7176),
UINT16_C(7176), UINT16_C(7176), UINT16_C(7176), UINT16_C(7176) },
{ UINT16_C(4578), UINT16_C(4578), UINT16_C(4578), UINT16_C(4578),
UINT16_C(4578), UINT16_C(4578), UINT16_C(4578), UINT16_C(4578) } } },
{ { UINT16_C(7902), UINT16_C(1902) },
{ UINT16_C(7534), UINT16_C(3814)},
{ { UINT16_C(7902), UINT16_C(7902), UINT16_C(7902), UINT16_C(7902),
UINT16_C(7902), UINT16_C(7902), UINT16_C(7902), UINT16_C(7902) },
{ UINT16_C(1902), UINT16_C(1902), UINT16_C(1902), UINT16_C(1902),
UINT16_C(1902), UINT16_C(1902), UINT16_C(1902), UINT16_C(1902) } } },
{ { UINT16_C(8498), UINT16_C(3391) },
{ UINT16_C(2384), UINT16_C(829)},
{ { UINT16_C(8498), UINT16_C(8498), UINT16_C(8498), UINT16_C(8498),
UINT16_C(8498), UINT16_C(8498), UINT16_C(8498), UINT16_C(8498) },
{ UINT16_C(3391), UINT16_C(3391), UINT16_C(3391), UINT16_C(3391),
UINT16_C(3391), UINT16_C(3391), UINT16_C(3391), UINT16_C(3391) } } },
{ { UINT16_C(5757), UINT16_C(7453) },
{ UINT16_C(3497), UINT16_C(4212)},
{ { UINT16_C(5757), UINT16_C(5757), UINT16_C(5757), UINT16_C(5757),
UINT16_C(5757), UINT16_C(5757), UINT16_C(5757), UINT16_C(5757) },
{ UINT16_C(7453), UINT16_C(7453), UINT16_C(7453), UINT16_C(7453),
UINT16_C(7453), UINT16_C(7453), UINT16_C(7453), UINT16_C(7453) } } },
{ { UINT16_C(2420), UINT16_C(5818) },
{ UINT16_C(6753), UINT16_C(5749)},
{ { UINT16_C(2420), UINT16_C(2420), UINT16_C(2420), UINT16_C(2420),
UINT16_C(2420), UINT16_C(2420), UINT16_C(2420), UINT16_C(2420) },
{ UINT16_C(5818), UINT16_C(5818), UINT16_C(5818), UINT16_C(5818),
UINT16_C(5818), UINT16_C(5818), UINT16_C(5818), UINT16_C(5818) } } },
{ { UINT16_C(3143), UINT16_C(6838) },
{ UINT16_C(8323), UINT16_C(2227)},
{ { UINT16_C(3143), UINT16_C(3143), UINT16_C(3143), UINT16_C(3143),
UINT16_C(3143), UINT16_C(3143), UINT16_C(3143), UINT16_C(3143) },
{ UINT16_C(6838), UINT16_C(6838), UINT16_C(6838), UINT16_C(6838),
UINT16_C(6838), UINT16_C(6838), UINT16_C(6838), UINT16_C(6838) } } },
{ { UINT16_C(6156), UINT16_C(8714) },
{ UINT16_C(9846), UINT16_C(2394)},
{ { UINT16_C(6156), UINT16_C(6156), UINT16_C(6156), UINT16_C(6156),
UINT16_C(6156), UINT16_C(6156), UINT16_C(6156), UINT16_C(6156) },
{ UINT16_C(8714), UINT16_C(8714), UINT16_C(8714), UINT16_C(8714),
UINT16_C(8714), UINT16_C(8714), UINT16_C(8714), UINT16_C(8714) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint16x8x2_t r = simde_vld2q_dup_u16(test_vec[i].a);
simde_uint16x8x2_t expected = {
{simde_vld1q_u16(test_vec[i].r[0]), simde_vld1q_u16(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_u16x8(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_u16x8(r.val[1], expected.val[1]);
}
return 0;
}
static int
test_simde_vld2q_dup_u32 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
uint32_t a[2];
uint32_t unused[2];
uint32_t r[2][4];
} test_vec[] = {
{ { UINT32_C(536106), UINT32_C(877508) },
{ UINT32_C(4679840), UINT32_C(2116123)},
{ { UINT32_C(536106), UINT32_C(536106), UINT32_C(536106), UINT32_C(536106) },
{ UINT32_C(877508), UINT32_C(877508), UINT32_C(877508), UINT32_C(877508) } } },
{ { UINT32_C(2745092), UINT32_C(2480848) },
{ UINT32_C(6021702), UINT32_C(5477534)},
{ { UINT32_C(2745092), UINT32_C(2745092), UINT32_C(2745092), UINT32_C(2745092) },
{ UINT32_C(2480848), UINT32_C(2480848), UINT32_C(2480848), UINT32_C(2480848) } } },
{ { UINT32_C(4890262), UINT32_C(9837780) },
{ UINT32_C(2908038), UINT32_C(8114742)},
{ { UINT32_C(4890262), UINT32_C(4890262), UINT32_C(4890262), UINT32_C(4890262) },
{ UINT32_C(9837780), UINT32_C(9837780), UINT32_C(9837780), UINT32_C(9837780) } } },
{ { UINT32_C(6798984), UINT32_C(3169873) },
{ UINT32_C(5423024), UINT32_C(204472)},
{ { UINT32_C(6798984), UINT32_C(6798984), UINT32_C(6798984), UINT32_C(6798984) },
{ UINT32_C(3169873), UINT32_C(3169873), UINT32_C(3169873), UINT32_C(3169873) } } },
{ { UINT32_C(5642096), UINT32_C(2938870) },
{ UINT32_C(6387732), UINT32_C(8027323)},
{ { UINT32_C(5642096), UINT32_C(5642096), UINT32_C(5642096), UINT32_C(5642096) },
{ UINT32_C(2938870), UINT32_C(2938870), UINT32_C(2938870), UINT32_C(2938870) } } },
{ { UINT32_C(992304), UINT32_C(4886731) },
{ UINT32_C(6516958), UINT32_C(303121)},
{ { UINT32_C(992304), UINT32_C(992304), UINT32_C(992304), UINT32_C(992304) },
{ UINT32_C(4886731), UINT32_C(4886731), UINT32_C(4886731), UINT32_C(4886731) } } },
{ { UINT32_C(5616151), UINT32_C(6074604) },
{ UINT32_C(2135742), UINT32_C(2607255)},
{ { UINT32_C(5616151), UINT32_C(5616151), UINT32_C(5616151), UINT32_C(5616151) },
{ UINT32_C(6074604), UINT32_C(6074604), UINT32_C(6074604), UINT32_C(6074604) } } },
{ { UINT32_C(5796703), UINT32_C(4718965) },
{ UINT32_C(8894279), UINT32_C(5823775)},
{ { UINT32_C(5796703), UINT32_C(5796703), UINT32_C(5796703), UINT32_C(5796703) },
{ UINT32_C(4718965), UINT32_C(4718965), UINT32_C(4718965), UINT32_C(4718965) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint32x4x2_t r = simde_vld2q_dup_u32(test_vec[i].a);
simde_uint32x4x2_t expected = {
{simde_vld1q_u32(test_vec[i].r[0]), simde_vld1q_u32(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_u32x4(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_u32x4(r.val[1], expected.val[1]);
}
return 0;
}
static int
test_simde_vld2q_dup_u64 (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
uint64_t a[2];
uint64_t unused[2];
uint64_t r[2][2];
} test_vec[] = {
{ { UINT64_C(706048852), UINT64_C(383443850) },
{ UINT64_C(285705054), UINT64_C(822983505)},
{ { UINT64_C(706048852), UINT64_C(706048852) },
{ UINT64_C(383443850), UINT64_C(383443850) } } },
{ { UINT64_C(421014862), UINT64_C(906802850) },
{ UINT64_C(817754491), UINT64_C(29691523)},
{ { UINT64_C(421014862), UINT64_C(421014862) },
{ UINT64_C(906802850), UINT64_C(906802850) } } },
{ { UINT64_C(221353308), UINT64_C(322577141) },
{ UINT64_C(995600522), UINT64_C(297974478)},
{ { UINT64_C(221353308), UINT64_C(221353308) },
{ UINT64_C(322577141), UINT64_C(322577141) } } },
{ { UINT64_C(663578487), UINT64_C(286997839) },
{ UINT64_C(243168275), UINT64_C(577857697)},
{ { UINT64_C(663578487), UINT64_C(663578487) },
{ UINT64_C(286997839), UINT64_C(286997839) } } },
{ { UINT64_C(593025173), UINT64_C(964665381) },
{ UINT64_C(503395467), UINT64_C(204960526)},
{ { UINT64_C(593025173), UINT64_C(593025173) },
{ UINT64_C(964665381), UINT64_C(964665381) } } },
{ { UINT64_C(962157997), UINT64_C(598569861) },
{ UINT64_C(705698189), UINT64_C(932957687)},
{ { UINT64_C(962157997), UINT64_C(962157997) },
{ UINT64_C(598569861), UINT64_C(598569861) } } },
{ { UINT64_C(486609766), UINT64_C(401817412) },
{ UINT64_C(317463497), UINT64_C(368423896)},
{ { UINT64_C(486609766), UINT64_C(486609766) },
{ UINT64_C(401817412), UINT64_C(401817412) } } },
{ { UINT64_C(603061297), UINT64_C(721346221) },
{ UINT64_C(633243906), UINT64_C(434342421)},
{ { UINT64_C(603061297), UINT64_C(603061297) },
{ UINT64_C(721346221), UINT64_C(721346221) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_uint64x2x2_t r = simde_vld2q_dup_u64(test_vec[i].a);
simde_uint64x2x2_t expected = {
{simde_vld1q_u64(test_vec[i].r[0]), simde_vld1q_u64(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_u64x2(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_u64x2(r.val[1], expected.val[1]);
}
return 0;
}
static int
test_simde_vld2_dup_p8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
simde_poly8_t a[2];
simde_poly8_t unused[2];
simde_poly8_t r[2][8];
} test_vec[] = {
{ { SIMDE_POLY8_C(94), SIMDE_POLY8_C(65) },
{ SIMDE_POLY8_C(68), SIMDE_POLY8_C(15)},
{ { SIMDE_POLY8_C(94), SIMDE_POLY8_C(94), SIMDE_POLY8_C(94), SIMDE_POLY8_C(94),
SIMDE_POLY8_C(94), SIMDE_POLY8_C(94), SIMDE_POLY8_C(94), SIMDE_POLY8_C(94) },
{ SIMDE_POLY8_C(65), SIMDE_POLY8_C(65), SIMDE_POLY8_C(65), SIMDE_POLY8_C(65),
SIMDE_POLY8_C(65), SIMDE_POLY8_C(65), SIMDE_POLY8_C(65), SIMDE_POLY8_C(65) } } },
{ { SIMDE_POLY8_C(89), SIMDE_POLY8_C(88) },
{ SIMDE_POLY8_C(87), SIMDE_POLY8_C(56)},
{ { SIMDE_POLY8_C(89), SIMDE_POLY8_C(89), SIMDE_POLY8_C(89), SIMDE_POLY8_C(89),
SIMDE_POLY8_C(89), SIMDE_POLY8_C(89), SIMDE_POLY8_C(89), SIMDE_POLY8_C(89) },
{ SIMDE_POLY8_C(88), SIMDE_POLY8_C(88), SIMDE_POLY8_C(88), SIMDE_POLY8_C(88),
SIMDE_POLY8_C(88), SIMDE_POLY8_C(88), SIMDE_POLY8_C(88), SIMDE_POLY8_C(88) } } },
{ { SIMDE_POLY8_C(28), SIMDE_POLY8_C(34) },
{ SIMDE_POLY8_C(99), SIMDE_POLY8_C(65)},
{ { SIMDE_POLY8_C(28), SIMDE_POLY8_C(28), SIMDE_POLY8_C(28), SIMDE_POLY8_C(28),
SIMDE_POLY8_C(28), SIMDE_POLY8_C(28), SIMDE_POLY8_C(28), SIMDE_POLY8_C(28) },
{ SIMDE_POLY8_C(34), SIMDE_POLY8_C(34), SIMDE_POLY8_C(34), SIMDE_POLY8_C(34),
SIMDE_POLY8_C(34), SIMDE_POLY8_C(34), SIMDE_POLY8_C(34), SIMDE_POLY8_C(34) } } },
{ { SIMDE_POLY8_C(44), SIMDE_POLY8_C(68) },
{ SIMDE_POLY8_C(10), SIMDE_POLY8_C(26)},
{ { SIMDE_POLY8_C(44), SIMDE_POLY8_C(44), SIMDE_POLY8_C(44), SIMDE_POLY8_C(44),
SIMDE_POLY8_C(44), SIMDE_POLY8_C(44), SIMDE_POLY8_C(44), SIMDE_POLY8_C(44) },
{ SIMDE_POLY8_C(68), SIMDE_POLY8_C(68), SIMDE_POLY8_C(68), SIMDE_POLY8_C(68),
SIMDE_POLY8_C(68), SIMDE_POLY8_C(68), SIMDE_POLY8_C(68), SIMDE_POLY8_C(68) } } },
{ { SIMDE_POLY8_C(47), SIMDE_POLY8_C(62) },
{ SIMDE_POLY8_C(86), SIMDE_POLY8_C(81)},
{ { SIMDE_POLY8_C(47), SIMDE_POLY8_C(47), SIMDE_POLY8_C(47), SIMDE_POLY8_C(47),
SIMDE_POLY8_C(47), SIMDE_POLY8_C(47), SIMDE_POLY8_C(47), SIMDE_POLY8_C(47) },
{ SIMDE_POLY8_C(62), SIMDE_POLY8_C(62), SIMDE_POLY8_C(62), SIMDE_POLY8_C(62),
SIMDE_POLY8_C(62), SIMDE_POLY8_C(62), SIMDE_POLY8_C(62), SIMDE_POLY8_C(62) } } },
{ { SIMDE_POLY8_C(53), SIMDE_POLY8_C(60) },
{ SIMDE_POLY8_C(43), SIMDE_POLY8_C(84)},
{ { SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53),
SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53) },
{ SIMDE_POLY8_C(60), SIMDE_POLY8_C(60), SIMDE_POLY8_C(60), SIMDE_POLY8_C(60),
SIMDE_POLY8_C(60), SIMDE_POLY8_C(60), SIMDE_POLY8_C(60), SIMDE_POLY8_C(60) } } },
{ { SIMDE_POLY8_C(15), SIMDE_POLY8_C(10) },
{ SIMDE_POLY8_C(26), SIMDE_POLY8_C(7)},
{ { SIMDE_POLY8_C(15), SIMDE_POLY8_C(15), SIMDE_POLY8_C(15), SIMDE_POLY8_C(15),
SIMDE_POLY8_C(15), SIMDE_POLY8_C(15), SIMDE_POLY8_C(15), SIMDE_POLY8_C(15) },
{ SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10),
SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10) } } },
{ { SIMDE_POLY8_C(64), SIMDE_POLY8_C(33) },
{ SIMDE_POLY8_C(81), SIMDE_POLY8_C(53)},
{ { SIMDE_POLY8_C(64), SIMDE_POLY8_C(64), SIMDE_POLY8_C(64), SIMDE_POLY8_C(64),
SIMDE_POLY8_C(64), SIMDE_POLY8_C(64), SIMDE_POLY8_C(64), SIMDE_POLY8_C(64) },
{ SIMDE_POLY8_C(33), SIMDE_POLY8_C(33), SIMDE_POLY8_C(33), SIMDE_POLY8_C(33),
SIMDE_POLY8_C(33), SIMDE_POLY8_C(33), SIMDE_POLY8_C(33), SIMDE_POLY8_C(33) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_poly8x8x2_t r = simde_vld2_dup_p8(test_vec[i].a);
simde_poly8x8x2_t expected = {
{simde_vld1_p8(test_vec[i].r[0]), simde_vld1_p8(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_p8x8(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_p8x8(r.val[1], expected.val[1]);
}
return 0;
#else
for (int i = 0 ; i < 4 ; i++) {
simde_poly8_t a[2];
simde_poly8_t unused[2];
simde_poly8x8x2_t r;
simde_test_codegen_random_memory(2, HEDLEY_REINTERPRET_CAST(uint8_t*, a));
simde_test_codegen_random_memory(2, HEDLEY_REINTERPRET_CAST(uint8_t*, unused));
r = simde_vld2_dup_p8(a);
// Random buffer between pointer to load and expected results to check for
// loading out of bounds.
simde_test_codegen_write_vp8(2, 2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_vp8(2, 2, unused, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_p8x8x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vld2_dup_p16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
simde_poly16_t a[2];
simde_poly16_t unused[2];
simde_poly16_t r[2][4];
} test_vec[] = {
{ { SIMDE_POLY16_C(7277), SIMDE_POLY16_C(6201) },
{ SIMDE_POLY16_C(9680), SIMDE_POLY16_C(3544)},
{ { SIMDE_POLY16_C(7277), SIMDE_POLY16_C(7277), SIMDE_POLY16_C(7277), SIMDE_POLY16_C(7277) },
{ SIMDE_POLY16_C(6201), SIMDE_POLY16_C(6201), SIMDE_POLY16_C(6201), SIMDE_POLY16_C(6201) } } },
{ { SIMDE_POLY16_C(2944), SIMDE_POLY16_C(5592) },
{ SIMDE_POLY16_C(9662), SIMDE_POLY16_C(4267)},
{ { SIMDE_POLY16_C(2944), SIMDE_POLY16_C(2944), SIMDE_POLY16_C(2944), SIMDE_POLY16_C(2944) },
{ SIMDE_POLY16_C(5592), SIMDE_POLY16_C(5592), SIMDE_POLY16_C(5592), SIMDE_POLY16_C(5592) } } },
{ { SIMDE_POLY16_C(8742), SIMDE_POLY16_C(6060) },
{ SIMDE_POLY16_C(3824), SIMDE_POLY16_C(2303)},
{ { SIMDE_POLY16_C(8742), SIMDE_POLY16_C(8742), SIMDE_POLY16_C(8742), SIMDE_POLY16_C(8742) },
{ SIMDE_POLY16_C(6060), SIMDE_POLY16_C(6060), SIMDE_POLY16_C(6060), SIMDE_POLY16_C(6060) } } },
{ { SIMDE_POLY16_C(9964), SIMDE_POLY16_C(5944) },
{ SIMDE_POLY16_C(4767), SIMDE_POLY16_C(7055)},
{ { SIMDE_POLY16_C(9964), SIMDE_POLY16_C(9964), SIMDE_POLY16_C(9964), SIMDE_POLY16_C(9964) },
{ SIMDE_POLY16_C(5944), SIMDE_POLY16_C(5944), SIMDE_POLY16_C(5944), SIMDE_POLY16_C(5944) } } },
{ { SIMDE_POLY16_C(6764), SIMDE_POLY16_C(915) },
{ SIMDE_POLY16_C(2455), SIMDE_POLY16_C(4422)},
{ { SIMDE_POLY16_C(6764), SIMDE_POLY16_C(6764), SIMDE_POLY16_C(6764), SIMDE_POLY16_C(6764) },
{ SIMDE_POLY16_C(915), SIMDE_POLY16_C(915), SIMDE_POLY16_C(915), SIMDE_POLY16_C(915) } } },
{ { SIMDE_POLY16_C(3051), SIMDE_POLY16_C(2687) },
{ SIMDE_POLY16_C(3858), SIMDE_POLY16_C(7628)},
{ { SIMDE_POLY16_C(3051), SIMDE_POLY16_C(3051), SIMDE_POLY16_C(3051), SIMDE_POLY16_C(3051) },
{ SIMDE_POLY16_C(2687), SIMDE_POLY16_C(2687), SIMDE_POLY16_C(2687), SIMDE_POLY16_C(2687) } } },
{ { SIMDE_POLY16_C(2343), SIMDE_POLY16_C(2688) },
{ SIMDE_POLY16_C(3196), SIMDE_POLY16_C(4003)},
{ { SIMDE_POLY16_C(2343), SIMDE_POLY16_C(2343), SIMDE_POLY16_C(2343), SIMDE_POLY16_C(2343) },
{ SIMDE_POLY16_C(2688), SIMDE_POLY16_C(2688), SIMDE_POLY16_C(2688), SIMDE_POLY16_C(2688) } } },
{ { SIMDE_POLY16_C(6885), SIMDE_POLY16_C(4075) },
{ SIMDE_POLY16_C(1096), SIMDE_POLY16_C(2437)},
{ { SIMDE_POLY16_C(6885), SIMDE_POLY16_C(6885), SIMDE_POLY16_C(6885), SIMDE_POLY16_C(6885) },
{ SIMDE_POLY16_C(4075), SIMDE_POLY16_C(4075), SIMDE_POLY16_C(4075), SIMDE_POLY16_C(4075) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_poly16x4x2_t r = simde_vld2_dup_p16(test_vec[i].a);
simde_poly16x4x2_t expected = {
{simde_vld1_p16(test_vec[i].r[0]), simde_vld1_p16(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_p16x4(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_p16x4(r.val[1], expected.val[1]);
}
return 0;
#else
for (int i = 0 ; i < 4 ; i++) {
simde_poly16_t a[2];
simde_poly16_t unused[2];
simde_poly16x4x2_t r;
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, a));
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, unused));
r = simde_vld2_dup_p16(a);
// Random buffer between pointer to load and expected results to check for
// loading out of bounds.
simde_test_codegen_write_vp16(2, 2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_vp16(2, 2, unused, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_p16x4x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vld2_dup_p64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
simde_poly64_t a[2];
simde_poly64_t unused[2];
simde_poly64_t r[2][1];
} test_vec[] = {
{ { SIMDE_POLY64_C(12740477471170781294), SIMDE_POLY64_C( 1202653309370274056) },
{ SIMDE_POLY64_C( 3578144166166679559), SIMDE_POLY64_C( 3824348584412100321) },
{ { SIMDE_POLY64_C(12740477471170781294) },
{ SIMDE_POLY64_C( 1202653309370274056) } },
},
{ { SIMDE_POLY64_C( 6891094942518022704), SIMDE_POLY64_C( 5658821612954949799) },
{ SIMDE_POLY64_C( 708826733701826684), SIMDE_POLY64_C(18227356099470753016) },
{ { SIMDE_POLY64_C( 6891094942518022704) },
{ SIMDE_POLY64_C( 5658821612954949799) } },
},
{ { SIMDE_POLY64_C(17968113820134947749), SIMDE_POLY64_C( 9132446833727034920) },
{ SIMDE_POLY64_C(10390641722217682433), SIMDE_POLY64_C(16986807340681376757) },
{ { SIMDE_POLY64_C(17968113820134947749) },
{ SIMDE_POLY64_C( 9132446833727034920) } },
},
{ { SIMDE_POLY64_C( 7190351104749054846), SIMDE_POLY64_C( 3718440788214036761) },
{ SIMDE_POLY64_C(12397722267937455588), SIMDE_POLY64_C( 2194145411926481985) },
{ { SIMDE_POLY64_C( 7190351104749054846) },
{ SIMDE_POLY64_C( 3718440788214036761) } },
},
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_poly64x1x2_t r = simde_vld2_dup_p64(test_vec[i].a);
simde_poly64x1x2_t expected = {
{simde_vld1_p64(test_vec[i].r[0]), simde_vld1_p64(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_p64x1(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_p64x1(r.val[1], expected.val[1]);
}
return 0;
#else
for (int i = 0 ; i < 4 ; i++) {
simde_poly64_t a[2];
simde_poly64_t unused[2];
simde_poly64x1x2_t r;
simde_test_codegen_random_memory(16, HEDLEY_REINTERPRET_CAST(uint8_t*, a));
simde_test_codegen_random_memory(16, HEDLEY_REINTERPRET_CAST(uint8_t*, unused));
r = simde_vld2_dup_p64(a);
// Random buffer between pointer to load and expected results to check for
// loading out of bounds.
simde_test_codegen_write_vp64(2, 2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_vp64(2, 2, unused, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_p64x1x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vld2q_dup_p8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
SIMDE_ALIGN_TO_16 simde_poly8_t a[2];
SIMDE_ALIGN_TO_16 simde_poly8_t unused[2];
SIMDE_ALIGN_TO_16 simde_poly8_t r[2][16];
} test_vec[] = {
{ { SIMDE_POLY8_C(96), SIMDE_POLY8_C(23) },
{ SIMDE_POLY8_C(44), SIMDE_POLY8_C(91)},
{ { SIMDE_POLY8_C(96), SIMDE_POLY8_C(96), SIMDE_POLY8_C(96), SIMDE_POLY8_C(96), SIMDE_POLY8_C(96), SIMDE_POLY8_C(96), SIMDE_POLY8_C(96), SIMDE_POLY8_C(96),
SIMDE_POLY8_C(96), SIMDE_POLY8_C(96), SIMDE_POLY8_C(96), SIMDE_POLY8_C(96), SIMDE_POLY8_C(96), SIMDE_POLY8_C(96), SIMDE_POLY8_C(96), SIMDE_POLY8_C(96) },
{ SIMDE_POLY8_C(23), SIMDE_POLY8_C(23), SIMDE_POLY8_C(23), SIMDE_POLY8_C(23), SIMDE_POLY8_C(23), SIMDE_POLY8_C(23), SIMDE_POLY8_C(23), SIMDE_POLY8_C(23),
SIMDE_POLY8_C(23), SIMDE_POLY8_C(23), SIMDE_POLY8_C(23), SIMDE_POLY8_C(23), SIMDE_POLY8_C(23), SIMDE_POLY8_C(23), SIMDE_POLY8_C(23), SIMDE_POLY8_C(23) } } },
{ { SIMDE_POLY8_C(53), SIMDE_POLY8_C(10) },
{ SIMDE_POLY8_C(65), SIMDE_POLY8_C(22)},
{ { SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53),
SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53) },
{ SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10),
SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10) } } },
{ { SIMDE_POLY8_C(83), SIMDE_POLY8_C(3) },
{ SIMDE_POLY8_C(50), SIMDE_POLY8_C(69)},
{ { SIMDE_POLY8_C(83), SIMDE_POLY8_C(83), SIMDE_POLY8_C(83), SIMDE_POLY8_C(83), SIMDE_POLY8_C(83), SIMDE_POLY8_C(83), SIMDE_POLY8_C(83), SIMDE_POLY8_C(83),
SIMDE_POLY8_C(83), SIMDE_POLY8_C(83), SIMDE_POLY8_C(83), SIMDE_POLY8_C(83), SIMDE_POLY8_C(83), SIMDE_POLY8_C(83), SIMDE_POLY8_C(83), SIMDE_POLY8_C(83) },
{ SIMDE_POLY8_C(3), SIMDE_POLY8_C(3), SIMDE_POLY8_C(3), SIMDE_POLY8_C(3), SIMDE_POLY8_C(3), SIMDE_POLY8_C(3), SIMDE_POLY8_C(3), SIMDE_POLY8_C(3),
SIMDE_POLY8_C(3), SIMDE_POLY8_C(3), SIMDE_POLY8_C(3), SIMDE_POLY8_C(3), SIMDE_POLY8_C(3), SIMDE_POLY8_C(3), SIMDE_POLY8_C(3), SIMDE_POLY8_C(3) } } },
{ { SIMDE_POLY8_C(48), SIMDE_POLY8_C(62) },
{ SIMDE_POLY8_C(64), SIMDE_POLY8_C(80)},
{ { SIMDE_POLY8_C(48), SIMDE_POLY8_C(48), SIMDE_POLY8_C(48), SIMDE_POLY8_C(48), SIMDE_POLY8_C(48), SIMDE_POLY8_C(48), SIMDE_POLY8_C(48), SIMDE_POLY8_C(48),
SIMDE_POLY8_C(48), SIMDE_POLY8_C(48), SIMDE_POLY8_C(48), SIMDE_POLY8_C(48), SIMDE_POLY8_C(48), SIMDE_POLY8_C(48), SIMDE_POLY8_C(48), SIMDE_POLY8_C(48) },
{ SIMDE_POLY8_C(62), SIMDE_POLY8_C(62), SIMDE_POLY8_C(62), SIMDE_POLY8_C(62), SIMDE_POLY8_C(62), SIMDE_POLY8_C(62), SIMDE_POLY8_C(62), SIMDE_POLY8_C(62),
SIMDE_POLY8_C(62), SIMDE_POLY8_C(62), SIMDE_POLY8_C(62), SIMDE_POLY8_C(62), SIMDE_POLY8_C(62), SIMDE_POLY8_C(62), SIMDE_POLY8_C(62), SIMDE_POLY8_C(62) } } },
{ { SIMDE_POLY8_C(33), SIMDE_POLY8_C(39) },
{ SIMDE_POLY8_C(0), SIMDE_POLY8_C(10)},
{ { SIMDE_POLY8_C(33), SIMDE_POLY8_C(33), SIMDE_POLY8_C(33), SIMDE_POLY8_C(33), SIMDE_POLY8_C(33), SIMDE_POLY8_C(33), SIMDE_POLY8_C(33), SIMDE_POLY8_C(33),
SIMDE_POLY8_C(33), SIMDE_POLY8_C(33), SIMDE_POLY8_C(33), SIMDE_POLY8_C(33), SIMDE_POLY8_C(33), SIMDE_POLY8_C(33), SIMDE_POLY8_C(33), SIMDE_POLY8_C(33) },
{ SIMDE_POLY8_C(39), SIMDE_POLY8_C(39), SIMDE_POLY8_C(39), SIMDE_POLY8_C(39), SIMDE_POLY8_C(39), SIMDE_POLY8_C(39), SIMDE_POLY8_C(39), SIMDE_POLY8_C(39),
SIMDE_POLY8_C(39), SIMDE_POLY8_C(39), SIMDE_POLY8_C(39), SIMDE_POLY8_C(39), SIMDE_POLY8_C(39), SIMDE_POLY8_C(39), SIMDE_POLY8_C(39), SIMDE_POLY8_C(39) } } },
{ { SIMDE_POLY8_C(53), SIMDE_POLY8_C(22) },
{ SIMDE_POLY8_C(79), SIMDE_POLY8_C(9)},
{ { SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53),
SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53), SIMDE_POLY8_C(53) },
{ SIMDE_POLY8_C(22), SIMDE_POLY8_C(22), SIMDE_POLY8_C(22), SIMDE_POLY8_C(22), SIMDE_POLY8_C(22), SIMDE_POLY8_C(22), SIMDE_POLY8_C(22), SIMDE_POLY8_C(22),
SIMDE_POLY8_C(22), SIMDE_POLY8_C(22), SIMDE_POLY8_C(22), SIMDE_POLY8_C(22), SIMDE_POLY8_C(22), SIMDE_POLY8_C(22), SIMDE_POLY8_C(22), SIMDE_POLY8_C(22) } } },
{ { SIMDE_POLY8_C(54), SIMDE_POLY8_C(10) },
{ SIMDE_POLY8_C(3), SIMDE_POLY8_C(83)},
{ { SIMDE_POLY8_C(54), SIMDE_POLY8_C(54), SIMDE_POLY8_C(54), SIMDE_POLY8_C(54), SIMDE_POLY8_C(54), SIMDE_POLY8_C(54), SIMDE_POLY8_C(54), SIMDE_POLY8_C(54),
SIMDE_POLY8_C(54), SIMDE_POLY8_C(54), SIMDE_POLY8_C(54), SIMDE_POLY8_C(54), SIMDE_POLY8_C(54), SIMDE_POLY8_C(54), SIMDE_POLY8_C(54), SIMDE_POLY8_C(54) },
{ SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10),
SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10), SIMDE_POLY8_C(10) } } },
{ { SIMDE_POLY8_C(9), SIMDE_POLY8_C(80) },
{ SIMDE_POLY8_C(74), SIMDE_POLY8_C(55)},
{ { SIMDE_POLY8_C(9), SIMDE_POLY8_C(9), SIMDE_POLY8_C(9), SIMDE_POLY8_C(9), SIMDE_POLY8_C(9), SIMDE_POLY8_C(9), SIMDE_POLY8_C(9), SIMDE_POLY8_C(9),
SIMDE_POLY8_C(9), SIMDE_POLY8_C(9), SIMDE_POLY8_C(9), SIMDE_POLY8_C(9), SIMDE_POLY8_C(9), SIMDE_POLY8_C(9), SIMDE_POLY8_C(9), SIMDE_POLY8_C(9) },
{ SIMDE_POLY8_C(80), SIMDE_POLY8_C(80), SIMDE_POLY8_C(80), SIMDE_POLY8_C(80), SIMDE_POLY8_C(80), SIMDE_POLY8_C(80), SIMDE_POLY8_C(80), SIMDE_POLY8_C(80),
SIMDE_POLY8_C(80), SIMDE_POLY8_C(80), SIMDE_POLY8_C(80), SIMDE_POLY8_C(80), SIMDE_POLY8_C(80), SIMDE_POLY8_C(80), SIMDE_POLY8_C(80), SIMDE_POLY8_C(80) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
SIMDE_ALIGN_TO_16 simde_poly8x16x2_t r = simde_vld2q_dup_p8(test_vec[i].a);
SIMDE_ALIGN_TO_16 simde_poly8x16x2_t expected = {
{simde_vld1q_p8(test_vec[i].r[0]), simde_vld1q_p8(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_p8x16(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_p8x16(r.val[1], expected.val[1]);
}
return 0;
#else
for (int i = 0 ; i < 4 ; i++) {
simde_poly8_t a[2];
simde_poly8_t unused[2];
simde_poly8x16x2_t r;
simde_test_codegen_random_memory(2, HEDLEY_REINTERPRET_CAST(uint8_t*, a));
simde_test_codegen_random_memory(2, HEDLEY_REINTERPRET_CAST(uint8_t*, unused));
r = simde_vld2q_dup_p8(a);
// Random buffer between pointer to load and expected results to check for
// loading out of bounds.
simde_test_codegen_write_vp8(2, 2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_vp8(2, 2, unused, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_p8x16x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vld2q_dup_p16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
struct {
SIMDE_ALIGN_TO_16 simde_poly16_t a[2];
SIMDE_ALIGN_TO_16 simde_poly16_t unused[2];
SIMDE_ALIGN_TO_16 simde_poly16_t r[2][8];
} test_vec[] = {
{ { SIMDE_POLY16_C(6058), SIMDE_POLY16_C(6273) },
{ SIMDE_POLY16_C(6301), SIMDE_POLY16_C(7423)},
{ { SIMDE_POLY16_C(6058), SIMDE_POLY16_C(6058), SIMDE_POLY16_C(6058), SIMDE_POLY16_C(6058),
SIMDE_POLY16_C(6058), SIMDE_POLY16_C(6058), SIMDE_POLY16_C(6058), SIMDE_POLY16_C(6058) },
{ SIMDE_POLY16_C(6273), SIMDE_POLY16_C(6273), SIMDE_POLY16_C(6273), SIMDE_POLY16_C(6273),
SIMDE_POLY16_C(6273), SIMDE_POLY16_C(6273), SIMDE_POLY16_C(6273), SIMDE_POLY16_C(6273) } } },
{ { SIMDE_POLY16_C(7176), SIMDE_POLY16_C(4578) },
{ SIMDE_POLY16_C(9644), SIMDE_POLY16_C(9994)},
{ { SIMDE_POLY16_C(7176), SIMDE_POLY16_C(7176), SIMDE_POLY16_C(7176), SIMDE_POLY16_C(7176),
SIMDE_POLY16_C(7176), SIMDE_POLY16_C(7176), SIMDE_POLY16_C(7176), SIMDE_POLY16_C(7176) },
{ SIMDE_POLY16_C(4578), SIMDE_POLY16_C(4578), SIMDE_POLY16_C(4578), SIMDE_POLY16_C(4578),
SIMDE_POLY16_C(4578), SIMDE_POLY16_C(4578), SIMDE_POLY16_C(4578), SIMDE_POLY16_C(4578) } } },
{ { SIMDE_POLY16_C(7902), SIMDE_POLY16_C(1902) },
{ SIMDE_POLY16_C(7534), SIMDE_POLY16_C(3814)},
{ { SIMDE_POLY16_C(7902), SIMDE_POLY16_C(7902), SIMDE_POLY16_C(7902), SIMDE_POLY16_C(7902),
SIMDE_POLY16_C(7902), SIMDE_POLY16_C(7902), SIMDE_POLY16_C(7902), SIMDE_POLY16_C(7902) },
{ SIMDE_POLY16_C(1902), SIMDE_POLY16_C(1902), SIMDE_POLY16_C(1902), SIMDE_POLY16_C(1902),
SIMDE_POLY16_C(1902), SIMDE_POLY16_C(1902), SIMDE_POLY16_C(1902), SIMDE_POLY16_C(1902) } } },
{ { SIMDE_POLY16_C(8498), SIMDE_POLY16_C(3391) },
{ SIMDE_POLY16_C(2384), SIMDE_POLY16_C(829)},
{ { SIMDE_POLY16_C(8498), SIMDE_POLY16_C(8498), SIMDE_POLY16_C(8498), SIMDE_POLY16_C(8498),
SIMDE_POLY16_C(8498), SIMDE_POLY16_C(8498), SIMDE_POLY16_C(8498), SIMDE_POLY16_C(8498) },
{ SIMDE_POLY16_C(3391), SIMDE_POLY16_C(3391), SIMDE_POLY16_C(3391), SIMDE_POLY16_C(3391),
SIMDE_POLY16_C(3391), SIMDE_POLY16_C(3391), SIMDE_POLY16_C(3391), SIMDE_POLY16_C(3391) } } },
{ { SIMDE_POLY16_C(5757), SIMDE_POLY16_C(7453) },
{ SIMDE_POLY16_C(3497), SIMDE_POLY16_C(4212)},
{ { SIMDE_POLY16_C(5757), SIMDE_POLY16_C(5757), SIMDE_POLY16_C(5757), SIMDE_POLY16_C(5757),
SIMDE_POLY16_C(5757), SIMDE_POLY16_C(5757), SIMDE_POLY16_C(5757), SIMDE_POLY16_C(5757) },
{ SIMDE_POLY16_C(7453), SIMDE_POLY16_C(7453), SIMDE_POLY16_C(7453), SIMDE_POLY16_C(7453),
SIMDE_POLY16_C(7453), SIMDE_POLY16_C(7453), SIMDE_POLY16_C(7453), SIMDE_POLY16_C(7453) } } },
{ { SIMDE_POLY16_C(2420), SIMDE_POLY16_C(5818) },
{ SIMDE_POLY16_C(6753), SIMDE_POLY16_C(5749)},
{ { SIMDE_POLY16_C(2420), SIMDE_POLY16_C(2420), SIMDE_POLY16_C(2420), SIMDE_POLY16_C(2420),
SIMDE_POLY16_C(2420), SIMDE_POLY16_C(2420), SIMDE_POLY16_C(2420), SIMDE_POLY16_C(2420) },
{ SIMDE_POLY16_C(5818), SIMDE_POLY16_C(5818), SIMDE_POLY16_C(5818), SIMDE_POLY16_C(5818),
SIMDE_POLY16_C(5818), SIMDE_POLY16_C(5818), SIMDE_POLY16_C(5818), SIMDE_POLY16_C(5818) } } },
{ { SIMDE_POLY16_C(3143), SIMDE_POLY16_C(6838) },
{ SIMDE_POLY16_C(8323), SIMDE_POLY16_C(2227)},
{ { SIMDE_POLY16_C(3143), SIMDE_POLY16_C(3143), SIMDE_POLY16_C(3143), SIMDE_POLY16_C(3143),
SIMDE_POLY16_C(3143), SIMDE_POLY16_C(3143), SIMDE_POLY16_C(3143), SIMDE_POLY16_C(3143) },
{ SIMDE_POLY16_C(6838), SIMDE_POLY16_C(6838), SIMDE_POLY16_C(6838), SIMDE_POLY16_C(6838),
SIMDE_POLY16_C(6838), SIMDE_POLY16_C(6838), SIMDE_POLY16_C(6838), SIMDE_POLY16_C(6838) } } },
{ { SIMDE_POLY16_C(6156), SIMDE_POLY16_C(8714) },
{ SIMDE_POLY16_C(9846), SIMDE_POLY16_C(2394)},
{ { SIMDE_POLY16_C(6156), SIMDE_POLY16_C(6156), SIMDE_POLY16_C(6156), SIMDE_POLY16_C(6156),
SIMDE_POLY16_C(6156), SIMDE_POLY16_C(6156), SIMDE_POLY16_C(6156), SIMDE_POLY16_C(6156) },
{ SIMDE_POLY16_C(8714), SIMDE_POLY16_C(8714), SIMDE_POLY16_C(8714), SIMDE_POLY16_C(8714),
SIMDE_POLY16_C(8714), SIMDE_POLY16_C(8714), SIMDE_POLY16_C(8714), SIMDE_POLY16_C(8714) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
SIMDE_ALIGN_TO_16 simde_poly16_t* a = HEDLEY_STATIC_CAST(simde_poly16_t*, test_vec[i].a);
SIMDE_ALIGN_TO_16 simde_poly16x8x2_t r;
SIMDE_ALIGN_TO_16 simde_poly16x8x2_t expected = {
{simde_vld1q_p16(test_vec[i].r[0]), simde_vld1q_p16(test_vec[i].r[1])}};
r = simde_vld2q_dup_p16(a);
simde_test_arm_neon_write_p16x8x2(2, r, SIMDE_TEST_VEC_POS_LAST);
simde_test_arm_neon_assert_equal_p16x8(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_p16x8(r.val[1], expected.val[1]);
}
return 0;
#else
for (int i = 0 ; i < 4 ; i++) {
simde_poly16_t a[2];
simde_poly16_t unused[2];
simde_poly16x8x2_t r;
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, a));
simde_test_codegen_random_memory(4, HEDLEY_REINTERPRET_CAST(uint8_t*, unused));
r = simde_vld2q_dup_p16(a);
// Random buffer between pointer to load and expected results to check for
// loading out of bounds.
simde_test_codegen_write_vp16(2, 2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_vp16(2, 2, unused, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_p16x8x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vld2q_dup_p64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
static const struct {
simde_poly64_t a[2];
simde_poly64_t unused[2];
simde_poly64_t r[2][2];
} test_vec[] = {
{ { SIMDE_POLY64_C(706048852), SIMDE_POLY64_C(383443850) },
{ SIMDE_POLY64_C(285705054), SIMDE_POLY64_C(822983505)},
{ { SIMDE_POLY64_C(706048852), SIMDE_POLY64_C(706048852) },
{ SIMDE_POLY64_C(383443850), SIMDE_POLY64_C(383443850) } } },
{ { SIMDE_POLY64_C(421014862), SIMDE_POLY64_C(906802850) },
{ SIMDE_POLY64_C(817754491), SIMDE_POLY64_C(29691523)},
{ { SIMDE_POLY64_C(421014862), SIMDE_POLY64_C(421014862) },
{ SIMDE_POLY64_C(906802850), SIMDE_POLY64_C(906802850) } } },
{ { SIMDE_POLY64_C(221353308), SIMDE_POLY64_C(322577141) },
{ SIMDE_POLY64_C(995600522), SIMDE_POLY64_C(297974478)},
{ { SIMDE_POLY64_C(221353308), SIMDE_POLY64_C(221353308) },
{ SIMDE_POLY64_C(322577141), SIMDE_POLY64_C(322577141) } } },
{ { SIMDE_POLY64_C(663578487), SIMDE_POLY64_C(286997839) },
{ SIMDE_POLY64_C(243168275), SIMDE_POLY64_C(577857697)},
{ { SIMDE_POLY64_C(663578487), SIMDE_POLY64_C(663578487) },
{ SIMDE_POLY64_C(286997839), SIMDE_POLY64_C(286997839) } } },
{ { SIMDE_POLY64_C(593025173), SIMDE_POLY64_C(964665381) },
{ SIMDE_POLY64_C(503395467), SIMDE_POLY64_C(204960526)},
{ { SIMDE_POLY64_C(593025173), SIMDE_POLY64_C(593025173) },
{ SIMDE_POLY64_C(964665381), SIMDE_POLY64_C(964665381) } } },
{ { SIMDE_POLY64_C(962157997), SIMDE_POLY64_C(598569861) },
{ SIMDE_POLY64_C(705698189), SIMDE_POLY64_C(932957687)},
{ { SIMDE_POLY64_C(962157997), SIMDE_POLY64_C(962157997) },
{ SIMDE_POLY64_C(598569861), SIMDE_POLY64_C(598569861) } } },
{ { SIMDE_POLY64_C(486609766), SIMDE_POLY64_C(401817412) },
{ SIMDE_POLY64_C(317463497), SIMDE_POLY64_C(368423896)},
{ { SIMDE_POLY64_C(486609766), SIMDE_POLY64_C(486609766) },
{ SIMDE_POLY64_C(401817412), SIMDE_POLY64_C(401817412) } } },
{ { SIMDE_POLY64_C(603061297), SIMDE_POLY64_C(721346221) },
{ SIMDE_POLY64_C(633243906), SIMDE_POLY64_C(434342421)},
{ { SIMDE_POLY64_C(603061297), SIMDE_POLY64_C(603061297) },
{ SIMDE_POLY64_C(721346221), SIMDE_POLY64_C(721346221) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_poly64x2x2_t r = simde_vld2q_dup_p64(test_vec[i].a);
simde_poly64x2x2_t expected = {
{simde_vld1q_p64(test_vec[i].r[0]), simde_vld1q_p64(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_p64x2(r.val[0], expected.val[0]);
simde_test_arm_neon_assert_equal_p64x2(r.val[1], expected.val[1]);
}
return 0;
#else
for (int i = 0 ; i < 4 ; i++) {
simde_poly64_t a[2];
simde_poly64_t unused[2];
simde_poly64x2x2_t r;
simde_test_codegen_random_memory(16, HEDLEY_REINTERPRET_CAST(uint8_t*, a));
simde_test_codegen_random_memory(16, HEDLEY_REINTERPRET_CAST(uint8_t*, unused));
r = simde_vld2q_dup_p64(a);
// Random buffer between pointer to load and expected results to check for
// loading out of bounds.
simde_test_codegen_write_vp64(2, 2, a, SIMDE_TEST_VEC_POS_FIRST);
simde_test_codegen_write_vp64(2, 2, unused, SIMDE_TEST_VEC_POS_MIDDLE);
simde_test_arm_neon_write_p64x2x2(2, r, SIMDE_TEST_VEC_POS_LAST);
}
return 1;
#endif
}
static int
test_simde_vld2_dup_bf16 (SIMDE_MUNIT_TEST_ARGS) {
struct {
simde_bfloat16_t a[2];
simde_bfloat16_t unused[2];
simde_bfloat16_t r[2][4];
} test_vec[] = {
{ { SIMDE_BFLOAT16_VALUE(39.04), SIMDE_BFLOAT16_VALUE(10.61) },
{ SIMDE_BFLOAT16_VALUE(-41.47), SIMDE_BFLOAT16_VALUE(28.54)},
{ { SIMDE_BFLOAT16_VALUE(39.04), SIMDE_BFLOAT16_VALUE(39.04), SIMDE_BFLOAT16_VALUE(39.04), SIMDE_BFLOAT16_VALUE(39.04) },
{ SIMDE_BFLOAT16_VALUE(10.61), SIMDE_BFLOAT16_VALUE(10.61), SIMDE_BFLOAT16_VALUE(10.61), SIMDE_BFLOAT16_VALUE(10.61) } } },
{ { SIMDE_BFLOAT16_VALUE(-26.09), SIMDE_BFLOAT16_VALUE(-32.09) },
{ SIMDE_BFLOAT16_VALUE(-21.60), SIMDE_BFLOAT16_VALUE(-5.65)},
{ { SIMDE_BFLOAT16_VALUE(-26.09), SIMDE_BFLOAT16_VALUE(-26.09), SIMDE_BFLOAT16_VALUE(-26.09), SIMDE_BFLOAT16_VALUE(-26.09) },
{ SIMDE_BFLOAT16_VALUE(-32.09), SIMDE_BFLOAT16_VALUE(-32.09), SIMDE_BFLOAT16_VALUE(-32.09), SIMDE_BFLOAT16_VALUE(-32.09) } } },
{ { SIMDE_BFLOAT16_VALUE(27.51), SIMDE_BFLOAT16_VALUE(-41.83) },
{ SIMDE_BFLOAT16_VALUE(21.45), SIMDE_BFLOAT16_VALUE(9.79)},
{ { SIMDE_BFLOAT16_VALUE(27.51), SIMDE_BFLOAT16_VALUE(27.51), SIMDE_BFLOAT16_VALUE(27.51), SIMDE_BFLOAT16_VALUE(27.51) },
{ SIMDE_BFLOAT16_VALUE(-41.83), SIMDE_BFLOAT16_VALUE(-41.83), SIMDE_BFLOAT16_VALUE(-41.83), SIMDE_BFLOAT16_VALUE(-41.83) } } },
{ { SIMDE_BFLOAT16_VALUE(-19.53), SIMDE_BFLOAT16_VALUE(-7.90) },
{ SIMDE_BFLOAT16_VALUE(-3.62), SIMDE_BFLOAT16_VALUE(17.75)},
{ { SIMDE_BFLOAT16_VALUE(-19.53), SIMDE_BFLOAT16_VALUE(-19.53), SIMDE_BFLOAT16_VALUE(-19.53), SIMDE_BFLOAT16_VALUE(-19.53) },
{ SIMDE_BFLOAT16_VALUE(-7.90), SIMDE_BFLOAT16_VALUE(-7.90), SIMDE_BFLOAT16_VALUE(-7.90), SIMDE_BFLOAT16_VALUE(-7.90) } } },
{ { SIMDE_BFLOAT16_VALUE(-22.86), SIMDE_BFLOAT16_VALUE(5.30) },
{ SIMDE_BFLOAT16_VALUE(-42.71), SIMDE_BFLOAT16_VALUE(-2.30)},
{ { SIMDE_BFLOAT16_VALUE(-22.86), SIMDE_BFLOAT16_VALUE(-22.86), SIMDE_BFLOAT16_VALUE(-22.86), SIMDE_BFLOAT16_VALUE(-22.86) },
{ SIMDE_BFLOAT16_VALUE(5.30), SIMDE_BFLOAT16_VALUE(5.30), SIMDE_BFLOAT16_VALUE(5.30), SIMDE_BFLOAT16_VALUE(5.30) } } },
{ { SIMDE_BFLOAT16_VALUE(4.74), SIMDE_BFLOAT16_VALUE(43.69) },
{ SIMDE_BFLOAT16_VALUE(-49.64), SIMDE_BFLOAT16_VALUE(-29.99)},
{ { SIMDE_BFLOAT16_VALUE(4.74), SIMDE_BFLOAT16_VALUE(4.74), SIMDE_BFLOAT16_VALUE(4.74), SIMDE_BFLOAT16_VALUE(4.74) },
{ SIMDE_BFLOAT16_VALUE(43.69), SIMDE_BFLOAT16_VALUE(43.69), SIMDE_BFLOAT16_VALUE(43.69), SIMDE_BFLOAT16_VALUE(43.69) } } },
{ { SIMDE_BFLOAT16_VALUE(-1.69), SIMDE_BFLOAT16_VALUE(-25.30) },
{ SIMDE_BFLOAT16_VALUE(4.77), SIMDE_BFLOAT16_VALUE(22.66)},
{ { SIMDE_BFLOAT16_VALUE(-1.69), SIMDE_BFLOAT16_VALUE(-1.69), SIMDE_BFLOAT16_VALUE(-1.69), SIMDE_BFLOAT16_VALUE(-1.69) },
{ SIMDE_BFLOAT16_VALUE(-25.30), SIMDE_BFLOAT16_VALUE(-25.30), SIMDE_BFLOAT16_VALUE(-25.30), SIMDE_BFLOAT16_VALUE(-25.30) } } },
{ { SIMDE_BFLOAT16_VALUE(45.42), SIMDE_BFLOAT16_VALUE(-42.46) },
{ SIMDE_BFLOAT16_VALUE(-4.86), SIMDE_BFLOAT16_VALUE(42.78)},
{ { SIMDE_BFLOAT16_VALUE(45.42), SIMDE_BFLOAT16_VALUE(45.42), SIMDE_BFLOAT16_VALUE(45.42), SIMDE_BFLOAT16_VALUE(45.42) },
{ SIMDE_BFLOAT16_VALUE(-42.46), SIMDE_BFLOAT16_VALUE(-42.46), SIMDE_BFLOAT16_VALUE(-42.46), SIMDE_BFLOAT16_VALUE(-42.46) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_bfloat16x4x2_t r = simde_vld2_dup_bf16(test_vec[i].a);
simde_bfloat16x4x2_t expected = {
{simde_vld1_bf16(test_vec[i].r[0]), simde_vld1_bf16(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_bf16x4(r.val[0], expected.val[0], INT_MAX);
simde_test_arm_neon_assert_equal_bf16x4(r.val[1], expected.val[1], INT_MAX);
}
return 0;
}
static int
test_simde_vld2q_dup_bf16 (SIMDE_MUNIT_TEST_ARGS) {
struct {
simde_bfloat16_t a[2];
simde_bfloat16_t unused[2];
simde_bfloat16_t r[2][8];
} test_vec[] = {
{ { SIMDE_BFLOAT16_VALUE(44.20), SIMDE_BFLOAT16_VALUE(24.16) },
{ SIMDE_BFLOAT16_VALUE(-44.99), SIMDE_BFLOAT16_VALUE(0.06)},
{ { SIMDE_BFLOAT16_VALUE(44.20), SIMDE_BFLOAT16_VALUE(44.20), SIMDE_BFLOAT16_VALUE(44.20), SIMDE_BFLOAT16_VALUE(44.20),
SIMDE_BFLOAT16_VALUE(44.20), SIMDE_BFLOAT16_VALUE(44.20), SIMDE_BFLOAT16_VALUE(44.20), SIMDE_BFLOAT16_VALUE(44.20) },
{ SIMDE_BFLOAT16_VALUE(24.16), SIMDE_BFLOAT16_VALUE(24.16), SIMDE_BFLOAT16_VALUE(24.16), SIMDE_BFLOAT16_VALUE(24.16),
SIMDE_BFLOAT16_VALUE(24.16), SIMDE_BFLOAT16_VALUE(24.16), SIMDE_BFLOAT16_VALUE(24.16), SIMDE_BFLOAT16_VALUE(24.16) } } },
{ { SIMDE_BFLOAT16_VALUE(49.42), SIMDE_BFLOAT16_VALUE(2.99) },
{ SIMDE_BFLOAT16_VALUE(-44.29), SIMDE_BFLOAT16_VALUE(-47.80)},
{ { SIMDE_BFLOAT16_VALUE(49.42), SIMDE_BFLOAT16_VALUE(49.42), SIMDE_BFLOAT16_VALUE(49.42), SIMDE_BFLOAT16_VALUE(49.42),
SIMDE_BFLOAT16_VALUE(49.42), SIMDE_BFLOAT16_VALUE(49.42), SIMDE_BFLOAT16_VALUE(49.42), SIMDE_BFLOAT16_VALUE(49.42) },
{ SIMDE_BFLOAT16_VALUE(2.99), SIMDE_BFLOAT16_VALUE(2.99), SIMDE_BFLOAT16_VALUE(2.99), SIMDE_BFLOAT16_VALUE(2.99),
SIMDE_BFLOAT16_VALUE(2.99), SIMDE_BFLOAT16_VALUE(2.99), SIMDE_BFLOAT16_VALUE(2.99), SIMDE_BFLOAT16_VALUE(2.99) } } },
{ { SIMDE_BFLOAT16_VALUE(-4.29), SIMDE_BFLOAT16_VALUE(-21.75) },
{ SIMDE_BFLOAT16_VALUE(18.84), SIMDE_BFLOAT16_VALUE(47.44)},
{ { SIMDE_BFLOAT16_VALUE(-4.29), SIMDE_BFLOAT16_VALUE(-4.29), SIMDE_BFLOAT16_VALUE(-4.29), SIMDE_BFLOAT16_VALUE(-4.29),
SIMDE_BFLOAT16_VALUE(-4.29), SIMDE_BFLOAT16_VALUE(-4.29), SIMDE_BFLOAT16_VALUE(-4.29), SIMDE_BFLOAT16_VALUE(-4.29) },
{ SIMDE_BFLOAT16_VALUE(-21.75), SIMDE_BFLOAT16_VALUE(-21.75), SIMDE_BFLOAT16_VALUE(-21.75), SIMDE_BFLOAT16_VALUE(-21.75),
SIMDE_BFLOAT16_VALUE(-21.75), SIMDE_BFLOAT16_VALUE(-21.75), SIMDE_BFLOAT16_VALUE(-21.75), SIMDE_BFLOAT16_VALUE(-21.75) } } },
{ { SIMDE_BFLOAT16_VALUE(14.92), SIMDE_BFLOAT16_VALUE(32.44) },
{ SIMDE_BFLOAT16_VALUE(32.42), SIMDE_BFLOAT16_VALUE(-11.78)},
{ { SIMDE_BFLOAT16_VALUE(14.92), SIMDE_BFLOAT16_VALUE(14.92), SIMDE_BFLOAT16_VALUE(14.92), SIMDE_BFLOAT16_VALUE(14.92),
SIMDE_BFLOAT16_VALUE(14.92), SIMDE_BFLOAT16_VALUE(14.92), SIMDE_BFLOAT16_VALUE(14.92), SIMDE_BFLOAT16_VALUE(14.92) },
{ SIMDE_BFLOAT16_VALUE(32.44), SIMDE_BFLOAT16_VALUE(32.44), SIMDE_BFLOAT16_VALUE(32.44), SIMDE_BFLOAT16_VALUE(32.44),
SIMDE_BFLOAT16_VALUE(32.44), SIMDE_BFLOAT16_VALUE(32.44), SIMDE_BFLOAT16_VALUE(32.44), SIMDE_BFLOAT16_VALUE(32.44) } } },
{ { SIMDE_BFLOAT16_VALUE(-15.04), SIMDE_BFLOAT16_VALUE(-22.71) },
{ SIMDE_BFLOAT16_VALUE(21.86), SIMDE_BFLOAT16_VALUE(-1.79)},
{ { SIMDE_BFLOAT16_VALUE(-15.04), SIMDE_BFLOAT16_VALUE(-15.04), SIMDE_BFLOAT16_VALUE(-15.04), SIMDE_BFLOAT16_VALUE(-15.04),
SIMDE_BFLOAT16_VALUE(-15.04), SIMDE_BFLOAT16_VALUE(-15.04), SIMDE_BFLOAT16_VALUE(-15.04), SIMDE_BFLOAT16_VALUE(-15.04) },
{ SIMDE_BFLOAT16_VALUE(-22.71), SIMDE_BFLOAT16_VALUE(-22.71), SIMDE_BFLOAT16_VALUE(-22.71), SIMDE_BFLOAT16_VALUE(-22.71),
SIMDE_BFLOAT16_VALUE(-22.71), SIMDE_BFLOAT16_VALUE(-22.71), SIMDE_BFLOAT16_VALUE(-22.71), SIMDE_BFLOAT16_VALUE(-22.71) } } },
{ { SIMDE_BFLOAT16_VALUE(2.97), SIMDE_BFLOAT16_VALUE(23.53) },
{ SIMDE_BFLOAT16_VALUE(-46.16), SIMDE_BFLOAT16_VALUE(23.15)},
{ { SIMDE_BFLOAT16_VALUE(2.97), SIMDE_BFLOAT16_VALUE(2.97), SIMDE_BFLOAT16_VALUE(2.97), SIMDE_BFLOAT16_VALUE(2.97),
SIMDE_BFLOAT16_VALUE(2.97), SIMDE_BFLOAT16_VALUE(2.97), SIMDE_BFLOAT16_VALUE(2.97), SIMDE_BFLOAT16_VALUE(2.97) },
{ SIMDE_BFLOAT16_VALUE(23.53), SIMDE_BFLOAT16_VALUE(23.53), SIMDE_BFLOAT16_VALUE(23.53), SIMDE_BFLOAT16_VALUE(23.53),
SIMDE_BFLOAT16_VALUE(23.53), SIMDE_BFLOAT16_VALUE(23.53), SIMDE_BFLOAT16_VALUE(23.53), SIMDE_BFLOAT16_VALUE(23.53) } } },
{ { SIMDE_BFLOAT16_VALUE(9.52), SIMDE_BFLOAT16_VALUE(-32.92) },
{ SIMDE_BFLOAT16_VALUE(24.32), SIMDE_BFLOAT16_VALUE(39.39)},
{ { SIMDE_BFLOAT16_VALUE(9.52), SIMDE_BFLOAT16_VALUE(9.52), SIMDE_BFLOAT16_VALUE(9.52), SIMDE_BFLOAT16_VALUE(9.52),
SIMDE_BFLOAT16_VALUE(9.52), SIMDE_BFLOAT16_VALUE(9.52), SIMDE_BFLOAT16_VALUE(9.52), SIMDE_BFLOAT16_VALUE(9.52) },
{ SIMDE_BFLOAT16_VALUE(-32.92), SIMDE_BFLOAT16_VALUE(-32.92), SIMDE_BFLOAT16_VALUE(-32.92), SIMDE_BFLOAT16_VALUE(-32.92),
SIMDE_BFLOAT16_VALUE(-32.92), SIMDE_BFLOAT16_VALUE(-32.92), SIMDE_BFLOAT16_VALUE(-32.92), SIMDE_BFLOAT16_VALUE(-32.92) } } },
{ { SIMDE_BFLOAT16_VALUE(-26.46), SIMDE_BFLOAT16_VALUE(24.31) },
{ SIMDE_BFLOAT16_VALUE(14.82), SIMDE_BFLOAT16_VALUE(-40.92)},
{ { SIMDE_BFLOAT16_VALUE(-26.46), SIMDE_BFLOAT16_VALUE(-26.46), SIMDE_BFLOAT16_VALUE(-26.46), SIMDE_BFLOAT16_VALUE(-26.46),
SIMDE_BFLOAT16_VALUE(-26.46), SIMDE_BFLOAT16_VALUE(-26.46), SIMDE_BFLOAT16_VALUE(-26.46), SIMDE_BFLOAT16_VALUE(-26.46) },
{ SIMDE_BFLOAT16_VALUE(24.31), SIMDE_BFLOAT16_VALUE(24.31), SIMDE_BFLOAT16_VALUE(24.31), SIMDE_BFLOAT16_VALUE(24.31),
SIMDE_BFLOAT16_VALUE(24.31), SIMDE_BFLOAT16_VALUE(24.31), SIMDE_BFLOAT16_VALUE(24.31), SIMDE_BFLOAT16_VALUE(24.31) } } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_bfloat16x8x2_t r = simde_vld2q_dup_bf16(test_vec[i].a);
simde_bfloat16x8x2_t expected = {
{simde_vld1q_bf16(test_vec[i].r[0]), simde_vld1q_bf16(test_vec[i].r[1])}};
simde_test_arm_neon_assert_equal_bf16x8(r.val[0], expected.val[0], INT_MAX);
simde_test_arm_neon_assert_equal_bf16x8(r.val[1], expected.val[1], INT_MAX);
}
return 0;
}
#endif /* !defined(SIMDE_BUG_INTEL_857088) */
SIMDE_TEST_FUNC_LIST_BEGIN
#if !defined(SIMDE_BUG_INTEL_857088)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2_dup_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2_dup_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2_dup_f64)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2_dup_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2_dup_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2_dup_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2_dup_s64)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2_dup_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2_dup_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2_dup_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2_dup_u64)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2q_dup_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2q_dup_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2q_dup_f64)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2q_dup_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2q_dup_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2q_dup_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2q_dup_s64)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2q_dup_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2q_dup_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2q_dup_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2q_dup_u64)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2_dup_p8)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2_dup_p16)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2_dup_p64)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2q_dup_p8)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2q_dup_p16)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2q_dup_p64)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2_dup_bf16)
SIMDE_TEST_FUNC_LIST_ENTRY(vld2q_dup_bf16)
#endif /* !defined(SIMDE_BUG_INTEL_857088) */
SIMDE_TEST_FUNC_LIST_END
#include "test-neon-footer.h"