atomic-inline.h revision 93b0cb40c18cae594c931677be2b9214420610b7
1ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden/* 2ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * Copyright (C) 2010 The Android Open Source Project 3ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * 4ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * Licensed under the Apache License, Version 2.0 (the "License"); 5ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * you may not use this file except in compliance with the License. 6ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * You may obtain a copy of the License at 7ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * 8ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * http://www.apache.org/licenses/LICENSE-2.0 9ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * 10ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * Unless required by applicable law or agreed to in writing, software 11ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * distributed under the License is distributed on an "AS IS" BASIS, 12ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * See the License for the specific language governing permissions and 14ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * limitations under the License. 15ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden */ 16ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden 17ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden#ifndef ANDROID_CUTILS_ATOMIC_INLINE_H 18ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden#define ANDROID_CUTILS_ATOMIC_INLINE_H 19ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden 20ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden/* 21ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * Inline declarations and macros for some special-purpose atomic 22ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * operations. These are intended for rare circumstances where a 23ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * memory barrier needs to be issued inline rather than as a function 24ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * call. 25ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * 26ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * Most code should not use these. 27ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * 28ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * Anything that does include this file must set ANDROID_SMP to either 29ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * 0 or 1, indicating compilation for UP or SMP, respectively. 308dfa47da8cb33ebaf7aae6db6548e75ed86e8f1eAndy McFadden * 318dfa47da8cb33ebaf7aae6db6548e75ed86e8f1eAndy McFadden * Macros defined in this header: 328dfa47da8cb33ebaf7aae6db6548e75ed86e8f1eAndy McFadden * 338dfa47da8cb33ebaf7aae6db6548e75ed86e8f1eAndy McFadden * void ANDROID_MEMBAR_FULL(void) 348dfa47da8cb33ebaf7aae6db6548e75ed86e8f1eAndy McFadden * Full memory barrier. Provides a compiler reordering barrier, and 358dfa47da8cb33ebaf7aae6db6548e75ed86e8f1eAndy McFadden * on SMP systems emits an appropriate instruction. 36ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden */ 37ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden 38ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden#if !defined(ANDROID_SMP) 39ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden# error "Must define ANDROID_SMP before including atomic-inline.h" 40ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden#endif 41ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden 4293b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#if defined(__arm__) 4393b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#include <cutils/atomic-arm.h> 44ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden#elif defined(__i386__) || defined(__x86_64__) 4593b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#include <cutils/atomic-x86.h> 4693b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#elif defined(__sh__) 4793b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro/* implementation is in atomic-android-sh.c */ 48ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden#else 4993b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#error atomic operations are unsupported 50ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden#endif 51ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden 5293b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#if ANDROID_SMP == 0 5393b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#define ANDROID_MEMBAR_FULL android_compiler_barrier 54ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden#else 5593b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#define ANDROID_MEMBAR_FULL android_memory_barrier 56ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden#endif 57ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden 5893b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#endif /* ANDROID_CUTILS_ATOMIC_INLINE_H */ 59