File binutils-2.41-bugfix.patch of Package firefox-esr52-gtk2

--- mozilla/media/ffvpx/libavcodec/x86/mathops.h.orig	2023-10-01 21:10:59.251186528 -0500
+++ mozilla/media/ffvpx/libavcodec/x86/mathops.h	2023-10-01 21:19:01.461799082 -0500
@@ -35,11 +35,19 @@
 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,18 +121,30 @@
 // 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;
 }
openSUSE Build Service is sponsored by