+
+/* Little-endian format */
+
+#if defined(CPU_ALLOW_UNALIGNED) && !defined(CPU_BIG_ENDIAN)
+static inline uns get_u16_le(byte *p) { return *(u16 *)p; }
+static inline u32 get_u32_le(byte *p) { return *(u32 *)p; }
+static inline u64 get_u64_le(byte *p) { return *(u64 *)p; }
+static inline void put_u16_le(byte *p, uns x) { *(u16 *)p = x; }
+static inline void put_u32_le(byte *p, u32 x) { *(u32 *)p = x; }
+static inline void put_u64_le(byte *p, u64 x) { *(u64 *)p = x; }
+#else
+static inline uns get_u16_le(byte *p)
+{
+ return p[0] | (p[1] << 8);
+}
+static inline u32 get_u32_le(byte *p)
+{
+ return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24);
+}
+static inline u64 get_u64_le(byte *p)
+{
+ return get_u32_le(p) | ((u64) get_u32_le(p+4) << 32);
+}
+static inline void put_u16_le(byte *p, uns x)
+{
+ p[0] = x;
+ p[1] = x >> 8;
+}
+static inline void put_u32_le(byte *p, u32 x)
+{
+ p[0] = x;
+ p[1] = x >> 8;
+ p[2] = x >> 16;
+ p[3] = x >> 24;
+}
+static inline void put_u64_le(byte *p, u64 x)
+{
+ put_u32_le(p, x);
+ put_u32_le(p+4, x >> 32);
+}