mbox

[FFmpeg-devel,PATCHv5,00/31] RISC-V CPU extensions

Message ID 5861881.lOV4Wx5bFT@basile.remlab.net
State New
Headers show

Pull-request

https://git.remlab.net/git/ffmpeg.git rv-cpu

Message

Rémi Denis-Courmont Sept. 25, 2022, 2:25 p.m. UTC
Hello,

Changes since version version 5:
- Use shifted-add instructions where applicable (pointer arithmetic) to
   minimise scalar operations to the absolute minimum.
- Add AAC PS DSP stereo interpolation [0].

The following changes since commit 7cd252ee41ddc693fa140c5b5eb472b6d6f27f9e:

  avcodec/parser: Remove declaration of inexistent function (2022-09-24 20:25:19 +0200)

are available in the Git repository at:

  https://git.remlab.net/git/ffmpeg.git rv-cpu

for you to fetch changes up to 2f7afca1e160b3bb1bc761ac3eb5e08a0852120b:

  lavc/aacpsdsp: RISC-V V stereo_interpolate[0] (2022-09-25 17:19:09 +0300)

----------------------------------------------------------------
Rémi Denis-Courmont (31):
      lavu/cpu: detect RISC-V base extensions
      lavu/riscv: initial common header for assembler macros
      lavc/audiodsp: RISC-V F vector_clipf
      lavc/pixblockdsp: RISC-V I get_pixels
      lavu/cpu: CPU flags for the RISC-V Vector extension
      configure: probe RISC-V Vector extension
      lavu/riscv: fallback macros for SH{1,2,3}ADD
      lavu/floatdsp: RISC-V V vector_fmul_scalar
      lavu/floatdsp: RISC-V V vector_dmul_scalar
      lavu/floatdsp: RISC-V V vector_fmul
      lavu/floatdsp: RISC-V V vector_dmul
      lavu/floatdsp: RISC-V V vector_fmac_scalar
      lavu/floatdsp: RISC-V V vector_dmac_scalar
      lavu/floatdsp: RISC-V V vector_fmul_add
      lavu/floatdsp: RISC-V V butterflies_float
      lavu/floatdsp: RISC-V V vector_fmul_reverse
      lavu/floatdsp: RISC-V V vector_fmul_window
      lavu/floatdsp: RISC-V V scalarproduct_float
      lavu/fixeddsp: RISC-V V butterflies_fixed
      lavc/audiodsp: RISC-V V vector_clip_int32
      lavc/audiodsp: RISC-V V vector_clipf
      lavc/audiodsp: RISC-V V scalarproduct_int16
      lavc/fmtconvert: RISC-V V int32_to_float_fmul_scalar
      lavc/fmtconvert: RISC-V V int32_to_float_fmul_array8
      lavc/vorbisdsp: RISC-V V inverse_coupling
      lavc/aacpsdsp: RISC-V V add_squares
      lavc/aacpsdsp: RISC-V V mul_pair_single
      lavc/aacpsdsp: RISC-V V hybrid_analysis
      lavc/aacpsdsp: RISC-V V hybrid_analysis_ileave
      lavc/aacpsdsp: RISC-V V hybrid_synthesis_deint
      lavc/aacpsdsp: RISC-V V stereo_interpolate[0]

 Makefile                            |   2 +-
 configure                           |  15 ++
 ffbuild/arch.mak                    |   2 +
 libavcodec/aacpsdsp.h               |   1 +
 libavcodec/aacpsdsp_template.c      |   2 +
 libavcodec/audiodsp.c               |   2 +
 libavcodec/audiodsp.h               |   1 +
 libavcodec/fmtconvert.c             |   2 +
 libavcodec/fmtconvert.h             |   1 +
 libavcodec/pixblockdsp.c            |   2 +
 libavcodec/pixblockdsp.h            |   2 +
 libavcodec/riscv/Makefile           |  11 ++
 libavcodec/riscv/aacpsdsp_init.c    |  57 +++++++
 libavcodec/riscv/aacpsdsp_rvv.S     | 286 ++++++++++++++++++++++++++++++++++++
 libavcodec/riscv/audiodsp_init.c    |  49 ++++++
 libavcodec/riscv/audiodsp_rvf.S     |  49 ++++++
 libavcodec/riscv/audiodsp_rvv.S     |  72 +++++++++
 libavcodec/riscv/fmtconvert_init.c  |  44 ++++++
 libavcodec/riscv/fmtconvert_rvv.S   |  67 +++++++++
 libavcodec/riscv/pixblockdsp_init.c |  45 ++++++
 libavcodec/riscv/pixblockdsp_rvi.S  |  59 ++++++++
 libavcodec/riscv/vorbisdsp_init.c   |  37 +++++
 libavcodec/riscv/vorbisdsp_rvv.S    |  44 ++++++
 libavcodec/vorbisdsp.c              |   2 +
 libavcodec/vorbisdsp.h              |   1 +
 libavutil/cpu.c                     |  13 ++
 libavutil/cpu.h                     |   9 ++
 libavutil/cpu_internal.h            |   3 +
 libavutil/fixed_dsp.c               |   4 +-
 libavutil/fixed_dsp.h               |   1 +
 libavutil/float_dsp.c               |   2 +
 libavutil/float_dsp.h               |   1 +
 libavutil/riscv/Makefile            |   5 +
 libavutil/riscv/asm.S               |  96 ++++++++++++
 libavutil/riscv/cpu.c               | 110 ++++++++++++++
 libavutil/riscv/fixed_dsp_init.c    |  38 +++++
 libavutil/riscv/fixed_dsp_rvv.S     |  40 +++++
 libavutil/riscv/float_dsp_init.c    |  72 +++++++++
 libavutil/riscv/float_dsp_rvv.S     | 238 ++++++++++++++++++++++++++++++
 tests/checkasm/checkasm.c           |   8 +
 40 files changed, 1493 insertions(+), 2 deletions(-)
 create mode 100644 libavcodec/riscv/Makefile
 create mode 100644 libavcodec/riscv/aacpsdsp_init.c
 create mode 100644 libavcodec/riscv/aacpsdsp_rvv.S
 create mode 100644 libavcodec/riscv/audiodsp_init.c
 create mode 100644 libavcodec/riscv/audiodsp_rvf.S
 create mode 100644 libavcodec/riscv/audiodsp_rvv.S
 create mode 100644 libavcodec/riscv/fmtconvert_init.c
 create mode 100644 libavcodec/riscv/fmtconvert_rvv.S
 create mode 100644 libavcodec/riscv/pixblockdsp_init.c
 create mode 100644 libavcodec/riscv/pixblockdsp_rvi.S
 create mode 100644 libavcodec/riscv/vorbisdsp_init.c
 create mode 100644 libavcodec/riscv/vorbisdsp_rvv.S
 create mode 100644 libavutil/riscv/Makefile
 create mode 100644 libavutil/riscv/asm.S
 create mode 100644 libavutil/riscv/cpu.c
 create mode 100644 libavutil/riscv/fixed_dsp_init.c
 create mode 100644 libavutil/riscv/fixed_dsp_rvv.S
 create mode 100644 libavutil/riscv/float_dsp_init.c
 create mode 100644 libavutil/riscv/float_dsp_rvv.S

