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

Subversion Repositories or1k

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1325 phoenix
/* Machine-dependent pthreads configuration and inline functions.
2
   m68k version.
3
   Copyright (C) 1996, 1998, 2000, 2002 Free Software Foundation, Inc.
4
   This file is part of the GNU C Library.
5
   Contributed by Richard Henderson <rth@tamu.edu>.
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
#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
/* Spinlock implementation; required.  */
33
PT_EI long int
34
testandset (int *spinlock)
35
{
36
  char ret;
37
 
38
  __asm__ __volatile__(
39
#if !defined(__mcoldfire__) && !defined(__mcf5200__) && !defined(__m68000)
40
         "tas %1; sne %0"
41
#else
42
         "bset #7,%1; sne %0"
43
#endif
44
       : "=dm"(ret), "=m"(*spinlock)
45
       : "m"(*spinlock)
46
       : "cc");
47
 
48
  return ret;
49
}
50
 
51
 
52
/* Get some notion of the current stack.  Need not be exactly the top
53
   of the stack, just something somewhere in the current frame.  */
54
#define CURRENT_STACK_FRAME  stack_pointer
55
register char * stack_pointer __asm__ ("%sp");
56
 
57
 
58
/* Compare-and-swap for semaphores. */
59
 
60
#if !defined(__mcoldfire__) && !defined(__mcf5200__) && !defined(__mc68000)
61
#define HAS_COMPARE_AND_SWAP
62
PT_EI int
63
__compare_and_swap (long int *p, long int oldval, long int newval)
64
{
65
  char ret;
66
  long int readval;
67
 
68
  __asm__ __volatile__ ("casl %2, %3, %1; seq %0"
69
                        : "=dm" (ret), "=m" (*p), "=d" (readval)
70
                        : "d" (newval), "m" (*p), "2" (oldval));
71
 
72
  return ret;
73
}
74
#endif
75
 
76
#endif /* pt-machine.h */

powered by: WebSVN 2.1.0

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