From patchwork Tue Sep 26 09:24:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: flow gg X-Patchwork-Id: 43914 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp1765878pzh; Tue, 26 Sep 2023 02:25:21 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHZuoShZ1wDbxgnMDAT/vwHZaYuTkjMWoX4XFnX1ZjAdJrDpWSxZ9FifvVd/no5Yx2lAZ3I X-Received: by 2002:a50:ed8e:0:b0:52b:db31:3c5c with SMTP id h14-20020a50ed8e000000b0052bdb313c5cmr8446650edr.0.1695720321049; Tue, 26 Sep 2023 02:25:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695720321; cv=none; d=google.com; s=arc-20160816; b=HbXH9ccaD2UYqa6K60Nzb5uB1srJA29eBbMkB8axmhkI2sxvBkjMGWahvzlkVBxxEd EiOuh9P4+JVuGRB2yM5WKdogng7iFuzGFc4Pk3Siafbx5DeevHZ5l6Yv/Xfn1Gmc77NO ztJ0bGGuAxPHibTw7/ztWSG79l5ykOdApAq12mSpkxKHGDDlMqbdQn45Xx3mcdD9zC3w G1VLcI78IbE40JWPvgBNvoUyWmndQTWF0jrmybHRjOSeyUPfwS257XMg2FXZXWX8VEif swEyoOLmX1P3nvDqxjWdxowzUtIPsTj7SNoAhpGsSu/duSrZmPMeyvA9OJsPs99Hqyd5 2qZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:to :message-id:date:from:mime-version:dkim-signature:delivered-to; bh=1Nn9qrgWR7b0UcvOKAr7gv5gIYcd+lEjotLI25L10HQ=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=HSWXk68aDO1xcocpgWJAu8c0ejzt3jcYniXJ7n1E5RfeTxK/AhWA3HJKout4qNeumZ tE8BHLb4fxldmtfm01Hm6eC8Qajd2KDihlBs5LZwkgH9c912tivFWdnRrXRDFHvx509m 8KIYPsWTStCGxujKB5Ze2w4MjimJHD5yxZ4f1bniu4J5iem+PjTVhfGBIm8nEvII0zOi yzQE4KM0g+nYADN/IgmcxG+AFxrbVvbbjMqQ056rBuzdZR+GptSO75Eu6QQncwXfwaQw i9Kib+vui13dub8NuodaAKzhMl5FGl7GtSFLfPpaMyRBo49Hsc9PNoR8DQGXd9xxsOZ+ FhUA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=kuBBpVqF; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id u24-20020aa7d0d8000000b005311f90bacfsi11034210edo.510.2023.09.26.02.25.20; Tue, 26 Sep 2023 02:25:21 -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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=kuBBpVqF; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AA00C68CA07; Tue, 26 Sep 2023 12:25:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f41.google.com (mail-qv1-f41.google.com [209.85.219.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E21D568C9B2 for ; Tue, 26 Sep 2023 12:25:10 +0300 (EEST) Received: by mail-qv1-f41.google.com with SMTP id 6a1803df08f44-65b051a28b3so26391616d6.2 for ; Tue, 26 Sep 2023 02:25:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695720309; x=1696325109; darn=ffmpeg.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=UQxaGnk2JiuTAmbGt/u0R/BYiC4TQufnkIxQv7CNaFc=; b=kuBBpVqFogT0FrozrW5y/PP9ZBV0IrwlGLDZ5uLaltN/FQW49OXJOoGIExWIQkHH5w hSfsb4POJ9FyCXVV9Y/VTXpnuP6Bu3L/fbsJ9PfXRskg3cIeO8hrAa1aDCSJ4IY7dkGH KxegpwApSySxyROZMViITggMMMh81TEDO9MxmfRE5G9j/0i4ovA2YZpWkTeM4KYhhgh9 dQI9XjXvslAIQRZCGjKglagIFGkkJxXuaAmFmUjY+FgkStv9CBBdLoLbgS3LJILJp4s2 4/HznzSeErKFOIy3T17bVAaB0c8cZjmeEL97RRkq+B1d335w2Ck3lCIvssZ5eQ8O6d7d SHKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695720309; x=1696325109; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=UQxaGnk2JiuTAmbGt/u0R/BYiC4TQufnkIxQv7CNaFc=; b=FGtEG1sNwEyoLBUPz/E9kaKLAM0dwYEYspbAbImHafA1yv08hPB1MGc1NUgqCIEy58 a3lR8sXEQKgmtsKG/CMWYJ3BQRQb7KT9kedAaLWwQX6FQvRzQIgvmJH9foFRSvEh+CMu DaSkOO1Zhg6hYe20kQbLWns/xo8EgozcRqw2RJmhgU1HGNo2DDyspl1m8vbiYJ4b7Jf4 yZ1gH7sXFN2pBZ0NJFaarGOoR7BzV2MOvTTReXCefeWgHM4fbIMwJ+KjBHS7z23y8U+C GYnEzkszm5tiZdokZbJmUX/LSynrzmjgtOwMiTbzMsRbMFqZ5ZwSAKzl6W4aO0m34uc0 epSQ== X-Gm-Message-State: AOJu0YzXrQsUwA1i4k4QN8sd3fvGKMMhcaw1udX7hNwgBlfrKvsiTeh9 efwFeZVQViCRI+c5tY8dD1k25MGogRY5tIGNpckxQy15iWM= X-Received: by 2002:a05:6214:1407:b0:659:3aaf:e24e with SMTP id pr7-20020a056214140700b006593aafe24emr8976855qvb.8.1695720309262; Tue, 26 Sep 2023 02:25:09 -0700 (PDT) MIME-Version: 1.0 From: flow gg Date: Tue, 26 Sep 2023 17:24:58 +0800 Message-ID: To: ffmpeg-devel@ffmpeg.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH] af_afir: RISC-V V fcmul_add 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: 1OCxLZgrBLpA benchmark: fcmul_add_c: 19.7 fcmul_add_rvv_f32: 6.7 From 6bef2523728a472bb803ce085a1aafdfd624e212 Mon Sep 17 00:00:00 2001 From: h Date: Tue, 26 Sep 2023 15:03:12 +0800 Subject: [PATCH] af_afir: RISC-V V fcmul_add fcmul_add_c: 19.7 fcmul_add_rvv_f32: 6.7 --- libavfilter/af_afirdsp.h | 3 ++ libavfilter/riscv/Makefile | 2 + libavfilter/riscv/af_afir_init.c | 39 +++++++++++++++++++ libavfilter/riscv/af_afir_rvv.S | 65 ++++++++++++++++++++++++++++++++ 4 files changed, 109 insertions(+) create mode 100644 libavfilter/riscv/Makefile create mode 100644 libavfilter/riscv/af_afir_init.c create mode 100644 libavfilter/riscv/af_afir_rvv.S diff --git a/libavfilter/af_afirdsp.h b/libavfilter/af_afirdsp.h index 4208501393..d2d1e909c1 100644 --- a/libavfilter/af_afirdsp.h +++ b/libavfilter/af_afirdsp.h @@ -34,6 +34,7 @@ typedef struct AudioFIRDSPContext { } AudioFIRDSPContext; void ff_afir_init_x86(AudioFIRDSPContext *s); +void ff_afir_init_riscv(AudioFIRDSPContext *s); static void fcmul_add_c(float *sum, const float *t, const float *c, ptrdiff_t len) { @@ -76,6 +77,8 @@ static av_unused void ff_afir_init(AudioFIRDSPContext *dsp) #if ARCH_X86 ff_afir_init_x86(dsp); +#elif ARCH_RISCV + ff_afir_init_riscv(dsp); #endif } diff --git a/libavfilter/riscv/Makefile b/libavfilter/riscv/Makefile new file mode 100644 index 0000000000..0b968a9c0d --- /dev/null +++ b/libavfilter/riscv/Makefile @@ -0,0 +1,2 @@ +OBJS += riscv/af_afir_init.o +RVV-OBJS += riscv/af_afir_rvv.o diff --git a/libavfilter/riscv/af_afir_init.c b/libavfilter/riscv/af_afir_init.c new file mode 100644 index 0000000000..ffa176abd2 --- /dev/null +++ b/libavfilter/riscv/af_afir_init.c @@ -0,0 +1,39 @@ +/* + * Copyright © 2023 hleft + * + * 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 + +#include "config.h" +#include "libavutil/attributes.h" +#include "libavutil/cpu.h" +#include "libavfilter/af_afirdsp.h" + +void ff_fcmul_add_rvv(float *sum, const float *t, const float *c, + ptrdiff_t len); + +av_cold void ff_afir_init_riscv(AudioFIRDSPContext *s) +{ +#if HAVE_RVV + int flags = av_get_cpu_flags(); + + if (flags & AV_CPU_FLAG_RVV_F32) + s->fcmul_add = ff_fcmul_add_rvv; +#endif +} diff --git a/libavfilter/riscv/af_afir_rvv.S b/libavfilter/riscv/af_afir_rvv.S new file mode 100644 index 0000000000..06c3979575 --- /dev/null +++ b/libavfilter/riscv/af_afir_rvv.S @@ -0,0 +1,65 @@ +/* + * Copyright © 2023 hleft + * + * 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 "libavutil/riscv/asm.S" + +// void ff_fcmul_add(float *sum, const float *t, const float *c, int len) +func ff_fcmul_add_rvv, zve32f +1: + li t1, 4 + vsetvli t0, t1, e32, m1, ta, ma + + li t2, 8 + + vlsseg2e32.v v0, (a1), t2 + vlsseg2e32.v v2, (a2), t2 + vlsseg2e32.v v4, (a0), t2 + + vfmul.vv v6, v0, v2 + vfmul.vv v7, v1, v3 + vfmul.vv v8, v0, v3 + vfmul.vv v9, v1, v2 + + vfadd.vv v4, v4, v6 + vfsub.vv v4, v4, v7 + vfadd.vv v5, v5, v8 + vfadd.vv v5, v5, v9 + + vssseg2e32.v v4, (a0), t2 + + mul t3, t2, t1 + add a0, a0, t3 + add a1, a1, t3 + add a2, a2, t3 + + sub a3, a3, t0 + bgtz a3, 1b + + flw fa0, 0(a1) + flw fa1, 0(a2) + flw fa2, 0(a0) + + fmul.s fa0, fa0, fa1 + fadd.s fa2, fa2, fa0 + + fsw fa2, 0(a0) + + ret +endfunc -- 2.42.0