128 lines
7.1 KiB
C
128 lines
7.1 KiB
C
|
|
#define SIMDE_TEST_ARM_NEON_INSN qdmlsl_high_n
|
||
|
|
|
||
|
|
#include "test-neon.h"
|
||
|
|
#include "../../../simde/arm/neon/qdmlsl_high_n.h"
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vqdmlsl_high_n_s16 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
static const struct {
|
||
|
|
int32_t a[4];
|
||
|
|
int16_t b[8];
|
||
|
|
int16_t c;
|
||
|
|
int32_t r[4];
|
||
|
|
} test_vec[] = {
|
||
|
|
{ { -INT32_C( 655584482), -INT32_C( 721040519), -INT32_C( 4516362), INT32_C( 510063637) },
|
||
|
|
{ -INT16_C( 5717), INT16_C( 6177), INT16_C( 153), -INT16_C( 1588),
|
||
|
|
-INT16_C( 6665), INT16_C( 6259), INT16_C( 3384), INT16_C( 8410) },
|
||
|
|
-INT16_C( 9983),
|
||
|
|
{ -INT32_C( 788657872), -INT32_C( 596073325), INT32_C( 63048582), INT32_C( 677977697) } },
|
||
|
|
{ { INT32_C( 443613837), -INT32_C( 161043501), INT32_C( 110704618), -INT32_C( 962257269) },
|
||
|
|
{ INT16_C( 59), -INT16_C( 1856), INT16_C( 4217), INT16_C( 3280),
|
||
|
|
-INT16_C( 6369), -INT16_C( 8539), INT16_C( 8599), -INT16_C( 1395) },
|
||
|
|
-INT16_C( 6689),
|
||
|
|
{ INT32_C( 358409355), -INT32_C( 275278243), INT32_C( 225742040), -INT32_C( 980919579) } },
|
||
|
|
{ { -INT32_C( 851285066), INT32_C( 392036614), -INT32_C( 390856728), -INT32_C( 522161257) },
|
||
|
|
{ -INT16_C( 1292), -INT16_C( 7545), INT16_C( 2123), INT16_C( 132),
|
||
|
|
INT16_C( 4355), INT16_C( 5159), -INT16_C( 3713), INT16_C( 4367) },
|
||
|
|
-INT16_C( 8562),
|
||
|
|
{ -INT32_C( 776710046), INT32_C( 480379330), -INT32_C( 454438140), -INT32_C( 447380749) } },
|
||
|
|
{ { INT32_C( 528779912), INT32_C( 848404208), INT32_C( 109131611), -INT32_C( 774639392) },
|
||
|
|
{ -INT16_C( 3475), INT16_C( 3429), INT16_C( 3780), -INT16_C( 9623),
|
||
|
|
-INT16_C( 9851), INT16_C( 5785), -INT16_C( 5027), -INT16_C( 2381) },
|
||
|
|
INT16_C( 3357),
|
||
|
|
{ INT32_C( 594919526), INT32_C( 809563718), INT32_C( 142882889), -INT32_C( 758653358) } },
|
||
|
|
{ { INT32_C( 195157916), -INT32_C( 601064983), INT32_C( 339151195), INT32_C( 530998669) },
|
||
|
|
{ -INT16_C( 4660), -INT16_C( 7367), -INT16_C( 3008), INT16_C( 517),
|
||
|
|
INT16_C( 2165), INT16_C( 7141), INT16_C( 5136), -INT16_C( 5170) },
|
||
|
|
-INT16_C( 8388),
|
||
|
|
{ INT32_C( 231477956), -INT32_C( 481267567), INT32_C( 425312731), INT32_C( 444266749) } },
|
||
|
|
{ { -INT32_C( 300840527), -INT32_C( 869355563), INT32_C( 235756236), -INT32_C( 556959564) },
|
||
|
|
{ -INT16_C( 4759), -INT16_C( 2892), -INT16_C( 4998), -INT16_C( 970),
|
||
|
|
INT16_C( 3072), INT16_C( 8931), -INT16_C( 6658), INT16_C( 3886) },
|
||
|
|
-INT16_C( 558),
|
||
|
|
{ -INT32_C( 297412175), -INT32_C( 859388567), INT32_C( 228325908), -INT32_C( 552622788) } },
|
||
|
|
{ { INT32_C( 889226968), INT32_C( 577849988), INT32_C( 511737493), INT32_C( 820971206) },
|
||
|
|
{ INT16_C( 2514), -INT16_C( 9068), -INT16_C( 8024), -INT16_C( 6544),
|
||
|
|
-INT16_C( 9798), -INT16_C( 4286), -INT16_C( 8686), INT16_C( 9288) },
|
||
|
|
INT16_C( 8725),
|
||
|
|
{ INT32_C( 1060202068), INT32_C( 652640688), INT32_C( 663308193), INT32_C( 658895606) } },
|
||
|
|
{ { INT32_C( 999975609), INT32_C( 62995935), INT32_C( 262692963), INT32_C( 517089321) },
|
||
|
|
{ INT16_C( 6627), INT16_C( 7183), -INT16_C( 4468), INT16_C( 2605),
|
||
|
|
-INT16_C( 9265), INT16_C( 3099), -INT16_C( 1349), -INT16_C( 6470) },
|
||
|
|
-INT16_C( 6407),
|
||
|
|
{ INT32_C( 881253899), INT32_C( 102706521), INT32_C( 245406877), INT32_C( 434182741) } },
|
||
|
|
};
|
||
|
|
|
||
|
|
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_int16x8_t b = simde_vld1q_s16(test_vec[i].b);
|
||
|
|
int16_t c = test_vec[i].c;
|
||
|
|
simde_int32x4_t r = simde_vqdmlsl_high_n_s16(a, b, c);
|
||
|
|
|
||
|
|
simde_test_arm_neon_assert_equal_i32x4(r, simde_vld1q_s32(test_vec[i].r));
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
static int
|
||
|
|
test_simde_vqdmlsl_high_n_s32 (SIMDE_MUNIT_TEST_ARGS) {
|
||
|
|
static const struct {
|
||
|
|
int64_t a[2];
|
||
|
|
int32_t b[4];
|
||
|
|
int32_t c;
|
||
|
|
int64_t r[2];
|
||
|
|
} test_vec[] = {
|
||
|
|
{ { -INT64_C( 924633394176), -INT64_C( 580110049271) },
|
||
|
|
{ INT32_C( 794833), INT32_C( 660637), -INT32_C( 707676), INT32_C( 154834) },
|
||
|
|
INT32_C( 120564),
|
||
|
|
{ -INT64_C( 753992895648), -INT64_C( 617444862023) } },
|
||
|
|
{ { INT64_C( 582717418070), -INT64_C( 391739747873) },
|
||
|
|
{ -INT32_C( 520175), -INT32_C( 988116), INT32_C( 599353), -INT32_C( 906696) },
|
||
|
|
-INT32_C( 350146),
|
||
|
|
{ INT64_C( 1002439529146), -INT64_C( 1026691703105) } },
|
||
|
|
{ { -INT64_C( 123627170620), -INT64_C( 222977168930) },
|
||
|
|
{ -INT32_C( 844801), INT32_C( 71993), INT32_C( 530543), -INT32_C( 733850) },
|
||
|
|
INT32_C( 147888),
|
||
|
|
{ -INT64_C( 280549056988), -INT64_C( 5921951330) } },
|
||
|
|
{ { INT64_C( 863371662593), INT64_C( 776848419902) },
|
||
|
|
{ -INT32_C( 813235), -INT32_C( 882166), INT32_C( 482897), -INT32_C( 956511) },
|
||
|
|
INT32_C( 977218),
|
||
|
|
{ -INT64_C( 80419618499), INT64_C( 2646287952698) } },
|
||
|
|
{ { -INT64_C( 255406064309), -INT64_C( 777654343951) },
|
||
|
|
{ INT32_C( 140558), -INT32_C( 856574), -INT32_C( 425078), -INT32_C( 578417) },
|
||
|
|
-INT32_C( 948359),
|
||
|
|
{ -INT64_C( 1061659158313), -INT64_C( 1874748279357) } },
|
||
|
|
{ { -INT64_C( 458810764855), INT64_C( 711787430179) },
|
||
|
|
{ INT32_C( 805923), -INT32_C( 468847), INT32_C( 690525), INT32_C( 713403) },
|
||
|
|
INT32_C( 640126),
|
||
|
|
{ -INT64_C( 1342856777155), -INT64_C( 201548187377) } },
|
||
|
|
{ { INT64_C( 758182015630), INT64_C( 506525147029) },
|
||
|
|
{ INT32_C( 830864), -INT32_C( 705600), -INT32_C( 726060), -INT32_C( 605205) },
|
||
|
|
INT32_C( 945162),
|
||
|
|
{ INT64_C( 2130670659070), INT64_C( 1650558683449) } },
|
||
|
|
{ { INT64_C( 128332029081), -INT64_C( 342906652550) },
|
||
|
|
{ -INT32_C( 664547), -INT32_C( 618870), -INT32_C( 428918), -INT32_C( 969644) },
|
||
|
|
INT32_C( 907914),
|
||
|
|
{ INT64_C( 907173343185), INT64_C( 1417800072682) } },
|
||
|
|
};
|
||
|
|
|
||
|
|
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_int32x4_t b = simde_vld1q_s32(test_vec[i].b);
|
||
|
|
int32_t c = test_vec[i].c;
|
||
|
|
simde_int64x2_t r = simde_vqdmlsl_high_n_s32(a, b, c);
|
||
|
|
|
||
|
|
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(vqdmlsl_high_n_s16)
|
||
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(vqdmlsl_high_n_s32)
|
||
|
|
SIMDE_TEST_FUNC_LIST_END
|
||
|
|
|
||
|
|
#include "test-neon-footer.h"
|