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