Changeset: ccc5054efb90 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ccc5054efb90
Branch: txtsim-imp
Log Message:

Merge with Jun2023.


diffs (truncated from 2000 to 300 lines):

diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -418,7 +418,21 @@ utf8strlenmax(char *s, char *e, size_t m
                                 * and code points marked either F or
                                 * W in EastAsianWidth.txt; this list
                                 * is up-to-date with Unicode 11.0 */
-                               if ((0x1100 <= c && c <= 0x115F) ||
+                               if ((0x0300 <= c && c <= 0x036F) ||
+                                       (0x0483 <= c && c <= 0x0489) ||
+                                       (0x0653 <= c && c <= 0x0655) ||
+                                       (0x1AB0 <= c && c <= 0x1AFF) ||
+                                       (0x1DC0 <= c && c <= 0x1DFF) ||
+                                       (0x20D0 <= c && c <= 0x20FF) ||
+                                       (0x2DE0 <= c && c <= 0x2DFF) ||
+                                       (0xA66F <= c && c <= 0xA672) ||
+                                       (0xA674 <= c && c <= 0xA67D) ||
+                                       (0xA69E <= c && c <= 0xA69F) ||
+                                       (0xA8E0 <= c && c <= 0xA8F1) ||
+                                       (0xFE20 <= c && c <= 0xFE2F) ||
+                                       c == 0x3099 || c == 0x309A)
+                                       len--;          /* combining mark */
+                               else if ((0x1100 <= c && c <= 0x115F) ||
                                    (0x231A <= c && c <= 0x231B) ||
                                    (0x2329 <= c && c <= 0x232A) ||
                                    (0x23E9 <= c && c <= 0x23EC) ||
diff --git a/common/utils/matomic.h b/common/utils/matomic.h
--- a/common/utils/matomic.h
+++ b/common/utils/matomic.h
@@ -55,23 +55,26 @@
 #ifndef _MATOMIC_H_
 #define _MATOMIC_H_
 
-/* define this if you don't want to use atomic instructions */
-/* #define NO_ATOMIC_INSTRUCTIONS */
-
 /* the atomic type we export is always a 64 bit unsigned integer */
 
 /* ignore __STDC_NO_ATOMICS__ if compiling using Intel compiler on
  * Windows since otherwise we can't compile this at all in C99 mode */
-#if defined(HAVE_STDATOMIC_H) && (!defined(__STDC_NO_ATOMICS__) || 
(defined(__INTEL_COMPILER) && defined(_WINDOWS))) && 
!defined(NO_ATOMIC_INSTRUCTIONS)
+#if defined(HAVE_STDATOMIC_H) && (!defined(__STDC_NO_ATOMICS__) || 
(defined(__INTEL_COMPILER) && defined(_WINDOWS)))
 
 #ifdef __cplusplus
 
 #include <atomic>
 
 #if SIZEOF_LONG_LONG == 8
+#if ATOMIC_LLONG_LOCK_FREE != 2
+#error "we need _Atomic(unsigned long long) to be lock free"
+#endif
 typedef atomic_ullong ATOMIC_TYPE;
 typedef unsigned long long ATOMIC_BASE_TYPE;
 #elif SIZEOF_LONG == 8
+#if ATOMIC_LONG_LOCK_FREE != 2
+#error "we need _Atomic(unsigned long) to be lock free"
+#endif
 typedef atomic_ulong ATOMIC_TYPE;
 typedef unsigned long ATOMIC_BASE_TYPE;
 #else
@@ -83,9 +86,15 @@ typedef unsigned long ATOMIC_BASE_TYPE;
 #include <stdatomic.h>
 
 #if SIZEOF_LONG_LONG == 8
+#if ATOMIC_LLONG_LOCK_FREE != 2
+#error "we need _Atomic(unsigned long long) to be lock free"
+#endif
 typedef volatile atomic_ullong ATOMIC_TYPE;
 typedef unsigned long long ATOMIC_BASE_TYPE;
 #elif SIZEOF_LONG == 8
+#if ATOMIC_LONG_LOCK_FREE != 2
+#error "we need _Atomic(unsigned long) to be lock free"
+#endif
 typedef volatile atomic_ulong ATOMIC_TYPE;
 typedef unsigned long ATOMIC_BASE_TYPE;
 #else
@@ -94,14 +103,14 @@ typedef unsigned long ATOMIC_BASE_TYPE;
 
 #define ATOMIC_INIT(var, val)  atomic_init(var, (ATOMIC_BASE_TYPE) (val))
 #define ATOMIC_DESTROY(var)            ((void) 0)
-#define ATOMIC_GET(var)                        ((ATOMIC_BASE_TYPE) 
atomic_load(var))
-#define ATOMIC_SET(var, val)   atomic_store(var, (ATOMIC_BASE_TYPE) (val))
+#define ATOMIC_GET(var)                        ((ATOMIC_BASE_TYPE) *(var))
+#define ATOMIC_SET(var, val)   (*(var) = (ATOMIC_BASE_TYPE) (val))
 #define ATOMIC_XCG(var, val)   atomic_exchange(var, (ATOMIC_BASE_TYPE) (val))
 #define ATOMIC_CAS(var, exp, des)      atomic_compare_exchange_strong(var, 
