mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-02-19 16:00:26 +00:00
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>
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
From 3f4283dac7d88a89b42f1f2966a862cee5afe486 Mon Sep 17 00:00:00 2001
|
||||
From: Gyorgy Sarvari <skandigraun@gmail.com>
|
||||
Date: Thu, 12 Feb 2026 11:03:53 +0100
|
||||
Subject: [PATCH 1/2] fix arm Neon intrinsics types
|
||||
|
||||
The current code calls these intrinsics with incorrect datatypes
|
||||
(it uses a vector of uint16 instead of uint8), causing compilation
|
||||
to fail with the following error:
|
||||
|
||||
| ../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(' ')),
|
||||
|
||||
To avoid this, set the correct intrinsics call that matches the
|
||||
actual arguments.
|
||||
|
||||
The code that this patch modifies is generated code, so in itself
|
||||
this change isn't appropriate for upstream. The actual problem
|
||||
is in the code generator itself, for which a PR is already pending
|
||||
for merging[1]. This patch is a port of that PR.
|
||||
|
||||
[1]: https://github.com/nodejs/llparse/pull/79
|
||||
|
||||
Upstream-Status: Inappropriate [see above]
|
||||
Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
|
||||
---
|
||||
deps/llhttp/src/llhttp.c | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/deps/llhttp/src/llhttp.c b/deps/llhttp/src/llhttp.c
|
||||
index aa4c4682..887603fd 100644
|
||||
--- a/deps/llhttp/src/llhttp.c
|
||||
+++ b/deps/llhttp/src/llhttp.c
|
||||
@@ -2639,17 +2639,17 @@ static llparse_state_t llhttp__internal__run(
|
||||
/* Find first character that does not match `ranges` */
|
||||
single = vceqq_u8(input, vdupq_n_u8(0x9));
|
||||
mask = single;
|
||||
- single = vandq_u16(
|
||||
+ single = vandq_u8(
|
||||
vcgeq_u8(input, vdupq_n_u8(' ')),
|
||||
vcleq_u8(input, vdupq_n_u8('~'))
|
||||
);
|
||||
- mask = vorrq_u16(mask, single);
|
||||
- single = vandq_u16(
|
||||
+ mask = vorrq_u8(mask, single);
|
||||
+ single = vandq_u8(
|
||||
vcgeq_u8(input, vdupq_n_u8(0x80)),
|
||||
vcleq_u8(input, vdupq_n_u8(0xff))
|
||||
);
|
||||
- mask = vorrq_u16(mask, single);
|
||||
- narrow = vshrn_n_u16(mask, 4);
|
||||
+ mask = vorrq_u8(mask, single);
|
||||
+ narrow = vshrn_n_u16(vreinterpretq_u16_u8(mask), 4);
|
||||
match_mask = ~vget_lane_u64(vreinterpret_u64_u8(narrow), 0);
|
||||
match_len = __builtin_ctzll(match_mask) >> 2;
|
||||
if (match_len != 16) {
|
||||
@@ -31,6 +31,7 @@ SRC_URI = "https://nodejs.org/dist/v${PV}/node-v${PV}.tar.xz \
|
||||
file://0001-positional-args.patch \
|
||||
file://0001-custom-env.patch \
|
||||
file://0001-build-remove-redundant-mXX-flags-for-V8.patch \
|
||||
file://0001-fix-arm-Neon-intrinsics-types.patch \
|
||||
file://run-ptest \
|
||||
"
|
||||
SRC_URI:append:class-target = " \
|
||||
@@ -46,10 +47,6 @@ S = "${UNPACKDIR}/node-v${PV}"
|
||||
# v8 errors out if you have set CCACHE
|
||||
CCACHE = ""
|
||||
|
||||
# Use '-flax-vector-conversions' to permit conversions between vectors
|
||||
# with differing element types or numbers of subparts
|
||||
CFLAGS:append:toolchain-gcc:arm = " -flax-vector-conversions"
|
||||
|
||||
def map_nodejs_arch(a, d):
|
||||
import re
|
||||
|
||||
|
||||
Reference in New Issue
Block a user