~ruther/guix-local

ce21952f81ffe7f7674348437535e30e1fcd662b — Josselin Poiret 2 years ago 2b9c730
gnu: ffmpeg-4: Fix build with binutils ≥ 2.41.

* gnu/packages/patches/ffmpeg-4-binutils-2.41.patch: New patch.
* gnu/local.mk (dist_patch_DATA): Register it.
* gnu/packages/video.scm (ffmpeg-4): Use it.

Change-Id: I07ec3525edb220d85e086e145b9561ea3d084b6c
3 files changed, 79 insertions(+), 1 deletions(-)

M gnu/local.mk
A gnu/packages/patches/ffmpeg-4-binutils-2.41.patch
M gnu/packages/video.scm
M gnu/local.mk => gnu/local.mk +1 -0
@@ 1234,6 1234,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/ffmpeg-jami-pipewiregrab-source-filter.patch	\
  %D%/packages/patches/ffmpeg-jami-remove-mjpeg-log.patch	\
  %D%/packages/patches/ffmpeg-jami-screen-sharing-x11-fix.patch	\
  %D%/packages/patches/ffmpeg-4-binutils-2.41.patch	\
  %D%/packages/patches/fifengine-boost-compat.patch		\
  %D%/packages/patches/fifengine-python-3.9-compat.patch	\
  %D%/packages/patches/fifengine-swig-compat.patch		\

A gnu/packages/patches/ffmpeg-4-binutils-2.41.patch => gnu/packages/patches/ffmpeg-4-binutils-2.41.patch +76 -0
@@ 0,0 1,76 @@
From effadce6c756247ea8bae32dc13bb3e6f464f0eb Mon Sep 17 00:00:00 2001
From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= <remi@remlab.net>
Date: Sun, 16 Jul 2023 18:18:02 +0300
Subject: [PATCH] avcodec/x86/mathops: clip constants used with shift
 instructions within inline assembly

Fixes assembling with binutil as >= 2.41

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavcodec/x86/mathops.h | 26 +++++++++++++++++++++++---
 1 file changed, 23 insertions(+), 3 deletions(-)

diff --git a/libavcodec/x86/mathops.h b/libavcodec/x86/mathops.h
index 6298f5ed19..ca7e2dffc1 100644
--- a/libavcodec/x86/mathops.h
+++ b/libavcodec/x86/mathops.h
@@ -35,12 +35,20 @@
 static av_always_inline av_const int MULL(int a, int b, unsigned shift)
 {
     int rt, dummy;
+    if (__builtin_constant_p(shift))
     __asm__ (
         "imull %3               \n\t"
         "shrdl %4, %%edx, %%eax \n\t"
         :"=a"(rt), "=d"(dummy)
-        :"a"(a), "rm"(b), "ci"((uint8_t)shift)
+        :"a"(a), "rm"(b), "i"(shift & 0x1F)
     );
+    else
+        __asm__ (
+            "imull %3               \n\t"
+            "shrdl %4, %%edx, %%eax \n\t"
+            :"=a"(rt), "=d"(dummy)
+            :"a"(a), "rm"(b), "c"((uint8_t)shift)
+        );
     return rt;
 }
 
@@ -113,19 +121,31 @@ __asm__ volatile(\
 // avoid +32 for shift optimization (gcc should do that ...)
 #define NEG_SSR32 NEG_SSR32
 static inline  int32_t NEG_SSR32( int32_t a, int8_t s){
+    if (__builtin_constant_p(s))
     __asm__ ("sarl %1, %0\n\t"
          : "+r" (a)
-         : "ic" ((uint8_t)(-s))
+         : "i" (-s & 0x1F)
     );
+    else
+        __asm__ ("sarl %1, %0\n\t"
+               : "+r" (a)
+               : "c" ((uint8_t)(-s))
+        );
     return a;
 }
 
 #define NEG_USR32 NEG_USR32
 static inline uint32_t NEG_USR32(uint32_t a, int8_t s){
+    if (__builtin_constant_p(s))
     __asm__ ("shrl %1, %0\n\t"
          : "+r" (a)
-         : "ic" ((uint8_t)(-s))
+         : "i" (-s & 0x1F)
     );
+    else
+        __asm__ ("shrl %1, %0\n\t"
+               : "+r" (a)
+               : "c" ((uint8_t)(-s))
+        );
     return a;
 }
 
-- 
2.25.1


M gnu/packages/video.scm => gnu/packages/video.scm +2 -1
@@ 1892,7 1892,8 @@ audio/video codec library.")
                                 version ".tar.xz"))
             (sha256
              (base32
               "14xadxm1yaamp216nq09xwasxg5g133v86dbb33mdg5di1zrlhdg"))))
               "14xadxm1yaamp216nq09xwasxg5g133v86dbb33mdg5di1zrlhdg"))
             (patches (search-patches "ffmpeg-4-binutils-2.41.patch"))))
    (inputs (modify-inputs (package-inputs ffmpeg)
              (replace "sdl2" sdl2-2.0)))
    (arguments