atomic-inline.h revision 096041174b1d8cc09b06c51053b2b7e8545bd93f
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 20b60d9ce1fcedf264f7cd7eb9fb8895b118f72ac3Carl Shapiro#ifdef __cplusplus 21b60d9ce1fcedf264f7cd7eb9fb8895b118f72ac3Carl Shapiroextern "C" { 22b60d9ce1fcedf264f7cd7eb9fb8895b118f72ac3Carl Shapiro#endif 23b60d9ce1fcedf264f7cd7eb9fb8895b118f72ac3Carl Shapiro 24ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden/* 25ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * Inline declarations and macros for some special-purpose atomic 26ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * operations. These are intended for rare circumstances where a 27ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * memory barrier needs to be issued inline rather than as a function 28ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * call. 29ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * 30ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * Most code should not use these. 31ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * 32ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * Anything that does include this file must set ANDROID_SMP to either 33ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden * 0 or 1, indicating compilation for UP or SMP, respectively. 348dfa47da8cb33ebaf7aae6db6548e75ed86e8f1eAndy McFadden * 358dfa47da8cb33ebaf7aae6db6548e75ed86e8f1eAndy McFadden * Macros defined in this header: 368dfa47da8cb33ebaf7aae6db6548e75ed86e8f1eAndy McFadden * 378dfa47da8cb33ebaf7aae6db6548e75ed86e8f1eAndy McFadden * void ANDROID_MEMBAR_FULL(void) 388dfa47da8cb33ebaf7aae6db6548e75ed86e8f1eAndy McFadden * Full memory barrier. Provides a compiler reordering barrier, and 398dfa47da8cb33ebaf7aae6db6548e75ed86e8f1eAndy McFadden * on SMP systems emits an appropriate instruction. 40ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden */ 41ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden 42ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden#if !defined(ANDROID_SMP) 43ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden# error "Must define ANDROID_SMP before including atomic-inline.h" 44ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden#endif 45ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden 4693b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#if defined(__arm__) 4793b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#include <cutils/atomic-arm.h> 48ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden#elif defined(__i386__) || defined(__x86_64__) 4993b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#include <cutils/atomic-x86.h> 5093b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#elif defined(__sh__) 5193b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro/* implementation is in atomic-android-sh.c */ 52096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand#elif defined(__mips__) 53096041174b1d8cc09b06c51053b2b7e8545bd93fDuane Sand#include <cutils/atomic-mips.h> 54ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden#else 5593b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#error atomic operations are unsupported 56ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden#endif 57ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden 5893b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#if ANDROID_SMP == 0 5993b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#define ANDROID_MEMBAR_FULL android_compiler_barrier 60ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden#else 6193b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#define ANDROID_MEMBAR_FULL android_memory_barrier 62ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden#endif 63ac322da69ee48aa792baf5c48cfb719ce077f67eAndy McFadden 64464431e65fbede57b0d41d230fe6f6dc465c20f8Brian Carlstrom#if ANDROID_SMP == 0 65464431e65fbede57b0d41d230fe6f6dc465c20f8Brian Carlstrom#define ANDROID_MEMBAR_STORE android_compiler_barrier 66464431e65fbede57b0d41d230fe6f6dc465c20f8Brian Carlstrom#else 67464431e65fbede57b0d41d230fe6f6dc465c20f8Brian Carlstrom#define ANDROID_MEMBAR_STORE android_memory_store_barrier 68464431e65fbede57b0d41d230fe6f6dc465c20f8Brian Carlstrom#endif 69464431e65fbede57b0d41d230fe6f6dc465c20f8Brian Carlstrom 70b60d9ce1fcedf264f7cd7eb9fb8895b118f72ac3Carl Shapiro#ifdef __cplusplus 71b60d9ce1fcedf264f7cd7eb9fb8895b118f72ac3Carl Shapiro} 72b60d9ce1fcedf264f7cd7eb9fb8895b118f72ac3Carl Shapiro#endif 73b60d9ce1fcedf264f7cd7eb9fb8895b118f72ac3Carl Shapiro 7493b0cb40c18cae594c931677be2b9214420610b7Carl Shapiro#endif /* ANDROID_CUTILS_ATOMIC_INLINE_H */ 75