1 extern inline unsigned char get_fs_byte(const char * addr
)
3 unsigned register char _v
;
5 __asm__ ("movb %%fs:%1,%0":"=r" (_v
):"m" (*addr
));
9 extern inline unsigned short get_fs_word(const unsigned short *addr
)
13 __asm__ ("movw %%fs:%1,%0":"=r" (_v
):"m" (*addr
));
17 extern inline unsigned long get_fs_long(const unsigned long *addr
)
21 __asm__ ("movl %%fs:%1,%0":"=r" (_v
):"m" (*addr
)); \
25 extern inline void put_fs_byte(char val
,char *addr
)
27 __asm__ ("movb %0,%%fs:%1"::"r" (val
),"m" (*addr
));
30 extern inline void put_fs_word(short val
,short * addr
)
32 __asm__ ("movw %0,%%fs:%1"::"r" (val
),"m" (*addr
));
35 extern inline void put_fs_long(unsigned long val
,unsigned long * addr
)
37 __asm__ ("movl %0,%%fs:%1"::"r" (val
),"m" (*addr
));
41 * Someone who knows GNU asm better than I should double check the followig.
42 * It seems to work, but I don't know if I'm doing something subtly wrong.
46 extern inline unsigned long get_fs()
49 __asm__("mov %%fs,%%ax":"=a" (_v
):);
53 extern inline unsigned long get_ds()
56 __asm__("mov %%ds,%%ax":"=a" (_v
):);
60 extern inline void set_fs(unsigned long val
)
62 __asm__("mov %0,%%fs"::"a" ((unsigned short) val
));