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