Skip to content

Remove redundant memory ordering overrides now that /volatile:ms is used#27

Merged
macarte merged 1 commit intomacarte/rebased-additional-fixesfrom
macarte/test-changes-to-rebased-additional-fixes
Mar 12, 2026
Merged

Remove redundant memory ordering overrides now that /volatile:ms is used#27
macarte merged 1 commit intomacarte/rebased-additional-fixesfrom
macarte/test-changes-to-rebased-additional-fixes

Conversation

@macarte
Copy link
Contributor

@macarte macarte commented Mar 11, 2026

With /volatile:ms set in JVM_CFLAGS for Windows AArch64, MSVC gives volatile accesses acquire/release semantics (LDAR/STLR), making several defense-in-depth changes unnecessary and harmful to performance:

  • Revert orderAccess_windows_aarch64.hpp from __dmb() intrinsics back to std::atomic_thread_fence(). With /volatile:ms, volatile accesses are already compiler-barriered, so std::atomic_thread_fence() works correctly for both compiler and hardware ordering.

  • Remove PlatformLoad and PlatformStore overrides from atomic_windows_aarch64.hpp. These forced LDAR/STLR on every Atomic::load()/Atomic::store() call, but /volatile:ms already produces identical codegen for the generic volatile-dereference path. The PlatformOrderedLoad/PlatformOrderedStore specializations (for Atomic::load_acquire/release_store) are retained as they provide single-instruction LDAR/STLR instead of the generic dmb+LDR/STR fallback.

With /volatile:ms set in JVM_CFLAGS for Windows AArch64, MSVC gives
volatile accesses acquire/release semantics (LDAR/STLR), making several
defense-in-depth changes unnecessary and harmful to performance:

- Revert orderAccess_windows_aarch64.hpp from __dmb() intrinsics back to
  std::atomic_thread_fence(). With /volatile:ms, volatile accesses are
  already compiler-barriered, so std::atomic_thread_fence() works
  correctly for both compiler and hardware ordering.

- Remove PlatformLoad<N> and PlatformStore<N> overrides from
  atomic_windows_aarch64.hpp. These forced LDAR/STLR on every
  Atomic::load()/Atomic::store() call, but /volatile:ms already
  produces identical codegen for the generic volatile-dereference path.
  The PlatformOrderedLoad/PlatformOrderedStore specializations (for
  Atomic::load_acquire/release_store) are retained as they provide
  single-instruction LDAR/STLR instead of the generic dmb+LDR/STR
  fallback.
@macarte macarte merged commit 35072de into macarte/rebased-additional-fixes Mar 12, 2026
85 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant