Use __ASSEMBLER__ test macro not ASSEMBLER.
[kopensolaris-gnu/glibc.git] / linuxthreads / sysdeps / i386 / pt-machine.h
index 364b77c..919eda2 100644 (file)
@@ -1,6 +1,6 @@
 /* Machine-dependent pthreads configuration and inline functions.
    i386 version.
-   Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1996-2001, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson <rth@tamu.edu>.
 
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
+#ifndef _PT_MACHINE_H
+#define _PT_MACHINE_H  1
+
+#ifndef __ASSEMBLER__
 #ifndef PT_EI
 # define PT_EI extern inline
 #endif
 
+extern long int testandset (int *spinlock);
+extern int __compare_and_swap (long int *p, long int oldval, long int newval);
+
+/* Get some notion of the current stack.  Need not be exactly the top
+   of the stack, just something somewhere in the current frame.  */
+#define CURRENT_STACK_FRAME  __builtin_frame_address (0)
+
+
 /* Spinlock implementation; required.  */
-PT_EI int
+PT_EI long int
 testandset (int *spinlock)
 {
-  int ret;
+  long int ret;
 
   __asm__ __volatile__(
        "xchgl %0, %1"
@@ -39,12 +51,6 @@ testandset (int *spinlock)
 }
 
 
-/* Get some notion of the current stack.  Need not be exactly the top
-   of the stack, just something somewhere in the current frame.  */
-#define CURRENT_STACK_FRAME  stack_pointer
-register char * stack_pointer __asm__ ("%esp");
-
-
 /* Compare-and-swap for semaphores.
    Available on the 486 and above, but not on the 386.
    We test dynamically whether it's available or not. */
@@ -60,12 +66,13 @@ __compare_and_swap (long int *p, long int oldval, long int newval)
 
   __asm__ __volatile__ ("lock; cmpxchgl %3, %1; sete %0"
                        : "=q" (ret), "=m" (*p), "=a" (readval)
-                       : "r" (newval), "m" (*p), "a" (oldval));
+                       : "r" (newval), "m" (*p), "a" (oldval)
+                       : "memory");
   return ret;
 }
 
 
-extern inline int
+PT_EI int
 get_eflags (void)
 {
   int res;
@@ -74,7 +81,7 @@ get_eflags (void)
 }
 
 
-extern inline void
+PT_EI void
 set_eflags (int newflags)
 {
   __asm__ __volatile__ ("pushl %0; popfl" : : "r" (newflags) : "cc");
@@ -96,3 +103,6 @@ compare_and_swap_is_available (void)
      Otherwise, it's a 486 or above and it has cmpxchg.  */
   return changed != 0;
 }
+#endif /* __ASSEMBLER__ */
+
+#endif /* pt-machine.h */