exp, (ATOMIC_BASE_TYPE) (des))
 #define ATOMIC_ADD(var, val)   atomic_fetch_add(var, (ATOMIC_BASE_TYPE) (val))
 #define ATOMIC_SUB(var, val)   atomic_fetch_sub(var, (ATOMIC_BASE_TYPE) (val))
-#define ATOMIC_INC(var)                        (atomic_fetch_add(var, 1) + 1)
-#define ATOMIC_DEC(var)                        (atomic_fetch_sub(var, 1) - 1)
+#define ATOMIC_INC(var)                        (++*(var))
+#define ATOMIC_DEC(var)                        (--*(var))
 #define ATOMIC_OR(var, val)            atomic_fetch_or(var, (ATOMIC_BASE_TYPE) 
(val))
 #define ATOMIC_AND(var, val)   atomic_fetch_and(var, (ATOMIC_BASE_TYPE) (val))
 
@@ -113,8 +122,8 @@ typedef void *_Atomic volatile ATOMIC_PT
 #define ATOMIC_PTR_INIT(var, val)      atomic_init(var, val)
 #define ATOMIC_PTR_DESTROY(var)                ((void) 0)
 #define ATOMIC_PTR_VAR_INIT(val)       ATOMIC_VAR_INIT(val)
-#define ATOMIC_PTR_GET(var)            atomic_load(var)
-#define ATOMIC_PTR_SET(var, val)       atomic_store(var, (void *) (val))
+#define ATOMIC_PTR_GET(var)                    (*(var))
+#define ATOMIC_PTR_SET(var, val)       (*(var) = (void *) (val))
 #define ATOMIC_PTR_XCG(var, val)       atomic_exchange(var, (void *) (val))
 #define ATOMIC_PTR_CAS(var, exp, des)  atomic_compare_exchange_strong(var, 
exp, (void *) (des))
 
@@ -125,7 +134,7 @@ typedef volatile atomic_flag ATOMIC_FLAG
 
 #endif /* __cplusplus */
 
-#elif defined(_MSC_VER) && !defined(NO_ATOMIC_INSTRUCTIONS)
+#elif defined(_MSC_VER)
 
 typedef uint64_t ATOMIC_BASE_TYPE;
 
@@ -245,7 +254,7 @@ typedef volatile int ATOMIC_FLAG;
 #define ATOMIC_TAS(var)                _InterlockedCompareExchange(var, 1, 0)
 #pragma intrinsic(_InterlockedCompareExchange)
 
-#elif (defined(__GNUC__) || defined(__INTEL_COMPILER))  && 
defined(__ATOMIC_SEQ_CST) && !(defined(__sun__) && SIZEOF_SIZE_T == 8) && 
!defined(_MSC_VER) && !defined(NO_ATOMIC_INSTRUCTIONS)
+#elif (defined(__GNUC__) || defined(__INTEL_COMPILER))  && 
defined(__ATOMIC_SEQ_CST) && !(defined(__sun__) && SIZEOF_SIZE_T == 8) && 
!defined(_MSC_VER)
 
 /* the new way of doing this according to GCC (the old way, using
  * __sync_* primitives is not supported) */
@@ -284,231 +293,7 @@ typedef volatile char ATOMIC_FLAG;
 
 #else
 
