Line 0
Link Here
|
|
|
1 |
#if defined(__arm__) |
2 |
|
3 |
/* Unaligned 32 bits read on ARM */ |
4 |
#ifndef __ARMEB__ |
5 |
#define get_unaligned(p) __get_unaligned_le32((__u8*)(p)) |
6 |
#define put_unaligned(v,p) __put_unaligned_le32((v),(__u8*)(p)) |
7 |
#else |
8 |
#define get_unaligned(p) __get_unaligned_be32((__u8*)(p)) |
9 |
#define put_unaligned(v,p) __put_unaligned_be32((v),(__u8*)(p)) |
10 |
#endif |
11 |
|
12 |
static inline void __put_unaligned_le32(__u32 v, register __u8 *p) |
13 |
{ |
14 |
*p++ = v; |
15 |
*p++ = v >> 8; |
16 |
*p++ = v >> 16; |
17 |
*p = v >> 24; |
18 |
} |
19 |
|
20 |
static inline void __put_unaligned_be32(__u32 v, register __u8 *p) |
21 |
{ |
22 |
*p++ = v >> 24; |
23 |
*p++ = v >> 16; |
24 |
*p++ = v >> 8; |
25 |
*p = v; |
26 |
} |
27 |
|
28 |
static inline __u32 __get_unaligned_le32(__u8* p) |
29 |
{ |
30 |
return p[0] | p[1] << 8 | p[2] << 16 | p[3] << 24; |
31 |
} |
32 |
|
33 |
static inline __u32 __get_unaligned_be32(__u8 *p) |
34 |
{ |
35 |
return p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3]; |
36 |
} |
37 |
|
38 |
#else |
39 |
|
40 |
/* Generic unaligned read */ |
41 |
#define get_unaligned(ptr) (*(__u32*)(ptr)) |
42 |
/* Generic unalgined write */ |
43 |
#define put_unaligned(val, ptr) ((void)( *(ptr) = (val) )) |
44 |
|
45 |
#endif |