diff options
author | joq <joq@0c269be4-1314-0410-8aa9-9f06e86f4224> | 2004-07-27 03:47:29 +0000 |
---|---|---|
committer | joq <joq@0c269be4-1314-0410-8aa9-9f06e86f4224> | 2004-07-27 03:47:29 +0000 |
commit | c11a16d92f474a68e43b8c865162229f26e25829 (patch) | |
tree | 167a351240699bc206da26743ed18c9e500677dc /config | |
parent | bcaa13e4f50974d5922f39b1874d106ff922f3be (diff) | |
download | jack1-c11a16d92f474a68e43b8c865162229f26e25829.tar.gz |
[0.98.7] more threading fixes
git-svn-id: svn+ssh://jackaudio.org/trunk/jack@736 0c269be4-1314-0410-8aa9-9f06e86f4224
Diffstat (limited to 'config')
-rw-r--r-- | config/cpu/hppa/atomicity.h | 90 | ||||
-rw-r--r-- | config/cpu/sparc/atomicity.h | 131 |
2 files changed, 0 insertions, 221 deletions
diff --git a/config/cpu/hppa/atomicity.h b/config/cpu/hppa/atomicity.h deleted file mode 100644 index b074142..0000000 --- a/config/cpu/hppa/atomicity.h +++ /dev/null @@ -1,90 +0,0 @@ -/* Low-level functions for atomic operations. PA-RISC version. -*- C++ -*- - Copyright 2002 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#ifndef _GLIBCXX_ATOMICITY_H -#define _GLIBCXX_ATOMICITY_H 1 - -typedef int _Atomic_word; - -template <int __inst> -struct __Atomicity_lock -{ - static volatile int _S_atomicity_lock; -}; - -template <int __inst> -volatile int -__Atomicity_lock<__inst>::_S_atomicity_lock __attribute__ ((aligned (16))) = 1; - -/* Because of the lack of weak support when using the hpux - som linker, we explicitly instantiate the atomicity lock - in src/misc-inst.cc when _GLIBCXX_INST_ATOMICITY_LOCK - is defined. */ -#ifndef _GLIBCXX_INST_ATOMICITY_LOCK -template volatile int __Atomicity_lock<0>::_S_atomicity_lock; -#endif - -static inline int -__attribute__ ((__unused__)) -__exchange_and_add(volatile _Atomic_word* __mem, int __val) -{ - _Atomic_word result; - int tmp; - volatile int& lock = __Atomicity_lock<0>::_S_atomicity_lock; - - __asm__ __volatile__ ("ldcw 0(%1),%0\n\t" - "cmpib,<>,n 0,%0,.+20\n\t" - "ldw 0(%1),%0\n\t" - "cmpib,= 0,%0,.-4\n\t" - "nop\n\t" - "b,n .-20" - : "=&r" (tmp) - : "r" (&lock)); - - result = *__mem; - *__mem = result + __val; - /* Reset lock with PA 2.0 "ordered" store. */ - __asm__ __volatile__ ("stw,ma %1,0(%0)" - : : "r" (&lock), "r" (tmp) : "memory"); - return result; -} - -static inline void -__attribute__ ((__unused__)) -__atomic_add(_Atomic_word* __mem, int __val) -{ - int tmp; - volatile int& lock = __Atomicity_lock<0>::_S_atomicity_lock; - - __asm__ __volatile__ ("ldcw 0(%1),%0\n\t" - "cmpib,<>,n 0,%0,.+20\n\t" - "ldw 0(%1),%0\n\t" - "cmpib,= 0,%0,.-4\n\t" - "nop\n\t" - "b,n .-20" - : "=&r" (tmp) - : "r" (&lock)); - - *__mem += __val; - /* Reset lock with PA 2.0 "ordered" store. */ - __asm__ __volatile__ ("stw,ma %1,0(%0)" - : : "r" (&lock), "r" (tmp) : "memory"); -} - -#endif diff --git a/config/cpu/sparc/atomicity.h b/config/cpu/sparc/atomicity.h deleted file mode 100644 index 2db079c..0000000 --- a/config/cpu/sparc/atomicity.h +++ /dev/null @@ -1,131 +0,0 @@ -// Low-level functions for atomic operations: Sparc version -*- C++ -*- - -// Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -#ifndef _GLIBCXX_ATOMICITY_H -#define _GLIBCXX_ATOMICITY_H 1 - -#ifdef __arch64__ - -typedef long _Atomic_word; - -static inline _Atomic_word -__attribute__ ((__unused__)) -__exchange_and_add(volatile _Atomic_word* __mem, int __val) -{ - _Atomic_word __tmp1, __tmp2; - _Atomic_word __val_extended = __val; - - __asm__ __volatile__("1: ldx [%3], %0\n\t" - " add %0, %4, %1\n\t" - " casx [%3], %0, %1\n\t" - " sub %0, %1, %0\n\t" - " brnz,pn %0, 1b\n\t" - " nop" - : "=&r" (__tmp1), "=&r" (__tmp2), "=m" (*__mem) - : "r" (__mem), "r" (__val_extended), "m" (*__mem)); - return __tmp2; -} - -static inline void -__attribute__ ((__unused__)) -__atomic_add(volatile _Atomic_word* __mem, int __val) -{ - _Atomic_word __tmp1, __tmp2; - _Atomic_word __val_extended = __val; - - __asm__ __volatile__("1: ldx [%3], %0\n\t" - " add %0, %4, %1\n\t" - " casx [%3], %0, %1\n\t" - " sub %0, %1, %0\n\t" - " brnz,pn %0, 1b\n\t" - " nop" - : "=&r" (__tmp1), "=&r" (__tmp2), "=m" (*__mem) - : "r" (__mem), "r" (__val_extended), "m" (*__mem)); -} - -#else /* __arch32__ */ - -typedef int _Atomic_word; - -template<int __inst> - struct __Atomicity_lock - { - static unsigned char _S_atomicity_lock; - }; - -template<int __inst> -unsigned char __Atomicity_lock<__inst>::_S_atomicity_lock = 0; - -template unsigned char __Atomicity_lock<0>::_S_atomicity_lock; - -static int -__attribute__ ((__unused__)) -__exchange_and_add(volatile _Atomic_word* __mem, int __val) -{ - _Atomic_word __result, __tmp; - - __asm__ __volatile__("1: ldstub [%1], %0\n\t" - " cmp %0, 0\n\t" - " bne 1b\n\t" - " nop" - : "=&r" (__tmp) - : "r" (&__Atomicity_lock<0>::_S_atomicity_lock) - : "memory"); - __result = *__mem; - *__mem += __val; - __asm__ __volatile__("stb %%g0, [%0]" - : /* no outputs */ - : "r" (&__Atomicity_lock<0>::_S_atomicity_lock) - : "memory"); - return __result; -} - -static void -__attribute__ ((__unused__)) -__atomic_add(volatile _Atomic_word* __mem, int __val) -{ - _Atomic_word __tmp; - - __asm__ __volatile__("1: ldstub [%1], %0\n\t" - " cmp %0, 0\n\t" - " bne 1b\n\t" - " nop" - : "=&r" (__tmp) - : "r" (&__Atomicity_lock<0>::_S_atomicity_lock) - : "memory"); - *__mem += __val; - __asm__ __volatile__("stb %%g0, [%0]" - : /* no outputs */ - : "r" (&__Atomicity_lock<0>::_S_atomicity_lock) - : "memory"); -} - -#endif /* __arch32__ */ - -#endif /* atomicity.h */ |