On 08/01/2020 11:07, Kwok Cheung Yeung wrote:
+#define __sync_subword_compare_and_swap(type, size)                \

Macro parameters are conventionally upper case.

+                                        \
+type                                        \
+__sync_val_compare_and_swap_##size (type *ptr, type oldval, type newval)    \
+{                                        \
+  unsigned int *wordptr                                \
+    = (unsigned int *)((unsigned long long) ptr & ~3ULL);            \

Please use "intptr_t" rather than "unsigned long long" (which should probably have been "unsigned long" anyway).

+  int shift = ((unsigned long long) ptr & 3ULL) * 8;                \
+  unsigned int valmask = (1 << (size * 8)) - 1;                    \
+  unsigned int wordmask = ~(valmask << shift);                    \
+  unsigned int oldword = *wordptr;                        \
+  for (;;)                                    \
+    {                                        \
+      type prevval = (oldword >> shift) & valmask;                \
+      if (__builtin_expect (prevval != oldval, 0))                \
+    return prevval;                                \
+      unsigned int newword = oldword & wordmask;                \
+      newword |= ((unsigned int) newval) << shift;                \
+      unsigned int prevword                            \
+      = __sync_val_compare_and_swap_4 (wordptr, oldword, newword);        \
+      if (__builtin_expect (prevword == oldword, 1))                \
+    return oldval;                                \
+      oldword = prevword;                            \
+    }                                        \
+}                                        \
+                                        \
+bool                                        \
+__sync_bool_compare_and_swap_##size (type *ptr, type oldval, type newval)   \
+{                                        \
+  return __sync_val_compare_and_swap_##size(ptr, oldval, newval) == oldval; \

Space before '('.

I presume all the '\' are lined up, but the patch has got mangled in the email. Please use an inline attachment.

+}
+
+__sync_subword_compare_and_swap (unsigned char, 1)
+__sync_subword_compare_and_swap (unsigned short, 2)
+
diff --git a/libgcc/config/gcn/t-amdgcn b/libgcc/config/gcn/t-amdgcn
index adbd866..fe7b5fa 100644
--- a/libgcc/config/gcn/t-amdgcn
+++ b/libgcc/config/gcn/t-amdgcn
@@ -1,4 +1,5 @@
-LIB2ADD += $(srcdir)/config/gcn/lib2-divmod.c \
+LIB2ADD += $(srcdir)/config/gcn/atomic.c \
+       $(srcdir)/config/gcn/lib2-divmod.c \
         $(srcdir)/config/gcn/lib2-divmod-hi.c \
         $(srcdir)/config/gcn/unwind-gcn.c


Andrew

Reply via email to