diff options
Diffstat (limited to 'src/include/asm/segment.h')
-rw-r--r-- | src/include/asm/segment.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/include/asm/segment.h b/src/include/asm/segment.h new file mode 100644 index 0000000..94dd102 --- /dev/null +++ b/src/include/asm/segment.h | |||
@@ -0,0 +1,65 @@ | |||
1 | static inline unsigned char get_fs_byte(const char * addr) | ||
2 | { | ||
3 | unsigned register char _v; | ||
4 | |||
5 | __asm__ ("movb %%fs:%1,%0":"=r" (_v):"m" (*addr)); | ||
6 | return _v; | ||
7 | } | ||
8 | |||
9 | static inline unsigned short get_fs_word(const unsigned short *addr) | ||
10 | { | ||
11 | unsigned short _v; | ||
12 | |||
13 | __asm__ ("movw %%fs:%1,%0":"=r" (_v):"m" (*addr)); | ||
14 | return _v; | ||
15 | } | ||
16 | |||
17 | static inline unsigned long get_fs_long(const unsigned long *addr) | ||
18 | { | ||
19 | unsigned long _v; | ||
20 | |||
21 | __asm__ ("movl %%fs:%1,%0":"=r" (_v):"m" (*addr)); \ | ||
22 | return _v; | ||
23 | } | ||
24 | |||
25 | static inline void put_fs_byte(char val,char *addr) | ||
26 | { | ||
27 | __asm__ ("movb %0,%%fs:%1"::"r" (val),"m" (*addr)); | ||
28 | } | ||
29 | |||
30 | static inline void put_fs_word(short val,short * addr) | ||
31 | { | ||
32 | __asm__ ("movw %0,%%fs:%1"::"r" (val),"m" (*addr)); | ||
33 | } | ||
34 | |||
35 | static inline void put_fs_long(unsigned long val,unsigned long * addr) | ||
36 | { | ||
37 | __asm__ ("movl %0,%%fs:%1"::"r" (val),"m" (*addr)); | ||
38 | } | ||
39 | |||
40 | /* | ||
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. | ||
43 | * --- TYT, 11/24/91 | ||
44 | * [ nothing wrong here, Linus ] | ||
45 | */ | ||
46 | |||
47 | static inline unsigned long get_fs() | ||
48 | { | ||
49 | unsigned short _v; | ||
50 | __asm__("mov %%fs,%%ax":"=a" (_v):); | ||
51 | return _v; | ||
52 | } | ||
53 | |||
54 | static inline unsigned long get_ds() | ||
55 | { | ||
56 | unsigned short _v; | ||
57 | __asm__("mov %%ds,%%ax":"=a" (_v):); | ||
58 | return _v; | ||
59 | } | ||
60 | |||
61 | static inline void set_fs(unsigned long val) | ||
62 | { | ||
63 | __asm__("mov %0,%%fs"::"a" ((unsigned short) val)); | ||
64 | } | ||
65 | |||