Thread
-
Re: [PATCH] Fix ARM64/MSVC atomic memory ordering issues on Win11 by adding explicit DMB barriers
Thomas Munro <thomas.munro@gmail.com> — 2025-11-23T20:32:39Z
On Mon, Nov 24, 2025 at 4:55 AM Andres Freund <andres@anarazel.de> wrote: > > - if cc.links(prog, name: '__crc32cb, __crc32ch, __crc32cw, and __crc32cd without -march=armv8-a+crc', > > + if cc.get_id() == 'msvc' > > + cdata.set('USE_ARMV8_CRC32C', 1) > > + have_optimized_crc = true > > Should have a comment explaining why we can do this unconditionally... I was wondering about that in light of your revelation that it must be using /arch:armv8.0 by default. If we only support Windows/ARM on armv8.1 hardware (like Windows 11 itself), then I think that means that we'd want /arch:armv8.1 here: + # Add ARM64 architecture flag for Windows 11 ARM64 for correct intrensics + if host_machine.system() == 'windows' and host_machine.cpu_family() == 'aarch64' + add_project_arguments('/arch:armv9.4', language: ['c', 'cpp']) + endif We can't impose our own random high ISA requirement like that, or some machines will choke on illegal instructions. I wonder if the same applies to Visual Studio on x86. The OS now requires x86-64-v2 (like RHEL9, and many other Linux distros except Debian?), but Visual Studio might not know that... but then we might say that's an issue for the EDB packaging crew to think about, not us. In that case we might want to say "OK you choose the ARM version, but we're not going to write the runtime test for CRC on armv8, we'll do a compile-time test only, because it would be stupid to waste time writing code for armv8.0".