Commit 5baa52a
committed
feat(ailego): enable NEON math kernels on MSVC ARM64
Addresses @feihongxu0824's review comment on #352. Previously the
*_neon.cc files compiled into empty translation units on MSVC ARM64
because their guards (`__ARM_NEON`, `__aarch64__`) are GCC/Clang-only
macros, leaving zvec to use the scalar fallback. That fallback hits
~1 ULP precision drift versus the NEON path, which surfaced as two
HnswStreamerTest cosine failures and a `NormMatrix.Norm1_General`
failure on the `windows-11-arm` CI runner.
Changes:
* Expand `defined(__ARM_NEON)` -> `(defined(__ARM_NEON) || defined(_M_ARM64))`
at the 51 source sites that gate ARM NEON kernels (math, math_batch,
utility, normalizer, platform headers, dispatch tables, version probe).
* Expand `defined(__aarch64__)` -> `(defined(__aarch64__) || defined(_M_ARM64))`
at the 26 sites that distinguish AArch64 from ARMv7 NEON — MSVC ARM64
is AArch64 but does not predefine `__aarch64__`. As a side effect the
ARMv7-only polyfills (`vaddvq_f32`/`vaddvq_s32` shims in
`distance_matrix_accum_fp32.i`, `distance_matrix_fp32.i`) are correctly
skipped under MSVC ARM64, where those intrinsics are built in.
* `src/include/zvec/ailego/internal/platform.h`: include `<arm_neon.h>`
on the MSVC branch when `_M_ARM64` is defined (it was previously gated
behind `!_MSC_VER`, so MSVC ARM64 saw no NEON types).
* `src/ailego/CMakeLists.txt`: keep the existing `if(NOT MSVC)` wrapper
around the GCC-only `-march=armv8-a` flag, and add an explicit `else()`
branch with a comment explaining MSVC ARM64 does not need `-march`
(NEON is the ARMv8 baseline on MSVC and the kernels are now picked up
via the ALL_SRCS glob with the macro guards above).
This supersedes the earlier `test(hnsw): skip two cosine self-match
tests on MSVC ARM64` commit (which has been dropped from the branch).
The NEON math kernels now use the same precision path as Linux/macOS
ARM64, so those tests should pass natively on `windows-11-arm`.1 parent 236960d commit 5baa52a
24 files changed
Lines changed: 100 additions & 47 deletions
File tree
- src
- ailego
- internal
- math
- utility
- include/zvec/ailego
- buffer
- internal
- utility
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
122 | 122 | | |
123 | 123 | | |
124 | 124 | | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
125 | 132 | | |
126 | 133 | | |
127 | 134 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | | - | |
| 20 | + | |
| 21 | + | |
21 | 22 | | |
22 | 23 | | |
23 | 24 | | |
| |||
48 | 49 | | |
49 | 50 | | |
50 | 51 | | |
51 | | - | |
| 52 | + | |
| 53 | + | |
52 | 54 | | |
53 | 55 | | |
54 | 56 | | |
| |||
336 | 338 | | |
337 | 339 | | |
338 | 340 | | |
339 | | - | |
| 341 | + | |
340 | 342 | | |
341 | 343 | | |
342 | 344 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
33 | | - | |
| 33 | + | |
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
45 | | - | |
| 45 | + | |
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
29 | | - | |
| 29 | + | |
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| |||
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| |||
49 | 49 | | |
50 | 50 | | |
51 | 51 | | |
52 | | - | |
| 52 | + | |
53 | 53 | | |
54 | 54 | | |
55 | 55 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
22 | | - | |
| 22 | + | |
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
23 | | - | |
| 23 | + | |
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
| |||
49 | 49 | | |
50 | 50 | | |
51 | 51 | | |
52 | | - | |
| 52 | + | |
53 | 53 | | |
54 | 54 | | |
55 | 55 | | |
| |||
80 | 80 | | |
81 | 81 | | |
82 | 82 | | |
83 | | - | |
| 83 | + | |
84 | 84 | | |
85 | 85 | | |
86 | 86 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
25 | | - | |
| 25 | + | |
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| |||
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| |||
98 | 98 | | |
99 | 99 | | |
100 | 100 | | |
101 | | - | |
| 101 | + | |
102 | 102 | | |
103 | 103 | | |
104 | 104 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
22 | | - | |
| 22 | + | |
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| |||
0 commit comments