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

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

static int
test_simde_vpadd_f16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_float16_t a[4];
    simde_float16_t b[4];
    simde_float16_t r[4];
  } test_vec[] = {
    { { SIMDE_FLOAT16_VALUE(   -49.28), SIMDE_FLOAT16_VALUE(  -109.00), SIMDE_FLOAT16_VALUE(  -626.50), SIMDE_FLOAT16_VALUE(  -567.00) },
      { SIMDE_FLOAT16_VALUE(  -178.88), SIMDE_FLOAT16_VALUE(    10.22), SIMDE_FLOAT16_VALUE(   976.50), SIMDE_FLOAT16_VALUE(   -31.19) },
      { SIMDE_FLOAT16_VALUE(-158.28), SIMDE_FLOAT16_VALUE(-1193.50), SIMDE_FLOAT16_VALUE(-168.66), SIMDE_FLOAT16_VALUE(945.31) } },
    { { SIMDE_FLOAT16_VALUE(  -226.00), SIMDE_FLOAT16_VALUE(    89.44), SIMDE_FLOAT16_VALUE(  -520.50), SIMDE_FLOAT16_VALUE(  -200.50) },
      { SIMDE_FLOAT16_VALUE(  -252.38), SIMDE_FLOAT16_VALUE(  -439.75), SIMDE_FLOAT16_VALUE(  -407.50), SIMDE_FLOAT16_VALUE(  -450.75) },
      { SIMDE_FLOAT16_VALUE(  -136.50), SIMDE_FLOAT16_VALUE(  -721.00), SIMDE_FLOAT16_VALUE(  -692.00), SIMDE_FLOAT16_VALUE(  -858.00) } },
    { { SIMDE_FLOAT16_VALUE(  -833.00), SIMDE_FLOAT16_VALUE(  -157.12), SIMDE_FLOAT16_VALUE(  -714.00), SIMDE_FLOAT16_VALUE(   972.50) },
      { SIMDE_FLOAT16_VALUE(   428.50), SIMDE_FLOAT16_VALUE(   298.75), SIMDE_FLOAT16_VALUE(   871.50), SIMDE_FLOAT16_VALUE(  -919.50) },
      { SIMDE_FLOAT16_VALUE(  -990.00), SIMDE_FLOAT16_VALUE(   258.50), SIMDE_FLOAT16_VALUE(   727.00), SIMDE_FLOAT16_VALUE(   -48.00) } },
    { { SIMDE_FLOAT16_VALUE(   488.00), SIMDE_FLOAT16_VALUE(   129.00), SIMDE_FLOAT16_VALUE(  -858.50), SIMDE_FLOAT16_VALUE(   112.56) },
      { SIMDE_FLOAT16_VALUE(    58.66), SIMDE_FLOAT16_VALUE(  -133.88), SIMDE_FLOAT16_VALUE(   879.50), SIMDE_FLOAT16_VALUE(  -920.50) },
      { SIMDE_FLOAT16_VALUE(   617.00), SIMDE_FLOAT16_VALUE(  -746.00), SIMDE_FLOAT16_VALUE(   -75.25), SIMDE_FLOAT16_VALUE(   -41.00) } },
    { { SIMDE_FLOAT16_VALUE(    32.59), SIMDE_FLOAT16_VALUE(  -750.50), SIMDE_FLOAT16_VALUE(  -510.75), SIMDE_FLOAT16_VALUE(   239.50) },
      { SIMDE_FLOAT16_VALUE(  -487.50), SIMDE_FLOAT16_VALUE(  -177.50), SIMDE_FLOAT16_VALUE(   853.50), SIMDE_FLOAT16_VALUE(    23.77) },
      { SIMDE_FLOAT16_VALUE(  -718.00), SIMDE_FLOAT16_VALUE(  -271.25), SIMDE_FLOAT16_VALUE(  -665.00), SIMDE_FLOAT16_VALUE(   877.50) } },
    { { SIMDE_FLOAT16_VALUE(  -537.50), SIMDE_FLOAT16_VALUE(  -992.00), SIMDE_FLOAT16_VALUE(  -964.50), SIMDE_FLOAT16_VALUE(   707.00) },
      { SIMDE_FLOAT16_VALUE(  -592.00), SIMDE_FLOAT16_VALUE(   386.00), SIMDE_FLOAT16_VALUE(   305.50), SIMDE_FLOAT16_VALUE(   496.00) },
      { SIMDE_FLOAT16_VALUE( -1530.00), SIMDE_FLOAT16_VALUE(  -257.50), SIMDE_FLOAT16_VALUE(  -206.00), SIMDE_FLOAT16_VALUE(   801.50) } },
    { { SIMDE_FLOAT16_VALUE(  -180.50), SIMDE_FLOAT16_VALUE(  -413.75), SIMDE_FLOAT16_VALUE(  -555.50), SIMDE_FLOAT16_VALUE(  -758.50) },
      { SIMDE_FLOAT16_VALUE(   375.50), SIMDE_FLOAT16_VALUE(  -972.00), SIMDE_FLOAT16_VALUE(   948.50), SIMDE_FLOAT16_VALUE(   619.00) },
      { SIMDE_FLOAT16_VALUE(  -594.00), SIMDE_FLOAT16_VALUE( -1314.00), SIMDE_FLOAT16_VALUE(  -596.50), SIMDE_FLOAT16_VALUE(  1568.00) } }
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float16x4_t a = simde_vld1_f16(test_vec[i].a);
    simde_float16x4_t b = simde_vld1_f16(test_vec[i].b);
    simde_float16x4_t r = simde_vpadd_f16(a, b);

    simde_test_arm_neon_assert_equal_f16x4(r, simde_vld1_f16(test_vec[i].r), 1);
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_float16x4_t a = simde_test_arm_neon_random_f16x4(-100.0f, 100.0f);
    simde_float16x4_t b = simde_test_arm_neon_random_f16x4(-100.0f, 100.0f);
    simde_float16x4_t r = simde_vpadd_f16(a, b);

    simde_test_arm_neon_write_f16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpadd_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_float32 a[2];
    simde_float32 b[2];
    simde_float32 r[2];
  } test_vec[] = {
    { { SIMDE_FLOAT32_C(   364.07), SIMDE_FLOAT32_C(  -805.98) },
      { SIMDE_FLOAT32_C(   541.55), SIMDE_FLOAT32_C(  -507.67) },
      { SIMDE_FLOAT32_C(  -441.91), SIMDE_FLOAT32_C(    33.88) } },
    { { SIMDE_FLOAT32_C(  -210.05), SIMDE_FLOAT32_C(   950.23) },
      { SIMDE_FLOAT32_C(   -73.21), SIMDE_FLOAT32_C(  -858.69) },
      { SIMDE_FLOAT32_C(   740.18), SIMDE_FLOAT32_C(  -931.90) } },
    { { SIMDE_FLOAT32_C(   289.47), SIMDE_FLOAT32_C(   222.50) },
      { SIMDE_FLOAT32_C(  -617.39), SIMDE_FLOAT32_C(    38.06) },
      { SIMDE_FLOAT32_C(   511.98), SIMDE_FLOAT32_C(  -579.33) } },
    { { SIMDE_FLOAT32_C(  -385.12), SIMDE_FLOAT32_C(  -947.12) },
      { SIMDE_FLOAT32_C(  -383.15), SIMDE_FLOAT32_C(  -390.83) },
      { SIMDE_FLOAT32_C( -1332.24), SIMDE_FLOAT32_C(  -773.98) } },
    { { SIMDE_FLOAT32_C(   787.35), SIMDE_FLOAT32_C(   150.74) },
      { SIMDE_FLOAT32_C(   -44.15), SIMDE_FLOAT32_C(   -31.92) },
      { SIMDE_FLOAT32_C(   938.08), SIMDE_FLOAT32_C(   -76.07) } },
    { { SIMDE_FLOAT32_C(   608.96), SIMDE_FLOAT32_C(  -994.50) },
      { SIMDE_FLOAT32_C(  -198.21), SIMDE_FLOAT32_C(  -284.71) },
      { SIMDE_FLOAT32_C(  -385.53), SIMDE_FLOAT32_C(  -482.92) } },
    { { SIMDE_FLOAT32_C(   116.75), SIMDE_FLOAT32_C(   296.49) },
      { SIMDE_FLOAT32_C(  -579.72), SIMDE_FLOAT32_C(  -346.53) },
      { SIMDE_FLOAT32_C(   413.24), SIMDE_FLOAT32_C(  -926.24) } },
    { { SIMDE_FLOAT32_C(  -405.05), SIMDE_FLOAT32_C(   579.35) },
      { SIMDE_FLOAT32_C(   172.94), SIMDE_FLOAT32_C(   959.02) },
      { SIMDE_FLOAT32_C(   174.30), SIMDE_FLOAT32_C(  1131.96) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float32x2_t a = simde_vld1_f32(test_vec[i].a);
    simde_float32x2_t b = simde_vld1_f32(test_vec[i].b);
    simde_float32x2_t r = simde_vpadd_f32(a, b);

    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 r = simde_vpadd_f32(a, b);

    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, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpadd_s8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int8_t a[8];
    int8_t b[8];
    int8_t r[8];
  } test_vec[] = {
    { { -INT8_C(  42), -INT8_C(  32), -INT8_C(  64),  INT8_C( 117),  INT8_C(  61),  INT8_C(  45), -INT8_C(  26),  INT8_C(  96) },
      { -INT8_C(  49),  INT8_C(  76), -INT8_C(  77), -INT8_C(  78),  INT8_C(  47), -INT8_C( 116),  INT8_C(  78), -INT8_C( 108) },
      { -INT8_C(  74),  INT8_C(  53),  INT8_C( 106),  INT8_C(  70),  INT8_C(  27),  INT8_C( 101), -INT8_C(  69), -INT8_C(  30) } },
    { {  INT8_C(   3), -INT8_C(  93), -INT8_C(  22),  INT8_C(  89),  INT8_C(  69),  INT8_C( 121), -INT8_C(  64),  INT8_C( 110) },
      { -INT8_C(  10), -INT8_C(  63), -INT8_C( 118),  INT8_C(  71),  INT8_C(  28), -INT8_C(  42), -INT8_C(  14), -INT8_C(  14) },
      { -INT8_C(  90),  INT8_C(  67), -INT8_C(  66),  INT8_C(  46), -INT8_C(  73), -INT8_C(  47), -INT8_C(  14), -INT8_C(  28) } },
    { { -INT8_C(  74), -INT8_C(  78),  INT8_C( 103), -INT8_C(  13), -INT8_C(  33),  INT8_C(  77),  INT8_C(  83), -INT8_C(  82) },
      { -INT8_C( 103),  INT8_C(   6),  INT8_C(  96), -INT8_C(  56), -INT8_C( 110), -INT8_C(  82),  INT8_C(  92), -INT8_C( 106) },
      {  INT8_C( 104),  INT8_C(  90),  INT8_C(  44),  INT8_C(   1), -INT8_C(  97),  INT8_C(  40),  INT8_C(  64), -INT8_C(  14) } },
    { {  INT8_C(  82),  INT8_C(  71), -INT8_C(  17), -INT8_C( 105), -INT8_C(  64), -INT8_C(  80),  INT8_C(   5), -INT8_C(  74) },
      {  INT8_C( 113), -INT8_C( 112), -INT8_C(   2), -INT8_C( 115),  INT8_C( 102), -INT8_C(  16),      INT8_MAX,  INT8_C(  28) },
      { -INT8_C( 103), -INT8_C( 122),  INT8_C( 112), -INT8_C(  69),  INT8_C(   1), -INT8_C( 117),  INT8_C(  86), -INT8_C( 101) } },
    { { -INT8_C(  94), -INT8_C(  26),  INT8_C(  15), -INT8_C( 127),  INT8_C(  51),  INT8_C(  98),  INT8_C(  47), -INT8_C(  52) },
      {  INT8_C( 104), -INT8_C( 112), -INT8_C( 108), -INT8_C(   6),  INT8_C(  62), -INT8_C(  15), -INT8_C( 112), -INT8_C( 112) },
      { -INT8_C( 120), -INT8_C( 112), -INT8_C( 107), -INT8_C(   5), -INT8_C(   8), -INT8_C( 114),  INT8_C(  47),  INT8_C(  32) } },
    { {  INT8_C(  56),      INT8_MIN,  INT8_C(  39), -INT8_C(   8),  INT8_C(  48),  INT8_C(  45), -INT8_C(  81), -INT8_C(  95) },
      { -INT8_C(  67), -INT8_C(  83),  INT8_C(  47),  INT8_C(  35), -INT8_C(  99), -INT8_C(  82),  INT8_C(  63),  INT8_C(  63) },
      { -INT8_C(  72),  INT8_C(  31),  INT8_C(  93),  INT8_C(  80),  INT8_C( 106),  INT8_C(  82),  INT8_C(  75),  INT8_C( 126) } },
    { { -INT8_C( 107),  INT8_C(  78), -INT8_C(  64), -INT8_C(  56), -INT8_C(  80), -INT8_C(  17), -INT8_C( 107),  INT8_C(  24) },
      {      INT8_MAX,  INT8_C(  41),  INT8_C(  18), -INT8_C(  66),  INT8_C(  26), -INT8_C(  93),  INT8_C(  78),  INT8_C(  82) },
      { -INT8_C(  29), -INT8_C( 120), -INT8_C(  97), -INT8_C(  83), -INT8_C(  88), -INT8_C(  48), -INT8_C(  67), -INT8_C(  96) } },
    { {  INT8_C(  35),  INT8_C( 118),  INT8_C(  75),  INT8_C(  83), -INT8_C(  93), -INT8_C(   6), -INT8_C(  12),  INT8_C(  96) },
      { -INT8_C(  89),  INT8_C(  35), -INT8_C( 125),  INT8_C(  68), -INT8_C(  46), -INT8_C(  62), -INT8_C( 125),  INT8_C( 103) },
      { -INT8_C( 103), -INT8_C(  98), -INT8_C(  99),  INT8_C(  84), -INT8_C(  54), -INT8_C(  57), -INT8_C( 108), -INT8_C(  22) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_int8x8_t a = simde_vld1_s8(test_vec[i].a);
    simde_int8x8_t b = simde_vld1_s8(test_vec[i].b);
    simde_int8x8_t r = simde_vpadd_s8(a, b);

    simde_test_arm_neon_assert_equal_i8x8(r, simde_vld1_s8(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_int8x8_t a = simde_test_arm_neon_random_i8x8();
    simde_int8x8_t b = simde_test_arm_neon_random_i8x8();
    simde_int8x8_t r = simde_vpadd_s8(a, b);

    simde_test_arm_neon_write_i8x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_i8x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i8x8(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpadd_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int16_t a[4];
    int16_t b[4];
    int16_t r[4];
  } test_vec[] = {
    { {  INT16_C( 12301), -INT16_C( 30280),  INT16_C(  1981), -INT16_C(  8183) },
      {  INT16_C(  2606),  INT16_C(   142), -INT16_C(  1330), -INT16_C(  1866) },
      { -INT16_C( 17979), -INT16_C(  6202),  INT16_C(  2748), -INT16_C(  3196) } },
    { {  INT16_C( 18011), -INT16_C(  2555), -INT16_C( 26024),  INT16_C(  8774) },
      {  INT16_C(  7111),  INT16_C( 25679),  INT16_C( 19345), -INT16_C( 25081) },
      {  INT16_C( 15456), -INT16_C( 17250), -INT16_C( 32746), -INT16_C(  5736) } },
    { { -INT16_C( 16516),  INT16_C( 14631),  INT16_C( 12486), -INT16_C(  3047) },
      { -INT16_C( 22470),  INT16_C(  2548), -INT16_C( 21598), -INT16_C(   511) },
      { -INT16_C(  1885),  INT16_C(  9439), -INT16_C( 19922), -INT16_C( 22109) } },
    { {  INT16_C(  2033),  INT16_C( 18932),  INT16_C( 15009),  INT16_C( 26987) },
      { -INT16_C( 17834), -INT16_C(  6195), -INT16_C( 11259), -INT16_C( 32379) },
      {  INT16_C( 20965), -INT16_C( 23540), -INT16_C( 24029),  INT16_C( 21898) } },
    { { -INT16_C( 21101),  INT16_C( 23226), -INT16_C( 11043),  INT16_C(  6222) },
      {  INT16_C( 17276),  INT16_C(  7713),  INT16_C(  8942), -INT16_C(  8420) },
      {  INT16_C(  2125), -INT16_C(  4821),  INT16_C( 24989),  INT16_C(   522) } },
    { {  INT16_C(  4137), -INT16_C( 13528), -INT16_C( 27829), -INT16_C( 24268) },
      {  INT16_C(   333),  INT16_C( 21128),  INT16_C(  3541),  INT16_C( 26836) },
      { -INT16_C(  9391),  INT16_C( 13439),  INT16_C( 21461),  INT16_C( 30377) } },
    { { -INT16_C( 28998), -INT16_C( 26430),  INT16_C(  4450), -INT16_C(  8528) },
      { -INT16_C( 11948),  INT16_C( 17149),  INT16_C(  6643),  INT16_C(  7457) },
      {  INT16_C( 10108), -INT16_C(  4078),  INT16_C(  5201),  INT16_C( 14100) } },
    { {  INT16_C( 18730),  INT16_C( 30184),  INT16_C(  7388),  INT16_C( 10518) },
      { -INT16_C( 25059), -INT16_C(  3461),  INT16_C( 20395),  INT16_C( 26202) },
      { -INT16_C( 16622),  INT16_C( 17906), -INT16_C( 28520), -INT16_C( 18939) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_int16x4_t a = simde_vld1_s16(test_vec[i].a);
    simde_int16x4_t b = simde_vld1_s16(test_vec[i].b);
    simde_int16x4_t r = simde_vpadd_s16(a, b);

    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 r = simde_vpadd_s16(a, b);

    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, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpadd_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int32_t a[2];
    int32_t b[2];
    int32_t r[2];
  } test_vec[] = {
    { {  INT32_C(  1699479832), -INT32_C(   412031930) },
      { -INT32_C(     2482844), -INT32_C(    51361615) },
      {  INT32_C(  1287447902), -INT32_C(    53844459) } },
    { { -INT32_C(   538447692),  INT32_C(  1324757574) },
      { -INT32_C(   268960219),  INT32_C(  1571947844) },
      {  INT32_C(   786309882),  INT32_C(  1302987625) } },
    { {  INT32_C(  1287847686),  INT32_C(  1211380451) },
      {  INT32_C(    21433936),  INT32_C(   201144407) },
      { -INT32_C(  1795739159),  INT32_C(   222578343) } },
    { {  INT32_C(  1860887592),  INT32_C(  1002234134) },
      {  INT32_C(   590001119), -INT32_C(  1082073671) },
      { -INT32_C(  1431845570), -INT32_C(   492072552) } },
    { { -INT32_C(  1089715236), -INT32_C(   989380491) },
      { -INT32_C(  1513730226), -INT32_C(  1347370105) },
      { -INT32_C(  2079095727),  INT32_C(  1433866965) } },
    { { -INT32_C(  1105355864),  INT32_C(  1543166332) },
      {  INT32_C(  1182672013), -INT32_C(   586809599) },
      {  INT32_C(   437810468),  INT32_C(   595862414) } },
    { { -INT32_C(  1214443198), -INT32_C(  1602378671) },
      {  INT32_C(  2051359731), -INT32_C(  1356204537) },
      {  INT32_C(  1478145427),  INT32_C(   695155194) } },
    { {  INT32_C(   225265297), -INT32_C(  1385666784) },
      { -INT32_C(  1913395572),  INT32_C(   661387493) },
      { -INT32_C(  1160401487), -INT32_C(  1252008079) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_int32x2_t a = simde_vld1_s32(test_vec[i].a);
    simde_int32x2_t b = simde_vld1_s32(test_vec[i].b);
    simde_int32x2_t r = simde_vpadd_s32(a, b);

    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 r = simde_vpadd_s32(a, b);

    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, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpadd_u8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint8_t a[16];
    uint8_t b[16];
    uint8_t r[16];
  } test_vec[] = {
    { { UINT8_C(243), UINT8_C( 66), UINT8_C( 33), UINT8_C( 59), UINT8_C(231), UINT8_C(109), UINT8_C(213), UINT8_C(120) },
      { UINT8_C(224), UINT8_C(152), UINT8_C( 89), UINT8_C(119), UINT8_C(114), UINT8_C( 12), UINT8_C(242), UINT8_C(158) },
      { UINT8_C( 53), UINT8_C( 92), UINT8_C( 84), UINT8_C( 77), UINT8_C(120), UINT8_C(208), UINT8_C(126), UINT8_C(144) } },
    { { UINT8_C( 36), UINT8_C( 52), UINT8_C(243), UINT8_C(110), UINT8_C(177), UINT8_C(236), UINT8_C(243), UINT8_C(140) },
      { UINT8_C(169), UINT8_C(251), UINT8_C(254), UINT8_C(243), UINT8_C(133), UINT8_C( 91), UINT8_C( 89), UINT8_C(120) },
      { UINT8_C( 88), UINT8_C( 97), UINT8_C(157), UINT8_C(127), UINT8_C(164), UINT8_C(241), UINT8_C(224), UINT8_C(209) } },
    { { UINT8_C(157), UINT8_C(122), UINT8_C(179), UINT8_C(133), UINT8_C(232), UINT8_C(136), UINT8_C(253), UINT8_C(200) },
      { UINT8_C( 32), UINT8_C( 87), UINT8_C( 63), UINT8_C(146), UINT8_C( 99), UINT8_C( 50), UINT8_C( 48), UINT8_C(135) },
      { UINT8_C( 23), UINT8_C( 56), UINT8_C(112), UINT8_C(197), UINT8_C(119), UINT8_C(209), UINT8_C(149), UINT8_C(183) } },
    { { UINT8_C(102), UINT8_C( 35), UINT8_C(245), UINT8_C( 23), UINT8_C( 16), UINT8_C(232), UINT8_C(163), UINT8_C(185) },
      { UINT8_C(227), UINT8_C(162), UINT8_C(173), UINT8_C(104), UINT8_C(253), UINT8_C(  6), UINT8_C(224), UINT8_C(154) },
      { UINT8_C(137), UINT8_C( 12), UINT8_C(248), UINT8_C( 92), UINT8_C(133), UINT8_C( 21), UINT8_C(  3), UINT8_C(122) } },
    { { UINT8_C(128), UINT8_C(147), UINT8_C( 31), UINT8_C(104), UINT8_C( 27), UINT8_C( 29), UINT8_C( 49), UINT8_C( 60) },
      { UINT8_C(116), UINT8_C(112), UINT8_C(206), UINT8_C(215), UINT8_C(162),    UINT8_MAX, UINT8_C( 94), UINT8_C(  8) },
      { UINT8_C( 19), UINT8_C(135), UINT8_C( 56), UINT8_C(109), UINT8_C(228), UINT8_C(165), UINT8_C(161), UINT8_C(102) } },
    { { UINT8_C( 34), UINT8_C( 83), UINT8_C( 31), UINT8_C( 50), UINT8_C( 60), UINT8_C(195), UINT8_C(236), UINT8_C( 31) },
      { UINT8_C(101), UINT8_C(153), UINT8_C(136), UINT8_C( 98), UINT8_C(159), UINT8_C(104), UINT8_C(252), UINT8_C( 31) },
      { UINT8_C(117), UINT8_C( 81),    UINT8_MAX, UINT8_C( 11), UINT8_C(254), UINT8_C(234), UINT8_C(  7), UINT8_C( 27) } },
    { { UINT8_C(252), UINT8_C( 28), UINT8_C(136), UINT8_C( 23), UINT8_C( 57), UINT8_C(185), UINT8_C( 83), UINT8_C(173) },
      { UINT8_C( 41), UINT8_C( 34), UINT8_C(132), UINT8_C(204), UINT8_C( 33), UINT8_C(226), UINT8_C(212), UINT8_C( 67) },
      { UINT8_C( 24), UINT8_C(159), UINT8_C(242), UINT8_C(  0), UINT8_C( 75), UINT8_C( 80), UINT8_C(  3), UINT8_C( 23) } },
    { { UINT8_C( 53), UINT8_C(244), UINT8_C(118), UINT8_C(113), UINT8_C(183), UINT8_C( 98), UINT8_C(145), UINT8_C( 28) },
      { UINT8_C(251), UINT8_C( 25), UINT8_C(126), UINT8_C(154), UINT8_C(129), UINT8_C(122), UINT8_C(185), UINT8_C(125) },
      { UINT8_C( 41), UINT8_C(231), UINT8_C( 25), UINT8_C(173), UINT8_C( 20), UINT8_C( 24), UINT8_C(251), UINT8_C( 54) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_uint8x8_t a = simde_vld1_u8(test_vec[i].a);
    simde_uint8x8_t b = simde_vld1_u8(test_vec[i].b);
    simde_uint8x8_t r = simde_vpadd_u8(a, b);

    simde_test_arm_neon_assert_equal_u8x8(r, simde_vld1_u8(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_uint8x16_t a = simde_test_arm_neon_random_u8x16();
    simde_uint8x16_t b = simde_test_arm_neon_random_u8x16();
    simde_uint8x16_t r = simde_vpadd_u8(a, b);

    simde_test_arm_neon_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_u8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpadd_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint16_t a[4];
    uint16_t b[4];
    uint16_t r[4];
  } test_vec[] = {
    { { UINT16_C(21226), UINT16_C(34183), UINT16_C(22510), UINT16_C(15812) },
      { UINT16_C( 9063), UINT16_C(27641), UINT16_C(59469), UINT16_C(64332) },
      { UINT16_C(55409), UINT16_C(38322), UINT16_C(36704), UINT16_C(58265) } },
    { { UINT16_C(31569), UINT16_C(54281), UINT16_C(16377), UINT16_C( 5882) },
      { UINT16_C(15455), UINT16_C(11970), UINT16_C(43165), UINT16_C(34802) },
      { UINT16_C(20314), UINT16_C(22259), UINT16_C(27425), UINT16_C(12431) } },
    { { UINT16_C(31227), UINT16_C(59660), UINT16_C(53457), UINT16_C(14374) },
      { UINT16_C( 8435), UINT16_C(16548), UINT16_C(61448), UINT16_C(22843) },
      { UINT16_C(25351), UINT16_C( 2295), UINT16_C(24983), UINT16_C(18755) } },
    { { UINT16_C(17515), UINT16_C(25901), UINT16_C(10116), UINT16_C(58235) },
      { UINT16_C(15715), UINT16_C(   17), UINT16_C(  998), UINT16_C(57735) },
      { UINT16_C(43416), UINT16_C( 2815), UINT16_C(15732), UINT16_C(58733) } },
    { { UINT16_C(37757), UINT16_C(20170), UINT16_C(61796), UINT16_C(22406) },
      { UINT16_C(10769), UINT16_C( 6552), UINT16_C(54042), UINT16_C(34418) },
      { UINT16_C(57927), UINT16_C(18666), UINT16_C(17321), UINT16_C(22924) } },
    { { UINT16_C(40728), UINT16_C(40171), UINT16_C(26310), UINT16_C(10623) },
      { UINT16_C(37027), UINT16_C(35114), UINT16_C(45460), UINT16_C( 4458) },
      { UINT16_C(15363), UINT16_C(36933), UINT16_C( 6605), UINT16_C(49918) } },
    { { UINT16_C(13637), UINT16_C(43359), UINT16_C(58662), UINT16_C(14080) },
      { UINT16_C(38928), UINT16_C(10832), UINT16_C(49772), UINT16_C(33968) },
      { UINT16_C(56996), UINT16_C( 7206), UINT16_C(49760), UINT16_C(18204) } },
    { { UINT16_C(39777), UINT16_C(10016), UINT16_C(40705), UINT16_C(42320) },
      { UINT16_C(31279), UINT16_C(49966), UINT16_C(39212), UINT16_C(29140) },
      { UINT16_C(49793), UINT16_C(17489), UINT16_C(15709), UINT16_C( 2816) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_uint16x4_t a = simde_vld1_u16(test_vec[i].a);
    simde_uint16x4_t b = simde_vld1_u16(test_vec[i].b);
    simde_uint16x4_t r = simde_vpadd_u16(a, b);
    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 r = simde_vpadd_u16(a, b);

    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, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpadd_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint32_t a[2];
    uint32_t b[2];
    uint32_t r[2];
  } test_vec[] = {
    { { UINT32_C(3709109624), UINT32_C(4040697517) },
      { UINT32_C( 609191128), UINT32_C(2173632669) },
      { UINT32_C(3454839845), UINT32_C(2782823797) } },
    { { UINT32_C( 887164280), UINT32_C(2941533126) },
      { UINT32_C( 856155564), UINT32_C(2881345843) },
      { UINT32_C(3828697406), UINT32_C(3737501407) } },
    { { UINT32_C( 193516126), UINT32_C(3506135544) },
      { UINT32_C(2197113829), UINT32_C(3288564811) },
      { UINT32_C(3699651670), UINT32_C(1190711344) } },
    { { UINT32_C(1492706449), UINT32_C(3406253087) },
      { UINT32_C(1694371377), UINT32_C(1158724839) },
      { UINT32_C( 603992240), UINT32_C(2853096216) } },
    { { UINT32_C(2253494414), UINT32_C(3730263289) },
      { UINT32_C(3814739095), UINT32_C(1638360016) },
      { UINT32_C(1688790407), UINT32_C(1158131815) } },
    { { UINT32_C(1723440967), UINT32_C( 473088491) },
      { UINT32_C(3078631631), UINT32_C(2063372524) },
      { UINT32_C(2196529458), UINT32_C( 847036859) } },
    { { UINT32_C( 570510633), UINT32_C( 822171802) },
      { UINT32_C(1947492772), UINT32_C( 215333829) },
      { UINT32_C(1392682435), UINT32_C(2162826601) } },
    { { UINT32_C(1165201242), UINT32_C( 526493008) },
      { UINT32_C(3268862677), UINT32_C(2604454770) },
      { UINT32_C(1691694250), UINT32_C(1578350151) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_uint32x2_t a = simde_vld1_u32(test_vec[i].a);
    simde_uint32x2_t b = simde_vld1_u32(test_vec[i].b);
    simde_uint32x2_t r = simde_vpadd_u32(a, b);
    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 r = simde_vpadd_u32(a, b);

    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, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpaddq_f16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_float16 a[8];
    simde_float16 b[8];
    simde_float16 r[8];
  } test_vec[] = {
    { {  SIMDE_FLOAT16_VALUE(     4.517),  SIMDE_FLOAT16_VALUE(     7.762),  SIMDE_FLOAT16_VALUE(    11.032),  SIMDE_FLOAT16_VALUE(     7.890),
         SIMDE_FLOAT16_VALUE(    14.791),  SIMDE_FLOAT16_VALUE(     4.657),  SIMDE_FLOAT16_VALUE(    10.785),  SIMDE_FLOAT16_VALUE(     8.311) },
      {  SIMDE_FLOAT16_VALUE(   -10.653),  SIMDE_FLOAT16_VALUE(     2.967),  SIMDE_FLOAT16_VALUE(   -11.261),  SIMDE_FLOAT16_VALUE(    11.597),
         SIMDE_FLOAT16_VALUE(   -14.411),  SIMDE_FLOAT16_VALUE(    -1.069),  SIMDE_FLOAT16_VALUE(   -12.095),  SIMDE_FLOAT16_VALUE(    -8.498) },
      {  SIMDE_FLOAT16_VALUE(    12.279),  SIMDE_FLOAT16_VALUE(    18.922),  SIMDE_FLOAT16_VALUE(    19.448),  SIMDE_FLOAT16_VALUE(    19.096),
         SIMDE_FLOAT16_VALUE(    -7.686),  SIMDE_FLOAT16_VALUE(     0.336),  SIMDE_FLOAT16_VALUE(   -15.480),  SIMDE_FLOAT16_VALUE(   -20.593) } },
    { {  SIMDE_FLOAT16_VALUE(     9.117),  SIMDE_FLOAT16_VALUE(   -11.361),  SIMDE_FLOAT16_VALUE(     6.088),  SIMDE_FLOAT16_VALUE(    -6.660),
         SIMDE_FLOAT16_VALUE(     9.922),  SIMDE_FLOAT16_VALUE(     1.435),  SIMDE_FLOAT16_VALUE(    -5.778),  SIMDE_FLOAT16_VALUE(    -6.871) },
      {  SIMDE_FLOAT16_VALUE(   -10.081),  SIMDE_FLOAT16_VALUE(     5.191),  SIMDE_FLOAT16_VALUE(   -10.231),  SIMDE_FLOAT16_VALUE(    13.438),
         SIMDE_FLOAT16_VALUE(    12.632),  SIMDE_FLOAT16_VALUE(   -10.540),  SIMDE_FLOAT16_VALUE(    -1.602),  SIMDE_FLOAT16_VALUE(     4.886) },
      {  SIMDE_FLOAT16_VALUE(    -2.244),  SIMDE_FLOAT16_VALUE(    -0.572),  SIMDE_FLOAT16_VALUE(    11.357),  SIMDE_FLOAT16_VALUE(   -12.649),
         SIMDE_FLOAT16_VALUE(    -4.890),  SIMDE_FLOAT16_VALUE(     3.207),  SIMDE_FLOAT16_VALUE(     2.092),  SIMDE_FLOAT16_VALUE(     3.284) } },
    { {  SIMDE_FLOAT16_VALUE(    -5.241),  SIMDE_FLOAT16_VALUE(    10.357),  SIMDE_FLOAT16_VALUE(    12.266),  SIMDE_FLOAT16_VALUE(     1.479),
         SIMDE_FLOAT16_VALUE(    13.141),  SIMDE_FLOAT16_VALUE(    -0.792),  SIMDE_FLOAT16_VALUE(     2.378),  SIMDE_FLOAT16_VALUE(     4.368) },
      {  SIMDE_FLOAT16_VALUE(    -7.648),  SIMDE_FLOAT16_VALUE(     6.779),  SIMDE_FLOAT16_VALUE(     3.813),  SIMDE_FLOAT16_VALUE(    -2.521),
         SIMDE_FLOAT16_VALUE(    13.688),  SIMDE_FLOAT16_VALUE(    -2.971),  SIMDE_FLOAT16_VALUE(    13.412),  SIMDE_FLOAT16_VALUE(    10.076) },
      {  SIMDE_FLOAT16_VALUE(     5.116),  SIMDE_FLOAT16_VALUE(    13.745),  SIMDE_FLOAT16_VALUE(    12.349),  SIMDE_FLOAT16_VALUE(     6.746),
         SIMDE_FLOAT16_VALUE(    -0.869),  SIMDE_FLOAT16_VALUE(     1.292),  SIMDE_FLOAT16_VALUE(    10.717),  SIMDE_FLOAT16_VALUE(    23.488) } },
    { {  SIMDE_FLOAT16_VALUE(     8.807),  SIMDE_FLOAT16_VALUE(    12.204),  SIMDE_FLOAT16_VALUE(    -2.012),  SIMDE_FLOAT16_VALUE(     4.510),
         SIMDE_FLOAT16_VALUE(    -6.403),  SIMDE_FLOAT16_VALUE(     0.297),  SIMDE_FLOAT16_VALUE(     5.211),  SIMDE_FLOAT16_VALUE(   -13.505) },
      {  SIMDE_FLOAT16_VALUE(     3.754),  SIMDE_FLOAT16_VALUE(   -13.306),  SIMDE_FLOAT16_VALUE(    -8.695),  SIMDE_FLOAT16_VALUE(    -0.671),
         SIMDE_FLOAT16_VALUE(    -2.528),  SIMDE_FLOAT16_VALUE(     8.668),  SIMDE_FLOAT16_VALUE(     9.983),  SIMDE_FLOAT16_VALUE(    12.867) },
      {  SIMDE_FLOAT16_VALUE(    21.011),  SIMDE_FLOAT16_VALUE(     2.498),  SIMDE_FLOAT16_VALUE(    -6.106),  SIMDE_FLOAT16_VALUE(    -8.294),
         SIMDE_FLOAT16_VALUE(    -9.552),  SIMDE_FLOAT16_VALUE(    -9.366),  SIMDE_FLOAT16_VALUE(     6.140),  SIMDE_FLOAT16_VALUE(    22.850) } },
    { {  SIMDE_FLOAT16_VALUE(    -2.065),  SIMDE_FLOAT16_VALUE(    -0.269),  SIMDE_FLOAT16_VALUE(   -10.355),  SIMDE_FLOAT16_VALUE(     0.897),
         SIMDE_FLOAT16_VALUE(     7.554),  SIMDE_FLOAT16_VALUE(   -12.463),  SIMDE_FLOAT16_VALUE(     2.427),  SIMDE_FLOAT16_VALUE(     1.260) },
      {  SIMDE_FLOAT16_VALUE(    14.216),  SIMDE_FLOAT16_VALUE(    -7.207),  SIMDE_FLOAT16_VALUE(    -6.253),  SIMDE_FLOAT16_VALUE(     5.138),
         SIMDE_FLOAT16_VALUE(     2.588),  SIMDE_FLOAT16_VALUE(   -12.986),  SIMDE_FLOAT16_VALUE(    10.042),  SIMDE_FLOAT16_VALUE(     2.705) },
      {  SIMDE_FLOAT16_VALUE(    -2.334),  SIMDE_FLOAT16_VALUE(    -9.458),  SIMDE_FLOAT16_VALUE(    -4.909),  SIMDE_FLOAT16_VALUE(     3.687),
         SIMDE_FLOAT16_VALUE(     7.009),  SIMDE_FLOAT16_VALUE(    -1.115),  SIMDE_FLOAT16_VALUE(   -10.398),  SIMDE_FLOAT16_VALUE(    12.747) } },
    { {  SIMDE_FLOAT16_VALUE(    -1.567),  SIMDE_FLOAT16_VALUE(    -8.622),  SIMDE_FLOAT16_VALUE(   -13.166),  SIMDE_FLOAT16_VALUE(    -9.757),
         SIMDE_FLOAT16_VALUE(    -3.865),  SIMDE_FLOAT16_VALUE(    -0.755),  SIMDE_FLOAT16_VALUE(   -12.178),  SIMDE_FLOAT16_VALUE(    -8.354) },
      {  SIMDE_FLOAT16_VALUE(   -11.621),  SIMDE_FLOAT16_VALUE(     0.853),  SIMDE_FLOAT16_VALUE(    -6.108),  SIMDE_FLOAT16_VALUE(    12.675),
         SIMDE_FLOAT16_VALUE(    11.730),  SIMDE_FLOAT16_VALUE(    -4.661),  SIMDE_FLOAT16_VALUE(    -6.564),  SIMDE_FLOAT16_VALUE(   -14.729) },
      {  SIMDE_FLOAT16_VALUE(   -10.189),  SIMDE_FLOAT16_VALUE(   -22.923),  SIMDE_FLOAT16_VALUE(    -4.620),  SIMDE_FLOAT16_VALUE(   -20.532),
         SIMDE_FLOAT16_VALUE(   -10.768),  SIMDE_FLOAT16_VALUE(     6.567),  SIMDE_FLOAT16_VALUE(     7.069),  SIMDE_FLOAT16_VALUE(   -21.293) } },
    { {  SIMDE_FLOAT16_VALUE(    -1.335),  SIMDE_FLOAT16_VALUE(   -13.783),  SIMDE_FLOAT16_VALUE(    -1.457),  SIMDE_FLOAT16_VALUE(   -14.303),
         SIMDE_FLOAT16_VALUE(    11.517),  SIMDE_FLOAT16_VALUE(     9.676),  SIMDE_FLOAT16_VALUE(    13.285),  SIMDE_FLOAT16_VALUE(   -13.303) },
      {  SIMDE_FLOAT16_VALUE(   -11.891),  SIMDE_FLOAT16_VALUE(    -6.653),  SIMDE_FLOAT16_VALUE(     1.167),  SIMDE_FLOAT16_VALUE(   -11.185),
         SIMDE_FLOAT16_VALUE(    -1.890),  SIMDE_FLOAT16_VALUE(     2.194),  SIMDE_FLOAT16_VALUE(    -2.764),  SIMDE_FLOAT16_VALUE(     8.339) },
      {  SIMDE_FLOAT16_VALUE(   -15.118),  SIMDE_FLOAT16_VALUE(   -15.760),  SIMDE_FLOAT16_VALUE(    21.193),  SIMDE_FLOAT16_VALUE(    -0.018),
         SIMDE_FLOAT16_VALUE(   -18.544),  SIMDE_FLOAT16_VALUE(   -10.018),  SIMDE_FLOAT16_VALUE(     0.304),  SIMDE_FLOAT16_VALUE(     5.575) } },
    { {  SIMDE_FLOAT16_VALUE(     5.421),  SIMDE_FLOAT16_VALUE(    -3.674),  SIMDE_FLOAT16_VALUE(     6.240),  SIMDE_FLOAT16_VALUE(     5.002),
         SIMDE_FLOAT16_VALUE(    14.105),  SIMDE_FLOAT16_VALUE(    -9.096),  SIMDE_FLOAT16_VALUE(     3.433),  SIMDE_FLOAT16_VALUE(   -14.067) },
      {  SIMDE_FLOAT16_VALUE(    10.973),  SIMDE_FLOAT16_VALUE(    11.168),  SIMDE_FLOAT16_VALUE(   -14.657),  SIMDE_FLOAT16_VALUE(     2.140),
         SIMDE_FLOAT16_VALUE(    -9.101),  SIMDE_FLOAT16_VALUE(   -14.379),  SIMDE_FLOAT16_VALUE(    -9.564),  SIMDE_FLOAT16_VALUE(     7.497) },
      {  SIMDE_FLOAT16_VALUE(     1.747),  SIMDE_FLOAT16_VALUE(    11.242),  SIMDE_FLOAT16_VALUE(     5.009),  SIMDE_FLOAT16_VALUE(   -10.634),
         SIMDE_FLOAT16_VALUE(    22.141),  SIMDE_FLOAT16_VALUE(   -12.517),  SIMDE_FLOAT16_VALUE(   -23.480),  SIMDE_FLOAT16_VALUE(    -2.067) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float16x8_t a = simde_vld1q_f16(test_vec[i].a);
    simde_float16x8_t b = simde_vld1q_f16(test_vec[i].b);
    simde_float16x8_t r = simde_vpaddq_f16(a, b);

    simde_test_arm_neon_assert_equal_f16x8(r, simde_vld1q_f16(test_vec[i].r), 1);
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_float16x8_t a = simde_test_arm_neon_random_f16x8(-100.0f, 100.0f);
    simde_float16x8_t b = simde_test_arm_neon_random_f16x8(-100.0f, 100.0f);
    simde_float16x8_t r = simde_vpaddq_f16(a, b);

    simde_test_arm_neon_write_f16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpaddq_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_float32 a[4];
    simde_float32 b[4];
    simde_float32 r[4];
  } test_vec[] = {
    { { SIMDE_FLOAT32_C(   288.42), SIMDE_FLOAT32_C(   -21.02), SIMDE_FLOAT32_C(  -974.95), SIMDE_FLOAT32_C(  -192.40) },
      { SIMDE_FLOAT32_C(  -577.52), SIMDE_FLOAT32_C(   442.97), SIMDE_FLOAT32_C(  -440.24), SIMDE_FLOAT32_C(   115.18) },
      { SIMDE_FLOAT32_C(   267.40), SIMDE_FLOAT32_C( -1167.35), SIMDE_FLOAT32_C(  -134.54), SIMDE_FLOAT32_C(  -325.05) } },
    { { SIMDE_FLOAT32_C(     7.02), SIMDE_FLOAT32_C(  -617.77), SIMDE_FLOAT32_C(   477.82), SIMDE_FLOAT32_C(   908.71) },
      { SIMDE_FLOAT32_C(  -987.94), SIMDE_FLOAT32_C(  -606.22), SIMDE_FLOAT32_C(  -272.93), SIMDE_FLOAT32_C(  -275.00) },
      { SIMDE_FLOAT32_C(  -610.74), SIMDE_FLOAT32_C(  1386.53), SIMDE_FLOAT32_C( -1594.16), SIMDE_FLOAT32_C(  -547.94) } },
    { { SIMDE_FLOAT32_C(   -93.25), SIMDE_FLOAT32_C(   892.97), SIMDE_FLOAT32_C(  -408.68), SIMDE_FLOAT32_C(   -20.37) },
      { SIMDE_FLOAT32_C(  -622.02), SIMDE_FLOAT32_C(  -239.70), SIMDE_FLOAT32_C(   793.71), SIMDE_FLOAT32_C(  -983.86) },
      { SIMDE_FLOAT32_C(   799.72), SIMDE_FLOAT32_C(  -429.06), SIMDE_FLOAT32_C(  -861.72), SIMDE_FLOAT32_C(  -190.15) } },
    { { SIMDE_FLOAT32_C(  -339.96), SIMDE_FLOAT32_C(   415.18), SIMDE_FLOAT32_C(   196.04), SIMDE_FLOAT32_C(  -159.70) },
      { SIMDE_FLOAT32_C(   128.82), SIMDE_FLOAT32_C(   843.81), SIMDE_FLOAT32_C(   217.86), SIMDE_FLOAT32_C(  -582.76) },
      { SIMDE_FLOAT32_C(    75.21), SIMDE_FLOAT32_C(    36.34), SIMDE_FLOAT32_C(   972.63), SIMDE_FLOAT32_C(  -364.90) } },
    { { SIMDE_FLOAT32_C(  -177.21), SIMDE_FLOAT32_C(   242.90), SIMDE_FLOAT32_C(   224.84), SIMDE_FLOAT32_C(   245.28) },
      { SIMDE_FLOAT32_C(  -314.13), SIMDE_FLOAT32_C(   784.61), SIMDE_FLOAT32_C(  -639.54), SIMDE_FLOAT32_C(   692.90) },
      { SIMDE_FLOAT32_C(    65.70), SIMDE_FLOAT32_C(   470.12), SIMDE_FLOAT32_C(   470.48), SIMDE_FLOAT32_C(    53.36) } },
    { { SIMDE_FLOAT32_C(  -833.16), SIMDE_FLOAT32_C(   838.28), SIMDE_FLOAT32_C(   601.61), SIMDE_FLOAT32_C(  -821.10) },
      { SIMDE_FLOAT32_C(  -767.94), SIMDE_FLOAT32_C(  -671.32), SIMDE_FLOAT32_C(   -96.10), SIMDE_FLOAT32_C(   138.81) },
      { SIMDE_FLOAT32_C(     5.12), SIMDE_FLOAT32_C(  -219.49), SIMDE_FLOAT32_C( -1439.26), SIMDE_FLOAT32_C(    42.71) } },
    { { SIMDE_FLOAT32_C(  -778.36), SIMDE_FLOAT32_C(   495.21), SIMDE_FLOAT32_C(  -881.56), SIMDE_FLOAT32_C(  -400.38) },
      { SIMDE_FLOAT32_C(  -744.48), SIMDE_FLOAT32_C(   912.15), SIMDE_FLOAT32_C(  -384.24), SIMDE_FLOAT32_C(   -84.44) },
      { SIMDE_FLOAT32_C(  -283.14), SIMDE_FLOAT32_C( -1281.94), SIMDE_FLOAT32_C(   167.67), SIMDE_FLOAT32_C(  -468.68) } },
    { { SIMDE_FLOAT32_C(   327.32), SIMDE_FLOAT32_C(   811.80), SIMDE_FLOAT32_C(   755.86), SIMDE_FLOAT32_C(  -543.86) },
      { SIMDE_FLOAT32_C(   655.62), SIMDE_FLOAT32_C(   -26.28), SIMDE_FLOAT32_C(  -126.62), SIMDE_FLOAT32_C(  -521.59) },
      { SIMDE_FLOAT32_C(  1139.13), SIMDE_FLOAT32_C(   212.00), SIMDE_FLOAT32_C(   629.33), SIMDE_FLOAT32_C(  -648.21) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float32x4_t a = simde_vld1q_f32(test_vec[i].a);
    simde_float32x4_t b = simde_vld1q_f32(test_vec[i].b);
    simde_float32x4_t r = simde_vpaddq_f32(a, b);
    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_float32x4_t r = simde_vpaddq_f32(a, b);

    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_f32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpaddq_f64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_float64 a[2];
    simde_float64 b[2];
    simde_float64 r[2];
  } test_vec[] = {
    { { SIMDE_FLOAT64_C(  -304.59), SIMDE_FLOAT64_C(   738.24) },
      { SIMDE_FLOAT64_C(  -491.10), SIMDE_FLOAT64_C(    20.25) },
      { SIMDE_FLOAT64_C(   433.66), SIMDE_FLOAT64_C(  -470.85) } },
    { { SIMDE_FLOAT64_C(    46.86), SIMDE_FLOAT64_C(  -650.53) },
      { SIMDE_FLOAT64_C(   209.27), SIMDE_FLOAT64_C(   722.54) },
      { SIMDE_FLOAT64_C(  -603.67), SIMDE_FLOAT64_C(   931.81) } },
    { { SIMDE_FLOAT64_C(  -507.52), SIMDE_FLOAT64_C(    40.12) },
      { SIMDE_FLOAT64_C(   676.59), SIMDE_FLOAT64_C(   843.37) },
      { SIMDE_FLOAT64_C(  -467.40), SIMDE_FLOAT64_C(  1519.96) } },
    { { SIMDE_FLOAT64_C(  -613.61), SIMDE_FLOAT64_C(   272.81) },
      { SIMDE_FLOAT64_C(   650.30), SIMDE_FLOAT64_C(   222.96) },
      { SIMDE_FLOAT64_C(  -340.80), SIMDE_FLOAT64_C(   873.26) } },
    { { SIMDE_FLOAT64_C(   615.20), SIMDE_FLOAT64_C(  -394.78) },
      { SIMDE_FLOAT64_C(   469.07), SIMDE_FLOAT64_C(    54.35) },
      { SIMDE_FLOAT64_C(   220.41), SIMDE_FLOAT64_C(   523.42) } },
    { { SIMDE_FLOAT64_C(  -172.64), SIMDE_FLOAT64_C(   682.30) },
      { SIMDE_FLOAT64_C(  -786.74), SIMDE_FLOAT64_C(   236.37) },
      { SIMDE_FLOAT64_C(   509.66), SIMDE_FLOAT64_C(  -550.37) } },
    { { SIMDE_FLOAT64_C(   915.30), SIMDE_FLOAT64_C(   782.55) },
      { SIMDE_FLOAT64_C(   199.30), SIMDE_FLOAT64_C(  -594.15) },
      { SIMDE_FLOAT64_C(  1697.85), SIMDE_FLOAT64_C(  -394.85) } },
    { { SIMDE_FLOAT64_C(   264.00), SIMDE_FLOAT64_C(  -410.11) },
      { SIMDE_FLOAT64_C(  -427.51), SIMDE_FLOAT64_C(   959.41) },
      { SIMDE_FLOAT64_C(  -146.12), SIMDE_FLOAT64_C(   531.90) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float64x2_t a = simde_vld1q_f64(test_vec[i].a);
    simde_float64x2_t b = simde_vld1q_f64(test_vec[i].b);
    simde_float64x2_t r = simde_vpaddq_f64(a, b);

    simde_test_arm_neon_assert_equal_f64x2(r, simde_vld1q_f64(test_vec[i].r), 1);
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_float64x2_t a = simde_test_arm_neon_random_f64x2(SIMDE_FLOAT64_C(-1000.0), SIMDE_FLOAT64_C(1000.0));
    simde_float64x2_t b = simde_test_arm_neon_random_f64x2(SIMDE_FLOAT64_C(-1000.0), SIMDE_FLOAT64_C(1000.0));
    simde_float64x2_t r = simde_vpaddq_f64(a, b);

    simde_test_arm_neon_write_f64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpaddq_s8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int8_t a[16];
    int8_t b[16];
    int8_t r[16];
  } test_vec[] = {
    { {  INT8_C( 120),  INT8_C( 124), -INT8_C( 100), -INT8_C(  34), -INT8_C( 111),  INT8_C(  99),  INT8_C(   2),  INT8_C(  11),
         INT8_C(  41),  INT8_C(  86),  INT8_C( 126), -INT8_C(  10), -INT8_C(   4),  INT8_C(  80), -INT8_C( 113), -INT8_C(  35) },
      { -INT8_C(  85), -INT8_C(  62), -INT8_C(  41),  INT8_C( 122),  INT8_C( 100),  INT8_C(  10),  INT8_C( 105), -INT8_C( 112),
        -INT8_C(  97),  INT8_C( 104), -INT8_C( 126), -INT8_C( 104), -INT8_C(  97), -INT8_C(  30), -INT8_C(  82),  INT8_C(  23) },
      { -INT8_C(  12),  INT8_C( 122), -INT8_C(  12),  INT8_C(  13),      INT8_MAX,  INT8_C( 116),  INT8_C(  76),  INT8_C( 108),
         INT8_C( 109),  INT8_C(  81),  INT8_C( 110), -INT8_C(   7),  INT8_C(   7),  INT8_C(  26), -INT8_C( 127), -INT8_C(  59) } },
    { {  INT8_C(  94),  INT8_C(  74), -INT8_C(  11), -INT8_C(  17), -INT8_C(  83), -INT8_C(   8), -INT8_C(   6), -INT8_C(  42),
         INT8_C(  78),  INT8_C( 120), -INT8_C(  52),  INT8_C(  75), -INT8_C(  56),  INT8_C(  92),  INT8_C(  40),  INT8_C( 115) },
      {  INT8_C(  30), -INT8_C(   1), -INT8_C(  19), -INT8_C( 125),  INT8_C(  10),  INT8_C(  86),  INT8_C(  19), -INT8_C(  87),
        -INT8_C(  66), -INT8_C( 107),  INT8_C(  65),  INT8_C(  93),  INT8_C( 119), -INT8_C(  17),  INT8_C( 117), -INT8_C(  43) },
      { -INT8_C(  88), -INT8_C(  28), -INT8_C(  91), -INT8_C(  48), -INT8_C(  58),  INT8_C(  23),  INT8_C(  36), -INT8_C( 101),
         INT8_C(  29),  INT8_C( 112),  INT8_C(  96), -INT8_C(  68),  INT8_C(  83), -INT8_C(  98),  INT8_C( 102),  INT8_C(  74) } },
    { {  INT8_C(  57),  INT8_C( 106), -INT8_C(  60), -INT8_C(  25),  INT8_C(  98), -INT8_C(  66), -INT8_C(  67), -INT8_C(  79),
         INT8_C(  54), -INT8_C( 118), -INT8_C(   4), -INT8_C(   2), -INT8_C(  26),  INT8_C(  36),  INT8_C( 113),  INT8_C(   4) },
      {  INT8_C(  35),  INT8_C(  95), -INT8_C( 121),  INT8_C(  45), -INT8_C(  75), -INT8_C( 102), -INT8_C(  41),  INT8_C( 116),
         INT8_C(  47),  INT8_C(  24), -INT8_C(  47), -INT8_C(  90),  INT8_C(   8),  INT8_C(  70),  INT8_C( 123),  INT8_C(  65) },
      { -INT8_C(  93), -INT8_C(  85),  INT8_C(  32),  INT8_C( 110), -INT8_C(  64), -INT8_C(   6),  INT8_C(  10),  INT8_C( 117),
        -INT8_C( 126), -INT8_C(  76),  INT8_C(  79),  INT8_C(  75),  INT8_C(  71),  INT8_C( 119),  INT8_C(  78), -INT8_C(  68) } },
    { { -INT8_C(  79),  INT8_C(  63),  INT8_C(  40),  INT8_C(  19), -INT8_C(   3), -INT8_C(  26), -INT8_C(  60),  INT8_C(  51),
         INT8_C( 112), -INT8_C(  64),  INT8_C(  49),  INT8_C(  86), -INT8_C(  28), -INT8_C(  93),  INT8_C(  90),  INT8_C(   8) },
      {  INT8_C(   2), -INT8_C(  30),  INT8_C(  53), -INT8_C(  73),  INT8_C( 124),  INT8_C(  12),  INT8_C(  43), -INT8_C(  84),
         INT8_C(  37), -INT8_C(   3),  INT8_C(  82),  INT8_C(  45),  INT8_C(  67), -INT8_C(  50),  INT8_C( 110), -INT8_C(  12) },
      { -INT8_C(  16),  INT8_C(  59), -INT8_C(  29), -INT8_C(   9),  INT8_C(  48), -INT8_C( 121), -INT8_C( 121),  INT8_C(  98),
        -INT8_C(  28), -INT8_C(  20), -INT8_C( 120), -INT8_C(  41),  INT8_C(  34),      INT8_MAX,  INT8_C(  17),  INT8_C(  98) } },
    { {  INT8_C(  13), -INT8_C( 105),  INT8_C(   8),  INT8_C(  11),  INT8_C( 125), -INT8_C(  52),  INT8_C(  62), -INT8_C(  19),
        -INT8_C( 115),  INT8_C( 112),  INT8_C(  67),  INT8_C( 113),  INT8_C(  19), -INT8_C(  99),  INT8_C( 121),  INT8_C(  21) },
      {      INT8_MAX, -INT8_C(  81), -INT8_C(  52), -INT8_C(   4), -INT8_C(  69), -INT8_C(   8), -INT8_C(  88), -INT8_C(  32),
        -INT8_C(  11), -INT8_C(   6),  INT8_C(  13),  INT8_C(  56), -INT8_C(  56),  INT8_C( 124),  INT8_C(  45), -INT8_C(  42) },
      { -INT8_C(  92),  INT8_C(  19),  INT8_C(  73),  INT8_C(  43), -INT8_C(   3), -INT8_C(  76), -INT8_C(  80), -INT8_C( 114),
         INT8_C(  46), -INT8_C(  56), -INT8_C(  77), -INT8_C( 120), -INT8_C(  17),  INT8_C(  69),  INT8_C(  68),  INT8_C(   3) } },
    { {  INT8_C(  19),  INT8_C(  53), -INT8_C(  31), -INT8_C( 112),  INT8_C(   1),  INT8_C(  31),  INT8_C( 125), -INT8_C( 114),
        -INT8_C( 113), -INT8_C(  64),  INT8_C(   0), -INT8_C(  94),  INT8_C(  93),  INT8_C( 121), -INT8_C(  73), -INT8_C(  35) },
      {  INT8_C(  40), -INT8_C( 124), -INT8_C(  39), -INT8_C(  28),  INT8_C( 124), -INT8_C( 127), -INT8_C(  60),  INT8_C( 113),
         INT8_C( 123), -INT8_C(  46), -INT8_C(  87),  INT8_C(  68),  INT8_C(  78), -INT8_C(  42),  INT8_C(  26),  INT8_C(  97) },
      {  INT8_C(  72),  INT8_C( 113),  INT8_C(  32),  INT8_C(  11),  INT8_C(  79), -INT8_C(  94), -INT8_C(  42), -INT8_C( 108),
        -INT8_C(  84), -INT8_C(  67), -INT8_C(   3),  INT8_C(  53),  INT8_C(  77), -INT8_C(  19),  INT8_C(  36),  INT8_C( 123) } },
    { {  INT8_C(  11), -INT8_C(   5), -INT8_C(  15),  INT8_C(  13),  INT8_C(  26),  INT8_C( 110), -INT8_C( 101), -INT8_C(  86),
         INT8_C(  46), -INT8_C( 101),  INT8_C(  76), -INT8_C( 117),  INT8_C(  21),  INT8_C(   4),  INT8_C( 104),  INT8_C(  61) },
      { -INT8_C( 120),  INT8_C(  65),  INT8_C(  33),  INT8_C(   4), -INT8_C(  62), -INT8_C(  26),  INT8_C( 117),  INT8_C(  62),
        -INT8_C(  72),  INT8_C(  30), -INT8_C( 126),  INT8_C(   6), -INT8_C(  11), -INT8_C( 100),  INT8_C( 103),  INT8_C(   0) },
      {  INT8_C(   6), -INT8_C(   2), -INT8_C( 120),  INT8_C(  69), -INT8_C(  55), -INT8_C(  41),  INT8_C(  25), -INT8_C(  91),
        -INT8_C(  55),  INT8_C(  37), -INT8_C(  88), -INT8_C(  77), -INT8_C(  42), -INT8_C( 120), -INT8_C( 111),  INT8_C( 103) } },
    { { -INT8_C( 105),  INT8_C(  88),  INT8_C(  13), -INT8_C(  79), -INT8_C(  58), -INT8_C(  87),  INT8_C(  91), -INT8_C(  12),
         INT8_C(  68), -INT8_C(  88),      INT8_MAX,  INT8_C(  89), -INT8_C(  84), -INT8_C(  24), -INT8_C( 105),  INT8_C(  52) },
      {  INT8_C(  41), -INT8_C(  72),  INT8_C(  56), -INT8_C(  20), -INT8_C(  98), -INT8_C(  83),  INT8_C(  42),  INT8_C(  86),
        -INT8_C(  53), -INT8_C(  84),  INT8_C(  92), -INT8_C(  64),  INT8_C(  72), -INT8_C(  61), -INT8_C(  63), -INT8_C(  33) },
      { -INT8_C(  17), -INT8_C(  66),  INT8_C( 111),  INT8_C(  79), -INT8_C(  20), -INT8_C(  40), -INT8_C( 108), -INT8_C(  53),
        -INT8_C(  31),  INT8_C(  36),  INT8_C(  75),      INT8_MIN,  INT8_C( 119),  INT8_C(  28),  INT8_C(  11), -INT8_C(  96) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_int8x16_t a = simde_vld1q_s8(test_vec[i].a);
    simde_int8x16_t b = simde_vld1q_s8(test_vec[i].b);
    simde_int8x16_t r = simde_vpaddq_s8(a, b);

    simde_test_arm_neon_assert_equal_i8x16(r, simde_vld1q_s8(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_int8x16_t a = simde_test_arm_neon_random_i8x16();
    simde_int8x16_t b = simde_test_arm_neon_random_i8x16();
    simde_int8x16_t r = simde_vpaddq_s8(a, b);

    simde_test_arm_neon_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpaddq_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int16_t a[8];
    int16_t b[8];
    int16_t r[8];
  } test_vec[] = {
    { { -INT16_C( 29696),  INT16_C( 13750),  INT16_C( 24319),  INT16_C( 26400),  INT16_C(  9764),  INT16_C( 24428), -INT16_C( 10546),  INT16_C( 14168) },
      { -INT16_C( 17422),  INT16_C(  6892),  INT16_C( 26568),  INT16_C(  6610),  INT16_C(  2432), -INT16_C( 27244),  INT16_C( 19912), -INT16_C( 13860) },
      { -INT16_C( 15946), -INT16_C( 14817), -INT16_C( 31344),  INT16_C(  3622), -INT16_C( 10530), -INT16_C( 32358), -INT16_C( 24812),  INT16_C(  6052) } },
    { { -INT16_C( 27943), -INT16_C(  9986),  INT16_C(  7920),  INT16_C(  5439), -INT16_C( 21692),  INT16_C(  4724), -INT16_C( 12927),  INT16_C( 29769) },
      {  INT16_C( 13704),  INT16_C( 20622),  INT16_C( 24733),  INT16_C(  7529), -INT16_C(   407),  INT16_C( 12979), -INT16_C( 28853),  INT16_C(  9467) },
      {  INT16_C( 27607),  INT16_C( 13359), -INT16_C( 16968),  INT16_C( 16842), -INT16_C( 31210),  INT16_C( 32262),  INT16_C( 12572), -INT16_C( 19386) } },
    { { -INT16_C(  1759),  INT16_C(  4604),  INT16_C( 15128),  INT16_C( 23590), -INT16_C( 25625),  INT16_C( 26735), -INT16_C( 18328), -INT16_C(  3876) },
      {  INT16_C( 27374), -INT16_C( 29888), -INT16_C( 21814),  INT16_C( 13480),  INT16_C( 23464), -INT16_C(  3226),  INT16_C( 25066),  INT16_C(  2839) },
      {  INT16_C(  2845), -INT16_C( 26818),  INT16_C(  1110), -INT16_C( 22204), -INT16_C(  2514), -INT16_C(  8334),  INT16_C( 20238),  INT16_C( 27905) } },
    { {  INT16_C(  4954),  INT16_C( 29213),  INT16_C( 17230),  INT16_C( 13775),  INT16_C( 16094),  INT16_C( 18078),  INT16_C( 31478), -INT16_C(  7114) },
      {  INT16_C( 30693), -INT16_C( 20625),  INT16_C(  6177), -INT16_C( 13853),  INT16_C( 18803),  INT16_C( 24252), -INT16_C( 11350),  INT16_C(  1385) },
      { -INT16_C( 31369),  INT16_C( 31005), -INT16_C( 31364),  INT16_C( 24364),  INT16_C( 10068), -INT16_C(  7676), -INT16_C( 22481), -INT16_C(  9965) } },
    { { -INT16_C( 31002),  INT16_C( 13431),  INT16_C( 18122), -INT16_C( 22422),  INT16_C(  2180),  INT16_C( 31727),  INT16_C(  9602),  INT16_C( 26463) },
      { -INT16_C( 12388), -INT16_C( 17129), -INT16_C(  1305),  INT16_C( 23174),  INT16_C( 16964), -INT16_C(  4424),  INT16_C(  8725), -INT16_C(  1037) },
      { -INT16_C( 17571), -INT16_C(  4300), -INT16_C( 31629), -INT16_C( 29471), -INT16_C( 29517),  INT16_C( 21869),  INT16_C( 12540),  INT16_C(  7688) } },
    { {  INT16_C( 27560),  INT16_C( 29232), -INT16_C( 25935),  INT16_C( 13851),  INT16_C(  2722),  INT16_C(  9393),  INT16_C(  4143), -INT16_C( 13172) },
      { -INT16_C( 23585), -INT16_C( 14711),  INT16_C(  4253), -INT16_C(  7903), -INT16_C(  9902),  INT16_C( 26832), -INT16_C( 15365), -INT16_C( 23453) },
      { -INT16_C(  8744), -INT16_C( 12084),  INT16_C( 12115), -INT16_C(  9029),  INT16_C( 27240), -INT16_C(  3650),  INT16_C( 16930),  INT16_C( 26718) } },
    { { -INT16_C( 27858), -INT16_C(  8170),  INT16_C( 12589), -INT16_C( 12522), -INT16_C( 14533),  INT16_C( 27636), -INT16_C( 32553), -INT16_C( 18633) },
      { -INT16_C( 16349), -INT16_C( 16259), -INT16_C( 24880),  INT16_C(  9122),  INT16_C( 29304),  INT16_C( 29579), -INT16_C(  4555),  INT16_C( 25623) },
      {  INT16_C( 29508),  INT16_C(    67),  INT16_C( 13103),  INT16_C( 14350), -INT16_C( 32608), -INT16_C( 15758), -INT16_C(  6653),  INT16_C( 21068) } },
    { {  INT16_C( 11906), -INT16_C( 20668),  INT16_C( 23135), -INT16_C( 25729),  INT16_C( 29473), -INT16_C(  2042),  INT16_C( 15859),  INT16_C(  5807) },
      {  INT16_C( 11773), -INT16_C( 12586),  INT16_C( 30923),  INT16_C( 17393),  INT16_C( 31978),  INT16_C(  8375), -INT16_C( 12694), -INT16_C(  4988) },
      { -INT16_C(  8762), -INT16_C(  2594),  INT16_C( 27431),  INT16_C( 21666), -INT16_C(   813), -INT16_C( 17220), -INT16_C( 25183), -INT16_C( 17682) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_int16x8_t a = simde_vld1q_s16(test_vec[i].a);
    simde_int16x8_t b = simde_vld1q_s16(test_vec[i].b);
    simde_int16x8_t r = simde_vpaddq_s16(a, b);

    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_int16x8_t r = simde_vpaddq_s16(a, b);

    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_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpaddq_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int32_t a[4];
    int32_t b[4];
    int32_t r[4];
  } test_vec[] = {
    { {  INT32_C(   630741622),  INT32_C(   504305028), -INT32_C(   187880710),  INT32_C(   867999092) },
      {  INT32_C(   824916310), -INT32_C(  1005749701),  INT32_C(  1610912158),  INT32_C(   723032501) },
      {  INT32_C(  1135046650),  INT32_C(   680118382), -INT32_C(   180833391), -INT32_C(  1961022637) } },
    { {  INT32_C(  2018619635), -INT32_C(  1080663867), -INT32_C(     5020790),  INT32_C(  1462923264) },
      { -INT32_C(   460825175),  INT32_C(  1973982679), -INT32_C(   589976538),  INT32_C(   956820806) },
      {  INT32_C(   937955768),  INT32_C(  1457902474),  INT32_C(  1513157504),  INT32_C(   366844268) } },
    { {  INT32_C(  1655789725),  INT32_C(  1126254520), -INT32_C(  1421683285), -INT32_C(   301829051) },
      { -INT32_C(  1462531375),  INT32_C(  1176337183),  INT32_C(  1847783976),  INT32_C(  2091330015) },
      { -INT32_C(  1512923051), -INT32_C(  1723512336), -INT32_C(   286194192), -INT32_C(   355853305) } },
    { {  INT32_C(   987650434),  INT32_C(  1266548640),  INT32_C(   435666900),  INT32_C(    67696947) },
      { -INT32_C(  1548952700),  INT32_C(  2129250646), -INT32_C(  1695806533), -INT32_C(  1223257035) },
      { -INT32_C(  2040768222),  INT32_C(   503363847),  INT32_C(   580297946),  INT32_C(  1375903728) } },
    { { -INT32_C(  1913522963), -INT32_C(   925274124),  INT32_C(  1659031598),  INT32_C(  1298590409) },
      {  INT32_C(   468784069), -INT32_C(  1734681892),  INT32_C(   456296166),  INT32_C(   131221786) },
      {  INT32_C(  1456170209), -INT32_C(  1337345289), -INT32_C(  1265897823),  INT32_C(   587517952) } },
    { {  INT32_C(   831898429),  INT32_C(  1643802162),  INT32_C(   130276414), -INT32_C(  1957353018) },
      {  INT32_C(   430327356),  INT32_C(   112279584), -INT32_C(   517872697),  INT32_C(  1793717036) },
      { -INT32_C(  1819266705), -INT32_C(  1827076604),  INT32_C(   542606940),  INT32_C(  1275844339) } },
    { { -INT32_C(   375685449),  INT32_C(   709531116),  INT32_C(   925961585),  INT32_C(  1942128183) },
      { -INT32_C(   309564980),  INT32_C(  1894989225),  INT32_C(  1297224993), -INT32_C(  1078510840) },
      {  INT32_C(   333845667), -INT32_C(  1426877528),  INT32_C(  1585424245),  INT32_C(   218714153) } },
    { { -INT32_C(  1515629639),  INT32_C(  1523577832),  INT32_C(   949026817),  INT32_C(  1403737223) },
      {  INT32_C(  1715484861), -INT32_C(  1764281227),  INT32_C(  1373907273),  INT32_C(   487693156) },
      {  INT32_C(     7948193), -INT32_C(  1942203256), -INT32_C(    48796366),  INT32_C(  1861600429) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_int32x4_t a = simde_vld1q_s32(test_vec[i].a);
    simde_int32x4_t b = simde_vld1q_s32(test_vec[i].b);
    simde_int32x4_t r = simde_vpaddq_s32(a, b);
    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_int32x4_t r = simde_vpaddq_s32(a, b);

    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_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpaddq_s64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int64_t a[2];
    int64_t b[2];
    int64_t r[2];
  } test_vec[] = {
    { {  INT64_C( 4896844547604500339),  INT64_C( 8765501941374251448) },
      { -INT64_C( 7785191802955445040),  INT64_C( 1730198806973093673) },
      { -INT64_C( 4784397584730799829), -INT64_C( 6054992995982351367) } },
    { {  INT64_C( 1703751951021001014),  INT64_C( 7056773999644983266) },
      {  INT64_C( 1684314300911287422), -INT64_C( 1497452695245042055) },
      {  INT64_C( 8760525950665984280),  INT64_C(  186861605666245367) } },
    { {  INT64_C(  629079142398964803), -INT64_C(  639111501445216464) },
      {  INT64_C( 7776910553607507943),  INT64_C( 2418646161902200048) },
      { -INT64_C(   10032359046251661), -INT64_C( 8251187358199843625) } },
    { { -INT64_C(  206181738529628939), -INT64_C(  957614104208629691) },
      { -INT64_C( 8409709677376931602), -INT64_C( 8387459978995116903) },
      { -INT64_C( 1163795842738258630),  INT64_C( 1649574417337503111) } },
    { {  INT64_C( 2335056876039200157), -INT64_C(  979651647068297879) },
      {  INT64_C( 9021304771970150156), -INT64_C( 4534404492057812240) },
      {  INT64_C( 1355405228970902278),  INT64_C( 4486900279912337916) } },
    { { -INT64_C( 1447745090286274324),  INT64_C( 7471128028670642104) },
      { -INT64_C( 8334121547303321610), -INT64_C( 3997185613633532509) },
      {  INT64_C( 6023382938384367780),  INT64_C( 6115436912772697497) } },
    { { -INT64_C(  123152696641276963),  INT64_C( 7422609973013293632) },
      { -INT64_C(  860300428430994969),  INT64_C( 2560932209795736038) },
      {  INT64_C( 7299457276372016669),  INT64_C( 1700631781364741069) } },
    { { -INT64_C( 3154265126970713099),  INT64_C( 4850501438233637751) },
      {  INT64_C( 1209450879884104066), -INT64_C( 4945130759824178186) },
      {  INT64_C( 1696236311262924652), -INT64_C( 3735679879940074120) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_int64x2_t a = simde_vld1q_s64(test_vec[i].a);
    simde_int64x2_t b = simde_vld1q_s64(test_vec[i].b);
    simde_int64x2_t r = simde_vpaddq_s64(a, b);
    simde_test_arm_neon_assert_equal_i64x2(r, simde_vld1q_s64(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_int64x2_t a = simde_test_arm_neon_random_i64x2();
    simde_int64x2_t b = simde_test_arm_neon_random_i64x2();
    simde_int64x2_t r = simde_vpaddq_s64(a, b);

    simde_test_arm_neon_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpaddq_u8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint8_t a[16];
    uint8_t b[16];
    uint8_t r[16];
  } test_vec[] = {
    { { UINT8_C(204), UINT8_C( 23), UINT8_C(182), UINT8_C(158), UINT8_C(247), UINT8_C(226), UINT8_C(226), UINT8_C(178),
        UINT8_C(171), UINT8_C(144), UINT8_C( 17), UINT8_C( 54), UINT8_C(172), UINT8_C(220), UINT8_C(208), UINT8_C( 28) },
      { UINT8_C(134), UINT8_C(190), UINT8_C(132), UINT8_C(101), UINT8_C(198), UINT8_C(195), UINT8_C(108), UINT8_C( 76),
        UINT8_C(138), UINT8_C( 36), UINT8_C(  2), UINT8_C(216), UINT8_C( 42), UINT8_C( 49), UINT8_C(  3), UINT8_C(246) },
      { UINT8_C(227), UINT8_C( 84), UINT8_C(217), UINT8_C(148), UINT8_C( 59), UINT8_C( 71), UINT8_C(136), UINT8_C(236),
        UINT8_C( 68), UINT8_C(233), UINT8_C(137), UINT8_C(184), UINT8_C(174), UINT8_C(218), UINT8_C( 91), UINT8_C(249) } },
    { { UINT8_C( 72), UINT8_C(185), UINT8_C(148), UINT8_C( 64), UINT8_C(155), UINT8_C(118), UINT8_C(242), UINT8_C( 70),
        UINT8_C(  6), UINT8_C(  3), UINT8_C(124), UINT8_C(179), UINT8_C(223), UINT8_C( 77), UINT8_C(207), UINT8_C(101) },
      { UINT8_C( 11), UINT8_C( 84), UINT8_C(202), UINT8_C(209), UINT8_C( 23), UINT8_C( 54), UINT8_C( 30), UINT8_C(162),
        UINT8_C( 91), UINT8_C( 32), UINT8_C(122), UINT8_C(133), UINT8_C( 82), UINT8_C(125), UINT8_C(123), UINT8_C(154) },
      { UINT8_C(  1), UINT8_C(212), UINT8_C( 17), UINT8_C( 56), UINT8_C(  9), UINT8_C( 47), UINT8_C( 44), UINT8_C( 52),
        UINT8_C( 95), UINT8_C(155), UINT8_C( 77), UINT8_C(192), UINT8_C(123),    UINT8_MAX, UINT8_C(207), UINT8_C( 21) } },
    { { UINT8_C( 54), UINT8_C( 15), UINT8_C(218), UINT8_C(209), UINT8_C(133), UINT8_C(204), UINT8_C( 24), UINT8_C(140),
        UINT8_C(207), UINT8_C(148), UINT8_C( 63), UINT8_C(174), UINT8_C(225), UINT8_C( 14), UINT8_C( 19), UINT8_C(237) },
      { UINT8_C( 98), UINT8_C(222), UINT8_C(190), UINT8_C(122), UINT8_C( 20), UINT8_C(220), UINT8_C( 28), UINT8_C(111),
        UINT8_C(253), UINT8_C(150), UINT8_C(244), UINT8_C( 79), UINT8_C( 19), UINT8_C(111), UINT8_C(233), UINT8_C( 73) },
      { UINT8_C( 69), UINT8_C(171), UINT8_C( 81), UINT8_C(164), UINT8_C( 99), UINT8_C(237), UINT8_C(239), UINT8_C(  0),
        UINT8_C( 64), UINT8_C( 56), UINT8_C(240), UINT8_C(139), UINT8_C(147), UINT8_C( 67), UINT8_C(130), UINT8_C( 50) } },
    { { UINT8_C(126), UINT8_C(196), UINT8_C( 26), UINT8_C(  4), UINT8_C(144), UINT8_C( 50), UINT8_C(144), UINT8_C( 96),
        UINT8_C(199), UINT8_C(207), UINT8_C( 14), UINT8_C(168), UINT8_C(221), UINT8_C( 34), UINT8_C(149), UINT8_C( 64) },
      { UINT8_C(  0), UINT8_C( 84), UINT8_C(186), UINT8_C( 20), UINT8_C( 48), UINT8_C(214), UINT8_C(132), UINT8_C( 45),
        UINT8_C(108), UINT8_C(120), UINT8_C(124), UINT8_C(127), UINT8_C(232), UINT8_C(102), UINT8_C(200), UINT8_C(102) },
      { UINT8_C( 66), UINT8_C( 30), UINT8_C(194), UINT8_C(240), UINT8_C(150), UINT8_C(182),    UINT8_MAX, UINT8_C(213),
        UINT8_C( 84), UINT8_C(206), UINT8_C(  6), UINT8_C(177), UINT8_C(228), UINT8_C(251), UINT8_C( 78), UINT8_C( 46) } },
    { { UINT8_C( 42), UINT8_C(226), UINT8_C(106), UINT8_C(186), UINT8_C( 21), UINT8_C(250), UINT8_C( 26), UINT8_C(220),
        UINT8_C(201), UINT8_C( 41), UINT8_C(132), UINT8_C(167), UINT8_C( 75), UINT8_C( 26), UINT8_C(231), UINT8_C( 75) },
      { UINT8_C(110), UINT8_C(161), UINT8_C( 95), UINT8_C(158), UINT8_C(119), UINT8_C(227), UINT8_C(204), UINT8_C(227),
        UINT8_C( 92), UINT8_C( 72), UINT8_C( 98), UINT8_C( 68), UINT8_C(174), UINT8_C( 42), UINT8_C(170), UINT8_C(216) },
      { UINT8_C( 12), UINT8_C( 36), UINT8_C( 15), UINT8_C(246), UINT8_C(242), UINT8_C( 43), UINT8_C(101), UINT8_C( 50),
        UINT8_C( 15), UINT8_C(253), UINT8_C( 90), UINT8_C(175), UINT8_C(164), UINT8_C(166), UINT8_C(216), UINT8_C(130) } },
    { { UINT8_C( 12), UINT8_C( 21), UINT8_C(147), UINT8_C( 33), UINT8_C( 15), UINT8_C(173), UINT8_C(253), UINT8_C(217),
        UINT8_C(214), UINT8_C(130), UINT8_C(128), UINT8_C( 33), UINT8_C(156), UINT8_C(103), UINT8_C(108), UINT8_C( 10) },
      { UINT8_C(  8), UINT8_C(204), UINT8_C(168), UINT8_C(127), UINT8_C(175), UINT8_C(116), UINT8_C( 98), UINT8_C( 11),
        UINT8_C(189), UINT8_C(196), UINT8_C( 79), UINT8_C(107), UINT8_C(238), UINT8_C(250), UINT8_C( 68), UINT8_C(250) },
      { UINT8_C( 33), UINT8_C(180), UINT8_C(188), UINT8_C(214), UINT8_C( 88), UINT8_C(161), UINT8_C(  3), UINT8_C(118),
        UINT8_C(212), UINT8_C( 39), UINT8_C( 35), UINT8_C(109), UINT8_C(129), UINT8_C(186), UINT8_C(232), UINT8_C( 62) } },
    { { UINT8_C( 15), UINT8_C(215), UINT8_C( 28), UINT8_C( 30), UINT8_C(132), UINT8_C( 25), UINT8_C(247), UINT8_C( 91),
        UINT8_C(155), UINT8_C(119), UINT8_C(124), UINT8_C( 55), UINT8_C(222), UINT8_C(233), UINT8_C( 65), UINT8_C(230) },
      { UINT8_C(181), UINT8_C(234), UINT8_C(101), UINT8_C(100), UINT8_C( 94), UINT8_C(199), UINT8_C(112), UINT8_C( 27),
        UINT8_C(139), UINT8_C(191), UINT8_C(135), UINT8_C(121), UINT8_C(185), UINT8_C(203), UINT8_C(116), UINT8_C(200) },
      { UINT8_C(230), UINT8_C( 58), UINT8_C(157), UINT8_C( 82), UINT8_C( 18), UINT8_C(179), UINT8_C(199), UINT8_C( 39),
        UINT8_C(159), UINT8_C(201), UINT8_C( 37), UINT8_C(139), UINT8_C( 74), UINT8_C(  0), UINT8_C(132), UINT8_C( 60) } },
    { { UINT8_C(162), UINT8_C(144), UINT8_C(231), UINT8_C( 38), UINT8_C(169), UINT8_C(222), UINT8_C(129), UINT8_C( 69),
        UINT8_C( 86), UINT8_C(254), UINT8_C(124), UINT8_C( 52), UINT8_C(231), UINT8_C(190), UINT8_C( 27), UINT8_C(156) },
      { UINT8_C(168), UINT8_C(128), UINT8_C(  0), UINT8_C(  6), UINT8_C( 72), UINT8_C(112), UINT8_C( 34), UINT8_C(211),
        UINT8_C( 48), UINT8_C(169), UINT8_C( 77), UINT8_C(233), UINT8_C(116), UINT8_C(193), UINT8_C(178), UINT8_C( 22) },
      { UINT8_C( 50), UINT8_C( 13), UINT8_C(135), UINT8_C(198), UINT8_C( 84), UINT8_C(176), UINT8_C(165), UINT8_C(183),
        UINT8_C( 40), UINT8_C(  6), UINT8_C(184), UINT8_C(245), UINT8_C(217), UINT8_C( 54), UINT8_C( 53), UINT8_C(200) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_uint8x16_t a = simde_vld1q_u8(test_vec[i].a);
    simde_uint8x16_t b = simde_vld1q_u8(test_vec[i].b);
    simde_uint8x16_t r = simde_vpaddq_u8(a, b);

    simde_test_arm_neon_assert_equal_u8x16(r, simde_vld1q_u8(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_uint8x16_t a = simde_test_arm_neon_random_u8x16();
    simde_uint8x16_t b = simde_test_arm_neon_random_u8x16();
    simde_uint8x16_t r = simde_vpaddq_u8(a, b);

    simde_test_arm_neon_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_u8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpaddq_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint16_t a[8];
    uint16_t b[8];
    uint16_t r[8];
  } test_vec[] = {
    { { UINT16_C( 9349), UINT16_C(24087), UINT16_C(49567), UINT16_C( 4999), UINT16_C( 2307), UINT16_C(62434), UINT16_C(18810), UINT16_C(11356) },
      { UINT16_C(14700), UINT16_C(56484), UINT16_C(45907), UINT16_C(11347), UINT16_C(51476), UINT16_C(16753), UINT16_C( 2394), UINT16_C(57376) },
      { UINT16_C(33436), UINT16_C(54566), UINT16_C(64741), UINT16_C(30166), UINT16_C( 5648), UINT16_C(57254), UINT16_C( 2693), UINT16_C(59770) } },
    { { UINT16_C(14125), UINT16_C(52542), UINT16_C(50680), UINT16_C(64736), UINT16_C(49871), UINT16_C(18927), UINT16_C(19211), UINT16_C(30837) },
      { UINT16_C( 6532), UINT16_C(55124), UINT16_C(42957), UINT16_C(57604), UINT16_C(30064), UINT16_C(52002), UINT16_C(17022), UINT16_C(43947) },
      { UINT16_C( 1131), UINT16_C(49880), UINT16_C( 3262), UINT16_C(50048), UINT16_C(61656), UINT16_C(35025), UINT16_C(16530), UINT16_C(60969) } },
    { { UINT16_C(59770), UINT16_C(29304), UINT16_C(22702), UINT16_C(32110), UINT16_C(23835), UINT16_C( 9926), UINT16_C(15272), UINT16_C(11678) },
      { UINT16_C(62293), UINT16_C( 8708), UINT16_C( 2202), UINT16_C( 2819), UINT16_C( 9597), UINT16_C(64470), UINT16_C(33128), UINT16_C(58023) },
      { UINT16_C(23538), UINT16_C(54812), UINT16_C(33761), UINT16_C(26950), UINT16_C( 5465), UINT16_C( 5021), UINT16_C( 8531), UINT16_C(25615) } },
    { { UINT16_C( 8042), UINT16_C( 6228), UINT16_C(50040), UINT16_C(37782), UINT16_C(23584), UINT16_C(51641), UINT16_C(22680), UINT16_C(60918) },
      { UINT16_C(64075), UINT16_C(58639), UINT16_C( 4611), UINT16_C(33008), UINT16_C(50743), UINT16_C(40828), UINT16_C( 9031), UINT16_C(45441) },
      { UINT16_C(14270), UINT16_C(22286), UINT16_C( 9689), UINT16_C(18062), UINT16_C(57178), UINT16_C(37619), UINT16_C(26035), UINT16_C(54472) } },
    { { UINT16_C(54850), UINT16_C(47818), UINT16_C(24729), UINT16_C(47437), UINT16_C( 1980), UINT16_C(21634), UINT16_C(30815), UINT16_C(43585) },
      { UINT16_C(20595), UINT16_C(30351), UINT16_C(32866), UINT16_C(39670), UINT16_C(29254), UINT16_C(36409), UINT16_C(48021), UINT16_C(55359) },
      { UINT16_C(37132), UINT16_C( 6630), UINT16_C(23614), UINT16_C( 8864), UINT16_C(50946), UINT16_C( 7000), UINT16_C(  127), UINT16_C(37844) } },
    { { UINT16_C( 2449), UINT16_C(10898), UINT16_C(57449), UINT16_C( 9955), UINT16_C(26343), UINT16_C(18042), UINT16_C(48350), UINT16_C(20976) },
      { UINT16_C(32524), UINT16_C(28615), UINT16_C(48895), UINT16_C(17929), UINT16_C(16944), UINT16_C(50900), UINT16_C( 5117), UINT16_C(36510) },
      { UINT16_C(13347), UINT16_C( 1868), UINT16_C(44385), UINT16_C( 3790), UINT16_C(61139), UINT16_C( 1288), UINT16_C( 2308), UINT16_C(41627) } },
    { { UINT16_C(12317), UINT16_C(34488), UINT16_C(39952), UINT16_C(63404), UINT16_C( 9986), UINT16_C(57405), UINT16_C(11747), UINT16_C(61234) },
      { UINT16_C(63917), UINT16_C(44126), UINT16_C(26551), UINT16_C(59634), UINT16_C(50858), UINT16_C(42926), UINT16_C(19674), UINT16_C(63286) },
      { UINT16_C(46805), UINT16_C(37820), UINT16_C( 1855), UINT16_C( 7445), UINT16_C(42507), UINT16_C(20649), UINT16_C(28248), UINT16_C(17424) } },
    { { UINT16_C(61052), UINT16_C(36221), UINT16_C(10890), UINT16_C(35972), UINT16_C(49745), UINT16_C(13421), UINT16_C(40943), UINT16_C(39971) },
      { UINT16_C(33432), UINT16_C(20553), UINT16_C(15337), UINT16_C(37688), UINT16_C(58882), UINT16_C(56379), UINT16_C(28978), UINT16_C(44755) },
      { UINT16_C(31737), UINT16_C(46862), UINT16_C(63166), UINT16_C(15378), UINT16_C(53985), UINT16_C(53025), UINT16_C(49725), UINT16_C( 8197) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_uint16x8_t a = simde_vld1q_u16(test_vec[i].a);
    simde_uint16x8_t b = simde_vld1q_u16(test_vec[i].b);
    simde_uint16x8_t r = simde_vpaddq_u16(a, b);
    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_uint16x8_t r = simde_vpaddq_u16(a, b);

    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_u16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpaddq_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint32_t a[4];
    uint32_t b[4];
    uint32_t r[4];
  } test_vec[] = {
    { { UINT32_C(3816938315), UINT32_C(2809583990), UINT32_C(3278927444), UINT32_C(3055051205) },
      { UINT32_C(1596983728), UINT32_C( 356509708), UINT32_C(2588010953), UINT32_C( 637551579) },
      { UINT32_C(2331555009), UINT32_C(2039011353), UINT32_C(1953493436), UINT32_C(3225562532) } },
    { { UINT32_C(2500428063), UINT32_C(2939977819), UINT32_C(3144854774), UINT32_C(3195112206) },
      { UINT32_C(2686362004), UINT32_C(1404394889), UINT32_C( 569243206), UINT32_C(1497951802) },
      { UINT32_C(1145438586), UINT32_C(2044999684), UINT32_C(4090756893), UINT32_C(2067195008) } },
    { { UINT32_C(3404616047), UINT32_C(3346672337), UINT32_C(3833785558), UINT32_C( 195294071) },
      { UINT32_C( 514572693), UINT32_C(1685152030), UINT32_C(2441502551), UINT32_C(3169504845) },
      { UINT32_C(2456321088), UINT32_C(4029079629), UINT32_C(2199724723), UINT32_C(1316040100) } },
    { { UINT32_C(4052211743), UINT32_C(3652714754), UINT32_C(1706900461), UINT32_C(3278921774) },
      { UINT32_C(1071782945), UINT32_C(3567539069), UINT32_C(4284885682), UINT32_C( 398217464) },
      { UINT32_C(3409959201), UINT32_C( 690854939), UINT32_C( 344354718), UINT32_C( 388135850) } },
    { { UINT32_C( 721961769), UINT32_C( 822395204), UINT32_C( 714523388), UINT32_C(1156450082) },
      { UINT32_C(2692993059), UINT32_C(3597936419), UINT32_C(1238751825), UINT32_C(1415680299) },
      { UINT32_C(1544356973), UINT32_C(1870973470), UINT32_C(1995962182), UINT32_C(2654432124) } },
    { { UINT32_C( 411003348), UINT32_C( 642417706), UINT32_C(1750196294), UINT32_C( 179060711) },
      { UINT32_C( 850014223), UINT32_C(2835881815), UINT32_C( 619896569), UINT32_C(1148736367) },
      { UINT32_C(1053421054), UINT32_C(1929257005), UINT32_C(3685896038), UINT32_C(1768632936) } },
    { { UINT32_C(3881629885), UINT32_C(3255740028), UINT32_C(1848270727), UINT32_C(2910443422) },
      { UINT32_C(1591681799), UINT32_C(1007151170), UINT32_C( 895548102), UINT32_C( 175757645) },
      { UINT32_C(2842402617), UINT32_C( 463746853), UINT32_C(2598832969), UINT32_C(1071305747) } },
    { { UINT32_C(1307760337), UINT32_C(  51314812), UINT32_C(4252121439), UINT32_C( 397077264) },
      { UINT32_C(1366722830), UINT32_C( 932019569), UINT32_C(3312315767), UINT32_C(2546984646) },
      { UINT32_C(1359075149), UINT32_C( 354231407), UINT32_C(2298742399), UINT32_C(1564333117) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_uint32x4_t a = simde_vld1q_u32(test_vec[i].a);
    simde_uint32x4_t b = simde_vld1q_u32(test_vec[i].b);
    simde_uint32x4_t r = simde_vpaddq_u32(a, b);

    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_uint32x4_t r = simde_vpaddq_u32(a, b);

    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_u32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpaddq_u64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint64_t a[2];
    uint64_t b[2];
    uint64_t r[2];
  } test_vec[] = {
    { { UINT64_C(15513978132590441720), UINT64_C(18412383231435127934) },
      { UINT64_C(15173798401319091866), UINT64_C( 7554486488907008214) },
      { UINT64_C(15479617290316018038), UINT64_C( 4281540816516548464) } },
    { { UINT64_C( 5179969466727272737), UINT64_C( 8407314346400738990) },
      { UINT64_C(12652720048107532165), UINT64_C( 8114699618393940678) },
      { UINT64_C(13587283813128011727), UINT64_C( 2320675592791921227) } },
    { { UINT64_C(16381383177064366917), UINT64_C(16472263491434092619) },
      { UINT64_C(14299563238393217771), UINT64_C( 5432072351392715171) },
      { UINT64_C(14406902594788907920), UINT64_C( 1284891516076381326) } },
    { { UINT64_C( 9652814040289369564), UINT64_C(12432824220313617735) },
      { UINT64_C( 1769037749118055622), UINT64_C(18231816079301838771) },
      { UINT64_C( 3638894186893435683), UINT64_C( 1554109754710342777) } },
    { { UINT64_C( 6055094155079540041), UINT64_C(13544723167905034890) },
      { UINT64_C(18322346746262415545), UINT64_C(  410596935221072021) },
      { UINT64_C( 1153073249275023315), UINT64_C(  286199607773935950) } },
    { { UINT64_C( 5799106650900578584), UINT64_C(13038928049068537154) },
      { UINT64_C( 1676510600800400891), UINT64_C(14860611816019327865) },
      { UINT64_C(  391290626259564122), UINT64_C(16537122416819728756) } },
    { { UINT64_C(10905306329890735169), UINT64_C( 9336457387018547939) },
      { UINT64_C( 1644108111038346295), UINT64_C( 6884746120955469318) },
      { UINT64_C( 1795019643199731492), UINT64_C( 8528854231993815613) } },
    { { UINT64_C(15003669511904067404), UINT64_C(   51580054159558319) },
      { UINT64_C(10405158514773884595), UINT64_C( 9775019265358672682) },
      { UINT64_C(15055249566063625723), UINT64_C( 1733433706423005661) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_uint64x2_t a = simde_vld1q_u64(test_vec[i].a);
    simde_uint64x2_t b = simde_vld1q_u64(test_vec[i].b);
    simde_uint64x2_t r = simde_vpaddq_u64(a, b);
    simde_test_arm_neon_assert_equal_u64x2(r, simde_vld1q_u64(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_uint64x2_t a = simde_test_arm_neon_random_u64x2();
    simde_uint64x2_t b = simde_test_arm_neon_random_u64x2();
    simde_uint64x2_t r = simde_vpaddq_u64(a, b);

    simde_test_arm_neon_write_u64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_u64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpaddd_s64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    int64_t a[2];
    int64_t r;
  } test_vec[] = {
    { {  INT64_C( 7807378621338587649),  INT64_C( 1979464258218010472) },
      -INT64_C( 8659901194152953495) },
    { { -INT64_C(  469042846506888056),  INT64_C( 3526121899697758237) },
       INT64_C( 3057079053190870181) },
    { { -INT64_C( 7509699402956026401),  INT64_C( 8229030801227608791) },
       INT64_C(  719331398271582390) },
    { {  INT64_C( 8445680144921179959), -INT64_C( 7542148702153512203) },
       INT64_C(  903531442767667756) },
    { {  INT64_C( 3637145276914019252), -INT64_C(   32793178687249362) },
       INT64_C( 3604352098226769890) },
    { {  INT64_C( 3315617138864759605), -INT64_C( 7698437500748760357) },
      -INT64_C( 4382820361884000752) },
    { {  INT64_C(  531690671119539666),  INT64_C( 6781484431495441238) },
       INT64_C( 7313175102614980904) },
    { { -INT64_C( 6685892954362718257),  INT64_C(  171241444717463785) },
      -INT64_C( 6514651509645254472) }
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_int64x2_t a = simde_vld1q_s64(test_vec[i].a);
    int64_t r = simde_vpaddd_s64(a);
    simde_assert_equal_i64(r, test_vec[i].r);
  }

  return 0;
#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_int64x2_t a = simde_test_arm_neon_random_i64x2();
    int64_t r = simde_vpaddd_s64(a);

    simde_test_arm_neon_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_codegen_write_i64(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpaddd_u64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    uint64_t a[2];
    uint64_t r;
  } test_vec[] = {
    { { UINT64_C( 4499407304093009580), UINT64_C(16703389208686402028) },
      UINT64_C( 2756052439069859992) },
    { { UINT64_C( 4283292125784539984), UINT64_C(16039886950525023914) },
      UINT64_C( 1876435002600012282) },
    { { UINT64_C(16392817832545147942), UINT64_C(  178272279460533909) },
      UINT64_C(16571090112005681851) },
    { { UINT64_C( 1195157480093259484), UINT64_C( 6112647135401021123) },
      UINT64_C( 7307804615494280607) },
    { { UINT64_C(17307917600836312920), UINT64_C(17518434202205470057) },
      UINT64_C(16379607729332231361) },
    { { UINT64_C( 9982199743952894226), UINT64_C( 4500597849519581939) },
      UINT64_C(14482797593472476165) },
    { { UINT64_C( 9727703847384451508), UINT64_C(10342444515853435517) },
      UINT64_C( 1623404289528335409) },
    { { UINT64_C(12594754767769032311), UINT64_C( 5917242409561836025) },
      UINT64_C(   65253103621316720) }
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_uint64x2_t a = simde_vld1q_u64(test_vec[i].a);
    uint64_t r = simde_vpaddd_u64(a);
    simde_assert_equal_u64(r, test_vec[i].r);
  }

  return 0;
#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_uint64x2_t a = simde_test_arm_neon_random_u64x2();
    uint64_t r = simde_vpaddd_u64(a);

    simde_test_arm_neon_write_u64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_codegen_write_u64(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpaddd_f64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    simde_float64_t a[2];
    simde_float64_t r;
  } test_vec[] = {
    { { SIMDE_FLOAT64_C(   734.68), SIMDE_FLOAT64_C(     0.95) },
      SIMDE_FLOAT64_C(   735.63) },
    { { SIMDE_FLOAT64_C(  -409.20), SIMDE_FLOAT64_C(  -823.56) },
      SIMDE_FLOAT64_C( -1232.76) },
    { { SIMDE_FLOAT64_C(   816.17), SIMDE_FLOAT64_C(   848.79) },
      SIMDE_FLOAT64_C(  1664.96) },
    { { SIMDE_FLOAT64_C(  -343.37), SIMDE_FLOAT64_C(   338.43) },
      SIMDE_FLOAT64_C(    -4.94) },
    { { SIMDE_FLOAT64_C(   575.98), SIMDE_FLOAT64_C(   110.52) },
      SIMDE_FLOAT64_C(   686.50) },
    { { SIMDE_FLOAT64_C(  -137.98), SIMDE_FLOAT64_C(   461.14) },
      SIMDE_FLOAT64_C(   323.16) },
    { { SIMDE_FLOAT64_C(   222.72), SIMDE_FLOAT64_C(   206.53) },
      SIMDE_FLOAT64_C(   429.25) },
    { { SIMDE_FLOAT64_C(   495.96), SIMDE_FLOAT64_C(   343.99) },
      SIMDE_FLOAT64_C(   839.95) }
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float64x2_t a = simde_vld1q_f64(test_vec[i].a);
    simde_float64_t r = simde_vpaddd_f64(a);
    simde_assert_equal_f64(r, test_vec[i].r, 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_float64x2_t a = simde_test_arm_neon_random_f64x2(-1000.0, 1000.0);
    simde_float64_t r = simde_vpaddd_f64(a);

    simde_test_arm_neon_write_f64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_codegen_write_f64(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vpadds_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    simde_float32_t a[2];
    simde_float32_t r;
  } test_vec[] = {
    { { SIMDE_FLOAT32_C(  -699.29), SIMDE_FLOAT32_C(   413.96) },
     SIMDE_FLOAT32_C(  -285.33) },
   { { SIMDE_FLOAT32_C(  -422.06), SIMDE_FLOAT32_C(   994.22) },
     SIMDE_FLOAT32_C(   572.16) },
   { { SIMDE_FLOAT32_C(  -850.43), SIMDE_FLOAT32_C(   944.36) },
     SIMDE_FLOAT32_C(    93.93) },
   { { SIMDE_FLOAT32_C(   451.20), SIMDE_FLOAT32_C(   627.33) },
     SIMDE_FLOAT32_C(  1078.53) },
   { { SIMDE_FLOAT32_C(   638.52), SIMDE_FLOAT32_C(   775.57) },
     SIMDE_FLOAT32_C(  1414.09) },
   { { SIMDE_FLOAT32_C(   409.26), SIMDE_FLOAT32_C(   998.59) },
     SIMDE_FLOAT32_C(  1407.85) },
   { { SIMDE_FLOAT32_C(    -9.19), SIMDE_FLOAT32_C(  -725.56) },
     SIMDE_FLOAT32_C(  -734.75) },
   { { SIMDE_FLOAT32_C(   224.23), SIMDE_FLOAT32_C(  -650.86) },
     SIMDE_FLOAT32_C(  -426.63) }
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float32x2_t a = simde_vld1_f32(test_vec[i].a);
    simde_float32_t r = simde_vpadds_f32(a);
    simde_assert_equal_f32(r, 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_float32_t r = simde_vpadds_f32(a);

    simde_test_arm_neon_write_f32x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_codegen_write_f32(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

SIMDE_TEST_FUNC_LIST_BEGIN
SIMDE_TEST_FUNC_LIST_ENTRY(vpadd_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vpadd_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vpadd_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vpadd_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vpadd_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vpadd_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vpadd_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vpadd_u32)

SIMDE_TEST_FUNC_LIST_ENTRY(vpaddq_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vpaddq_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vpaddq_f64)
SIMDE_TEST_FUNC_LIST_ENTRY(vpaddq_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vpaddq_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vpaddq_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vpaddq_s64)
SIMDE_TEST_FUNC_LIST_ENTRY(vpaddq_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vpaddq_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vpaddq_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vpaddq_u64)

SIMDE_TEST_FUNC_LIST_ENTRY(vpaddd_s64)
SIMDE_TEST_FUNC_LIST_ENTRY(vpaddd_u64)
SIMDE_TEST_FUNC_LIST_ENTRY(vpaddd_f64)
SIMDE_TEST_FUNC_LIST_ENTRY(vpadds_f32)
SIMDE_TEST_FUNC_LIST_END

#include "test-neon-footer.h"