5241f43e创建于 2024年7月31日历史提交

#define SIMDE_TEST_ARM_NEON_INSN mla_lane

#include "test-neon.h"
#include "../../../simde/arm/neon/mla_lane.h"

SIMDE_DIAGNOSTIC_DISABLE_UNREACHABLE_

static int
test_simde_vmla_laneq_f32 (SIMDE_MUNIT_TEST_ARGS) {
  static const struct {
    float a[2];
    float b[2];
    float v[4];
    int8_t lane;
    float r[2];
  } test_vec[] = {
     { {   SIMDE_FLOAT32_C(    -73.46),  SIMDE_FLOAT32_C(    513.31) },
       {   SIMDE_FLOAT32_C(    859.54),  SIMDE_FLOAT32_C(    351.95) },
       {   SIMDE_FLOAT32_C(    623.37),  SIMDE_FLOAT32_C(   -773.90),  SIMDE_FLOAT32_C(    -85.33),  SIMDE_FLOAT32_C(   -870.53) },
           INT8_C(         1),
       {   SIMDE_FLOAT32_C(-665271.47),  SIMDE_FLOAT32_C(-271860.79) } },
     { {   SIMDE_FLOAT32_C(   -274.57),  SIMDE_FLOAT32_C(    808.41) },
       {   SIMDE_FLOAT32_C(    -90.97),  SIMDE_FLOAT32_C(   -714.05) },
       {   SIMDE_FLOAT32_C(   -922.73),  SIMDE_FLOAT32_C(   -411.88),  SIMDE_FLOAT32_C(    281.90),  SIMDE_FLOAT32_C(    -63.90) },
           INT8_C(         2),
       {   SIMDE_FLOAT32_C( -25919.01),  SIMDE_FLOAT32_C(-200482.28) } },
     { {   SIMDE_FLOAT32_C(   -741.09),  SIMDE_FLOAT32_C(    445.38) },
       {   SIMDE_FLOAT32_C(   -398.05),  SIMDE_FLOAT32_C(   -855.86) },
       {   SIMDE_FLOAT32_C(   -570.81),  SIMDE_FLOAT32_C(   -970.95),  SIMDE_FLOAT32_C(   -485.13),  SIMDE_FLOAT32_C(   -172.61) },
           INT8_C(         3),
       {   SIMDE_FLOAT32_C(  67966.32),  SIMDE_FLOAT32_C( 148175.37) } },
     { {   SIMDE_FLOAT32_C(     33.94),  SIMDE_FLOAT32_C(    293.45) },
       {   SIMDE_FLOAT32_C(   -588.66),  SIMDE_FLOAT32_C(    519.96) },
       {   SIMDE_FLOAT32_C(   -139.60),  SIMDE_FLOAT32_C(    433.70),  SIMDE_FLOAT32_C(    837.57),  SIMDE_FLOAT32_C(   -714.84) },
           INT8_C(         3),
       {   SIMDE_FLOAT32_C( 420831.65),  SIMDE_FLOAT32_C(-371394.76) } },
     { {   SIMDE_FLOAT32_C(   -795.09),  SIMDE_FLOAT32_C(     16.24) },
       {   SIMDE_FLOAT32_C(   -182.80),  SIMDE_FLOAT32_C(    647.98) },
       {   SIMDE_FLOAT32_C(    196.21),  SIMDE_FLOAT32_C(    269.55),  SIMDE_FLOAT32_C(    855.47),  SIMDE_FLOAT32_C(   -864.67) },
           INT8_C(         2),
       {   SIMDE_FLOAT32_C(-157175.01),  SIMDE_FLOAT32_C( 554343.69) } },
     { {   SIMDE_FLOAT32_C(   -464.62),  SIMDE_FLOAT32_C(    878.96) },
       {   SIMDE_FLOAT32_C(    482.06),  SIMDE_FLOAT32_C(   -189.13) },
       {   SIMDE_FLOAT32_C(    998.51),  SIMDE_FLOAT32_C(    249.98),  SIMDE_FLOAT32_C(   -423.89),  SIMDE_FLOAT32_C(    412.87) },
           INT8_C(         2),
       {   SIMDE_FLOAT32_C(-204805.03),  SIMDE_FLOAT32_C(  81049.28) } },
     { {   SIMDE_FLOAT32_C(   -949.96),  SIMDE_FLOAT32_C(    459.88) },
       {   SIMDE_FLOAT32_C(   -612.87),  SIMDE_FLOAT32_C(    624.30) },
       {   SIMDE_FLOAT32_C(    216.59),  SIMDE_FLOAT32_C(    639.02),  SIMDE_FLOAT32_C(   -234.22),  SIMDE_FLOAT32_C(   -127.73) },
           INT8_C(         3),
       {   SIMDE_FLOAT32_C(  77331.93),  SIMDE_FLOAT32_C( -79281.96) } },
     { {   SIMDE_FLOAT32_C(   -495.83),  SIMDE_FLOAT32_C(   -373.57) },
       {   SIMDE_FLOAT32_C(   -270.56),  SIMDE_FLOAT32_C(   -712.92) },
       {   SIMDE_FLOAT32_C(    565.27),  SIMDE_FLOAT32_C(    939.53),  SIMDE_FLOAT32_C(    228.62),  SIMDE_FLOAT32_C(   -248.99) },
           INT8_C(         1),
       {   SIMDE_FLOAT32_C(-254695.07),  SIMDE_FLOAT32_C(-670183.30) } },
  };

  simde_float32x2_t r, a, b;
  simde_float32x4_t v;

  for (int i = 0 ; i < 8 ; i++) {
    a = simde_vld1_f32(test_vec[i].a);
    b = simde_vld1_f32(test_vec[i].b);
    v = simde_vld1q_f32(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmla_laneq_f32(a, b, v, 0); break;
      case 1: r = simde_vmla_laneq_f32(a, b, v, 1); break;
      case 2: r = simde_vmla_laneq_f32(a, b, v, 2); break;
      case 3: r = simde_vmla_laneq_f32(a, b, v, 3); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdup_n_f32(0); break;
    }
    simde_test_arm_neon_assert_equal_f32x2(r, simde_vld1_f32(test_vec[i].r), 1);
  }

  return 0;
}

