diff options
Diffstat (limited to 'include/cutils/atomic-inline.h')
-rw-r--r-- | include/cutils/atomic-inline.h | 59 |
1 files changed, 56 insertions, 3 deletions
diff --git a/include/cutils/atomic-inline.h b/include/cutils/atomic-inline.h index 103c5b0..a31e913 100644 --- a/include/cutils/atomic-inline.h +++ b/include/cutils/atomic-inline.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014 The Android Open Source Project + * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,6 +14,59 @@ * limitations under the License. */ -#ifndef ANDROID_CUTILS_ATOMIC_H -#include <cutils/atomic.h> +#ifndef ANDROID_CUTILS_ATOMIC_INLINE_H +#define ANDROID_CUTILS_ATOMIC_INLINE_H + +#ifdef __cplusplus +extern "C" { #endif + +/* + * Inline declarations and macros for some special-purpose atomic + * operations. These are intended for rare circumstances where a + * memory barrier needs to be issued inline rather than as a function + * call. + * + * Most code should not use these. + * + * Anything that does include this file must set ANDROID_SMP to either + * 0 or 1, indicating compilation for UP or SMP, respectively. + * + * Macros defined in this header: + * + * void ANDROID_MEMBAR_FULL(void) + * Full memory barrier. Provides a compiler reordering barrier, and + * on SMP systems emits an appropriate instruction. + */ + +#if !defined(ANDROID_SMP) +# error "Must define ANDROID_SMP before including atomic-inline.h" +#endif + +#if defined(__aarch64__) +#include <cutils/atomic-arm64.h> +#elif defined(__arm__) +#include <cutils/atomic-arm.h> +#elif defined(__i386__) +#include <cutils/atomic-x86.h> +#elif defined(__x86_64__) +#include <cutils/atomic-x86_64.h> +#elif defined(__mips64) +#include <cutils/atomic-mips64.h> +#elif defined(__mips__) +#include <cutils/atomic-mips.h> +#else +#error atomic operations are unsupported +#endif + +#if ANDROID_SMP == 0 +#define ANDROID_MEMBAR_FULL android_compiler_barrier +#else +#define ANDROID_MEMBAR_FULL android_memory_barrier +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* ANDROID_CUTILS_ATOMIC_INLINE_H */ |