Googletest 1.18 asks for CMake 3.13 or newer, so configuring the tests no longer warns that CMake compatibility below 3.10 is deprecated. Co-authored-by: Cursor <cursoragent@cursor.com>
593 lines
28 KiB
C
593 lines
28 KiB
C
#define SIMDE_TEST_ARM_NEON_INSN qdmlal_lane
|
|
|
|
#include "test-neon.h"
|
|
#include "../../../simde/arm/neon/qdmlal_lane.h"
|
|
|
|
SIMDE_DIAGNOSTIC_DISABLE_UNREACHABLE_
|
|
|
|
static int
|
|
test_simde_vqdmlalh_lane_s16 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
int32_t a[1];
|
|
int16_t b[1];
|
|
int16_t v[4];
|
|
int8_t lane;
|
|
int32_t r[1];
|
|
} test_vec[] = {
|
|
{ { -INT32_C( 928597325) },
|
|
{ INT16_C( 491) },
|
|
{ -INT16_C( 1892), INT16_C( 7957), INT16_C( 5108), -INT16_C( 4917)},
|
|
INT8_C( 1),
|
|
{ -INT32_C( 920783551) } },
|
|
{ { INT32_C( 955503274) },
|
|
{ INT16_C( 5989) },
|
|
{ INT16_C( 2544), INT16_C( 6322), -INT16_C( 3642), INT16_C( 6506)},
|
|
INT8_C( 3),
|
|
{ INT32_C(1033432142) } },
|
|
{ { -INT32_C( 114948833) },
|
|
{ -INT16_C( 1212) },
|
|
{ -INT16_C( 2485), INT16_C( 6915), INT16_C( 4401), -INT16_C( 4449)},
|
|
INT8_C( 2),
|
|
{ -INT32_C( 125616857) } },
|
|
{ { -INT32_C( 905358336) },
|
|
{ -INT16_C( 3455) },
|
|
{ INT16_C( 4546), INT16_C( 9051), -INT16_C( 2684), -INT16_C( 1201)},
|
|
INT8_C( 0),
|
|
{ -INT32_C( 936771196) } },
|
|
{ { -INT32_C( 126619894) },
|
|
{ -INT16_C( 5411) },
|
|
{ INT16_C( 2205), INT16_C( 7625), -INT16_C( 8915), -INT16_C( 429)},
|
|
INT8_C( 1),
|
|
{ -INT32_C( 209137644) } },
|
|
{ { INT32_C( 194201072) },
|
|
{ INT16_C( 1004) },
|
|
{ INT16_C( 9001), INT16_C( 4983), -INT16_C( 7323), INT16_C( 5349)},
|
|
INT8_C( 1),
|
|
{ INT32_C( 204206936) } },
|
|
{ { INT32_C( 708756366) },
|
|
{ -INT16_C( 9878) },
|
|
{ INT16_C( 4537), INT16_C( 4529), -INT16_C( 5439), -INT16_C( 1731)},
|
|
INT8_C( 0),
|
|
{ INT32_C( 619123394) } },
|
|
{ { -INT32_C( 380764463) },
|
|
{ -INT16_C( 1634) },
|
|
{ -INT16_C( 4899), INT16_C( 1026), -INT16_C( 4249), -INT16_C( 6523)},
|
|
INT8_C( 0),
|
|
{ -INT32_C( 364754531) } },
|
|
};
|
|
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
|
simde_int16x4_t v = simde_vld1_s16(test_vec[i].v);
|
|
int32_t r;
|
|
switch(test_vec[i].lane) {
|
|
case 0: r = simde_vqdmlalh_lane_s16(test_vec[i].a[0], test_vec[i].b[0], v, 0); break;
|
|
case 1: r = simde_vqdmlalh_lane_s16(test_vec[i].a[0], test_vec[i].b[0], v, 1); break;
|
|
case 2: r = simde_vqdmlalh_lane_s16(test_vec[i].a[0], test_vec[i].b[0], v, 2); break;
|
|
case 3: r = simde_vqdmlalh_lane_s16(test_vec[i].a[0], test_vec[i].b[0], v, 3); break;
|
|
default: HEDLEY_UNREACHABLE(); r = 0; break;
|
|
}
|
|
|
|
simde_assert_equal_i32(r, test_vec[i].r[0]);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
test_simde_vqdmlals_lane_s32 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
int64_t a[1];
|
|
int32_t b[1];
|
|
int32_t v[2];
|
|
int8_t lane;
|
|
int64_t r[1];
|
|
} test_vec[] = {
|
|
{ { INT64_C( 44508685950) },
|
|
{ -INT32_C( 979248) },
|
|
{ INT32_C( 943996), INT32_C( 693027)},
|
|
INT8_C( 1),
|
|
{ -INT64_C(1312781921442) } },
|
|
{ { INT64_C( 76828192571) },
|
|
{ -INT32_C( 730800) },
|
|
{ INT32_C( 448180), -INT32_C( 687279)},
|
|
INT8_C( 1),
|
|
{ INT64_C(1081355178971) } },
|
|
{ { INT64_C( 15972296819) },
|
|
{ -INT32_C( 166598) },
|
|
{ INT32_C( 434007), -INT32_C( 332523)},
|
|
INT8_C( 0),
|
|
{ -INT64_C( 128637099553) } },
|
|
{ { -INT64_C( 29112908142) },
|
|
{ -INT32_C( 890217) },
|
|
{ -INT32_C( 871566), INT32_C( 183981)},
|
|
INT8_C( 0),
|
|
{ INT64_C(1522652831502) } },
|
|
{ { -INT64_C( 66884081543) },
|
|
{ -INT32_C( 358235) },
|
|
{ -INT32_C( 199183), INT32_C( 166087)},
|
|
INT8_C( 0),
|
|
{ INT64_C( 75824562467) } },
|
|
{ { -INT64_C( 45375791253) },
|
|
{ INT32_C( 471327) },
|
|
{ INT32_C( 639915), INT32_C( 825301)},
|
|
INT8_C( 1),
|
|
{ INT64_C( 732597497601) } },
|
|
{ { INT64_C( 93826405589) },
|
|
{ -INT32_C( 99269) },
|
|
{ -INT32_C( 628747), -INT32_C( 507344)},
|
|
INT8_C( 1),
|
|
{ INT64_C( 194553468661) } },
|
|
{ { INT64_C( 17271492226) },
|
|
{ -INT32_C( 717291) },
|
|
{ INT32_C( 310553), -INT32_C( 927821)},
|
|
INT8_C( 0),
|
|
{ -INT64_C( 428242251620) } },
|
|
};
|
|
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
|
simde_int32x2_t v = simde_vld1_s32(test_vec[i].v);
|
|
int64_t r;
|
|
switch(test_vec[i].lane) {
|
|
case 0: r = simde_vqdmlals_lane_s32(test_vec[i].a[0], test_vec[i].b[0], v, 0); break;
|
|
case 1: r = simde_vqdmlals_lane_s32(test_vec[i].a[0], test_vec[i].b[0], v, 1); break;
|
|
default: HEDLEY_UNREACHABLE(); r = 0; break;
|
|
}
|
|
|
|
simde_assert_equal_i64(r, test_vec[i].r[0]);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
test_simde_vqdmlalh_laneq_s16 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
int32_t a[1];
|
|
int16_t b[1];
|
|
int16_t v[8];
|
|
int8_t lane;
|
|
int32_t r[1];
|
|
} test_vec[] = {
|
|
{ { -INT32_C( 128876435) },
|
|
{ INT16_C( 8167) },
|
|
{ INT16_C( 4367), INT16_C( 5524), INT16_C( 3500), INT16_C( 7833),
|
|
-INT16_C( 1658), INT16_C( 5756), -INT16_C( 3725), -INT16_C( 7243)},
|
|
INT8_C( 6),
|
|
{ -INT32_C( 189720585) } },
|
|
{ { -INT32_C( 832887394) },
|
|
{ -INT16_C( 5992) },
|
|
{ INT16_C( 718), INT16_C( 1503), -INT16_C( 1635), -INT16_C( 9088),
|
|
INT16_C( 2951), INT16_C( 9114), -INT16_C( 2329), INT16_C( 5502)},
|
|
INT8_C( 5),
|
|
{ -INT32_C( 942109570) } },
|
|
{ { -INT32_C( 533589683) },
|
|
{ INT16_C( 8157) },
|
|
{ -INT16_C( 170), -INT16_C( 7579), -INT16_C( 5647), -INT16_C( 8798),
|
|
INT16_C( 9007), -INT16_C( 1908), INT16_C( 3466), INT16_C( 1187)},
|
|
INT8_C( 2),
|
|
{ -INT32_C( 625714841) } },
|
|
{ { -INT32_C( 312222225) },
|
|
{ -INT16_C( 7476) },
|
|
{ -INT16_C( 8422), -INT16_C( 5973), INT16_C( 9555), -INT16_C( 2689),
|
|
INT16_C( 9787), -INT16_C( 6417), -INT16_C( 2133), INT16_C( 6433)},
|
|
INT8_C( 2),
|
|
{ -INT32_C( 455088585) } },
|
|
{ { INT32_C( 317735354) },
|
|
{ INT16_C( 8102) },
|
|
{ INT16_C( 3790), -INT16_C( 8283), -INT16_C( 6754), -INT16_C( 8752),
|
|
-INT16_C( 9863), -INT16_C( 1371), INT16_C( 6147), INT16_C( 2844)},
|
|
INT8_C( 4),
|
|
{ INT32_C( 157915302) } },
|
|
{ { INT32_C( 141559338) },
|
|
{ INT16_C( 8282) },
|
|
{ INT16_C( 2436), INT16_C( 4026), INT16_C( 7400), INT16_C( 3893),
|
|
-INT16_C( 3891), -INT16_C( 8306), INT16_C( 1775), INT16_C( 6062)},
|
|
INT8_C( 5),
|
|
{ INT32_C( 3978754) } },
|
|
{ { -INT32_C( 417376500) },
|
|
{ INT16_C( 3995) },
|
|
{ INT16_C( 5383), INT16_C( 9262), -INT16_C( 5678), INT16_C( 3658),
|
|
INT16_C( 4019), -INT16_C( 9278), -INT16_C( 5962), INT16_C( 9759)},
|
|
INT8_C( 3),
|
|
{ -INT32_C( 388149080) } },
|
|
{ { -INT32_C( 753942094) },
|
|
{ INT16_C( 6863) },
|
|
{ -INT16_C( 2747), -INT16_C( 2461), -INT16_C( 4631), INT16_C( 2782),
|
|
INT16_C( 2898), -INT16_C( 6022), INT16_C( 9230), -INT16_C( 3066)},
|
|
INT8_C( 0),
|
|
{ -INT32_C( 791647416) } },
|
|
};
|
|
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
|
simde_int16x8_t v = simde_vld1q_s16(test_vec[i].v);
|
|
int32_t r;
|
|
switch(test_vec[i].lane) {
|
|
case 0: r = simde_vqdmlalh_laneq_s16(test_vec[i].a[0], test_vec[i].b[0], v, 0); break;
|
|
case 1: r = simde_vqdmlalh_laneq_s16(test_vec[i].a[0], test_vec[i].b[0], v, 1); break;
|
|
case 2: r = simde_vqdmlalh_laneq_s16(test_vec[i].a[0], test_vec[i].b[0], v, 2); break;
|
|
case 3: r = simde_vqdmlalh_laneq_s16(test_vec[i].a[0], test_vec[i].b[0], v, 3); break;
|
|
case 4: r = simde_vqdmlalh_laneq_s16(test_vec[i].a[0], test_vec[i].b[0], v, 4); break;
|
|
case 5: r = simde_vqdmlalh_laneq_s16(test_vec[i].a[0], test_vec[i].b[0], v, 5); break;
|
|
case 6: r = simde_vqdmlalh_laneq_s16(test_vec[i].a[0], test_vec[i].b[0], v, 6); break;
|
|
case 7: r = simde_vqdmlalh_laneq_s16(test_vec[i].a[0], test_vec[i].b[0], v, 7); break;
|
|
default: HEDLEY_UNREACHABLE(); r = 0; break;
|
|
}
|
|
|
|
simde_assert_equal_i32(r, test_vec[i].r[0]);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
test_simde_vqdmlals_laneq_s32 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
int64_t a[1];
|
|
int32_t b[1];
|
|
int32_t v[4];
|
|
int8_t lane;
|
|
int64_t r[1];
|
|
} test_vec[] = {
|
|
{ { -INT64_C( 559402566429) },
|
|
{ -INT32_C( 136817) },
|
|
{ INT32_C( 972146), INT32_C( 645928), INT32_C( 80253), -INT32_C( 53618)},
|
|
INT8_C( 2),
|
|
{ -INT64_C( 581362515831) } },
|
|
{ { INT64_C( 968324900099) },
|
|
{ -INT32_C( 504386) },
|
|
{ INT32_C( 754043), -INT32_C( 755209), -INT32_C( 264308), -INT32_C( 501739)},
|
|
INT8_C( 3),
|
|
{ INT64_C(1474465154607) } },
|
|
{ { -INT64_C( 912937153168) },
|
|
{ INT32_C( 562877) },
|
|
{ -INT32_C( 738047), -INT32_C( 379351), INT32_C( 248340), -INT32_C( 343121)},
|
|
INT8_C( 0),
|
|
{ -INT64_C(1743796515606) } },
|
|
{ { INT64_C( 330634123075) },
|
|
{ -INT32_C( 665378) },
|
|
{ -INT32_C( 343916), -INT32_C( 12921), -INT32_C( 389835), INT32_C( 753717)},
|
|
INT8_C( 1),
|
|
{ INT64_C( 347828821351) } },
|
|
{ { INT64_C( 97780480309) },
|
|
{ -INT32_C( 309734) },
|
|
{ INT32_C( 174702), -INT32_C( 633437), -INT32_C( 801887), INT32_C( 48250)},
|
|
INT8_C( 3),
|
|
{ INT64_C( 67891149309) } },
|
|
{ { -INT64_C( 960108357320) },
|
|
{ -INT32_C( 552347) },
|
|
{ INT32_C( 199505), INT32_C( 277114), -INT32_C( 377026), -INT32_C( 578807)},
|
|
INT8_C( 2),
|
|
{ -INT64_C( 543609997276) } },
|
|
{ { INT64_C( 261824341322) },
|
|
{ INT32_C( 531703) },
|
|
{ INT32_C( 902495), INT32_C( 897319), -INT32_C( 878787), -INT32_C( 407825)},
|
|
INT8_C( 2),
|
|
{ -INT64_C( 672683027200) } },
|
|
{ { INT64_C( 147822779320) },
|
|
{ -INT32_C( 289635) },
|
|
{ -INT32_C( 217936), -INT32_C( 918247), -INT32_C( 237518), -INT32_C( 18738)},
|
|
INT8_C( 0),
|
|
{ INT64_C( 274066566040) } },
|
|
};
|
|
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
|
simde_int32x4_t v = simde_vld1q_s32(test_vec[i].v);
|
|
int64_t r;
|
|
switch(test_vec[i].lane) {
|
|
case 0: r = simde_vqdmlals_laneq_s32(test_vec[i].a[0], test_vec[i].b[0], v, 0); break;
|
|
case 1: r = simde_vqdmlals_laneq_s32(test_vec[i].a[0], test_vec[i].b[0], v, 1); break;
|
|
case 2: r = simde_vqdmlals_laneq_s32(test_vec[i].a[0], test_vec[i].b[0], v, 2); break;
|
|
case 3: r = simde_vqdmlals_laneq_s32(test_vec[i].a[0], test_vec[i].b[0], v, 3); break;
|
|
default: HEDLEY_UNREACHABLE(); r = 0; break;
|
|
}
|
|
|
|
simde_assert_equal_i64(r, test_vec[i].r[0]);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
test_simde_vqdmlal_lane_s16 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
int32_t a[4];
|
|
int16_t b[4];
|
|
int16_t v[4];
|
|
int8_t lane;
|
|
int32_t r[4];
|
|
} test_vec[] = {
|
|
{ { -INT32_C( 425772172), -INT32_C( 870450928), -INT32_C( 353638269), INT32_C( 869320330) },
|
|
{ INT16_C( 5757), INT16_C( 3583), -INT16_C( 7892), INT16_C( 5774) },
|
|
{ -INT16_C( 6124), -INT16_C( 2665), -INT16_C( 748), -INT16_C( 4559)},
|
|
INT8_C( 0),
|
|
{ -INT32_C( 496283908), -INT32_C( 914335512), -INT32_C( 256977053), INT32_C( 798600378) } },
|
|
{ { INT32_C( 264890360), -INT32_C( 132935996), -INT32_C( 765529797), -INT32_C( 209964978) },
|
|
{ -INT16_C( 6125), -INT16_C( 1669), -INT16_C( 9417), -INT16_C( 5662) },
|
|
{ -INT16_C( 4094), -INT16_C( 4945), INT16_C( 1153), -INT16_C( 1279)},
|
|
INT8_C( 2),
|
|
{ INT32_C( 250766110), -INT32_C( 136784710), -INT32_C( 787245399), -INT32_C( 223021550) } },
|
|
{ { -INT32_C( 687037777), INT32_C( 350547), -INT32_C( 917055825), INT32_C( 467930951) },
|
|
{ INT16_C( 8), -INT16_C( 7260), -INT16_C( 7320), INT16_C( 6398) },
|
|
{ INT16_C( 2317), INT16_C( 2456), INT16_C( 3713), -INT16_C( 8705)},
|
|
INT8_C( 3),
|
|
{ -INT32_C( 687177057), INT32_C( 126747147), -INT32_C( 789614625), INT32_C( 356541771) } },
|
|
{ { INT32_C( 831645449), -INT32_C( 458276988), -INT32_C( 533944055), -INT32_C( 897913350) },
|
|
{ INT16_C( 2766), INT16_C( 6819), INT16_C( 570), -INT16_C( 6948) },
|
|
{ INT16_C( 7445), INT16_C( 6907), INT16_C( 2870), INT16_C( 4578)},
|
|
INT8_C( 2),
|
|
{ INT32_C( 847522289), -INT32_C( 419135928), -INT32_C( 530672255), -INT32_C( 937794870) } },
|
|
{ { INT32_C( 215114780), INT32_C( 289582821), -INT32_C( 183295087), INT32_C( 400458546) },
|
|
{ -INT16_C( 4761), -INT16_C( 5175), -INT16_C( 7164), -INT16_C( 9471) },
|
|
{ INT16_C( 2309), -INT16_C( 9504), INT16_C( 2390), -INT16_C( 501)},
|
|
INT8_C( 3),
|
|
{ INT32_C( 219885302), INT32_C( 294768171), -INT32_C( 176116759), INT32_C( 409948488) } },
|
|
{ { -INT32_C( 228273077), -INT32_C( 573738564), INT32_C( 805346111), INT32_C( 451542412) },
|
|
{ INT16_C( 5915), -INT16_C( 5948), -INT16_C( 5277), -INT16_C( 1081) },
|
|
{ -INT16_C( 3952), -INT16_C( 8119), -INT16_C( 3455), -INT16_C( 3040)},
|
|
INT8_C( 3),
|
|
{ -INT32_C( 264236277), -INT32_C( 537574724), INT32_C( 837430271), INT32_C( 458114892) } },
|
|
{ { INT32_C( 814789159), -INT32_C( 815174192), INT32_C( 796268231), -INT32_C( 450444009) },
|
|
{ -INT16_C( 7389), INT16_C( 8929), INT16_C( 9568), INT16_C( 9997) },
|
|
{ -INT16_C( 8028), INT16_C( 586), -INT16_C( 5375), -INT16_C( 1471)},
|
|
INT8_C( 1),
|
|
{ INT32_C( 806129251), -INT32_C( 804709404), INT32_C( 807481927), -INT32_C( 438727525) } },
|
|
{ { -INT32_C( 765711601), INT32_C( 489237452), -INT32_C( 297322404), -INT32_C( 918947291) },
|
|
{ -INT16_C( 5434), INT16_C( 495), INT16_C( 8036), -INT16_C( 9574) },
|
|
{ -INT16_C( 7119), -INT16_C( 6426), INT16_C( 5367), -INT16_C( 6430)},
|
|
INT8_C( 3),
|
|
{ -INT32_C( 695830361), INT32_C( 482871752), -INT32_C( 400665364), -INT32_C( 795825651) } },
|
|
};
|
|
|
|
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_int16x4_t b = simde_vld1_s16(test_vec[i].b);
|
|
simde_int16x4_t v = simde_vld1_s16(test_vec[i].v);
|
|
simde_int32x4_t r;
|
|
switch(test_vec[i].lane) {
|
|
case 0: r = simde_vqdmlal_lane_s16(a, b, v, 0); break;
|
|
case 1: r = simde_vqdmlal_lane_s16(a, b, v, 1); break;
|
|
case 2: r = simde_vqdmlal_lane_s16(a, b, v, 2); break;
|
|
case 3: r = simde_vqdmlal_lane_s16(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_vqdmlal_lane_s32 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
int64_t a[2];
|
|
int32_t b[2];
|
|
int32_t v[2];
|
|
int8_t lane;
|
|
int64_t r[2];
|
|
} test_vec[] = {
|
|
{ { -INT64_C( 589163751624), INT64_C( 429706216903) },
|
|
{ INT32_C( 397), -INT32_C( 957326) },
|
|
{ -INT32_C( 883062), -INT32_C( 410472)},
|
|
INT8_C( 0),
|
|
{ -INT64_C( 589864902852), INT64_C(2120462641327) } },
|
|
{ { -INT64_C( 656392608678), -INT64_C( 503973207746) },
|
|
{ -INT32_C( 848069), INT32_C( 771551) },
|
|
{ -INT32_C( 629006), INT32_C( 576960)},
|
|
INT8_C( 1),
|
|
{ -INT64_C(1634996389158), INT64_C( 386334922174) } },
|
|
{ { -INT64_C( 95263852864), INT64_C( 665780368583) },
|
|
{ INT32_C( 603158), INT32_C( 943104) },
|
|
{ INT32_C( 202514), INT32_C( 9210)},
|
|
INT8_C( 0),
|
|
{ INT64_C( 149032025560), INT64_C(1047763895495) } },
|
|
{ { INT64_C( 126598555336), INT64_C( 273800393016) },
|
|
{ INT32_C( 526071), -INT32_C( 456475) },
|
|
{ -INT32_C( 63146), -INT32_C( 989530)},
|
|
INT8_C( 0),
|
|
{ INT64_C( 60159996604), INT64_C( 331449533716) } },
|
|
{ { INT64_C( 524521550518), -INT64_C( 231467718925) },
|
|
{ INT32_C( 386981), INT32_C( 504150) },
|
|
{ -INT32_C( 444746), INT32_C( 421317)},
|
|
INT8_C( 1),
|
|
{ INT64_C( 850604898472), INT64_C( 193346212175) } },
|
|
{ { INT64_C( 761045675378), -INT64_C( 119396145499) },
|
|
{ -INT32_C( 718853), INT32_C( 835642) },
|
|
{ INT32_C( 976927), INT32_C( 57882)},
|
|
INT8_C( 0),
|
|
{ -INT64_C( 643488134084), INT64_C(1513326318769) } },
|
|
{ { -INT64_C( 342414590564), -INT64_C( 156288463020) },
|
|
{ -INT32_C( 618980), -INT32_C( 442132) },
|
|
{ INT32_C( 799522), -INT32_C( 56231)},
|
|
INT8_C( 0),
|
|
{ -INT64_C(1332190845684), -INT64_C( 863276984828) } },
|
|
{ { INT64_C( 464983707360), INT64_C( 656959310680) },
|
|
{ -INT32_C( 986179), -INT32_C( 571141) },
|
|
{ INT32_C( 961008), -INT32_C( 49136)},
|
|
INT8_C( 1),
|
|
{ INT64_C( 561897490048), INT64_C( 713086479032) } },
|
|
};
|
|
|
|
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_int32x2_t b = simde_vld1_s32(test_vec[i].b);
|
|
simde_int32x2_t v = simde_vld1_s32(test_vec[i].v);
|
|
simde_int64x2_t r;
|
|
switch(test_vec[i].lane) {
|
|
case 0: r = simde_vqdmlal_lane_s32(a, b, v, 0); break;
|
|
case 1: r = simde_vqdmlal_lane_s32(a, b, v, 1); break;
|
|
default: HEDLEY_UNREACHABLE(); r = simde_vdupq_n_s64(0); break;
|
|
}
|
|
|
|
simde_test_arm_neon_assert_equal_i64x2(r, simde_vld1q_s64(test_vec[i].r));
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
test_simde_vqdmlal_laneq_s16 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
int32_t a[4];
|
|
int16_t b[4];
|
|
int16_t v[8];
|
|
int8_t lane;
|
|
int32_t r[4];
|
|
} test_vec[] = {
|
|
{ { INT32_C( 568155650), INT32_C( 543219523), INT32_C( 939396263), -INT32_C( 713646577) },
|
|
{ -INT16_C( 3287), INT16_C( 7702), -INT16_C( 304), -INT16_C( 7258) },
|
|
{ -INT16_C( 421), INT16_C( 9798), INT16_C( 7292), INT16_C( 3391),
|
|
-INT16_C( 4377), INT16_C( 6560), INT16_C( 6599), INT16_C( 6832)},
|
|
INT8_C( 1),
|
|
{ INT32_C( 503743598), INT32_C( 694147915), INT32_C( 933439079), -INT32_C( 855874345) } },
|
|
{ { -INT32_C( 851965500), INT32_C( 262689683), INT32_C( 937835367), -INT32_C( 937323231) },
|
|
{ -INT16_C( 9936), INT16_C( 9725), INT16_C( 5485), INT16_C( 1635) },
|
|
{ -INT16_C( 1806), -INT16_C( 1922), -INT16_C( 2032), INT16_C( 6913),
|
|
-INT16_C( 1575), -INT16_C( 3999), INT16_C( 5066), INT16_C( 755)},
|
|
INT8_C( 2),
|
|
{ -INT32_C( 811585596), INT32_C( 223167283), INT32_C( 915544327), -INT32_C( 943967871) } },
|
|
{ { -INT32_C( 476015894), INT32_C( 407431452), -INT32_C( 336240585), -INT32_C( 353356841) },
|
|
{ INT16_C( 8127), -INT16_C( 1357), INT16_C( 1858), INT16_C( 944) },
|
|
{ -INT16_C( 6845), INT16_C( 9162), INT16_C( 8682), INT16_C( 4334),
|
|
-INT16_C( 3185), -INT16_C( 9666), INT16_C( 8724), INT16_C( 7844)},
|
|
INT8_C( 4),
|
|
{ -INT32_C( 527784884), INT32_C( 416075542), -INT32_C( 348076045), -INT32_C( 359370121) } },
|
|
{ { -INT32_C( 485224282), INT32_C( 706288413), INT32_C( 346759391), -INT32_C( 394498051) },
|
|
{ INT16_C( 2755), -INT16_C( 2327), INT16_C( 3952), INT16_C( 2153) },
|
|
{ -INT16_C( 8066), INT16_C( 299), -INT16_C( 1666), INT16_C( 5037),
|
|
INT16_C( 626), -INT16_C( 6025), INT16_C( 8365), INT16_C( 6783)},
|
|
INT8_C( 2),
|
|
{ -INT32_C( 494403942), INT32_C( 714041977), INT32_C( 333591327), -INT32_C( 401671847) } },
|
|
{ { -INT32_C( 735474031), -INT32_C( 433366471), INT32_C( 857935216), -INT32_C( 171303334) },
|
|
{ -INT16_C( 656), INT16_C( 8961), INT16_C( 7026), -INT16_C( 8637) },
|
|
{ -INT16_C( 3899), INT16_C( 3332), INT16_C( 4545), INT16_C( 6918),
|
|
-INT16_C( 8654), INT16_C( 2094), -INT16_C( 8807), -INT16_C( 5700)},
|
|
INT8_C( 6),
|
|
{ -INT32_C( 723919247), -INT32_C( 591205525), INT32_C( 734179252), -INT32_C( 19171216) } },
|
|
{ { INT32_C( 857914823), INT32_C( 134100517), -INT32_C( 671734036), -INT32_C( 821625611) },
|
|
{ INT16_C( 2826), -INT16_C( 2892), -INT16_C( 3258), INT16_C( 2609) },
|
|
{ -INT16_C( 8207), INT16_C( 2510), INT16_C( 6448), -INT16_C( 4161),
|
|
-INT16_C( 2965), -INT16_C( 4560), -INT16_C( 9611), -INT16_C( 1543)},
|
|
INT8_C( 5),
|
|
{ INT32_C( 832141703), INT32_C( 160475557), -INT32_C( 642021076), -INT32_C( 845419691) } },
|
|
{ { INT32_C( 180325523), INT32_C( 618326408), -INT32_C( 602592055), -INT32_C( 884991036) },
|
|
{ INT16_C( 263), -INT16_C( 6743), INT16_C( 7649), -INT16_C( 9877) },
|
|
{ INT16_C( 4276), -INT16_C( 5506), -INT16_C( 6679), INT16_C( 7635),
|
|
INT16_C( 6643), -INT16_C( 419), INT16_C( 6279), -INT16_C( 5078)},
|
|
INT8_C( 5),
|
|
{ INT32_C( 180105129), INT32_C( 623977042), -INT32_C( 609001917), -INT32_C( 876714110) } },
|
|
{ { INT32_C( 994862348), -INT32_C( 973583462), -INT32_C( 498991883), INT32_C( 730031301) },
|
|
{ INT16_C( 6654), INT16_C( 3001), INT16_C( 265), -INT16_C( 4764) },
|
|
{ INT16_C( 5869), -INT16_C( 4638), INT16_C( 6797), INT16_C( 7920),
|
|
-INT16_C( 7423), INT16_C( 3231), -INT16_C( 6303), INT16_C( 9659)},
|
|
INT8_C( 6),
|
|
{ INT32_C( 910982024), -INT32_C(1011414068), -INT32_C( 502332473), INT32_C( 790086285) } },
|
|
};
|
|
|
|
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_int16x4_t b = simde_vld1_s16(test_vec[i].b);
|
|
simde_int16x8_t v = simde_vld1q_s16(test_vec[i].v);
|
|
simde_int32x4_t r;
|
|
switch(test_vec[i].lane) {
|
|
case 0: r = simde_vqdmlal_laneq_s16(a, b, v, 0); break;
|
|
case 1: r = simde_vqdmlal_laneq_s16(a, b, v, 1); break;
|
|
case 2: r = simde_vqdmlal_laneq_s16(a, b, v, 2); break;
|
|
case 3: r = simde_vqdmlal_laneq_s16(a, b, v, 3); break;
|
|
case 4: r = simde_vqdmlal_laneq_s16(a, b, v, 4); break;
|
|
case 5: r = simde_vqdmlal_laneq_s16(a, b, v, 5); break;
|
|
case 6: r = simde_vqdmlal_laneq_s16(a, b, v, 6); break;
|
|
case 7: r = simde_vqdmlal_laneq_s16(a, b, v, 7); 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_vqdmlal_laneq_s32 (SIMDE_MUNIT_TEST_ARGS) {
|
|
static const struct {
|
|
int64_t a[2];
|
|
int32_t b[2];
|
|
int32_t v[4];
|
|
int8_t lane;
|
|
int64_t r[2];
|
|
} test_vec[] = {
|
|
{ { INT64_C( 86143499926), INT64_C( 10686042104) },
|
|
{ INT32_C( 597840), INT32_C( 362874) },
|
|
{ INT32_C( 15572), -INT32_C( 288916), -INT32_C( 180511), -INT32_C( 121773)},
|
|
INT8_C( 0),
|
|
{ INT64_C( 104762628886), INT64_C( 21987389960) } },
|
|
{ { INT64_C( 70923230602), INT64_C( 22590881023) },
|
|
{ INT32_C( 491373), -INT32_C( 871823) },
|
|
{ INT32_C( 48311), INT32_C( 196262), INT32_C( 730961), INT32_C( 909459)},
|
|
INT8_C( 2),
|
|
{ INT64_C( 789272229508), -INT64_C(1251946342783) } },
|
|
{ { INT64_C( 23973086943), -INT64_C( 44722868031) },
|
|
{ -INT32_C( 898633), -INT32_C( 887236) },
|
|
{ INT32_C( 659525), -INT32_C( 85043), -INT32_C( 38786), INT32_C( 50165)},
|
|
INT8_C( 1),
|
|
{ INT64_C( 176817979381), INT64_C( 106183554265) } },
|
|
{ { INT64_C( 18816198374), INT64_C( 4696687039) },
|
|
{ INT32_C( 338910), INT32_C( 598815) },
|
|
{ -INT32_C( 787473), INT32_C( 671299), -INT32_C( 254311), INT32_C( 797400)},
|
|
INT8_C( 3),
|
|
{ INT64_C( 559309866374), INT64_C( 959686849039) } },
|
|
{ { INT64_C( 23088482966), -INT64_C( 37015946585) },
|
|
{ -INT32_C( 664356), INT32_C( 501139) },
|
|
{ -INT32_C( 892684), -INT32_C( 991933), INT32_C( 599568), INT32_C( 259352)},
|
|
INT8_C( 2),
|
|
{ -INT64_C( 773564713450), INT64_C( 563917869319) } },
|
|
{ { -INT64_C( 81827515540), INT64_C( 77367027948) },
|
|
{ -INT32_C( 160156), INT32_C( 198091) },
|
|
{ INT32_C( 635010), INT32_C( 938868), INT32_C( 465028), INT32_C( 201136)},
|
|
INT8_C( 2),
|
|
{ -INT64_C( 230781564276), INT64_C( 261602751044) } },
|
|
{ { INT64_C( 72614402642), INT64_C( 71956458345) },
|
|
{ INT32_C( 548307), INT32_C( 359931) },
|
|
{ INT32_C( 77396), INT32_C( 201469), -INT32_C( 468037), INT32_C( 993136)},
|
|
INT8_C( 1),
|
|
{ INT64_C( 293548128608), INT64_C( 216986335623) } },
|
|
{ { INT64_C( 54757095308), -INT64_C( 78647681491) },
|
|
{ -INT32_C( 391360), INT32_C( 956876) },
|
|
{ -INT32_C( 57677), -INT32_C( 975727), INT32_C( 913570), INT32_C( 949988)},
|
|
INT8_C( 0),
|
|
{ INT64_C( 99902036748), -INT64_C( 189027155595) } },
|
|
};
|
|
|
|
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_int32x2_t b = simde_vld1_s32(test_vec[i].b);
|
|
simde_int32x4_t v = simde_vld1q_s32(test_vec[i].v);
|
|
simde_int64x2_t r;
|
|
switch(test_vec[i].lane) {
|
|
case 0: r = simde_vqdmlal_laneq_s32(a, b, v, 0); break;
|
|
case 1: r = simde_vqdmlal_laneq_s32(a, b, v, 1); break;
|
|
case 2: r = simde_vqdmlal_laneq_s32(a, b, v, 2); break;
|
|
case 3: r = simde_vqdmlal_laneq_s32(a, b, v, 3); break;
|
|
default: HEDLEY_UNREACHABLE(); r = simde_vdupq_n_s64(0); break;
|
|
}
|
|
|
|
simde_test_arm_neon_assert_equal_i64x2(r, simde_vld1q_s64(test_vec[i].r));
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
SIMDE_TEST_FUNC_LIST_BEGIN
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vqdmlalh_lane_s16)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vqdmlals_lane_s32)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vqdmlalh_laneq_s16)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vqdmlals_laneq_s32)
|
|
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vqdmlal_lane_s16)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vqdmlal_lane_s32)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vqdmlal_laneq_s16)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vqdmlal_laneq_s32)
|
|
SIMDE_TEST_FUNC_LIST_END
|
|
|
|
#include "test-neon-footer.h"
|