mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-29 23:24:11 +08:00
x86/vdso: Add PUT_LE to store little-endian values
Add PUT_LE() by analogy with GET_LE() to write littleendian values in addition to reading them. Signed-off-by: Andy Lutomirski <luto@amacapital.net> Link: http://lkml.kernel.org/r/3d9b27e92745b27b6fda1b9a98f70dc9c1246c7a.1402620737.git.luto@amacapital.net Signed-off-by: H. Peter Anvin <hpa@zytor.com>
This commit is contained in:
parent
4ebbefd6b9
commit
b4b31f6101
@ -54,7 +54,7 @@ static void fail(const char *format, ...)
|
||||
}
|
||||
|
||||
/*
|
||||
* Evil macros to do a little-endian read.
|
||||
* Evil macros for little-endian reads and writes
|
||||
*/
|
||||
#define GLE(x, bits, ifnot) \
|
||||
__builtin_choose_expr( \
|
||||
@ -62,11 +62,24 @@ static void fail(const char *format, ...)
|
||||
(__typeof__(*(x)))get_unaligned_le##bits(x), ifnot)
|
||||
|
||||
extern void bad_get_le(void);
|
||||
#define LAST_LE(x) \
|
||||
#define LAST_GLE(x) \
|
||||
__builtin_choose_expr(sizeof(*(x)) == 1, *(x), bad_get_le())
|
||||
|
||||
#define GET_LE(x) \
|
||||
GLE(x, 64, GLE(x, 32, GLE(x, 16, LAST_LE(x))))
|
||||
GLE(x, 64, GLE(x, 32, GLE(x, 16, LAST_GLE(x))))
|
||||
|
||||
#define PLE(x, val, bits, ifnot) \
|
||||
__builtin_choose_expr( \
|
||||
(sizeof(*(x)) == bits/8), \
|
||||
put_unaligned_le##bits((val), (x)), ifnot)
|
||||
|
||||
extern void bad_put_le(void);
|
||||
#define LAST_PLE(x, val) \
|
||||
__builtin_choose_expr(sizeof(*(x)) == 1, *(x) = (val), bad_put_le())
|
||||
|
||||
#define PUT_LE(x, val) \
|
||||
PLE(x, val, 64, PLE(x, val, 32, PLE(x, val, 16, LAST_PLE(x, val))))
|
||||
|
||||
|
||||
#define NSYMS (sizeof(required_syms) / sizeof(required_syms[0]))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user