tinycc-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Tinycc-devel] [PATCH 1/3] stdatomic: deplusification; LLVM notice


From: Dmitry Selyutin
Subject: [Tinycc-devel] [PATCH 1/3] stdatomic: deplusification; LLVM notice
Date: Wed, 27 Jan 2021 13:38:25 +0300

Hello,

I've updated the patches according to remarks and tips.
For now I've chosen the approach with macros, since enum causes some
tests to fail.
I will likely end up using enumeration, because it provides some more
strict guarantees.
The decoupling code into per-platform basis will be addressed in the
subsequent commits.

---
 include/stdatomic.h | 76 ++++++++++++++++++++++++---------------------
 1 file changed, 40 insertions(+), 36 deletions(-)

diff --git a/include/stdatomic.h b/include/stdatomic.h
index 68d00fb..ee3024c 100644
--- a/include/stdatomic.h
+++ b/include/stdatomic.h
@@ -1,10 +1,20 @@
+/* This file is derived from clang's stdatomic.h */
+
+/*===---- stdatomic.h - Standard header for atomic types and
operations -----===
+ *
+ * Part of the LLVM Project, under the Apache License v2.0 with LLVM
Exceptions.
+ * See https://llvm.org/LICENSE.txt for license information.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ *
+ *===-----------------------------------------------------------------------===
+ */
+
+#ifndef _STDATOMIC_H
+#define _STDATOMIC_H
+
 #include <stddef.h>
 #include <stdint.h>

-#ifdef __cplusplus
-extern "C" {
-#endif
-
 /* Memory ordering */
 typedef enum {
     memory_order_relaxed = __ATOMIC_RELAXED,
@@ -16,11 +26,7 @@ typedef enum {
 } memory_order;

 /* Atomic typedefs */
-#ifdef __cplusplus
-typedef _Atomic(bool) atomic_bool;
-#else
 typedef _Atomic(_Bool) atomic_bool;
-#endif
 typedef _Atomic(char) atomic_char;
 typedef _Atomic(signed char) atomic_schar;
 typedef _Atomic(unsigned char) atomic_uchar;
@@ -63,59 +69,57 @@ typedef struct {
     atomic_bool value;
 } atomic_flag;

-#define ATOMIC_FLAG_INIT { 0 }
+#define ATOMIC_FLAG_INIT {0}

 #define atomic_flag_test_and_set(object) \
-    __atomic_exchange(&(object)->value, 1, __ATOMIC_SEQ_CST)
+    __c11_atomic_exchange(&(object)->value, 1, __ATOMIC_SEQ_CST)
 #define atomic_flag_test_and_set_explicit(object, order) \
-    __atomic_exchange(&(object)->value, 1, order)
+    __c11_atomic_exchange(&(object)->value, 1, order)

 #define atomic_flag_clear(object) \
-    __atomic_store(&(object)->value, 0, __ATOMIC_SEQ_CST)
+    __c11_atomic_store(&(object)->value, 0, __ATOMIC_SEQ_CST)
 #define atomic_flag_clear_explicit(object, order) \
-    __atomic_store(&(object)->value, 0, order)
+    __c11_atomic_store(&(object)->value, 0, order)

 /* Generic routines */
 #define atomic_store(object, desired) \
-    __atomic_store(object, desired, __ATOMIC_SEQ_CST)
-#define atomic_store_explicit __atomic_store
+    __c11_atomic_store(object, desired, __ATOMIC_SEQ_CST)
+#define atomic_store_explicit __c11_atomic_store

 #define atomic_load(object) \
-    __atomic_load(object, __ATOMIC_SEQ_CST)
-#define atomic_load_explicit __atomic_load
+    __c11_atomic_load(object, __ATOMIC_SEQ_CST)
+#define atomic_load_explicit __c11_atomic_load

 #define atomic_exchange(object, desired) \
-    __atomic_exchange(object, desired, __ATOMIC_SEQ_CST)
-#define atomic_exchange_explicit __atomic_exchange
+    __c11_atomic_exchange(object, desired, __ATOMIC_SEQ_CST)
+#define atomic_exchange_explicit __c11_atomic_exchange

 #define atomic_compare_exchange_strong(object, expected, desired) \
-    __atomic_compare_exchange_strong(object, expected, desired,
__ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
-#define atomic_compare_exchange_strong_explicit
__atomic_compare_exchange_strong
+    __c11_atomic_compare_exchange_strong(object, expected, desired,
__ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
+#define atomic_compare_exchange_strong_explicit
__c11_atomic_compare_exchange_strong

 #define atomic_compare_exchange_weak(object, expected, desired) \
-    __atomic_compare_exchange_weak(object, expected, desired,
__ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
-#define atomic_compare_exchange_weak_explicit __atomic_compare_exchange_weak
+    __c11_atomic_compare_exchange_weak(object, expected, desired,
__ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
+#define atomic_compare_exchange_weak_explicit
__c11_atomic_compare_exchange_weak

 #define atomic_fetch_add(object, operand) \
-    __atomic_fetch_add(object, operand, __ATOMIC_SEQ_CST)
-#define atomic_fetch_add_explicit __atomic_fetch_add
+    __c11_atomic_fetch_add(object, operand, __ATOMIC_SEQ_CST)
+#define atomic_fetch_add_explicit __c11_atomic_fetch_add

 #define atomic_fetch_sub(object, operand) \
-    __atomic_fetch_sub(object, operand, __ATOMIC_SEQ_CST)
-#define atomic_fetch_sub_explicit __atomic_fetch_sub
+    __c11_atomic_fetch_sub(object, operand, __ATOMIC_SEQ_CST)
+#define atomic_fetch_sub_explicit __c11_atomic_fetch_sub

 #define atomic_fetch_or(object, operand) \
-    __atomic_fetch_or(object, operand, __ATOMIC_SEQ_CST)
-#define atomic_fetch_or_explicit __atomic_fetch_or
+    __c11_atomic_fetch_or(object, operand, __ATOMIC_SEQ_CST)
+#define atomic_fetch_or_explicit __c11_atomic_fetch_or

 #define atomic_fetch_xor(object, operand) \
-    __atomic_fetch_xor(object, operand, __ATOMIC_SEQ_CST)
-#define atomic_fetch_xor_explicit __atomic_fetch_xor
+    __c11_atomic_fetch_xor(object, operand, __ATOMIC_SEQ_CST)
+#define atomic_fetch_xor_explicit __c11_atomic_fetch_xor

 #define atomic_fetch_and(object, operand) \
-    __atomic_fetch_and(object, operand, __ATOMIC_SEQ_CST)
-#define atomic_fetch_and_explicit __atomic_fetch_and
+    __c11_atomic_fetch_and(object, operand, __ATOMIC_SEQ_CST)
+#define atomic_fetch_and_explicit __c11_atomic_fetch_and

-#ifdef __cplusplus
-} /* extern "C" */
-#endif
+#endif /* _STDATOMIC_H */
--
2.30.0



reply via email to

[Prev in Thread] Current Thread [Next in Thread]