Skip to content

Commit f7f0ff2

Browse files
OldManYellsAtCloudkraj
authored andcommitted
nodejs: patch incorrect NEON intrinsics
The llhttp dependency of nodejs uses NEON intrinsics when they are available, however some of these calls are incorrect: they the call they use don't match the parameters passed, and so the compilation fail (unless the error is suppressed): | ../deps/llhttp/src/llhttp.c: In function 'llhttp__internal__run': | ../deps/llhttp/src/llhttp.c:2645:9: note: use '-flax-vector-conversions' to permit conversions between vectors with differing element types or numbers of subparts | 2645 | ); | | ^ | ../deps/llhttp/src/llhttp.c:2643:11: error: incompatible type for argument 1 of 'vandq_u16' | 2643 | vcgeq_u8(input, vdupq_n_u8(' ')), There is a patch upstream that fixes it (though it is not merged yet). This patch is a port of that fix. This allows us to remove the extra CFLAGS also from the recipe that suppressed this error. Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com> Signed-off-by: Khem Raj <raj.khem@gmail.com>
1 parent babe6a2 commit f7f0ff2

2 files changed

Lines changed: 60 additions & 4 deletions

File tree

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
From 3f4283dac7d88a89b42f1f2966a862cee5afe486 Mon Sep 17 00:00:00 2001
2+
From: Gyorgy Sarvari <skandigraun@gmail.com>
3+
Date: Thu, 12 Feb 2026 11:03:53 +0100
4+
Subject: [PATCH 1/2] fix arm Neon intrinsics types
5+
6+
The current code calls these intrinsics with incorrect datatypes
7+
(it uses a vector of uint16 instead of uint8), causing compilation
8+
to fail with the following error:
9+
10+
| ../deps/llhttp/src/llhttp.c: In function 'llhttp__internal__run':
11+
| ../deps/llhttp/src/llhttp.c:2645:9: note: use '-flax-vector-conversions' to permit conversions between vectors with differing element types or numbers of subparts
12+
| 2645 | );
13+
| | ^
14+
| ../deps/llhttp/src/llhttp.c:2643:11: error: incompatible type for argument 1 of 'vandq_u16'
15+
| 2643 | vcgeq_u8(input, vdupq_n_u8(' ')),
16+
17+
To avoid this, set the correct intrinsics call that matches the
18+
actual arguments.
19+
20+
The code that this patch modifies is generated code, so in itself
21+
this change isn't appropriate for upstream. The actual problem
22+
is in the code generator itself, for which a PR is already pending
23+
for merging[1]. This patch is a port of that PR.
24+
25+
[1]: https://github.com/nodejs/llparse/pull/79
26+
27+
Upstream-Status: Inappropriate [see above]
28+
Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
29+
---
30+
deps/llhttp/src/llhttp.c | 12 ++++++------
31+
1 file changed, 6 insertions(+), 6 deletions(-)
32+
33+
diff --git a/deps/llhttp/src/llhttp.c b/deps/llhttp/src/llhttp.c
34+
index aa4c4682..887603fd 100644
35+
--- a/deps/llhttp/src/llhttp.c
36+
+++ b/deps/llhttp/src/llhttp.c
37+
@@ -2639,17 +2639,17 @@ static llparse_state_t llhttp__internal__run(
38+
/* Find first character that does not match `ranges` */
39+
single = vceqq_u8(input, vdupq_n_u8(0x9));
40+
mask = single;
41+
- single = vandq_u16(
42+
+ single = vandq_u8(
43+
vcgeq_u8(input, vdupq_n_u8(' ')),
44+
vcleq_u8(input, vdupq_n_u8('~'))
45+
);
46+
- mask = vorrq_u16(mask, single);
47+
- single = vandq_u16(
48+
+ mask = vorrq_u8(mask, single);
49+
+ single = vandq_u8(
50+
vcgeq_u8(input, vdupq_n_u8(0x80)),
51+
vcleq_u8(input, vdupq_n_u8(0xff))
52+
);
53+
- mask = vorrq_u16(mask, single);
54+
- narrow = vshrn_n_u16(mask, 4);
55+
+ mask = vorrq_u8(mask, single);
56+
+ narrow = vshrn_n_u16(vreinterpretq_u16_u8(mask), 4);
57+
match_mask = ~vget_lane_u64(vreinterpret_u64_u8(narrow), 0);
58+
match_len = __builtin_ctzll(match_mask) >> 2;
59+
if (match_len != 16) {

meta-oe/recipes-devtools/nodejs/nodejs_22.22.0.bb

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ SRC_URI = "https://nodejs.org/dist/v${PV}/node-v${PV}.tar.xz \
3131
file://0001-positional-args.patch \
3232
file://0001-custom-env.patch \
3333
file://0001-build-remove-redundant-mXX-flags-for-V8.patch \
34+
file://0001-fix-arm-Neon-intrinsics-types.patch \
3435
file://run-ptest \
3536
"
3637
SRC_URI:append:class-target = " \
@@ -46,10 +47,6 @@ S = "${UNPACKDIR}/node-v${PV}"
4647
# v8 errors out if you have set CCACHE
4748
CCACHE = ""
4849

49-
# Use '-flax-vector-conversions' to permit conversions between vectors
50-
# with differing element types or numbers of subparts
51-
CFLAGS:append:toolchain-gcc:arm = " -flax-vector-conversions"
52-
5350
def map_nodejs_arch(a, d):
5451
import re
5552

0 commit comments

Comments
 (0)