-#define CPU_DATA_GET(member, type) \
- cpu_data_t GS_RELATIVE *cpu_data = \
- (cpu_data_t GS_RELATIVE *)0UL; \
- type ret; \
- ret = cpu_data->member; \
- return ret;
-
-#define CPU_DATA_GET_INDEX(member, index, type) \
- cpu_data_t GS_RELATIVE *cpu_data = \
- (cpu_data_t GS_RELATIVE *)0UL; \
- type ret; \
- ret = cpu_data->member[index]; \
- return ret;
-
-#define CPU_DATA_SET(member, value) \
- cpu_data_t GS_RELATIVE *cpu_data = \
- (cpu_data_t GS_RELATIVE *)0UL; \
- cpu_data->member = value;
-
-#define CPU_DATA_XCHG(member, value, type) \
- cpu_data_t GS_RELATIVE *cpu_data = \
- (cpu_data_t GS_RELATIVE *)0UL; \
- type ret; \
- ret = cpu_data->member; \
- cpu_data->member = value; \
- return ret;
-
-#else /* !defined(__clang__) */
-
-#ifndef offsetof
-#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
-#endif /* offsetof */
-#define CPU_DATA_GET(member, type) \
- type ret; \
- __asm__ volatile ("mov %%gs:%P1,%0" \
- : "=r" (ret) \
- : "i" (offsetof(cpu_data_t,member))); \
- return ret;
-
-#define CPU_DATA_GET_INDEX(member, index, type) \
- type ret; \
- __asm__ volatile ("mov %%gs:(%1),%0" \
- : "=r" (ret) \
- : "r" (offsetof(cpu_data_t,member[index]))); \
- return ret;
-
-#define CPU_DATA_SET(member, value) \
- __asm__ volatile ("mov %0,%%gs:%P1" \
- : \
- : "r" (value), "i" (offsetof(cpu_data_t,member)));
-
-#define CPU_DATA_XCHG(member, value, type) \
- type ret; \
- __asm__ volatile ("xchg %0,%%gs:%P1" \
- : "=r" (ret) \
- : "i" (offsetof(cpu_data_t,member)), "0" (value)); \
- return ret;
-
-#endif /* !defined(__clang__) */