[PATCH v2] lsws/ppc/yuv2rgb_altivec: Fix build in non-VSX environments with Clang
lsws/ppc/yuv2rgb_altivec: Fix build in non-VSX environments with Clang Add a check for the existence of the vec_xl() function. Clang provides the function even with VSX not enabled. v2: test for function if AltiVec is enabled instead of with AltiVec and without VSX --- configure | 8 ++++++++ libswscale/ppc/yuv2rgb_altivec.c | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/configure b/configure index ff6a5c3600..637034e87d 100755 --- a/configure +++ b/configure @@ -2154,6 +2154,7 @@ ARCH_EXT_LIST_PPC=" ldbrx power8 ppc4xx + vec_xl vsx " @@ -2679,6 +2680,7 @@ altivec_deps="ppc" dcbzl_deps="ppc" ldbrx_deps="ppc" ppc4xx_deps="ppc" +vec_xl_deps="altivec" vsx_deps="altivec" power8_deps="vsx" @@ -6221,6 +6223,11 @@ elif enabled ppc; then check_cpp_condition power8 "altivec.h" "defined(_ARCH_PWR8)" fi + if enabled altivec; then + check_cc vec_xl altivec.h "const unsigned char *y1i = { 0 }; + vector unsigned char y0 = vec_xl(0, y1i);" + fi + elif enabled riscv; then enabled rvv && check_inline_asm rvv '".option arch, +v\nvsetivli zero, 0, e8, m1, ta, ma"' @@ -7731,6 +7738,7 @@ if enabled ppc; then echo "POWER8 enabled ${power8-no}" echo "PPC 4xx optimizations ${ppc4xx-no}" echo "dcbzl available ${dcbzl-no}" + echo "vec_xl available ${vec_xl-no}" fi if enabled loongarch; then echo "LSX enabled ${lsx-no}" diff --git a/libswscale/ppc/yuv2rgb_altivec.c b/libswscale/ppc/yuv2rgb_altivec.c index 5e1033a973..8b0a93796f 100644 --- a/libswscale/ppc/yuv2rgb_altivec.c +++ b/libswscale/ppc/yuv2rgb_altivec.c @@ -284,7 +284,7 @@ static inline void cvtyuvtoRGB(SwsContext *c, vector signed short Y, * ------------------------------------------------------------------------------ */ -#if !HAVE_VSX +#if !HAVE_VEC_XL static inline vector unsigned char vec_xl(signed long long offset, const ubyte *addr) { const vector unsigned char *v_addr = (const vector unsigned char *) (addr + offset); @@ -292,7 +292,7 @@ static inline vector unsigned char vec_xl(signed long long offset, const ubyte * return (vector unsigned char) vec_perm(v_addr[0], v_addr[1], align_perm); } -#endif /* !HAVE_VSX */ +#endif /* !HAVE_VEC_XL */ #define DEFCSP420_CVT(name, out_pixels) \ static int altivec_ ## name(SwsContext *c, const unsigned char **in, \ -- 2.41.0
On Fri, Aug 18, 2023 at 10:14:04PM -0400, Brad Smith wrote:
lsws/ppc/yuv2rgb_altivec: Fix build in non-VSX environments with Clang
Add a check for the existence of the vec_xl() function. Clang provides the function even with VSX not enabled.
v2: test for function if AltiVec is enabled instead of with AltiVec and without VSX --- configure | 8 ++++++++ libswscale/ppc/yuv2rgb_altivec.c | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-)
Has this been tested on an affected platform ? I mean the function is provided but does it also work ? thx [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Observe your enemies, for they first find out your faults. -- Antisthenes
On 2023-08-23 4:52 p.m., Michael Niedermayer wrote:
On Fri, Aug 18, 2023 at 10:14:04PM -0400, Brad Smith wrote:
lsws/ppc/yuv2rgb_altivec: Fix build in non-VSX environments with Clang
Add a check for the existence of the vec_xl() function. Clang provides the function even with VSX not enabled.
v2: test for function if AltiVec is enabled instead of with AltiVec and without VSX --- configure | 8 ++++++++ libswscale/ppc/yuv2rgb_altivec.c | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) Has this been tested on an affected platform ? I mean the function is provided but does it also work ?
This has been in the FreeBSD / OpenBSD ports for years. So to a certain extent yes. Anyway, I didn't have access to my test VM for quite some time but I do now and ran the various tests with FATE and did not see any issues.
Hi Brad, On Wed, Mar 5, 2025 at 2:24 AM Brad Smith <brad-at-comstyle.com@ffmpeg.org> wrote:
On 2023-08-23 4:52 p.m., Michael Niedermayer wrote:
On Fri, Aug 18, 2023 at 10:14:04PM -0400, Brad Smith wrote:
lsws/ppc/yuv2rgb_altivec: Fix build in non-VSX environments with Clang
Add a check for the existence of the vec_xl() function. Clang provides the function even with VSX not enabled.
v2: test for function if AltiVec is enabled instead of with AltiVec and without VSX --- configure | 8 ++++++++ libswscale/ppc/yuv2rgb_altivec.c | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) Has this been tested on an affected platform ? I mean the function is provided but does it also work ?
This has been in the FreeBSD / OpenBSD ports for years. So to a certain extent yes. Anyway, I didn't have access to my test VM for quite some time but I do now and ran the various tests with FATE and did not see any issues.
Build doesn't seem to fail anymore, but that's probably because of the #if 0 from b9eaf6e05c2ca16d94869e0263236dbdac752400. Could you please send a rebased patch? Ramiro
On Wed, Mar 5, 2025 at 4:17 AM Ramiro Polla <ramiro.polla@gmail.com> wrote:
On Wed, Mar 5, 2025 at 2:24 AM Brad Smith <brad-at-comstyle.com@ffmpeg.org> wrote:
On 2023-08-23 4:52 p.m., Michael Niedermayer wrote:
On Fri, Aug 18, 2023 at 10:14:04PM -0400, Brad Smith wrote:
lsws/ppc/yuv2rgb_altivec: Fix build in non-VSX environments with Clang
Add a check for the existence of the vec_xl() function. Clang provides the function even with VSX not enabled.
v2: test for function if AltiVec is enabled instead of with AltiVec and without VSX --- configure | 8 ++++++++ libswscale/ppc/yuv2rgb_altivec.c | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) Has this been tested on an affected platform ? I mean the function is provided but does it also work ?
This has been in the FreeBSD / OpenBSD ports for years. So to a certain extent yes. Anyway, I didn't have access to my test VM for quite some time but I do now and ran the various tests with FATE and did not see any issues.
Build doesn't seem to fail anymore, but that's probably because of the #if 0 from b9eaf6e05c2ca16d94869e0263236dbdac752400.
Could you please send a rebased patch?
I tested on Sean's G5 and this patch fixed the build issue with clang, so I pushed it. The code that uses vec_xl() is still under #if 0 though.
On 2025-03-06 8:28 a.m., Ramiro Polla wrote:
On Wed, Mar 5, 2025 at 4:17 AM Ramiro Polla<ramiro.polla@gmail.com> wrote:
On Wed, Mar 5, 2025 at 2:24 AM Brad Smith <brad-at-comstyle.com@ffmpeg.org> wrote:
On 2023-08-23 4:52 p.m., Michael Niedermayer wrote:
On Fri, Aug 18, 2023 at 10:14:04PM -0400, Brad Smith wrote:
lsws/ppc/yuv2rgb_altivec: Fix build in non-VSX environments with Clang
Add a check for the existence of the vec_xl() function. Clang provides the function even with VSX not enabled.
v2: test for function if AltiVec is enabled instead of with AltiVec and without VSX --- configure | 8 ++++++++ libswscale/ppc/yuv2rgb_altivec.c | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) Has this been tested on an affected platform ? I mean the function is provided but does it also work ? This has been in the FreeBSD / OpenBSD ports for years. So to a certain extent yes. Anyway, I didn't have access to my test VM for quite some time but I do now and ran the various tests with FATE and did not see any issues. Build doesn't seem to fail anymore, but that's probably because of the #if 0 from b9eaf6e05c2ca16d94869e0263236dbdac752400.
Could you please send a rebased patch? I tested on Sean's G5 and this patch fixed the build issue with clang, so I pushed it.
The code that uses vec_xl() is still under #if 0 though.
I have commit access. Also what you had commited was my v1 diff not v2. I will fix it.
participants (3)
-
Brad Smith -
Michael Niedermayer -
Ramiro Polla