5241f43e创建于 2024年7月31日历史提交
#define SIMDE_TEST_ARM_NEON_INSN cmla_lane

#include "test-neon.h"
#include "../../../simde/arm/neon/cmla_lane.h"
#include "../../../simde/arm/neon/dup_n.h"

static int
test_simde_vcmla_lane_f16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_float16_t r_[4];
    simde_float16_t a[4];
    simde_float16_t b[4];
    const int lane;
    simde_float16_t r[4];
  } test_vec[] = {
    {
      { SIMDE_FLOAT16_VALUE(   -49.28), SIMDE_FLOAT16_VALUE(  -109.00), SIMDE_FLOAT16_VALUE(  -626.50), SIMDE_FLOAT16_VALUE(  -567.00) },
      { SIMDE_FLOAT16_VALUE(  -178.88), SIMDE_FLOAT16_VALUE(    10.22), SIMDE_FLOAT16_VALUE(  -228.12), SIMDE_FLOAT16_VALUE(   -31.19) },
      { SIMDE_FLOAT16_VALUE(    42.90), SIMDE_FLOAT16_VALUE(   -98.75), SIMDE_FLOAT16_VALUE(   350.00), SIMDE_FLOAT16_VALUE(   -48.00) },
       INT32_C(           0),
      { SIMDE_FLOAT16_VALUE(-7724.000000), SIMDE_FLOAT16_VALUE(-7784.000000), SIMDE_FLOAT16_VALUE(-10416.000000), SIMDE_FLOAT16_VALUE(-10352.000000) } },
    { { SIMDE_FLOAT16_VALUE(   730.00), SIMDE_FLOAT16_VALUE(   103.12), SIMDE_FLOAT16_VALUE(  -381.25), SIMDE_FLOAT16_VALUE(   898.50) },
      { SIMDE_FLOAT16_VALUE(   293.00), SIMDE_FLOAT16_VALUE(  -114.06), SIMDE_FLOAT16_VALUE(  -137.62), SIMDE_FLOAT16_VALUE(   722.50) },
      { SIMDE_FLOAT16_VALUE(    -6.33), SIMDE_FLOAT16_VALUE(   161.38), SIMDE_FLOAT16_VALUE(   115.50), SIMDE_FLOAT16_VALUE(    70.38) },
       INT32_C(           1),
      { SIMDE_FLOAT16_VALUE(48000.000000), SIMDE_FLOAT16_VALUE(47392.000000), SIMDE_FLOAT16_VALUE(-22592.000000), SIMDE_FLOAT16_VALUE(-21312.000000) } },
    { { SIMDE_FLOAT16_VALUE(  -210.88), SIMDE_FLOAT16_VALUE(  -430.75), SIMDE_FLOAT16_VALUE(   725.50), SIMDE_FLOAT16_VALUE(  -944.50) },
      { SIMDE_FLOAT16_VALUE(   142.00), SIMDE_FLOAT16_VALUE(  -966.00), SIMDE_FLOAT16_VALUE(  -131.50), SIMDE_FLOAT16_VALUE(   462.50) },
      { SIMDE_FLOAT16_VALUE(  -361.00), SIMDE_FLOAT16_VALUE(   185.62), SIMDE_FLOAT16_VALUE(    60.47), SIMDE_FLOAT16_VALUE(   749.50) },
       INT32_C(           0),
      { SIMDE_FLOAT16_VALUE(-51488.000000), SIMDE_FLOAT16_VALUE(-51680.000000), SIMDE_FLOAT16_VALUE(48192.000000), SIMDE_FLOAT16_VALUE(46528.000000) } },
    { { SIMDE_FLOAT16_VALUE(    89.44), SIMDE_FLOAT16_VALUE(  -200.50), SIMDE_FLOAT16_VALUE(  -136.50), SIMDE_FLOAT16_VALUE(  -180.50) },
      { SIMDE_FLOAT16_VALUE(  -157.12), SIMDE_FLOAT16_VALUE(   129.00), SIMDE_FLOAT16_VALUE(    99.06), SIMDE_FLOAT16_VALUE(   -75.25) },
      { SIMDE_FLOAT16_VALUE(    32.59), SIMDE_FLOAT16_VALUE(   239.50), SIMDE_FLOAT16_VALUE(   -29.96), SIMDE_FLOAT16_VALUE(  -177.50) },
       INT32_C(           1),
      { SIMDE_FLOAT16_VALUE(-37536.000000), SIMDE_FLOAT16_VALUE(-37824.000000), SIMDE_FLOAT16_VALUE(23584.000000), SIMDE_FLOAT16_VALUE(23552.000000) } },
    { { SIMDE_FLOAT16_VALUE(   167.25), SIMDE_FLOAT16_VALUE(    -1.52), SIMDE_FLOAT16_VALUE(   -63.38), SIMDE_FLOAT16_VALUE(    57.00) },
      { SIMDE_FLOAT16_VALUE(   191.75), SIMDE_FLOAT16_VALUE(  -197.00), SIMDE_FLOAT16_VALUE(   285.00), SIMDE_FLOAT16_VALUE(  -529.00) },
      { SIMDE_FLOAT16_VALUE(  -180.50), SIMDE_FLOAT16_VALUE(   375.50), SIMDE_FLOAT16_VALUE(  -206.00), SIMDE_FLOAT16_VALUE(   -75.25) },
       INT32_C(           0),
      { SIMDE_FLOAT16_VALUE(-34432.000000), SIMDE_FLOAT16_VALUE(-34624.000000), SIMDE_FLOAT16_VALUE(-51520.000000), SIMDE_FLOAT16_VALUE(-51392.000000) } },
    { { SIMDE_FLOAT16_VALUE(   -31.19), SIMDE_FLOAT16_VALUE(   -75.25), SIMDE_FLOAT16_VALUE(   -41.00), SIMDE_FLOAT16_VALUE(   285.00) },
      { SIMDE_FLOAT16_VALUE(    -1.52), SIMDE_FLOAT16_VALUE(    10.22), SIMDE_FLOAT16_VALUE(  -271.25), SIMDE_FLOAT16_VALUE(  -257.50) },
      { SIMDE_FLOAT16_VALUE(   -31.45), SIMDE_FLOAT16_VALUE(  -180.50), SIMDE_FLOAT16_VALUE(    69.62), SIMDE_FLOAT16_VALUE(   131.38) },
       INT32_C(           1),
      { SIMDE_FLOAT16_VALUE(243.125000), SIMDE_FLOAT16_VALUE(199.000000), SIMDE_FLOAT16_VALUE(48928.000000), SIMDE_FLOAT16_VALUE(49248.000000) } },
    { { SIMDE_FLOAT16_VALUE(   205.75), SIMDE_FLOAT16_VALUE(  -247.00), SIMDE_FLOAT16_VALUE(    60.47), SIMDE_FLOAT16_VALUE(    17.94) }, 
      { SIMDE_FLOAT16_VALUE(  -397.75), SIMDE_FLOAT16_VALUE(   166.12), SIMDE_FLOAT16_VALUE(  -110.75), SIMDE_FLOAT16_VALUE(    18.20) },
      { SIMDE_FLOAT16_VALUE(    89.81), SIMDE_FLOAT16_VALUE(    59.75), SIMDE_FLOAT16_VALUE(  -113.25), SIMDE_FLOAT16_VALUE(    97.31) },
       INT32_C(           0),
      { SIMDE_FLOAT16_VALUE(-35520.000000), SIMDE_FLOAT16_VALUE(-35968.000000), SIMDE_FLOAT16_VALUE(-9888.000000), SIMDE_FLOAT16_VALUE(-9928.000000) } },
    { { SIMDE_FLOAT16_VALUE(  -869.50), SIMDE_FLOAT16_VALUE(  -710.00), SIMDE_FLOAT16_VALUE(   457.25), SIMDE_FLOAT16_VALUE(   579.00) },
      { SIMDE_FLOAT16_VALUE(   226.38), SIMDE_FLOAT16_VALUE(   178.88), SIMDE_FLOAT16_VALUE(   181.75), SIMDE_FLOAT16_VALUE(  -151.12) },
      { SIMDE_FLOAT16_VALUE(   121.50), SIMDE_FLOAT16_VALUE(   -78.44), SIMDE_FLOAT16_VALUE(    48.06), SIMDE_FLOAT16_VALUE(    75.88) },
       INT32_C(           1),
      { SIMDE_FLOAT16_VALUE(-18624.000000), SIMDE_FLOAT16_VALUE(-18464.000000), SIMDE_FLOAT16_VALUE(-13800.000000), SIMDE_FLOAT16_VALUE(-13680.000000) } }
    
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float16x4_t r_ = simde_vld1_f16(test_vec[i].r_);
    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_2_(simde_vcmla_lane_f16, r, (HEDLEY_UNREACHABLE(), simde_vdup_n_f16(SIMDE_FLOAT16_VALUE(0.0))), test_vec[i].lane, r_, a, b);
    simde_test_arm_neon_assert_equal_f16x4(r, simde_vld1_f16(test_vec[i].r), 1);
   
  }
  
  return 0;
