From patchwork Sat Oct 1 12:32:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?R=C3=A9mi_Denis-Courmont?= X-Patchwork-Id: 38491 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1c:b0:96:9ee8:5cfd with SMTP id c28csp252032pzh; Sat, 1 Oct 2022 05:32:57 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7QijZTVu/8X8eFv8m4cnh5MLliZLxup407bZEePhA4sqyz56QkbFDveGH1ti+RnGl+1n6L X-Received: by 2002:a05:6402:2547:b0:450:668c:9d93 with SMTP id l7-20020a056402254700b00450668c9d93mr11587845edb.92.1664627577545; Sat, 01 Oct 2022 05:32:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1664627577; cv=none; d=google.com; s=arc-20160816; b=zeKB9BcqDat0E3QTWW2wQ3YoFIqspsXs/cWdND8CXDKSbox8fv/ccaY0S2SdubFW/K cqflY5/oss1rMgGd8rtggxHQQPizxN8viUvXfOtU8XBY0de23c1qDfMiL4oJaCtkrJXb kWTYMawcXGXSy8zqwn9WSPkR8hp/AfIXiVboHE8mzN85bdrzrG7qmagwDpr7BcmPwQsO mGfAMuiHLdJeXvjjLvU5WjRv1e1/G6/X6dJE3aOzgEyZ1UOu2PgrQK04wN/2a+X6hUYI JEGGy7ZnE1N2TrRb9Yi8zlTejcrhRr2vPpUZ0dn7Vl4JwSFZEhxKp8lDrG9iKkrU5Fvu KJXw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=kLgCzVBfZnUxWlxhSm98tK52GusKXppuMnlehYCg42M=; b=JACIYnFv23ChdXgiMHsftwJGg+jDcdXAfercibmcnZeqwS6j2cgtrif+r6+3+H20X8 r3CUSSj/79V+dRicolllvYEzwvw9LsOQsz4q2Q9WomCVFNx8LaMmiOvA9MxEiVpGyvkP /mru33NUJskGEpar+MuYFaqA9W3y+Ksae5xiNeXnpIsw+cYhHTtSGTterDEhsiPHRSSq rgzZ3oqkPzsIyqsJAKChl4cufU47FfEunixhU8oXS5bCBolMD1LX3wn7ojUCCJR5BD/L Izq/ssHqnQB00EQ5mkWkHuEtSGNFZm4dzsnIBtOrUiPB1dYzdRqWZRuweVqOynvzjhgJ SLsg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id y64-20020a50bb46000000b00457faa99762si4004055ede.485.2022.10.01.05.32.57; Sat, 01 Oct 2022 05:32:57 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 18F2F68BB2B; Sat, 1 Oct 2022 15:32:48 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from ursule.remlab.net (vps-a2bccee9.vps.ovh.net [51.75.19.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8592168B919 for ; Sat, 1 Oct 2022 15:32:40 +0300 (EEST) Received: from basile.remlab.net (localhost [IPv6:::1]) by ursule.remlab.net (Postfix) with ESMTP id F234FC0003 for ; Sat, 1 Oct 2022 15:32:39 +0300 (EEST) From: remi@remlab.net To: ffmpeg-devel@ffmpeg.org Date: Sat, 1 Oct 2022 15:32:37 +0300 Message-Id: <20221001123239.33042-1-remi@remlab.net> X-Mailer: git-send-email 2.37.2 In-Reply-To: <5606030.DvuYhMxLoT@basile.remlab.net> References: <5606030.DvuYhMxLoT@basile.remlab.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/3] lavc/opusdsp: RISC-V V postfilter X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: AIrDsKhFyDTJ From: Rémi Denis-Courmont This is optimised for a vector size of 128-bit. Or maybe it would be more accurate to state that this is not properly optimised for larger vector sizes, as they would work just fine with a smaller vector group multiplier. --- libavcodec/opusdsp.c | 2 ++ libavcodec/opusdsp.h | 1 + libavcodec/riscv/Makefile | 2 ++ libavcodec/riscv/opusdsp_init.c | 38 ++++++++++++++++++++++++ libavcodec/riscv/opusdsp_rvv.S | 51 +++++++++++++++++++++++++++++++++ 5 files changed, 94 insertions(+) create mode 100644 libavcodec/riscv/opusdsp_init.c create mode 100644 libavcodec/riscv/opusdsp_rvv.S diff --git a/libavcodec/opusdsp.c b/libavcodec/opusdsp.c index badcfcc884..0764d712e4 100644 --- a/libavcodec/opusdsp.c +++ b/libavcodec/opusdsp.c @@ -58,6 +58,8 @@ av_cold void ff_opus_dsp_init(OpusDSP *ctx) #if ARCH_AARCH64 ff_opus_dsp_init_aarch64(ctx); +#elif ARCH_RISCV + ff_opus_dsp_init_riscv(ctx); #elif ARCH_X86 ff_opus_dsp_init_x86(ctx); #endif diff --git a/libavcodec/opusdsp.h b/libavcodec/opusdsp.h index 3ea3d14bf0..c2a301e832 100644 --- a/libavcodec/opusdsp.h +++ b/libavcodec/opusdsp.h @@ -30,5 +30,6 @@ void ff_opus_dsp_init(OpusDSP *ctx); void ff_opus_dsp_init_x86(OpusDSP *ctx); void ff_opus_dsp_init_aarch64(OpusDSP *ctx); +void ff_opus_dsp_init_riscv(OpusDSP *ctx); #endif /* AVCODEC_OPUSDSP_H */ diff --git a/libavcodec/riscv/Makefile b/libavcodec/riscv/Makefile index 0fb2c81c75..1edfa76ea5 100644 --- a/libavcodec/riscv/Makefile +++ b/libavcodec/riscv/Makefile @@ -7,6 +7,8 @@ OBJS-$(CONFIG_FMTCONVERT) += riscv/fmtconvert_init.o RVV-OBJS-$(CONFIG_FMTCONVERT) += riscv/fmtconvert_rvv.o OBJS-$(CONFIG_IDCTDSP) += riscv/idctdsp_init.o RVV-OBJS-$(CONFIG_IDCTDSP) += riscv/idctdsp_rvv.o +OBJS-$(CONFIG_OPUS_DECODER) += riscv/opusdsp_init.o +RVV-OBJS-$(CONFIG_OPUS_DECODER) += riscv/opusdsp_rvv.o OBJS-$(CONFIG_PIXBLOCKDSP) += riscv/pixblockdsp_init.o \ riscv/pixblockdsp_rvi.o RVV-OBJS-$(CONFIG_PIXBLOCKDSP) += riscv/pixblockdsp_rvv.o diff --git a/libavcodec/riscv/opusdsp_init.c b/libavcodec/riscv/opusdsp_init.c new file mode 100644 index 0000000000..18d3892329 --- /dev/null +++ b/libavcodec/riscv/opusdsp_init.c @@ -0,0 +1,38 @@ +/* + * Copyright © 2022 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/attributes.h" +#include "libavutil/cpu.h" +#include "libavutil/riscv/cpu.h" +#include "libavcodec/opusdsp.h" + +void ff_opus_postfilter_rvv(float *data, int period, float *gains, int len); + +av_cold void ff_opus_dsp_init_riscv(OpusDSP *d) +{ +#if HAVE_RVV + int flags = av_get_cpu_flags(); + + if ((flags & AV_CPU_FLAG_RVV_I32) && ff_get_rv_vlenb() >= 16) + d->postfilter = ff_opus_postfilter_rvv; +#endif +} diff --git a/libavcodec/riscv/opusdsp_rvv.S b/libavcodec/riscv/opusdsp_rvv.S new file mode 100644 index 0000000000..f42a9c36c5 --- /dev/null +++ b/libavcodec/riscv/opusdsp_rvv.S @@ -0,0 +1,51 @@ +/* + * Copyright © 2022 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_opus_postfilter_rvv, zve32f + addi a1, a1, 2 + slli a1, a1, 2 + sh2add a3, a3, a0 + sub t0, a0, a1 + vsetivli zero, 3, e32, m2, ta, ma + vle32.v v24, (a2) + lw t1, 4(a2) + vsetivli zero, 5, e32, m2, ta, ma + vslide1up.vx v8, v24, t1 + lw t2, 8(a2) + vle32.v v16, (t0) + vslide1up.vx v24, v8, t2 +2: + lw t1, (a0) + vfmul.vv v8, v24, v16 + addi a0, a0, 4 + vmv.s.x v0, t1 + lw t2, 20(t0) + vfredusum.vs v0, v8, v0 + addi t0, t0, 4 + vslide1down.vx v16, v16, t2 + vmv.x.s t1, v0 + sw t1, -4(a0) + bne a0, a3, 2b + + ret +endfunc From patchwork Sat Oct 1 12:32:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?R=C3=A9mi_Denis-Courmont?= X-Patchwork-Id: 38490 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1c:b0:96:9ee8:5cfd with SMTP id c28csp251986pzh; Sat, 1 Oct 2022 05:32:50 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7mV3HzgvLxJWCyR9IZscsYBEbm97Qskbnyu04PUtriZCdSUJS92sVIWqDYxv143i/yfGcn X-Received: by 2002:a17:906:847b:b0:773:db0f:d533 with SMTP id hx27-20020a170906847b00b00773db0fd533mr9597798ejc.0.1664627570063; Sat, 01 Oct 2022 05:32:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1664627570; cv=none; d=google.com; s=arc-20160816; b=Ubc9nNwbojOVhKQuRPjoA2k86I7lpNw7y7irXA0+eTL3lH8yivF5CwWwYpHX99d9fk P9iNdp6KEj8lldDiu1W70BkAAgzHNWxkoFIPtNJp51guFq6gaxbickT2HhBYPgKMA64U tj9HK4ECqzYWqjEzRydPHHsP10K6/1/jo567EFN0rtGtEmXh4sp8XuF00vUU09cp2GYX Q6QOIyZVd9t83xPrX4WSexZ+4sxVjbfV6KqeYV+qh/636MntzqY2pfIIheLQRuVZJ1BR CwC5CxSyD+RrcgrZe4QaziIfTgpZokvOaE3JCGwP/5WQyNBHV5NvJ0gs223tRHfpnl+e c+qQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=M2jI2A/Dq3519FGQOEH2TJQ/sNn9MURPubyxDw8d3Jg=; b=KdEmRGf/nNQ8U+3x9YLYiUXlPvFLh1ZDN3bDx6MpCB1pl1XaoTKW1PvH/cNYPt0xQk AyKWeSgyd0n104C86CdqsisySNnRUwgfeyJ+gpOQ4EYQGkLKLrxfnUNgjseAi6dMM4A/ EbK//6sHAovYBROizB+oIqNbvraarcV6n+5FupjabsUpKCiKQod+I3lUFbX4UgQg87P2 PqnR9AyWaPgVIcwN4tmjL1UjiOXnhzm7lIwG2slScxLUeY6VOddkps0I7LPBgDDw7fGv Il1A6y/PIvVNERwpD+MTDyH6LIR2BIKqgFoKt1F1mgcLWMoW8t1rosS3npbkkK/WW1Hz CPYg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id nb40-20020a1709071ca800b0074b26b6bbbcsi4035378ejc.419.2022.10.01.05.32.49; Sat, 01 Oct 2022 05:32:50 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1463368BAD5; Sat, 1 Oct 2022 15:32:47 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from ursule.remlab.net (vps-a2bccee9.vps.ovh.net [51.75.19.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 85B5568BAFA for ; Sat, 1 Oct 2022 15:32:40 +0300 (EEST) Received: from basile.remlab.net (localhost [IPv6:::1]) by ursule.remlab.net (Postfix) with ESMTP id 314B3C0029 for ; Sat, 1 Oct 2022 15:32:40 +0300 (EEST) From: remi@remlab.net To: ffmpeg-devel@ffmpeg.org Date: Sat, 1 Oct 2022 15:32:38 +0300 Message-Id: <20221001123239.33042-2-remi@remlab.net> X-Mailer: git-send-email 2.37.2 In-Reply-To: <5606030.DvuYhMxLoT@basile.remlab.net> References: <5606030.DvuYhMxLoT@basile.remlab.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/3] lavu/riscv: helper macro for VTYPE encoding X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: W3YMsUdRKtGh From: Rémi Denis-Courmont On most cases, the vector type (VTYPE) for the RISC-V Vector extension is supplied as an immediate value, with either of the VSETVLI or VSETIVLI instructions. There is however a third instruction VSETVL which takes the vector type from a general purpose register. That is so the type can be selected at run-time. This introduces a macro to load a (valid) vector type into a register. The syntax follows that of VSETVLI and VSETIVLI, with element size, group multiplier, then tail and mask policies. --- libavutil/riscv/asm.S | 75 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/libavutil/riscv/asm.S b/libavutil/riscv/asm.S index de5e1ad0a6..f8c9f6749b 100644 --- a/libavutil/riscv/asm.S +++ b/libavutil/riscv/asm.S @@ -94,3 +94,78 @@ shnadd 3, \rd, \rs1, \rs2 .endm #endif + + /* Convenience macro to load a Vector type (vtype) as immediate */ + .macro lvtypei rd, e, m=m1, tp=tu, mp=mu + + .ifc \e,e8 + .equ ei, 0 + .else + .ifc \e,e16 + .equ ei, 8 + .else + .ifc \e,e32 + .equ ei, 16 + .else + .ifc \e,e64 + .equ ei, 24 + .else + .error "Unknown element type" + .endif + .endif + .endif + .endif + + .ifc \m,m1 + .equ mi, 0 + .else + .ifc \m,m2 + .equ mi, 1 + .else + .ifc \m,m4 + .equ mi, 2 + .else + .ifc \m,m8 + .equ mi, 3 + .else + .ifc \m,mf8 + .equ mi, 5 + .else + .ifc \m,mf4 + .equ mi, 6 + .else + .ifc \m,mf2 + .equ mi, 7 + .else + .error "Unknown multiplier" + .equ mi, 3 + .endif + .endif + .endif + .endif + .endif + .endif + .endif + + .ifc \tp,tu + .equ tpi, 0 + .else + .ifc \tp,ta + .equ tpi, 64 + .else + .error "Unknown tail policy" + .endif + .endif + + .ifc \mp,mu + .equ mpi, 0 + .else + .ifc \mp,ma + .equ mpi, 128 + .else + .error "Unknown mask policy" + .endif + .endif + + li \rd, (ei | mi | tpi | mpi) + .endm From patchwork Sat Oct 1 12:32:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?R=C3=A9mi_Denis-Courmont?= X-Patchwork-Id: 38492 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1c:b0:96:9ee8:5cfd with SMTP id c28csp252118pzh; Sat, 1 Oct 2022 05:33:06 -0700 (PDT) X-Google-Smtp-Source: AMsMyM75/DgxHd+ufHo3R88gwqbjXjwib18byCigrfsMM6k//Hg7elJMRacYbOvLPD0kTOdzjjf9 X-Received: by 2002:a05:6402:5249:b0:451:67ff:f02 with SMTP id t9-20020a056402524900b0045167ff0f02mr11748034edd.227.1664627586568; Sat, 01 Oct 2022 05:33:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1664627586; cv=none; d=google.com; s=arc-20160816; b=HjHQirHs8Y6zHjvsQzwdKU+2Sk2WsQtzYTxygcwvb5BSiDCfr3PSs6HqdKcVSkn0Hz +OoN4NpLFVdP8ZlUHkiz76S/bfgv6WlJoVXA9rjPGgDK3MTg3a1HsBkCLUhkQKNVu9AL oRRQ179LpA9vDInXrgZmJR5b8t6iIGYD6UOyxvIP7mCQtd0OCZnPKVr9SXa4WX4cIa9K BKIV1ZHDz5yY5YGQVN6ciP0NZxYTtz3PgdmKxUfmU2abzZLMU0cya+kFZEWgD2N8FiOR v7Ym+Y3jmo0iTKMWvPHrwLxAlaHk9257cdkPywbI0GLdnSiPpj6rtvxnooIYMHL+gCKF 5LTg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=HnxAtNZfQJGpDHUHi37b1tqOOQ+3KbwS3IetMO85GH0=; b=jWXQAn0Yxm/oOZ42K34vrfadtBAlwW8AO+OTMgO29fnkt6KCx91mkZRYbpa8MF1UAt GE5y5oEuD0sVbXC+JfME/RjZPbOqEQANaWRZ8aPUA9LRSWTRAcJlZmdsEajdC6rj09Nf 9JOUfFB5prXFqs2FEwZ453J65dzmlxUdvsyo5rCeZVgCoqcHqU/rFwTWXUHraHIl5zuX 033HuDOR9HkUOlJXIkaeS/W0mNxVkBInWbMYOM4nFQO+CutZFvJTapjetjdaEI0tyf/z 0xiUZ1h/4vvnROvqn5kuHC7gwBLmWm4Rk3QnZUQvVnc5JC1DcRbY/gB5wwowQ+ERSDoc kNVw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id e5-20020a170906844500b0077b2ad71224si3765065ejy.136.2022.10.01.05.33.06; Sat, 01 Oct 2022 05:33:06 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 15A0368BB36; Sat, 1 Oct 2022 15:32:49 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from ursule.remlab.net (vps-a2bccee9.vps.ovh.net [51.75.19.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9765E68BB06 for ; Sat, 1 Oct 2022 15:32:40 +0300 (EEST) Received: from basile.remlab.net (localhost [IPv6:::1]) by ursule.remlab.net (Postfix) with ESMTP id 643DDC00AF for ; Sat, 1 Oct 2022 15:32:40 +0300 (EEST) From: remi@remlab.net To: ffmpeg-devel@ffmpeg.org Date: Sat, 1 Oct 2022 15:32:39 +0300 Message-Id: <20221001123239.33042-3-remi@remlab.net> X-Mailer: git-send-email 2.37.2 In-Reply-To: <5606030.DvuYhMxLoT@basile.remlab.net> References: <5606030.DvuYhMxLoT@basile.remlab.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/3] lavc/opusdsp: RISC-V V (256-bit vectors) postfilter X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: X8956edpS25P From: Rémi Denis-Courmont This adds a variant of the postfilter for use with 256-bit vectors (or larger). Since the function requires 160-bit logical vectors, we can cut the group multiplier down to just one. The different vector type is passed via register. Unfortunately, there is no VSETIVL instruction, so the constant vector size (5) also needs to be passed via a register. --- libavcodec/riscv/opusdsp_init.c | 17 ++++++++++++++--- libavcodec/riscv/opusdsp_rvv.S | 10 +++++++++- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/libavcodec/riscv/opusdsp_init.c b/libavcodec/riscv/opusdsp_init.c index 18d3892329..433b71e710 100644 --- a/libavcodec/riscv/opusdsp_init.c +++ b/libavcodec/riscv/opusdsp_init.c @@ -25,14 +25,25 @@ #include "libavutil/riscv/cpu.h" #include "libavcodec/opusdsp.h" -void ff_opus_postfilter_rvv(float *data, int period, float *gains, int len); +void ff_opus_postfilter_rvv_32(float *data, int period, float *gains, int len); +void ff_opus_postfilter_rvv_16(float *data, int period, float *gains, int len); av_cold void ff_opus_dsp_init_riscv(OpusDSP *d) { #if HAVE_RVV int flags = av_get_cpu_flags(); - if ((flags & AV_CPU_FLAG_RVV_I32) && ff_get_rv_vlenb() >= 16) - d->postfilter = ff_opus_postfilter_rvv; + if (flags & AV_CPU_FLAG_RVV_I32) + switch (ff_get_rv_vlenb()) { + default: + d->postfilter = ff_opus_postfilter_rvv_32; + break; + case 16: + d->postfilter = ff_opus_postfilter_rvv_16; + break; + case 8: + case 4: + break; + } #endif } diff --git a/libavcodec/riscv/opusdsp_rvv.S b/libavcodec/riscv/opusdsp_rvv.S index f42a9c36c5..cfe332227e 100644 --- a/libavcodec/riscv/opusdsp_rvv.S +++ b/libavcodec/riscv/opusdsp_rvv.S @@ -21,7 +21,15 @@ #include "config.h" #include "libavutil/riscv/asm.S" -func ff_opus_postfilter_rvv, zve32f +func ff_opus_postfilter_rvv_16, zve32f + lvtypei a5, e32, m2, ta, ma + j 1f +endfunc + +func ff_opus_postfilter_rvv_32, zve32f + lvtypei a5, e32, m1, ta, ma +1: + li a4, 5 addi a1, a1, 2 slli a1, a1, 2 sh2add a3, a3, a0