#define READ32_SEG(SEG, value, var) \
__asm__("movl %%" #SEG ":%1, %0" : "=ri"(value) \
: "m"(var), "m"(__segment_ ## SEG))
-#define READ64_SEG(SEG, value, var) do { \
- union u64_u32_u *__w64_ptr = (union u64_u32_u *)&(value); \
- union u64_u32_u *__r64_ptr = (union u64_u32_u *)&(var); \
- READ32_SEG(SEG, __w64_ptr->hi, __r64_ptr->hi); \
- READ32_SEG(SEG, __w64_ptr->lo, __r64_ptr->lo); \
+#define READ64_SEG(SEG, value, var) do { \
+ union u64_u32_u __value; \
+ union u64_u32_u *__r64_ptr = (union u64_u32_u *)&(var); \
+ READ32_SEG(SEG, __value.hi, __r64_ptr->hi); \
+ READ32_SEG(SEG, __value.lo, __r64_ptr->lo); \
+ (value) = __value.val; \
} while (0)
#define WRITE8_SEG(SEG, var, value) \
__asm__("movb %b1, %%" #SEG ":%0" : "=m"(var) \