-#ifndef _SHERLOCK_UNALIGNED_H
-#define _SHERLOCK_UNALIGNED_H
-
-#ifdef CPU_ALLOW_UNALIGNED
-#define GET_U16(p) (*((u16 *)(p)))
-#define GET_U32(p) (*((u32 *)(p)))
-#define GET_U32_16(p) (*((u32 *)(p)))
-#define GET_U64(p) (*((u64 *)(p)))
-#define PUT_U16(p,x) *((u16 *)(p)) = (x)
-#define PUT_U32(p,x) *((u32 *)(p)) = (x)
-#define PUT_U64(p,x) *((u64 *)(p)) = (x)
-#else
-#define GET_U64(p) ({ u64 _x; memcpy(&_x, p, 8); _x; })
-#define PUT_U64(p,x) do { u64 _x=x; memcpy(p, &_x, 8); } while(0)
-#ifdef CPU_BIG_ENDIAN
-#define GET_U16(p) (((p)[0] << 8) | (p)[1])
-#define GET_U32(p) (((p)[0] << 24) | ((p)[1] << 16) | ((p)[2] << 8) | (p)[3])
-#define PUT_U16(p,x) (void)(((p)[0] = ((x) >> 8)), (((p)[1]) = (x)))
-#define PUT_U32(p,x) (void)(((p)[0] = ((x) >> 24)), (((p)[1]) = ((x) >> 16)), (((p)[2]) = ((x) >> 8)), (((p)[3]) = (x)))
+#ifndef _UCW_UNALIGNED_H
+#define _UCW_UNALIGNED_H
+
+/* Big endian format */
+
+#if defined(CPU_ALLOW_UNALIGNED) && defined(CPU_BIG_ENDIAN)
+static inline uns get_u16_be(const void *p) { return *(u16 *)p; }
+static inline u32 get_u32_be(const void *p) { return *(u32 *)p; }
+static inline u64 get_u64_be(const void *p) { return *(u64 *)p; }
+static inline void put_u16_be(void *p, uns x) { *(u16 *)p = x; }
+static inline void put_u32_be(void *p, u32 x) { *(u32 *)p = x; }
+static inline void put_u64_be(void *p, u64 x) { *(u64 *)p = x; }