From 4ba81b7817db7a2acd8f59193acccb8196eab77b Mon Sep 17 00:00:00 2001 From: Leonid Yuriev Date: Tue, 25 Jan 2022 20:37:53 +0300 Subject: [PATCH] t1ha: fix unaligned access on ARM. Fixed https://github.com/erthink/t1ha/issues/45. --- src/t1ha_bits.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/t1ha_bits.h b/src/t1ha_bits.h index 93b6b51..9d0f337 100644 --- a/src/t1ha_bits.h +++ b/src/t1ha_bits.h @@ -81,8 +81,6 @@ #define T1HA_SYS_UNALIGNED_ACCESS T1HA_UNALIGNED_ACCESS__EFFICIENT #elif defined(__e2k__) #define T1HA_SYS_UNALIGNED_ACCESS T1HA_UNALIGNED_ACCESS__SLOW -#elif defined(__ARM_FEATURE_UNALIGNED) -#define T1HA_SYS_UNALIGNED_ACCESS T1HA_UNALIGNED_ACCESS__EFFICIENT #else #define T1HA_SYS_UNALIGNED_ACCESS T1HA_UNALIGNED_ACCESS__UNABLE #endif @@ -538,7 +536,8 @@ fetch16_le_aligned(const void *v) { #ifndef fetch16_le_unaligned static __maybe_unused __always_inline uint16_t fetch16_le_unaligned(const void *v) { -#if T1HA_SYS_UNALIGNED_ACCESS == T1HA_UNALIGNED_ACCESS__UNABLE +#if T1HA_SYS_UNALIGNED_ACCESS == T1HA_UNALIGNED_ACCESS__UNABLE && \ + !defined(__ARM_FEATURE_UNALIGNED) const uint8_t *p = (const uint8_t *)v; return p[0] | (uint16_t)p[1] << 8; #elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ @@ -564,7 +563,8 @@ fetch32_le_aligned(const void *v) { #ifndef fetch32_le_unaligned static __maybe_unused __always_inline uint32_t fetch32_le_unaligned(const void *v) { -#if T1HA_SYS_UNALIGNED_ACCESS == T1HA_UNALIGNED_ACCESS__UNABLE +#if T1HA_SYS_UNALIGNED_ACCESS == T1HA_UNALIGNED_ACCESS__UNABLE && \ + !defined(__ARM_FEATURE_UNALIGNED) return fetch16_le_unaligned(v) | (uint32_t)fetch16_le_unaligned((const uint8_t *)v + 2) << 16; #elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__