Skip to content

Commit 9d27688

Browse files
authored
Create 0001-avcodec-x86-mathops-clip-constants.patch (#33)
ADD: Create patch file `scripts/patch/ffmpeg/0001-avcodec-x86-mathops-clip-constants.patch` Created a temporary file based patch for FFmpeg This will be removed after version advancement/upgrade to more recent version of FFmpeg: ADD: Commands to `03_build_raisr_ffmpeg.sh` to reflect the added patch file. Co-authored by: @djie1 Signed-off-by: Miłosz Linkiewicz <milosz.linkiewicz@intel.com>
1 parent 381a2e4 commit 9d27688

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed

scripts/03_build_raisr_ffmpeg.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ pushd "${raisr_path}"
3131
sudo -E ./build.sh
3232
popd
3333

34+
# TO-DO: Remove patch apply from bellow lines:
35+
# Apply a temporary patch - this will be removed after version of FFmpeg gets updated
36+
patch -p1 -i "${REPOSITORY_DIR}/scripts/patch/ffmpeg/0001-avcodec-x86-mathops-clip-constants.patch"
37+
3438
# build ffmpeg
3539
pushd "${raisr_path}/../ffmpeg"
3640
cp "${raisr_path}/ffmpeg/vf_raisr.c" libavfilter/
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
From effadce6c756247ea8bae32dc13bb3e6f464f0eb Mon Sep 17 00:00:00 2001
2+
From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= <remi@remlab.net>
3+
Date: Sun, 16 Jul 2023 18:18:02 +0300
4+
Subject: [PATCH] avcodec/x86/mathops: clip constants used with shift
5+
instructions within inline assembly
6+
7+
Fixes assembling with binutil as >= 2.41
8+
9+
Signed-off-by: James Almer <jamrial@gmail.com>
10+
---
11+
libavcodec/x86/mathops.h | 26 +++++++++++++++++++++++---
12+
1 file changed, 23 insertions(+), 3 deletions(-)
13+
14+
diff --git a/libavcodec/x86/mathops.h b/libavcodec/x86/mathops.h
15+
index 6298f5ed19..ca7e2dffc1 100644
16+
--- a/libavcodec/x86/mathops.h
17+
+++ b/libavcodec/x86/mathops.h
18+
@@ -35,12 +35,20 @@
19+
static av_always_inline av_const int MULL(int a, int b, unsigned shift)
20+
{
21+
int rt, dummy;
22+
+ if (__builtin_constant_p(shift))
23+
__asm__ (
24+
"imull %3 \n\t"
25+
"shrdl %4, %%edx, %%eax \n\t"
26+
:"=a"(rt), "=d"(dummy)
27+
- :"a"(a), "rm"(b), "ci"((uint8_t)shift)
28+
+ :"a"(a), "rm"(b), "i"(shift & 0x1F)
29+
);
30+
+ else
31+
+ __asm__ (
32+
+ "imull %3 \n\t"
33+
+ "shrdl %4, %%edx, %%eax \n\t"
34+
+ :"=a"(rt), "=d"(dummy)
35+
+ :"a"(a), "rm"(b), "c"((uint8_t)shift)
36+
+ );
37+
return rt;
38+
}
39+
40+
@@ -113,19 +121,31 @@ __asm__ volatile(\
41+
// avoid +32 for shift optimization (gcc should do that ...)
42+
#define NEG_SSR32 NEG_SSR32
43+
static inline int32_t NEG_SSR32( int32_t a, int8_t s){
44+
+ if (__builtin_constant_p(s))
45+
__asm__ ("sarl %1, %0\n\t"
46+
: "+r" (a)
47+
- : "ic" ((uint8_t)(-s))
48+
+ : "i" (-s & 0x1F)
49+
);
50+
+ else
51+
+ __asm__ ("sarl %1, %0\n\t"
52+
+ : "+r" (a)
53+
+ : "c" ((uint8_t)(-s))
54+
+ );
55+
return a;
56+
}
57+
58+
#define NEG_USR32 NEG_USR32
59+
static inline uint32_t NEG_USR32(uint32_t a, int8_t s){
60+
+ if (__builtin_constant_p(s))
61+
__asm__ ("shrl %1, %0\n\t"
62+
: "+r" (a)
63+
- : "ic" ((uint8_t)(-s))
64+
+ : "i" (-s & 0x1F)
65+
);
66+
+ else
67+
+ __asm__ ("shrl %1, %0\n\t"
68+
+ : "+r" (a)
69+
+ : "c" ((uint8_t)(-s))
70+
+ );
71+
return a;
72+
}
73+
74+
--
75+
2.34.1

0 commit comments

Comments
 (0)