-C Use\sthe\sGCC\sbuilt-in\s__sync_fetch_and_sub()\sto\smake\sthe\ssqlite3StatusDown()\nroutine\satomic,\sand\sthereby\savoid\ssome\smutexing.
-D 2017-01-03T18:05:04.175
+C Use\sthe\sCLANG_VERSION\smacro\sto\scontrol\sclang-specific\sfeatures.
+D 2017-01-03T20:01:24.105
F Makefile.in 41bd4cad981487345c4a84081074bcdb876e4b2e
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc b8ca53350ae545e3562403d5da2a69cec79308da
F src/sqlite.h.in e8e2d108d82647f0a812fdb74accf91c1ec08ddc
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h 8648034aa702469afb553231677306cc6492a1ae
-F src/sqliteInt.h ae113e82230109e0964c3d93efed55700d8eec5e
+F src/sqliteInt.h 898cfcd9e0a40df15258cd86255bf9bee411e36d
F src/sqliteLimit.h c0373387c287c8d0932510b5547ecde31b5da247
-F src/status.c 56174fdb52d1e8a0e9f3976e82d06a5cd0a1c2c3
+F src/status.c 1b1e64fbce135bc178a6481433422a32f433ba37
F src/table.c 5226df15ab9179b9ed558d89575ea0ce37b03fc9
F src/tclsqlite.c 205c66b9b81d97978a155caa3ef5be9c4de2b174
F src/test1.c 8a98191a1da8e100f77cdb5cc716df67d405028d
F src/trigger.c c9f0810043b265724fdb1bdd466894f984dfc182
F src/update.c 1da7c462110bffed442a42884cb0d528c1db46d8
F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c
-F src/util.c 8c3d2aa11bacd984caf8067ed5b857de3fb53b81
+F src/util.c a88b0466fddf445ce752226d4698ca3faada620a
F src/vacuum.c 33c174b28886b2faf26e503b5a49a1c01a9b1c16
F src/vdbe.c 88bd6c32b333580d2661ac3afe33369757fb1522
F src/vdbe.h 50ee139f9c68fff91be1d717ed3a6abbd496919c
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 82cbebb8ee4484f13e5f48d305e20e73063f273e
-R 799d9858a7a6a1551985c372ac93d54d
+P f69ce75b3d94331fdbfa2f3a27d61db24c285d2b
+R 576384b00d5b84002b3bf9bfa5fd1c23
U drh
-Z efd83d8962e4e3c856ce381388686c40
+Z df7fbae7b850ad1f1ec95f7decb0f63b
-f69ce75b3d94331fdbfa2f3a27d61db24c285d2b
\ No newline at end of file
+f8ebeec211483503e135104ef977b3c384a1d789
\ No newline at end of file
# define GCC_VERSION 0
#endif
+/* What version of CLANG is being used. 0 means GCC is not being used */
+#ifdef __clang__
+# define CLANG_VERSION \
+ (__clang_major__*1000000+__clang_minor__*1000+__clang_patchlevel__)
+#else
+# define CLANG_VERSION 0
+#endif
+
/* Needed for various definitions... */
#if defined(__GNUC__) && !defined(_GNU_SOURCE)
# define _GNU_SOURCE
** the sqlite3StatusDown() function is threadsafe.
*/
#if !defined(SQLITE_DISABLE_INTRINSIC) \
- && defined(__GNUC__) && GCC_VERSION>=4004000
+ && (GCC_VERSION>=4004000 || CLANG_VERSION>=3000000)
# define SQLITE_ATOMIC_STATUS_DOWN 1
#endif
assert( N>=0 );
assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
#if !defined(SQLITE_DISABLE_INTRINSIC) \
- && defined(__GNUC__) && GCC_VERSION>=4004000
+ && (GCC_VERSION>=4004000 || CLANG_VERSION>=3000000)
(void)__sync_fetch_and_sub(&wsdStat.nowValue[op], N);
#else
assert( op>=0 && op<ArraySize(statMutex) );
memcpy(&x,p,4);
return x;
#elif SQLITE_BYTEORDER==1234 && !defined(SQLITE_DISABLE_INTRINSIC) \
- && defined(__GNUC__) && GCC_VERSION>=4003000
+ && (GCC_VERSION>=4003000 || CLANG_VERSION>=3000000)
u32 x;
memcpy(&x,p,4);
return __builtin_bswap32(x);
#if SQLITE_BYTEORDER==4321
memcpy(p,&v,4);
#elif SQLITE_BYTEORDER==1234 && !defined(SQLITE_DISABLE_INTRINSIC) \
- && defined(__GNUC__) && GCC_VERSION>=4003000
+ && (GCC_VERSION>=4003000 || CLANG_VERSION>=3000000)
u32 x = __builtin_bswap32(v);
memcpy(p,&x,4);
#elif SQLITE_BYTEORDER==1234 && !defined(SQLITE_DISABLE_INTRINSIC) \
*/
int sqlite3AddInt64(i64 *pA, i64 iB){
#if !defined(SQLITE_DISABLE_INTRINSIC) \
- && defined(__GNUC__) && GCC_VERSION>=5004000
+ && (GCC_VERSION>=5004000 || CLANG_VERSION>=4000000)
return __builtin_add_overflow(*pA, iB, pA);
#else
i64 iA = *pA;
}
int sqlite3SubInt64(i64 *pA, i64 iB){
#if !defined(SQLITE_DISABLE_INTRINSIC) \
- && defined(__GNUC__) && GCC_VERSION>=5004000
+ && (GCC_VERSION>=5004000 || CLANG_VERSION>=4000000)
return __builtin_sub_overflow(*pA, iB, pA);
#else
testcase( iB==SMALLEST_INT64+1 );
}
int sqlite3MulInt64(i64 *pA, i64 iB){
#if !defined(SQLITE_DISABLE_INTRINSIC) \
- && defined(__GNUC__) && GCC_VERSION>=5004000
+ && (GCC_VERSION>=5004000 || CLANG_VERSION>=4000000)
return __builtin_mul_overflow(*pA, iB, pA);
#else
i64 iA = *pA;