This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH, libstdc++] AIX memory barriers


	Appended is the preliminary AIX support for atomic_word.h.  Recent
AIX assemblers do not yet have support for lwsync mnemonic, so I need to
use sync.  Eventually configure can test for support or atomic_word.h can
test for a specific OS release.

	Also, POWER did not support MP.  One could use older "dcs"
equivalent of "sync", but it does not provide any benefit.

	Handling AIX common mode is a problem.  It requires runtime
testing and code modification.  I am punting for now.  If one wants to use
this functionality on an MP system, one should be compiling with an option
enabling PowerPC instructions.

David


	* configure.host (aix4*|aix5*): Add atomic_word_dir.
	* config/os/aix/atomic_word.h: New file.

Index: configure.host
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/configure.host,v
retrieving revision 1.32
diff -c -p -r1.32 configure.host
*** configure.host	30 Oct 2004 01:03:07 -0000	1.32
--- configure.host	28 Dec 2004 16:30:32 -0000
*************** case "${host_os}" in
*** 155,165 ****
--- 155,167 ----
      # explicitly duplicate the directory for 4.[<3].
      os_include_dir="os/aix"
      atomicity_dir="os/aix"
+     atomic_word_dir="os/aix"
      OPT_LDFLAGS="-Wl,-G"
      ;;
    aix4.*)
      os_include_dir="os/generic"
      atomicity_dir="os/aix"
+     atomic_word_dir="os/aix"
      ;;
    aix*)
      os_include_dir="os/generic"
*** /dev/null	Tue Dec 28 11:30:47 2004
--- config/os/aix/atomic_word.h	Tue Dec 28 00:42:26 2004
***************
*** 0 ****
--- 1,43 ----
+ // 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 int _Atomic_word;
+ 
+ #ifdef _ARCH_PPC
+ #define _GLIBCXX_READ_MEM_BARRIER __asm __volatile ("isync":::"memory")
+ #define _GLIBCXX_WRITE_MEM_BARRIER __asm __volatile ("sync":::"memory")
+ #else
+ #define _GLIBCXX_READ_MEM_BARRIER __asm __volatile ("":::"memory")
+ #define _GLIBCXX_WRITE_MEM_BARRIER __asm __volatile ("":::"memory")
+ #endif 
+ 
+ #endif


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]