From 443aae3cd2af6210843372fc2de58dd87caec964 Mon Sep 17 00:00:00 2001 From: Jon Donovan Date: Mon, 6 Jul 2026 09:48:49 -0700 Subject: [PATCH 1/4] fix: support linux/arm64 builds The previous directives supported macos arm but did not correctly trigger off of macosx, this applies the same codepaths for linux arm, supporting them natively. --- CMakeLists.txt | 9 +++++++++ pybind_interface/decide/decide.cpp | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 24a2a338e..03d2cd4ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,13 @@ else() message(STATUS "${MSG_PREFIX} did not detect Apple Silicon") endif() +# SSE/AVX pybind modules use x86 intrinsics; only build them on x86. +if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|AMD64|i386|i486|i586|i686)$") + set(QSIM_X86 TRUE) +else() + set(QSIM_X86 FALSE) +endif() + if(CMAKE_CUDA_COMPILER) enable_language(CUDA) message(STATUS "${MSG_PREFIX} found CUDA compiler " @@ -100,7 +107,9 @@ if(NOT CMAKE_APPLE_SILICON_PROCESSOR) elseif(has_hipcc) add_subdirectory(pybind_interface/hip) endif() +endif() +if(QSIM_X86) add_subdirectory(pybind_interface/sse) add_subdirectory(pybind_interface/avx512) add_subdirectory(pybind_interface/avx2) diff --git a/pybind_interface/decide/decide.cpp b/pybind_interface/decide/decide.cpp index 51cd52425..c7c1c2b09 100644 --- a/pybind_interface/decide/decide.cpp +++ b/pybind_interface/decide/decide.cpp @@ -35,7 +35,7 @@ enum Instructions { AVX512F = 0, AVX2 = 1, SSE4_1 = 2, BASIC = 3}; int detect_instructions() { Instructions instr = BASIC; - #if !defined(__aarch64__) || !defined(__APPLE__) + #if defined(_WIN32) || defined(__x86_64__) || defined(__i386__) // Existing x86/x86_64 specific instruction set detection logic int info[4]; cpuid(info, 0); From 0292f60bc0792e7a4a5b08c04fa1d3927f89fa5c Mon Sep 17 00:00:00 2001 From: Jon Donovan Date: Mon, 6 Jul 2026 09:54:04 -0700 Subject: [PATCH 2/4] Update pybind_interface/decide/decide.cpp Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- pybind_interface/decide/decide.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pybind_interface/decide/decide.cpp b/pybind_interface/decide/decide.cpp index c7c1c2b09..e9231007b 100644 --- a/pybind_interface/decide/decide.cpp +++ b/pybind_interface/decide/decide.cpp @@ -35,7 +35,7 @@ enum Instructions { AVX512F = 0, AVX2 = 1, SSE4_1 = 2, BASIC = 3}; int detect_instructions() { Instructions instr = BASIC; - #if defined(_WIN32) || defined(__x86_64__) || defined(__i386__) + #if (defined(_WIN32) && (defined(_M_IX86) || defined(_M_X64))) || defined(__x86_64__) || defined(__i386__) // Existing x86/x86_64 specific instruction set detection logic int info[4]; cpuid(info, 0); From c141a84608d83f10b706070458ec9c1f038276fa Mon Sep 17 00:00:00 2001 From: Jon Donovan Date: Mon, 6 Jul 2026 09:57:55 -0700 Subject: [PATCH 3/4] tighten windows cpuid to be consistent --- pybind_interface/decide/decide.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pybind_interface/decide/decide.cpp b/pybind_interface/decide/decide.cpp index e9231007b..fac51a67f 100644 --- a/pybind_interface/decide/decide.cpp +++ b/pybind_interface/decide/decide.cpp @@ -16,8 +16,8 @@ namespace py = pybind11; -#ifdef _WIN32 -// Windows +if defined(_WIN32) && (defined(_M_IX86) || defined(_M_X64)) +// Windows with cpuid #include #define cpuid(info, x) __cpuidex(info, x, 0) From a52aed31bf7991f77090a964b3776c8230e823d2 Mon Sep 17 00:00:00 2001 From: Jon Donovan Date: Mon, 6 Jul 2026 14:36:48 -0700 Subject: [PATCH 4/4] oh :facepalm: --- pybind_interface/decide/decide.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pybind_interface/decide/decide.cpp b/pybind_interface/decide/decide.cpp index fac51a67f..0ea07522a 100644 --- a/pybind_interface/decide/decide.cpp +++ b/pybind_interface/decide/decide.cpp @@ -16,7 +16,7 @@ namespace py = pybind11; -if defined(_WIN32) && (defined(_M_IX86) || defined(_M_X64)) +#if defined(_WIN32) && (defined(_M_IX86) || defined(_M_X64)) // Windows with cpuid #include #define cpuid(info, x) __cpuidex(info, x, 0)