-/* emulate using mutexes */
-
-typedef uint64_t ATOMIC_BASE_TYPE;
-
-#include <pthread.h> /* required for pthread_mutex_t */
-
-typedef struct {
-       ATOMIC_BASE_TYPE val;
-       pthread_mutex_t lck;
-} ATOMIC_TYPE;
-#define ATOMIC_VAR_INIT(v)     { .val = (v), .lck = PTHREAD_MUTEX_INITIALIZER }
-
-static inline void
-ATOMIC_INIT(ATOMIC_TYPE *var, ATOMIC_BASE_TYPE val)
-{
-       pthread_mutex_init(&var->lck, 0);
-       var->val = val;
-}
-#define ATOMIC_INIT(var, val)  ATOMIC_INIT((var), (ATOMIC_BASE_TYPE) (val))
-
-#define ATOMIC_DESTROY(var)    pthread_mutex_destroy(&(var)->lck)
-
-static inline ATOMIC_BASE_TYPE
-ATOMIC_GET(ATOMIC_TYPE *var)
-{
-       ATOMIC_BASE_TYPE old;
-       pthread_mutex_lock(&var->lck);
-       old = var->val;
-       pthread_mutex_unlock(&var->lck);
-       return old;
-}
-
-static inline void
-ATOMIC_SET(ATOMIC_TYPE *var, ATOMIC_BASE_TYPE val)
-{
-       pthread_mutex_lock(&var->lck);
-       var->val = val;
-       pthread_mutex_unlock(&var->lck);
-}
-#define ATOMIC_SET(var, val)   ATOMIC_SET(var, (ATOMIC_BASE_TYPE) (val))
-
-static inline ATOMIC_BASE_TYPE
-ATOMIC_XCG(ATOMIC_TYPE *var, ATOMIC_BASE_TYPE val)
-{
-       ATOMIC_BASE_TYPE old;
-       pthread_mutex_lock(&var->lck);
-       old = var->val;
-       var->val = val;
-       pthread_mutex_unlock(&var->lck);
-       return old;
-}
-#define ATOMIC_XCG(var, val)   ATOMIC_XCG(var, (ATOMIC_BASE_TYPE) (val))
-
-static inline bool
-ATOMIC_CAS(ATOMIC_TYPE *var, ATOMIC_BASE_TYPE *exp, ATOMIC_BASE_TYPE des)
-{
-       bool ret;
-       pthread_mutex_lock(&var->lck);
-       if (var->val == *exp) {
-               var->val = des;
-               ret = true;
-       } else {
-               *exp = var->val;
-               ret = false;
-       }
-       pthread_mutex_unlock(&var->lck);
-       return ret;
-}
-#define ATOMIC_CAS(var, exp, des)      ATOMIC_CAS(var, exp, (ATOMIC_BASE_TYPE) 
(des))
-
-static inline ATOMIC_BASE_TYPE
-ATOMIC_ADD(ATOMIC_TYPE *var, ATOMIC_BASE_TYPE val)
-{
-       ATOMIC_BASE_TYPE old;
-       pthread_mutex_lock(&var->lck);
-       old = var->val;
-       var->val += val;
-       pthread_mutex_unlock(&var->lck);
-       return old;
-}
-#define ATOMIC_ADD(var, val)   ATOMIC_ADD(var, (ATOMIC_BASE_TYPE) (val))
-
-static inline ATOMIC_BASE_TYPE
-ATOMIC_SUB(ATOMIC_TYPE *var, ATOMIC_BASE_TYPE val)
-{
-       ATOMIC_BASE_TYPE old;
-       pthread_mutex_lock(&var->lck);
-       old = var->val;
-       var->val -= val;
-       pthread_mutex_unlock(&var->lck);
-       return old;
-}
-#define ATOMIC_SUB(var, val)   ATOMIC_SUB(var, (ATOMIC_BASE_TYPE) (val))
-
-static inline ATOMIC_BASE_TYPE
-ATOMIC_INC(ATOMIC_TYPE *var)
-{
-       ATOMIC_BASE_TYPE new;
-       pthread_mutex_lock(&var->lck);
-       new = var->val += 1;
-       pthread_mutex_unlock(&var->lck);
-       return new;
-}
-
-static inline ATOMIC_BASE_TYPE
-ATOMIC_DEC(ATOMIC_TYPE *var)
-{
-       ATOMIC_BASE_TYPE new;
-       pthread_mutex_lock(&var->lck);
-       new = var->val -= 1;
-       pthread_mutex_unlock(&var->lck);
-       return new;
-}
-
-static inline ATOMIC_BASE_TYPE
-ATOMIC_OR(ATOMIC_TYPE *var, ATOMIC_BASE_TYPE val)
-{
-       ATOMIC_BASE_TYPE old;
-       pthread_mutex_lock(&var->lck);
-       old = var->val;
-       var->val |= val;
-       pthread_mutex_unlock(&var->lck);
-       return old;
-}
-#define ATOMIC_OR(var, val)    ATOMIC_OR(var, (ATOMIC_BASE_TYPE) (val))
-
-static inline ATOMIC_BASE_TYPE
-ATOMIC_AND(ATOMIC_TYPE *var, ATOMIC_BASE_TYPE val)
-{
-       ATOMIC_BASE_TYPE old;
-       pthread_mutex_lock(&var->lck);
-       old = var->val;
-       var->val &= val;
-       pthread_mutex_unlock(&var->lck);
-       return old;
-}
-#define ATOMIC_AND(var, val)   ATOMIC_AND(var, (ATOMIC_BASE_TYPE) (val))
-
-typedef struct {
-       void *val;
-       pthread_mutex_t lck;
-} ATOMIC_PTR_TYPE;
-#define ATOMIC_PTR_VAR_INIT(v) { .val = (v), .lck = PTHREAD_MUTEX_INITIALIZER }
-
-static inline void
-ATOMIC_PTR_INIT(ATOMIC_PTR_TYPE *var, void *val)
-{
-       pthread_mutex_init(&var->lck, 0);
-       var->val = val;
-}
-
-#define ATOMIC_PTR_DESTROY(var)        pthread_mutex_destroy(&(var)->lck)
-
-static inline void *
-ATOMIC_PTR_GET(ATOMIC_PTR_TYPE *var)
-{
-       void *old;
-       pthread_mutex_lock(&var->lck);
-       old = var->val;
-       pthread_mutex_unlock(&var->lck);
-       return old;
-}
-
-static inline void
-ATOMIC_PTR_SET(ATOMIC_PTR_TYPE *var, void *val)
-{
-       pthread_mutex_lock(&var->lck);
-       var->val = val;
-       pthread_mutex_unlock(&var->lck);
-}
-
-static inline void *
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to