@@ -327,6 +327,19 @@ typedef int_fast64_t sph_s64;
327327#error SPH_UPTR defined, but endianness is not known.
328328#endif
329329
330+ #if defined(__clang__ )
331+ #define SPH_NO_SANITIZE (...) __attribute__((no_sanitize(__VA_ARGS__)))
332+ #else
333+ #define SPH_NO_SANITIZE (...)
334+ #endif // __clang__
335+
336+ // Suppress unaligned memory access warnings if supported by hardware
337+ #if defined(SPH_UPTR ) && SPH_UNALIGNED
338+ #define SPH_UNALIGNED_ATTRIBS SPH_NO_SANITIZE("alignment")
339+ #else
340+ #define SPH_UNALIGNED_ATTRIBS
341+ #endif // SPH_UPTR && SPH_UNALIGNED
342+
330343#if SPH_I386_GCC && !SPH_NO_ASM
331344
332345/*
@@ -469,6 +482,7 @@ sph_dec16le(const void *src)
469482 * @param val the 32-bit value to encode
470483 */
471484static SPH_INLINE void
485+ SPH_UNALIGNED_ATTRIBS
472486sph_enc32be (void * dst , sph_u32 val )
473487{
474488#if defined SPH_UPTR
@@ -527,6 +541,7 @@ sph_enc32be_aligned(void *dst, sph_u32 val)
527541 * @return the decoded value
528542 */
529543static SPH_INLINE sph_u32
544+ SPH_UNALIGNED_ATTRIBS
530545sph_dec32be (const void * src )
531546{
532547#if defined SPH_UPTR
@@ -587,6 +602,7 @@ sph_dec32be_aligned(const void *src)
587602 * @param val the 32-bit value to encode
588603 */
589604static SPH_INLINE void
605+ SPH_UNALIGNED_ATTRIBS
590606sph_enc32le (void * dst , sph_u32 val )
591607{
592608#if defined SPH_UPTR
@@ -645,6 +661,7 @@ sph_enc32le_aligned(void *dst, sph_u32 val)
645661 * @return the decoded value
646662 */
647663static SPH_INLINE sph_u32
664+ SPH_UNALIGNED_ATTRIBS
648665sph_dec32le (const void * src )
649666{
650667#if defined SPH_UPTR
@@ -726,6 +743,7 @@ sph_dec32le_aligned(const void *src)
726743 * @param val the 64-bit value to encode
727744 */
728745static SPH_INLINE void
746+ SPH_UNALIGNED_ATTRIBS
729747sph_enc64be (void * dst , sph_u64 val )
730748{
731749#if defined SPH_UPTR
@@ -796,6 +814,7 @@ sph_enc64be_aligned(void *dst, sph_u64 val)
796814 * @return the decoded value
797815 */
798816static SPH_INLINE sph_u64
817+ SPH_UNALIGNED_ATTRIBS
799818sph_dec64be (const void * src )
800819{
801820#if defined SPH_UPTR
@@ -868,6 +887,7 @@ sph_dec64be_aligned(const void *src)
868887 * @param val the 64-bit value to encode
869888 */
870889static SPH_INLINE void
890+ SPH_UNALIGNED_ATTRIBS
871891sph_enc64le (void * dst , sph_u64 val )
872892{
873893#if defined SPH_UPTR
@@ -938,6 +958,7 @@ sph_enc64le_aligned(void *dst, sph_u64 val)
938958 * @return the decoded value
939959 */
940960static SPH_INLINE sph_u64
961+ SPH_UNALIGNED_ATTRIBS
941962sph_dec64le (const void * src )
942963{
943964#if defined SPH_UPTR
0 commit comments