#else
  fputc('\n', stdout);
  const int lanes[] = { 0, 1, 0, 1, 0, 1, 0, 1 };
  for (int i = 0 ; i < 8 ; i++) {
    simde_float16x4_t r_ = simde_test_arm_neon_random_f16x4(-1000.0f, 1000.0f);
    simde_float16x4_t a = simde_test_arm_neon_random_f16x4(-1000.0f, 1000.0f);
    simde_float16x4_t b = simde_test_arm_neon_random_f16x4(-1000.0f, 1000.0f);
    simde_float16x4_t r = simde_vcmla_lane_f16(r_, a, b, lanes[i]);


    simde_test_arm_neon_write_f16x4(2, r_, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f16x4(2, a, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i32(2, lanes[i], SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vcmla_lane_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    simde_float32_t r_[2];
    simde_float32_t a[2];
    simde_float32_t b[2];
    const int lane;
    simde_float32_t r[2];
  } test_vec[] = {
    { { SIMDE_FLOAT32_C(    83.21), SIMDE_FLOAT32_C(   417.90) },
      { SIMDE_FLOAT32_C(  -875.72), SIMDE_FLOAT32_C(   830.54) },
      { SIMDE_FLOAT32_C(  -633.53), SIMDE_FLOAT32_C(   832.17) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(554878.125000), SIMDE_FLOAT32_C(555212.812500) } },
    { { SIMDE_FLOAT32_C(  -890.17), SIMDE_FLOAT32_C(   649.92) },
      { SIMDE_FLOAT32_C(  -111.22), SIMDE_FLOAT32_C(  -830.36) },
      { SIMDE_FLOAT32_C(    59.76), SIMDE_FLOAT32_C(   970.61) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(-7536.677246), SIMDE_FLOAT32_C(-5996.586914) } },
    { { SIMDE_FLOAT32_C(   522.31), SIMDE_FLOAT32_C(  -822.40) },
      { SIMDE_FLOAT32_C(   411.34), SIMDE_FLOAT32_C(  -692.35) },
      { SIMDE_FLOAT32_C(   648.71), SIMDE_FLOAT32_C(   385.20) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(267362.687500), SIMDE_FLOAT32_C(266017.968750) } },
    { { SIMDE_FLOAT32_C(   479.18), SIMDE_FLOAT32_C(  -793.73) },
      { SIMDE_FLOAT32_C(  -740.26), SIMDE_FLOAT32_C(   245.04) },
      { SIMDE_FLOAT32_C(   229.26), SIMDE_FLOAT32_C(  -113.23) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(-169232.828125), SIMDE_FLOAT32_C(-170505.734375) } },
    { { SIMDE_FLOAT32_C(   331.48), SIMDE_FLOAT32_C(  -677.34) },
      { SIMDE_FLOAT32_C(    97.30), SIMDE_FLOAT32_C(   -52.10) },
      { SIMDE_FLOAT32_C(   239.17), SIMDE_FLOAT32_C(   469.68) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(23602.720703), SIMDE_FLOAT32_C(22593.902344) } },
    { { SIMDE_FLOAT32_C(  -543.40), SIMDE_FLOAT32_C(   826.85) },
      { SIMDE_FLOAT32_C(   226.38), SIMDE_FLOAT32_C(   178.84) },
      { SIMDE_FLOAT32_C(   181.71), SIMDE_FLOAT32_C(   420.52) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(40592.113281), SIMDE_FLOAT32_C(41962.363281) } },
    { { SIMDE_FLOAT32_C(  -698.84), SIMDE_FLOAT32_C(  -151.15) },
      { SIMDE_FLOAT32_C(  -388.27), SIMDE_FLOAT32_C(   350.81) },
      { SIMDE_FLOAT32_C(   890.40), SIMDE_FLOAT32_C(  -664.75) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(-346414.437500), SIMDE_FLOAT32_C(-345866.750000) } },
    { { SIMDE_FLOAT32_C(  -617.94), SIMDE_FLOAT32_C(   190.84) },
      { SIMDE_FLOAT32_C(   218.13), SIMDE_FLOAT32_C(  -328.97) },
      { SIMDE_FLOAT32_C(  -549.59), SIMDE_FLOAT32_C(  -459.89) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(-120500.015625), SIMDE_FLOAT32_C(-119691.234375) } }
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float32x2_t r_ = simde_vld1_f32(test_vec[i].r_);
    simde_float32x2_t a = simde_vld1_f32(test_vec[i].a);
    simde_float32x2_t b = simde_vld1_f32(test_vec[i].b);
    simde_float32x2_t r = simde_vcmla_lane_f32(r_, a, b, 0);
    simde_test_arm_neon_assert_equal_f32x2(r, simde_vld1_f32(test_vec[i].r), 1);
  }
  return 0;
#else
  fputc('\n', stdout);
  const int lanes[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
  for (int i = 0 ; i < 8 ; i++) {
    simde_float32x2_t r_ = simde_test_arm_neon_random_f32x2(-1000.0f, 1000.0f);
    simde_float32x2_t a = simde_test_arm_neon_random_f32x2(-1000.0f, 1000.0f);
    simde_float32x2_t b = simde_test_arm_neon_random_f32x2(-1000.0f, 1000.0f);
    simde_float32x2_t r = simde_vcmla_lane_f32(r_, a, b, lanes[i]);


    simde_test_arm_neon_write_f32x2(2, r_, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f32x2(2, a, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i32(2, lanes[i], SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}


static int
test_simde_vcmla_laneq_f16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_float16_t r_[4];
    simde_float16_t a[4];
    simde_float16_t b[8];
    const int lane;
    simde_float16_t r[4];
  } test_vec[] = {
    { { SIMDE_FLOAT16_VALUE(   816.50), SIMDE_FLOAT16_VALUE(   773.50), SIMDE_FLOAT16_VALUE(  -377.75), SIMDE_FLOAT16_VALUE(   544.50) },
      { SIMDE_FLOAT16_VALUE(  -188.38), SIMDE_FLOAT16_VALUE(   269.75), SIMDE_FLOAT16_VALUE(   115.62), SIMDE_FLOAT16_VALUE(  -544.00) },
      { SIMDE_FLOAT16_VALUE(    42.90), SIMDE_FLOAT16_VALUE(   924.50), SIMDE_FLOAT16_VALUE(   484.00), SIMDE_FLOAT16_VALUE(  -757.00),
        SIMDE_FLOAT16_VALUE(   730.00), SIMDE_FLOAT16_VALUE(   103.12), SIMDE_FLOAT16_VALUE(  -381.25), SIMDE_FLOAT16_VALUE(   898.50) },
       INT32_C(           0),
      { SIMDE_FLOAT16_VALUE(-7264.000000), SIMDE_FLOAT16_VALUE(-7308.000000), SIMDE_FLOAT16_VALUE(4584.000000), SIMDE_FLOAT16_VALUE(5504.000000) } },
    { { SIMDE_FLOAT16_VALUE(   293.00), SIMDE_FLOAT16_VALUE(  -114.06), SIMDE_FLOAT16_VALUE(  -137.62), SIMDE_FLOAT16_VALUE(   722.50) },
      { SIMDE_FLOAT16_VALUE(    -6.33), SIMDE_FLOAT16_VALUE(   161.38), SIMDE_FLOAT16_VALUE(   115.50), SIMDE_FLOAT16_VALUE(    70.38) },
      { SIMDE_FLOAT16_VALUE(  -899.00), SIMDE_FLOAT16_VALUE(    32.51), SIMDE_FLOAT16_VALUE(   359.00), SIMDE_FLOAT16_VALUE(   342.25),
        SIMDE_FLOAT16_VALUE(   913.00), SIMDE_FLOAT16_VALUE(   740.50), SIMDE_FLOAT16_VALUE(  -436.25), SIMDE_FLOAT16_VALUE(  -904.00) },
       INT32_C(           1),
      { SIMDE_FLOAT16_VALUE(87.312500), SIMDE_FLOAT16_VALUE(-319.750000), SIMDE_FLOAT16_VALUE(3616.000000), SIMDE_FLOAT16_VALUE(4476.000000) } },
    { { SIMDE_FLOAT16_VALUE(  -335.25), SIMDE_FLOAT16_VALUE(  -252.38), SIMDE_FLOAT16_VALUE(   227.25), SIMDE_FLOAT16_VALUE(    -8.67) },
      { SIMDE_FLOAT16_VALUE(   490.50), SIMDE_FLOAT16_VALUE(   507.50), SIMDE_FLOAT16_VALUE(  -979.50), SIMDE_FLOAT16_VALUE(  -718.00) },
      { SIMDE_FLOAT16_VALUE(   -10.20), SIMDE_FLOAT16_VALUE(   205.75), SIMDE_FLOAT16_VALUE(  -797.50), SIMDE_FLOAT16_VALUE(   741.50),
        SIMDE_FLOAT16_VALUE(  -835.00), SIMDE_FLOAT16_VALUE(  -308.00), SIMDE_FLOAT16_VALUE(  -674.50), SIMDE_FLOAT16_VALUE(  -247.00) },
       INT32_C(           0),
      { SIMDE_FLOAT16_VALUE(-5340.000000), SIMDE_FLOAT16_VALUE(-5256.000000), SIMDE_FLOAT16_VALUE(10224.000000), SIMDE_FLOAT16_VALUE(9984.000000) } },
    { { SIMDE_FLOAT16_VALUE(  -210.88), SIMDE_FLOAT16_VALUE(  -430.75), SIMDE_FLOAT16_VALUE(   725.50), SIMDE_FLOAT16_VALUE(  -944.50) },
      { SIMDE_FLOAT16_VALUE(   142.00), SIMDE_FLOAT16_VALUE(  -966.00), SIMDE_FLOAT16_VALUE(  -131.50), SIMDE_FLOAT16_VALUE(   462.50) },
      { SIMDE_FLOAT16_VALUE(  -361.00), SIMDE_FLOAT16_VALUE(   185.62), SIMDE_FLOAT16_VALUE(    60.47), SIMDE_FLOAT16_VALUE(   749.50),
        SIMDE_FLOAT16_VALUE(  -975.50), SIMDE_FLOAT16_VALUE(   383.50), SIMDE_FLOAT16_VALUE(   500.25), SIMDE_FLOAT16_VALUE(   517.00) },
       INT32_C(           1),
      { SIMDE_FLOAT16_VALUE(26144.000000), SIMDE_FLOAT16_VALUE(25920.000000), SIMDE_FLOAT16_VALUE(-23680.000000), SIMDE_FLOAT16_VALUE(-25360.000000) } },
    { { SIMDE_FLOAT16_VALUE(   540.00), SIMDE_FLOAT16_VALUE(  -927.50), SIMDE_FLOAT16_VALUE(    17.94), SIMDE_FLOAT16_VALUE(   340.75) },
      { SIMDE_FLOAT16_VALUE(  -397.75), SIMDE_FLOAT16_VALUE(   166.12), SIMDE_FLOAT16_VALUE(   854.00), SIMDE_FLOAT16_VALUE(  -110.75) },
      { SIMDE_FLOAT16_VALUE(   -53.36), SIMDE_FLOAT16_VALUE(  -465.00), SIMDE_FLOAT16_VALUE(  -104.00), SIMDE_FLOAT16_VALUE(  -348.00),
        SIMDE_FLOAT16_VALUE(  -370.75), SIMDE_FLOAT16_VALUE(    18.20), SIMDE_FLOAT16_VALUE(  -209.25), SIMDE_FLOAT16_VALUE(  -856.00) },
       INT32_C(           0),
      { SIMDE_FLOAT16_VALUE(21776.000000), SIMDE_FLOAT16_VALUE(20304.000000), SIMDE_FLOAT16_VALUE(-45568.000000), SIMDE_FLOAT16_VALUE(-45248.000000) } },
    { { SIMDE_FLOAT16_VALUE(   251.25), SIMDE_FLOAT16_VALUE(   523.50), SIMDE_FLOAT16_VALUE(   -62.34), SIMDE_FLOAT16_VALUE(  -412.00) },
      { SIMDE_FLOAT16_VALUE(   818.50), SIMDE_FLOAT16_VALUE(  -266.25), SIMDE_FLOAT16_VALUE(   558.50), SIMDE_FLOAT16_VALUE(  -474.75) },
      { SIMDE_FLOAT16_VALUE(   583.50), SIMDE_FLOAT16_VALUE(    58.66), SIMDE_FLOAT16_VALUE(   875.50), SIMDE_FLOAT16_VALUE(   382.50),
        SIMDE_FLOAT16_VALUE(  -535.00), SIMDE_FLOAT16_VALUE(   374.50), SIMDE_FLOAT16_VALUE(    89.81), SIMDE_FLOAT16_VALUE(   432.50) },
       INT32_C(           1),
      { SIMDE_FLOAT16_VALUE(48256.000000), SIMDE_FLOAT16_VALUE(48544.000000), SIMDE_FLOAT16_VALUE(32704.000000), SIMDE_FLOAT16_VALUE(32352.000000) } },
    { { SIMDE_FLOAT16_VALUE(    83.19), SIMDE_FLOAT16_VALUE(   418.00), SIMDE_FLOAT16_VALUE(  -875.50), SIMDE_FLOAT16_VALUE(   830.50) },
      { SIMDE_FLOAT16_VALUE(  -633.50), SIMDE_FLOAT16_VALUE(   832.00), SIMDE_FLOAT16_VALUE(  -890.00), SIMDE_FLOAT16_VALUE(   650.00) },
      { SIMDE_FLOAT16_VALUE(   -31.19), SIMDE_FLOAT16_VALUE(  -830.50), SIMDE_FLOAT16_VALUE(    59.75), SIMDE_FLOAT16_VALUE(   970.50),
        SIMDE_FLOAT16_VALUE(   522.50), SIMDE_FLOAT16_VALUE(  -822.50), SIMDE_FLOAT16_VALUE(   411.25), SIMDE_FLOAT16_VALUE(  -692.50) },
       INT32_C(           0),
      { SIMDE_FLOAT16_VALUE(19840.000000), SIMDE_FLOAT16_VALUE(20176.000000), SIMDE_FLOAT16_VALUE(26880.000000), SIMDE_FLOAT16_VALUE(28592.000000) } },
    { { SIMDE_FLOAT16_VALUE(   648.50), SIMDE_FLOAT16_VALUE(   385.25), SIMDE_FLOAT16_VALUE(   479.25), SIMDE_FLOAT16_VALUE(  -793.50) },
      { SIMDE_FLOAT16_VALUE(  -740.50), SIMDE_FLOAT16_VALUE(   245.00), SIMDE_FLOAT16_VALUE(   229.25), SIMDE_FLOAT16_VALUE(  -113.25) },
      { SIMDE_FLOAT16_VALUE(   331.50), SIMDE_FLOAT16_VALUE(   -75.25), SIMDE_FLOAT16_VALUE(    97.31), SIMDE_FLOAT16_VALUE(   -52.09),
        SIMDE_FLOAT16_VALUE(   239.12), SIMDE_FLOAT16_VALUE(   469.75), SIMDE_FLOAT16_VALUE(  -543.50), SIMDE_FLOAT16_VALUE(   827.00) },
       INT32_C(           1),
      { SIMDE_FLOAT16_VALUE(56384.000000), SIMDE_FLOAT16_VALUE(56096.000000), SIMDE_FLOAT16_VALUE(-16768.000000), SIMDE_FLOAT16_VALUE(-18048.000000) } }
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float16x4_t r_ = simde_vld1_f16(test_vec[i].r_);
    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_2_(simde_vcmla_laneq_f16, r, (HEDLEY_UNREACHABLE(), simde_vdup_n_f16(SIMDE_FLOAT16_VALUE(0.0))), test_vec[i].lane, r_, a, b);
    simde_test_arm_neon_assert_equal_f16x4(r, simde_vld1_f16(test_vec[i].r), 1);
  }
  
  return 0;
#else
  fputc('\n', stdout);
  const int lanes[] = { 0, 1, 0, 1, 0, 1, 0, 1 };
  for (int i = 0 ; i < 8 ; i++) {
    simde_float16x4_t r_ = simde_test_arm_neon_random_f16x4(-1000.0f, 1000.0f);
    simde_float16x4_t a = simde_test_arm_neon_random_f16x4(-1000.0f, 1000.0f);
    simde_float16x8_t b = simde_test_arm_neon_random_f16x8(-1000.0f, 1000.0f);
    simde_float16x4_t r = simde_vcmla_laneq_f16(r_, a, b, lanes[i]);


    simde_test_arm_neon_write_f16x4(2, r_, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f16x4(2, a, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i32(2, lanes[i], SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vcmla_laneq_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    simde_float32_t r_[2];
    simde_float32_t a[2];
    simde_float32_t b[4];
    const int lane;
    simde_float32_t r[2];
  } test_vec[] = {
    { { SIMDE_FLOAT32_C(  -470.26), SIMDE_FLOAT32_C(    81.87) },
      { SIMDE_FLOAT32_C(    72.27), SIMDE_FLOAT32_C(  -992.59) },
      { SIMDE_FLOAT32_C(  -615.67), SIMDE_FLOAT32_C(   620.28), SIMDE_FLOAT32_C(  -606.51), SIMDE_FLOAT32_C(  -327.77) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(-44964.726562), SIMDE_FLOAT32_C(-44412.597656) } },
    { { SIMDE_FLOAT32_C(  -331.80), SIMDE_FLOAT32_C(  -605.94) },
      { SIMDE_FLOAT32_C(  -295.86), SIMDE_FLOAT32_C(  -275.42) },
      { SIMDE_FLOAT32_C(  -752.64), SIMDE_FLOAT32_C(    21.91), SIMDE_FLOAT32_C(   826.83), SIMDE_FLOAT32_C(   599.82) },
       INT32_C(           1),
      { SIMDE_FLOAT32_C(-6814.092285), SIMDE_FLOAT32_C(-7088.232422) } },
    { { SIMDE_FLOAT32_C(   -30.36), SIMDE_FLOAT32_C(   631.53) },
      { SIMDE_FLOAT32_C(   850.75), SIMDE_FLOAT32_C(  -263.55) },
      { SIMDE_FLOAT32_C(   139.96), SIMDE_FLOAT32_C(   859.14), SIMDE_FLOAT32_C(  -834.47), SIMDE_FLOAT32_C(   216.10) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(119040.617188), SIMDE_FLOAT32_C(119702.507812) } },
    { { SIMDE_FLOAT32_C(   995.86), SIMDE_FLOAT32_C(   529.74) },
      { SIMDE_FLOAT32_C(    79.08), SIMDE_FLOAT32_C(   947.13) },
      { SIMDE_FLOAT32_C(   122.02), SIMDE_FLOAT32_C(  -250.00), SIMDE_FLOAT32_C(  -361.82), SIMDE_FLOAT32_C(   265.24) },
       INT32_C(           1),
      { SIMDE_FLOAT32_C(-18774.140625), SIMDE_FLOAT32_C(-19240.259766) } },
    { { SIMDE_FLOAT32_C(   275.71), SIMDE_FLOAT32_C(     2.71) },
      { SIMDE_FLOAT32_C(    99.79), SIMDE_FLOAT32_C(  -137.67) },
      { SIMDE_FLOAT32_C(  -761.19), SIMDE_FLOAT32_C(   813.19), SIMDE_FLOAT32_C(  -897.68), SIMDE_FLOAT32_C(   653.58) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(-75683.437500), SIMDE_FLOAT32_C(-75956.437500) } },
    { { SIMDE_FLOAT32_C(   396.02), SIMDE_FLOAT32_C(   413.06) },
      { SIMDE_FLOAT32_C(   514.09), SIMDE_FLOAT32_C(  -977.67) },
      { SIMDE_FLOAT32_C(  -671.79), SIMDE_FLOAT32_C(   -92.13), SIMDE_FLOAT32_C(  -441.32), SIMDE_FLOAT32_C(  -374.27) },
       INT32_C(           1),
      { SIMDE_FLOAT32_C(-46967.093750), SIMDE_FLOAT32_C(-46950.054688) } },
    { { SIMDE_FLOAT32_C(  -151.97), SIMDE_FLOAT32_C(   -79.55) },
      { SIMDE_FLOAT32_C(  -214.62), SIMDE_FLOAT32_C(  -614.75) },
      { SIMDE_FLOAT32_C(   678.79), SIMDE_FLOAT32_C(   783.83), SIMDE_FLOAT32_C(   493.05), SIMDE_FLOAT32_C(  -896.00) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(-145833.875000), SIMDE_FLOAT32_C(-145761.453125) } },
    { { SIMDE_FLOAT32_C(   104.13), SIMDE_FLOAT32_C(   278.54) },
      { SIMDE_FLOAT32_C(   171.54), SIMDE_FLOAT32_C(  -682.63) },
      { SIMDE_FLOAT32_C(   217.09), SIMDE_FLOAT32_C(    49.35), SIMDE_FLOAT32_C(   256.50), SIMDE_FLOAT32_C(   -92.04) },
       INT32_C(           1),
      { SIMDE_FLOAT32_C(8569.627930), SIMDE_FLOAT32_C(8744.038086) } }
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float32x2_t r_ = simde_vld1_f32(test_vec[i].r_);
    simde_float32x2_t a = simde_vld1_f32(test_vec[i].a);
    simde_float32x4_t b = simde_vld1q_f32(test_vec[i].b);
    simde_float32x2_t r;
    SIMDE_CONSTIFY_2_(simde_vcmla_laneq_f32, r, (HEDLEY_UNREACHABLE(), simde_vdup_n_f32(SIMDE_FLOAT32_C(0.0))), test_vec[i].lane, r_, a, b);
    simde_test_arm_neon_assert_equal_f32x2(r, simde_vld1_f32(test_vec[i].r), 1);
  }
  return 0;
#else
  fputc('\n', stdout);
  const int lanes[] = { 0, 1, 0, 1, 0, 1, 0, 1 };
  for (int i = 0 ; i < 8 ; i++) {
    simde_float32x2_t r_ = simde_test_arm_neon_random_f32x2(-1000.0f, 1000.0f);
    simde_float32x2_t a = simde_test_arm_neon_random_f32x2(-1000.0f, 1000.0f);
    simde_float32x4_t b = simde_test_arm_neon_random_f32x4(-1000.0f, 1000.0f);
    simde_float32x2_t r = simde_vcmla_laneq_f32(r_, a, b, lanes[i]);


    simde_test_arm_neon_write_f32x2(2, r_, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f32x2(2, a, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i32(2, lanes[i], SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vcmlaq_lane_f16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_float16_t r_[8];
    simde_float16_t a[8];
    simde_float16_t b[4];
    const int lane;
    simde_float16_t r[8];
  } test_vec[] = {

    { { SIMDE_FLOAT16_VALUE(   226.38), SIMDE_FLOAT16_VALUE(   178.88), SIMDE_FLOAT16_VALUE(   181.75), SIMDE_FLOAT16_VALUE(   420.50),
        SIMDE_FLOAT16_VALUE(  -699.00), SIMDE_FLOAT16_VALUE(  -151.12), SIMDE_FLOAT16_VALUE(  -388.25), SIMDE_FLOAT16_VALUE(   350.75) },
      { SIMDE_FLOAT16_VALUE(   890.50), SIMDE_FLOAT16_VALUE(  -665.00), SIMDE_FLOAT16_VALUE(  -618.00), SIMDE_FLOAT16_VALUE(   190.88),
        SIMDE_FLOAT16_VALUE(   218.12), SIMDE_FLOAT16_VALUE(  -329.00), SIMDE_FLOAT16_VALUE(  -549.50), SIMDE_FLOAT16_VALUE(  -460.00) },
      { SIMDE_FLOAT16_VALUE(   -49.28), SIMDE_FLOAT16_VALUE(  -695.50), SIMDE_FLOAT16_VALUE(   121.50), SIMDE_FLOAT16_VALUE(   -78.44) },
       INT32_C(           0),
      { SIMDE_FLOAT16_VALUE(-43648.000000), SIMDE_FLOAT16_VALUE(-43712.000000), SIMDE_FLOAT16_VALUE(30640.000000), SIMDE_FLOAT16_VALUE(30880.000000), 
        SIMDE_FLOAT16_VALUE(-11448.000000), SIMDE_FLOAT16_VALUE(-10904.000000), SIMDE_FLOAT16_VALUE(26688.000000), SIMDE_FLOAT16_VALUE(27424.000000) } },
    { { SIMDE_FLOAT16_VALUE(  -869.50), SIMDE_FLOAT16_VALUE(  -710.00), SIMDE_FLOAT16_VALUE(   457.25), SIMDE_FLOAT16_VALUE(   579.00),
        SIMDE_FLOAT16_VALUE(  -786.50), SIMDE_FLOAT16_VALUE(  -974.00), SIMDE_FLOAT16_VALUE(  -570.50), SIMDE_FLOAT16_VALUE(   369.25) },
      { SIMDE_FLOAT16_VALUE(    48.06), SIMDE_FLOAT16_VALUE(  -640.00), SIMDE_FLOAT16_VALUE(  -552.00), SIMDE_FLOAT16_VALUE(    75.88),
        SIMDE_FLOAT16_VALUE(   352.25), SIMDE_FLOAT16_VALUE(   324.25), SIMDE_FLOAT16_VALUE(   485.50), SIMDE_FLOAT16_VALUE(   943.50) },
      { SIMDE_FLOAT16_VALUE(  -976.00), SIMDE_FLOAT16_VALUE(    89.44), SIMDE_FLOAT16_VALUE(  -100.62), SIMDE_FLOAT16_VALUE(  -463.75) },
       INT32_C(           1),
      { SIMDE_FLOAT16_VALUE(3430.000000), SIMDE_FLOAT16_VALUE(3588.000000), SIMDE_FLOAT16_VALUE(-48928.000000), SIMDE_FLOAT16_VALUE(-48800.000000), 
        SIMDE_FLOAT16_VALUE(30720.000000), SIMDE_FLOAT16_VALUE(30528.000000), SIMDE_FLOAT16_VALUE(42848.000000), SIMDE_FLOAT16_VALUE(43776.000000) } },
    { { SIMDE_FLOAT16_VALUE(  -973.00), SIMDE_FLOAT16_VALUE(  -159.62), SIMDE_FLOAT16_VALUE(  -377.00), SIMDE_FLOAT16_VALUE(  -853.00),
        SIMDE_FLOAT16_VALUE(   831.00), SIMDE_FLOAT16_VALUE(   661.00), SIMDE_FLOAT16_VALUE(  -717.00), SIMDE_FLOAT16_VALUE(   891.50) },
      { SIMDE_FLOAT16_VALUE(   535.50), SIMDE_FLOAT16_VALUE(   621.50), SIMDE_FLOAT16_VALUE(   578.50), SIMDE_FLOAT16_VALUE(   430.50),
        SIMDE_FLOAT16_VALUE(  -574.50), SIMDE_FLOAT16_VALUE(  -319.75), SIMDE_FLOAT16_VALUE(  -735.00), SIMDE_FLOAT16_VALUE(   248.50) },
      { SIMDE_FLOAT16_VALUE(    32.59), SIMDE_FLOAT16_VALUE(   192.38), SIMDE_FLOAT16_VALUE(   679.00), SIMDE_FLOAT16_VALUE(   502.25) },
       INT32_C(           0),
      { SIMDE_FLOAT16_VALUE(16480.000000), SIMDE_FLOAT16_VALUE(17296.000000), SIMDE_FLOAT16_VALUE(18480.000000), SIMDE_FLOAT16_VALUE(18000.000000), 
        SIMDE_FLOAT16_VALUE(-17888.000000), SIMDE_FLOAT16_VALUE(-18064.000000), SIMDE_FLOAT16_VALUE(-24672.000000), SIMDE_FLOAT16_VALUE(-23072.000000) } },
    { { SIMDE_FLOAT16_VALUE(  -618.50), SIMDE_FLOAT16_VALUE(   -70.81), SIMDE_FLOAT16_VALUE(  -596.50), SIMDE_FLOAT16_VALUE(   810.50),
        SIMDE_FLOAT16_VALUE(   863.50), SIMDE_FLOAT16_VALUE(   828.50), SIMDE_FLOAT16_VALUE(  -563.50), SIMDE_FLOAT16_VALUE(  -576.50) },
      { SIMDE_FLOAT16_VALUE(  -703.50), SIMDE_FLOAT16_VALUE(   384.00), SIMDE_FLOAT16_VALUE(  -772.50), SIMDE_FLOAT16_VALUE(   457.50),
        SIMDE_FLOAT16_VALUE(   296.00), SIMDE_FLOAT16_VALUE(   653.00), SIMDE_FLOAT16_VALUE(  -121.00), SIMDE_FLOAT16_VALUE(   945.50) },
      { SIMDE_FLOAT16_VALUE(  -280.75), SIMDE_FLOAT16_VALUE(   -31.45), SIMDE_FLOAT16_VALUE(   688.50), SIMDE_FLOAT16_VALUE(   192.00) },
       INT32_C(           1),
      { SIMDE_FLOAT16_VALUE(21504.000000), SIMDE_FLOAT16_VALUE(22064.000000), SIMDE_FLOAT16_VALUE(23696.000000), SIMDE_FLOAT16_VALUE(25104.000000), 
        SIMDE_FLOAT16_VALUE(-8448.000000), SIMDE_FLOAT16_VALUE(-8480.000000), SIMDE_FLOAT16_VALUE(3242.000000), SIMDE_FLOAT16_VALUE(3230.000000) } },
    { { SIMDE_FLOAT16_VALUE(  -523.00), SIMDE_FLOAT16_VALUE(  -323.75), SIMDE_FLOAT16_VALUE(  -888.00), SIMDE_FLOAT16_VALUE(  -283.75),
        SIMDE_FLOAT16_VALUE(  -117.75), SIMDE_FLOAT16_VALUE(  -841.50), SIMDE_FLOAT16_VALUE(   665.00), SIMDE_FLOAT16_VALUE(  -987.00) },
      { SIMDE_FLOAT16_VALUE(  -643.00), SIMDE_FLOAT16_VALUE(  -152.12), SIMDE_FLOAT16_VALUE(   964.00), SIMDE_FLOAT16_VALUE(   920.00),
        SIMDE_FLOAT16_VALUE(   630.50), SIMDE_FLOAT16_VALUE(  -669.50), SIMDE_FLOAT16_VALUE(   671.00), SIMDE_FLOAT16_VALUE(   257.00) },
      { SIMDE_FLOAT16_VALUE(    10.22), SIMDE_FLOAT16_VALUE(  -857.50), SIMDE_FLOAT16_VALUE(   334.75), SIMDE_FLOAT16_VALUE(  -617.50) },
       INT32_C(           0),
      { SIMDE_FLOAT16_VALUE(-7092.000000), SIMDE_FLOAT16_VALUE(-6896.000000), SIMDE_FLOAT16_VALUE(8960.000000), SIMDE_FLOAT16_VALUE(9568.000000),
        SIMDE_FLOAT16_VALUE(6324.000000), SIMDE_FLOAT16_VALUE(5600.000000), SIMDE_FLOAT16_VALUE(7520.000000), SIMDE_FLOAT16_VALUE(5868.000000) } },
    { { SIMDE_FLOAT16_VALUE(  -439.50), SIMDE_FLOAT16_VALUE(   245.12), SIMDE_FLOAT16_VALUE(   111.06), SIMDE_FLOAT16_VALUE(   520.50),
        SIMDE_FLOAT16_VALUE(    85.50), SIMDE_FLOAT16_VALUE(   250.25), SIMDE_FLOAT16_VALUE(  -680.00), SIMDE_FLOAT16_VALUE(  -750.00) },
      { SIMDE_FLOAT16_VALUE(  -138.25), SIMDE_FLOAT16_VALUE(   -14.62), SIMDE_FLOAT16_VALUE(  -921.50), SIMDE_FLOAT16_VALUE(   225.88),
        SIMDE_FLOAT16_VALUE(   242.88), SIMDE_FLOAT16_VALUE(   869.50), SIMDE_FLOAT16_VALUE(   298.00), SIMDE_FLOAT16_VALUE(   105.69) },
      { SIMDE_FLOAT16_VALUE(  -722.50), SIMDE_FLOAT16_VALUE(    -8.75), SIMDE_FLOAT16_VALUE(  -245.75), SIMDE_FLOAT16_VALUE(   915.50) },
       INT32_C(           1),
      { SIMDE_FLOAT16_VALUE(770.000000), SIMDE_FLOAT16_VALUE(1455.000000), SIMDE_FLOAT16_VALUE(8176.000000), SIMDE_FLOAT16_VALUE(8584.000000),
        SIMDE_FLOAT16_VALUE(-2040.000000), SIMDE_FLOAT16_VALUE(-1875.000000), SIMDE_FLOAT16_VALUE(-3288.000000), SIMDE_FLOAT16_VALUE(-3358.000000) } },
    { { SIMDE_FLOAT16_VALUE(    54.19), SIMDE_FLOAT16_VALUE(  -928.00), SIMDE_FLOAT16_VALUE(   362.50), SIMDE_FLOAT16_VALUE(  -936.50),
        SIMDE_FLOAT16_VALUE(   185.88), SIMDE_FLOAT16_VALUE(  -244.38), SIMDE_FLOAT16_VALUE(   924.50), SIMDE_FLOAT16_VALUE(  -644.00) },
      { SIMDE_FLOAT16_VALUE(  -517.00), SIMDE_FLOAT16_VALUE(  -615.00), SIMDE_FLOAT16_VALUE(  -751.50), SIMDE_FLOAT16_VALUE(  -974.00),
        SIMDE_FLOAT16_VALUE(  -144.38), SIMDE_FLOAT16_VALUE(   338.25), SIMDE_FLOAT16_VALUE(   705.00), SIMDE_FLOAT16_VALUE(   116.88) },
      { SIMDE_FLOAT16_VALUE(    49.38), SIMDE_FLOAT16_VALUE(  -363.00), SIMDE_FLOAT16_VALUE(  -476.25), SIMDE_FLOAT16_VALUE(   106.69) },
       INT32_C(           0),
      { SIMDE_FLOAT16_VALUE(-25472.000000), SIMDE_FLOAT16_VALUE(-26448.000000), SIMDE_FLOAT16_VALUE(-36736.000000), SIMDE_FLOAT16_VALUE(-38048.000000),
        SIMDE_FLOAT16_VALUE(-6944.000000), SIMDE_FLOAT16_VALUE(-7372.000000), SIMDE_FLOAT16_VALUE(35744.000000), SIMDE_FLOAT16_VALUE(34176.000000) } },
    { { SIMDE_FLOAT16_VALUE(  -726.00), SIMDE_FLOAT16_VALUE(  -353.75), SIMDE_FLOAT16_VALUE(   268.50), SIMDE_FLOAT16_VALUE(   729.00),
        SIMDE_FLOAT16_VALUE(  -470.25), SIMDE_FLOAT16_VALUE(    81.88), SIMDE_FLOAT16_VALUE(    72.25), SIMDE_FLOAT16_VALUE(  -992.50) },
      { SIMDE_FLOAT16_VALUE(  -615.50), SIMDE_FLOAT16_VALUE(   620.50), SIMDE_FLOAT16_VALUE(  -606.50), SIMDE_FLOAT16_VALUE(  -327.75),
        SIMDE_FLOAT16_VALUE(  -331.75), SIMDE_FLOAT16_VALUE(  -606.00), SIMDE_FLOAT16_VALUE(  -295.75), SIMDE_FLOAT16_VALUE(  -275.50) },
      { SIMDE_FLOAT16_VALUE(  -752.50), SIMDE_FLOAT16_VALUE(    21.91), SIMDE_FLOAT16_VALUE(   827.00), SIMDE_FLOAT16_VALUE(   600.00) },
       INT32_C(           1),
      { SIMDE_FLOAT16_VALUE(-14208.000000), SIMDE_FLOAT16_VALUE(-13840.000000), SIMDE_FLOAT16_VALUE(-13016.000000), SIMDE_FLOAT16_VALUE(-12560.000000),
        SIMDE_FLOAT16_VALUE(-7736.000000), SIMDE_FLOAT16_VALUE(-7184.000000), SIMDE_FLOAT16_VALUE(-6408.000000), SIMDE_FLOAT16_VALUE(-7472.000000) } }
    
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float16x8_t r_ = simde_vld1q_f16(test_vec[i].r_);
    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_2_(simde_vcmlaq_lane_f16, r, (HEDLEY_UNREACHABLE(), simde_vdupq_n_f16(SIMDE_FLOAT16_VALUE(0.0))), test_vec[i].lane, r_, a, b);
    
    simde_test_arm_neon_assert_equal_f16x8(r, simde_vld1q_f16(test_vec[i].r), 1);
   
  }
  
  return 0;
#else
  fputc('\n', stdout);
  const int lanes[] = { 0, 1, 0, 1, 0, 1, 0, 1 };
  for (int i = 0 ; i < 8 ; i++) {
    simde_float16x8_t r_ = simde_test_arm_neon_random_f16x8(-1000.0f, 1000.0f);
    simde_float16x8_t a = simde_test_arm_neon_random_f16x8(-1000.0f, 1000.0f);
    simde_float16x4_t b = simde_test_arm_neon_random_f16x4(-1000.0f, 1000.0f);
    simde_float16x8_t r = simde_vcmlaq_lane_f16(r_, a, b, lanes[i]);


    simde_test_arm_neon_write_f16x8(2, r_, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f16x8(2, a, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i32(2, lanes[i], SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vcmlaq_lane_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    simde_float32_t r_[4];
    simde_float32_t a[4];
    simde_float32_t b[2];
    const int lane;
    simde_float32_t r[4];
  } test_vec[] = {
    { { SIMDE_FLOAT32_C(   301.65), SIMDE_FLOAT32_C(   490.71), SIMDE_FLOAT32_C(  -744.66), SIMDE_FLOAT32_C(  -738.17) },
      { SIMDE_FLOAT32_C(  -301.20), SIMDE_FLOAT32_C(  -904.34), SIMDE_FLOAT32_C(   771.98), SIMDE_FLOAT32_C(   233.71) },
      { SIMDE_FLOAT32_C(   830.18), SIMDE_FLOAT32_C(   979.39) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(-249748.578125), SIMDE_FLOAT32_C(-249559.515625), SIMDE_FLOAT32_C(640137.687500), SIMDE_FLOAT32_C(640144.187500) } },
    { { SIMDE_FLOAT32_C(   -38.01), SIMDE_FLOAT32_C(   151.61), SIMDE_FLOAT32_C(   201.45), SIMDE_FLOAT32_C(  -747.32) },
      { SIMDE_FLOAT32_C(  -331.17), SIMDE_FLOAT32_C(     7.62), SIMDE_FLOAT32_C(  -454.77), SIMDE_FLOAT32_C(  -381.81) },
      { SIMDE_FLOAT32_C(   236.39), SIMDE_FLOAT32_C(  -158.94) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(-78323.289062), SIMDE_FLOAT32_C(-78133.671875), SIMDE_FLOAT32_C(-107301.625000), SIMDE_FLOAT32_C(-108250.398438) } },
    { { SIMDE_FLOAT32_C(   605.85), SIMDE_FLOAT32_C(   244.27), SIMDE_FLOAT32_C(  -426.53), SIMDE_FLOAT32_C(  -969.18) },
      { SIMDE_FLOAT32_C(   322.13), SIMDE_FLOAT32_C(   863.77), SIMDE_FLOAT32_C(  -685.35), SIMDE_FLOAT32_C(  -710.70) },
      { SIMDE_FLOAT32_C(  -791.12), SIMDE_FLOAT32_C(   373.53) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(-254237.640625), SIMDE_FLOAT32_C(-254599.218750), SIMDE_FLOAT32_C(541767.562500), SIMDE_FLOAT32_C(541224.875000) } },
    { { SIMDE_FLOAT32_C(  -606.46), SIMDE_FLOAT32_C(  -507.55), SIMDE_FLOAT32_C(   -68.24), SIMDE_FLOAT32_C(  -823.05) },
      { SIMDE_FLOAT32_C(  -359.95), SIMDE_FLOAT32_C(   611.92), SIMDE_FLOAT32_C(   514.14), SIMDE_FLOAT32_C(  -660.86) },
      { SIMDE_FLOAT32_C(   181.81), SIMDE_FLOAT32_C(   115.86) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(-66048.968750), SIMDE_FLOAT32_C(-65950.062500), SIMDE_FLOAT32_C(93407.554688), SIMDE_FLOAT32_C(92652.742188) } },
    { { SIMDE_FLOAT32_C(   951.84), SIMDE_FLOAT32_C(  -864.96), SIMDE_FLOAT32_C(   970.59), SIMDE_FLOAT32_C(   769.97) },
      { SIMDE_FLOAT32_C(   609.64), SIMDE_FLOAT32_C(  -580.87), SIMDE_FLOAT32_C(   358.59), SIMDE_FLOAT32_C(   350.56) },
      { SIMDE_FLOAT32_C(    26.31), SIMDE_FLOAT32_C(   163.74) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(16991.468750), SIMDE_FLOAT32_C(15174.667969), SIMDE_FLOAT32_C(10405.092773), SIMDE_FLOAT32_C(10204.472656) } },
    { { SIMDE_FLOAT32_C(  -636.68), SIMDE_FLOAT32_C(   554.68), SIMDE_FLOAT32_C(  -385.40), SIMDE_FLOAT32_C(  -565.95) },
      { SIMDE_FLOAT32_C(   129.69), SIMDE_FLOAT32_C(   961.79), SIMDE_FLOAT32_C(  -333.22), SIMDE_FLOAT32_C(    69.65) },
      { SIMDE_FLOAT32_C(   726.96), SIMDE_FLOAT32_C(   131.41) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(93642.765625), SIMDE_FLOAT32_C(94834.125000), SIMDE_FLOAT32_C(-242623.015625), SIMDE_FLOAT32_C(-242803.562500) } },
    { { SIMDE_FLOAT32_C(  -211.91), SIMDE_FLOAT32_C(   829.24), SIMDE_FLOAT32_C(  -475.13), SIMDE_FLOAT32_C(   562.33) },
      { SIMDE_FLOAT32_C(   515.59), SIMDE_FLOAT32_C(  -290.69), SIMDE_FLOAT32_C(  -816.53), SIMDE_FLOAT32_C(    17.39) },
      { SIMDE_FLOAT32_C(   268.14), SIMDE_FLOAT32_C(   729.88) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(138038.406250), SIMDE_FLOAT32_C(139079.562500), SIMDE_FLOAT32_C(-219419.500000), SIMDE_FLOAT32_C(-218382.046875) } },
    { { SIMDE_FLOAT32_C(  -894.99), SIMDE_FLOAT32_C(   516.42), SIMDE_FLOAT32_C(  -169.55), SIMDE_FLOAT32_C(   696.41) },
      { SIMDE_FLOAT32_C(  -388.51), SIMDE_FLOAT32_C(   987.71), SIMDE_FLOAT32_C(   -91.49), SIMDE_FLOAT32_C(  -970.85) },
      { SIMDE_FLOAT32_C(   357.28), SIMDE_FLOAT32_C(   -28.01) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(-139701.843750), SIMDE_FLOAT32_C(-138290.437500), SIMDE_FLOAT32_C(-32857.097656), SIMDE_FLOAT32_C(-31991.136719) } }
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float32x4_t r_ = simde_vld1q_f32(test_vec[i].r_);
    simde_float32x4_t a = simde_vld1q_f32(test_vec[i].a);
    simde_float32x2_t b = simde_vld1_f32(test_vec[i].b);
    simde_float32x4_t r = simde_vcmlaq_lane_f32(r_, a, b, 0);
    simde_test_arm_neon_assert_equal_f32x4(r, simde_vld1q_f32(test_vec[i].r), 1);
  }
  return 0;
#else
  fputc('\n', stdout);
  const int lanes[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
  for (int i = 0 ; i < 8 ; i++) {
    simde_float32x4_t r_ = simde_test_arm_neon_random_f32x4(-1000.0f, 1000.0f);
    simde_float32x4_t a = simde_test_arm_neon_random_f32x4(-1000.0f, 1000.0f);
    simde_float32x2_t b = simde_test_arm_neon_random_f32x2(-1000.0f, 1000.0f);
    simde_float32x4_t r = simde_vcmlaq_lane_f32(r_, a, b, lanes[i]);


    simde_test_arm_neon_write_f32x4(2, r_, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f32x4(2, a, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i32(2, lanes[i], SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vcmlaq_laneq_f16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_float16_t r_[8];
    simde_float16_t a[8];
    simde_float16_t b[8];
    const int lane;
    simde_float16_t r[8];
  } test_vec[] = {
    { { SIMDE_FLOAT16_VALUE(   -30.36), SIMDE_FLOAT16_VALUE(   631.50), SIMDE_FLOAT16_VALUE(   851.00), SIMDE_FLOAT16_VALUE(  -263.50),
        SIMDE_FLOAT16_VALUE(   140.00), SIMDE_FLOAT16_VALUE(   859.00), SIMDE_FLOAT16_VALUE(  -834.50), SIMDE_FLOAT16_VALUE(   216.12) },
      { SIMDE_FLOAT16_VALUE(   996.00), SIMDE_FLOAT16_VALUE(   529.50), SIMDE_FLOAT16_VALUE(    79.06), SIMDE_FLOAT16_VALUE(   947.00),
        SIMDE_FLOAT16_VALUE(   122.00), SIMDE_FLOAT16_VALUE(  -250.00), SIMDE_FLOAT16_VALUE(  -361.75), SIMDE_FLOAT16_VALUE(   265.25) },
      { SIMDE_FLOAT16_VALUE(    58.66), SIMDE_FLOAT16_VALUE(     2.71), SIMDE_FLOAT16_VALUE(    99.81), SIMDE_FLOAT16_VALUE(  -137.62),
        SIMDE_FLOAT16_VALUE(  -761.00), SIMDE_FLOAT16_VALUE(   813.00), SIMDE_FLOAT16_VALUE(  -897.50), SIMDE_FLOAT16_VALUE(   653.50) },
       INT32_C(           0),
      { SIMDE_FLOAT16_VALUE(58400.000000), SIMDE_FLOAT16_VALUE(59040.000000), SIMDE_FLOAT16_VALUE(5488.000000), SIMDE_FLOAT16_VALUE(4376.000000),
        SIMDE_FLOAT16_VALUE(7296.000000), SIMDE_FLOAT16_VALUE(8016.000000), SIMDE_FLOAT16_VALUE(-22048.000000), SIMDE_FLOAT16_VALUE(-21008.000000) } },
    { { SIMDE_FLOAT16_VALUE(   396.00), SIMDE_FLOAT16_VALUE(   413.00), SIMDE_FLOAT16_VALUE(   514.00), SIMDE_FLOAT16_VALUE(  -977.50),
        SIMDE_FLOAT16_VALUE(  -672.00), SIMDE_FLOAT16_VALUE(   -92.12), SIMDE_FLOAT16_VALUE(  -441.25), SIMDE_FLOAT16_VALUE(  -374.25) },
      { SIMDE_FLOAT16_VALUE(  -152.00), SIMDE_FLOAT16_VALUE(   -79.56), SIMDE_FLOAT16_VALUE(  -214.62), SIMDE_FLOAT16_VALUE(  -615.00),
        SIMDE_FLOAT16_VALUE(   679.00), SIMDE_FLOAT16_VALUE(   784.00), SIMDE_FLOAT16_VALUE(   493.00), SIMDE_FLOAT16_VALUE(  -896.00) },
      { SIMDE_FLOAT16_VALUE(   104.12), SIMDE_FLOAT16_VALUE(    78.50), SIMDE_FLOAT16_VALUE(   171.50), SIMDE_FLOAT16_VALUE(  -682.50),
        SIMDE_FLOAT16_VALUE(   217.12), SIMDE_FLOAT16_VALUE(    49.34), SIMDE_FLOAT16_VALUE(   256.50), SIMDE_FLOAT16_VALUE(   -92.06) },
       INT32_C(           1),
      { SIMDE_FLOAT16_VALUE(-11536.000000), SIMDE_FLOAT16_VALUE(-11520.000000), SIMDE_FLOAT16_VALUE(-16336.000000), SIMDE_FLOAT16_VALUE(-17824.000000),
        SIMDE_FLOAT16_VALUE(52640.000000), SIMDE_FLOAT16_VALUE(53216.000000), SIMDE_FLOAT16_VALUE(38272.000000), SIMDE_FLOAT16_VALUE(38336.000000) } },
    { { SIMDE_FLOAT16_VALUE(  -728.00), SIMDE_FLOAT16_VALUE(  -108.38), SIMDE_FLOAT16_VALUE(   -77.88), SIMDE_FLOAT16_VALUE(  -353.00),
        SIMDE_FLOAT16_VALUE(  -239.00), SIMDE_FLOAT16_VALUE(   704.50), SIMDE_FLOAT16_VALUE(   914.00), SIMDE_FLOAT16_VALUE(  -211.12) },
      { SIMDE_FLOAT16_VALUE(  -473.25), SIMDE_FLOAT16_VALUE(    74.38), SIMDE_FLOAT16_VALUE(   904.50), SIMDE_FLOAT16_VALUE(  -290.50),
        SIMDE_FLOAT16_VALUE(  -796.00), SIMDE_FLOAT16_VALUE(   421.25), SIMDE_FLOAT16_VALUE(   215.75), SIMDE_FLOAT16_VALUE(   249.38) },
      { SIMDE_FLOAT16_VALUE(  -523.00), SIMDE_FLOAT16_VALUE(  -720.00), SIMDE_FLOAT16_VALUE(    32.75), SIMDE_FLOAT16_VALUE(  -487.75),
        SIMDE_FLOAT16_VALUE(  -705.50), SIMDE_FLOAT16_VALUE(  -468.00), SIMDE_FLOAT16_VALUE(  -789.00), SIMDE_FLOAT16_VALUE(  -866.00) },
       INT32_C(           2),
      { SIMDE_FLOAT16_VALUE(-16224.000000), SIMDE_FLOAT16_VALUE(-15608.000000), SIMDE_FLOAT16_VALUE(29552.000000), SIMDE_FLOAT16_VALUE(29264.000000),
        SIMDE_FLOAT16_VALUE(-26304.000000), SIMDE_FLOAT16_VALUE(-25360.000000), SIMDE_FLOAT16_VALUE(7980.000000), SIMDE_FLOAT16_VALUE(6856.000000) } },
    { { SIMDE_FLOAT16_VALUE(  -891.50), SIMDE_FLOAT16_VALUE(  -299.00), SIMDE_FLOAT16_VALUE(  -595.00), SIMDE_FLOAT16_VALUE(  -662.00),
        SIMDE_FLOAT16_VALUE(  -914.00), SIMDE_FLOAT16_VALUE(   674.50), SIMDE_FLOAT16_VALUE(   771.50), SIMDE_FLOAT16_VALUE(    14.33) },
      { SIMDE_FLOAT16_VALUE(   880.00), SIMDE_FLOAT16_VALUE(   767.00), SIMDE_FLOAT16_VALUE(  -738.50), SIMDE_FLOAT16_VALUE(   581.50),
        SIMDE_FLOAT16_VALUE(  -342.00), SIMDE_FLOAT16_VALUE(   580.50), SIMDE_FLOAT16_VALUE(   534.00), SIMDE_FLOAT16_VALUE(  -671.00) },
      { SIMDE_FLOAT16_VALUE(  -482.75), SIMDE_FLOAT16_VALUE(   382.25), SIMDE_FLOAT16_VALUE(   503.00), SIMDE_FLOAT16_VALUE(    35.00),
        SIMDE_FLOAT16_VALUE(   315.50), SIMDE_FLOAT16_VALUE(   -23.56), SIMDE_FLOAT16_VALUE(    53.88), SIMDE_FLOAT16_VALUE(   722.00) },
       INT32_C(           3),
      { SIMDE_FLOAT16_VALUE(29904.000000), SIMDE_FLOAT16_VALUE(30496.000000), SIMDE_FLOAT16_VALUE(-26448.000000), SIMDE_FLOAT16_VALUE(-26512.000000),
        SIMDE_FLOAT16_VALUE(-12880.000000), SIMDE_FLOAT16_VALUE(-11296.000000), SIMDE_FLOAT16_VALUE(19456.000000), SIMDE_FLOAT16_VALUE(18704.000000) } },
    { { SIMDE_FLOAT16_VALUE(   525.50), SIMDE_FLOAT16_VALUE(  -679.00), SIMDE_FLOAT16_VALUE(   491.50), SIMDE_FLOAT16_VALUE(  -505.00),
        SIMDE_FLOAT16_VALUE(   914.50), SIMDE_FLOAT16_VALUE(  -312.00), SIMDE_FLOAT16_VALUE(  -404.50), SIMDE_FLOAT16_VALUE(  -634.00) },
      { SIMDE_FLOAT16_VALUE(   -86.62), SIMDE_FLOAT16_VALUE(  -914.50), SIMDE_FLOAT16_VALUE(  -839.50), SIMDE_FLOAT16_VALUE(   817.50),
        SIMDE_FLOAT16_VALUE(  -187.25), SIMDE_FLOAT16_VALUE(   422.75), SIMDE_FLOAT16_VALUE(   604.50), SIMDE_FLOAT16_VALUE(  -735.00) },
      { SIMDE_FLOAT16_VALUE(   -21.31), SIMDE_FLOAT16_VALUE(   -29.59), SIMDE_FLOAT16_VALUE(  -725.00), SIMDE_FLOAT16_VALUE(  -503.00),
        SIMDE_FLOAT16_VALUE(   -75.56), SIMDE_FLOAT16_VALUE(   215.38), SIMDE_FLOAT16_VALUE(  -742.00), SIMDE_FLOAT16_VALUE(  -854.00) },
       INT32_C(           0),
      { SIMDE_FLOAT16_VALUE(2372.000000), SIMDE_FLOAT16_VALUE(1167.000000), SIMDE_FLOAT16_VALUE(18384.000000), SIMDE_FLOAT16_VALUE(17392.000000),
        SIMDE_FLOAT16_VALUE(4904.000000), SIMDE_FLOAT16_VALUE(3678.000000), SIMDE_FLOAT16_VALUE(-13288.000000), SIMDE_FLOAT16_VALUE(-13520.000000) } },
    { { SIMDE_FLOAT16_VALUE(  -618.50), SIMDE_FLOAT16_VALUE(   164.88), SIMDE_FLOAT16_VALUE(   304.75), SIMDE_FLOAT16_VALUE(  -530.50),
        SIMDE_FLOAT16_VALUE(  -603.50), SIMDE_FLOAT16_VALUE(   730.50), SIMDE_FLOAT16_VALUE(    46.66), SIMDE_FLOAT16_VALUE(   629.00) },
      { SIMDE_FLOAT16_VALUE(  -537.00), SIMDE_FLOAT16_VALUE(   637.00), SIMDE_FLOAT16_VALUE(   884.50), SIMDE_FLOAT16_VALUE(   378.25),
        SIMDE_FLOAT16_VALUE(   -10.17), SIMDE_FLOAT16_VALUE(  -730.00), SIMDE_FLOAT16_VALUE(  -981.50), SIMDE_FLOAT16_VALUE(   453.25) },
      { SIMDE_FLOAT16_VALUE(  -575.00), SIMDE_FLOAT16_VALUE(    12.88), SIMDE_FLOAT16_VALUE(  -667.50), SIMDE_FLOAT16_VALUE(   380.50),
        SIMDE_FLOAT16_VALUE(   374.75), SIMDE_FLOAT16_VALUE(  -222.50), SIMDE_FLOAT16_VALUE(   206.88), SIMDE_FLOAT16_VALUE(   502.25) },
       INT32_C(           1),
      { SIMDE_FLOAT16_VALUE(-7536.000000), SIMDE_FLOAT16_VALUE(-6752.000000), SIMDE_FLOAT16_VALUE(11696.000000), SIMDE_FLOAT16_VALUE(10864.000000),
        SIMDE_FLOAT16_VALUE(-734.500000), SIMDE_FLOAT16_VALUE(599.500000), SIMDE_FLOAT16_VALUE(-12600.000000), SIMDE_FLOAT16_VALUE(-12016.000000) } },
    { { SIMDE_FLOAT16_VALUE(  -825.50), SIMDE_FLOAT16_VALUE(  -472.75), SIMDE_FLOAT16_VALUE(  -531.00), SIMDE_FLOAT16_VALUE(  -366.75),
        SIMDE_FLOAT16_VALUE(   143.12), SIMDE_FLOAT16_VALUE(   698.50), SIMDE_FLOAT16_VALUE(   700.00), SIMDE_FLOAT16_VALUE(   498.25) },
      { SIMDE_FLOAT16_VALUE(   908.00), SIMDE_FLOAT16_VALUE(   845.50), SIMDE_FLOAT16_VALUE(  -383.50), SIMDE_FLOAT16_VALUE(   383.50),
        SIMDE_FLOAT16_VALUE(   357.75), SIMDE_FLOAT16_VALUE(  -900.50), SIMDE_FLOAT16_VALUE(  -802.00), SIMDE_FLOAT16_VALUE(   966.50) },
      { SIMDE_FLOAT16_VALUE(  -993.00), SIMDE_FLOAT16_VALUE(   477.50), SIMDE_FLOAT16_VALUE(   -23.00), SIMDE_FLOAT16_VALUE(   102.38),
        SIMDE_FLOAT16_VALUE(   988.50), SIMDE_FLOAT16_VALUE(  -311.75), SIMDE_FLOAT16_VALUE(  -668.50), SIMDE_FLOAT16_VALUE(   148.25) },
       INT32_C(           2),
      { SIMDE_FLOAT16_VALUE(-21712.000000), SIMDE_FLOAT16_VALUE(-21360.000000), SIMDE_FLOAT16_VALUE(8288.000000), SIMDE_FLOAT16_VALUE(8456.000000),
        SIMDE_FLOAT16_VALUE(-8084.000000), SIMDE_FLOAT16_VALUE(-7528.000000), SIMDE_FLOAT16_VALUE(19152.000000), SIMDE_FLOAT16_VALUE(18944.000000) } },
    { { SIMDE_FLOAT16_VALUE(   213.88), SIMDE_FLOAT16_VALUE(   337.75), SIMDE_FLOAT16_VALUE(   330.50), SIMDE_FLOAT16_VALUE(   -88.56),
        SIMDE_FLOAT16_VALUE(   191.12), SIMDE_FLOAT16_VALUE(  -615.00), SIMDE_FLOAT16_VALUE(  -113.25), SIMDE_FLOAT16_VALUE(   775.50) },
      { SIMDE_FLOAT16_VALUE(   295.50), SIMDE_FLOAT16_VALUE(   687.00), SIMDE_FLOAT16_VALUE(   406.25), SIMDE_FLOAT16_VALUE(   439.50),
        SIMDE_FLOAT16_VALUE(  -827.50), SIMDE_FLOAT16_VALUE(   733.00), SIMDE_FLOAT16_VALUE(   499.00), SIMDE_FLOAT16_VALUE(   931.00) },
      { SIMDE_FLOAT16_VALUE(   790.00), SIMDE_FLOAT16_VALUE(  -979.00), SIMDE_FLOAT16_VALUE(    70.62), SIMDE_FLOAT16_VALUE(   -47.00),
        SIMDE_FLOAT16_VALUE(   228.50), SIMDE_FLOAT16_VALUE(  -233.50), SIMDE_FLOAT16_VALUE(  -467.50), SIMDE_FLOAT16_VALUE(   545.00) },
       INT32_C(           3),
      { SIMDE_FLOAT16_VALUE(-13672.000000), SIMDE_FLOAT16_VALUE(-13552.000000), SIMDE_FLOAT16_VALUE(-18768.000000), SIMDE_FLOAT16_VALUE(-19184.000000),
        SIMDE_FLOAT16_VALUE(39072.000000), SIMDE_FLOAT16_VALUE(38272.000000), SIMDE_FLOAT16_VALUE(-23568.000000), SIMDE_FLOAT16_VALUE(-22672.000000) } }
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float16x8_t r_ = simde_vld1q_f16(test_vec[i].r_);
    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_4_(simde_vcmlaq_laneq_f16, r, (HEDLEY_UNREACHABLE(), simde_vdupq_n_f16(SIMDE_FLOAT16_VALUE(0.0))), test_vec[i].lane, r_, a, b);
    simde_test_arm_neon_assert_equal_f16x8(r, simde_vld1q_f16(test_vec[i].r), 1);
  }
  return 0;
#else
  fputc('\n', stdout);
  const int lanes[] = { 0, 1, 2, 3, 0, 1, 2, 3 };
  for (int i = 0 ; i < 8 ; i++) {
    simde_float16x8_t r_ = simde_test_arm_neon_random_f16x8(-1000.0f, 1000.0f);
    simde_float16x8_t a = simde_test_arm_neon_random_f16x8(-1000.0f, 1000.0f);
    simde_float16x8_t b = simde_test_arm_neon_random_f16x8(-1000.0f, 1000.0f);
    simde_float16x8_t r = simde_vcmlaq_laneq_f16(r_, a, b, lanes[i]);


    simde_test_arm_neon_write_f16x8(2, r_, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f16x8(2, a, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i32(2, lanes[i], SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vcmlaq_laneq_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    simde_float32_t r_[4];
    simde_float32_t a[4];
    simde_float32_t b[4];
    const int lane;
    simde_float32_t r[4];
  } test_vec[] = {
    { { SIMDE_FLOAT32_C(   355.18), SIMDE_FLOAT32_C(   169.63), SIMDE_FLOAT32_C(   116.87), SIMDE_FLOAT32_C(  -467.19) },
      { SIMDE_FLOAT32_C(  -513.94), SIMDE_FLOAT32_C(  -999.71), SIMDE_FLOAT32_C(  -285.25), SIMDE_FLOAT32_C(  -931.88) },
      { SIMDE_FLOAT32_C(  -839.57), SIMDE_FLOAT32_C(  -681.40), SIMDE_FLOAT32_C(  -117.60), SIMDE_FLOAT32_C(  -459.86) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(431843.781250), SIMDE_FLOAT32_C(431658.250000), SIMDE_FLOAT32_C(239604.218750), SIMDE_FLOAT32_C(239020.156250) } },
    { { SIMDE_FLOAT32_C(   -57.67), SIMDE_FLOAT32_C(  -897.07), SIMDE_FLOAT32_C(   118.98), SIMDE_FLOAT32_C(  -387.92) },
      { SIMDE_FLOAT32_C(  -362.79), SIMDE_FLOAT32_C(   160.99), SIMDE_FLOAT32_C(    -2.72), SIMDE_FLOAT32_C(   206.65) },
      { SIMDE_FLOAT32_C(    49.34), SIMDE_FLOAT32_C(   511.85), SIMDE_FLOAT32_C(   547.20), SIMDE_FLOAT32_C(  -119.58) },
       INT32_C(           1),
      { SIMDE_FLOAT32_C(-185751.734375), SIMDE_FLOAT32_C(-186591.140625), SIMDE_FLOAT32_C(-1273.252075), SIMDE_FLOAT32_C(-1780.152100) } },
    { { SIMDE_FLOAT32_C(  -219.54), SIMDE_FLOAT32_C(  -959.14), SIMDE_FLOAT32_C(   943.92), SIMDE_FLOAT32_C(   628.48) },
      { SIMDE_FLOAT32_C(   446.65), SIMDE_FLOAT32_C(  -500.77), SIMDE_FLOAT32_C(  -347.79), SIMDE_FLOAT32_C(   813.11) },
      { SIMDE_FLOAT32_C(  -542.25), SIMDE_FLOAT32_C(   232.48), SIMDE_FLOAT32_C(   684.35), SIMDE_FLOAT32_C(   710.26) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(-242415.500000), SIMDE_FLOAT32_C(-243155.093750), SIMDE_FLOAT32_C(189533.046875), SIMDE_FLOAT32_C(189217.609375) } },
    { { SIMDE_FLOAT32_C(   783.09), SIMDE_FLOAT32_C(  -727.02), SIMDE_FLOAT32_C(  -586.46), SIMDE_FLOAT32_C(    64.33) },
      { SIMDE_FLOAT32_C(  -490.08), SIMDE_FLOAT32_C(   740.49), SIMDE_FLOAT32_C(  -591.56), SIMDE_FLOAT32_C(  -759.78) },
      { SIMDE_FLOAT32_C(  -380.84), SIMDE_FLOAT32_C(   993.01), SIMDE_FLOAT32_C(  -759.56), SIMDE_FLOAT32_C(   861.16) },
       INT32_C(           1),
      { SIMDE_FLOAT32_C(-485871.250000), SIMDE_FLOAT32_C(-487381.343750), SIMDE_FLOAT32_C(-588011.437500), SIMDE_FLOAT32_C(-587360.687500) } },
    { { SIMDE_FLOAT32_C(   998.31), SIMDE_FLOAT32_C(   538.40), SIMDE_FLOAT32_C(  -191.12), SIMDE_FLOAT32_C(  -434.48) },
      { SIMDE_FLOAT32_C(   592.83), SIMDE_FLOAT32_C(   820.32), SIMDE_FLOAT32_C(  -296.84), SIMDE_FLOAT32_C(  -612.30) },
      { SIMDE_FLOAT32_C(  -552.34), SIMDE_FLOAT32_C(   329.08), SIMDE_FLOAT32_C(   765.26), SIMDE_FLOAT32_C(  -531.08) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(-326445.437500), SIMDE_FLOAT32_C(-326905.343750), SIMDE_FLOAT32_C(163765.484375), SIMDE_FLOAT32_C(163522.125000) } },
    { { SIMDE_FLOAT32_C(    52.61), SIMDE_FLOAT32_C(   606.93), SIMDE_FLOAT32_C(  -894.22), SIMDE_FLOAT32_C(  -854.38) },
      { SIMDE_FLOAT32_C(   972.80), SIMDE_FLOAT32_C(  -807.39), SIMDE_FLOAT32_C(   668.59), SIMDE_FLOAT32_C(  -228.19) },
      { SIMDE_FLOAT32_C(  -528.51), SIMDE_FLOAT32_C(   730.93), SIMDE_FLOAT32_C(  -230.95), SIMDE_FLOAT32_C(  -140.17) },
       INT32_C(           1),
      { SIMDE_FLOAT32_C(711101.312500), SIMDE_FLOAT32_C(711655.625000), SIMDE_FLOAT32_C(487798.281250), SIMDE_FLOAT32_C(487838.125000) } },
    { { SIMDE_FLOAT32_C(   556.73), SIMDE_FLOAT32_C(  -701.90), SIMDE_FLOAT32_C(  -356.50), SIMDE_FLOAT32_C(  -532.42) },
      { SIMDE_FLOAT32_C(   856.94), SIMDE_FLOAT32_C(  -261.67), SIMDE_FLOAT32_C(  -208.07), SIMDE_FLOAT32_C(    27.93) },
      { SIMDE_FLOAT32_C(   924.32), SIMDE_FLOAT32_C(  -863.60), SIMDE_FLOAT32_C(  -687.65), SIMDE_FLOAT32_C(   238.39) },
       INT32_C(           0),
      { SIMDE_FLOAT32_C(792643.500000), SIMDE_FLOAT32_C(791384.875000), SIMDE_FLOAT32_C(-192679.765625), SIMDE_FLOAT32_C(-192855.687500) } },
    { { SIMDE_FLOAT32_C(  -286.79), SIMDE_FLOAT32_C(   630.61), SIMDE_FLOAT32_C(  -989.22), SIMDE_FLOAT32_C(   223.21) },
      { SIMDE_FLOAT32_C(   812.31), SIMDE_FLOAT32_C(   667.33), SIMDE_FLOAT32_C(   841.41), SIMDE_FLOAT32_C(   735.52) },
      { SIMDE_FLOAT32_C(   308.52), SIMDE_FLOAT32_C(  -189.06), SIMDE_FLOAT32_C(   -63.33), SIMDE_FLOAT32_C(   837.76) },
       INT32_C(           1),
      { SIMDE_FLOAT32_C(-153862.109375), SIMDE_FLOAT32_C(-152944.718750), SIMDE_FLOAT32_C(-160066.187500), SIMDE_FLOAT32_C(-158853.750000) } }
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float32x4_t r_ = simde_vld1q_f32(test_vec[i].r_);
    simde_float32x4_t a = simde_vld1q_f32(test_vec[i].a);
    simde_float32x4_t b = simde_vld1q_f32(test_vec[i].b);
    simde_float32x4_t r;
    SIMDE_CONSTIFY_2_(simde_vcmlaq_laneq_f32, r, (HEDLEY_UNREACHABLE(), simde_vdupq_n_f32(SIMDE_FLOAT32_C(0.0))), test_vec[i].lane, r_, a, b);
    simde_test_arm_neon_assert_equal_f32x4(r, simde_vld1q_f32(test_vec[i].r), 1);
  }
  return 0;
#else
  fputc('\n', stdout);
  const int lanes[] = { 0, 1, 0, 1, 0, 1, 0, 1 };
  for (int i = 0 ; i < 8 ; i++) {
    simde_float32x4_t r_ = simde_test_arm_neon_random_f32x4(-1000.0f, 1000.0f);
    simde_float32x4_t a = simde_test_arm_neon_random_f32x4(-1000.0f, 1000.0f);
    simde_float32x4_t b = simde_test_arm_neon_random_f32x4(-1000.0f, 1000.0f);
    simde_float32x4_t r = simde_vcmlaq_laneq_f32(r_, a, b, lanes[i]);


    simde_test_arm_neon_write_f32x4(2, r_, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f32x4(2, a, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i32(2, lanes[i], SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}
SIMDE_TEST_FUNC_LIST_BEGIN
SIMDE_TEST_FUNC_LIST_ENTRY(vcmla_lane_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vcmla_lane_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vcmla_laneq_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vcmla_laneq_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vcmlaq_lane_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vcmlaq_lane_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vcmlaq_laneq_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vcmlaq_laneq_f32)
SIMDE_TEST_FUNC_LIST_END

#include "test-neon-footer.h"