misc.c: undo changes in 82b50f19c6 "when Intel x64 build, assume able to read/write unaligned" -- provokes sanitizer on amd64, and is not portable (e.g. different behavior on Intel vs AMD). all performance-sensitive word64 reads/writes should be on known-aligned data.

This commit is contained in:
Daniel Pouzzner
2025-02-20 15:00:22 -06:00
parent 01808bebca
commit 41b4ac5599

View File

@ -254,36 +254,6 @@ WC_MISC_STATIC WC_INLINE void writeUnalignedWords32(byte *out, const word32 *in,
#if defined(WORD64_AVAILABLE) && !defined(WOLFSSL_NO_WORD64_OPS) #if defined(WORD64_AVAILABLE) && !defined(WOLFSSL_NO_WORD64_OPS)
#ifdef WOLFSSL_X86_64_BUILD
WC_MISC_STATIC WC_INLINE word64 readUnalignedWord64(const byte *in)
{
return ((word64*)in)[0];
}
WC_MISC_STATIC WC_INLINE word64 writeUnalignedWord64(void *out, word64 in)
{
return ((word64*)out)[0] = in;
}
WC_MISC_STATIC WC_INLINE void readUnalignedWords64(word64 *out, const byte *in,
size_t count)
{
const word64 *in_word64 = (const word64 *)in;
while (count-- > 0)
*out++ = *in_word64++;
}
WC_MISC_STATIC WC_INLINE void writeUnalignedWords64(byte *out, const word64 *in,
size_t count)
{
word64 *out_word64 = (word64 *)out;
while (count-- > 0)
*out_word64++ = *in++;
}
#else
WC_MISC_STATIC WC_INLINE word64 readUnalignedWord64(const byte *in) WC_MISC_STATIC WC_INLINE word64 readUnalignedWord64(const byte *in)
{ {
if (((wc_ptr_t)in & (wc_ptr_t)(sizeof(word64) - 1U)) == (wc_ptr_t)0) if (((wc_ptr_t)in & (wc_ptr_t)(sizeof(word64) - 1U)) == (wc_ptr_t)0)
@ -331,8 +301,6 @@ WC_MISC_STATIC WC_INLINE void writeUnalignedWords64(byte *out, const word64 *in,
} }
} }
#endif
WC_MISC_STATIC WC_INLINE word64 rotlFixed64(word64 x, word64 y) WC_MISC_STATIC WC_INLINE word64 rotlFixed64(word64 x, word64 y)
{ {
return (x << y) | (x >> (sizeof(y) * 8 - y)); return (x << y) | (x >> (sizeof(y) * 8 - y));