summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* DRAFT #20 - enable coveralls (linux/gcc)draft-coveralls-linuxIvan Maidanski2017-01-242-29/+19
|
* Fix test_atomic failure caused unaligned AO_double_t access on x86Ivan Maidanski2017-01-244-2/+20
| | | | | | | | | | | | | The failure is caused by violation of an assertion that checks AO_double_t variable is 8-byte aligned on x86. * doc/README.txt (AO_double_t): Add note about required alignment. * src/atomic_ops/sysdeps/standard_ao_double_t.h (AO_double_t): Add comment about alignment. * src/atomic_ops_stack.h (AO_stack_t): Likewise. * tests/test_atomic_include.template (test_atomicXX): Define old_w, w local variables as static (as otherwise, e.g., they could have 4-byte alignment on x86); add comment.
* Revert "Fix test_atomic fail caused unaligned AO_double_t access (VC/x86)"Ivan Maidanski2017-01-247-30/+4
| | | | | | | | | | This reverts commit 69c4010c1b3d43e2e179421e27379aaa5aeeb6d8. The failure is actually caused by the fact that default alignment of stack on x86 is 4 bytes. So, another solution should be proposed to fix the issue for other compilers (and, potentially, other targets). E.g. do not place AO_double_t volatile variables on stack.
* Implement char CAS and char/short add for msftc X86[_64] (VS 2013+)Ivan Maidanski2017-01-243-2/+75
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/atomic_ops/sysdeps/msftc/common32_defs.h [_MSC_VER>=1800] (_InterlockedCompareExchange8): Declare intrinsic. * src/atomic_ops/sysdeps/msftc/common32_defs.h [_MSC_VER>=1800 && !AO_PREFER_GENERALIZED && !_M_ARM] (_InterlockedExchangeAdd16, _InterlockedExchangeAdd8): Likewise. * src/atomic_ops/sysdeps/msftc/x86_64.h [_MSC_VER>=1800] (_InterlockedCompareExchange8): Likewise. * src/atomic_ops/sysdeps/msftc/x86_64.h [_MSC_VER>=1800 && !AO_PREFER_GENERALIZED] (_InterlockedExchangeAdd16, _InterlockedExchangeAdd8): Likewise. * src/atomic_ops/sysdeps/msftc/common32_defs.h [_MSC_VER>=1800] (AO_char_fetch_compare_and_swap_full): Implement using intrinsic. * src/atomic_ops/sysdeps/msftc/common32_defs.h [_MSC_VER>=1800 && !AO_PREFER_GENERALIZED && !_M_ARM] (AO_char_fetch_and_add_full, AO_short_fetch_and_add_full): Likewise. * src/atomic_ops/sysdeps/msftc/x86_64.h [_MSC_VER>=1800] (AO_char_fetch_compare_and_swap_full): Likewise. * src/atomic_ops/sysdeps/msftc/x86_64.h [_MSC_VER>=1800 && !AO_PREFER_GENERALIZED] (AO_char_fetch_and_add_full, AO_short_fetch_and_add_full): Likewise. * src/atomic_ops/sysdeps/msftc/x86.h [!AO_NO_ASM_XADD] (AO_char_fetch_and_add_full, AO_short_fetch_and_add_full): Do not define if AO_HAVE_char_fetch_and_add_full. * src/atomic_ops/sysdeps/msftc/x86_64.h [AO_ASM_X64_AVAILABLE] (AO_char_fetch_and_add_full, AO_short_fetch_and_add_full): Do not use asm-based implementation if _MSC_VER>=1800.
* Implement short inc/dec directly for msftc ARM and X86[_64]Ivan Maidanski2017-01-242-0/+36
| | | | | | | | | | | | | | | * src/atomic_ops/sysdeps/msftc/common32_defs.h [_MSC_VER>1400 && !AO_PREFER_GENERALIZED] (_InterlockedIncrement16, _InterlockedDecrement16): Declare intrinsic. * src/atomic_ops/sysdeps/msftc/x86_64.h [_MSC_VER>1400 && !AO_PREFER_GENERALIZED] (_InterlockedIncrement16, _InterlockedDecrement16): Likewise. * src/atomic_ops/sysdeps/msftc/common32_defs.h [_MSC_VER>1400 && !AO_PREFER_GENERALIZED] (AO_short_fetch_and_add1_full, AO_short_fetch_and_sub1_full): Implement using intrinsic. * src/atomic_ops/sysdeps/msftc/x86_64.h [_MSC_VER>=1800 && !AO_PREFER_GENERALIZED] (AO_char_fetch_and_add_full, AO_short_fetch_and_add_full): Likewise.
* Really implement char and/or/xor and short CAS for msftc ARM (VS 2013+)Ivan Maidanski2017-01-241-1/+1
| | | | | | | | | | | | (fix commit 9182c62) * src/atomic_ops/sysdeps/msftc/common32_defs.h [_M_ARM] (_InterlockedAnd8, _InterlockedCompareExchange16, _InterlockedOr8, _InterlockedXor8): Declare intrinsic if _MSC_VER>=1800. * src/atomic_ops/sysdeps/msftc/common32_defs.h [_M_ARM] (AO_char_and_full, AO_char_or_full, AO_char_xor_full, AO_short_fetch_compare_and_swap_full): Implement (using intrinsic) if _MSC_VER>=1800.
* Implement char and/or/xor and short CAS for msftc ARM and X86[_64]Ivan Maidanski2017-01-232-0/+79
| | | | | | | | | | | | | | | * src/atomic_ops/sysdeps/msftc/common32_defs.h [_MSC_VER>1400 && !_M_ARM] (_InterlockedAnd8, _InterlockedCompareExchange16, _InterlockedOr8, _InterlockedXor8): Declare intrinsic. * src/atomic_ops/sysdeps/msftc/x86_64.h [_MSC_VER>1400] (_InterlockedAnd8, _InterlockedCompareExchange16, _InterlockedOr8, _InterlockedXor8): Likewise. * src/atomic_ops/sysdeps/msftc/common32_defs.h [_MSC_VER>1400 && !_M_ARM] (AO_char_and_full, AO_char_or_full, AO_char_xor_full, AO_short_fetch_compare_and_swap_full): Implement (using intrinsic). * src/atomic_ops/sysdeps/msftc/x86_64.h [_MSC_VER>1400] (AO_char_and_full, AO_char_or_full, AO_char_xor_full, AO_short_fetch_compare_and_swap_full): Likewise.
* Remove redundant include windows.h from headers (msftc/x86[_64])Ivan Maidanski2017-01-202-23/+20
| | | | | | | | | | | | | | | | | | | | | | | | | * src/atomic_ops/sysdeps/msftc/common32_defs.h: Do not include windows.h if _MSC_VER > 1400 && AO_USE_INTERLOCKED_INTRINSICS && !_WIN32_WCE. * src/atomic_ops/sysdeps/msftc/common32_defs.h [!AO_PREFER_GENERALIZED || !AO_ASSUME_WINDOWS98] (AO_fetch_and_add_full, AO_fetch_and_add1_full, AO_fetch_and_sub1_full): Replace LONG to long; remove unnecessary cast to LONG. * src/atomic_ops/sysdeps/msftc/common32_defs.h [AO_ASSUME_WINDOWS98] (AO_fetch_compare_and_swap_full): Likewise. * src/atomic_ops/sysdeps/msftc/x86_64.h (AO_int_fetch_compare_and_swap_full): Likewise. * src/atomic_ops/sysdeps/msftc/x86_64.h [!AO_PREFER_GENERALIZED] (AO_int_fetch_and_add_full, AO_int_fetch_and_add1_full, AO_int_fetch_and_sub1_full): Likewise. * src/atomic_ops/sysdeps/msftc/common32_defs.h [AO_ASSUME_WINDOWS98] (AO_fetch_compare_and_swap_full): Replace PVOID to void*; remove unnecessary cast to AO_t. * src/atomic_ops/sysdeps/msftc/x86_64.h: Remove include windows.h. * src/atomic_ops/sysdeps/msftc/x86_64.h [!AO_PREFER_GENERALIZED] (AO_fetch_and_add_full, AO_fetch_and_add1_full, AO_fetch_and_sub1_full): Replace LONGLONG to __int64; remove unnecessary cast to LONGLONG. * src/atomic_ops/sysdeps/msftc/x86_64.h (AO_fetch_compare_and_swap_full): Likewise.
* Always define word-wide CAS for x86 (MS VC++ 8 or later)Ivan Maidanski2017-01-205-22/+7
| | | | | | | | | | | | | | | | | | | Visual Studio 2005 (MS VC++ 8.0) discontinued support of Windows 95. This patch deprecates AO_ASSUME_WINDOWS98 macro. * configure.ac (AO_ASSUME_WINDOWS98): Remove AH template. * doc/README.txt (AO_ASSUME_WINDOWS98): Remove documentation (as relates only to Win95). * doc/README_win32.txt (AO_ASSUME_WINDOWS98): Likwise. * doc/README_win32.txt (AO_ASSUME_VISTA): Update documentation. * src/Makefile.msft (CFLAGS): Remove "-D AO_ASSUME_WINDOWS98". * src/Makefile.msft (test_atomic_w95): Remove target. * src/Makefile.msft (check): Do not call test_atomic_w95; remove the corresponding printed message. * src/atomic_ops/sysdeps/msftc/x86.h: Remove AO_ASSUME_WINDOWS98 from comment. * src/atomic_ops/sysdeps/msftc/x86.h (AO_ASSUME_WINDOWS98): Define (implicitly) if _MSC_VER >= 1400.
* Fix test_atomic failure caused unaligned AO_double_t access on x86 (VC++)Ivan Maidanski2017-01-207-4/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Passing an unaligned AO_double_t pointer to AO double-wide primitives results in an undefined behavior of the latter when running on x86 (or violation of the corresponding assertion on the alignment). MS VC++/x86 aligns AO_double_t values on a 4-byte boundary by default. For the proper alignment, __declspec(align(8)) should be applied to variables defined in the client code (which uses double-wide AO primitives). Unfortunately, the attribute cannot be added to AO_double_t definition itself because the compiler does not allow the attribute for function arguments. This patch introduces AO_DOUBLE_ALIGN attribute for use by clients of the double-wide AO primitives (and, thus, AO_stack clients). Matters only Visual Studio compiler for X86. The inner clients (atomic_ops_malloc, test_atomic, test_stack) are updated to use this attribute. * doc/README_win32.txt [x86] (AO_DOUBLE_ALIGN): Document. * src/atomic_ops/sysdeps/generic_pthread.h (AO_DOUBLE_ALIGN): Define (as empty). * src/atomic_ops/sysdeps/standard_ao_double_t.h [!_WIN64 && _WIN32 && !__GNUC__ && _MSC_VER] (AO_DOUBLE_ALIGN): Define as declspec align(8); document it. * src/atomic_ops/sysdeps/standard_ao_double_t.h [!AO_DOUBLE_ALIGN] (AO_DOUBLE_ALIGN): Define as empty (otherwise). * src/atomic_ops_stack.h [AO_USE_ALMOST_LOCK_FREE && !AO_DOUBLE_ALIGN] (AO_DOUBLE_ALIGN): Likewise. * src/atomic_ops_malloc.c (AO_free_list): Use AO_DOUBLE_ALIGN attribute. * tests/test_stack.c (the_list): Likewise. * src/atomic_ops_stack.h [!AO_USE_ALMOST_LOCK_FREE] (AO_stack_t): Document AO_DOUBLE_ALIGN usage (by clients). * tests/test_atomic_include.template (test_atomicXX): Use AO_DOUBLE_ALIGN attribute for old_w and w double-wide local variables (to avoid alignment assertion violation or AO primitives undefined behavior on x86 if the test code is compiled by VC++).
* Add assertion that double-wide CAS target is aligned (msftc/x86[_64])Ivan Maidanski2017-01-202-0/+3
| | | | | | | | * src/atomic_ops/sysdeps/msftc/x86.h [AO_ASSUME_VISTA] (AO_double_compare_and_swap_full): Add assert() that addr pointer is aligned according to the size of AO_double_t. * src/atomic_ops/sysdeps/msftc/x86_64.h [AO_CMPXCHG16B_AVAILABLE && _MSC_VER>=1500] (AO_compare_double_and_swap_double_full): Likewise.
* Fix turn off optimization in case of configure --enable-gcovIvan Maidanski2017-01-191-1/+1
| | | | | | | | (fix commit 0d0a16d) * configure.ac [enable_gcov] (CFLAGS): Change sed regular expression to avoid [] (as they are not properly handled during autogen), and to also filter out -Os and -Ofast (-O0 is ignored).
* Add asm-based char/short/int CAS implementation for gcc/x86[_64]Ivan Maidanski2017-01-171-1/+63
| | | | | | | | | | | | | | | | | * src/atomic_ops/sysdeps/gcc/x86.h [!AO_GCC_ATOMIC_TEST_AND_SET] (AO_char_and_full, AO_char_or_full, AO_char_xor_full, AO_short_and_full, AO_short_or_full, AO_short_xor_full): Do not define if AO_PREFER_GENERALIZED. * src/atomic_ops/sysdeps/gcc/x86.h [!AO_GCC_ATOMIC_TEST_AND_SET] (AO_char_fetch_compare_and_swap_full, AO_short_fetch_compare_and_swap_full): Implement. * src/atomic_ops/sysdeps/gcc/x86.h [!AO_GCC_ATOMIC_TEST_AND_SET && __x86_64__ && !__ILP32__] (AO_int_fetch_compare_and_swap_full): Likewise. * src/atomic_ops/sysdeps/gcc/x86.h [!AO_GCC_ATOMIC_TEST_AND_SET && __x86_64__ && !__ILP32__] (AO_int_fetch_and_add_full, AO_int_and_full, AO_int_or_full, AO_int_xor_full): Do not define if AO_PREFER_GENERALIZED.
* Implement int CAS/inc/dec for msftc/x86_64Ivan Maidanski2017-01-171-1/+28
| | | | | | | | | | | | | | | | | * src/atomic_ops/sysdeps/msftc/x86_64.h (_InterlockedExchangeAdd): Declare (as intrinsic) only unless AO_PREFER_GENERALIZED. * src/atomic_ops/sysdeps/msftc/x86_64.h (_InterlockedCompareExchange): Declare intrinsic. * src/atomic_ops/sysdeps/msftc/x86_64.h [!AO_PREFER_GENERALIZED] (_InterlockedIncrement, _InterlockedDecrement): Likewise. * src/atomic_ops/sysdeps/msftc/x86_64.h (AO_int_fetch_compare_and_swap_full): Define inline function (using _InterlockedCompareExchange). * src/atomic_ops/sysdeps/msftc/x86_64.h (AO_int_fetch_and_add_full): Do not define if AO_PREFER_GENERALIZED. * src/atomic_ops/sysdeps/msftc/x86_64.h [!AO_PREFER_GENERALIZED] (AO_int_fetch_and_add1_full, AO_int_fetch_and_sub1_full): Define inline function _InterlockedIncrement/Decrement).
* Remove outdated FIXME in msftc/arm.h about _InterlockedOps memory barrierIvan Maidanski2017-01-161-2/+0
| | | | | * src/atomic_ops/sysdeps/msftc/arm.h: Remove FIXME about memory barrier of _InterlockedOps (they have the correct one according to the MSDN).
* Add configure --enable-gcov option (enable code coverage analysis)Ivan Maidanski2017-01-131-0/+8
| | | | | | * configure.ac (gcov): New --enable-* option. * configure.ac [enable_gcov] (CFLAGS): Add "--coverage" option; filter out "-O" options.
* .gitignore: Ignore gcov c/h output filesIvan Maidanski2017-01-131-0/+2
|
* Fix 'atomic_load/store symbols undefined' error on OS X 10.8 i386Ivan Maidanski2017-01-121-0/+15
| | | | | | | | | | | | | Issue #23 (libatomic_ops). * src/atomic_ops/sysdeps/gcc/x86.h [AO_GCC_ATOMIC_TEST_AND_SET && !__x86_64__ && __APPLE__ && __MACH__]: Include AvailabilityMacros.h unless MAC_OS_X_VERSION_MIN_REQUIRED already defined. * src/atomic_ops/sysdeps/gcc/x86.h [AO_GCC_ATOMIC_TEST_AND_SET && !__x86_64__ && __APPLE__ && __MACH__ && MAC_OS_X_VERSION_MIN_REQUIRED < 1090] (AO_SKIPATOMIC_double_load, AO_SKIPATOMIC_double_load_acquire, AO_SKIPATOMIC_double_store, AO_SKIPATOMIC_double_store_release): Define.
* Fix AO_stack build failure on OS X 10.7 because of missing CAS (x86)Ivan Maidanski2016-12-291-1/+4
| | | | | | | | | | (fix commit 7a6a7cc) Issue #23 (libatomic_ops). * src/atomic_ops/sysdeps/gcc/x86.h [AO_GCC_ATOMIC_TEST_AND_SET && __APPLE_CC__] (AO_GCC_FORCE_HAVE_CAS): Define also for arch i386; refine comment.
* Fix AO_stack build failure on OS X 10.7 because of missing CAS (x86_64)Ivan Maidanski2016-12-281-0/+3
| | | | | | | | | Issue #23 (libatomic_ops). * src/atomic_ops/sysdeps/gcc/x86.h [AO_GCC_ATOMIC_TEST_AND_SET && __APPLE_CC__ && __x86_64__] (AO_GCC_FORCE_HAVE_CAS): Define (to workaround missing __GCC_HAVE_SYNC_COMPARE_AND_SWAP_<n> predefined macro in Apple clang-425/x86_64); add comment.
* .gitignore: Properly ignore sym-linked folders of code analysis toolsIvan Maidanski2016-12-141-2/+2
| | | | (fix commit fa3ebc3)
* .gitignore: Ignore folders and files of static code analysis toolsIvan Maidanski2016-12-131-0/+7
|
* Support CFLAGS_EXTRA to pass extra user-defined compiler flags (configure)Ivan Maidanski2016-12-103-0/+7
| | | | | | * configure.ac: Add AC_SUBST(CFLAGS_EXTRA). * src/Makefile.am (CFLAGS): Append $(CFLAGS_EXTRA). * tests/Makefile.am (CFLAGS): Likewise.
* Travis CI configuration: turn on assertion checkingIvan Maidanski2016-12-081-1/+1
|
* Eliminate 'printf format specifies type void*' GCC pedantic warningsIvan Maidanski2016-12-071-4/+4
| | | | | | | | | | | | | | | This commit also eliminates 'cast from pointer to integer' compiler warnings and '32-bit value shift followed by expansion to 64-bit' static analysis tool warning. * src/atomic_ops_malloc.c [AO_TRACE_MALLOC] (AO_malloc, AO_free): Use %p (instead of %x) format specifier to print pthread_self() value (and cast pthread_self() to void*). * src/atomic_ops_malloc.c [AO_TRACE_MALLOC] (AO_malloc): Cast result+1 to void* (to match %p printf format specifier). * src/atomic_ops_malloc.c [AO_TRACE_MALLOC] (AO_free): Use "UL" suffix for 1 and remove the cast to unsigned long (instead of performing left shift of an integer value and extending the result to unsigned long).
* Workaround 'uninitialized memory use' MemorySanitizer warning (test_atomic)Ivan Maidanski2016-12-051-1/+4
| | | | | | * tests/test_atomic_include.template (test_atomicXX): Ensure old_w is always initialized before AO_double_storeXX; add comment about MSan false warning.
* Update ChangeLog fileIvan Maidanski2016-11-261-0/+4
|
* Update ChangeLog file (v7.4 changes)Ivan Maidanski2016-11-261-0/+1
|
* Workaround a bug in double-wide intrinsics of Clang/x64 with ASan enabledIvan Maidanski2016-11-242-2/+13
| | | | | | | | | | | | | | | As of clang-3.8, double-wide arguments are incorrectly passed to atomic intrinsic operations for x64 target if Address Sanitizer is enabled. * src/atomic_ops.h [__has_feature(address_sanitizer)] (AO_ADDRESS_SANITIZER): New internal macro. * src/atomic_ops/sysdeps/gcc/x86.h [AO_GCC_ATOMIC_TEST_AND_SET && __clang__ && __x86_64__ && !__ILP32__] (AO_SKIPATOMIC_double_compare_and_swap_ANY, AO_SKIPATOMIC_double_load, AO_SKIPATOMIC_double_load_acquire, AO_SKIPATOMIC_double_store, AO_SKIPATOMIC_double_store_release): Define also if AO_ADDRESS_SANITIZER; update comment.
* Code refactoring of Clang double-wide intrinsic workarounds (gcc/x86)Ivan Maidanski2016-11-242-28/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | (fix commits 9803386, f6a1b68, eb6d4fd) * src/atomic_ops/sysdeps/gcc/generic.h [AO_HAVE_DOUBLE_PTR_STORAGE && !AO_HAVE_double_store] (AO_double_store): Do not define if AO_SKIPATOMIC_double_store. * src/atomic_ops/sysdeps/gcc/generic.h [AO_HAVE_DOUBLE_PTR_STORAGE && !AO_HAVE_double_store_release] (AO_double_store_release): Do not define if AO_SKIPATOMIC_double_load. * src/atomic_ops/sysdeps/gcc/x86.h [AO_GCC_ATOMIC_TEST_AND_SET && __clang__ && !__x86_64__ && !__APPLE_CC__ && !__CYGWIN__ && !AO_PREFER_BUILTIN_ATOMICS] (AO_SKIPATOMIC_double_load, AO_SKIPATOMIC_double_load_acquire, AO_SKIPATOMIC_double_store, AO_SKIPATOMIC_double_store_release): Define internal macro (undefined at the end of file). * src/atomic_ops/sysdeps/gcc/x86.h [AO_GCC_ATOMIC_TEST_AND_SET && (__clang__ && !__x86_64__ && !__APPLE_CC__ && !__CYGWIN__ && !AO_PREFER_BUILTIN_ATOMICS) || (__APPLE_CC__ && __x86_64__))] (AO_SKIPATOMIC_double_compare_and_swap_ANY): Move definition here (remove at other places in this file); undefine at the end of the file. * src/atomic_ops/sysdeps/gcc/x86.h [AO_GCC_ATOMIC_TEST_AND_SET]: Check AO_SKIPATOMIC_double_compare_and_swap_ANY instead of checking multiple macros to detect whether a workaround for the CAS (and others) double-wide operations is needed.
* Undefine internal macros that are defined solely for generic.hIvan Maidanski2016-11-232-0/+14
| | | | | | | | | | | | | (fix commits 03a0465f, 3c52619c, 66f7a4d3) * src/atomic_ops/sysdeps/gcc/aarch64.h (AO_SKIPATOMIC_double_load, AO_SKIPATOMIC_double_load_acquire): Undefine at the end of file. * src/atomic_ops/sysdeps/gcc/arm.h (AO_SKIPATOMIC_ANY_and_ANY, AO_SKIPATOMIC_ANY_or_ANY, AO_SKIPATOMIC_ANY_xor_ANY, AO_SKIPATOMIC_char_store, AO_SKIPATOMIC_char_store_release, AO_SKIPATOMIC_int_store, AO_SKIPATOMIC_int_store_release, AO_SKIPATOMIC_short_store, AO_SKIPATOMIC_short_store_release, AO_SKIPATOMIC_store, AO_SKIPATOMIC_store_release): Likewise.
* Fix GCC -Wpedantic checking in configureIvan Maidanski2016-11-221-1/+3
| | | | | | | (fix commit 96a8fd9) * configure.ac [GCC] (ac_cv_cc_pedantic): Compile code that contains "extern int quiet" (since the translation unit cannot be empty).
* Report gcc/clang pedantic warnings (configure)Ivan Maidanski2016-11-221-1/+9
| | | | | | * configure.ac [GCC] (WPEDANTIC): New variable (set to "-Wpedantic -Wno-long-long" if supported by the compiler). * configure.ac [GCC] (CFLAGS): Add $WPEDANTIC.
* Refine AO_nop_write comment for ARM big.LITTLE architectureIvan Maidanski2016-11-181-1/+2
| | | | | | * src/atomic_ops/sysdeps/gcc/arm.h [!AO_UNIPROCESSOR && AO_ARM_HAVE_DMB && !AO_PREFER_BUILTIN_ATOMICS] (AO_nop_write): Refine comment about "dmb ishst" for big.LITTLE architecture.
* Fix powerpc detection on AIX (gcc)Tobias Leich2016-11-181-1/+2
| | | | | | | | GCC/powerpc-ibm-aix does not define any of __powerpc__, __ppc__, __PPC__, __powerpc64__, __ppc64__; but it does define _ARCH_PPC (and _POWER). * src/atomic_ops.h [_ARCH_PPC]: Include gcc/powerpc.h.
* Do not define print_list() unless used (tests)Ivan Maidanski2016-11-142-0/+4
| | | | | * tests/test_malloc.c (print_list): Define only if DEBUG_RUN_ONE_TEST. * tests/test_stack.c (print_list): Define only if VERBOSE.
* Fix indentation of #endif in s390.hIvan Maidanski2016-11-121-1/+1
| | | | | | | (fix commit c2edeab) * src/atomic_ops/sysdeps/gcc/s390.h (AO_fetch_compare_and_swap_full): Adjust indentation of #endif.
* Update AUTHORS file (add 'Tobias Leich')Ivan Maidanski2016-11-101-0/+1
|
* Implement fetch-CAS for s390[x] (gcc)Tobias Leich2016-11-101-1/+18
| | | | | | | * src/atomic_ops/sysdeps/gcc/s390.h (AO_compare_and_swap_full): Do not define if AO_GENERALIZE_ASM_BOOL_CAS. * src/atomic_ops/sysdeps/gcc/s390.h (AO_fetch_compare_and_swap_full): Implement; remove TODO item.
* Update ChangeLog fileIvan Maidanski2016-11-081-3/+22
|
* Update ChangeLog file (v7.4 changes)Ivan Maidanski2016-11-081-0/+2
|
* Update ChangeLog file (v7.2 - v7.4 changes only)Ivan Maidanski2016-11-081-0/+22
| | | | (Cherry-pick commit 03a1704 from 'release-7_4' branch.)
* Remove spaces at EOLn in asm codeIvan Maidanski2016-11-082-32/+32
| | | | | | | | | | * src/atomic_ops/sysdeps/gcc/hexagon.h (AO_test_and_set, AO_compare_and_swap, AO_fetch_compare_and_swap): Remove spaces preceding "\n". * src/atomic_ops/sysdeps/gcc/mips.h (AO_nop_full, AO_fetch_and_add, AO_test_and_set, AO_compare_and_swap): Likewise. * src/atomic_ops/sysdeps/gcc/hexagon.h (AO_fetch_and_add, AO_test_and_set, AO_fetch_compare_and_swap): Align comments.
* Fix (improve) AO_REQUIRE_CAS description in READMEIvan Maidanski2016-11-021-3/+3
| | | | | * doc/README.txt: Document AO_REQUIRE_CAS better (replace "compare-and-swap" with "AO_compare_and_swap*").
* Add *_and/or/xor* and *_[fetch_]compare_and_swap* tests to test_atomicIvan Maidanski2016-11-011-0/+182
| | | | | | | | | | | | | Previously, only AO_and/or/xor and AO_[fetch]_CAS tests (for AO_t) existed in test_atomic. * tests/test_atomic_include.template (test_atomicXX): Add minimal testing of AO_short_compare_and_swapXX, AO_short_orXX, AO_short_xorXX, AO_short_andXX, AO_short_fetch_compare_and_swapXX, AO_char_compare_and_swapXX, AO_char_orXX, AO_char_xorXX, AO_char_andXX, AO_char_fetch_compare_and_swapXX, AO_int_compare_and_swapXX, AO_int_orXX, AO_int_xorXX, AO_int_andXX, AO_int_fetch_compare_and_swapXX.
* Fix reporting about missing and/or/xor_dd_acquire_read (test_atomic)Ivan Maidanski2016-11-011-3/+18
| | | | | | | | | | | | | | | AO_XSIZE_and/or/xor_dd_acquire_read are meaningless and not implemented, thus their absence is not reported in the tests. * tests/test_atomic_include.template [!AO_HAVE_orXX] (test_atomicXX): Do not call MISSING(AO_or) if all AO_HAVE_or* excluding AO_HAVE_or_dd_acquire_read are not defined. * tests/test_atomic_include.template [!AO_HAVE_xorXX] (test_atomicXX): Do not call MISSING(AO_xor) if all AO_HAVE_xor* excluding AO_HAVE_xor_dd_acquire_read are not defined. * tests/test_atomic_include.template [!AO_HAVE_andXX] (test_atomicXX): Do not call MISSING(AO_and) if all AO_HAVE_and* excluding AO_HAVE_and_dd_acquire_read are not defined.
* Fix missing double_compare_and_swap_dd_acquire_readIvan Maidanski2016-11-011-0/+16
| | | | | | | | | | This matters only if AO_double_compare_and_swap[_acquire_read] actually defined in generalize.h too. * src/atomic_ops/generalize.h [!AO_HAVE_double_compare_and_swap_dd_acquire_read] (AO_double_compare_and_swap_dd_acquire_read): Define (same as definition as auto-generated in generalize-small.h).
* Workaround 'value of MAP_ANON unknown' cppcheck info messageIvan Maidanski2016-10-261-1/+3
| | | | | | | | (fix commit 4c303bc) * src/atomic_ops_malloc.c [USE_MMAP_ANON && CPPCHECK] (OPT_MAP_ANON): Define to immediate non-zero value (taken from Linux libc) instead of MAP_ANON (because the latter is used in ifdef).
* Suppress 'ISO C does not support __int128 type' GCC/Clang pedantic warningIvan Maidanski2016-10-251-1/+15
| | | | | | * src/atomic_ops/sysdeps/standard_ao_double_t.h [!__ILP32__ && (__GNUC__ >= 4.7 || __clang__ >= 3.6)] (double_ptr_storage): Turn off pedantic warnings reporting (for this typedef only).
* Fix test_malloc failure if CPPCHECK is definedIvan Maidanski2016-10-251-2/+2
| | | | | | | (fix commit c1a7aad) * src/atomic_ops_malloc.c [USE_MMAP_ANON && MAP_ANONYMOUS] (OPT_MAP_ANON): Define to MAP_ANON (instead of 0) if CPPCHECK.