Core: memset128, memeq128

git-svn-id: svn://ultimatepp.org/upp/trunk@14600 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2020-06-16 14:49:58 +00:00
parent ee597b4d78
commit 821d9a377c
3 changed files with 21 additions and 0 deletions

View file

@ -404,6 +404,12 @@ typedef long long unsigned uint64;
typedef uint64 qword;
struct m128 {
int64 i64[2];
static m128 Zero() { m128 a; a.i64[0] = a.i64[1] = 0; return a; }
};
inline bool IsNaN(double d) { return std::isnan(d); }
inline bool IsInf(double d) { return std::isinf(d); }
inline bool IsFin(double d) { return !IsNaN(d) && !IsInf(d); }

View file

@ -86,6 +86,7 @@ bool memeq8(const void *p, const void *q, size_t len) { return inline_memeq8_ali
bool memeq16(const void *p, const void *q, size_t len) { return inline_memeq16_aligned(p, q, len); }
bool memeq32(const void *p, const void *q, size_t len) { return inline_memeq32_aligned(p, q, len); }
bool memeq64(const void *p, const void *q, size_t len) { return inline_memeq64_aligned(p, q, len); }
bool memeq128(const void *p, const void *q, size_t len) { return inline_memeq128_aligned(p, q, len); }
#endif

View file

@ -105,6 +105,13 @@ void memset64(void *p, qword data, size_t len)
Set128(0);
}
inline
void memset128(void *t, m128 data, size_t len)
{
if(len)
memset8__(t, *(__m128i *)&data, 16 * len);
}
void memcpy8__(void *p, const void *q, size_t len);
inline
@ -390,10 +397,17 @@ bool inline_memeq64_aligned(const void *p, const void *q, size_t len)
return memeq8__(t, s, 8 * len);
}
force_inline
bool inline_memeq128_aligned(const void *t, const void *s, size_t len)
{
return len == 0 || memeq8__(t, s, 16 * len);
}
bool memeq8(const void *p, const void *q, size_t len);
bool memeq16(const void *p, const void *q, size_t len);
bool memeq32(const void *p, const void *q, size_t len);
bool memeq64(const void *p, const void *q, size_t len);
bool memeq128(const void *p, const void *q, size_t len);
#else