Comments

Lynne Sept. 26, 2022, 7:05 a.m. UTC | #1
Sep 25, 2022, 16:25 by remi@remlab.net:

> Hello,
>
> Changes since version version 5:
> - Use shifted-add instructions where applicable (pointer arithmetic) to
>  minimise scalar operations to the absolute minimum.
> - Add AAC PS DSP stereo interpolation [0].
>
> The following changes since commit 7cd252ee41ddc693fa140c5b5eb472b6d6f27f9e:
>
>  avcodec/parser: Remove declaration of inexistent function (2022-09-24 20:25:19 +0200)
>
> are available in the Git repository at:
>
>  https://git.remlab.net/git/ffmpeg.git rv-cpu
>
> for you to fetch changes up to 2f7afca1e160b3bb1bc761ac3eb5e08a0852120b:
>
>  lavc/aacpsdsp: RISC-V V stereo_interpolate[0] (2022-09-25 17:19:09 +0300)
>

Took a look at the patchset, apart from those 2 minor nits,
it looks good to me. I can fix the branching before pushing
if you think it'd be okay. As for the name, if they really have
no alternative names, I'd be fine with RV_Zve64x... hunter2.
Rémi Denis-Courmont Sept. 26, 2022, 12:01 p.m. UTC | #2
Le 26 septembre 2022 10:05:23 GMT+03:00, Lynne <dev@lynne.ee> a écrit :
>Sep 25, 2022, 16:25 by remi@remlab.net:
>
>> Hello,
>>
>> Changes since version version 5:
>> - Use shifted-add instructions where applicable (pointer arithmetic) to
>>  minimise scalar operations to the absolute minimum.
>> - Add AAC PS DSP stereo interpolation [0].
>>
>> The following changes since commit 7cd252ee41ddc693fa140c5b5eb472b6d6f27f9e:
>>
>>  avcodec/parser: Remove declaration of inexistent function (2022-09-24 20:25:19 +0200)
>>
>> are available in the Git repository at:
>>
>>  https://git.remlab.net/git/ffmpeg.git rv-cpu
>>
>> for you to fetch changes up to 2f7afca1e160b3bb1bc761ac3eb5e08a0852120b:
>>
>>  lavc/aacpsdsp: RISC-V V stereo_interpolate[0] (2022-09-25 17:19:09 +0300)
>>
>
>Took a look at the patchset, apart from those 2 minor nits,
>it looks good to me. I can fix the branching before pushing
>if you think it'd be okay. As for the name, if they really have
>no alternative names, I'd be fine with RV_Zve64x... hunter2.

If we lift the nested CPU flags test up, then we can drop the whole forced flags thing, and moot the NULL logger argument.

Anyway, I think I can improve the AAC PS stereo interleave code, so I'll send another patchset version soonish.