OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [uClibc/] [libpthread/] [linuxthreads/] [sysdeps/] [arm/] [pt-machine.h] - Blame information for rev 1771

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1325 phoenix
/* Machine-dependent pthreads configuration and inline functions.
2
   ARM version.
3
   Copyright (C) 1997, 1998, 2000, 2002 Free Software Foundation, Inc.
4
   This file is part of the GNU C Library.
5
   Contributed by Philip Blundell <philb@gnu.org>.
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 not,
19
   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20
   Boston, MA 02111-1307, USA.  */
21
 
22
#ifndef _PT_MACHINE_H
23
#define _PT_MACHINE_H   1
24
 
25
#ifndef PT_EI
26
# define PT_EI extern inline
27
#endif
28
 
29
extern long int testandset (int *spinlock);
30
extern int __compare_and_swap (long int *p, long int oldval, long int newval);
31
 
32
/* This will not work on ARM1 or ARM2 because SWP is lacking on those
33
   machines.  Unfortunately we have no way to detect this at compile
34
   time; let's hope nobody tries to use one.  */
35
 
36
/* Spinlock implementation; required.  */
37
PT_EI long int
38
testandset (int *spinlock)
39
{
40
  register unsigned int ret;
41
 
42
  __asm__ __volatile__("swp %0, %1, [%2]"
43
                       : "=r"(ret)
44
                       : "0"(1), "r"(spinlock));
45
 
46
  return ret;
47
}
48
 
49
 
50
/* Get some notion of the current stack.  Need not be exactly the top
51
   of the stack, just something somewhere in the current frame.  */
52
#define CURRENT_STACK_FRAME  stack_pointer
53
register char * stack_pointer __asm__ ("sp");
54
 
55
#endif /* pt-machine.h */

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.