Index: lib/Headers/Intrin.h =================================================================== --- lib/Headers/Intrin.h +++ lib/Headers/Intrin.h @@ -101,9 +101,13 @@ unsigned long __readcr8(void); unsigned int __readdr(unsigned int); unsigned int __readeflags(void); +static __inline__ unsigned char __readfsbyte(unsigned long); +static __inline__ unsigned long __readfsdword(unsigned long); +static __inline__ unsigned __int64 __readfsqword(unsigned long); +static __inline__ unsigned short __readfsword(unsigned long); unsigned __int64 __readmsr(unsigned long); unsigned __int64 __readpmc(unsigned long); @@ -767,6 +771,33 @@ __asm__ volatile ("" : : : "memory"); } /*----------------------------------------------------------------------------*\ +|* readfs +\*----------------------------------------------------------------------------*/ +static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__)) +__readfsbyte(unsigned long __addr) { + unsigned char __result; + __asm__ ("mov %%fs:(%1), %0" : "=r" (__result) : "r" (__addr)); + return __result; +} +static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__)) +__readfsdword(unsigned long __addr) { + unsigned long __result; + __asm__ ("mov %%fs:(%1), %0" : "=r" (__result) : "r" (__addr)); + return __result; +} +static __inline__ unsigned __int64 __attribute__((__always_inline__, __nodebug__)) +__readfsqword(unsigned long __addr) { + unsigned __int64 __result; + __asm__ ("mov %%fs:(%1), %0" : "=r" (__result) : "r" (__addr)); + return __result; +} +static __inline__ unsigned short __attribute__((__always_inline__, __nodebug__)) +__readfsword(unsigned long __addr) { + unsigned short __result; + __asm__ ("mov %%fs:(%1), %0" : "=r" (__result) : "r" (__addr)); + return __result; +} +/*----------------------------------------------------------------------------*\ |* Misc \*----------------------------------------------------------------------------*/ static __inline__ void * __attribute__((__always_inline__, __nodebug__))