static int
test_simde_vmla_lane_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    float a[2];
    float b[2];
    float v[2];
    int8_t lane;
    float r[2];
  } test_vec[] = {
    { { SIMDE_FLOAT32_C(  -816.78), SIMDE_FLOAT32_C(  -682.00) },
      { SIMDE_FLOAT32_C(  -795.28), SIMDE_FLOAT32_C(    90.29) },
      { SIMDE_FLOAT32_C(  -130.28), SIMDE_FLOAT32_C(  -447.42) },
       INT8_C(   0),
      { SIMDE_FLOAT32_C(102792.30), SIMDE_FLOAT32_C(-12444.98) } },
    { { SIMDE_FLOAT32_C(  -476.32), SIMDE_FLOAT32_C(   185.93) },
      { SIMDE_FLOAT32_C(   161.27), SIMDE_FLOAT32_C(   -62.08) },
      { SIMDE_FLOAT32_C(  -608.20), SIMDE_FLOAT32_C(   443.90) },
       INT8_C(   0),
      { SIMDE_FLOAT32_C(-98560.74), SIMDE_FLOAT32_C( 37942.99) } },
    { { SIMDE_FLOAT32_C(   620.34), SIMDE_FLOAT32_C(   537.90) },
      { SIMDE_FLOAT32_C(  -324.75), SIMDE_FLOAT32_C(  -532.78) },
      { SIMDE_FLOAT32_C(  -706.05), SIMDE_FLOAT32_C(   656.04) },
       INT8_C(   0),
      { SIMDE_FLOAT32_C(229910.08), SIMDE_FLOAT32_C(376707.25) } },
    { { SIMDE_FLOAT32_C(   211.34), SIMDE_FLOAT32_C(   292.01) },
      { SIMDE_FLOAT32_C(   391.18), SIMDE_FLOAT32_C(  -470.30) },
      { SIMDE_FLOAT32_C(  -654.28), SIMDE_FLOAT32_C(    25.97) },
       INT8_C(   1),
      { SIMDE_FLOAT32_C( 10370.28), SIMDE_FLOAT32_C(-11921.68) } },
    { { SIMDE_FLOAT32_C(  -405.66), SIMDE_FLOAT32_C(  -583.58) },
      { SIMDE_FLOAT32_C(   -51.80), SIMDE_FLOAT32_C(  -222.44) },
      { SIMDE_FLOAT32_C(  -265.59), SIMDE_FLOAT32_C(   152.92) },
       INT8_C(   1),
      { SIMDE_FLOAT32_C( -8326.92), SIMDE_FLOAT32_C(-34599.10) } },
    { { SIMDE_FLOAT32_C(   604.13), SIMDE_FLOAT32_C(   705.50) },
      { SIMDE_FLOAT32_C(    -6.67), SIMDE_FLOAT32_C(  -872.19) },
      { SIMDE_FLOAT32_C(  -108.57), SIMDE_FLOAT32_C(  -845.39) },
       INT8_C(   1),
      { SIMDE_FLOAT32_C(  6242.88), SIMDE_FLOAT32_C(738046.25) } },
    { { SIMDE_FLOAT32_C(   283.23), SIMDE_FLOAT32_C(   598.51) },
      { SIMDE_FLOAT32_C(  -945.20), SIMDE_FLOAT32_C(   -96.43) },
      { SIMDE_FLOAT32_C(   136.41), SIMDE_FLOAT32_C(  -269.94) },
       INT8_C(   0),
      { SIMDE_FLOAT32_C(-128651.51), SIMDE_FLOAT32_C(-12555.51) } },
    { { SIMDE_FLOAT32_C(   430.36), SIMDE_FLOAT32_C(  -613.90) },
      { SIMDE_FLOAT32_C(   413.02), SIMDE_FLOAT32_C(  -358.30) },
      { SIMDE_FLOAT32_C(   678.10), SIMDE_FLOAT32_C(  -195.80) },
       INT8_C(   0),
      { SIMDE_FLOAT32_C(280499.22), SIMDE_FLOAT32_C(-243577.12) } },
  };

  simde_float32x2_t r, a, b, v;

  for (int i = 0 ; i < 8 ; i++) {
    a = simde_vld1_f32(test_vec[i].a);
    b = simde_vld1_f32(test_vec[i].b);
    v = simde_vld1_f32(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmla_lane_f32(a, b, v, 0); break;
      case 1: r = simde_vmla_lane_f32(a, b, v, 1); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdup_n_f32(0); break;
    }
    simde_test_arm_neon_assert_equal_f32x2(r, simde_vld1_f32(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    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 v = simde_test_arm_neon_random_f32x2(-1000.0f, 1000.0f);
    int8_t lane = simde_test_codegen_random_i8() & 1;
    simde_float32x2_t r;

    SIMDE_CONSTIFY_2_(simde_vmla_lane_f32, r, (HEDLEY_UNREACHABLE(), simde_vdup_n_f32(0)), lane, a, b, v);

    simde_test_arm_neon_write_f32x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f32x2(2, v, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i8(2, lane, 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_vmla_laneq_s16 (SIMDE_MUNIT_TEST_ARGS) {
  static const struct {
    int16_t a[4];
    int16_t b[4];
    int16_t v[8];
    int8_t lane;
    int16_t r[4];
  } test_vec[] = {
     { {  -INT16_C(    81), -INT16_C(    48),  INT16_C(    94),  INT16_C(    69) },
       {   INT16_C(    40), -INT16_C(    89), -INT16_C(    92),  INT16_C(    90) },
       {   INT16_C(    94),  INT16_C(    38), -INT16_C(    15), -INT16_C(    13),
          -INT16_C(    79), -INT16_C(    41), -INT16_C(    66),  INT16_C(     0) },
           INT8_C(     0),
       {   INT16_C(  3679), -INT16_C(  8414), -INT16_C(  8554),  INT16_C(  8529) } },
     { {  -INT16_C(    14), -INT16_C(    78), -INT16_C(    58), -INT16_C(    39) },
       {  -INT16_C(    85), -INT16_C(    52),  INT16_C(    85),  INT16_C(    77) },
       {   INT16_C(    76), -INT16_C(    10),  INT16_C(    26),  INT16_C(    82),
          -INT16_C(    46),  INT16_C(    48), -INT16_C(    40),  INT16_C(    93) },
           INT8_C(     6),
       {   INT16_C(  3386),  INT16_C(  2002), -INT16_C(  3458), -INT16_C(  3119) } },
     { {   INT16_C(    82), -INT16_C(    97),  INT16_C(    61),  INT16_C(    86) },
       {   INT16_C(    78), -INT16_C(    66),  INT16_C(    69), -INT16_C(    34) },
       {   INT16_C(    79), -INT16_C(    74),  INT16_C(     4), -INT16_C(    49),
           INT16_C(    22), -INT16_C(    87), -INT16_C(    48), -INT16_C(    37) },
           INT8_C(     0),
       {   INT16_C(  6244), -INT16_C(  5311),  INT16_C(  5512), -INT16_C(  2600) } },
     { {  -INT16_C(     3), -INT16_C(    26),  INT16_C(    68),  INT16_C(    10) },
       {   INT16_C(     9), -INT16_C(    39),  INT16_C(    24), -INT16_C(    13) },
       {  -INT16_C(    39), -INT16_C(    87), -INT16_C(    79),  INT16_C(    42),
          -INT16_C(    23),  INT16_C(    56), -INT16_C(    22), -INT16_C(    41) },
           INT8_C(     7),
       {  -INT16_C(   372),  INT16_C(  1573), -INT16_C(   916),  INT16_C(   543) } },
     { {   INT16_C(     0), -INT16_C(    60), -INT16_C(    14), -INT16_C(    40) },
       {  -INT16_C(    46), -INT16_C(    13),  INT16_C(    45), -INT16_C(     6) },
       {  -INT16_C(    39),  INT16_C(    97),  INT16_C(    59), -INT16_C(    65),
          -INT16_C(    22), -INT16_C(    35), -INT16_C(    62),  INT16_C(    51) },
           INT8_C(     0),
       {   INT16_C(  1794),  INT16_C(   447), -INT16_C(  1769),  INT16_C(   194) } },
     { {  -INT16_C(    72),  INT16_C(    43),  INT16_C(     0), -INT16_C(    15) },
       {  -INT16_C(    96),  INT16_C(    98), -INT16_C(     5),  INT16_C(    88) },
       {   INT16_C(    70),  INT16_C(    21), -INT16_C(    54), -INT16_C(    29),
           INT16_C(    83),  INT16_C(    62),  INT16_C(     7), -INT16_C(     7) },
           INT8_C(     7),
       {   INT16_C(   600), -INT16_C(   643),  INT16_C(    35), -INT16_C(   631) } },
     { {  -INT16_C(    57), -INT16_C(    65),  INT16_C(    87),  INT16_C(    11) },
       {  -INT16_C(    36), -INT16_C(    26),  INT16_C(    46),  INT16_C(    29) },
       {  -INT16_C(    82),  INT16_C(    96),  INT16_C(    14),  INT16_C(    54),
          -INT16_C(    42),  INT16_C(     5), -INT16_C(    47), -INT16_C(    37) },
           INT8_C(     5),
       {  -INT16_C(   237), -INT16_C(   195),  INT16_C(   317),  INT16_C(   156) } },
     { {   INT16_C(    46), -INT16_C(    88), -INT16_C(    14), -INT16_C(    73) },
       {  -INT16_C(    12),  INT16_C(    31),  INT16_C(     0), -INT16_C(    48) },
       {  -INT16_C(    96), -INT16_C(    87), -INT16_C(    55), -INT16_C(    93),
          -INT16_C(    55), -INT16_C(    34),  INT16_C(    63),  INT16_C(    65) },
           INT8_C(     1),
       {   INT16_C(  1090), -INT16_C(  2785), -INT16_C(    14),  INT16_C(  4103) } },
  };

  simde_int16x4_t r, a, b;
  simde_int16x8_t v;

  for (int i = 0 ; i < 8 ; i++) {
    a = simde_vld1_s16(test_vec[i].a);
    b = simde_vld1_s16(test_vec[i].b);
    v = simde_vld1q_s16(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmla_laneq_s16(a, b, v, 0); break;
      case 1: r = simde_vmla_laneq_s16(a, b, v, 1); break;
      case 2: r = simde_vmla_laneq_s16(a, b, v, 2); break;
      case 3: r = simde_vmla_laneq_s16(a, b, v, 3); break;
      case 4: r = simde_vmla_laneq_s16(a, b, v, 4); break;
      case 5: r = simde_vmla_laneq_s16(a, b, v, 5); break;
      case 6: r = simde_vmla_laneq_s16(a, b, v, 6); break;
      case 7: r = simde_vmla_laneq_s16(a, b, v, 7); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdup_n_s16(0); break;
    }
    simde_test_arm_neon_assert_equal_i16x4(r, simde_vld1_s16(test_vec[i].r));
  }

  return 0;
}

static int
test_simde_vmla_lane_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    int16_t a[4];
    int16_t b[4];
    int16_t v[4];
    int8_t lane;
    int16_t r[4];
  } test_vec[] = {
    { { -INT16_C(  8363),  INT16_C( 18244),  INT16_C(  7549), -INT16_C( 29838) },
      { -INT16_C(  3227),  INT16_C( 11543), -INT16_C( 29487),  INT16_C(  4163) },
      {  INT16_C( 10620),  INT16_C( 22760), -INT16_C( 28728),  INT16_C( 11437) },
      INT8_C(   2),
      {  INT16_C( 28989),  INT16_C( 23100), -INT16_C(  8251), -INT16_C( 21302) } },
    { {  INT16_C( 22862),  INT16_C( 28944),  INT16_C( 22233), -INT16_C( 17978) },
      {  INT16_C(  3739), -INT16_C( 18378), -INT16_C( 16000),  INT16_C( 29469) },
      {  INT16_C( 19160),  INT16_C( 25668),  INT16_C( 21646), -INT16_C( 18463) },
      INT8_C(   0),
      {  INT16_C( 31254),  INT16_C( 31392), -INT16_C( 25895),  INT16_C( 15422) } },
    { {  INT16_C( 32569), -INT16_C(  6453),  INT16_C( 24235),  INT16_C(  1076) },
      { -INT16_C( 22930), -INT16_C( 15138), -INT16_C( 26772),  INT16_C( 31327) },
      {  INT16_C(  6093), -INT16_C( 28934),  INT16_C( 27956),  INT16_C( 32615) },
      INT8_C(   1),
      {  INT16_C(  2725),  INT16_C( 19351),  INT16_C(  9763),  INT16_C( 14074) } },
    { {  INT16_C(  3531), -INT16_C( 21498),  INT16_C( 17092),  INT16_C( 17382) },
      { -INT16_C( 13298),  INT16_C( 27886), -INT16_C(  3327), -INT16_C( 22566) },
      { -INT16_C( 24879),  INT16_C( 26643), -INT16_C( 28930),  INT16_C(  5429) },
      INT8_C(   0),
      {  INT16_C( 18745),  INT16_C( 32340),  INT16_C( 17557), -INT16_C( 10016) } },
    { {  INT16_C( 19139),  INT16_C( 10998), -INT16_C( 22583), -INT16_C( 10506) },
      { -INT16_C( 23891), -INT16_C(  3942), -INT16_C(  8824),  INT16_C( 22014) },
      {  INT16_C( 27339), -INT16_C( 16810), -INT16_C(   700), -INT16_C(  7537) },
      INT8_C(   0),
      { -INT16_C(  5134), -INT16_C( 18156), -INT16_C( 23903),  INT16_C( 13152) } },
    { { -INT16_C(  7945),  INT16_C( 11422),  INT16_C( 10230),  INT16_C( 16624) },
      {  INT16_C(  6685), -INT16_C( 15351), -INT16_C(  8432), -INT16_C( 19598) },
      {  INT16_C( 25209),  INT16_C( 22075), -INT16_C( 28576), -INT16_C( 13791) },
      INT8_C(   2),
      { -INT16_C(  1065), -INT16_C( 16386), -INT16_C( 12810), -INT16_C( 21584) } },
    { {  INT16_C(  3808),  INT16_C( 28643), -INT16_C(  2832), -INT16_C( 11929) },
      { -INT16_C( 27758), -INT16_C( 17977),  INT16_C(  1923), -INT16_C( 24874) },
      { -INT16_C( 25840), -INT16_C(  4178),  INT16_C( 24845),  INT16_C( 28520) },
      INT8_C(   1),
      { -INT16_C( 21988),  INT16_C( 32293),  INT16_C( 23802), -INT16_C( 28453) } },
    { { -INT16_C( 12354), -INT16_C(  8403),  INT16_C(  5273), -INT16_C( 22593) },
      {  INT16_C( 12279), -INT16_C(  5225),  INT16_C( 26774),  INT16_C( 10622) },
      {  INT16_C( 14127),  INT16_C( 13997),  INT16_C( 19214), -INT16_C( 22202) },
      INT8_C(   1),
      {  INT16_C( 21417), -INT16_C(  4552),  INT16_C( 26103),  INT16_C( 17893) } },
  };

  simde_int16x4_t r, a, b, v;

  for (int i = 0 ; i < 8 ; i++) {
    a = simde_vld1_s16(test_vec[i].a);
    b = simde_vld1_s16(test_vec[i].b);
    v = simde_vld1_s16(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmla_lane_s16(a, b, v, 0); break;
      case 1: r = simde_vmla_lane_s16(a, b, v, 1); break;
      case 2: r = simde_vmla_lane_s16(a, b, v, 2); break;
      case 3: r = simde_vmla_lane_s16(a, b, v, 3); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdup_n_s16(0); break;
    }
    simde_test_arm_neon_assert_equal_i16x4(r, simde_vld1_s16(test_vec[i].r));
  }

  return 0;
#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_int16x4_t a = simde_test_arm_neon_random_i16x4();
    simde_int16x4_t b = simde_test_arm_neon_random_i16x4();
    simde_int16x4_t v = simde_test_arm_neon_random_i16x4();
    int8_t lane = simde_test_codegen_random_i8() & 3;
    simde_int16x4_t r;

    SIMDE_CONSTIFY_4_(simde_vmla_lane_s16, r, (HEDLEY_UNREACHABLE(), simde_vdup_n_s16(0)), lane, a, b, v);

    simde_test_arm_neon_write_i16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_i16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i16x4(2, v, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i8(2, lane, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vmla_laneq_s32 (SIMDE_MUNIT_TEST_ARGS) {
  static const struct {
    int32_t a[2];
    int32_t b[2];
    int32_t v[4];
    int8_t lane;
    int32_t r[2];
  } test_vec[] = {
     { {   INT32_C(     3861),  INT32_C(     5159) },
       {   INT32_C(     9760), -INT32_C(     3715) },
       {  -INT32_C(     9595), -INT32_C(     2488),  INT32_C(     4866), -INT32_C(     5704) },
           INT8_C(        2),
       {   INT32_C( 47496021), -INT32_C( 18072031) } },
     { {   INT32_C(     5007), -INT32_C(     7329) },
       {  -INT32_C(     6236),  INT32_C(     6988) },
       {  -INT32_C(      612),  INT32_C(     5079), -INT32_C(     8538), -INT32_C(     3459) },
           INT8_C(        1),
       {  -INT32_C( 31667637),  INT32_C( 35484723) } },
     { {   INT32_C(     1305), -INT32_C(       87) },
       {  -INT32_C(     3936),  INT32_C(     9528) },
       {   INT32_C(     7150), -INT32_C(      961),  INT32_C(     3279), -INT32_C(     1449) },
           INT8_C(        1),
       {   INT32_C(  3783801), -INT32_C(  9156495) } },
     { {  -INT32_C(     1929), -INT32_C(     1565) },
       {   INT32_C(     3306), -INT32_C(     8150) },
       {  -INT32_C(     4113), -INT32_C(     7811), -INT32_C(     7275),  INT32_C(     2429) },
           INT8_C(        2),
       {  -INT32_C( 24053079),  INT32_C( 59289685) } },
     { {   INT32_C(     3468),  INT32_C(     5295) },
       {   INT32_C(     1666), -INT32_C(     3947) },
       {   INT32_C(     6721), -INT32_C(     1160),  INT32_C(     6628),  INT32_C(     2152) },
           INT8_C(        0),
       {   INT32_C( 11200654), -INT32_C( 26522492) } },
     { {   INT32_C(     4696),  INT32_C(      717) },
       {  -INT32_C(     7531), -INT32_C(     1614) },
       {   INT32_C(      129), -INT32_C(     7076), -INT32_C(     1025), -INT32_C(     5723) },
           INT8_C(        3),
       {   INT32_C( 43104609),  INT32_C(  9237639) } },
     { {  -INT32_C(      764),  INT32_C(      296) },
       {  -INT32_C(     8065),  INT32_C(     1700) },
       {   INT32_C(     8396), -INT32_C(       25),  INT32_C(     6189),  INT32_C(     6350) },
           INT8_C(        3),
       {  -INT32_C( 51213514),  INT32_C( 10795296) } },
     { {  -INT32_C(     9807), -INT32_C(     6609) },
       {  -INT32_C(     9863),  INT32_C(     1251) },
       {   INT32_C(     5518),  INT32_C(     9557), -INT32_C(     3314), -INT32_C(     1340) },
           INT8_C(        1),
       {  -INT32_C( 94270498),  INT32_C( 11949198) } },
  };

  simde_int32x2_t r, a, b;
  simde_int32x4_t v;

  for (int i = 0 ; i < 8 ; i++) {
    a = simde_vld1_s32(test_vec[i].a);
    b = simde_vld1_s32(test_vec[i].b);
    v = simde_vld1q_s32(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmla_laneq_s32(a, b, v, 0); break;
      case 1: r = simde_vmla_laneq_s32(a, b, v, 1); break;
      case 2: r = simde_vmla_laneq_s32(a, b, v, 2); break;
      case 3: r = simde_vmla_laneq_s32(a, b, v, 3); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdup_n_s32(0); break;
    }
    simde_test_arm_neon_assert_equal_i32x2(r, simde_vld1_s32(test_vec[i].r));
  }

  return 0;
}

static int
test_simde_vmla_lane_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    int32_t a[2];
    int32_t b[2];
    int32_t v[2];
    int8_t lane;
    int32_t r[2];
  } test_vec[] = {
    { { -INT32_C(  1677892667), -INT32_C(   731162875) },
      {  INT32_C(  1367126076), -INT32_C(   980313240) },
      {  INT32_C(  1778607037),  INT32_C(  1770572205) },
       INT8_C(   1),
      { -INT32_C(   813721519), -INT32_C(   501873587) } },
    { { -INT32_C(   513060676),  INT32_C(   681990085) },
      { -INT32_C(  1423097516),  INT32_C(  1575485869) },
      {  INT32_C(   432355710),  INT32_C(   785877963) },
       INT8_C(   0),
      { -INT32_C(  1360974828),  INT32_C(   945270763) } },
    { { -INT32_C(   916923583), -INT32_C(  1803214012) },
      { -INT32_C(   447125618),  INT32_C(  1329168909) },
      { -INT32_C(  1308826193),  INT32_C(   103766477) },
       INT8_C(   0),
      { -INT32_C(  1461671085),  INT32_C(   804694823) } },
    { {  INT32_C(   531222856), -INT32_C(   614450945) },
      { -INT32_C(  1289803120),  INT32_C(   373470383) },
      { -INT32_C(  1893456115),  INT32_C(  1178563425) },
       INT8_C(   1),
      { -INT32_C(   670588456), -INT32_C(  1830663090) } },
    { {  INT32_C(   533206000), -INT32_C(   345512423) },
      { -INT32_C(   924153968),  INT32_C(   291030503) },
      { -INT32_C(  1715401755),  INT32_C(  1973868365) },
       INT8_C(   1),
      {  INT32_C(  1032636992), -INT32_C(  1743098476) } },
    { {  INT32_C(  1970198070),  INT32_C(   795204892) },
      { -INT32_C(  1941404507),  INT32_C(  1914450923) },
      { -INT32_C(   480582626),  INT32_C(  1204316988) },
       INT8_C(   0),
      {  INT32_C(  1829983628),  INT32_C(  1318010534) } },
    { {  INT32_C(   134518113), -INT32_C(   532742390) },
      {  INT32_C(  1274852206), -INT32_C(  1661916392) },
      { -INT32_C(  1484292749),  INT32_C(  2110126745) },
       INT8_C(   0),
      { -INT32_C(   282597941), -INT32_C(  2075651374) } },
    { {  INT32_C(  1908390312), -INT32_C(  1781339136) },
      { -INT32_C(   274736400), -INT32_C(   883065064) },
      { -INT32_C(  1495029381),  INT32_C(   387612570) },
       INT8_C(   1),
      { -INT32_C(  1310294520),  INT32_C(  1586382960) } },

  };

  simde_int32x2_t r, a, b, v;

  for (int i = 0 ; i < 8 ; i++) {
    a = simde_vld1_s32(test_vec[i].a);
    b = simde_vld1_s32(test_vec[i].b);
    v = simde_vld1_s32(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmla_lane_s32(a, b, v, 0); break;
      case 1: r = simde_vmla_lane_s32(a, b, v, 1); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdup_n_s32(0); break;
    }
    simde_test_arm_neon_assert_equal_i32x2(r, simde_vld1_s32(test_vec[i].r));
  }

  return 0;
#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_int32x2_t a = simde_test_arm_neon_random_i32x2();
    simde_int32x2_t b = simde_test_arm_neon_random_i32x2();
    simde_int32x2_t v = simde_test_arm_neon_random_i32x2();
    int8_t lane = simde_test_codegen_random_i8() & 1;
    simde_int32x2_t r;

    SIMDE_CONSTIFY_2_(simde_vmla_lane_s32, r, (HEDLEY_UNREACHABLE(), simde_vdup_n_s32(0)), lane, a, b, v);

    simde_test_arm_neon_write_i32x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_i32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i32x2(2, v, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i8(2, lane, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vmla_laneq_u16 (SIMDE_MUNIT_TEST_ARGS) {
  static const struct {
    uint16_t a[4];
    uint16_t b[4];
    uint16_t v[8];
    int8_t lane;
    uint16_t r[4];
  } test_vec[] = {
     { {   UINT16_C(   144),  UINT16_C(    34),  UINT16_C(    24),  UINT16_C(    53) },
       {   UINT16_C(   114),  UINT16_C(   151),  UINT16_C(   196),  UINT16_C(   168) },
       {   UINT16_C(     9),  UINT16_C(   121),  UINT16_C(    98),  UINT16_C(    37),
           UINT16_C(    85),  UINT16_C(   143),  UINT16_C(   114),  UINT16_C(    77) },
           INT8_C(     7),
       {   UINT16_C(  8922),  UINT16_C( 11661),  UINT16_C( 15116),  UINT16_C( 12989) } },
     { {   UINT16_C(    46),  UINT16_C(    26),  UINT16_C(   172),  UINT16_C(   157) },
       {   UINT16_C(   130),  UINT16_C(    10),  UINT16_C(    72),  UINT16_C(   144) },
       {   UINT16_C(    79),  UINT16_C(    48),  UINT16_C(    31),  UINT16_C(    47),
           UINT16_C(   141),  UINT16_C(    75),  UINT16_C(    11),  UINT16_C(     0) },
           INT8_C(     4),
       {   UINT16_C( 18376),  UINT16_C(  1436),  UINT16_C( 10324),  UINT16_C( 20461) } },
     { {   UINT16_C(    66),  UINT16_C(   115),  UINT16_C(    17),  UINT16_C(   182) },
       {   UINT16_C(   171),  UINT16_C(    62),  UINT16_C(    79),  UINT16_C(   160) },
       {   UINT16_C(   149),  UINT16_C(   107),  UINT16_C(    55),  UINT16_C(   109),
           UINT16_C(   135),  UINT16_C(   105),  UINT16_C(   116),  UINT16_C(    12) },
           INT8_C(     6),
       {   UINT16_C( 19902),  UINT16_C(  7307),  UINT16_C(  9181),  UINT16_C( 18742) } },
     { {   UINT16_C(   162),  UINT16_C(    21),  UINT16_C(   179),  UINT16_C(   140) },
       {   UINT16_C(   116),  UINT16_C(   164),  UINT16_C(   124),  UINT16_C(   121) },
       {   UINT16_C(    70),  UINT16_C(     9),  UINT16_C(   107),  UINT16_C(   156),
           UINT16_C(   122),  UINT16_C(   174),  UINT16_C(    56),  UINT16_C(   136) },
           INT8_C(     4),
       {   UINT16_C( 14314),  UINT16_C( 20029),  UINT16_C( 15307),  UINT16_C( 14902) } },
     { {   UINT16_C(   156),  UINT16_C(    33),  UINT16_C(   163),  UINT16_C(   127) },
       {   UINT16_C(    32),  UINT16_C(    12),  UINT16_C(    90),  UINT16_C(    82) },
       {   UINT16_C(    97),  UINT16_C(   190),  UINT16_C(     0),  UINT16_C(    43),
           UINT16_C(    37),  UINT16_C(    42),  UINT16_C(    81),  UINT16_C(   151) },
           INT8_C(     6),
       {   UINT16_C(  2748),  UINT16_C(  1005),  UINT16_C(  7453),  UINT16_C(  6769) } },
     { {   UINT16_C(    86),  UINT16_C(    68),  UINT16_C(   183),  UINT16_C(   186) },
       {   UINT16_C(     7),  UINT16_C(   118),  UINT16_C(   191),  UINT16_C(    83) },
       {   UINT16_C(   139),  UINT16_C(   109),  UINT16_C(   165),  UINT16_C(   138),
           UINT16_C(    63),  UINT16_C(   145),  UINT16_C(   122),  UINT16_C(   104) },
           INT8_C(     5),
       {   UINT16_C(  1101),  UINT16_C( 17178),  UINT16_C( 27878),  UINT16_C( 12221) } },
     { {   UINT16_C(    66),  UINT16_C(   140),  UINT16_C(   133),  UINT16_C(   129) },
       {   UINT16_C(   164),  UINT16_C(    44),  UINT16_C(    50),  UINT16_C(     9) },
       {   UINT16_C(     4),  UINT16_C(    13),  UINT16_C(   156),  UINT16_C(   115),
           UINT16_C(    28),  UINT16_C(     5),  UINT16_C(    57),  UINT16_C(   186) },
           INT8_C(     5),
       {   UINT16_C(   886),  UINT16_C(   360),  UINT16_C(   383),  UINT16_C(   174) } },
     { {   UINT16_C(   147),  UINT16_C(     6),  UINT16_C(    29),  UINT16_C(    23) },
       {   UINT16_C(   196),  UINT16_C(   120),  UINT16_C(    91),  UINT16_C(   101) },
       {   UINT16_C(   183),  UINT16_C(   144),  UINT16_C(    66),  UINT16_C(    70),
           UINT16_C(   187),  UINT16_C(   197),  UINT16_C(   140),  UINT16_C(   144) },
           INT8_C(     6),
       {   UINT16_C( 27587),  UINT16_C( 16806),  UINT16_C( 12769),  UINT16_C( 14163) } },
  };

  simde_uint16x4_t r, a, b;
  simde_uint16x8_t v;

  for (int i = 0 ; i < 8 ; i++) {
    a = simde_vld1_u16(test_vec[i].a);
    b = simde_vld1_u16(test_vec[i].b);
    v = simde_vld1q_u16(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmla_laneq_u16(a, b, v, 0); break;
      case 1: r = simde_vmla_laneq_u16(a, b, v, 1); break;
      case 2: r = simde_vmla_laneq_u16(a, b, v, 2); break;
      case 3: r = simde_vmla_laneq_u16(a, b, v, 3); break;
      case 4: r = simde_vmla_laneq_u16(a, b, v, 4); break;
      case 5: r = simde_vmla_laneq_u16(a, b, v, 5); break;
      case 6: r = simde_vmla_laneq_u16(a, b, v, 6); break;
      case 7: r = simde_vmla_laneq_u16(a, b, v, 7); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdup_n_u16(0); break;
    }
    simde_test_arm_neon_assert_equal_u16x4(r, simde_vld1_u16(test_vec[i].r));
  }

  return 0;
}

static int
test_simde_vmla_lane_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    uint16_t a[4];
    uint16_t b[4];
    uint16_t v[4];
    int8_t lane;
    uint16_t r[4];
  } test_vec[] = {
    { { UINT16_C(24938), UINT16_C(12997), UINT16_C(36716), UINT16_C(45604) },
      { UINT16_C(53368), UINT16_C(42594), UINT16_C(35304), UINT16_C(54457) },
      { UINT16_C(16938), UINT16_C(21817), UINT16_C(27865), UINT16_C( 3610) },
       INT8_C(   0),
      { UINT16_C(34074), UINT16_C(49881), UINT16_C(65404), UINT16_C(19070) } },
    { { UINT16_C(12202), UINT16_C(60429), UINT16_C(63791), UINT16_C(36950) },
      { UINT16_C(35006), UINT16_C(19964), UINT16_C(44972), UINT16_C(31941) },
      { UINT16_C(27409), UINT16_C(39524), UINT16_C(14628), UINT16_C(26564) },
       INT8_C(   2),
      { UINT16_C(47202), UINT16_C(65405), UINT16_C(63839), UINT16_C(63754) } },
    { { UINT16_C(16409), UINT16_C(13535), UINT16_C( 8014), UINT16_C(32222) },
      { UINT16_C(51756), UINT16_C( 9644), UINT16_C(15392), UINT16_C(43491) },
      { UINT16_C(12345), UINT16_C(59477), UINT16_C(54005), UINT16_C(24825) },
       INT8_C(   2),
      { UINT16_C(54325), UINT16_C(23163), UINT16_C(59886), UINT16_C(18973) } },
    { { UINT16_C(34195), UINT16_C(22383), UINT16_C(58092), UINT16_C(11377) },
      { UINT16_C(42433), UINT16_C(57467), UINT16_C(63619), UINT16_C(19725) },
      { UINT16_C(12965), UINT16_C(57709), UINT16_C( 5654), UINT16_C(17946) },
       INT8_C(   0),
      { UINT16_C( 3320), UINT16_C( 3254), UINT16_C(42331), UINT16_C(24530) } },
    { { UINT16_C(15362), UINT16_C(64318), UINT16_C(29852), UINT16_C( 8590) },
      { UINT16_C(59108), UINT16_C(50701), UINT16_C(14935), UINT16_C(64647) },
      { UINT16_C(26549), UINT16_C(44415), UINT16_C(52340), UINT16_C(42834) },
       INT8_C(   1),
      { UINT16_C(56094), UINT16_C( 1201), UINT16_C(12485), UINT16_C(41863) } },
    { { UINT16_C(48436), UINT16_C(20048), UINT16_C(48131), UINT16_C(16209) },
      { UINT16_C(19706), UINT16_C(28380), UINT16_C(64987), UINT16_C(49490) },
      { UINT16_C( 6155), UINT16_C(17688), UINT16_C( 5279), UINT16_C( 2042) },
       INT8_C(   3),
      { UINT16_C(48984), UINT16_C(38184), UINT16_C(41185), UINT16_C(18277) } },
    { { UINT16_C(31655), UINT16_C(64095), UINT16_C(38946), UINT16_C(57134) },
      { UINT16_C(31976), UINT16_C(42211), UINT16_C( 8909), UINT16_C( 6814) },
      { UINT16_C( 3582), UINT16_C(64757), UINT16_C(46687), UINT16_C(30727) },
       INT8_C(   2),
      { UINT16_C(50623), UINT16_C(35996), UINT16_C(16437), UINT16_C( 5072) } },
    { { UINT16_C( 5964), UINT16_C(18146), UINT16_C(29982), UINT16_C(39661) },
      { UINT16_C(59348), UINT16_C(27836), UINT16_C(39957), UINT16_C(37461) },
      { UINT16_C(63871), UINT16_C(41311), UINT16_C(31128), UINT16_C(42400) },
       INT8_C(   2),
      { UINT16_C(61740), UINT16_C(45698), UINT16_C( 3734), UINT16_C(43621) } },
  };

  simde_uint16x4_t r, a, b, v;

  for (int i = 0 ; i < 8 ; i++) {
    a = simde_vld1_u16(test_vec[i].a);
    b = simde_vld1_u16(test_vec[i].b);
    v = simde_vld1_u16(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmla_lane_u16(a, b, v, 0); break;
      case 1: r = simde_vmla_lane_u16(a, b, v, 1); break;
      case 2: r = simde_vmla_lane_u16(a, b, v, 2); break;
      case 3: r = simde_vmla_lane_u16(a, b, v, 3); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdup_n_u16(0); break;
    }
    simde_test_arm_neon_assert_equal_u16x4(r, simde_vld1_u16(test_vec[i].r));
  }

  return 0;
#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_uint16x4_t a = simde_test_arm_neon_random_u16x4();
    simde_uint16x4_t b = simde_test_arm_neon_random_u16x4();
    simde_uint16x4_t v = simde_test_arm_neon_random_u16x4();
    int8_t lane = simde_test_codegen_random_i8() & 3;
    simde_uint16x4_t r;

    SIMDE_CONSTIFY_4_(simde_vmla_lane_u16, r, (HEDLEY_UNREACHABLE(), simde_vdup_n_u16(0)), lane, a, b, v);

    simde_test_arm_neon_write_u16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_u16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u16x4(2, v, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i8(2, lane, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vmla_laneq_u32 (SIMDE_MUNIT_TEST_ARGS) {
  static const struct {
    uint32_t a[2];
    uint32_t b[2];
    uint32_t v[4];
    int8_t lane;
    uint32_t r[2];
  } test_vec[] = {
     { {   UINT32_C(      779),  UINT32_C(     9897) },
       {   UINT32_C(    19930),  UINT32_C(     9507) },
       {   UINT32_C(     6030),  UINT32_C(    14920),  UINT32_C(      631),  UINT32_C(     3218) },
           INT8_C(        0),
       {   UINT32_C(120178679),  UINT32_C( 57337107) } },
     { {   UINT32_C(     7008),  UINT32_C(    13810) },
       {   UINT32_C(     4541),  UINT32_C(     1104) },
       {   UINT32_C(    14960),  UINT32_C(     1169),  UINT32_C(    14367),  UINT32_C(    15281) },
           INT8_C(        1),
       {   UINT32_C(  5315437),  UINT32_C(  1304386) } },
     { {   UINT32_C(    19257),  UINT32_C(     3056) },
       {   UINT32_C(     3291),  UINT32_C(     3783) },
       {   UINT32_C(     7597),  UINT32_C(    18771),  UINT32_C(     5171),  UINT32_C(     7806) },
           INT8_C(        0),
       {   UINT32_C( 25020984),  UINT32_C( 28742507) } },
     { {   UINT32_C(    14218),  UINT32_C(    15283) },
       {   UINT32_C(    17057),  UINT32_C(    19454) },
       {   UINT32_C(    18483),  UINT32_C(    19832),  UINT32_C(    11066),  UINT32_C(     2085) },
           INT8_C(        3),
       {   UINT32_C( 35578063),  UINT32_C( 40576873) } },
     { {   UINT32_C(    19077),  UINT32_C(      672) },
       {   UINT32_C(    13358),  UINT32_C(     7702) },
       {   UINT32_C(      305),  UINT32_C(    13216),  UINT32_C(    15048),  UINT32_C(    13974) },
           INT8_C(        0),
       {   UINT32_C(  4093267),  UINT32_C(  2349782) } },
     { {   UINT32_C(    12243),  UINT32_C(     2054) },
       {   UINT32_C(    15731),  UINT32_C(    15822) },
       {   UINT32_C(    13246),  UINT32_C(     4996),  UINT32_C(    14773),  UINT32_C(    18150) },
           INT8_C(        1),
       {   UINT32_C( 78604319),  UINT32_C( 79048766) } },
     { {   UINT32_C(    16357),  UINT32_C(    12567) },
       {   UINT32_C(    10743),  UINT32_C(      126) },
       {   UINT32_C(    14907),  UINT32_C(     9502),  UINT32_C(     2633),  UINT32_C(     4175) },
           INT8_C(        2),
       {   UINT32_C( 28302676),  UINT32_C(   344325) } },
     { {   UINT32_C(    18517),  UINT32_C(    19015) },
       {   UINT32_C(    12624),  UINT32_C(     4257) },
       {   UINT32_C(    17459),  UINT32_C(    18980),  UINT32_C(    11775),  UINT32_C(    17522) },
           INT8_C(        3),
       {   UINT32_C(221216245),  UINT32_C( 74610169) } },
  };

  simde_uint32x2_t r, a, b;
  simde_uint32x4_t v;

  for (int i = 0 ; i < 8 ; i++) {
    a = simde_vld1_u32(test_vec[i].a);
    b = simde_vld1_u32(test_vec[i].b);
    v = simde_vld1q_u32(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmla_laneq_u32(a, b, v, 0); break;
      case 1: r = simde_vmla_laneq_u32(a, b, v, 1); break;
      case 2: r = simde_vmla_laneq_u32(a, b, v, 2); break;
      case 3: r = simde_vmla_laneq_u32(a, b, v, 3); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdup_n_u32(0); break;
    }
    simde_test_arm_neon_assert_equal_u32x2(r, simde_vld1_u32(test_vec[i].r));
  }

  return 0;
}

static int
test_simde_vmla_lane_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    uint32_t a[2];
    uint32_t b[2];
    uint32_t v[2];
    int8_t lane;
    uint32_t r[2];
  } test_vec[] = {
    { { UINT32_C(2312484602), UINT32_C(3397139468) },
      { UINT32_C( 730399489), UINT32_C(3125101749) },
      { UINT32_C(2008462712), UINT32_C(2806817902) },
       INT8_C(   1),
      { UINT32_C(2414716264), UINT32_C(2902439378) } },
    { { UINT32_C(1555760104), UINT32_C(2975213307) },
      { UINT32_C( 952033531), UINT32_C(1597605980) },
      { UINT32_C(1444176914), UINT32_C(1607388842) },
       INT8_C(   1),
      { UINT32_C(3548406934), UINT32_C( 390904851) } },
    { { UINT32_C(2435435845), UINT32_C(2004534388) },
      { UINT32_C(2792543872), UINT32_C( 228664365) },
      { UINT32_C(1785321954), UINT32_C(2004666643) },
       INT8_C(   1),
      { UINT32_C(2082093253), UINT32_C(1889781963) } },
    { { UINT32_C(2695635410), UINT32_C(1306866048) },
      { UINT32_C( 532772698), UINT32_C(3349101041) },
      { UINT32_C(3488892331), UINT32_C(3232825830) },
       INT8_C(   1),
      { UINT32_C(4012816046), UINT32_C( 365834502) } },
    { { UINT32_C(2553598748), UINT32_C(1818956106) },
      { UINT32_C(4008446909), UINT32_C(1749629681) },
      { UINT32_C( 878274811), UINT32_C(1289756679) },
       INT8_C(   1),
      { UINT32_C(  58770759), UINT32_C(2359938529) } },
    { { UINT32_C(1628844719), UINT32_C(3313336818) },
      { UINT32_C(3339720117), UINT32_C(2357492864) },
      { UINT32_C(2726130536), UINT32_C( 614393276) },
       INT8_C(   0),
      { UINT32_C(2629849911), UINT32_C( 700290546) } },
    { { UINT32_C(2992516050), UINT32_C(2841801591) },
      { UINT32_C( 194823050), UINT32_C(1438736704) },
      { UINT32_C(3990259825), UINT32_C(2136367628) },
       INT8_C(   1),
      { UINT32_C(1726884426), UINT32_C( 556630647) } },
    { { UINT32_C(2529442808), UINT32_C(2322137695) },
      { UINT32_C(3556842336), UINT32_C(1079946109) },
      { UINT32_C(2826987847), UINT32_C(2988103210) },
       INT8_C(   0),
      { UINT32_C(2269983640), UINT32_C(4286633738) } },
  };

  simde_uint32x2_t r, a, b, v;

  for (int i = 0 ; i < 8 ; i++) {
    a = simde_vld1_u32(test_vec[i].a);
    b = simde_vld1_u32(test_vec[i].b);
    v = simde_vld1_u32(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmla_lane_u32(a, b, v, 0); break;
      case 1: r = simde_vmla_lane_u32(a, b, v, 1); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdup_n_u32(0); break;
    }
    simde_test_arm_neon_assert_equal_u32x2(r, simde_vld1_u32(test_vec[i].r));
  }

  return 0;
#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_uint32x2_t a = simde_test_arm_neon_random_u32x2();
    simde_uint32x2_t b = simde_test_arm_neon_random_u32x2();
    simde_uint32x2_t v = simde_test_arm_neon_random_u32x2();
    int8_t lane = simde_test_codegen_random_i8() & 1;
    simde_uint32x2_t r;

    SIMDE_CONSTIFY_2_(simde_vmla_lane_u32, r, (HEDLEY_UNREACHABLE(), simde_vdup_n_u32(0)), lane, a, b, v);

    simde_test_arm_neon_write_u32x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_u32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u32x2(2, v, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i8(2, lane, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vmlaq_lane_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    float a[4];
    float b[4];
    float v[2];
    int8_t lane;
    float r[4];
  } test_vec[] = {
    { { SIMDE_FLOAT32_C(   648.31), SIMDE_FLOAT32_C(   897.29), SIMDE_FLOAT32_C(  -773.49), SIMDE_FLOAT32_C(   917.71) },
      { SIMDE_FLOAT32_C(  -138.23), SIMDE_FLOAT32_C(  -297.76), SIMDE_FLOAT32_C(   935.07), SIMDE_FLOAT32_C(  -483.60) },
      { SIMDE_FLOAT32_C(  -953.66), SIMDE_FLOAT32_C(   360.53) },
       INT8_C(   0),
      { SIMDE_FLOAT32_C(132472.72), SIMDE_FLOAT32_C(284859.09), SIMDE_FLOAT32_C(-892512.31), SIMDE_FLOAT32_C(462107.69) } },
    { { SIMDE_FLOAT32_C(  -713.70), SIMDE_FLOAT32_C(    72.02), SIMDE_FLOAT32_C(   505.39), SIMDE_FLOAT32_C(  -410.47) },
      { SIMDE_FLOAT32_C(   842.08), SIMDE_FLOAT32_C(   986.12), SIMDE_FLOAT32_C(  -506.67), SIMDE_FLOAT32_C(  -516.98) },
      { SIMDE_FLOAT32_C(   668.61), SIMDE_FLOAT32_C(   247.66) },
       INT8_C(   0),
      { SIMDE_FLOAT32_C(562309.44), SIMDE_FLOAT32_C(659401.69), SIMDE_FLOAT32_C(-338259.25), SIMDE_FLOAT32_C(-346068.44) } },
    { { SIMDE_FLOAT32_C(  -476.42), SIMDE_FLOAT32_C(  -326.08), SIMDE_FLOAT32_C(  -377.79), SIMDE_FLOAT32_C(   139.47) },
      { SIMDE_FLOAT32_C(  -585.78), SIMDE_FLOAT32_C(   724.87), SIMDE_FLOAT32_C(   305.39), SIMDE_FLOAT32_C(  -586.36) },
      { SIMDE_FLOAT32_C(   533.91), SIMDE_FLOAT32_C(   -46.30) },
       INT8_C(   0),
      { SIMDE_FLOAT32_C(-313230.22), SIMDE_FLOAT32_C(386689.22), SIMDE_FLOAT32_C(162672.98), SIMDE_FLOAT32_C(-312923.97) } },
    { { SIMDE_FLOAT32_C(   760.42), SIMDE_FLOAT32_C(  -128.59), SIMDE_FLOAT32_C(   172.70), SIMDE_FLOAT32_C(  -537.34) },
      { SIMDE_FLOAT32_C(  -193.52), SIMDE_FLOAT32_C(   689.10), SIMDE_FLOAT32_C(  -491.00), SIMDE_FLOAT32_C(  -832.99) },
      { SIMDE_FLOAT32_C(   327.17), SIMDE_FLOAT32_C(  -204.71) },
       INT8_C(   1),
      { SIMDE_FLOAT32_C( 40375.90), SIMDE_FLOAT32_C(-141194.25), SIMDE_FLOAT32_C(100685.32), SIMDE_FLOAT32_C(169984.05) } },
    { { SIMDE_FLOAT32_C(  -167.44), SIMDE_FLOAT32_C(   384.82), SIMDE_FLOAT32_C(    81.12), SIMDE_FLOAT32_C(  -181.32) },
      { SIMDE_FLOAT32_C(   878.15), SIMDE_FLOAT32_C(   564.14), SIMDE_FLOAT32_C(  -512.72), SIMDE_FLOAT32_C(   125.81) },
      { SIMDE_FLOAT32_C(  -390.39), SIMDE_FLOAT32_C(    10.87) },
       INT8_C(   0),
      { SIMDE_FLOAT32_C(-342988.44), SIMDE_FLOAT32_C(-219849.81), SIMDE_FLOAT32_C(200241.88), SIMDE_FLOAT32_C(-49296.29) } },
    { { SIMDE_FLOAT32_C(   231.82), SIMDE_FLOAT32_C(  -849.67), SIMDE_FLOAT32_C(  -786.05), SIMDE_FLOAT32_C(   -43.32) },
      { SIMDE_FLOAT32_C(   455.72), SIMDE_FLOAT32_C(  -372.41), SIMDE_FLOAT32_C(  -509.41), SIMDE_FLOAT32_C(  -590.58) },
      { SIMDE_FLOAT32_C(   -61.48), SIMDE_FLOAT32_C(  -748.99) },
       INT8_C(   0),
      { SIMDE_FLOAT32_C(-27785.85), SIMDE_FLOAT32_C( 22046.10), SIMDE_FLOAT32_C( 30532.48), SIMDE_FLOAT32_C( 36265.54) } },
    { { SIMDE_FLOAT32_C(  -888.78), SIMDE_FLOAT32_C(  -286.33), SIMDE_FLOAT32_C(  -912.68), SIMDE_FLOAT32_C(   800.32) },
      { SIMDE_FLOAT32_C(   222.67), SIMDE_FLOAT32_C(  -745.67), SIMDE_FLOAT32_C(   127.49), SIMDE_FLOAT32_C(  -982.04) },
      { SIMDE_FLOAT32_C(   493.37), SIMDE_FLOAT32_C(   960.04) },
       INT8_C(   0),
      { SIMDE_FLOAT32_C(108969.91), SIMDE_FLOAT32_C(-368177.53), SIMDE_FLOAT32_C( 61987.06), SIMDE_FLOAT32_C(-483708.75) } },
    { { SIMDE_FLOAT32_C(  -425.51), SIMDE_FLOAT32_C(  -221.28), SIMDE_FLOAT32_C(   280.93), SIMDE_FLOAT32_C(  -861.37) },
      { SIMDE_FLOAT32_C(   266.00), SIMDE_FLOAT32_C(  -593.26), SIMDE_FLOAT32_C(  -251.76), SIMDE_FLOAT32_C(  -723.13) },
      { SIMDE_FLOAT32_C(  -793.53), SIMDE_FLOAT32_C(   980.05) },
       INT8_C(   1),
      { SIMDE_FLOAT32_C(260267.78), SIMDE_FLOAT32_C(-581645.69), SIMDE_FLOAT32_C(-246456.44), SIMDE_FLOAT32_C(-709564.94) } },
  };

  simde_float32x4_t r, a, b;
  simde_float32x2_t v;

  for (int i = 0 ; i < 8 ; i++) {
    a = simde_vld1q_f32(test_vec[i].a);
    b = simde_vld1q_f32(test_vec[i].b);
    v = simde_vld1_f32(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmlaq_lane_f32(a, b, v, 0); break;
      case 1: r = simde_vmlaq_lane_f32(a, b, v, 1); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdupq_n_f32(0); break;
    }
    simde_test_arm_neon_assert_equal_f32x4(r, simde_vld1q_f32(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    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_float32x2_t v = simde_test_arm_neon_random_f32x2(-1000.0f, 1000.0f);
    int8_t lane = simde_test_codegen_random_i8() & 1;
    simde_float32x4_t r;

    SIMDE_CONSTIFY_2_(simde_vmlaq_lane_f32, r, (HEDLEY_UNREACHABLE(), simde_vdupq_n_f32(0)), lane, a, b, v);

    simde_test_arm_neon_write_f32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f32x2(2, v, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i8(2, lane, 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_vmlaq_lane_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    int16_t a[8];
    int16_t b[8];
    int16_t v[4];
    int8_t lane;
    int16_t r[8];
  } test_vec[] = {
    { {  INT16_C( 28467), -INT16_C(  7305), -INT16_C( 26990), -INT16_C( 25666), -INT16_C( 14573), -INT16_C( 10172),  INT16_C( 16657),  INT16_C( 13285) },
      {  INT16_C( 31301),  INT16_C( 32005), -INT16_C( 17012), -INT16_C( 28293),  INT16_C( 23125), -INT16_C( 32259),  INT16_C( 14073),  INT16_C( 11642) },
      { -INT16_C(  3675),  INT16_C( 14352), -INT16_C( 12665), -INT16_C( 25901) },
       INT8_C(   2),
      {  INT16_C( 28566), -INT16_C( 10470),  INT16_C( 13158),  INT16_C( 19867), -INT16_C( 12314), -INT16_C(  1361), -INT16_C( 25504),  INT16_C( 23355) } },
    { {  INT16_C( 29207),  INT16_C( 22695), -INT16_C(  9385), -INT16_C( 11875),  INT16_C(  7136), -INT16_C( 25250), -INT16_C(  4202), -INT16_C(  3597) },
      {  INT16_C( 29932),  INT16_C(  8938),  INT16_C(  6126), -INT16_C(  8248),  INT16_C(    40), -INT16_C(  2458),  INT16_C(   211), -INT16_C(  5492) },
      {  INT16_C( 13426), -INT16_C( 14014), -INT16_C(  8177), -INT16_C(  4198) },
       INT8_C(   3),
      {  INT16_C(  7183), -INT16_C( 12437),  INT16_C( 29315),  INT16_C( 10221), -INT16_C( 29712),  INT16_C(  4282),  INT16_C( 27524), -INT16_C( 16853) } },
    { { -INT16_C( 29448), -INT16_C(  5999), -INT16_C( 32129), -INT16_C(  3116), -INT16_C(  2195), -INT16_C( 31519), -INT16_C( 16193), -INT16_C( 16468) },
      { -INT16_C( 23770),  INT16_C(  9874),  INT16_C( 31791),  INT16_C( 25496),  INT16_C( 25022), -INT16_C( 24974),  INT16_C( 25084), -INT16_C(  2919) },
      {  INT16_C( 11246),  INT16_C( 28124), -INT16_C( 20051),  INT16_C(  6753) },
       INT8_C(   0),
      { -INT16_C( 25524),  INT16_C( 19021), -INT16_C(  9423),  INT16_C(  4900), -INT16_C( 16367), -INT16_C(  1827),  INT16_C( 11527), -INT16_C( 10006) } },
    { { -INT16_C( 24766),  INT16_C(   871),  INT16_C(  9803), -INT16_C(  4567),  INT16_C( 20664),  INT16_C( 13342), -INT16_C( 32280),  INT16_C( 19186) },
      { -INT16_C( 28172),  INT16_C( 21830),  INT16_C( 14890),  INT16_C( 21827), -INT16_C( 20201), -INT16_C( 14333),  INT16_C(  7442),  INT16_C( 21616) },
      { -INT16_C( 10308),  INT16_C(  2135), -INT16_C( 32259), -INT16_C( 18954) },
       INT8_C(   1),
      { -INT16_C(  9938),  INT16_C( 11825),  INT16_C( 14993), -INT16_C(    18),  INT16_C( 14217),  INT16_C( 17699), -INT16_C(  3322),  INT16_C( 32002) } },
    { { -INT16_C(  5868), -INT16_C( 26951),  INT16_C(   987),  INT16_C( 27786), -INT16_C(  8375), -INT16_C( 31593), -INT16_C(  5085), -INT16_C( 11109) },
      {  INT16_C( 25583),  INT16_C(  3558),  INT16_C( 15059), -INT16_C( 21815), -INT16_C( 11886),  INT16_C(  5031),  INT16_C( 23752), -INT16_C(  8988) },
      { -INT16_C( 25275),  INT16_C(  8306), -INT16_C(   863), -INT16_C(  5491) },
       INT8_C(   0),
      {  INT16_C( 27519),  INT16_C( 25527),  INT16_C( 17850), -INT16_C( 17993), -INT16_C(  6749),  INT16_C( 15258), -INT16_C( 27125),  INT16_C( 12815) } },
    { {  INT16_C( 28196),  INT16_C(  4351), -INT16_C( 11511),  INT16_C( 27648),  INT16_C(  3513), -INT16_C(  3265), -INT16_C(  5674), -INT16_C( 22395) },
      { -INT16_C( 26480), -INT16_C(  5008),  INT16_C( 19580),  INT16_C(  6705),  INT16_C( 21183), -INT16_C( 17477), -INT16_C( 23073),  INT16_C(   919) },
      { -INT16_C( 27116),  INT16_C(  7443),  INT16_C(  4969),  INT16_C(  8842) },
       INT8_C(   0),
      { -INT16_C( 18076),  INT16_C( 10687),  INT16_C( 29881),  INT16_C( 11732),  INT16_C( 28325),  INT16_C( 12251), -INT16_C( 30398),  INT16_C( 27217) } },
    { {  INT16_C(  5833), -INT16_C( 19465), -INT16_C( 24677),  INT16_C( 13379),  INT16_C( 12303),  INT16_C( 23472), -INT16_C( 13727), -INT16_C( 19686) },
      { -INT16_C( 10619),  INT16_C( 11154), -INT16_C( 27283),  INT16_C(  1087),  INT16_C( 23721), -INT16_C( 17299), -INT16_C( 28442), -INT16_C( 20259) },
      { -INT16_C( 11098),  INT16_C( 16739), -INT16_C( 22925), -INT16_C( 32139) },
       INT8_C(   2),
      { -INT16_C( 19832), -INT16_C(  3443),  INT16_C( 28050), -INT16_C(  2416),  INT16_C( 26106), -INT16_C( 20825),  INT16_C(  1459),  INT16_C( 29793) } },
    { { -INT16_C(  8922), -INT16_C(  4040), -INT16_C(  5128), -INT16_C( 12682), -INT16_C( 24194),  INT16_C(  4923),  INT16_C( 16352),  INT16_C( 15548) },
      {  INT16_C( 31149),  INT16_C( 15651), -INT16_C( 11434),  INT16_C( 10979),  INT16_C(  9270), -INT16_C(  9059),  INT16_C(  8090), -INT16_C( 16205) },
      { -INT16_C(  5124), -INT16_C(  2896),  INT16_C(  9942),  INT16_C( 21698) },
       INT8_C(   3),
      { -INT16_C( 10688), -INT16_C( 16194),  INT16_C( 19236), -INT16_C( 13700), -INT16_C( 13718), -INT16_C( 14795), -INT16_C( 17772),  INT16_C(    98) } },
  };

  simde_int16x8_t r, a, b;
  simde_int16x4_t v;

  for (int i = 0 ; i < 8 ; i++) {
    a = simde_vld1q_s16(test_vec[i].a);
    b = simde_vld1q_s16(test_vec[i].b);
    v = simde_vld1_s16(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmlaq_lane_s16(a, b, v, 0); break;
      case 1: r = simde_vmlaq_lane_s16(a, b, v, 1); break;
      case 2: r = simde_vmlaq_lane_s16(a, b, v, 2); break;
      case 3: r = simde_vmlaq_lane_s16(a, b, v, 3); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdupq_n_s16(0); break;
    }
    simde_test_arm_neon_assert_equal_i16x8(r, simde_vld1q_s16(test_vec[i].r));
  }

  return 0;
#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_int16x8_t a = simde_test_arm_neon_random_i16x8();
    simde_int16x8_t b = simde_test_arm_neon_random_i16x8();
    simde_int16x4_t v = simde_test_arm_neon_random_i16x4();
    int8_t lane = simde_test_codegen_random_i8() & 3;
    simde_int16x8_t r;

    SIMDE_CONSTIFY_4_(simde_vmlaq_lane_s16, r, (HEDLEY_UNREACHABLE(), simde_vdupq_n_s16(0)), lane, a, b, v);

    simde_test_arm_neon_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i16x4(2, v, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i8(2, lane, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vmlaq_lane_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    int32_t a[4];
    int32_t b[4];
    int32_t v[2];
    int8_t lane;
    int32_t r[4];
  } test_vec[] = {
    { { -INT32_C(  1901227562),  INT32_C(  1506304066),  INT32_C(    10101458), -INT32_C(   929349876) },
      { -INT32_C(   724051569),  INT32_C(   111411401),  INT32_C(   372195801),  INT32_C(  1276217462) },
      {  INT32_C(  1541127961), -INT32_C(   239820001) },
       INT8_C(   1),
      {  INT32_C(  1541601063),  INT32_C(  1517843353),  INT32_C(  1557415705),  INT32_C(   831907670) } },
    { { -INT32_C(  1915555250),  INT32_C(  1713216141),  INT32_C(  1915744626), -INT32_C(   682936938) },
      { -INT32_C(   313695643),  INT32_C(   839293555),  INT32_C(   407986549),  INT32_C(  1692222229) },
      { -INT32_C(  1024348363), -INT32_C(  1138225590) },
       INT8_C(   0),
      { -INT32_C(  1070572489), -INT32_C(   783077028), -INT32_C(  2050156117),  INT32_C(   179991535) } },
    { { -INT32_C(  1936314793), -INT32_C(   604934791),  INT32_C(  1431297723),  INT32_C(  1170899428) },
      {  INT32_C(   375120595),  INT32_C(  1867235263), -INT32_C(  1078391376), -INT32_C(  1933609675) },
      {  INT32_C(   471356835),  INT32_C(  2113407682) },
       INT8_C(   0),
      { -INT32_C(  1557157456), -INT32_C(  1111560426),  INT32_C(  1647248843),  INT32_C(  1049934755) } },
    { { -INT32_C(   926035385),  INT32_C(  2124092060),  INT32_C(   742306157),  INT32_C(   165522940) },
      { -INT32_C(   616653722), -INT32_C(  1333867941), -INT32_C(   311256349), -INT32_C(   640290670) },
      {  INT32_C(  1604494018),  INT32_C(   584924597) },
       INT8_C(   1),
      {  INT32_C(  1197782117),  INT32_C(  1158075379),  INT32_C(   958745324),  INT32_C(   444436278) } },
    { { -INT32_C(   924102885), -INT32_C(   936446676), -INT32_C(    31258317),  INT32_C(   585225095) },
      {  INT32_C(   901041733),  INT32_C(  1190694563),  INT32_C(  1845188400),  INT32_C(  1348214068) },
      { -INT32_C(  1743239060),  INT32_C(  1885357885) },
       INT8_C(   0),
      { -INT32_C(  1716667337), -INT32_C(   932120080), -INT32_C(  1053732493), -INT32_C(  1898658441) } },
    { {  INT32_C(  1457024643),  INT32_C(   496826959),  INT32_C(  1019335086),  INT32_C(   543950793) },
      {  INT32_C(   525720066),  INT32_C(  2123146550),  INT32_C(    79373501),  INT32_C(   139799685) },
      { -INT32_C(   362861158), -INT32_C(   720897241) },
       INT8_C(   0),
      {  INT32_C(    42855863), -INT32_C(  1572021557),  INT32_C(  1592665184),  INT32_C(   869740747) } },
    { { -INT32_C(   812248376),  INT32_C(  1490138750), -INT32_C(  1332743925), -INT32_C(  1586623107) },
      { -INT32_C(   182029623), -INT32_C(   191942713), -INT32_C(  1994688114),  INT32_C(  1230369153) },
      { -INT32_C(  2129007869), -INT32_C(  1378162014) },
       INT8_C(   1),
      { -INT32_C(  1426034694),  INT32_C(   663738476),  INT32_C(   167422183),  INT32_C(  1835715359) } },
    { {  INT32_C(  1985502825),  INT32_C(  1044380364),  INT32_C(  1325806624),  INT32_C(  1037957828) },
      {  INT32_C(   129918486), -INT32_C(  1492514628),  INT32_C(   189369121), -INT32_C(   823658651) },
      {  INT32_C(   558186325),  INT32_C(  1516209209) },
       INT8_C(   1),
      { -INT32_C(    91590321), -INT32_C(   239018840), -INT32_C(   111005063),  INT32_C(   999236673) } },
  };

  simde_int32x4_t r, a, b;
  simde_int32x2_t v;

  for (int i = 0 ; i < 8 ; i++) {
    a = simde_vld1q_s32(test_vec[i].a);
    b = simde_vld1q_s32(test_vec[i].b);
    v = simde_vld1_s32(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmlaq_lane_s32(a, b, v, 0); break;
      case 1: r = simde_vmlaq_lane_s32(a, b, v, 1); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdupq_n_s32(0); break;
    }
    simde_test_arm_neon_assert_equal_i32x4(r, simde_vld1q_s32(test_vec[i].r));
  }

  return 0;
#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_int32x4_t a = simde_test_arm_neon_random_i32x4();
    simde_int32x4_t b = simde_test_arm_neon_random_i32x4();
    simde_int32x2_t v = simde_test_arm_neon_random_i32x2();
    int8_t lane = simde_test_codegen_random_i8() & 1;
    simde_int32x4_t r;

    SIMDE_CONSTIFY_2_(simde_vmlaq_lane_s32, r, (HEDLEY_UNREACHABLE(), simde_vdupq_n_s32(0)), lane, a, b, v);

    simde_test_arm_neon_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i32x2(2, v, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i8(2, lane, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vmlaq_lane_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    uint16_t a[8];
    uint16_t b[8];
    uint16_t v[4];
    int8_t lane;
    uint16_t r[8];
  } test_vec[] = {
    { { UINT16_C(42664), UINT16_C(43275), UINT16_C(38735), UINT16_C(35292), UINT16_C( 8900), UINT16_C(58767), UINT16_C(34556), UINT16_C(44209) },
      { UINT16_C(30267), UINT16_C(58512), UINT16_C(42143), UINT16_C(34235), UINT16_C(18555), UINT16_C(23535), UINT16_C(64588), UINT16_C(62794) },
      { UINT16_C(21922), UINT16_C(61854), UINT16_C(31724), UINT16_C(45178) },
       INT8_C(   1),
      { UINT16_C(10770), UINT16_C(18923), UINT16_C(57457), UINT16_C( 7750), UINT16_C(43438), UINT16_C(41489), UINT16_C(51684), UINT16_C(47709) } },
    { { UINT16_C(38410), UINT16_C(37017), UINT16_C(17735), UINT16_C(48587), UINT16_C(45270), UINT16_C(31325), UINT16_C(57963), UINT16_C(46069) },
      { UINT16_C(20690), UINT16_C(52991), UINT16_C(62618), UINT16_C(61297), UINT16_C(25235), UINT16_C( 3804), UINT16_C(36061), UINT16_C(59307) },
      { UINT16_C(17442), UINT16_C(27255), UINT16_C(17289), UINT16_C(24359) },
       INT8_C(   3),
      { UINT16_C(54280), UINT16_C(47730), UINT16_C(44733), UINT16_C( 9986), UINT16_C(16955), UINT16_C(25057), UINT16_C(23318), UINT16_C(29698) } },
    { { UINT16_C(55940), UINT16_C(26462), UINT16_C( 4559), UINT16_C( 8249), UINT16_C( 1808), UINT16_C( 1466), UINT16_C(43640), UINT16_C(56216) },
      { UINT16_C(42630), UINT16_C( 4792), UINT16_C(40785), UINT16_C(38197), UINT16_C(40726), UINT16_C(22814), UINT16_C(32454), UINT16_C(19276) },
      { UINT16_C(43608), UINT16_C(10162), UINT16_C(60347), UINT16_C(52295) },
       INT8_C(   2),
      { UINT16_C(32870), UINT16_C(64454), UINT16_C(52474), UINT16_C(50416), UINT16_C(28194), UINT16_C(43172), UINT16_C( 1818), UINT16_C(40988) } },
    { { UINT16_C(53506), UINT16_C(44139), UINT16_C(18025), UINT16_C( 3890), UINT16_C(17662), UINT16_C(40288), UINT16_C(62841), UINT16_C( 6323) },
      { UINT16_C( 3347), UINT16_C(37343), UINT16_C(10841), UINT16_C( 1257), UINT16_C( 4572), UINT16_C(51135), UINT16_C(35672), UINT16_C(23225) },
      { UINT16_C( 9308), UINT16_C(50438), UINT16_C(14442), UINT16_C(26836) },
       INT8_C(   1),
      { UINT16_C(48756), UINT16_C(45733), UINT16_C(49535), UINT16_C(31144), UINT16_C(64550), UINT16_C(18138), UINT16_C(61833), UINT16_C(38409) } },
    { { UINT16_C( 1332), UINT16_C(10742), UINT16_C( 4025), UINT16_C(50749), UINT16_C(52974), UINT16_C( 6175), UINT16_C( 9144), UINT16_C(51700) },
      { UINT16_C(48099), UINT16_C(28193), UINT16_C(31860), UINT16_C(39371), UINT16_C(36994), UINT16_C(47875), UINT16_C(27749), UINT16_C(39224) },
      { UINT16_C(11889), UINT16_C(10947), UINT16_C(   61), UINT16_C(11248) },
       INT8_C(   2),
      { UINT16_C(51787), UINT16_C(26579), UINT16_C(46941), UINT16_C(27548), UINT16_C(15848), UINT16_C(42966), UINT16_C(63433), UINT16_C(19532) } },
    { { UINT16_C(17168), UINT16_C(13190), UINT16_C(20279), UINT16_C(61974), UINT16_C(34161), UINT16_C(60775), UINT16_C(   80), UINT16_C(57455) },
      { UINT16_C(10755), UINT16_C(28485), UINT16_C(57186), UINT16_C(37345), UINT16_C( 2978), UINT16_C(41678), UINT16_C(64252), UINT16_C( 3184) },
      { UINT16_C(63293), UINT16_C(30015), UINT16_C(22086), UINT16_C(46951) },
       INT8_C(   3),
      { UINT16_C(20293), UINT16_C(19273), UINT16_C(15781), UINT16_C(31389), UINT16_C(  415), UINT16_C(45129), UINT16_C( 8116), UINT16_C(61823) } },
    { { UINT16_C(42190), UINT16_C(52779), UINT16_C( 2836), UINT16_C(16082), UINT16_C(16721), UINT16_C(12449), UINT16_C(12834), UINT16_C(11986) },
      { UINT16_C(29696), UINT16_C(64042), UINT16_C(14052), UINT16_C(56120), UINT16_C(44405), UINT16_C(52002), UINT16_C(55572), UINT16_C(58278) },
      { UINT16_C(53630), UINT16_C(37553), UINT16_C(33757), UINT16_C(11984) },
       INT8_C(   1),
      { UINT16_C(55502), UINT16_C(47413), UINT16_C( 1720), UINT16_C(49290), UINT16_C(59702), UINT16_C( 1827), UINT16_C(45302), UINT16_C(16536) } },
    { { UINT16_C(24177), UINT16_C(41959), UINT16_C( 5424), UINT16_C(42148), UINT16_C(40511), UINT16_C(30088), UINT16_C(25814), UINT16_C(33771) },
      { UINT16_C(46726), UINT16_C(24472), UINT16_C(31581), UINT16_C(11997), UINT16_C(28460), UINT16_C(45067), UINT16_C(14656), UINT16_C(45429) },
      { UINT16_C(23703), UINT16_C(51029), UINT16_C(63858), UINT16_C(45419) },
       INT8_C(   3),
      { UINT16_C(20083), UINT16_C(45167), UINT16_C(61967), UINT16_C( 2051), UINT16_C(33187), UINT16_C(42273), UINT16_C(37526), UINT16_C(38098) } },
  };

  simde_uint16x8_t r, a, b;
  simde_uint16x4_t v;

  for (int i = 0 ; i < 8 ; i++) {
    a = simde_vld1q_u16(test_vec[i].a);
    b = simde_vld1q_u16(test_vec[i].b);
    v = simde_vld1_u16(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmlaq_lane_u16(a, b, v, 0); break;
      case 1: r = simde_vmlaq_lane_u16(a, b, v, 1); break;
      case 2: r = simde_vmlaq_lane_u16(a, b, v, 2); break;
      case 3: r = simde_vmlaq_lane_u16(a, b, v, 3); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdupq_n_u16(0); break;
    }
    simde_test_arm_neon_assert_equal_u16x8(r, simde_vld1q_u16(test_vec[i].r));
  }

  return 0;
#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_uint16x8_t a = simde_test_arm_neon_random_u16x8();
    simde_uint16x8_t b = simde_test_arm_neon_random_u16x8();
    simde_uint16x4_t v = simde_test_arm_neon_random_u16x4();
    int8_t lane = simde_test_codegen_random_i8() & 3;
    simde_uint16x8_t r;

    SIMDE_CONSTIFY_4_(simde_vmlaq_lane_u16, r, (HEDLEY_UNREACHABLE(), simde_vdupq_n_u16(0)), lane, a, b, v);

    simde_test_arm_neon_write_u16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_u16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u16x4(2, v, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i8(2, lane, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vmlaq_lane_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    uint32_t a[4];
    uint32_t b[4];
    uint32_t v[2];
    int8_t lane;
    uint32_t r[4];
  } test_vec[] = {
    { { UINT32_C(4049857574), UINT32_C(4004185250), UINT32_C(3183129877), UINT32_C(2494230254) },
      { UINT32_C(3135721086), UINT32_C(1529636560), UINT32_C(3772764706), UINT32_C( 295409387) },
      { UINT32_C( 620953475), UINT32_C( 403942915) },
       INT8_C(   1),
      { UINT32_C(4241324960), UINT32_C(1333893394), UINT32_C(1236486011), UINT32_C(3313659311) } },
    { { UINT32_C(3159545293), UINT32_C(3443189375), UINT32_C( 882767310), UINT32_C(4082628897) },
      { UINT32_C(1876899800), UINT32_C(3522359506), UINT32_C(2715097075), UINT32_C(4144295210) },
      { UINT32_C(1119049411), UINT32_C( 185658941) },
       INT8_C(   1),
      { UINT32_C(2951607365), UINT32_C(3273753737), UINT32_C(3503854773), UINT32_C(  77695011) } },
    { { UINT32_C(2785296301), UINT32_C(3447715734), UINT32_C(3349212886), UINT32_C(4156191200) },
      { UINT32_C( 874601286), UINT32_C(3069646943), UINT32_C(3136502220), UINT32_C(4154326601) },
      { UINT32_C(3567100221), UINT32_C(1872829592) },
       INT8_C(   0),
      { UINT32_C(4266394971), UINT32_C(1794606393), UINT32_C(2903179378), UINT32_C(3155227205) } },
    { { UINT32_C(3018470977), UINT32_C(1274667504), UINT32_C( 464137474), UINT32_C(1592221732) },
      { UINT32_C(1369940307), UINT32_C(3750731326), UINT32_C(1484219196), UINT32_C(1180952068) },
      { UINT32_C( 217664796), UINT32_C( 827847215) },
       INT8_C(   0),
      { UINT32_C(3682652757), UINT32_C(3298154168), UINT32_C( 116265874), UINT32_C( 132627604) } },
    { { UINT32_C(1648643074), UINT32_C(3568738867), UINT32_C(3893495626), UINT32_C(4179947926) },
      { UINT32_C(1342078313), UINT32_C( 762070240), UINT32_C( 794589245), UINT32_C(3528429264) },
      { UINT32_C( 238327002), UINT32_C(2162354742) },
       INT8_C(   0),
      { UINT32_C(3637496684), UINT32_C(1480247539), UINT32_C(1958195004), UINT32_C(1907674806) } },
    { { UINT32_C(3867699701), UINT32_C( 172982925), UINT32_C(3303710592), UINT32_C(2197886987) },
      { UINT32_C(  39006324), UINT32_C( 350037376), UINT32_C(1145760602), UINT32_C(3258371021) },
      { UINT32_C(3249127220), UINT32_C(3251435585) },
       INT8_C(   1),
      { UINT32_C( 621287273), UINT32_C(4106881037), UINT32_C( 363303258), UINT32_C(3702877976) } },
    { { UINT32_C(3466757558), UINT32_C(3057854086), UINT32_C(2671134073), UINT32_C( 234441250) },
      { UINT32_C(1624980885), UINT32_C( 865377652), UINT32_C(1064588614), UINT32_C(3637916961) },
      { UINT32_C(1084651962), UINT32_C( 418834847) },
       INT8_C(   1),
      { UINT32_C(2802344513), UINT32_C( 811042194), UINT32_C(1800925683), UINT32_C(3608498849) } },
    { { UINT32_C(2001844013), UINT32_C(3993788336), UINT32_C(3613551674), UINT32_C(1444844800) },
      { UINT32_C(1048009993), UINT32_C(2901954355), UINT32_C(3746248950), UINT32_C(1527669806) },
      { UINT32_C(3436404763), UINT32_C(4189773759) },
       INT8_C(   0),
      { UINT32_C(2872502048), UINT32_C( 888723985), UINT32_C(2490347052), UINT32_C(2417911258) } },
  };

  simde_uint32x4_t r, a, b;
  simde_uint32x2_t v;

  for (int i = 0 ; i < 8 ; i++) {
    a = simde_vld1q_u32(test_vec[i].a);
    b = simde_vld1q_u32(test_vec[i].b);
    v = simde_vld1_u32(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmlaq_lane_u32(a, b, v, 0); break;
      case 1: r = simde_vmlaq_lane_u32(a, b, v, 1); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdupq_n_u32(0); break;
    }
    simde_test_arm_neon_assert_equal_u32x4(r, simde_vld1q_u32(test_vec[i].r));
  }

  return 0;
#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_uint32x4_t a = simde_test_arm_neon_random_u32x4();
    simde_uint32x4_t b = simde_test_arm_neon_random_u32x4();
    simde_uint32x2_t v = simde_test_arm_neon_random_u32x2();
    int8_t lane = simde_test_codegen_random_i8() & 1;
    simde_uint32x4_t r;

    SIMDE_CONSTIFY_2_(simde_vmlaq_lane_u32, r, (HEDLEY_UNREACHABLE(), simde_vdupq_n_u32(0)), lane, a, b, v);

    simde_test_arm_neon_write_u32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_u32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u32x2(2, v, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_codegen_write_i8(2, lane, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vmlaq_laneq_f32 (SIMDE_MUNIT_TEST_ARGS) {
  static const struct {
    float a[4];
    float b[4];
    float v[4];
    int8_t lane;
    float r[4];
  } test_vec[] = {
     { {   SIMDE_FLOAT32_C(  8442.05),  SIMDE_FLOAT32_C( -1389.69),  SIMDE_FLOAT32_C( -7758.59),  SIMDE_FLOAT32_C(  9540.76) },
       {   SIMDE_FLOAT32_C(  6942.28),  SIMDE_FLOAT32_C(  8460.25),  SIMDE_FLOAT32_C( -6145.94),  SIMDE_FLOAT32_C( -5237.55) },
       {   SIMDE_FLOAT32_C(     6.77),  SIMDE_FLOAT32_C(   -67.83),  SIMDE_FLOAT32_C(  8178.24),  SIMDE_FLOAT32_C(  8618.63) },
           INT8_C(        0),
       {   SIMDE_FLOAT32_C( 55441.29),  SIMDE_FLOAT32_C( 55886.20),  SIMDE_FLOAT32_C(-49366.60),  SIMDE_FLOAT32_C(-25917.45) } },
     { {   SIMDE_FLOAT32_C(  5329.09),  SIMDE_FLOAT32_C( -8842.70),  SIMDE_FLOAT32_C(  1083.15),  SIMDE_FLOAT32_C(  2779.22) },
       {   SIMDE_FLOAT32_C( -5037.14),  SIMDE_FLOAT32_C( -4543.60),  SIMDE_FLOAT32_C( -1131.52),  SIMDE_FLOAT32_C(  4145.12) },
       {   SIMDE_FLOAT32_C(  4928.14),  SIMDE_FLOAT32_C( -3195.41),  SIMDE_FLOAT32_C(  9422.83),  SIMDE_FLOAT32_C(   529.15) },
           INT8_C(        1),
       {   SIMDE_FLOAT32_C(16101056.62),  SIMDE_FLOAT32_C(14509822.18),  SIMDE_FLOAT32_C(3616753.47),  SIMDE_FLOAT32_C(-13242578.68) } },
     { {   SIMDE_FLOAT32_C(  3210.16),  SIMDE_FLOAT32_C( -8073.64),  SIMDE_FLOAT32_C( -1871.73),  SIMDE_FLOAT32_C(  7766.76) },
       {   SIMDE_FLOAT32_C(  8132.39),  SIMDE_FLOAT32_C( -6406.75),  SIMDE_FLOAT32_C( -1445.99),  SIMDE_FLOAT32_C(  9952.74) },
       {   SIMDE_FLOAT32_C( -5644.48),  SIMDE_FLOAT32_C(   639.33),  SIMDE_FLOAT32_C( -1095.59),  SIMDE_FLOAT32_C(  -658.50) },
           INT8_C(        0),
       {   SIMDE_FLOAT32_C(-45899902.55),  SIMDE_FLOAT32_C(36154698.60),  SIMDE_FLOAT32_C(8159989.91),  SIMDE_FLOAT32_C(-56170275.12) } },
     { {   SIMDE_FLOAT32_C(  9159.77),  SIMDE_FLOAT32_C( -4542.00),  SIMDE_FLOAT32_C(  9445.80),  SIMDE_FLOAT32_C( -2110.99) },
       {   SIMDE_FLOAT32_C( -9801.74),  SIMDE_FLOAT32_C(  1886.98),  SIMDE_FLOAT32_C(    75.78),  SIMDE_FLOAT32_C( -3125.09) },
       {   SIMDE_FLOAT32_C(   637.73),  SIMDE_FLOAT32_C( -6924.14),  SIMDE_FLOAT32_C(  4915.85),  SIMDE_FLOAT32_C( -4312.70) },
           INT8_C(        2),
       {   SIMDE_FLOAT32_C(-48174723.81),  SIMDE_FLOAT32_C(9271568.63),  SIMDE_FLOAT32_C(381968.91),  SIMDE_FLOAT32_C(-15364584.67) } },
     { {   SIMDE_FLOAT32_C(  8169.70),  SIMDE_FLOAT32_C( -7479.28),  SIMDE_FLOAT32_C(  3348.22),  SIMDE_FLOAT32_C(  9587.11) },
       {   SIMDE_FLOAT32_C(  8706.77),  SIMDE_FLOAT32_C(  3214.14),  SIMDE_FLOAT32_C(  4481.19),  SIMDE_FLOAT32_C(  2317.74) },
       {   SIMDE_FLOAT32_C(  6486.86),  SIMDE_FLOAT32_C( -4651.54),  SIMDE_FLOAT32_C( -6489.10),  SIMDE_FLOAT32_C( -2517.83) },
           INT8_C(        3),
       {   SIMDE_FLOAT32_C(-21913997.01),  SIMDE_FLOAT32_C(-8100137.40),  SIMDE_FLOAT32_C(-11279526.40),  SIMDE_FLOAT32_C(-5826088.19) } },
     { {   SIMDE_FLOAT32_C(  3469.51),  SIMDE_FLOAT32_C(  2478.92),  SIMDE_FLOAT32_C(  3545.43),  SIMDE_FLOAT32_C(  7751.36) },
       {   SIMDE_FLOAT32_C( -6649.73),  SIMDE_FLOAT32_C( -7867.38),  SIMDE_FLOAT32_C(   615.31),  SIMDE_FLOAT32_C(  7194.09) },
       {   SIMDE_FLOAT32_C(   -94.57),  SIMDE_FLOAT32_C(  6945.08),  SIMDE_FLOAT32_C( -3326.00),  SIMDE_FLOAT32_C(  9571.16) },
           INT8_C(        1),
       {   SIMDE_FLOAT32_C(-46179437.32),  SIMDE_FLOAT32_C(-54637104.57),  SIMDE_FLOAT32_C(4276922.60),  SIMDE_FLOAT32_C(49971281.94) } },
     { {   SIMDE_FLOAT32_C(  -114.66),  SIMDE_FLOAT32_C(  -857.24),  SIMDE_FLOAT32_C(  5238.98),  SIMDE_FLOAT32_C(  8989.32) },
       {   SIMDE_FLOAT32_C(   414.11),  SIMDE_FLOAT32_C( -4411.42),  SIMDE_FLOAT32_C( -3370.65),  SIMDE_FLOAT32_C(  -285.04) },
       {   SIMDE_FLOAT32_C(  9685.87),  SIMDE_FLOAT32_C( -5631.83),  SIMDE_FLOAT32_C(  6655.15),  SIMDE_FLOAT32_C( -1696.69) },
           INT8_C(        2),
       {   SIMDE_FLOAT32_C(2755849.51),  SIMDE_FLOAT32_C(-29359519.05),  SIMDE_FLOAT32_C(-22426942.37),  SIMDE_FLOAT32_C(-1887994.64) } },
     { {   SIMDE_FLOAT32_C( -7938.21),  SIMDE_FLOAT32_C(  4723.86),  SIMDE_FLOAT32_C(  4094.72),  SIMDE_FLOAT32_C(  8367.37) },
       {   SIMDE_FLOAT32_C( -2636.63),  SIMDE_FLOAT32_C( -3127.64),  SIMDE_FLOAT32_C(  8864.91),  SIMDE_FLOAT32_C(  2740.01) },
       {   SIMDE_FLOAT32_C( -8938.37),  SIMDE_FLOAT32_C( -1798.64),  SIMDE_FLOAT32_C( -8001.07),  SIMDE_FLOAT32_C(  9705.11) },
           INT8_C(        2),
       {   SIMDE_FLOAT32_C(21087922.98),  SIMDE_FLOAT32_C(25029190.43),  SIMDE_FLOAT32_C(-70924670.73),  SIMDE_FLOAT32_C(-21914644.44) } },
  };

  simde_float32x4_t r, a, b, v;

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    a = simde_vld1q_f32(test_vec[i].a);
    b = simde_vld1q_f32(test_vec[i].b);
    v = simde_vld1q_f32(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmlaq_laneq_f32(a, b, v, 0); break;
      case 1: r = simde_vmlaq_laneq_f32(a, b, v, 1); break;
      case 2: r = simde_vmlaq_laneq_f32(a, b, v, 2); break;
      case 3: r = simde_vmlaq_laneq_f32(a, b, v, 3); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdupq_n_f32(0); break;
    }
    simde_test_arm_neon_assert_equal_f32x4(r, simde_vld1q_f32(test_vec[i].r), 1);
  }

  return 0;
}

static int
test_simde_vmlaq_laneq_s16 (SIMDE_MUNIT_TEST_ARGS) {
  static const struct {
    int16_t a[8];
    int16_t b[8];
    int16_t v[8];
    int8_t lane;
    int16_t r[8];
  } test_vec[] = {
     { {   INT16_C(   27), -INT16_C(   14),  INT16_C(   80), -INT16_C(   68),
          -INT16_C(   60),  INT16_C(   13), -INT16_C(   19),  INT16_C(   58) },
       {  -INT16_C(   62),  INT16_C(   96),  INT16_C(   88), -INT16_C(   24),
          -INT16_C(   69),  INT16_C(   66), -INT16_C(   11), -INT16_C(   43) },
       {  -INT16_C(    5), -INT16_C(    2), -INT16_C(    9), -INT16_C(   77),
          -INT16_C(   68),  INT16_C(   65), -INT16_C(   81),  INT16_C(   39) },
           INT8_C(    4),
       {   INT16_C( 4243), -INT16_C( 6542), -INT16_C( 5904),  INT16_C( 1564),
           INT16_C( 4632), -INT16_C( 4475),  INT16_C(  729),  INT16_C( 2982) } },
     { {   INT16_C(   86), -INT16_C(   77), -INT16_C(   26), -INT16_C(   24),
           INT16_C(   84), -INT16_C(   17), -INT16_C(   35),  INT16_C(   34) },
       {  -INT16_C(   72), -INT16_C(   12), -INT16_C(   48),  INT16_C(   50),
           INT16_C(   17),  INT16_C(   41), -INT16_C(   78), -INT16_C(   73) },
       {   INT16_C(   42),  INT16_C(   24),  INT16_C(   40), -INT16_C(   89),
          -INT16_C(   28),  INT16_C(   60), -INT16_C(    2),  INT16_C(   52) },
           INT8_C(    2),
       {  -INT16_C( 2794), -INT16_C(  557), -INT16_C( 1946),  INT16_C( 1976),
           INT16_C(  764),  INT16_C( 1623), -INT16_C( 3155), -INT16_C( 2886) } },
     { {   INT16_C(   70),  INT16_C(    1),  INT16_C(   23), -INT16_C(   44),
          -INT16_C(    5),  INT16_C(   65), -INT16_C(   27),  INT16_C(   23) },
       {   INT16_C(   92), -INT16_C(   88), -INT16_C(   41), -INT16_C(   89),
          -INT16_C(   37),  INT16_C(   63), -INT16_C(   44), -INT16_C(   77) },
       {  -INT16_C(   74),  INT16_C(   29), -INT16_C(   58), -INT16_C(   38),
          -INT16_C(   71),  INT16_C(   98),  INT16_C(   26),  INT16_C(    3) },
           INT8_C(    5),
       {   INT16_C( 9086), -INT16_C( 8623), -INT16_C( 3995), -INT16_C( 8766),
          -INT16_C( 3631),  INT16_C( 6239), -INT16_C( 4339), -INT16_C( 7523) } },
     { {  -INT16_C(    1), -INT16_C(   60), -INT16_C(   20),  INT16_C(   28),
           INT16_C(   36), -INT16_C(   98),  INT16_C(   95),  INT16_C(   19) },
       {  -INT16_C(   43), -INT16_C(   59),  INT16_C(   41), -INT16_C(   12),
          -INT16_C(   73), -INT16_C(   34),  INT16_C(   76), -INT16_C(   31) },
       {   INT16_C(    0), -INT16_C(   92), -INT16_C(   26), -INT16_C(   76),
          -INT16_C(   39),  INT16_C(   62),  INT16_C(   29),  INT16_C(   22) },
           INT8_C(    2),
       {   INT16_C( 1117),  INT16_C( 1474), -INT16_C( 1086),  INT16_C(  340),
           INT16_C( 1934),  INT16_C(  786), -INT16_C( 1881),  INT16_C(  825) } },
     { {   INT16_C(   76),  INT16_C(   78), -INT16_C(   52),  INT16_C(   59),
           INT16_C(   75), -INT16_C(   12),  INT16_C(   26), -INT16_C(   48) },
       {  -INT16_C(    7),  INT16_C(   21),  INT16_C(    1), -INT16_C(    9),
           INT16_C(   71),  INT16_C(   57), -INT16_C(   36), -INT16_C(   12) },
       {  -INT16_C(   23),  INT16_C(    6), -INT16_C(   38),  INT16_C(   79),
          -INT16_C(   62), -INT16_C(   58), -INT16_C(    3), -INT16_C(    5) },
           INT8_C(    7),
       {   INT16_C(  111), -INT16_C(   27), -INT16_C(   57),  INT16_C(  104),
          -INT16_C(  280), -INT16_C(  297),  INT16_C(  206),  INT16_C(   12) } },
     { {   INT16_C(    3), -INT16_C(   47), -INT16_C(   89),  INT16_C(   58),
          -INT16_C(   22),  INT16_C(   26), -INT16_C(   49),  INT16_C(    6) },
       {   INT16_C(   72),  INT16_C(   78), -INT16_C(   54),  INT16_C(    0),
           INT16_C(   12), -INT16_C(   22), -INT16_C(   87),  INT16_C(    4) },
       {  -INT16_C(   89), -INT16_C(   84),  INT16_C(   65),  INT16_C(   20),
          -INT16_C(   27), -INT16_C(   19),  INT16_C(   47), -INT16_C(   12) },
           INT8_C(    6),
       {   INT16_C( 3387),  INT16_C( 3619), -INT16_C( 2627),  INT16_C(   58),
           INT16_C(  542), -INT16_C( 1008), -INT16_C( 4138),  INT16_C(  194) } },
     { {   INT16_C(   97), -INT16_C(    3), -INT16_C(   86),  INT16_C(   62),
          -INT16_C(    5), -INT16_C(   50), -INT16_C(   91),  INT16_C(   81) },
       {   INT16_C(   47),  INT16_C(   49),  INT16_C(    4),  INT16_C(    4),
          -INT16_C(   40),  INT16_C(   55), -INT16_C(   34),  INT16_C(   85) },
       {   INT16_C(   56),  INT16_C(   35), -INT16_C(   72),  INT16_C(   64),
           INT16_C(   52),  INT16_C(   80),  INT16_C(   12),  INT16_C(   48) },
           INT8_C(    4),
       {   INT16_C( 2541),  INT16_C( 2545),  INT16_C(  122),  INT16_C(  270),
          -INT16_C( 2085),  INT16_C( 2810), -INT16_C( 1859),  INT16_C( 4501) } },
     { {   INT16_C(   10),  INT16_C(   42), -INT16_C(   53), -INT16_C(   66),
           INT16_C(   95), -INT16_C(   34), -INT16_C(   15), -INT16_C(   84) },
       {  -INT16_C(   19),  INT16_C(   87), -INT16_C(   77), -INT16_C(   65),
          -INT16_C(   80),  INT16_C(    4),  INT16_C(   74),  INT16_C(   63) },
       {  -INT16_C(   70), -INT16_C(   67),  INT16_C(   63), -INT16_C(   62),
          -INT16_C(   20),  INT16_C(   44),  INT16_C(   15),  INT16_C(   79) },
           INT8_C(    7),
       {  -INT16_C( 1491),  INT16_C( 6915), -INT16_C( 6136), -INT16_C( 5201),
          -INT16_C( 6225),  INT16_C(  282),  INT16_C( 5831),  INT16_C( 4893) } },
  };

  simde_int16x8_t r, a, b, v;

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    a = simde_vld1q_s16(test_vec[i].a);
    b = simde_vld1q_s16(test_vec[i].b);
    v = simde_vld1q_s16(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmlaq_laneq_s16(a, b, v, 0); break;
      case 1: r = simde_vmlaq_laneq_s16(a, b, v, 1); break;
      case 2: r = simde_vmlaq_laneq_s16(a, b, v, 2); break;
      case 3: r = simde_vmlaq_laneq_s16(a, b, v, 3); break;
      case 4: r = simde_vmlaq_laneq_s16(a, b, v, 4); break;
      case 5: r = simde_vmlaq_laneq_s16(a, b, v, 5); break;
      case 6: r = simde_vmlaq_laneq_s16(a, b, v, 6); break;
      case 7: r = simde_vmlaq_laneq_s16(a, b, v, 7); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdupq_n_s16(0); break;
    }
    simde_test_arm_neon_assert_equal_i16x8(r, simde_vld1q_s16(test_vec[i].r));
  }

  return 0;
}

static int
test_simde_vmlaq_laneq_s32 (SIMDE_MUNIT_TEST_ARGS) {
  static const struct {
    int32_t a[4];
    int32_t b[4];
    int32_t v[4];
    int8_t lane;
    int32_t r[4];
  } test_vec[] = {
     { {  -INT32_C(    6136),  INT32_C(    1298), -INT32_C(    4397), -INT32_C(    2313) },
       {  -INT32_C(    2459),  INT32_C(    5639),  INT32_C(     944),  INT32_C(    7600) },
       {  -INT32_C(    5378),  INT32_C(    8852), -INT32_C(    9600),  INT32_C(    9935) },
           INT8_C(       1),
       {  -INT32_C(21773204),  INT32_C(49917726),  INT32_C( 8351891),  INT32_C(67272887) } },
     { {  -INT32_C(    9404),  INT32_C(     567), -INT32_C(    6346), -INT32_C(    3906) },
       {   INT32_C(    6125),  INT32_C(    4990),  INT32_C(    5704),  INT32_C(    3511) },
       {   INT32_C(    7787),  INT32_C(    7196),  INT32_C(    1911),  INT32_C(    9234) },
           INT8_C(       3),
       {   INT32_C(56548846),  INT32_C(46078227),  INT32_C(52664390),  INT32_C(32416668) } },
     { {   INT32_C(     124),  INT32_C(    1315), -INT32_C(     398), -INT32_C(    8335) },
       {   INT32_C(    4856), -INT32_C(     218),  INT32_C(    9898),  INT32_C(    5450) },
       {   INT32_C(    3364), -INT32_C(    8289), -INT32_C(    5348), -INT32_C(    4660) },
           INT8_C(       2),
       {  -INT32_C(25969764),  INT32_C( 1167179), -INT32_C(52934902), -INT32_C(29154935) } },
     { {  -INT32_C(    7741), -INT32_C(    5638), -INT32_C(    1216), -INT32_C(    4399) },
       {  -INT32_C(    7004), -INT32_C(    7954), -INT32_C(    5842), -INT32_C(    4473) },
       {   INT32_C(    4738), -INT32_C(    4541),  INT32_C(    3190),  INT32_C(    5887) },
           INT8_C(       3),
       {  -INT32_C(41240289), -INT32_C(46830836), -INT32_C(34393070), -INT32_C(26336950) } },
     { {  -INT32_C(    4228),  INT32_C(    9643), -INT32_C(    6720),  INT32_C(    2725) },
       {   INT32_C(    8556), -INT32_C(    5884), -INT32_C(    3313),  INT32_C(    3496) },
       {  -INT32_C(    9409), -INT32_C(    9792),  INT32_C(     284), -INT32_C(    1614) },
           INT8_C(       0),
       {  -INT32_C(80507632),  INT32_C(55372199),  INT32_C(31165297), -INT32_C(32891139) } },
     { {   INT32_C(    1341), -INT32_C(     617), -INT32_C(    8745), -INT32_C(    4860) },
       {   INT32_C(    4084), -INT32_C(    5463), -INT32_C(    1722), -INT32_C(    9232) },
       {   INT32_C(    5013), -INT32_C(    9923),  INT32_C(    4345), -INT32_C(    7885) },
           INT8_C(       2),
       {   INT32_C(17746321), -INT32_C(23737352), -INT32_C( 7490835), -INT32_C(40117900) } },
     { {  -INT32_C(    4259), -INT32_C(    3605), -INT32_C(    5933), -INT32_C(    2164) },
       {   INT32_C(    4526),  INT32_C(    5427), -INT32_C(    8312),  INT32_C(    6713) },
       {   INT32_C(     108),  INT32_C(    2835),  INT32_C(    3642), -INT32_C(    9015) },
           INT8_C(       3),
       {  -INT32_C(40806149), -INT32_C(48928010),  INT32_C(74926747), -INT32_C(60519859) } },
     { {   INT32_C(    8687),  INT32_C(    3316),  INT32_C(    4039),  INT32_C(    4869) },
       {   INT32_C(    1050),  INT32_C(    4513), -INT32_C(    1617), -INT32_C(    4470) },
       {   INT32_C(    1370), -INT32_C(    1457), -INT32_C(    7408), -INT32_C(    7365) },
           INT8_C(       3),
       {  -INT32_C( 7724563), -INT32_C(33234929),  INT32_C(11913244),  INT32_C(32926419) } },
  };

  simde_int32x4_t r, a, b, v;

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    a = simde_vld1q_s32(test_vec[i].a);
    b = simde_vld1q_s32(test_vec[i].b);
    v = simde_vld1q_s32(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmlaq_laneq_s32(a, b, v, 0); break;
      case 1: r = simde_vmlaq_laneq_s32(a, b, v, 1); break;
      case 2: r = simde_vmlaq_laneq_s32(a, b, v, 2); break;
      case 3: r = simde_vmlaq_laneq_s32(a, b, v, 3); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdupq_n_s32(0); break;
    }
    simde_test_arm_neon_assert_equal_i32x4(r, simde_vld1q_s32(test_vec[i].r));
  }

  return 0;
}

static int
test_simde_vmlaq_laneq_u16 (SIMDE_MUNIT_TEST_ARGS) {
  static const struct {
    uint16_t a[8];
    uint16_t b[8];
    uint16_t v[8];
    int8_t lane;
    uint16_t r[8];
  } test_vec[] = {
     { {   UINT16_C(    34),  UINT16_C(    55),  UINT16_C(    53),  UINT16_C(    65),
           UINT16_C(     8),  UINT16_C(   110),  UINT16_C(   158),  UINT16_C(   151) },
       {   UINT16_C(   173),  UINT16_C(    56),  UINT16_C(   100),  UINT16_C(   187),
           UINT16_C(    53),  UINT16_C(   174),  UINT16_C(   100),  UINT16_C(   199) },
       {   UINT16_C(   143),  UINT16_C(   106),  UINT16_C(    85),  UINT16_C(   161),
           UINT16_C(   154),  UINT16_C(   119),  UINT16_C(    79),  UINT16_C(    80) },
           INT8_C(     1),
       {   UINT16_C( 18372),  UINT16_C(  5991),  UINT16_C( 10653),  UINT16_C( 19887),
           UINT16_C(  5626),  UINT16_C( 18554),  UINT16_C( 10758),  UINT16_C( 21245) } },
     { {   UINT16_C(    60),  UINT16_C(   195),  UINT16_C(    16),  UINT16_C(    37),
           UINT16_C(   149),  UINT16_C(   107),  UINT16_C(   153),  UINT16_C(   113) },
       {   UINT16_C(   164),  UINT16_C(   111),  UINT16_C(   177),  UINT16_C(    35),
           UINT16_C(    15),  UINT16_C(    27),  UINT16_C(   192),  UINT16_C(    69) },
       {   UINT16_C(    35),  UINT16_C(   136),  UINT16_C(    42),  UINT16_C(    13),
           UINT16_C(   121),  UINT16_C(   151),  UINT16_C(   152),  UINT16_C(   185) },
           INT8_C(     2),
       {   UINT16_C(  6948),  UINT16_C(  4857),  UINT16_C(  7450),  UINT16_C(  1507),
           UINT16_C(   779),  UINT16_C(  1241),  UINT16_C(  8217),  UINT16_C(  3011) } },
     { {   UINT16_C(    76),  UINT16_C(   110),  UINT16_C(   183),  UINT16_C(   176),
           UINT16_C(    10),  UINT16_C(    39),  UINT16_C(   127),  UINT16_C(    64) },
       {   UINT16_C(    71),  UINT16_C(   190),  UINT16_C(    18),  UINT16_C(   165),
           UINT16_C(   189),  UINT16_C(   156),  UINT16_C(   101),  UINT16_C(   164) },
       {   UINT16_C(    19),  UINT16_C(    88),  UINT16_C(   194),  UINT16_C(    90),
           UINT16_C(   177),  UINT16_C(    34),  UINT16_C(   165),  UINT16_C(    63) },
           INT8_C(     3),
       {   UINT16_C(  6466),  UINT16_C( 17210),  UINT16_C(  1803),  UINT16_C( 15026),
           UINT16_C( 17020),  UINT16_C( 14079),  UINT16_C(  9217),  UINT16_C( 14824) } },
     { {   UINT16_C(   192),  UINT16_C(     2),  UINT16_C(   111),  UINT16_C(   133),
           UINT16_C(     8),  UINT16_C(    69),  UINT16_C(   147),  UINT16_C(    41) },
       {   UINT16_C(     7),  UINT16_C(   183),  UINT16_C(   162),  UINT16_C(    21),
           UINT16_C(    61),  UINT16_C(   125),  UINT16_C(    33),  UINT16_C(   127) },
       {   UINT16_C(    29),  UINT16_C(   195),  UINT16_C(    86),  UINT16_C(     0),
           UINT16_C(    59),  UINT16_C(    89),  UINT16_C(    99),  UINT16_C(     9) },
           INT8_C(     0),
       {   UINT16_C(   395),  UINT16_C(  5309),  UINT16_C(  4809),  UINT16_C(   742),
           UINT16_C(  1777),  UINT16_C(  3694),  UINT16_C(  1104),  UINT16_C(  3724) } },
     { {   UINT16_C(    95),  UINT16_C(    15),  UINT16_C(     0),  UINT16_C(   138),
           UINT16_C(   174),  UINT16_C(   104),  UINT16_C(   186),  UINT16_C(   105) },
       {   UINT16_C(    66),  UINT16_C(   149),  UINT16_C(    50),  UINT16_C(    79),
           UINT16_C(   177),  UINT16_C(   169),  UINT16_C(    40),  UINT16_C(   125) },
       {   UINT16_C(    67),  UINT16_C(   103),  UINT16_C(    80),  UINT16_C(   199),
           UINT16_C(   172),  UINT16_C(    94),  UINT16_C(    82),  UINT16_C(   142) },
           INT8_C(     1),
       {   UINT16_C(  6893),  UINT16_C( 15362),  UINT16_C(  5150),  UINT16_C(  8275),
           UINT16_C( 18405),  UINT16_C( 17511),  UINT16_C(  4306),  UINT16_C( 12980) } },
     { {   UINT16_C(   123),  UINT16_C(   187),  UINT16_C(    45),  UINT16_C(   103),
           UINT16_C(    65),  UINT16_C(   124),  UINT16_C(    98),  UINT16_C(    75) },
       {   UINT16_C(   169),  UINT16_C(   102),  UINT16_C(   113),  UINT16_C(   164),
           UINT16_C(    59),  UINT16_C(   171),  UINT16_C(    72),  UINT16_C(    38) },
       {   UINT16_C(   174),  UINT16_C(   143),  UINT16_C(   134),  UINT16_C(    24),
           UINT16_C(    81),  UINT16_C(   150),  UINT16_C(   186),  UINT16_C(   119) },
           INT8_C(     0),
       {   UINT16_C( 29529),  UINT16_C( 17935),  UINT16_C( 19707),  UINT16_C( 28639),
           UINT16_C( 10331),  UINT16_C( 29878),  UINT16_C( 12626),  UINT16_C(  6687) } },
     { {   UINT16_C(   185),  UINT16_C(    79),  UINT16_C(   109),  UINT16_C(    44),
           UINT16_C(   147),  UINT16_C(     9),  UINT16_C(    91),  UINT16_C(    66) },
       {   UINT16_C(    28),  UINT16_C(   160),  UINT16_C(    34),  UINT16_C(    60),
           UINT16_C(   182),  UINT16_C(     5),  UINT16_C(    85),  UINT16_C(   164) },
       {   UINT16_C(   132),  UINT16_C(   144),  UINT16_C(    59),  UINT16_C(    73),
           UINT16_C(     4),  UINT16_C(    50),  UINT16_C(   128),  UINT16_C(   152) },
           INT8_C(     0),
       {   UINT16_C(  3881),  UINT16_C( 21199),  UINT16_C(  4597),  UINT16_C(  7964),
           UINT16_C( 24171),  UINT16_C(   669),  UINT16_C( 11311),  UINT16_C( 21714) } },
     { {   UINT16_C(    46),  UINT16_C(    41),  UINT16_C(   184),  UINT16_C(   128),
           UINT16_C(    76),  UINT16_C(   168),  UINT16_C(   192),  UINT16_C(   166) },
       {   UINT16_C(    10),  UINT16_C(   186),  UINT16_C(    84),  UINT16_C(    64),
           UINT16_C(   186),  UINT16_C(    53),  UINT16_C(    70),  UINT16_C(   100) },
       {   UINT16_C(    89),  UINT16_C(    87),  UINT16_C(    23),  UINT16_C(    67),
           UINT16_C(    27),  UINT16_C(   149),  UINT16_C(   191),  UINT16_C(   113) },
           INT8_C(     0),
       {   UINT16_C(   936),  UINT16_C( 16595),  UINT16_C(  7660),  UINT16_C(  5824),
           UINT16_C( 16630),  UINT16_C(  4885),  UINT16_C(  6422),  UINT16_C(  9066) } },
  };

  simde_uint16x8_t r, a, b, v;

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    a = simde_vld1q_u16(test_vec[i].a);
    b = simde_vld1q_u16(test_vec[i].b);
    v = simde_vld1q_u16(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmlaq_laneq_u16(a, b, v, 0); break;
      case 1: r = simde_vmlaq_laneq_u16(a, b, v, 1); break;
      case 2: r = simde_vmlaq_laneq_u16(a, b, v, 2); break;
      case 3: r = simde_vmlaq_laneq_u16(a, b, v, 3); break;
      case 4: r = simde_vmlaq_laneq_u16(a, b, v, 4); break;
      case 5: r = simde_vmlaq_laneq_u16(a, b, v, 5); break;
      case 6: r = simde_vmlaq_laneq_u16(a, b, v, 6); break;
      case 7: r = simde_vmlaq_laneq_u16(a, b, v, 7); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdupq_n_u16(0); break;
    }
    simde_test_arm_neon_assert_equal_u16x8(r, simde_vld1q_u16(test_vec[i].r));
  }

  return 0;
}

static int
test_simde_vmlaq_laneq_u32 (SIMDE_MUNIT_TEST_ARGS) {
  static const struct {
    uint32_t a[4];
    uint32_t b[4];
    uint32_t v[4];
    int8_t lane;
    uint32_t r[4];
  } test_vec[] = {
     { {   UINT32_C(     17966),  UINT32_C(      9668),  UINT32_C(      3899),  UINT32_C(      1740) },
       {   UINT32_C(      9644),  UINT32_C(      8215),  UINT32_C(     11766),  UINT32_C(      5182) },
       {   UINT32_C(      8131),  UINT32_C(      6197),  UINT32_C(     18142),  UINT32_C(      5160) },
           INT8_C(         1),
       {   UINT32_C(  59781834),  UINT32_C(  50918023),  UINT32_C(  72917801),  UINT32_C(  32114594) } },
     { {   UINT32_C(     14022),  UINT32_C(      5194),  UINT32_C(     11502),  UINT32_C(      5635) },
       {   UINT32_C(       877),  UINT32_C(     10991),  UINT32_C(      5463),  UINT32_C(       659) },
       {   UINT32_C(      5178),  UINT32_C(      1188),  UINT32_C(      9464),  UINT32_C(      1436) },
           INT8_C(         1),
       {   UINT32_C(   1055898),  UINT32_C(  13062502),  UINT32_C(   6501546),  UINT32_C(    788527) } },
     { {   UINT32_C(     18302),  UINT32_C(      8019),  UINT32_C(      7939),  UINT32_C(     15138) },
       {   UINT32_C(     13816),  UINT32_C(      3641),  UINT32_C(     16263),  UINT32_C(      7916) },
       {   UINT32_C(      3757),  UINT32_C(     13705),  UINT32_C(     13542),  UINT32_C(      4003) },
           INT8_C(         0),
       {   UINT32_C(  51925014),  UINT32_C(  13687256),  UINT32_C(  61108030),  UINT32_C(  29755550) } },
     { {   UINT32_C(     19118),  UINT32_C(      5278),  UINT32_C(     12843),  UINT32_C(      9921) },
       {   UINT32_C(     14624),  UINT32_C(      9994),  UINT32_C(      2130),  UINT32_C(      2980) },
       {   UINT32_C(     11531),  UINT32_C(      2465),  UINT32_C(      7359),  UINT32_C(     14489) },
           INT8_C(         2),
       {   UINT32_C( 107637134),  UINT32_C(  73551124),  UINT32_C(  15687513),  UINT32_C(  21939741) } },
     { {   UINT32_C(      6232),  UINT32_C(      4537),  UINT32_C(      1814),  UINT32_C(      3971) },
       {   UINT32_C(     12752),  UINT32_C(     14106),  UINT32_C(     17693),  UINT32_C(      1938) },
       {   UINT32_C(        44),  UINT32_C(       178),  UINT32_C(      1791),  UINT32_C(     12350) },
           INT8_C(         3),
       {   UINT32_C( 157493432),  UINT32_C( 174213637),  UINT32_C( 218510364),  UINT32_C(  23938271) } },
     { {   UINT32_C(      8462),  UINT32_C(      4455),  UINT32_C(     11958),  UINT32_C(     11866) },
       {   UINT32_C(      5206),  UINT32_C(     11522),  UINT32_C(      9962),  UINT32_C(     11203) },
       {   UINT32_C(      9268),  UINT32_C(     17392),  UINT32_C(     13804),  UINT32_C(     10799) },
           INT8_C(         2),
       {   UINT32_C(  71872086),  UINT32_C( 159054143),  UINT32_C( 137527406),  UINT32_C( 154658078) } },
     { {   UINT32_C(     15528),  UINT32_C(      7021),  UINT32_C(     16870),  UINT32_C(     13050) },
       {   UINT32_C(     10135),  UINT32_C(     12640),  UINT32_C(     13287),  UINT32_C(     19824) },
       {   UINT32_C(     19598),  UINT32_C(      1381),  UINT32_C(      6284),  UINT32_C(      6134) },
           INT8_C(         3),
       {   UINT32_C(  62183618),  UINT32_C(  77540781),  UINT32_C(  81519328),  UINT32_C( 121613466) } },
     { {   UINT32_C(     10824),  UINT32_C(     10467),  UINT32_C(     17351),  UINT32_C(      9295) },
       {   UINT32_C(     19858),  UINT32_C(     16339),  UINT32_C(     10310),  UINT32_C(      9300) },
       {   UINT32_C(     13406),  UINT32_C(      3924),  UINT32_C(     16158),  UINT32_C(     10460) },
           INT8_C(         2),
       {   UINT32_C( 320876388),  UINT32_C( 264016029),  UINT32_C( 166606331),  UINT32_C( 150278695) } },
  };

  simde_uint32x4_t r, a, b, v;

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    a = simde_vld1q_u32(test_vec[i].a);
    b = simde_vld1q_u32(test_vec[i].b);
    v = simde_vld1q_u32(test_vec[i].v);
    switch(test_vec[i].lane) {
      case 0: r = simde_vmlaq_laneq_u32(a, b, v, 0); break;
      case 1: r = simde_vmlaq_laneq_u32(a, b, v, 1); break;
      case 2: r = simde_vmlaq_laneq_u32(a, b, v, 2); break;
      case 3: r = simde_vmlaq_laneq_u32(a, b, v, 3); break;
      default: HEDLEY_UNREACHABLE(); r = simde_vdupq_n_u32(0); break;
    }
    simde_test_arm_neon_assert_equal_u32x4(r, simde_vld1q_u32(test_vec[i].r));
  }

  return 0;
}

SIMDE_TEST_FUNC_LIST_BEGIN
SIMDE_TEST_FUNC_LIST_ENTRY(vmla_lane_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmla_lane_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vmla_lane_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmla_lane_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vmla_lane_u32)

SIMDE_TEST_FUNC_LIST_ENTRY(vmla_laneq_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmla_laneq_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vmla_laneq_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmla_laneq_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vmla_laneq_u32)

SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_lane_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_lane_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_lane_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_lane_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_lane_u32)

SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_laneq_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_laneq_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_laneq_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_laneq_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vmlaq_laneq_u32)
SIMDE_TEST_FUNC_LIST_END

#include "test-neon-footer.h"