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>
490 lines
13 KiB
C
490 lines
13 KiB
C
#define SIMDE_TEST_ARM_NEON_INSN crc32
|
|
|
|
#include "test-neon.h"
|
|
#include "../../../simde/arm/neon/crc32.h"
|
|
|
|
static int
|
|
test_simde___crc32b(SIMDE_MUNIT_TEST_ARGS) {
|
|
#if 1
|
|
static const struct {
|
|
uint32_t a;
|
|
uint8_t b;
|
|
uint32_t r;
|
|
} test_vec[] = {
|
|
{ UINT32_C( 3153495819),
|
|
UINT8_C( 180),
|
|
UINT32_C( 1533368474) },
|
|
{ UINT32_C( 3359452836),
|
|
UINT8_C( 30),
|
|
UINT32_C( 729573308) },
|
|
{ UINT32_C( 4014489982),
|
|
UINT8_C( 254),
|
|
UINT32_C( 3981953889) },
|
|
{ UINT32_C( 492506225),
|
|
UINT8_C( 73),
|
|
UINT32_C( 673178514) },
|
|
{ UINT32_C( 4043408415),
|
|
UINT8_C( 205),
|
|
UINT32_C( 1747759740) },
|
|
{ UINT32_C( 3873975223),
|
|
UINT8_C( 63),
|
|
UINT32_C( 3817202489) },
|
|
{ UINT32_C( 3363644870),
|
|
UINT8_C( 37),
|
|
UINT32_C( 969658087) },
|
|
{ UINT32_C( 2123914224),
|
|
UINT8_C( 221),
|
|
UINT32_C( 1168229422) },
|
|
};
|
|
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
|
uint32_t a = test_vec[i].a;
|
|
uint8_t b = test_vec[i].b;
|
|
uint32_t r = simde___crc32b(a, b);
|
|
|
|
simde_assert_equal_u32(r, test_vec[i].r);
|
|
}
|
|
|
|
return 0;
|
|
|
|
#else
|
|
fputc('\n', stdout);
|
|
for (int i = 0 ; i < 8 ; i++) {
|
|
simde_uint32_t a = simde_test_codegen_random_u32();
|
|
simde_uint8_t b = simde_test_codegen_random_u8();
|
|
simde_uint32_t r = simde___crc32b(a, b);
|
|
|
|
simde_test_codegen_write_u32(2, a, SIMDE_TEST_VEC_POS_FIRST);
|
|
simde_test_codegen_write_u8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
|
|
simde_test_codegen_write_u32(2, r, SIMDE_TEST_VEC_POS_LAST);
|
|
}
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
static int
|
|
test_simde___crc32h(SIMDE_MUNIT_TEST_ARGS) {
|
|
#if 1
|
|
static const struct {
|
|
uint32_t a;
|
|
uint16_t b;
|
|
uint32_t r;
|
|
} test_vec[] = {
|
|
{ UINT32_C( 264970151),
|
|
UINT16_C( 3768),
|
|
UINT32_C( 2817139111) },
|
|
{ UINT32_C( 892162006),
|
|
UINT16_C( 21362),
|
|
UINT32_C( 3731493007) },
|
|
{ UINT32_C( 3641722167),
|
|
UINT16_C( 5123),
|
|
UINT32_C( 2806401925) },
|
|
{ UINT32_C( 3964107322),
|
|
UINT16_C( 64414),
|
|
UINT32_C( 1356080668) },
|
|
{ UINT32_C( 3309730558),
|
|
UINT16_C( 27840),
|
|
UINT32_C( 3037817706) },
|
|
{ UINT32_C( 787120121),
|
|
UINT16_C( 19126),
|
|
UINT32_C( 559069443) },
|
|
{ UINT32_C( 410652792),
|
|
UINT16_C( 59000),
|
|
UINT32_C( 1423855443) },
|
|
{ UINT32_C( 1363715216),
|
|
UINT16_C( 54410),
|
|
UINT32_C( 3760773807) },
|
|
};
|
|
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
|
uint32_t a = test_vec[i].a;
|
|
uint16_t b = test_vec[i].b;
|
|
uint32_t r = simde___crc32h(a, b);
|
|
|
|
simde_assert_equal_u32(r, test_vec[i].r);
|
|
}
|
|
|
|
return 0;
|
|
|
|
#else
|
|
fputc('\n', stdout);
|
|
for (int i = 0 ; i < 8 ; i++) {
|
|
simde_uint32_t a = simde_test_codegen_random_u32();
|
|
simde_uint16_t b = simde_test_codegen_random_u16();
|
|
simde_uint32_t r = simde___crc32h(a, b);
|
|
|
|
simde_test_codegen_write_u32(2, a, SIMDE_TEST_VEC_POS_FIRST);
|
|
simde_test_codegen_write_u16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
|
|
simde_test_codegen_write_u32(2, r, SIMDE_TEST_VEC_POS_LAST);
|
|
}
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
static int
|
|
test_simde___crc32w(SIMDE_MUNIT_TEST_ARGS) {
|
|
#if 1
|
|
static const struct {
|
|
uint32_t a;
|
|
uint32_t b;
|
|
uint32_t r;
|
|
} test_vec[] = {
|
|
{ UINT32_C( 1896308035),
|
|
UINT32_C( 3030051700),
|
|
UINT32_C( 2211348690) },
|
|
{ UINT32_C( 2243158054),
|
|
UINT32_C( 1114986530),
|
|
UINT32_C( 3700367140) },
|
|
{ UINT32_C( 1833109319),
|
|
UINT32_C( 2554286432),
|
|
UINT32_C( 462026220) },
|
|
{ UINT32_C( 2852802285),
|
|
UINT32_C( 1925391820),
|
|
UINT32_C( 3460094587) },
|
|
{ UINT32_C( 2928668571),
|
|
UINT32_C( 3371259104),
|
|
UINT32_C( 1616422521) },
|
|
{ UINT32_C( 861406319),
|
|
UINT32_C( 159143459),
|
|
UINT32_C( 2300454223) },
|
|
{ UINT32_C( 776769607),
|
|
UINT32_C( 3271408350),
|
|
UINT32_C( 2716884146) },
|
|
{ UINT32_C( 2760839911),
|
|
UINT32_C( 3169252468),
|
|
UINT32_C( 2781457120) },
|
|
};
|
|
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
|
uint32_t a = test_vec[i].a;
|
|
uint32_t b = test_vec[i].b;
|
|
uint32_t r = simde___crc32w(a, b);
|
|
|
|
simde_assert_equal_u32(r, test_vec[i].r);
|
|
}
|
|
|
|
return 0;
|
|
|
|
#else
|
|
fputc('\n', stdout);
|
|
for (int i = 0 ; i < 8 ; i++) {
|
|
simde_uint32_t a = simde_test_codegen_random_u32();
|
|
simde_uint32_t b = simde_test_codegen_random_u32();
|
|
simde_uint32_t r = simde___crc32w(a, b);
|
|
|
|
simde_test_codegen_write_u32(2, a, SIMDE_TEST_VEC_POS_FIRST);
|
|
simde_test_codegen_write_u32(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
|
|
simde_test_codegen_write_u32(2, r, SIMDE_TEST_VEC_POS_LAST);
|
|
}
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
static int
|
|
test_simde___crc32d(SIMDE_MUNIT_TEST_ARGS) {
|
|
#if 1
|
|
static const struct {
|
|
uint32_t a;
|
|
uint64_t b;
|
|
uint32_t r;
|
|
} test_vec[] = {
|
|
{ UINT32_C( 3255761882),
|
|
UINT64_C(10657997303375335424),
|
|
UINT32_C( 2591534569) },
|
|
{ UINT32_C( 2628805908),
|
|
UINT64_C(18311154191066296320),
|
|
UINT32_C( 4004152018) },
|
|
{ UINT32_C( 1017504540),
|
|
UINT64_C(13466350054111825920),
|
|
UINT32_C( 2702169441) },
|
|
{ UINT32_C( 2928837669),
|
|
UINT64_C( 1341134430787507712),
|
|
UINT32_C( 1960841616) },
|
|
{ UINT32_C( 3384216630),
|
|
UINT64_C( 9691660399174090752),
|
|
UINT32_C( 67935203) },
|
|
{ UINT32_C( 3437103122),
|
|
UINT64_C(18000456012487385088),
|
|
UINT32_C( 1253033588) },
|
|
{ UINT32_C( 1035989368),
|
|
UINT64_C(17730710245866688512),
|
|
UINT32_C( 691054827) },
|
|
{ UINT32_C( 1622305324),
|
|
UINT64_C( 6392644927518521344),
|
|
UINT32_C( 641777179) },
|
|
};
|
|
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
|
uint32_t a = test_vec[i].a;
|
|
uint64_t b = test_vec[i].b;
|
|
uint32_t r = simde___crc32d(a, b);
|
|
|
|
simde_assert_equal_u32(r, test_vec[i].r);
|
|
}
|
|
|
|
return 0;
|
|
|
|
#else
|
|
fputc('\n', stdout);
|
|
for (int i = 0 ; i < 8 ; i++) {
|
|
simde_uint32_t a = simde_test_codegen_random_u32();
|
|
simde_uint64_t b = simde_test_codegen_random_u64();
|
|
simde_uint32_t r = simde___crc32d(a, b);
|
|
|
|
simde_test_codegen_write_u32(2, a, SIMDE_TEST_VEC_POS_FIRST);
|
|
simde_test_codegen_write_u64(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
|
|
simde_test_codegen_write_u32(2, r, SIMDE_TEST_VEC_POS_LAST);
|
|
}
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
static int
|
|
test_simde___crc32cb(SIMDE_MUNIT_TEST_ARGS) {
|
|
#if 1
|
|
static const struct {
|
|
uint32_t a;
|
|
uint8_t b;
|
|
uint32_t r;
|
|
} test_vec[] = {
|
|
{ UINT32_C( 4187017617),
|
|
UINT8_C( 213),
|
|
UINT32_C( 2249726578) },
|
|
{ UINT32_C( 2822416313),
|
|
UINT8_C( 19),
|
|
UINT32_C( 3372328761) },
|
|
{ UINT32_C( 1743715926),
|
|
UINT8_C( 213),
|
|
UINT32_C( 2445354610) },
|
|
{ UINT32_C( 952671078),
|
|
UINT8_C( 69),
|
|
UINT32_C( 869643697) },
|
|
{ UINT32_C( 2606794088),
|
|
UINT8_C( 128),
|
|
UINT32_C( 1769115728) },
|
|
{ UINT32_C( 806232336),
|
|
UINT8_C( 122),
|
|
UINT32_C( 169129339) },
|
|
{ UINT32_C( 4277672495),
|
|
UINT8_C( 252),
|
|
UINT32_C( 3229477445) },
|
|
{ UINT32_C( 4144236202),
|
|
UINT8_C( 85),
|
|
UINT32_C( 2911524695) },
|
|
};
|
|
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
|
uint32_t a = test_vec[i].a;
|
|
uint8_t b = test_vec[i].b;
|
|
uint32_t r = simde___crc32cb(a, b);
|
|
|
|
simde_assert_equal_u32(r, test_vec[i].r);
|
|
}
|
|
|
|
return 0;
|
|
|
|
#else
|
|
fputc('\n', stdout);
|
|
for (int i = 0 ; i < 8 ; i++) {
|
|
simde_uint32_t a = simde_test_codegen_random_u32();
|
|
simde_uint8_t b = simde_test_codegen_random_u8();
|
|
simde_uint32_t r = simde___crc32cb(a, b);
|
|
|
|
simde_test_codegen_write_u32(2, a, SIMDE_TEST_VEC_POS_FIRST);
|
|
simde_test_codegen_write_u8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
|
|
simde_test_codegen_write_u32(2, r, SIMDE_TEST_VEC_POS_LAST);
|
|
}
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
static int
|
|
test_simde___crc32ch(SIMDE_MUNIT_TEST_ARGS) {
|
|
#if 1
|
|
static const struct {
|
|
uint32_t a;
|
|
uint16_t b;
|
|
uint32_t r;
|
|
} test_vec[] = {
|
|
{ UINT32_C( 236626040),
|
|
UINT16_C( 311),
|
|
UINT32_C( 1213133894) },
|
|
{ UINT32_C( 1488276255),
|
|
UINT16_C( 24289),
|
|
UINT32_C( 2515416882) },
|
|
{ UINT32_C( 3981318354),
|
|
UINT16_C( 16375),
|
|
UINT32_C( 3604225490) },
|
|
{ UINT32_C( 2317314224),
|
|
UINT16_C( 1581),
|
|
UINT32_C( 3380909873) },
|
|
{ UINT32_C( 2886652079),
|
|
UINT16_C( 50511),
|
|
UINT32_C( 1592828034) },
|
|
{ UINT32_C( 2343125129),
|
|
UINT16_C( 20956),
|
|
UINT32_C( 2144272875) },
|
|
{ UINT32_C( 740789534),
|
|
UINT16_C( 53554),
|
|
UINT32_C( 2960357442) },
|
|
{ UINT32_C( 816825152),
|
|
UINT16_C( 54143),
|
|
UINT32_C( 3077173182) },
|
|
};
|
|
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
|
uint32_t a = test_vec[i].a;
|
|
uint16_t b = test_vec[i].b;
|
|
uint32_t r = simde___crc32ch(a, b);
|
|
|
|
simde_assert_equal_u32(r, test_vec[i].r);
|
|
}
|
|
|
|
return 0;
|
|
|
|
#else
|
|
fputc('\n', stdout);
|
|
for (int i = 0 ; i < 8 ; i++) {
|
|
simde_uint32_t a = simde_test_codegen_random_u32();
|
|
simde_uint16_t b = simde_test_codegen_random_u16();
|
|
simde_uint32_t r = simde___crc32ch(a, b);
|
|
|
|
simde_test_codegen_write_u32(2, a, SIMDE_TEST_VEC_POS_FIRST);
|
|
simde_test_codegen_write_u16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
|
|
simde_test_codegen_write_u32(2, r, SIMDE_TEST_VEC_POS_LAST);
|
|
}
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
static int
|
|
test_simde___crc32cw(SIMDE_MUNIT_TEST_ARGS) {
|
|
#if 1
|
|
static const struct {
|
|
uint32_t a;
|
|
uint32_t b;
|
|
uint32_t r;
|
|
} test_vec[] = {
|
|
{ UINT32_C( 735735106),
|
|
UINT32_C( 3233557569),
|
|
UINT32_C( 2481777803) },
|
|
{ UINT32_C( 4008732556),
|
|
UINT32_C( 1015451528),
|
|
UINT32_C( 168499025) },
|
|
{ UINT32_C( 2471609556),
|
|
UINT32_C( 1969214295),
|
|
UINT32_C( 94012573) },
|
|
{ UINT32_C( 108510218),
|
|
UINT32_C( 1541950952),
|
|
UINT32_C( 617862445) },
|
|
{ UINT32_C( 3216183162),
|
|
UINT32_C( 1301818222),
|
|
UINT32_C( 703678561) },
|
|
{ UINT32_C( 2155126225),
|
|
UINT32_C( 5279748),
|
|
UINT32_C( 104598953) },
|
|
{ UINT32_C( 1646234016),
|
|
UINT32_C( 1098943829),
|
|
UINT32_C( 4016861328) },
|
|
{ UINT32_C( 4022858730),
|
|
UINT32_C( 4193563717),
|
|
UINT32_C( 2600630453) },
|
|
};
|
|
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
|
uint32_t a = test_vec[i].a;
|
|
uint32_t b = test_vec[i].b;
|
|
uint32_t r = simde___crc32cw(a, b);
|
|
|
|
simde_assert_equal_u32(r, test_vec[i].r);
|
|
}
|
|
|
|
return 0;
|
|
|
|
#else
|
|
fputc('\n', stdout);
|
|
for (int i = 0 ; i < 8 ; i++) {
|
|
simde_uint32_t a = simde_test_codegen_random_u32();
|
|
simde_uint32_t b = simde_test_codegen_random_u32();
|
|
simde_uint32_t r = simde___crc32cw(a, b);
|
|
|
|
simde_test_codegen_write_u32(2, a, SIMDE_TEST_VEC_POS_FIRST);
|
|
simde_test_codegen_write_u32(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
|
|
simde_test_codegen_write_u32(2, r, SIMDE_TEST_VEC_POS_LAST);
|
|
}
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
static int
|
|
test_simde___crc32cd(SIMDE_MUNIT_TEST_ARGS) {
|
|
#if 1
|
|
static const struct {
|
|
uint32_t a;
|
|
uint64_t b;
|
|
uint32_t r;
|
|
} test_vec[] = {
|
|
{ UINT32_C( 130615537),
|
|
UINT64_C( 2399774243191130112),
|
|
UINT32_C( 290060477) },
|
|
{ UINT32_C( 1658097419),
|
|
UINT64_C(16993923690639568896),
|
|
UINT32_C( 4084280299) },
|
|
{ UINT32_C( 1251504070),
|
|
UINT64_C( 4814969100102691840),
|
|
UINT32_C( 459953442) },
|
|
{ UINT32_C( 1644397280),
|
|
UINT64_C( 7438431165034001408),
|
|
UINT32_C( 3909693679) },
|
|
{ UINT32_C( 637721053),
|
|
UINT64_C(14691445376122664960),
|
|
UINT32_C( 3000285721) },
|
|
{ UINT32_C( 679940956),
|
|
UINT64_C(13921761239777609728),
|
|
UINT32_C( 1896978250) },
|
|
{ UINT32_C( 3835130870),
|
|
UINT64_C(14131537471582904320),
|
|
UINT32_C( 2911869597) },
|
|
{ UINT32_C( 2096059529),
|
|
UINT64_C(16418279593694640128),
|
|
UINT32_C( 2764088284) },
|
|
};
|
|
|
|
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
|
|
uint32_t a = test_vec[i].a;
|
|
uint64_t b = test_vec[i].b;
|
|
uint32_t r = simde___crc32cd(a, b);
|
|
|
|
simde_assert_equal_u32(r, test_vec[i].r);
|
|
}
|
|
|
|
return 0;
|
|
|
|
#else
|
|
fputc('\n', stdout);
|
|
for (int i = 0 ; i < 8 ; i++) {
|
|
simde_uint32_t a = simde_test_codegen_random_u32();
|
|
simde_uint64_t b = simde_test_codegen_random_u64();
|
|
simde_uint32_t r = simde___crc32cd(a, b);
|
|
|
|
simde_test_codegen_write_u32(2, a, SIMDE_TEST_VEC_POS_FIRST);
|
|
simde_test_codegen_write_u64(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
|
|
simde_test_codegen_write_u32(2, r, SIMDE_TEST_VEC_POS_LAST);
|
|
}
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
SIMDE_TEST_FUNC_LIST_BEGIN
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(__crc32b)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(__crc32h)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(__crc32w)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(__crc32d)
|
|
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(__crc32cb)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(__crc32ch)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(__crc32cw)
|
|
SIMDE_TEST_FUNC_LIST_ENTRY(__crc32cd)
|
|
SIMDE_TEST_FUNC_LIST_END
|
|
|
|
#include "test-neon-footer.h"
|