mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-11-18 18:20:35 +03:00
fix compilation with clang and some incomplete/wrong implementations for arm this time
This commit is contained in:
@@ -122,24 +122,252 @@ m128 sub_2x64(m128 a, m128 b) {
|
||||
return (m128) vsubq_u64((uint64x2_t)a, (uint64x2_t)b);
|
||||
}
|
||||
|
||||
static really_really_inline
|
||||
static really_inline
|
||||
m128 lshift_m128(m128 a, unsigned b) {
|
||||
return (m128) vshlq_n_u32((uint32x4_t)a, b);
|
||||
#if defined(HAVE__BUILTIN_CONSTANT_P)
|
||||
if (__builtin_constant_p(b)) {
|
||||
return (m128) vshlq_n_u32((uint32x4_t)a, b);
|
||||
}
|
||||
#endif
|
||||
#define CASE_LSHIFT_m128(a, offset) case offset: return (m128)vshlq_n_u32((int8x16_t)(a), (offset)); break;
|
||||
switch (b) {
|
||||
case 0: return a; break;
|
||||
CASE_LSHIFT_m128(a, 1);
|
||||
CASE_LSHIFT_m128(a, 2);
|
||||
CASE_LSHIFT_m128(a, 3);
|
||||
CASE_LSHIFT_m128(a, 4);
|
||||
CASE_LSHIFT_m128(a, 5);
|
||||
CASE_LSHIFT_m128(a, 6);
|
||||
CASE_LSHIFT_m128(a, 7);
|
||||
CASE_LSHIFT_m128(a, 8);
|
||||
CASE_LSHIFT_m128(a, 9);
|
||||
CASE_LSHIFT_m128(a, 10);
|
||||
CASE_LSHIFT_m128(a, 11);
|
||||
CASE_LSHIFT_m128(a, 12);
|
||||
CASE_LSHIFT_m128(a, 13);
|
||||
CASE_LSHIFT_m128(a, 14);
|
||||
CASE_LSHIFT_m128(a, 15);
|
||||
CASE_LSHIFT_m128(a, 16);
|
||||
CASE_LSHIFT_m128(a, 17);
|
||||
CASE_LSHIFT_m128(a, 18);
|
||||
CASE_LSHIFT_m128(a, 19);
|
||||
CASE_LSHIFT_m128(a, 20);
|
||||
CASE_LSHIFT_m128(a, 21);
|
||||
CASE_LSHIFT_m128(a, 22);
|
||||
CASE_LSHIFT_m128(a, 23);
|
||||
CASE_LSHIFT_m128(a, 24);
|
||||
CASE_LSHIFT_m128(a, 25);
|
||||
CASE_LSHIFT_m128(a, 26);
|
||||
CASE_LSHIFT_m128(a, 27);
|
||||
CASE_LSHIFT_m128(a, 28);
|
||||
CASE_LSHIFT_m128(a, 29);
|
||||
CASE_LSHIFT_m128(a, 30);
|
||||
CASE_LSHIFT_m128(a, 31);
|
||||
default: return zeroes128(); break;
|
||||
}
|
||||
#undef CASE_LSHIFT_m128
|
||||
}
|
||||
|
||||
static really_really_inline
|
||||
m128 rshift_m128(m128 a, unsigned b) {
|
||||
return (m128) vshrq_n_u32((uint32x4_t)a, b);
|
||||
#if defined(HAVE__BUILTIN_CONSTANT_P)
|
||||
if (__builtin_constant_p(b)) {
|
||||
return (m128) vshrq_n_u32((uint32x4_t)a, b);
|
||||
}
|
||||
#endif
|
||||
#define CASE_RSHIFT_m128(a, offset) case offset: return (m128)vshrq_n_u32((int8x16_t)(a), (offset)); break;
|
||||
switch (b) {
|
||||
case 0: return a; break;
|
||||
CASE_RSHIFT_m128(a, 1);
|
||||
CASE_RSHIFT_m128(a, 2);
|
||||
CASE_RSHIFT_m128(a, 3);
|
||||
CASE_RSHIFT_m128(a, 4);
|
||||
CASE_RSHIFT_m128(a, 5);
|
||||
CASE_RSHIFT_m128(a, 6);
|
||||
CASE_RSHIFT_m128(a, 7);
|
||||
CASE_RSHIFT_m128(a, 8);
|
||||
CASE_RSHIFT_m128(a, 9);
|
||||
CASE_RSHIFT_m128(a, 10);
|
||||
CASE_RSHIFT_m128(a, 11);
|
||||
CASE_RSHIFT_m128(a, 12);
|
||||
CASE_RSHIFT_m128(a, 13);
|
||||
CASE_RSHIFT_m128(a, 14);
|
||||
CASE_RSHIFT_m128(a, 15);
|
||||
CASE_RSHIFT_m128(a, 16);
|
||||
CASE_RSHIFT_m128(a, 17);
|
||||
CASE_RSHIFT_m128(a, 18);
|
||||
CASE_RSHIFT_m128(a, 19);
|
||||
CASE_RSHIFT_m128(a, 20);
|
||||
CASE_RSHIFT_m128(a, 21);
|
||||
CASE_RSHIFT_m128(a, 22);
|
||||
CASE_RSHIFT_m128(a, 23);
|
||||
CASE_RSHIFT_m128(a, 24);
|
||||
CASE_RSHIFT_m128(a, 25);
|
||||
CASE_RSHIFT_m128(a, 26);
|
||||
CASE_RSHIFT_m128(a, 27);
|
||||
CASE_RSHIFT_m128(a, 28);
|
||||
CASE_RSHIFT_m128(a, 29);
|
||||
CASE_RSHIFT_m128(a, 30);
|
||||
CASE_RSHIFT_m128(a, 31);
|
||||
default: return zeroes128(); break;
|
||||
}
|
||||
#undef CASE_RSHIFT_m128
|
||||
}
|
||||
|
||||
static really_really_inline
|
||||
m128 lshift64_m128(m128 a, unsigned b) {
|
||||
return (m128) vshlq_n_u64((uint64x2_t)a, b);
|
||||
#if defined(HAVE__BUILTIN_CONSTANT_P)
|
||||
if (__builtin_constant_p(b)) {
|
||||
return (m128) vshlq_n_u64((uint64x2_t)a, b);
|
||||
}
|
||||
#endif
|
||||
#define CASE_LSHIFT64_m128(a, offset) case offset: return (m128)vshlq_n_u64((int8x16_t)(a), (offset)); break;
|
||||
switch (b) {
|
||||
case 0: return a; break;
|
||||
CASE_LSHIFT64_m128(a, 1);
|
||||
CASE_LSHIFT64_m128(a, 2);
|
||||
CASE_LSHIFT64_m128(a, 3);
|
||||
CASE_LSHIFT64_m128(a, 4);
|
||||
CASE_LSHIFT64_m128(a, 5);
|
||||
CASE_LSHIFT64_m128(a, 6);
|
||||
CASE_LSHIFT64_m128(a, 7);
|
||||
CASE_LSHIFT64_m128(a, 8);
|
||||
CASE_LSHIFT64_m128(a, 9);
|
||||
CASE_LSHIFT64_m128(a, 10);
|
||||
CASE_LSHIFT64_m128(a, 11);
|
||||
CASE_LSHIFT64_m128(a, 12);
|
||||
CASE_LSHIFT64_m128(a, 13);
|
||||
CASE_LSHIFT64_m128(a, 14);
|
||||
CASE_LSHIFT64_m128(a, 15);
|
||||
CASE_LSHIFT64_m128(a, 16);
|
||||
CASE_LSHIFT64_m128(a, 17);
|
||||
CASE_LSHIFT64_m128(a, 18);
|
||||
CASE_LSHIFT64_m128(a, 19);
|
||||
CASE_LSHIFT64_m128(a, 20);
|
||||
CASE_LSHIFT64_m128(a, 21);
|
||||
CASE_LSHIFT64_m128(a, 22);
|
||||
CASE_LSHIFT64_m128(a, 23);
|
||||
CASE_LSHIFT64_m128(a, 24);
|
||||
CASE_LSHIFT64_m128(a, 25);
|
||||
CASE_LSHIFT64_m128(a, 26);
|
||||
CASE_LSHIFT64_m128(a, 27);
|
||||
CASE_LSHIFT64_m128(a, 28);
|
||||
CASE_LSHIFT64_m128(a, 29);
|
||||
CASE_LSHIFT64_m128(a, 30);
|
||||
CASE_LSHIFT64_m128(a, 31);
|
||||
CASE_LSHIFT64_m128(a, 32);
|
||||
CASE_LSHIFT64_m128(a, 33);
|
||||
CASE_LSHIFT64_m128(a, 34);
|
||||
CASE_LSHIFT64_m128(a, 35);
|
||||
CASE_LSHIFT64_m128(a, 36);
|
||||
CASE_LSHIFT64_m128(a, 37);
|
||||
CASE_LSHIFT64_m128(a, 38);
|
||||
CASE_LSHIFT64_m128(a, 39);
|
||||
CASE_LSHIFT64_m128(a, 40);
|
||||
CASE_LSHIFT64_m128(a, 41);
|
||||
CASE_LSHIFT64_m128(a, 42);
|
||||
CASE_LSHIFT64_m128(a, 43);
|
||||
CASE_LSHIFT64_m128(a, 44);
|
||||
CASE_LSHIFT64_m128(a, 45);
|
||||
CASE_LSHIFT64_m128(a, 46);
|
||||
CASE_LSHIFT64_m128(a, 47);
|
||||
CASE_LSHIFT64_m128(a, 48);
|
||||
CASE_LSHIFT64_m128(a, 49);
|
||||
CASE_LSHIFT64_m128(a, 50);
|
||||
CASE_LSHIFT64_m128(a, 51);
|
||||
CASE_LSHIFT64_m128(a, 52);
|
||||
CASE_LSHIFT64_m128(a, 53);
|
||||
CASE_LSHIFT64_m128(a, 54);
|
||||
CASE_LSHIFT64_m128(a, 55);
|
||||
CASE_LSHIFT64_m128(a, 56);
|
||||
CASE_LSHIFT64_m128(a, 57);
|
||||
CASE_LSHIFT64_m128(a, 58);
|
||||
CASE_LSHIFT64_m128(a, 59);
|
||||
CASE_LSHIFT64_m128(a, 60);
|
||||
CASE_LSHIFT64_m128(a, 61);
|
||||
CASE_LSHIFT64_m128(a, 62);
|
||||
CASE_LSHIFT64_m128(a, 63);
|
||||
default: return zeroes128(); break;
|
||||
}
|
||||
#undef CASE_LSHIFT64_m128
|
||||
}
|
||||
|
||||
static really_really_inline
|
||||
m128 rshift64_m128(m128 a, unsigned b) {
|
||||
return (m128) vshrq_n_u64((uint64x2_t)a, b);
|
||||
#if defined(HAVE__BUILTIN_CONSTANT_P)
|
||||
if (__builtin_constant_p(b)) {
|
||||
return (m128) vshrq_n_u64((uint64x2_t)a, b);
|
||||
}
|
||||
#endif
|
||||
#define CASE_RSHIFT64_m128(a, offset) case offset: return (m128)vshrq_n_u64((int8x16_t)(a), (offset)); break;
|
||||
switch (b) {
|
||||
case 0: return a; break;
|
||||
CASE_RSHIFT64_m128(a, 1);
|
||||
CASE_RSHIFT64_m128(a, 2);
|
||||
CASE_RSHIFT64_m128(a, 3);
|
||||
CASE_RSHIFT64_m128(a, 4);
|
||||
CASE_RSHIFT64_m128(a, 5);
|
||||
CASE_RSHIFT64_m128(a, 6);
|
||||
CASE_RSHIFT64_m128(a, 7);
|
||||
CASE_RSHIFT64_m128(a, 8);
|
||||
CASE_RSHIFT64_m128(a, 9);
|
||||
CASE_RSHIFT64_m128(a, 10);
|
||||
CASE_RSHIFT64_m128(a, 11);
|
||||
CASE_RSHIFT64_m128(a, 12);
|
||||
CASE_RSHIFT64_m128(a, 13);
|
||||
CASE_RSHIFT64_m128(a, 14);
|
||||
CASE_RSHIFT64_m128(a, 15);
|
||||
CASE_RSHIFT64_m128(a, 16);
|
||||
CASE_RSHIFT64_m128(a, 17);
|
||||
CASE_RSHIFT64_m128(a, 18);
|
||||
CASE_RSHIFT64_m128(a, 19);
|
||||
CASE_RSHIFT64_m128(a, 20);
|
||||
CASE_RSHIFT64_m128(a, 21);
|
||||
CASE_RSHIFT64_m128(a, 22);
|
||||
CASE_RSHIFT64_m128(a, 23);
|
||||
CASE_RSHIFT64_m128(a, 24);
|
||||
CASE_RSHIFT64_m128(a, 25);
|
||||
CASE_RSHIFT64_m128(a, 26);
|
||||
CASE_RSHIFT64_m128(a, 27);
|
||||
CASE_RSHIFT64_m128(a, 28);
|
||||
CASE_RSHIFT64_m128(a, 29);
|
||||
CASE_RSHIFT64_m128(a, 30);
|
||||
CASE_RSHIFT64_m128(a, 31);
|
||||
CASE_RSHIFT64_m128(a, 32);
|
||||
CASE_RSHIFT64_m128(a, 33);
|
||||
CASE_RSHIFT64_m128(a, 34);
|
||||
CASE_RSHIFT64_m128(a, 35);
|
||||
CASE_RSHIFT64_m128(a, 36);
|
||||
CASE_RSHIFT64_m128(a, 37);
|
||||
CASE_RSHIFT64_m128(a, 38);
|
||||
CASE_RSHIFT64_m128(a, 39);
|
||||
CASE_RSHIFT64_m128(a, 40);
|
||||
CASE_RSHIFT64_m128(a, 41);
|
||||
CASE_RSHIFT64_m128(a, 42);
|
||||
CASE_RSHIFT64_m128(a, 43);
|
||||
CASE_RSHIFT64_m128(a, 44);
|
||||
CASE_RSHIFT64_m128(a, 45);
|
||||
CASE_RSHIFT64_m128(a, 46);
|
||||
CASE_RSHIFT64_m128(a, 47);
|
||||
CASE_RSHIFT64_m128(a, 48);
|
||||
CASE_RSHIFT64_m128(a, 49);
|
||||
CASE_RSHIFT64_m128(a, 50);
|
||||
CASE_RSHIFT64_m128(a, 51);
|
||||
CASE_RSHIFT64_m128(a, 52);
|
||||
CASE_RSHIFT64_m128(a, 53);
|
||||
CASE_RSHIFT64_m128(a, 54);
|
||||
CASE_RSHIFT64_m128(a, 55);
|
||||
CASE_RSHIFT64_m128(a, 56);
|
||||
CASE_RSHIFT64_m128(a, 57);
|
||||
CASE_RSHIFT64_m128(a, 58);
|
||||
CASE_RSHIFT64_m128(a, 59);
|
||||
CASE_RSHIFT64_m128(a, 60);
|
||||
CASE_RSHIFT64_m128(a, 61);
|
||||
CASE_RSHIFT64_m128(a, 62);
|
||||
CASE_RSHIFT64_m128(a, 63);
|
||||
default: return zeroes128(); break;
|
||||
}
|
||||
#undef CASE_RSHIFT64_m128
|
||||
}
|
||||
|
||||
static really_inline m128 eq128(m128 a, m128 b) {
|
||||
|
||||
Reference in New Issue
Block a user