mirror of
https://github.com/boostorg/atomic.git
synced 2026-02-02 08:22:08 +00:00
The old operations template is replaced with core_operations, which falls back to core_arch_operations, which falls back to core_operations_emulated. The core_operations layer is intended for more or less architecture-neutral backends, like the one based on gcc __atomic* intrinsics. It may fall back to core_arch_operations where it is not supported by the compiler or where the latter is more optimal. For example, where gcc does not implement 128-bit atomic operations via __atomic* intrinsics, we support them in the core_arch_operations backend, which uses inline assembler blocks. The old emulated_operations template is largely unchanged and was renamed to core_operations_emulated for naming consistency. All other operation templates were also renamed for consistency (e.g. generic_wait_operations -> wait_operations_generic). Fence operations have been extracted to a separate set of structures: fence_operations, fence_arch_opereations and fence_operations_emulated. These are similar to the core operations described above. This structuring also allows to fall back from fence_operations to fence_arch_opereations when the latter is more optimal. The net result of these changes is that 128-bit and 64-bit atomic operations should now be consistently supported on all architectures that support them. Previously, only x86 was supported via local hacks for gcc and clang.