gcc 13.1 and clang 16 now generate the ldapr instructions for atomic loads
when ARMv8.3-RCPC or later is enabled. Resorting to inline asm for this
is no longer necessary.
Added more recent gcc and clang versions, reduced usage of external package
repositories. macos-12 image is now removed from GitHub Actions, so removed
the CI job based on it.
* Make the library modular usable.
* Switch to library requirements instead of source. As source puts extra source in install targets.
* Add missing NO_LIB usage requirements.
* Add requires-b2 check to top-level build file.
* Update dependencies.
* Bump B2 require to 5.2
* Update copyright dates.
* Move inter-lib dependencies to a project variable and into the build targets.
* Split b2 dependencies into public and private.
* Be explicit about the kind of public dependencies and make the winapi be conditional on windows target-os.
Since recent OpenBSD versions have removed syscall(2) interface, use
futex(2) wrapper that was also added along with the SYS_futex syscall.
Closes https://github.com/boostorg/atomic/pull/68.
Legacy MinGW32 does not seem to support std::thread and other C++11
multithreading components. We are dropping support for this compiler
as we are no longer able to test it.
MinGW-w64 is still supported.
This removes dependencies on Boost.Thread and Boost.Chrono, as well as
their dependencies and potentially allows to test more compilers. In particular,
this removes the dependency on Boost.Lexical cast, which no longer compiles
with gcc 4.6 and 4.7.
As a result of dependent libraries dropping support for C++03, Boost.Atomic
is no longer able to support C++03 and now requires C++11 as a minimum.
Drop C++03 compilers from the CI and update docs accordingly. No code changes
at this time.
On FreeBSD and OpenBSD 32-bit x86 targets are configured to use 53-bit precision
for long double type. The value still uses 80 bits of storage, but the lowest
11 bits of mantissa are zero.
While at it, also added support for 24-bit precision, which can be configured
in x87. Though the platforms where this configuration is used by default are
not known.
Also, when possible, use predefined macros by gcc and compatible compilers and
avoid including standard library header for defining floating point limit macros.
Related to https://github.com/boostorg/atomic/issues/14.
Boost libraries that deprecate C++03 support (namely, Boost.Chrono) are not
used in Boost.Atomic implementation, but they are used in tests (indirectly
through Boost.Thread), which means it will become impossible to test
Boost.Atomic when the support is removed.
For seq_cst we must issue a memory fence, so in this case use
cmpxchg8b/cmpxchg16b.
Also, optimized 32-bit x86 code path to make the compiler pass the value
to and from the xmm register instead of hardcoding it in asm blocks.
Enabling AVX will allow to test future updates that will use these
instructions.
Since MSVC doesn't allow to enable instruction sets for the current CPU,
we enable AVX unconditionally there, in hope that AppVeyor CI runners
support AVX.
Also, different clang versions exhibit various issues in GitHub Actions
when "native" instruction set is enabled, so we also explicitly specify
the instruction set we want for GHA.