From a892c1aa23c32b95af9d3c8aca1af9ad77dacdf9 Mon Sep 17 00:00:00 2001 From: Marian Buschsieweke Date: Mon, 28 Sep 2020 16:15:10 +0200 Subject: [PATCH] cpu/atmega_common: Add atomic_utils_arch.h --- cpu/atmega_common/include/atomic_utils_arch.h | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 cpu/atmega_common/include/atomic_utils_arch.h diff --git a/cpu/atmega_common/include/atomic_utils_arch.h b/cpu/atmega_common/include/atomic_utils_arch.h new file mode 100644 index 0000000000..7582ce4adb --- /dev/null +++ b/cpu/atmega_common/include/atomic_utils_arch.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2020 Otto-von-Guericke-Universität Magdeburg + * + * This file is subject to the terms and conditions of the GNU Lesser General + * Public License v2.1. See the file LICENSE in the top level directory for more + * details. + */ + +/** + * @ingroup cpu_atmega_common + * + * @{ + * + * @file + * @brief Implementation of fast atomic utility functions + * @author Marian Buschsieweke + */ + +#ifndef ATOMIC_UTILS_ARCH_H +#define ATOMIC_UTILS_ARCH_H +#ifndef DOXYGEN + +#include "periph_cpu.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* clang provides no built-in atomic access to regular variables */ +#ifndef __clang__ + +#define HAS_ATOMIC_LOAD_U8 +static inline uint8_t atomic_load_u8(const uint8_t *var) +{ + return __atomic_load_1(var, __ATOMIC_SEQ_CST); +} + +#define HAS_ATOMIC_STORE_U8 +static inline void atomic_store_u8(uint8_t *dest, uint8_t val) +{ + __atomic_store_1(dest, val, __ATOMIC_SEQ_CST); +} + +#endif /* __clang__ */ + +#ifdef __cplusplus +} +#endif + +#endif /* DOXYGEN */ +#endif /* ATOMIC_UTILS_ARCH_H */ +/** @} */