Update googletest to 1.18.0 and SIMDe to 0.8.2.

Googletest 1.18 asks for CMake 3.13 or newer, so configuring the tests no longer warns that CMake compatibility below 3.10 is deprecated.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Ryan Henry 2026-09-24 14:30:19 -06:00
parent e4e666f459
commit 3f10e05176
912 changed files with 224964 additions and 11502 deletions

View file

@ -7,6 +7,49 @@
HEDLEY_DIAGNOSTIC_PUSH
SIMDE_DIAGNOSTIC_DISABLE_UNREACHABLE_
static int
test_simde_vmul_lane_f16 (SIMDE_MUNIT_TEST_ARGS) {
struct {
simde_float16_t a[4];
simde_float16_t b[4];
int lane;
simde_float16_t r[4];
} test_vec[] = {
{ { SIMDE_FLOAT16_VALUE(-2.2), SIMDE_FLOAT16_VALUE(-6.4), SIMDE_FLOAT16_VALUE(-8.8), SIMDE_FLOAT16_VALUE(-3.0) },
{ SIMDE_FLOAT16_VALUE(-6.1), SIMDE_FLOAT16_VALUE(-3.0), SIMDE_FLOAT16_VALUE(-6.1), SIMDE_FLOAT16_VALUE(6.2) },
INT8_C(2),
{ SIMDE_FLOAT16_VALUE(13.420), SIMDE_FLOAT16_VALUE(39.040), SIMDE_FLOAT16_VALUE(53.680), SIMDE_FLOAT16_VALUE(18.300) } },
{ { SIMDE_FLOAT16_VALUE(-5.5), SIMDE_FLOAT16_VALUE(0.2), SIMDE_FLOAT16_VALUE(9.1), SIMDE_FLOAT16_VALUE(6.4) },
{ SIMDE_FLOAT16_VALUE(-0.2), SIMDE_FLOAT16_VALUE(-0.9), SIMDE_FLOAT16_VALUE(-7.8), SIMDE_FLOAT16_VALUE(-0.8) },
INT8_C(3),
{ SIMDE_FLOAT16_VALUE(4.400), SIMDE_FLOAT16_VALUE(-0.160), SIMDE_FLOAT16_VALUE(-7.280), SIMDE_FLOAT16_VALUE(-5.120) } },
{ { SIMDE_FLOAT16_VALUE(9.2), SIMDE_FLOAT16_VALUE(3.3), SIMDE_FLOAT16_VALUE(-9.1), SIMDE_FLOAT16_VALUE(5.3) },
{ SIMDE_FLOAT16_VALUE(3.4), SIMDE_FLOAT16_VALUE(1.2), SIMDE_FLOAT16_VALUE(6.2), SIMDE_FLOAT16_VALUE(1.3) },
INT8_C(3),
{ SIMDE_FLOAT16_VALUE(11.960), SIMDE_FLOAT16_VALUE(4.290), SIMDE_FLOAT16_VALUE(-11.830), SIMDE_FLOAT16_VALUE(6.890) } },
{ { SIMDE_FLOAT16_VALUE(4.7), SIMDE_FLOAT16_VALUE(-1.9), SIMDE_FLOAT16_VALUE(-0.5), SIMDE_FLOAT16_VALUE(-3.3) },
{ SIMDE_FLOAT16_VALUE(-4.7), SIMDE_FLOAT16_VALUE(-9.8), SIMDE_FLOAT16_VALUE(5.8), SIMDE_FLOAT16_VALUE(0.7) },
INT8_C(3),
{ SIMDE_FLOAT16_VALUE(3.290), SIMDE_FLOAT16_VALUE(-1.330), SIMDE_FLOAT16_VALUE(-0.350), SIMDE_FLOAT16_VALUE(-2.310) } },
{ { SIMDE_FLOAT16_VALUE(-9.6), SIMDE_FLOAT16_VALUE(-2.1), SIMDE_FLOAT16_VALUE(-5.5), SIMDE_FLOAT16_VALUE(9.7) },
{ SIMDE_FLOAT16_VALUE(-6.3), SIMDE_FLOAT16_VALUE(1.8), SIMDE_FLOAT16_VALUE(9.6), SIMDE_FLOAT16_VALUE(1.6) },
INT8_C(3),
{ SIMDE_FLOAT16_VALUE(-15.360), SIMDE_FLOAT16_VALUE(-3.360), SIMDE_FLOAT16_VALUE(-8.800), SIMDE_FLOAT16_VALUE(15.520) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float16x4_t a = simde_vld1_f16(test_vec[i].a);
simde_float16x4_t b = simde_vld1_f16(test_vec[i].b);
simde_float16x4_t r;
SIMDE_CONSTIFY_4_(simde_vmul_lane_f16, r, (HEDLEY_UNREACHABLE(), simde_vdup_n_f16(SIMDE_FLOAT16_VALUE(0.0))), test_vec[i].lane, a, b);
simde_test_arm_neon_assert_equal_f16x4(r, simde_vld1_f16(test_vec[i].r), 1);
}
return 0;
}
static int
test_simde_vmul_lane_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
@ -722,6 +765,53 @@ test_simde_vmul_laneq_u32 (SIMDE_MUNIT_TEST_ARGS) {
#endif
}
static int
test_simde_vmulq_lane_f16 (SIMDE_MUNIT_TEST_ARGS) {
struct {
simde_float16_t a[8];
simde_float16_t b[4];
int lane;
simde_float16_t r[8];
} test_vec[] = {
{ { SIMDE_FLOAT16_VALUE( 218.125), SIMDE_FLOAT16_VALUE( 147.75), SIMDE_FLOAT16_VALUE( 163.875), SIMDE_FLOAT16_VALUE( 3.16796875),
SIMDE_FLOAT16_VALUE( 168.5), SIMDE_FLOAT16_VALUE( 4.4453125), SIMDE_FLOAT16_VALUE( 166.25), SIMDE_FLOAT16_VALUE( 95.0625), },
{ SIMDE_FLOAT16_VALUE( 1.25), SIMDE_FLOAT16_VALUE( 69.25), SIMDE_FLOAT16_VALUE( 68.1875), SIMDE_FLOAT16_VALUE( 71.3125) },
INT8_C( 0),
{ SIMDE_FLOAT16_VALUE(272.65625), SIMDE_FLOAT16_VALUE(184.6875), SIMDE_FLOAT16_VALUE(204.84375), SIMDE_FLOAT16_VALUE(3.95947265625),
SIMDE_FLOAT16_VALUE(210.625), SIMDE_FLOAT16_VALUE(5.556640625), SIMDE_FLOAT16_VALUE(207.8125), SIMDE_FLOAT16_VALUE(118.828125) } },
{ { SIMDE_FLOAT16_VALUE( -190.5), SIMDE_FLOAT16_VALUE( -167.5), SIMDE_FLOAT16_VALUE( -108.0), SIMDE_FLOAT16_VALUE( -18.5),
SIMDE_FLOAT16_VALUE( -45.0), SIMDE_FLOAT16_VALUE( -37.2), SIMDE_FLOAT16_VALUE( -41.25), SIMDE_FLOAT16_VALUE( -212.4), },
{ SIMDE_FLOAT16_VALUE( 193.0), SIMDE_FLOAT16_VALUE( 17.5), SIMDE_FLOAT16_VALUE( 179.5), SIMDE_FLOAT16_VALUE( 116.2), },
INT8_C( 1),
{ SIMDE_FLOAT16_VALUE(-3333.75), SIMDE_FLOAT16_VALUE(-2931.25), SIMDE_FLOAT16_VALUE(-1890.0), SIMDE_FLOAT16_VALUE(-323.75),
SIMDE_FLOAT16_VALUE(-787.5), SIMDE_FLOAT16_VALUE(-651.0), SIMDE_FLOAT16_VALUE(-721.875), SIMDE_FLOAT16_VALUE(-3717.0) } },
{ { SIMDE_FLOAT16_VALUE( 19.0), SIMDE_FLOAT16_VALUE( 83.2), SIMDE_FLOAT16_VALUE( 7.75), SIMDE_FLOAT16_VALUE( 12.125),
SIMDE_FLOAT16_VALUE( 15.3), SIMDE_FLOAT16_VALUE( 26.5), SIMDE_FLOAT16_VALUE( 39.5), SIMDE_FLOAT16_VALUE( -7.25), },
{ SIMDE_FLOAT16_VALUE( -152.875), SIMDE_FLOAT16_VALUE( -221.625), SIMDE_FLOAT16_VALUE( -9.2), SIMDE_FLOAT16_VALUE( -251.0) },
INT8_C( 2),
{ SIMDE_FLOAT16_VALUE(-174.875), SIMDE_FLOAT16_VALUE(-765.44), SIMDE_FLOAT16_VALUE(-71.4), SIMDE_FLOAT16_VALUE(-111.55),
SIMDE_FLOAT16_VALUE(-140.76), SIMDE_FLOAT16_VALUE(-243.875), SIMDE_FLOAT16_VALUE(-363.4), SIMDE_FLOAT16_VALUE(66.7) } },
{ { SIMDE_FLOAT16_VALUE( -46.25), SIMDE_FLOAT16_VALUE( -74.5), SIMDE_FLOAT16_VALUE( -14.5), SIMDE_FLOAT16_VALUE( -1.125),
SIMDE_FLOAT16_VALUE( -13.25), SIMDE_FLOAT16_VALUE( -93.5), SIMDE_FLOAT16_VALUE( -19.0), SIMDE_FLOAT16_VALUE( -50.5), },
{ SIMDE_FLOAT16_VALUE( -165.875), SIMDE_FLOAT16_VALUE( -0.9404296875), SIMDE_FLOAT16_VALUE( -124.9375), SIMDE_FLOAT16_VALUE( -2.5) },
INT8_C( 3),
{ SIMDE_FLOAT16_VALUE( 115.625), SIMDE_FLOAT16_VALUE( 186.25), SIMDE_FLOAT16_VALUE( 36.25), SIMDE_FLOAT16_VALUE( 2.8125),
SIMDE_FLOAT16_VALUE( 33.125), SIMDE_FLOAT16_VALUE( 233.75), SIMDE_FLOAT16_VALUE( 47.5), SIMDE_FLOAT16_VALUE( 126.25), } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float16x8_t a = simde_vld1q_f16(test_vec[i].a);
simde_float16x4_t b = simde_vld1_f16(test_vec[i].b);
simde_float16x8_t r;
SIMDE_CONSTIFY_4_(simde_vmulq_lane_f16, r, (HEDLEY_UNREACHABLE(), simde_vdupq_n_f16(SIMDE_FLOAT16_VALUE(0.0))), test_vec[i].lane, a, b);
simde_test_arm_neon_assert_equal_f16x8(r, simde_vld1q_f16(test_vec[i].r), 1);
}
return 0;
}
static int
test_simde_vmulq_lane_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
@ -1146,6 +1236,85 @@ test_simde_vmulq_lane_u32 (SIMDE_MUNIT_TEST_ARGS) {
#endif
}
static int
test_simde_vmulq_laneq_f16 (SIMDE_MUNIT_TEST_ARGS) {
struct {
simde_float16_t a[8];
simde_float16_t b[8];
int lane;
simde_float16_t r[8];
} test_vec[] = {
{ { SIMDE_FLOAT16_VALUE(-4.6), SIMDE_FLOAT16_VALUE(0.6), SIMDE_FLOAT16_VALUE(5.9), SIMDE_FLOAT16_VALUE(-1.8),
SIMDE_FLOAT16_VALUE(0.0), SIMDE_FLOAT16_VALUE(-2.4), SIMDE_FLOAT16_VALUE(-1.9), SIMDE_FLOAT16_VALUE(9.7) },
{ SIMDE_FLOAT16_VALUE(9.3), SIMDE_FLOAT16_VALUE(-0.3), SIMDE_FLOAT16_VALUE(-6.4), SIMDE_FLOAT16_VALUE(0.1),
SIMDE_FLOAT16_VALUE(3.6), SIMDE_FLOAT16_VALUE(-2.8), SIMDE_FLOAT16_VALUE(-8.4), SIMDE_FLOAT16_VALUE(2.2) },
INT8_C(6),
{ SIMDE_FLOAT16_VALUE(38.640), SIMDE_FLOAT16_VALUE(-5.040), SIMDE_FLOAT16_VALUE(-49.560), SIMDE_FLOAT16_VALUE(15.120),
SIMDE_FLOAT16_VALUE(-0.000), SIMDE_FLOAT16_VALUE(20.160), SIMDE_FLOAT16_VALUE(15.960), SIMDE_FLOAT16_VALUE(-81.480) } },
{ { SIMDE_FLOAT16_VALUE(2.6), SIMDE_FLOAT16_VALUE(3.1), SIMDE_FLOAT16_VALUE(3.2), SIMDE_FLOAT16_VALUE(-8.3),
SIMDE_FLOAT16_VALUE(5.4), SIMDE_FLOAT16_VALUE(1.8), SIMDE_FLOAT16_VALUE(-7.8), SIMDE_FLOAT16_VALUE(-7.3) },
{ SIMDE_FLOAT16_VALUE(-3.5), SIMDE_FLOAT16_VALUE(5.5), SIMDE_FLOAT16_VALUE(-0.1), SIMDE_FLOAT16_VALUE(2.4),
SIMDE_FLOAT16_VALUE(9.5), SIMDE_FLOAT16_VALUE(-3.3), SIMDE_FLOAT16_VALUE(0.9), SIMDE_FLOAT16_VALUE(5.2) },
INT8_C(1),
{ SIMDE_FLOAT16_VALUE(14.300), SIMDE_FLOAT16_VALUE(17.050), SIMDE_FLOAT16_VALUE(17.600), SIMDE_FLOAT16_VALUE(-45.650),
SIMDE_FLOAT16_VALUE(29.700), SIMDE_FLOAT16_VALUE(9.900), SIMDE_FLOAT16_VALUE(-42.900), SIMDE_FLOAT16_VALUE(-40.150) } },
{ { SIMDE_FLOAT16_VALUE(-0.2), SIMDE_FLOAT16_VALUE(2.2), SIMDE_FLOAT16_VALUE(6.7), SIMDE_FLOAT16_VALUE(-6.7),
SIMDE_FLOAT16_VALUE(0.8), SIMDE_FLOAT16_VALUE(-5.1), SIMDE_FLOAT16_VALUE(1.0), SIMDE_FLOAT16_VALUE(-8.7) },
{ SIMDE_FLOAT16_VALUE(-5.8), SIMDE_FLOAT16_VALUE(2.9), SIMDE_FLOAT16_VALUE(7.3), SIMDE_FLOAT16_VALUE(6.6),
SIMDE_FLOAT16_VALUE(-0.3), SIMDE_FLOAT16_VALUE(6.2), SIMDE_FLOAT16_VALUE(2.5), SIMDE_FLOAT16_VALUE(0.2) },
INT8_C(5),
{ SIMDE_FLOAT16_VALUE(-1.240), SIMDE_FLOAT16_VALUE(13.640), SIMDE_FLOAT16_VALUE(41.540), SIMDE_FLOAT16_VALUE(-41.540),
SIMDE_FLOAT16_VALUE(4.960), SIMDE_FLOAT16_VALUE(-31.620), SIMDE_FLOAT16_VALUE(6.200), SIMDE_FLOAT16_VALUE(-53.940) } },
{ { SIMDE_FLOAT16_VALUE(1.5), SIMDE_FLOAT16_VALUE(-3.3), SIMDE_FLOAT16_VALUE(-0.3), SIMDE_FLOAT16_VALUE(1.4),
SIMDE_FLOAT16_VALUE(-3.7), SIMDE_FLOAT16_VALUE(1.1), SIMDE_FLOAT16_VALUE(0.6), SIMDE_FLOAT16_VALUE(0.8) },
{ SIMDE_FLOAT16_VALUE(-4.1), SIMDE_FLOAT16_VALUE(2.0), SIMDE_FLOAT16_VALUE(-6.6), SIMDE_FLOAT16_VALUE(1.6),
SIMDE_FLOAT16_VALUE(1.3), SIMDE_FLOAT16_VALUE(8.6), SIMDE_FLOAT16_VALUE(8.0), SIMDE_FLOAT16_VALUE(2.0) },
INT8_C(5),
{ SIMDE_FLOAT16_VALUE(12.900), SIMDE_FLOAT16_VALUE(-28.380), SIMDE_FLOAT16_VALUE(-2.580), SIMDE_FLOAT16_VALUE(12.040),
SIMDE_FLOAT16_VALUE(-31.820), SIMDE_FLOAT16_VALUE(9.460), SIMDE_FLOAT16_VALUE(5.160), SIMDE_FLOAT16_VALUE(6.880) } },
{ { SIMDE_FLOAT16_VALUE(-0.3), SIMDE_FLOAT16_VALUE(9.6), SIMDE_FLOAT16_VALUE(6.8), SIMDE_FLOAT16_VALUE(-7.4),
SIMDE_FLOAT16_VALUE(6.2), SIMDE_FLOAT16_VALUE(-3.4), SIMDE_FLOAT16_VALUE(6.5), SIMDE_FLOAT16_VALUE(-9.6) },
{ SIMDE_FLOAT16_VALUE(-3.2), SIMDE_FLOAT16_VALUE(-9.0), SIMDE_FLOAT16_VALUE(-1.0), SIMDE_FLOAT16_VALUE(7.0),
SIMDE_FLOAT16_VALUE(7.8), SIMDE_FLOAT16_VALUE(9.6), SIMDE_FLOAT16_VALUE(-1.9), SIMDE_FLOAT16_VALUE(3.1) },
INT8_C(6),
{ SIMDE_FLOAT16_VALUE(0.570), SIMDE_FLOAT16_VALUE(-18.240), SIMDE_FLOAT16_VALUE(-12.920), SIMDE_FLOAT16_VALUE(14.060),
SIMDE_FLOAT16_VALUE(-11.780), SIMDE_FLOAT16_VALUE(6.460), SIMDE_FLOAT16_VALUE(-12.350), SIMDE_FLOAT16_VALUE(18.240) } },
{ { SIMDE_FLOAT16_VALUE(-2.6), SIMDE_FLOAT16_VALUE(3.3), SIMDE_FLOAT16_VALUE(3.3), SIMDE_FLOAT16_VALUE(-1.0),
SIMDE_FLOAT16_VALUE(-2.4), SIMDE_FLOAT16_VALUE(7.8), SIMDE_FLOAT16_VALUE(0.8), SIMDE_FLOAT16_VALUE(-1.4) },
{ SIMDE_FLOAT16_VALUE(6.5), SIMDE_FLOAT16_VALUE(-8.3), SIMDE_FLOAT16_VALUE(8.1), SIMDE_FLOAT16_VALUE(0.2),
SIMDE_FLOAT16_VALUE(1.4), SIMDE_FLOAT16_VALUE(-2.7), SIMDE_FLOAT16_VALUE(7.9), SIMDE_FLOAT16_VALUE(-8.9) },
INT8_C(6),
{ SIMDE_FLOAT16_VALUE(-20.540), SIMDE_FLOAT16_VALUE(26.070), SIMDE_FLOAT16_VALUE(26.070), SIMDE_FLOAT16_VALUE(-7.900),
SIMDE_FLOAT16_VALUE(-18.960), SIMDE_FLOAT16_VALUE(61.620), SIMDE_FLOAT16_VALUE(6.320), SIMDE_FLOAT16_VALUE(-11.060) } },
{ { SIMDE_FLOAT16_VALUE(-3.9), SIMDE_FLOAT16_VALUE(-6.7), SIMDE_FLOAT16_VALUE(0.4), SIMDE_FLOAT16_VALUE(1.3),
SIMDE_FLOAT16_VALUE(9.4), SIMDE_FLOAT16_VALUE(-5.3), SIMDE_FLOAT16_VALUE(-4.6), SIMDE_FLOAT16_VALUE(-6.5) },
{ SIMDE_FLOAT16_VALUE(8.3), SIMDE_FLOAT16_VALUE(2.5), SIMDE_FLOAT16_VALUE(-0.5), SIMDE_FLOAT16_VALUE(-7.4),
SIMDE_FLOAT16_VALUE(-7.7), SIMDE_FLOAT16_VALUE(-8.0), SIMDE_FLOAT16_VALUE(9.0), SIMDE_FLOAT16_VALUE(-0.2) },
INT8_C(4),
{ SIMDE_FLOAT16_VALUE(30.030), SIMDE_FLOAT16_VALUE(51.590), SIMDE_FLOAT16_VALUE(-3.080), SIMDE_FLOAT16_VALUE(-10.010),
SIMDE_FLOAT16_VALUE(-72.380), SIMDE_FLOAT16_VALUE(40.810), SIMDE_FLOAT16_VALUE(35.420), SIMDE_FLOAT16_VALUE(50.050) } },
{ { SIMDE_FLOAT16_VALUE(1.4), SIMDE_FLOAT16_VALUE(-3.5), SIMDE_FLOAT16_VALUE(7.2), SIMDE_FLOAT16_VALUE(2.3),
SIMDE_FLOAT16_VALUE(-1.5), SIMDE_FLOAT16_VALUE(-9.1), SIMDE_FLOAT16_VALUE(-9.4), SIMDE_FLOAT16_VALUE(0.9) },
{ SIMDE_FLOAT16_VALUE(-1.4), SIMDE_FLOAT16_VALUE(9.7), SIMDE_FLOAT16_VALUE(-0.7), SIMDE_FLOAT16_VALUE(9.1),
SIMDE_FLOAT16_VALUE(-7.9), SIMDE_FLOAT16_VALUE(1.5), SIMDE_FLOAT16_VALUE(9.7), SIMDE_FLOAT16_VALUE(2.4) },
INT8_C(1),
{ SIMDE_FLOAT16_VALUE(13.580), SIMDE_FLOAT16_VALUE(-33.950), SIMDE_FLOAT16_VALUE(69.840), SIMDE_FLOAT16_VALUE(22.310),
SIMDE_FLOAT16_VALUE(-14.550), SIMDE_FLOAT16_VALUE(-88.270), SIMDE_FLOAT16_VALUE(-91.180), SIMDE_FLOAT16_VALUE(8.730) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float16x8_t a = simde_vld1q_f16(test_vec[i].a);
simde_float16x8_t b = simde_vld1q_f16(test_vec[i].b);
simde_float16x8_t r;
SIMDE_CONSTIFY_8_(simde_vmulq_laneq_f16, r, (HEDLEY_UNREACHABLE(), simde_vdupq_n_f16(SIMDE_FLOAT16_VALUE(0.0))), test_vec[i].lane, a, b);
simde_test_arm_neon_assert_equal_f16x8(r, simde_vld1q_f16(test_vec[i].r), 1);
}
return 0;
}
static int
test_simde_vmulq_laneq_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
@ -1708,6 +1877,46 @@ test_simde_vmuld_laneq_f64 (SIMDE_MUNIT_TEST_ARGS) {
#endif
}
static int
test_simde_vmulh_lane_f16 (SIMDE_MUNIT_TEST_ARGS) {
struct {
simde_float16_t a;
simde_float16_t b[4];
int lane;
simde_float16_t r;
} test_vec[] = {
{ SIMDE_FLOAT16_VALUE(-0.9),
{ SIMDE_FLOAT16_VALUE(-6.7), SIMDE_FLOAT16_VALUE(-3.2), SIMDE_FLOAT16_VALUE(11.3), SIMDE_FLOAT16_VALUE(-6.7) },
INT8_C(0),
SIMDE_FLOAT16_VALUE(6.030) },
{ SIMDE_FLOAT16_VALUE(4.5),
{ SIMDE_FLOAT16_VALUE(-1.1), SIMDE_FLOAT16_VALUE(7.4), SIMDE_FLOAT16_VALUE(-6.5), SIMDE_FLOAT16_VALUE(13.1) },
INT8_C(2),
SIMDE_FLOAT16_VALUE(-29.250) },
{ SIMDE_FLOAT16_VALUE(-3.7),
{ SIMDE_FLOAT16_VALUE(1.6), SIMDE_FLOAT16_VALUE(13.7), SIMDE_FLOAT16_VALUE(13.3), SIMDE_FLOAT16_VALUE(14.0) },
INT8_C(1),
SIMDE_FLOAT16_VALUE(-50.690) },
{ SIMDE_FLOAT16_VALUE(13.3),
{ SIMDE_FLOAT16_VALUE(11.7), SIMDE_FLOAT16_VALUE(8.7), SIMDE_FLOAT16_VALUE(-10.1), SIMDE_FLOAT16_VALUE(-4.4) },
INT8_C(1),
SIMDE_FLOAT16_VALUE(115.710) },
{ SIMDE_FLOAT16_VALUE(-9.9),
{ SIMDE_FLOAT16_VALUE(3.6), SIMDE_FLOAT16_VALUE(-13.7), SIMDE_FLOAT16_VALUE(-3.5), SIMDE_FLOAT16_VALUE(14.4) },
INT8_C(3),
SIMDE_FLOAT16_VALUE(-142.560) },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float16x4_t b = simde_vld1_f16(test_vec[i].b);
simde_float16_t r;
SIMDE_CONSTIFY_4_(simde_vmulh_lane_f16, r, (HEDLEY_UNREACHABLE(), r), test_vec[i].lane, test_vec[i].a, b);
simde_assert_equal_f16(r, test_vec[i].r, 1);
}
return 0;
}
static int
test_simde_vmuls_lane_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
@ -1777,6 +1986,51 @@ test_simde_vmuls_lane_f32 (SIMDE_MUNIT_TEST_ARGS) {
#endif
}
static int
test_simde_vmulh_laneq_f16 (SIMDE_MUNIT_TEST_ARGS) {
struct {
simde_float16_t a;
simde_float16_t b[8];
int lane;
simde_float16_t r;
} test_vec[] = {
{ SIMDE_FLOAT16_VALUE(9.2),
{ SIMDE_FLOAT16_VALUE(7.8), SIMDE_FLOAT16_VALUE(-2.1), SIMDE_FLOAT16_VALUE(6.4), SIMDE_FLOAT16_VALUE(-8.2),
SIMDE_FLOAT16_VALUE(10.0), SIMDE_FLOAT16_VALUE(1.3), SIMDE_FLOAT16_VALUE(-13.3), SIMDE_FLOAT16_VALUE(3.9) },
INT8_C(1),
SIMDE_FLOAT16_VALUE(-19.320) },
{ SIMDE_FLOAT16_VALUE(7.7),
{ SIMDE_FLOAT16_VALUE(-14.5), SIMDE_FLOAT16_VALUE(-4.9), SIMDE_FLOAT16_VALUE(13.4), SIMDE_FLOAT16_VALUE(14.6),
SIMDE_FLOAT16_VALUE(-12.9), SIMDE_FLOAT16_VALUE(-0.6), SIMDE_FLOAT16_VALUE(-7.4), SIMDE_FLOAT16_VALUE(6.6) },
INT8_C(7),
SIMDE_FLOAT16_VALUE(50.820) },
{ SIMDE_FLOAT16_VALUE(8.5),
{ SIMDE_FLOAT16_VALUE(5.6), SIMDE_FLOAT16_VALUE(-4.6), SIMDE_FLOAT16_VALUE(5.9), SIMDE_FLOAT16_VALUE(-11.4),
SIMDE_FLOAT16_VALUE(-11.6), SIMDE_FLOAT16_VALUE(7.8), SIMDE_FLOAT16_VALUE(-2.7), SIMDE_FLOAT16_VALUE(-4.8) },
INT8_C(6),
SIMDE_FLOAT16_VALUE(-22.950) },
{ SIMDE_FLOAT16_VALUE(-4.8),
{ SIMDE_FLOAT16_VALUE(-1.8), SIMDE_FLOAT16_VALUE(-3.2), SIMDE_FLOAT16_VALUE(14.6), SIMDE_FLOAT16_VALUE(-5.4),
SIMDE_FLOAT16_VALUE(-12.8), SIMDE_FLOAT16_VALUE(-8.3), SIMDE_FLOAT16_VALUE(9.9), SIMDE_FLOAT16_VALUE(-2.3) },
INT8_C(6),
SIMDE_FLOAT16_VALUE(-47.520) },
{ SIMDE_FLOAT16_VALUE(9.9),
{ SIMDE_FLOAT16_VALUE(-5.8), SIMDE_FLOAT16_VALUE(4.5), SIMDE_FLOAT16_VALUE(-0.2), SIMDE_FLOAT16_VALUE(12.2),
SIMDE_FLOAT16_VALUE(13.1), SIMDE_FLOAT16_VALUE(-4.2), SIMDE_FLOAT16_VALUE(-4.2), SIMDE_FLOAT16_VALUE(-7.1) },
INT8_C(0),
SIMDE_FLOAT16_VALUE(-57.420) },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float16x8_t b = simde_vld1q_f16(test_vec[i].b);
simde_float16_t r;
SIMDE_CONSTIFY_8_(simde_vmulh_laneq_f16, r, (HEDLEY_UNREACHABLE(), r), test_vec[i].lane, test_vec[i].a, b);
simde_assert_equal_f16(r, test_vec[i].r, 1);
}
return 0;
}
static int
test_simde_vmuls_laneq_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
@ -1846,6 +2100,54 @@ test_simde_vmuls_laneq_f32 (SIMDE_MUNIT_TEST_ARGS) {
#endif
}
static int
test_simde_vmul_laneq_f16 (SIMDE_MUNIT_TEST_ARGS) {
struct {
simde_float16_t a[4];
simde_float16_t b[8];
int lane;
simde_float16_t r[4];
} test_vec[] = {
{ { SIMDE_FLOAT16_VALUE(-2.3), SIMDE_FLOAT16_VALUE(-2.7), SIMDE_FLOAT16_VALUE(0.1), SIMDE_FLOAT16_VALUE(6.2) },
{ SIMDE_FLOAT16_VALUE(-4.0), SIMDE_FLOAT16_VALUE(1.4), SIMDE_FLOAT16_VALUE(-5.2), SIMDE_FLOAT16_VALUE(6.9),
SIMDE_FLOAT16_VALUE(8.4), SIMDE_FLOAT16_VALUE(2.6), SIMDE_FLOAT16_VALUE(-8.1), SIMDE_FLOAT16_VALUE(-9.4) },
INT8_C(3),
{ SIMDE_FLOAT16_VALUE(-15.870), SIMDE_FLOAT16_VALUE(-18.630), SIMDE_FLOAT16_VALUE(0.690), SIMDE_FLOAT16_VALUE(42.780) } },
{ { SIMDE_FLOAT16_VALUE(-7.8), SIMDE_FLOAT16_VALUE(5.4), SIMDE_FLOAT16_VALUE(8.4), SIMDE_FLOAT16_VALUE(-2.2) },
{ SIMDE_FLOAT16_VALUE(4.8), SIMDE_FLOAT16_VALUE(-5.0), SIMDE_FLOAT16_VALUE(-2.1), SIMDE_FLOAT16_VALUE(-6.0),
SIMDE_FLOAT16_VALUE(-7.9), SIMDE_FLOAT16_VALUE(-9.2), SIMDE_FLOAT16_VALUE(5.4), SIMDE_FLOAT16_VALUE(-9.1) },
INT8_C(4),
{ SIMDE_FLOAT16_VALUE(61.620), SIMDE_FLOAT16_VALUE(-42.660), SIMDE_FLOAT16_VALUE(-66.360), SIMDE_FLOAT16_VALUE(17.380) } },
{ { SIMDE_FLOAT16_VALUE(7.7), SIMDE_FLOAT16_VALUE(-1.8), SIMDE_FLOAT16_VALUE(-6.4), SIMDE_FLOAT16_VALUE(-1.7) },
{ SIMDE_FLOAT16_VALUE(7.6), SIMDE_FLOAT16_VALUE(-3.0), SIMDE_FLOAT16_VALUE(-4.4), SIMDE_FLOAT16_VALUE(-8.0),
SIMDE_FLOAT16_VALUE(-4.5), SIMDE_FLOAT16_VALUE(-7.9), SIMDE_FLOAT16_VALUE(6.1), SIMDE_FLOAT16_VALUE(-5.3) },
INT8_C(3),
{ SIMDE_FLOAT16_VALUE(-61.600), SIMDE_FLOAT16_VALUE(14.400), SIMDE_FLOAT16_VALUE(51.200), SIMDE_FLOAT16_VALUE(13.600) } },
{ { SIMDE_FLOAT16_VALUE(-5.9), SIMDE_FLOAT16_VALUE(0.9), SIMDE_FLOAT16_VALUE(2.3), SIMDE_FLOAT16_VALUE(9.1) },
{ SIMDE_FLOAT16_VALUE(-0.5), SIMDE_FLOAT16_VALUE(1.1), SIMDE_FLOAT16_VALUE(-1.4), SIMDE_FLOAT16_VALUE(3.7),
SIMDE_FLOAT16_VALUE(4.4), SIMDE_FLOAT16_VALUE(4.5), SIMDE_FLOAT16_VALUE(-0.5), SIMDE_FLOAT16_VALUE(6.5) },
INT8_C(2),
{ SIMDE_FLOAT16_VALUE(8.260), SIMDE_FLOAT16_VALUE(-1.260), SIMDE_FLOAT16_VALUE(-3.220), SIMDE_FLOAT16_VALUE(-12.740) } },
{ { SIMDE_FLOAT16_VALUE(1.6), SIMDE_FLOAT16_VALUE(6.5), SIMDE_FLOAT16_VALUE(-4.1), SIMDE_FLOAT16_VALUE(-1.1) },
{ SIMDE_FLOAT16_VALUE(-4.6), SIMDE_FLOAT16_VALUE(9.8), SIMDE_FLOAT16_VALUE(-4.3), SIMDE_FLOAT16_VALUE(-3.0),
SIMDE_FLOAT16_VALUE(-1.0), SIMDE_FLOAT16_VALUE(-7.7), SIMDE_FLOAT16_VALUE(2.3), SIMDE_FLOAT16_VALUE(-0.6) },
INT8_C(3),
{ SIMDE_FLOAT16_VALUE(-4.800), SIMDE_FLOAT16_VALUE(-19.500), SIMDE_FLOAT16_VALUE(12.300), SIMDE_FLOAT16_VALUE(3.300) } },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float16x4_t a = simde_vld1_f16(test_vec[i].a);
simde_float16x8_t b = simde_vld1q_f16(test_vec[i].b);
simde_float16x4_t r;
SIMDE_CONSTIFY_8_(simde_vmul_laneq_f16, r, (HEDLEY_UNREACHABLE(), simde_vdup_n_f16(SIMDE_FLOAT16_VALUE(0.0))), test_vec[i].lane, a, b);
simde_test_arm_neon_assert_equal_f16x4(r, simde_vld1_f16(test_vec[i].r), 1);
}
return 0;
}
static int
test_simde_vmul_laneq_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
@ -1995,6 +2297,7 @@ test_simde_vmul_laneq_f64 (SIMDE_MUNIT_TEST_ARGS) {
HEDLEY_DIAGNOSTIC_POP
SIMDE_TEST_FUNC_LIST_BEGIN
SIMDE_TEST_FUNC_LIST_ENTRY(vmul_lane_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vmul_lane_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmul_lane_f64)
SIMDE_TEST_FUNC_LIST_ENTRY(vmul_lane_s16)
@ -2007,6 +2310,7 @@ SIMDE_TEST_FUNC_LIST_ENTRY(vmul_laneq_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmul_laneq_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vmul_laneq_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmulq_lane_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vmulq_lane_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmulq_lane_f64)
SIMDE_TEST_FUNC_LIST_ENTRY(vmulq_lane_s16)
@ -2014,6 +2318,7 @@ SIMDE_TEST_FUNC_LIST_ENTRY(vmulq_lane_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmulq_lane_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vmulq_lane_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmulq_laneq_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vmulq_laneq_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmulq_laneq_f64)
SIMDE_TEST_FUNC_LIST_ENTRY(vmulq_laneq_s16)
@ -2025,7 +2330,10 @@ SIMDE_TEST_FUNC_LIST_ENTRY(vmuld_lane_f64)
SIMDE_TEST_FUNC_LIST_ENTRY(vmuld_laneq_f64)
SIMDE_TEST_FUNC_LIST_ENTRY(vmuls_lane_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmuls_laneq_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmulh_lane_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vmulh_laneq_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vmul_laneq_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vmul_laneq_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmul_laneq_f64)
SIMDE_TEST_FUNC_LIST_END