Major libcaps work to support userland threading. Stage 1/2.
[dragonfly.git] / lib / libcaps / i386 / md_globaldata.h
1 /*
2  * MD_GLOBALDATA.H
3  *
4  * $DragonFly: src/lib/libcaps/i386/md_globaldata.h,v 1.1 2003/12/04 22:06:22 dillon Exp $
5  */
6
7 #ifndef _MD_GLOBALDATA_H_
8 #define _MD_GLOBALDATA_H_
9
10 extern int __mycpu__dummy;
11  
12 static __inline
13 globaldata_t
14 _get_mycpu(void)
15 {
16     globaldata_t gd;
17
18     __asm ("movl %%gs:0,%0" : "=r" (gd) : "m"(__mycpu__dummy));
19     return(gd);
20 }
21
22 static __inline
23 void
24 _set_mycpu(int selector)
25 {
26     __asm __volatile("movl %0,%%gs" :: "a"(selector));
27 }
28
29 #define mycpu   _get_mycpu()
30
31 void md_gdinit(globaldata_t gd);
32
33 #endif
34