package/opus: don't use vcvtaq_s32_f32 on 32 bit ARM
PATCH 1/1 package/opus: don't use vcvtaq_s32_f32 on 32 bit ARM
From: Comick <[email protected]>
Upstream issues is waiting for feedback.
See here for details:
https://gitlab.xiph.org/xiph/opus/-/work_items/2397
--- ...use-vcvtaq_s32_f32-on-32-bit-systems.patch | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch new file +26 -0
@@ -0,0 +1,26 @@ +From 321532001d59367466a6a4a60f5c6f0fe5fa2176 Mon Sep 17 00:00:00 2001 +From: Comick <[email protected]> +Date: Sat, 13 Jun 2026 21:48:00 +0200 +Subject: [PATCH] celt/arm don't use vcvtaq_s32_f32 on 32 bit systems +Upstream: N/A https://gitlab.xiph.org/xiph/opus/-/work_items/2397 + +--- + celt/arm/mathops_arm.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/celt/arm/mathops_arm.h b/celt/arm/mathops_arm.h +index b1f9169..c612dae 100644 +--- a/celt/arm/mathops_arm.h ++++ b/celt/arm/mathops_arm.h +@@ -37,7 +37,7 @@ + + static inline int32x4_t vroundf(float32x4_t x) + { +-# if defined(__aarch64__) || (defined(__ARM_ARCH) && __ARM_ARCH >= 8) ++# if defined(__aarch64__) + return vcvtaq_s32_f32(x); + # else + uint32x4_t sign = vandq_u32(vreinterpretq_u32_f32(x), vdupq_n_u32(0x80000000)); +-- +2.54.0 +
Signature · 6 lines
2.54.0 _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
Quoted 7 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Michele" == Michele Comignano <[email protected]> writes:
From: Comick <[email protected]>
Upstream issues is waiting for feedback.See here for details:
https://gitlab.xiph.org/xiph/opus/-/work_items/2397
Hmm, indeed - There is no vcvtaq_s32_f32 intrinsic in gcc/config/arm/arm_neon.h but there is in gcc/config/aarch64/arm_neon.h but I do not understand the finer details - Julien?
Quoted 46 lines
Signed-off-by Michele Comignano <[email protected]>--- ...use-vcvtaq_s32_f32-on-32-bit-systems.patch | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patchpackage/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch new file +26
-0@@ -0,0 +1,26 @@ +From 321532001d59367466a6a4a60f5c6f0fe5fa2176 Mon Sep 17 00:00:00 2001 +From: Comick <[email protected]> +Date: Sat, 13 Jun 2026 21:48:00 +0200 +Subject: [PATCH] celt/arm don't use vcvtaq_s32_f32 on 32 bit systems +Upstream: N/A https://gitlab.xiph.org/xiph/opus/-/work_items/2397 + +--- + celt/arm/mathops_arm.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/celt/arm/mathops_arm.h b/celt/arm/mathops_arm.h +index b1f9169..c612dae 100644 +--- a/celt/arm/mathops_arm.h ++++ b/celt/arm/mathops_arm.h +@@ -37,7 +37,7 @@ + + static inline int32x4_t vroundf(float32x4_t x) + { +-# if defined(__aarch64__) || (defined(__ARM_ARCH) && __ARM_ARCH >= 8) ++# if defined(__aarch64__) + return vcvtaq_s32_f32(x); + # else + uint32x4_t sign = vandq_u32(vreinterpretq_u32_f32(x), vdupq_n_u32(0x80000000)); +-- +2.54.0 +Signature · 6 lines
2.54.0 _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
Signature · 5 lines
Bye, Peter Korsgaard _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
Hi Peter, All,
Quoted 5 lines · Peter Korsgaard
Quoted 4 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Michele" == Michele Comignano <[email protected]> writes:
From: Comick <[email protected]>
Upstream issues is waiting for feedback.
Quoted 7 lines
Quoted 2 lines
See here for details:
https://gitlab.xiph.org/xiph/opus/-/work_items/2397Hmm, indeed - There is no
vcvtaq_s32_f32intrinsic ingcc/config/arm/arm_neon.hbut there is ingcc/config/aarch64/arm_neon.hbut I do not understand the finer details - Julien?
Armv8-A Aarch32 is in fact a superset of Armv7-A. This is why there is few 32bit Armv8-A instructions which are not available in original Armv7-A.
See the column "Supported architectures" in the following table:
https://arm-software.github.io/acle/neon_intrinsics/advsimd.html#conversions
vcvtaq_s32_f32 is maked "A32/A64", whereas, for example vcvt_s32_f32 is marked "v7/A32/A64".
There is also a search engine for intrinsics available at:
https://developer.arm.com/architectures/instruction-sets/intrinsics/
Quoted 50 lines
Quoted 3 lines
Signed-off-by Michele Comignano <[email protected]>--- ...use-vcvtaq_s32_f32-on-32-bit-systems.patch | 26+++++++++++++++++++
Quoted 2 lines
1 file changed, 26 insertions(+) create mode 100644
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patchReview
Quoted 1 line
(quoted diff) +0
-0
a/package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patchb/package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patchQuoted 4 lines
new file mode 100644
index 0000000000..ddd572921f
---/dev/null
+++
b/package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patchReview line 1
Quoted 2 lines
(quoted diff) +1
-0@@ -0,0 +1,26 @@ +From 321532001d59367466a6a4a60f5c6f0fe5fa2176 Mon Sep 17 00:00:002001
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch
Quoted 3 lines
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch new file +3
-0+From: Comick <[email protected]> +Date: Sat, 13 Jun 2026 21:48:00 +0200 +Subject: [PATCH] celt/arm don't use vcvtaq_s32_f32 on 32 bitsystems
Quoted 17 lines
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch new file +15
-0+Upstream: N/A https://gitlab.xiph.org/xiph/opus/-/work_items/2397 + +--- + celt/arm/mathops_arm.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/celt/arm/mathops_arm.h b/celt/arm/mathops_arm.h +index b1f9169..c612dae 100644 +--- a/celt/arm/mathops_arm.h ++++ b/celt/arm/mathops_arm.h +@@ -37,7 +37,7 @@ + + static inline int32x4_t vroundf(float32x4_t x) + { +-# if defined(__aarch64__) || (defined(__ARM_ARCH) && __ARM_ARCH= 8)
++# ifdefined(__aarch64__)package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch
Quoted 3 lines
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch new file +3
-0+ return vcvtaq_s32_f32(x); + # else + uint32x4_t sign = vandq_u32(vreinterpretq_u32_f32(x),
vdupq_n_u32(0x80000000));Quoted 6 lines
+--
+2.54.0
+
--2.54.0
Quoted 8 lines
Quoted 4 lines
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot--
Bye, Peter Korsgaard
Best regards,
Julien.
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
Thanks for all the hints! I tried going a bit deeper.
Looking at GCC arm_neon.h (https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/config/arm/arm_neon.h;h=6785dd2578a8ee0fd28b04d30934b764ea5fff3e;hb=HEAD), vcvtaq_s32_f32 is not present, though the arm instrinsics search suggests it is supported for the reference arch combo https://developer.arm.com/architectures/instruction-sets/intrinsics/#f:@navigationhierarchiessimdisa=[Neon]&f:@navigationhierarchiesarchitectures=[A32]&q=vcvtaq_s32_f32.
In a way, the ifdef from opus seems to match arm documentation, though GCC is not making it available.
According to https://gcc.gnu.org/pipermail/gcc-patches/2016-January/439845.html the intrinsics vcvtaq_s32_f32 was added in circa 2016 to arm_neon.h, yet reported as missing in circa 2020 https://gcc.gnu.org/pipermail/gcc-bugs/2020-May/703594.html.
The latter led to the creation of a GCC issue at https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95399 which still sits new.
Interesting enough, rust (I wanted to check some other compiler) seems to match arm docs, though arm instrisics are deemed as experimental https://doc.rust-lang.org/core/arch/arm/fn.vcvtq_s32_f32.html.
Clang as well seems to support vcvtaq_s32_f32 https://godbolt.org/z/xsMfSz (link taken from from gcc bug at https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95399).
So the problem seems to be GCC only.
After all the research, the problem arguably sits in either upstream gcc or opus, but as a matter of fact opus package build through buildroot is currently broken on 32 bit arm neon.
Do you think my proposed patch could apply as a buildroot-only quick fix?
Best regards,
Michele
Il Dom, 14 Giu 2026, alle ore 18:58, Julien Olivain via buildroot ha scritto:
Quoted 89 lines
Hi Peter, All,
Quoted 5 lines · Peter Korsgaard
Quoted 4 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Michele" == Michele Comignano <[email protected]> writes:
From: Comick <[email protected]>
Upstream issues is waiting for feedback.Quoted 7 lines
Quoted 2 lines
See here for details:
https://gitlab.xiph.org/xiph/opus/-/work_items/2397Hmm, indeed - There is no
vcvtaq_s32_f32intrinsic ingcc/config/arm/arm_neon.hbut there is ingcc/config/aarch64/arm_neon.hbut I do not understand the finer details - Julien?Armv8-A Aarch32 is in fact a superset of Armv7-A. This is why there is few 32bit Armv8-A instructions which are not available in original Armv7-A.
See the column "Supported architectures" in the following table:
https://arm-software.github.io/acle/neon_intrinsics/advsimd.html#conversions
vcvtaq_s32_f32is maked "A32/A64", whereas, for examplevcvt_s32_f32is marked "v7/A32/A64".There is also a search engine for intrinsics available at:
https://developer.arm.com/architectures/instruction-sets/intrinsics/Quoted 51 lines
Quoted 3 lines
Signed-off-by Michele Comignano <[email protected]>--- ...use-vcvtaq_s32_f32-on-32-bit-systems.patch | 26+++++++++++++++++++
Quoted 2 lines
1 file changed, 26 insertions(+) create mode 100644
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patchReview
Quoted 1 line
(quoted diff) +0
-0
a/package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patchb/package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patchQuoted 4 lines
new file mode 100644
index 0000000000..ddd572921f
---/dev/null
+++
b/package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patchReview line 1
Quoted 2 lines
(quoted diff) +1
-0@@ -0,0 +1,26 @@ +From 321532001d59367466a6a4a60f5c6f0fe5fa2176 Mon Sep 17 00:00:002001
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch
Quoted 3 lines
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch new file +3
-0+From: Comick <[email protected]> +Date: Sat, 13 Jun 2026 21:48:00 +0200 +Subject: [PATCH] celt/arm don't use vcvtaq_s32_f32 on 32 bitsystems
Quoted 17 lines
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch new file +15
-0+Upstream: N/A https://gitlab.xiph.org/xiph/opus/-/work_items/2397 + +--- + celt/arm/mathops_arm.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/celt/arm/mathops_arm.h b/celt/arm/mathops_arm.h +index b1f9169..c612dae 100644 +--- a/celt/arm/mathops_arm.h ++++ b/celt/arm/mathops_arm.h +@@ -37,7 +37,7 @@ + + static inline int32x4_t vroundf(float32x4_t x) + { +-# if defined(__aarch64__) || (defined(__ARM_ARCH) && __ARM_ARCH= 8)
++# ifdefined(__aarch64__)package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch
Quoted 3 lines
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch new file +3
-0+ return vcvtaq_s32_f32(x); + # else + uint32x4_t sign = vandq_u32(vreinterpretq_u32_f32(x),
vdupq_n_u32(0x80000000));Quoted 6 lines
+--
+2.54.0
+
--2.54.0
Quoted 8 lines
Quoted 4 lines
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot--
Bye, Peter Korsgaard
Quoted 8 lines
Best regards,
Julien.
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
Just noticed that I linked the wrong rust arm intrinsics docs.
The right link is https://doc.rust-lang.org/core/arch/aarch64/fn.vcvtaq_s32_f32.html which matches gcc observations (arm 64 only). As for clang, the example code used another intrinsics, here is one using exactly vcvtaq_s32_f32 https://godbolt.org/z/31f1xnjvz, which also works.
Kind regards,
Michele
Il Lun, 15 Giu 2026, alle ore 11:23, Michele Comignano ha scritto:
Quoted 121 lines
Thanks for all the hints! I tried going a bit deeper.
Looking at GCC
arm_neon.h(https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/config/arm/arm_neon.h;h=6785dd2578a8ee0fd28b04d30934b764ea5fff3e;hb=HEAD),vcvtaq_s32_f32is not present, though the arm instrinsics search suggests it is supported for the reference arch combo https://developer.arm.com/architectures/instruction-sets/intrinsics/#f:@navigationhierarchiessimdisa=[Neon]&f:@navigationhierarchiesarchitectures=[A32]&q=vcvtaq_s32_f32.In a way, the ifdef from opus seems to match arm documentation, though GCC is not making it available.
According to https://gcc.gnu.org/pipermail/gcc-patches/2016-January/439845.html the intrinsics
vcvtaq_s32_f32was added in circa 2016 toarm_neon.h, yet reported as missing in circa 2020 https://gcc.gnu.org/pipermail/gcc-bugs/2020-May/703594.html.
The latter led to the creation of a GCC issue at https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95399 which still sits new.Interesting enough, rust (I wanted to check some other compiler) seems to match arm docs, though arm instrisics are deemed as experimental https://doc.rust-lang.org/core/arch/arm/fn.vcvtq_s32_f32.html.
Clang as well seems to supportvcvtaq_s32_f32https://godbolt.org/z/xsMfSz (link taken from from gcc bug at https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95399).So the problem seems to be GCC only.
After all the research, the problem arguably sits in either upstream gcc or opus, but as a matter of fact opus package build through buildroot is currently broken on 32 bit arm neon.
Do you think my proposed patch could apply as a buildroot-only quick fix?
Best regards,
MicheleIl Dom, 14 Giu 2026, alle ore 18:58, Julien Olivain via buildroot ha scritto:
Quoted 89 lines
Hi Peter, All,
Quoted 5 lines · Peter Korsgaard
Quoted 4 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Michele" == Michele Comignano <[email protected]> writes:
From: Comick <[email protected]>
Upstream issues is waiting for feedback.Quoted 7 lines
Quoted 2 lines
See here for details:
https://gitlab.xiph.org/xiph/opus/-/work_items/2397Hmm, indeed - There is no
vcvtaq_s32_f32intrinsic ingcc/config/arm/arm_neon.hbut there is ingcc/config/aarch64/arm_neon.hbut I do not understand the finer details - Julien?Armv8-A Aarch32 is in fact a superset of Armv7-A. This is why there is few 32bit Armv8-A instructions which are not available in original Armv7-A.
See the column "Supported architectures" in the following table:
https://arm-software.github.io/acle/neon_intrinsics/advsimd.html#conversions
vcvtaq_s32_f32is maked "A32/A64", whereas, for examplevcvt_s32_f32is marked "v7/A32/A64".There is also a search engine for intrinsics available at:
https://developer.arm.com/architectures/instruction-sets/intrinsics/Quoted 51 lines
Quoted 3 lines
Signed-off-by Michele Comignano <[email protected]>--- ...use-vcvtaq_s32_f32-on-32-bit-systems.patch | 26+++++++++++++++++++
Quoted 2 lines
1 file changed, 26 insertions(+) create mode 100644
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patchReview
Quoted 1 line
(quoted diff) +0
-0
a/package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patchb/package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patchQuoted 4 lines
new file mode 100644
index 0000000000..ddd572921f
---/dev/null
+++
b/package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patchReview line 1
Quoted 2 lines
(quoted diff) +1
-0@@ -0,0 +1,26 @@ +From 321532001d59367466a6a4a60f5c6f0fe5fa2176 Mon Sep 17 00:00:002001
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch
Quoted 3 lines
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch new file +3
-0+From: Comick <[email protected]> +Date: Sat, 13 Jun 2026 21:48:00 +0200 +Subject: [PATCH] celt/arm don't use vcvtaq_s32_f32 on 32 bitsystems
Quoted 17 lines
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch new file +15
-0+Upstream: N/A https://gitlab.xiph.org/xiph/opus/-/work_items/2397 + +--- + celt/arm/mathops_arm.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/celt/arm/mathops_arm.h b/celt/arm/mathops_arm.h +index b1f9169..c612dae 100644 +--- a/celt/arm/mathops_arm.h ++++ b/celt/arm/mathops_arm.h +@@ -37,7 +37,7 @@ + + static inline int32x4_t vroundf(float32x4_t x) + { +-# if defined(__aarch64__) || (defined(__ARM_ARCH) && __ARM_ARCH= 8)
++# ifdefined(__aarch64__)package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch
Quoted 3 lines
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch new file +3
-0+ return vcvtaq_s32_f32(x); + # else + uint32x4_t sign = vandq_u32(vreinterpretq_u32_f32(x),
vdupq_n_u32(0x80000000));Quoted 6 lines
+--
+2.54.0
+
--2.54.0
Quoted 8 lines
Quoted 4 lines
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot--
Bye, Peter KorsgaardQuoted 8 lines
Best regards,
Julien.
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
Quoted 5 lines
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
Hi Michele,
Quoted 15 lines · Michele Comignano
Just noticed that I linked the wrong rust arm intrinsics docs. The right link is
https://doc.rust-lang.org/core/arch/aarch64/fn.vcvtaq_s32_f32.html
which matches gcc observations (arm 64 only).
As for clang, the example code used another intrinsics, here is one using exactlyvcvtaq_s32_f32https://godbolt.org/z/31f1xnjvz, which also works.Kind regards,
MicheleIl Lun, 15 Giu 2026, alle ore 11:23, Michele Comignano ha scritto:
Quoted 2 lines
Thanks for all the hints! I tried going a bit deeper.
Quoted 37 lines
Quoted 2 lines
Looking at GCC
arm_neon.hQuoted 3 lines
vcvtaq_s32_f32is not present, though the arm instrinsics search suggests it is supported for the reference arch comboQuoted 30 lines
[1].
In a way, the ifdef from opus seems to match arm documentation, though GCC is not making it available.
According to
https://gcc.gnu.org/pipermail/gcc-patches/2016-January/439845.html
the intrinsicsvcvtaq_s32_f32was added in circa 2016 toarm_neon.h, yet reported as missing in circa 2020
https://gcc.gnu.org/pipermail/gcc-bugs/2020-May/703594.html.
The latter led to the creation of a GCC issue at
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95399 which still sits new.Interesting enough, rust (I wanted to check some other compiler) seems to match arm docs, though arm instrisics are deemed as experimental
https://doc.rust-lang.org/core/arch/arm/fn.vcvtq_s32_f32.html.
Clang as well seems to supportvcvtaq_s32_f32
https://godbolt.org/z/xsMfSz (link taken from from gcc bug at
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95399).So the problem seems to be GCC only.
After all the research, the problem arguably sits in either upstream gcc or opus, but as a matter of fact opus package build through buildroot is currently broken on 32 bit arm neon.
Do you think my proposed patch could apply as a buildroot-only quick fix?
From Arm documentation, Armv8-A Aarch32 does support vcvtaq_s32_f32. Gcc apparently does not support it in 32-bit, but clang does.
Since it seems it is just the gcc support which is missing, maybe your patch could changed for upstream as:
/*
* 32bit Arm gcc does not support vcvtaq_s32_f32()
* See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71233
*/
#if defined(__aarch64__) || (defined(__ARM_ARCH) && (__ARM_ARCH >= 8) && defined(__clang__))
...
It does not really change anything in Buildroot, since there is only Gcc. But for opus upstream, it will still allow other users to keep using this on Armv8-A Aarch32.
Also, we try to avoid carrying Buildroot-specific package patches, so it's better the fix is accepted upstream (your initial proposal, or a revised one).
Quoted 134 lines
Quoted 33 lines
Best regards,
MicheleIl Dom, 14 Giu 2026, alle ore 18:58, Julien Olivain via buildroot ha scritto:
Quoted 26 lines
Hi Peter, All,
Quoted 1 line · Peter Korsgaard
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Michele" == Michele Comignano <[email protected]>
Quoted 10 lines · writes:
Quoted 6 lines
From: Comick <[email protected]>
Upstream issues is waiting for feedback.See here for details:
https://gitlab.xiph.org/xiph/opus/-/work_items/2397Hmm, indeed - There is no
vcvtaq_s32_f32intrinsic ingcc/config/arm/arm_neon.hbut there is in
gcc/config/aarch64/arm_neon.hQuoted 1 line
but I do not understand the finer details - Julien?
Armv8-A Aarch32 is in fact a superset of Armv7-A. This is why there
is few 32bit Armv8-A instructions which are not available in original
Armv7-A.See the column "Supported architectures" in the following table:
https://arm-software.github.io/acle/neon_intrinsics/advsimd.html#conversions
Quoted 17 lines
Quoted 6 lines
vcvtaq_s32_f32is maked "A32/A64", whereas, for examplevcvt_s32_f32is marked "v7/A32/A64".There is also a search engine for intrinsics available at:
https://developer.arm.com/architectures/instruction-sets/intrinsics/
Quoted 9 lines
Quoted 8 lines
Quoted 4 lines
Signed-off-by Michele Comignano <[email protected]>---
...use-vcvtaq_s32_f32-on-32-bit-systems.patch | 26+++++++++++++++++++
Quoted 2 lines
1 file changed, 26 insertions(+)create mode 100644
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patchQuoted 5 lines
Quoted 4 lines
Quoted 3 lines
Quoted 2 lines
diff --git
a/package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patchQuoted 4 lines
Quoted 3 lines
Quoted 2 lines
b/package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patchQuoted 7 lines
Quoted 6 lines
Quoted 5 lines
Quoted 4 lines
new file mode 100644
index 0000000000..ddd572921f
---/dev/null
+++
b/package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patchQuoted 56 lines
Quoted 48 lines
Quoted 2 lines
Review line 1
Quoted 2 lines
(quoted diff) +1
-0@@ -0,0 +1,26 @@ +From 321532001d59367466a6a4a60f5c6f0fe5fa2176 Mon Sep 1700:00:00
Quoted 7 lines
2001
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch
Quoted 3 lines
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch new file +3
-0+From: Comick <[email protected]> +Date: Sat, 13 Jun 2026 21:48:00 +0200 +Subject: [PATCH] celt/arm don't use vcvtaq_s32_f32 on 32 bitsystems
Quoted 1 line
(quoted diff) +1
-0+Upstream: N/Ahttps://gitlab.xiph.org/xiph/opus/-/work_items/2397
Quoted 6 lines
Quoted 6 lines
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch new file +6
-0+ +--- + celt/arm/mathops_arm.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/celt/arm/mathops_arm.h b/celt/arm/mathops_arm.hQuoted 8 lines
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch
Quoted 8 lines
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch new file +8
-0+index b1f9169..c612dae 100644 +--- a/celt/arm/mathops_arm.h ++++ b/celt/arm/mathops_arm.h +@@ -37,7 +37,7 @@ + + static inline int32x4_t vroundf(float32x4_t x) + { +-# if defined(__aarch64__) || (defined(__ARM_ARCH) &&
__ARM_ARCHQuoted 13 lines
package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch
Quoted 5 lines
= 8)
++# ifdefined(__aarch64__)package/opus/0001-celt-arm-don-t-use-vcvtaq_s32_f32-on-32-bit-systems.patch new file +3
-0+ return vcvtaq_s32_f32(x); + # else + uint32x4_t sign = vandq_u32(vreinterpretq_u32_f32(x),
vdupq_n_u32(0x80000000));Quoted 6 lines
+--
+2.54.0
+
--2.54.0
Quoted 8 lines
Quoted 4 lines
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot--
Bye, Peter KorsgaardQuoted 7 lines
Best regards,
Julien.
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildrootQuoted 4 lines
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
Quoted 3 lines
Best regards,
Julien.
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot