File: /usr/src/linux/include/asm-i386/unaligned.h

1     #ifndef __I386_UNALIGNED_H
2     #define __I386_UNALIGNED_H
3     
4     /*
5      * The i386 can do unaligned accesses itself. 
6      *
7      * The strange macros are there to make sure these can't
8      * be misused in a way that makes them not work on other
9      * architectures where unaligned accesses aren't as simple.
10      */
11     
12     /**
13      * get_unaligned - get value from possibly mis-aligned location
14      * @ptr: pointer to value
15      *
16      * This macro should be used for accessing values larger in size than 
17      * single bytes at locations that are expected to be improperly aligned, 
18      * e.g. retrieving a u16 value from a location not u16-aligned.
19      *
20      * Note that unaligned accesses can be very expensive on some architectures.
21      */
22     #define get_unaligned(ptr) (*(ptr))
23     
24     /**
25      * put_unaligned - put value to a possibly mis-aligned location
26      * @val: value to place
27      * @ptr: pointer to location
28      *
29      * This macro should be used for placing values larger in size than 
30      * single bytes at locations that are expected to be improperly aligned, 
31      * e.g. writing a u16 value to a location not u16-aligned.
32      *
33      * Note that unaligned accesses can be very expensive on some architectures.
34      */
35     #define put_unaligned(val, ptr) ((void)( *(ptr) = (val) ))
36     
37     #endif
38