* [FFmpeg-devel] [PATCH] lavc/ac3: add R-V Zbb extract_exponents
@ 2023-10-02 16:47 Rémi Denis-Courmont
2023-12-03 17:50 ` Zhao Zhili
0 siblings, 1 reply; 6+ messages in thread
From: Rémi Denis-Courmont @ 2023-10-02 16:47 UTC (permalink / raw)
To: ffmpeg-devel
---
libavcodec/ac3dsp.c | 2 ++
libavcodec/ac3dsp.h | 1 +
libavcodec/riscv/Makefile | 2 ++
libavcodec/riscv/ac3dsp_init.c | 38 ++++++++++++++++++++++++++++++++++
libavcodec/riscv/ac3dsp_rvb.S | 38 ++++++++++++++++++++++++++++++++++
5 files changed, 81 insertions(+)
create mode 100644 libavcodec/riscv/ac3dsp_init.c
create mode 100644 libavcodec/riscv/ac3dsp_rvb.S
diff --git a/libavcodec/ac3dsp.c b/libavcodec/ac3dsp.c
index 22cb5f242e..302b786b15 100644
--- a/libavcodec/ac3dsp.c
+++ b/libavcodec/ac3dsp.c
@@ -395,5 +395,7 @@ av_cold void ff_ac3dsp_init(AC3DSPContext *c)
ff_ac3dsp_init_x86(c);
#elif ARCH_MIPS
ff_ac3dsp_init_mips(c);
+#elif ARCH_RISCV
+ ff_ac3dsp_init_riscv(c);
#endif
}
diff --git a/libavcodec/ac3dsp.h b/libavcodec/ac3dsp.h
index 33e51e202e..a01bff3d11 100644
--- a/libavcodec/ac3dsp.h
+++ b/libavcodec/ac3dsp.h
@@ -109,6 +109,7 @@ void ff_ac3dsp_init (AC3DSPContext *c);
void ff_ac3dsp_init_arm(AC3DSPContext *c);
void ff_ac3dsp_init_x86(AC3DSPContext *c);
void ff_ac3dsp_init_mips(AC3DSPContext *c);
+void ff_ac3dsp_init_riscv(AC3DSPContext *c);
void ff_ac3dsp_downmix(AC3DSPContext *c, float **samples, float **matrix,
int out_ch, int in_ch, int len);
diff --git a/libavcodec/riscv/Makefile b/libavcodec/riscv/Makefile
index 77bba7f784..cc9c13e6b6 100644
--- a/libavcodec/riscv/Makefile
+++ b/libavcodec/riscv/Makefile
@@ -1,5 +1,7 @@
OBJS-$(CONFIG_AAC_DECODER) += riscv/aacpsdsp_init.o
RVV-OBJS-$(CONFIG_AAC_DECODER) += riscv/aacpsdsp_rvv.o
+OBJS-$(CONFIG_AC3DSP) += riscv/ac3dsp_init.o \
+ riscv/ac3dsp_rvb.o
OBJS-$(CONFIG_ALAC_DECODER) += riscv/alacdsp_init.o
RVV-OBJS-$(CONFIG_ALAC_DECODER) += riscv/alacdsp_rvv.o
OBJS-$(CONFIG_AUDIODSP) += riscv/audiodsp_init.o \
diff --git a/libavcodec/riscv/ac3dsp_init.c b/libavcodec/riscv/ac3dsp_init.c
new file mode 100644
index 0000000000..20f294f1de
--- /dev/null
+++ b/libavcodec/riscv/ac3dsp_init.c
@@ -0,0 +1,38 @@
+/*
+ * Copyright © 2023 Rémi Denis-Courmont.
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdint.h>
+
+#include "config.h"
+#include "libavutil/attributes.h"
+#include "libavutil/cpu.h"
+#include "libavcodec/ac3dsp.h"
+
+void ff_extract_exponents_rvb(uint8_t *exp, int32_t *coef, int nb_coefs);
+
+av_cold void ff_ac3dsp_init_riscv(AC3DSPContext *c)
+{
+ int flags = av_get_cpu_flags();
+
+ if (flags & AV_CPU_FLAG_RVB_ADDR) {
+ if (flags & AV_CPU_FLAG_RVB_BASIC)
+ c->extract_exponents = ff_extract_exponents_rvb;
+ }
+}
diff --git a/libavcodec/riscv/ac3dsp_rvb.S b/libavcodec/riscv/ac3dsp_rvb.S
new file mode 100644
index 0000000000..48f8bb101e
--- /dev/null
+++ b/libavcodec/riscv/ac3dsp_rvb.S
@@ -0,0 +1,38 @@
+/*
+ * Copyright © 2023 Rémi Denis-Courmont.
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "config.h"
+#include "libavutil/riscv/asm.S"
+
+func ff_extract_exponents_rvb, zbb
+1:
+ lw t0, (a1)
+ addi a0, a0, 1
+ neg t1, t0
+ addi a1, a1, 4
+ max t0, t0, t1
+ addi a2, a2, -1
+ clz t0, t0
+ addi t0, t0, 24 - __riscv_xlen
+ sb t0, -1(a0)
+ bgtz a2, 1b
+
+ ret
+endfunc
--
2.42.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [FFmpeg-devel] [PATCH] lavc/ac3: add R-V Zbb extract_exponents
2023-10-02 16:47 [FFmpeg-devel] [PATCH] lavc/ac3: add R-V Zbb extract_exponents Rémi Denis-Courmont
@ 2023-12-03 17:50 ` Zhao Zhili
2023-12-03 20:11 ` Rémi Denis-Courmont
2023-12-03 20:18 ` Rémi Denis-Courmont
0 siblings, 2 replies; 6+ messages in thread
From: Zhao Zhili @ 2023-12-03 17:50 UTC (permalink / raw)
To: FFmpeg development discussions and patches
> On Oct 3, 2023, at 00:47, Rémi Denis-Courmont <remi@remlab.net> wrote:
>
>
> diff --git a/libavcodec/riscv/ac3dsp_rvb.S b/libavcodec/riscv/ac3dsp_rvb.S
> new file mode 100644
> index 0000000000..48f8bb101e
> --- /dev/null
> +++ b/libavcodec/riscv/ac3dsp_rvb.S
>
> +func ff_extract_exponents_rvb, zbb
> +1:
> + lw t0, (a1)
> + addi a0, a0, 1
> + neg t1, t0
> + addi a1, a1, 4
> + max t0, t0, t1
> + addi a2, a2, -1
> + clz t0, t0
> + addi t0, t0, 24 - __riscv_xlen
> + sb t0, -1(a0)
> + bgtz a2, 1b
> +
> + ret
> +endfunc
> —
Got build failure with clang 14:
<instantiation>:6:21: warning: unknown option, expected 'push', 'pop', 'rvc', 'norvc', 'relax' or 'norelax'
.option arch, +zbb
^
src/libavcodec/riscv/ac3dsp_rvb.S:24:1: note: while in macro instantiation
func ff_extract_exponents_rvb, zbb
^
src/libavcodec/riscv/ac3dsp_rvb.S:30:9: error: instruction requires the following: 'Zbb' (Basic Bit-Manipulation)
max t0, t0, t1
^
src/libavcodec/riscv/ac3dsp_rvb.S:32:9: error: instruction requires the following: 'Zbb' (Basic Bit-Manipulation)
clz t0, t0
^
make: *** [/home/quink/work/ffmpeg/ffbuild/common.mak:93: libavcodec/riscv/ac3dsp_rvb.o] Error 1
make: *** Waiting for unfinished jobs....
<instantiation>:6:21: warning: unknown option, expected 'push', 'pop', 'rvc', 'norvc', 'relax' or 'norelax'
.option arch, +f
^
src/libavcodec/riscv/audiodsp_rvf.S:23:1: note: while in macro instantiation
func ff_vector_clipf_rvf, f
^
Someone says clang 14 has Zbb extensions support. I don’t know what’s going on.
https://discourse.llvm.org/t/how-to-run-clang-llvm-for-riscv-target-machine-for-bitmanip-extension/64662
> 2.42.0
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [FFmpeg-devel] [PATCH] lavc/ac3: add R-V Zbb extract_exponents
2023-12-03 17:50 ` Zhao Zhili
@ 2023-12-03 20:11 ` Rémi Denis-Courmont
2023-12-04 2:34 ` Zhao Zhili
2023-12-03 20:18 ` Rémi Denis-Courmont
1 sibling, 1 reply; 6+ messages in thread
From: Rémi Denis-Courmont @ 2023-12-03 20:11 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Le 3 décembre 2023 19:50:18 GMT+02:00, Zhao Zhili <quinkblack@foxmail.com> a écrit :
>
>
>> On Oct 3, 2023, at 00:47, Rémi Denis-Courmont <remi@remlab.net> wrote:
>>
>>
>> diff --git a/libavcodec/riscv/ac3dsp_rvb.S b/libavcodec/riscv/ac3dsp_rvb.S
>> new file mode 100644
>> index 0000000000..48f8bb101e
>> --- /dev/null
>> +++ b/libavcodec/riscv/ac3dsp_rvb.S
>>
>> +func ff_extract_exponents_rvb, zbb
>> +1:
>> + lw t0, (a1)
>> + addi a0, a0, 1
>> + neg t1, t0
>> + addi a1, a1, 4
>> + max t0, t0, t1
>> + addi a2, a2, -1
>> + clz t0, t0
>> + addi t0, t0, 24 - __riscv_xlen
>> + sb t0, -1(a0)
>> + bgtz a2, 1b
>> +
>> + ret
>> +endfunc
>> —
>
>Got build failure with clang 14:
>
><instantiation>:6:21: warning: unknown option, expected 'push', 'pop', 'rvc', 'norvc', 'relax' or 'norelax'
> .option arch, +zbb
> ^
>src/libavcodec/riscv/ac3dsp_rvb.S:24:1: note: while in macro instantiation
>func ff_extract_exponents_rvb, zbb
>^
>src/libavcodec/riscv/ac3dsp_rvb.S:30:9: error: instruction requires the following: 'Zbb' (Basic Bit-Manipulation)
> max t0, t0, t1
> ^
>src/libavcodec/riscv/ac3dsp_rvb.S:32:9: error: instruction requires the following: 'Zbb' (Basic Bit-Manipulation)
> clz t0, t0
> ^
>make: *** [/home/quink/work/ffmpeg/ffbuild/common.mak:93: libavcodec/riscv/ac3dsp_rvb.o] Error 1
>make: *** Waiting for unfinished jobs....
><instantiation>:6:21: warning: unknown option, expected 'push', 'pop', 'rvc', 'norvc', 'relax' or 'norelax'
> .option arch, +f
> ^
>src/libavcodec/riscv/audiodsp_rvf.S:23:1: note: while in macro instantiation
>func ff_vector_clipf_rvf, f
>^
>
>Someone says clang 14 has Zbb extensions support. I don’t know what’s going on.
It's not practical to support such a broken assembler as LLVM built-in's until they get their act together. You can add tests in FFmpeg configure but that's just going to turn all optimisations off. You could also disable the integrated assembler and use binutils, but then you'll hit the limitation of FFmpeg's configure whereby it tests the inline assembler rather than the outline one.
So really you're better off with GCC. RISC-V support on LLVM is pretty sad, TBH.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [FFmpeg-devel] [PATCH] lavc/ac3: add R-V Zbb extract_exponents
2023-12-03 20:11 ` Rémi Denis-Courmont
@ 2023-12-04 2:34 ` Zhao Zhili
2023-12-11 20:51 ` Rémi Denis-Courmont
0 siblings, 1 reply; 6+ messages in thread
From: Zhao Zhili @ 2023-12-04 2:34 UTC (permalink / raw)
To: FFmpeg development discussions and patches
> On Dec 4, 2023, at 04:11, Rémi Denis-Courmont <remi@remlab.net> wrote:
>
>
>
> Le 3 décembre 2023 19:50:18 GMT+02:00, Zhao Zhili <quinkblack@foxmail.com <mailto:quinkblack@foxmail.com>> a écrit :
>>
>>
>>> On Oct 3, 2023, at 00:47, Rémi Denis-Courmont <remi@remlab.net> wrote:
>>>
>>>
>>> diff --git a/libavcodec/riscv/ac3dsp_rvb.S b/libavcodec/riscv/ac3dsp_rvb.S
>>> new file mode 100644
>>> index 0000000000..48f8bb101e
>>> --- /dev/null
>>> +++ b/libavcodec/riscv/ac3dsp_rvb.S
>>>
>>> +func ff_extract_exponents_rvb, zbb
>>> +1:
>>> + lw t0, (a1)
>>> + addi a0, a0, 1
>>> + neg t1, t0
>>> + addi a1, a1, 4
>>> + max t0, t0, t1
>>> + addi a2, a2, -1
>>> + clz t0, t0
>>> + addi t0, t0, 24 - __riscv_xlen
>>> + sb t0, -1(a0)
>>> + bgtz a2, 1b
>>> +
>>> + ret
>>> +endfunc
>>> —
>>
>> Got build failure with clang 14:
>>
>> <instantiation>:6:21: warning: unknown option, expected 'push', 'pop', 'rvc', 'norvc', 'relax' or 'norelax'
>> .option arch, +zbb
>> ^
>> src/libavcodec/riscv/ac3dsp_rvb.S:24:1: note: while in macro instantiation
>> func ff_extract_exponents_rvb, zbb
>> ^
>> src/libavcodec/riscv/ac3dsp_rvb.S:30:9: error: instruction requires the following: 'Zbb' (Basic Bit-Manipulation)
>> max t0, t0, t1
>> ^
>> src/libavcodec/riscv/ac3dsp_rvb.S:32:9: error: instruction requires the following: 'Zbb' (Basic Bit-Manipulation)
>> clz t0, t0
>> ^
>> make: *** [/home/quink/work/ffmpeg/ffbuild/common.mak:93: libavcodec/riscv/ac3dsp_rvb.o] Error 1
>> make: *** Waiting for unfinished jobs....
>> <instantiation>:6:21: warning: unknown option, expected 'push', 'pop', 'rvc', 'norvc', 'relax' or 'norelax'
>> .option arch, +f
>> ^
>> src/libavcodec/riscv/audiodsp_rvf.S:23:1: note: while in macro instantiation
>> func ff_vector_clipf_rvf, f
>> ^
>>
>> Someone says clang 14 has Zbb extensions support. I don’t know what’s going on.
>
> It's not practical to support such a broken assembler as LLVM built-in's until they get their act together. You can add tests in FFmpeg configure but that's just going to turn all optimisations off. You could also disable the integrated assembler and use binutils, but then you'll hit the limitation of FFmpeg's configure whereby it tests the inline assembler rather than the outline one.
>
> So really you're better off with GCC. RISC-V support on LLVM is pretty sad, TBH.
OK, just check if this is an unknown issue. I’m totally fine to stay with GCC.
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org <mailto:ffmpeg-devel@ffmpeg.org>
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org <mailto:ffmpeg-devel-request@ffmpeg.org> with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [FFmpeg-devel] [PATCH] lavc/ac3: add R-V Zbb extract_exponents
2023-12-04 2:34 ` Zhao Zhili
@ 2023-12-11 20:51 ` Rémi Denis-Courmont
0 siblings, 0 replies; 6+ messages in thread
From: Rémi Denis-Courmont @ 2023-12-11 20:51 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Le maanantaina 4. joulukuuta 2023, 4.34.26 EET Zhao Zhili a écrit :
> > So really you're better off with GCC. RISC-V support on LLVM is pretty
> > sad, TBH.
> OK, just check if this is an unknown issue. I’m totally fine to stay with
> GCC.
Build should be fixed (which means the "offending" files should no longer be
compiled).
--
Rémi Denis-Courmont
http://www.remlab.net/
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [FFmpeg-devel] [PATCH] lavc/ac3: add R-V Zbb extract_exponents
2023-12-03 17:50 ` Zhao Zhili
2023-12-03 20:11 ` Rémi Denis-Courmont
@ 2023-12-03 20:18 ` Rémi Denis-Courmont
1 sibling, 0 replies; 6+ messages in thread
From: Rémi Denis-Courmont @ 2023-12-03 20:18 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Le 3 décembre 2023 19:50:18 GMT+02:00, Zhao Zhili <quinkblack@foxmail.com> a écrit :
>
>
>> On Oct 3, 2023, at 00:47, Rémi Denis-Courmont <remi@remlab.net> wrote:
>>
>>
>> diff --git a/libavcodec/riscv/ac3dsp_rvb.S b/libavcodec/riscv/ac3dsp_rvb.S
>> new file mode 100644
>> index 0000000000..48f8bb101e
>> --- /dev/null
>> +++ b/libavcodec/riscv/ac3dsp_rvb.S
>>
>> +func ff_extract_exponents_rvb, zbb
>> +1:
>> + lw t0, (a1)
>> + addi a0, a0, 1
>> + neg t1, t0
>> + addi a1, a1, 4
>> + max t0, t0, t1
>> + addi a2, a2, -1
>> + clz t0, t0
>> + addi t0, t0, 24 - __riscv_xlen
>> + sb t0, -1(a0)
>> + bgtz a2, 1b
>> +
>> + ret
>> +endfunc
>> —
>
>Got build failure with clang 14:
>
><instantiation>:6:21: warning: unknown option, expected 'push', 'pop', 'rvc', 'norvc', 'relax' or 'norelax'
> .option arch, +zbb
> ^
>src/libavcodec/riscv/ac3dsp_rvb.S:24:1: note: while in macro instantiation
>func ff_extract_exponents_rvb, zbb
>^
>src/libavcodec/riscv/ac3dsp_rvb.S:30:9: error: instruction requires the following: 'Zbb' (Basic Bit-Manipulation)
> max t0, t0, t1
> ^
>src/libavcodec/riscv/ac3dsp_rvb.S:32:9: error: instruction requires the following: 'Zbb' (Basic Bit-Manipulation)
> clz t0, t0
> ^
>make: *** [/home/quink/work/ffmpeg/ffbuild/common.mak:93: libavcodec/riscv/ac3dsp_rvb.o] Error 1
>make: *** Waiting for unfinished jobs....
><instantiation>:6:21: warning: unknown option, expected 'push', 'pop', 'rvc', 'norvc', 'relax' or 'norelax'
> .option arch, +f
> ^
>src/libavcodec/riscv/audiodsp_rvf.S:23:1: note: while in macro instantiation
>func ff_vector_clipf_rvf, f
>^
>
>Someone says clang 14 has Zbb extensions support. I don’t know what’s going on.
Forgot the explanation: the problem seems to be the arch option, not the Zbb extension.
I think you can get around it with -no-integrated-as, but then... what I said in the other mail.
Br,
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-12-11 20:51 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-10-02 16:47 [FFmpeg-devel] [PATCH] lavc/ac3: add R-V Zbb extract_exponents Rémi Denis-Courmont
2023-12-03 17:50 ` Zhao Zhili
2023-12-03 20:11 ` Rémi Denis-Courmont
2023-12-04 2:34 ` Zhao Zhili
2023-12-11 20:51 ` Rémi Denis-Courmont
2023-12-03 20:18 ` Rémi Denis-Courmont
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git