diff mbox series

[meta-oe,2/2] nodejs: detect NEON correctly for aarch64

Message ID 20260212125351.962556-2-skandigraun@gmail.com
State New
Headers show
Series [meta-oe,1/2] nodejs: patch incorrect NEON intrinsics | expand

Commit Message

Gyorgy Sarvari Feb. 12, 2026, 12:53 p.m. UTC
The llhttp vendored dependency of nodejs takes advantage of Arm NEON
instructions when they are available, however they are detected by
checking for an outdated CPU feature macro: it checks for __ARM_NEON__,
however it is not defined by new compilers for aarch64, rather they
set __ARM_NEON. The Arm C extension guide[1] refers to __ARM_NEON macro
aswell.

This patch changes the detection to check for both macros when detecting
the availability of NEON instructions.

The code this patch modifies is generated, so the patch itself isn't
suitable for upstream submission, as the root cause of the error is
in the generator itself. A PR has been submitted[2] to the generator
project to rectify this issue.

[1]: https://developer.arm.com/documentation/ihi0053/d/ - pdf, section 6.9
[2]: https://github.com/nodejs/llparse/pull/84

Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
---
 .../0001-detect-aarch64-Neon-correctly.patch  | 51 +++++++++++++++++++
 .../recipes-devtools/nodejs/nodejs_22.22.0.bb |  1 +
 2 files changed, 52 insertions(+)
 create mode 100644 meta-oe/recipes-devtools/nodejs/nodejs/0001-detect-aarch64-Neon-correctly.patch
diff mbox series

Patch

diff --git a/meta-oe/recipes-devtools/nodejs/nodejs/0001-detect-aarch64-Neon-correctly.patch b/meta-oe/recipes-devtools/nodejs/nodejs/0001-detect-aarch64-Neon-correctly.patch
new file mode 100644
index 0000000000..15de2c1119
--- /dev/null
+++ b/meta-oe/recipes-devtools/nodejs/nodejs/0001-detect-aarch64-Neon-correctly.patch
@@ -0,0 +1,51 @@ 
+From 41ec2d5302b77be27ca972102c29ce12471ed4b0 Mon Sep 17 00:00:00 2001
+From: Gyorgy Sarvari <skandigraun@gmail.com>
+Date: Thu, 12 Feb 2026 11:09:44 +0100
+Subject: [PATCH 2/2] detect aarch64 Neon correctly
+
+The llhttp vendored dependency of nodejs takes advantage of Arm NEON
+instructions when they are available, however they are detected by
+checking for an outdated CPU feature macro: it checks for __ARM_NEON__,
+however it is not defined by new compilers for aarch64, rather they
+set __ARM_NEON. The Arm C extension guide[1] refers to __ARM_NEON macro
+aswell.
+
+This patch changes the detection to check for both macros when detecting
+the availability of NEON instructions.
+
+The code this patch modifies is generated, so the patch itself isn't
+suitable for upstream submission, as the root cause of the error is
+in the generator itself. A PR has been submitted[2] to the generator
+project to rectify this issue.
+
+[1]: https://developer.arm.com/documentation/ihi0053/d/ - pdf, section 6.9
+[2]: https://github.com/nodejs/llparse/pull/84
+
+Upstream-Status: Inappropriate [see above]
+Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
+---
+ deps/llhttp/src/llhttp.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/deps/llhttp/src/llhttp.c b/deps/llhttp/src/llhttp.c
+index a0e59e50..b069bbbb 100644
+--- a/deps/llhttp/src/llhttp.c
++++ b/deps/llhttp/src/llhttp.c
+@@ -10,7 +10,7 @@
+  #endif  /* _MSC_VER */
+ #endif  /* __SSE4_2__ */
+ 
+-#ifdef __ARM_NEON__
++#if defined(__ARM_NEON__) || defined(__ARM_NEON)
+  #include <arm_neon.h>
+ #endif  /* __ARM_NEON__ */
+ 
+@@ -2625,7 +2625,7 @@ static llparse_state_t llhttp__internal__run(
+         goto s_n_llhttp__internal__n_header_value_otherwise;
+       }
+       #endif  /* __SSE4_2__ */
+-      #ifdef __ARM_NEON__
++      #if defined(__ARM_NEON__) || defined(__ARM_NEON)
+       while (endp - p >= 16) {
+         uint8x16_t input;
+         uint8x16_t single;
diff --git a/meta-oe/recipes-devtools/nodejs/nodejs_22.22.0.bb b/meta-oe/recipes-devtools/nodejs/nodejs_22.22.0.bb
index ea547f6fd2..fe6f6461cd 100644
--- a/meta-oe/recipes-devtools/nodejs/nodejs_22.22.0.bb
+++ b/meta-oe/recipes-devtools/nodejs/nodejs_22.22.0.bb
@@ -32,6 +32,7 @@  SRC_URI = "https://nodejs.org/dist/v${PV}/node-v${PV}.tar.xz \
            file://0001-custom-env.patch \
            file://0001-build-remove-redundant-mXX-flags-for-V8.patch \
            file://0001-fix-arm-Neon-intrinsics-types.patch \
+           file://0001-detect-aarch64-Neon-correctly.patch \
            file://run-ptest \
            "
 SRC_URI:append:class-target = " \