1*4882a593SmuzhiyunFrom 50bf5b541601b613d58617798f6c0707607c74f4 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com> 3*4882a593SmuzhiyunDate: Fri, 27 Mar 2020 17:48:20 +0800 4*4882a593SmuzhiyunSubject: [PATCH 05/14] cld3: Avoid unaligned accesses 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunAlthough the unaligned memory accesses are enabled, somehow i still hit 7*4882a593Smuzhiyunthe SIGBUS: 8*4882a593Smuzhiyun[23496.643138] Unhandled fault: alignment fault (0x92000021) at 0x00000000b182e636 9*4882a593SmuzhiyunReceived signal 7 BUS_ADRALN 0000b182e636 10*4882a593Smuzhiyun 11*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 12*4882a593Smuzhiyun--- 13*4882a593Smuzhiyun third_party/cld_3/src/src/script_span/port.h | 12 ++++++++++++ 14*4882a593Smuzhiyun 1 file changed, 12 insertions(+) 15*4882a593Smuzhiyun 16*4882a593Smuzhiyundiff --git a/third_party/cld_3/src/src/script_span/port.h b/third_party/cld_3/src/src/script_span/port.h 17*4882a593Smuzhiyunindex 2b3bc515..1d437bab 100644 18*4882a593Smuzhiyun--- a/third_party/cld_3/src/src/script_span/port.h 19*4882a593Smuzhiyun+++ b/third_party/cld_3/src/src/script_span/port.h 20*4882a593Smuzhiyun@@ -78,11 +78,23 @@ namespace CLD2 { 21*4882a593Smuzhiyun // 22*4882a593Smuzhiyun // This is a mess, but there's not much we can do about it. 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun+#if 0 25*4882a593Smuzhiyun #define UNALIGNED_LOAD16(_p) (*reinterpret_cast<const uint16 *>(_p)) 26*4882a593Smuzhiyun #define UNALIGNED_LOAD32(_p) (*reinterpret_cast<const uint32 *>(_p)) 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun #define UNALIGNED_STORE16(_p, _val) (*reinterpret_cast<uint16 *>(_p) = (_val)) 29*4882a593Smuzhiyun #define UNALIGNED_STORE32(_p, _val) (*reinterpret_cast<uint32 *>(_p) = (_val)) 30*4882a593Smuzhiyun+#else 31*4882a593Smuzhiyun+inline uint32 UNALIGNED_LOAD32(const void *p) { 32*4882a593Smuzhiyun+ uint32 t; 33*4882a593Smuzhiyun+ memcpy(&t, p, sizeof t); 34*4882a593Smuzhiyun+ return t; 35*4882a593Smuzhiyun+} 36*4882a593Smuzhiyun+ 37*4882a593Smuzhiyun+inline void UNALIGNED_STORE32(void *p, uint32 v) { 38*4882a593Smuzhiyun+ memcpy(p, &v, sizeof v); 39*4882a593Smuzhiyun+} 40*4882a593Smuzhiyun+#endif 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun // TODO(sesse): NEON supports unaligned 64-bit loads and stores. 43*4882a593Smuzhiyun // See if that would be more efficient on platforms supporting it, 44*4882a593Smuzhiyun-- 45*4882a593Smuzhiyun2.20.1 46*4882a593Smuzhiyun 47