OSDN Git Service

- fixup gnu_inline vs. C99 inline
[uclinux-h8/uClibc.git] / libpthread / linuxthreads.old / sysdeps / frv / pt-machine.h
1 /* Machine-dependent pthreads configuration and inline functions.
2    FR-V version.
3    Copyright (C) 2004  Free Software Foundation, Inc.
4    This file is part of the GNU C Library.
5    Contributed by Alexandre Oliva <aoliva@redhat.com>
6
7    The GNU C Library is free software; you can redistribute it and/or
8    modify it under the terms of the GNU Lesser General Public License as
9    published by the Free Software Foundation; either version 2.1 of the
10    License, or (at your option) any later version.
11
12    The GNU C Library is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    Lesser General Public License for more details.
16
17    You should have received a copy of the GNU Lesser General Public
18    License along with the GNU C Library; see the file COPYING.LIB.  If
19    not, write to the Free Software Foundation, Inc.,
20    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
21
22 #ifndef _PT_MACHINE_H
23 #define _PT_MACHINE_H   1
24
25 #include <features.h>
26
27 #ifndef __ASSEMBLER__
28
29 #ifndef PT_EI
30 # if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
31 #  define PT_EI static inline __attribute__((always_inline))
32 # else
33 #  define PT_EI extern inline __attribute__((always_inline))
34 # endif
35 #endif
36
37 /* Spinlock implementation; required.  */
38 PT_EI long int
39 testandset (int *spinlock)
40 {
41   int i = 1;
42   asm ("swap%I0 %M0, %1" : "+m"(*(volatile int *)spinlock), "+r"(i));
43   return i;
44 }
45
46 /* We want the OS to assign stack addresses.  */
47 #define FLOATING_STACKS 1
48
49 /* This symbol is defined by the ABI as the stack size requested by
50    the main program.  */
51 extern char __stacksize;
52 #define ARCH_STACK_MAX_SIZE ((unsigned long)&__stacksize)
53
54 /* Memory barrier; default is to do nothing */
55 #define MEMORY_BARRIER() __asm__ __volatile__("membar" : : : "memory")
56 /* Write barrier.  */
57 #define WRITE_MEMORY_BARRIER() __asm__ __volatile__("membar" : : : "memory")
58
59 /* Return the thread descriptor for the current thread.  */
60 register struct _pthread_descr_struct *THREAD_SELF asm ("gr29");
61 #define THREAD_SELF THREAD_SELF
62
63 /* Initialize the thread-unique value.  */
64 #define INIT_THREAD_SELF(descr, nr) \
65   (THREAD_SELF = descr)
66
67 /* Get some notion of the current stack.  Need not be exactly the top
68    of the stack, just something somewhere in the current frame.  */
69 #define CURRENT_STACK_FRAME  stack_pointer
70 register char * stack_pointer __asm__ ("sp");
71
72 #endif
73
74 #endif /* pt-machine.h */