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