Fix alignment issues with double-wide atomics on i386 #102
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The SysV ABI defined
uint64_t
with 4 byte alignment on i386 — so we can’t just assume that the integer types will have the right alignment for atomics out of the box.Emulate the original
_Atomic<Width>Storage
types from the old C shims even in native atomics configuration, so that they can carry a custom@_alignment
attribute.Change things up so that these storage types define atomic operations taking and returning themselves, rather than some standard scalar type. This gets things a little closer in spirit to what we're planning to do in the stdlib, and it really cuts down the size of the gyb output for the native definitions.
Resolves #99.
Checklist