@@ -54,19 +54,32 @@ static void fail(const char *format, ...)
54
54
}
55
55
56
56
/*
57
- * Evil macros to do a little-endian read.
57
+ * Evil macros for little-endian reads and writes
58
58
*/
59
59
#define GLE (x , bits , ifnot ) \
60
60
__builtin_choose_expr( \
61
61
(sizeof(*(x)) == bits/8), \
62
62
(__typeof__(*(x)))get_unaligned_le##bits(x), ifnot)
63
63
64
64
extern void bad_get_le (void );
65
- #define LAST_LE (x ) \
65
+ #define LAST_GLE (x ) \
66
66
__builtin_choose_expr(sizeof(*(x)) == 1, *(x), bad_get_le())
67
67
68
68
#define GET_LE (x ) \
69
- GLE(x, 64, GLE(x, 32, GLE(x, 16, LAST_LE(x))))
69
+ GLE(x, 64, GLE(x, 32, GLE(x, 16, LAST_GLE(x))))
70
+
71
+ #define PLE (x , val , bits , ifnot ) \
72
+ __builtin_choose_expr( \
73
+ (sizeof(*(x)) == bits/8), \
74
+ put_unaligned_le##bits((val), (x)), ifnot)
75
+
76
+ extern void bad_put_le (void );
77
+ #define LAST_PLE (x , val ) \
78
+ __builtin_choose_expr(sizeof(*(x)) == 1, *(x) = (val), bad_put_le())
79
+
80
+ #define PUT_LE (x , val ) \
81
+ PLE(x, val, 64, PLE(x, val, 32, PLE(x, val, 16, LAST_PLE(x, val))))
82
+
70
83
71
84
#define NSYMS (sizeof(required_syms) / sizeof(required_syms[0]))
72
85
0 commit comments