From 00d04db68213730dd9a17ad3a748c470382e5cf6 Mon Sep 17 00:00:00 2001 From: Benjamin Kosnik Date: Fri, 27 Feb 2004 20:56:46 +0000 Subject: atomicity.h: Include c++config.h to get defines. 2004-02-27 Benjamin Kosnik * config/cpu/hppa/atomicity.h: Include c++config.h to get defines. * src/misc-inst.cc (_S_atomicity_lock): Move to __gnu_cxx. * config/os/irix/irix5.2/atomicity.h: Merge.. * config/os/irix/irix6.5/atomicity.h: Merge.. * config/os/irix/atomicity.h: ...into this. * config/os/irix/atomic_word.h: New. * configure.host: Set atomic_word_dir for irix. * hppa/atomicity.h: Change __Atomicity_lock to _Atomicity_lock. * i386/atomicity.h: Same. * m68k/atomicity.h: Same. * sparc/atomicity.h: Same. From-SVN: r78577 --- libstdc++-v3/ChangeLog | 21 ++++++++++- libstdc++-v3/config/cpu/hppa/atomicity.h | 22 +++++------ libstdc++-v3/config/cpu/i386/atomicity.h | 12 +++--- libstdc++-v3/config/cpu/m68k/atomicity.h | 14 +++---- libstdc++-v3/config/cpu/sparc/atomicity.h | 14 +++---- libstdc++-v3/config/os/irix/atomic_word.h | 35 +++++++++++++++++ libstdc++-v3/config/os/irix/atomicity.h | 42 +++++++++++++++++++++ libstdc++-v3/config/os/irix/irix5.2/atomicity.h | 50 ------------------------- libstdc++-v3/config/os/irix/irix6.5/atomicity.h | 50 ------------------------- libstdc++-v3/configure.host | 6 ++- libstdc++-v3/src/misc-inst.cc | 10 ++--- 11 files changed, 136 insertions(+), 140 deletions(-) create mode 100644 libstdc++-v3/config/os/irix/atomic_word.h create mode 100644 libstdc++-v3/config/os/irix/atomicity.h delete mode 100644 libstdc++-v3/config/os/irix/irix5.2/atomicity.h delete mode 100644 libstdc++-v3/config/os/irix/irix6.5/atomicity.h (limited to 'libstdc++-v3') diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index a99ccea6bb3..c6fe7ae3f6c 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,7 +1,24 @@ +2004-02-27 Benjamin Kosnik + + * config/cpu/hppa/atomicity.h: Include c++config.h to get defines. + + * src/misc-inst.cc (_S_atomicity_lock): Move to __gnu_cxx. + + * config/os/irix/irix5.2/atomicity.h: Merge.. + * config/os/irix/irix6.5/atomicity.h: Merge.. + * config/os/irix/atomicity.h: ...into this. + * config/os/irix/atomic_word.h: New. + * configure.host: Set atomic_word_dir for irix. + + * hppa/atomicity.h: Change __Atomicity_lock to _Atomicity_lock. + * i386/atomicity.h: Same. + * m68k/atomicity.h: Same. + * sparc/atomicity.h: Same. + 2004-02-27 David Edelsohn * config/os/aix/atomicity.h: Use __gnu_cxx namespace. Remove - static, and inline keyworks. + static, and inline keywords. 2004-02-27 Paolo Carlini @@ -74,7 +91,7 @@ (ios_base::Init::~Init): Same. * src/locale.cc (locale::id::_M_id): Same. * config/cpu/i486/atomicity.h: Use __gnu_cxx namespace. Remove - static, and inline keyworks. + static, and inline keywords. * config/cpu/alpha/atomicity.h: Same. * config/cpu/cris/atomicity.h: Same. * config/cpu/generic/atomicity.h: Same. diff --git a/libstdc++-v3/config/cpu/hppa/atomicity.h b/libstdc++-v3/config/cpu/hppa/atomicity.h index 4e0c2525a70..2b1ce90de47 100644 --- a/libstdc++-v3/config/cpu/hppa/atomicity.h +++ b/libstdc++-v3/config/cpu/hppa/atomicity.h @@ -27,26 +27,26 @@ // invalidate any other reasons why the executable file might be covered by // the GNU General Public License. +#include #include namespace __gnu_cxx { - template - struct __Atomicity_lock + template + struct _Atomicity_lock { static volatile int _S_atomicity_lock; }; - template + template volatile int - __Atomicity_lock<__inst>::_S_atomicity_lock __attribute__ ((aligned (16))) = 1; + _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. */ + // 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; + template volatile int _Atomicity_lock<0>::_S_atomicity_lock; #endif int @@ -55,7 +55,7 @@ namespace __gnu_cxx { _Atomic_word result; int tmp; - volatile int& lock = __Atomicity_lock<0>::_S_atomicity_lock; + volatile int& lock = _Atomicity_lock<0>::_S_atomicity_lock; __asm__ __volatile__ ("ldcw 0(%1),%0\n\t" "cmpib,<>,n 0,%0,.+20\n\t" @@ -79,7 +79,7 @@ namespace __gnu_cxx __atomic_add(_Atomic_word* __mem, int __val) { int tmp; - volatile int& lock = __Atomicity_lock<0>::_S_atomicity_lock; + volatile int& lock = _Atomicity_lock<0>::_S_atomicity_lock; __asm__ __volatile__ ("ldcw 0(%1),%0\n\t" "cmpib,<>,n 0,%0,.+20\n\t" diff --git a/libstdc++-v3/config/cpu/i386/atomicity.h b/libstdc++-v3/config/cpu/i386/atomicity.h index 968bd249db2..92c03d59ab3 100644 --- a/libstdc++-v3/config/cpu/i386/atomicity.h +++ b/libstdc++-v3/config/cpu/i386/atomicity.h @@ -32,15 +32,15 @@ namespace __gnu_cxx { template - struct __Atomicity_lock + struct _Atomicity_lock { static volatile _Atomic_word _S_atomicity_lock; }; template - volatile _Atomic_word __Atomicity_lock<__inst>::_S_atomicity_lock = 0; + volatile _Atomic_word _Atomicity_lock<__inst>::_S_atomicity_lock = 0; - template volatile _Atomic_word __Atomicity_lock<0>::_S_atomicity_lock; + template volatile _Atomic_word _Atomicity_lock<0>::_S_atomicity_lock; _Atomic_word __attribute__ ((__unused__)) @@ -52,9 +52,9 @@ namespace __gnu_cxx do { __asm__ __volatile__ ("xchg{l} {%0,%1|%1,%0}" - : "=m" (__Atomicity_lock<0>::_S_atomicity_lock), + : "=m" (_Atomicity_lock<0>::_S_atomicity_lock), "+r" (__tmp) - : "m" (__Atomicity_lock<0>::_S_atomicity_lock)); + : "m" (_Atomicity_lock<0>::_S_atomicity_lock)); } while (__tmp); @@ -62,7 +62,7 @@ namespace __gnu_cxx *__mem += __val; // Release spin lock. - __Atomicity_lock<0>::_S_atomicity_lock = 0; + _Atomicity_lock<0>::_S_atomicity_lock = 0; return __result; } diff --git a/libstdc++-v3/config/cpu/m68k/atomicity.h b/libstdc++-v3/config/cpu/m68k/atomicity.h index b5827320c80..0e58f3c5f07 100644 --- a/libstdc++-v3/config/cpu/m68k/atomicity.h +++ b/libstdc++-v3/config/cpu/m68k/atomicity.h @@ -72,15 +72,15 @@ namespace __gnu_cxx #else template - struct __Atomicity_lock + struct _Atomicity_lock { static volatile unsigned char _S_atomicity_lock; }; template - volatile unsigned char __Atomicity_lock<__inst>::_S_atomicity_lock = 0; + volatile unsigned char _Atomicity_lock<__inst>::_S_atomicity_lock = 0; - template volatile unsigned char __Atomicity_lock<0>::_S_atomicity_lock; + template volatile unsigned char _Atomicity_lock<0>::_S_atomicity_lock; _Atomic_word __attribute__ ((__unused__)) @@ -92,13 +92,13 @@ namespace __gnu_cxx #if defined(__mcf5200__) || defined(__mcf5300__) __asm__ __volatile__("1: bset.b #7,%0@\n\tjbne 1b" : /* no outputs */ - : "a"(&__Atomicity_lock<0>::_S_atomicity_lock) + : "a"(&_Atomicity_lock<0>::_S_atomicity_lock) : "cc", "memory"); // CPU32 and MCF5400 support test-and-set (SMP-safe). #elif defined(__mcpu32__) || defined(__mcf5400__) __asm__ __volatile__("1: tas %0\n\tjbne 1b" - : "+m"(__Atomicity_lock<0>::_S_atomicity_lock) + : "+m"(_Atomicity_lock<0>::_S_atomicity_lock) : /* none */ : "cc"); @@ -107,7 +107,7 @@ namespace __gnu_cxx // memory controllers. #else __asm__ __volatile__("1: bset.b #7,%0\n\tjbne 1b" - : "+m"(__Atomicity_lock<0>::_S_atomicity_lock) + : "+m"(_Atomicity_lock<0>::_S_atomicity_lock) : /* none */ : "cc"); #endif @@ -115,7 +115,7 @@ namespace __gnu_cxx __result = *__mem; *__mem = __result + __val; - __Atomicity_lock<0>::_S_atomicity_lock = 0; + _Atomicity_lock<0>::_S_atomicity_lock = 0; return __result; } diff --git a/libstdc++-v3/config/cpu/sparc/atomicity.h b/libstdc++-v3/config/cpu/sparc/atomicity.h index 6d4b19b75bd..a39153b7139 100644 --- a/libstdc++-v3/config/cpu/sparc/atomicity.h +++ b/libstdc++-v3/config/cpu/sparc/atomicity.h @@ -70,15 +70,15 @@ namespace __gnu_cxx #else /* __arch32__ */ template - struct __Atomicity_lock + struct _Atomicity_lock { static unsigned char _S_atomicity_lock; }; template - unsigned char __Atomicity_lock<__inst>::_S_atomicity_lock = 0; + unsigned char _Atomicity_lock<__inst>::_S_atomicity_lock = 0; - template unsigned char __Atomicity_lock<0>::_S_atomicity_lock; + template unsigned char _Atomicity_lock<0>::_S_atomicity_lock; _Atomic_word __attribute__ ((__unused__)) @@ -91,13 +91,13 @@ namespace __gnu_cxx " bne 1b\n\t" " nop" : "=&r" (__tmp) - : "r" (&__Atomicity_lock<0>::_S_atomicity_lock) + : "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) + : "r" (&_Atomicity_lock<0>::_S_atomicity_lock) : "memory"); return __result; } @@ -113,12 +113,12 @@ namespace __gnu_cxx " bne 1b\n\t" " nop" : "=&r" (__tmp) - : "r" (&__Atomicity_lock<0>::_S_atomicity_lock) + : "r" (&_Atomicity_lock<0>::_S_atomicity_lock) : "memory"); *__mem += __val; __asm__ __volatile__("stb %%g0, [%0]" : /* no outputs */ - : "r" (&__Atomicity_lock<0>::_S_atomicity_lock) + : "r" (&_Atomicity_lock<0>::_S_atomicity_lock) : "memory"); } #endif /* __arch32__ */ diff --git a/libstdc++-v3/config/os/irix/atomic_word.h b/libstdc++-v3/config/os/irix/atomic_word.h new file mode 100644 index 00000000000..68b8101c737 --- /dev/null +++ b/libstdc++-v3/config/os/irix/atomic_word.h @@ -0,0 +1,35 @@ +// Low-level type for atomic operations -*- C++ -*- + +// Copyright (C) 2004 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_ATOMIC_WORD_H +#define _GLIBCXX_ATOMIC_WORD_H 1 + +typedef long _Atomic_word; + +#endif diff --git a/libstdc++-v3/config/os/irix/atomicity.h b/libstdc++-v3/config/os/irix/atomicity.h new file mode 100644 index 00000000000..83e9e029338 --- /dev/null +++ b/libstdc++-v3/config/os/irix/atomicity.h @@ -0,0 +1,42 @@ +// Low-level functions for atomic operations: IRIX version -*- C++ -*- + +// Copyright (C) 2001, 2004 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. + +#include +#include + +namespace __gnu_cxx +{ + _Atomic_word + __exchange_and_add(volatile _Atomic_word* __mem, int __val) + { return (_Atomic_word) test_then_add((unsigned long*) const_cast<_Atomic_word*>(__mem), __val); } + + void + __atomic_add(volatile _Atomic_word* __mem, int __val) + { __exchange_and_add(__mem, __val); } +} // namespace __gnu_cxx diff --git a/libstdc++-v3/config/os/irix/irix5.2/atomicity.h b/libstdc++-v3/config/os/irix/irix5.2/atomicity.h deleted file mode 100644 index bac483e2f16..00000000000 --- a/libstdc++-v3/config/os/irix/irix5.2/atomicity.h +++ /dev/null @@ -1,50 +0,0 @@ -// Low-level functions for atomic operations: IRIX version -*- C++ -*- - -// Copyright (C) 2001 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 _BITS_ATOMICITY_H -#define _BITS_ATOMICITY_H 1 - -#include - -typedef long _Atomic_word; - -static inline _Atomic_word -__exchange_and_add (_Atomic_word* __mem, int __val) -{ - return (_Atomic_word) test_then_add ((unsigned long*) __mem, __val); -} - - -static inline void -__atomic_add (_Atomic_word* __mem, int __val) -{ - __exchange_and_add (__mem, __val); -} - -#endif /* atomicity.h */ diff --git a/libstdc++-v3/config/os/irix/irix6.5/atomicity.h b/libstdc++-v3/config/os/irix/irix6.5/atomicity.h deleted file mode 100644 index c7f5c83f4ed..00000000000 --- a/libstdc++-v3/config/os/irix/irix6.5/atomicity.h +++ /dev/null @@ -1,50 +0,0 @@ -// Low-level functions for atomic operations: IRIX version -*- C++ -*- - -// Copyright (C) 2000, 2001 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 _BITS_ATOMICITY_H -#define _BITS_ATOMICITY_H 1 - -#include - -typedef long _Atomic_word; - -static inline _Atomic_word -__exchange_and_add (_Atomic_word* __mem, int __val) -{ - return (_Atomic_word) test_then_add ((unsigned long*) __mem, __val); -} - - -static inline void -__atomic_add (_Atomic_word* __mem, int __val) -{ - __exchange_and_add (__mem, __val); -} - -#endif /* atomicity.h */ diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host index f6492b29e5e..747cf74099a 100644 --- a/libstdc++-v3/configure.host +++ b/libstdc++-v3/configure.host @@ -170,11 +170,13 @@ case "${host_os}" in irix[1-6] | irix[1-5].* | irix6.[0-4]*) # This is known to work on at least IRIX 5.2 and 6.3. os_include_dir="os/irix/irix5.2" - atomicity_dir=$os_include_dir + atomicity_dir=os/irix + atomic_word_dir=os/irix ;; irix6.5*) os_include_dir="os/irix/irix6.5" - atomicity_dir=$os_include_dir + atomicity_dir=os/irix + atomic_word_dir=os/irix ;; mingw32*) os_include_dir="os/mingw32" diff --git a/libstdc++-v3/src/misc-inst.cc b/libstdc++-v3/src/misc-inst.cc index 37a4d3d460b..c4496525928 100644 --- a/libstdc++-v3/src/misc-inst.cc +++ b/libstdc++-v3/src/misc-inst.cc @@ -1,6 +1,6 @@ // Explicit instantiation file. -// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -42,10 +42,6 @@ namespace std { -#ifdef _GLIBCXX_INST_ATOMICITY_LOCK - template volatile int __Atomicity_lock<0>::_S_atomicity_lock; -#endif - // string related to iostreams template basic_istream& @@ -77,6 +73,10 @@ namespace std namespace __gnu_cxx { +#ifdef _GLIBCXX_INST_ATOMICITY_LOCK + template volatile int _Atomicity_lock<0>::_S_atomicity_lock; +#endif + #ifdef _GLIBCXX_NEED_GENERIC_MUTEX #ifdef __GTHREAD_MUTEX_INIT __gthread_mutex_t _Atomic_add_mutex = __GTHREAD_MUTEX_INIT; -- cgit v1.2.1