1117397Skan// Low-level functions for atomic operations: AIX version  -*- C++ -*-
2117397Skan
3169691Skan// Copyright (C) 2000, 2001, 2004, 2005 Free Software Foundation, Inc.
4117397Skan//
5117397Skan// This file is part of the GNU ISO C++ Library.  This library is free
6117397Skan// software; you can redistribute it and/or modify it under the
7117397Skan// terms of the GNU General Public License as published by the
8117397Skan// Free Software Foundation; either version 2, or (at your option)
9117397Skan// any later version.
10117397Skan
11117397Skan// This library is distributed in the hope that it will be useful,
12117397Skan// but WITHOUT ANY WARRANTY; without even the implied warranty of
13117397Skan// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14117397Skan// GNU General Public License for more details.
15117397Skan
16117397Skan// You should have received a copy of the GNU General Public License along
17117397Skan// with this library; see the file COPYING.  If not, write to the Free
18169691Skan// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19117397Skan// USA.
20117397Skan
21117397Skan// As a special exception, you may use this file as part of a free software
22117397Skan// library without restriction.  Specifically, if other files instantiate
23117397Skan// templates or use macros or inline functions from this file, or you compile
24117397Skan// this file and link it with other files to produce an executable, this
25117397Skan// file does not by itself cause the resulting executable to be covered by
26117397Skan// the GNU General Public License.  This exception does not however
27117397Skan// invalidate any other reasons why the executable file might be covered by
28117397Skan// the GNU General Public License.
29117397Skan
30169691Skan#include <ext/atomicity.h>
31117397Skan
32117397Skan/* We cannot use the cpu/powerpc/bits/atomicity.h inline assembly
33117397Skan   definitions for these operations since they depend on operations
34117397Skan   that are not available on the original POWER architecture.  AIX
35117397Skan   still runs on the POWER architecture, so it would be incorrect to
36132720Skan   assume the existence of these instructions.
37117397Skan
38132720Skan   The definition of _Atomic_word must match the type pointed to by
39132720Skan   atomic_p in <sys/atomic_op.h>.  */
40117397Skan
41132720Skanextern "C"
42132720Skan{
43117397Skan#include <sys/atomic_op.h>
44117397Skan}
45117397Skan
46169691Skan_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
47169691Skan
48132720Skan  _Atomic_word
49132720Skan  __attribute__ ((__unused__))
50132720Skan  __exchange_and_add (volatile _Atomic_word* __mem, int __val)
51169691Skan  { return ::fetch_and_add(const_cast<atomic_p>(__mem), __val); }
52117397Skan
53132720Skan  void
54132720Skan  __attribute__ ((__unused__))
55132720Skan  __atomic_add (volatile _Atomic_word* __mem, int __val)
56169691Skan  { (void) ::fetch_and_add(const_cast<atomic_p>(__mem), __val); }
57169691Skan
58169691Skan_GLIBCXX_END_NAMESPACE
59