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