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]