From patchwork Tue Nov 14 21:14:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?R=C3=A9mi_Denis-Courmont?= X-Patchwork-Id: 44667 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:92a5:b0:181:818d:5e7f with SMTP id q37csp2273862pzg; Tue, 14 Nov 2023 13:14:55 -0800 (PST) X-Google-Smtp-Source: AGHT+IGshiBw9bp354+19iJuyczPNbTasqnfHZF3GRN+HBv6kz/+uY6BtjLbVE3+XGg/9bLEE7HP X-Received: by 2002:aa7:df84:0:b0:53f:f47f:3d5 with SMTP id b4-20020aa7df84000000b0053ff47f03d5mr7736146edy.32.1699996495315; Tue, 14 Nov 2023 13:14:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699996495; cv=none; d=google.com; s=arc-20160816; b=y6wScJ8AmWIg6C4HFYSzT4dc31e3GDf/tVN67m+3aEAzKUUghiyz7b3NQmhQKSmWFO y1TJIfHBU8qalrME6udWrlGi7CJuSMDJq+V8E4S2lLYLoUTzBBzgwWs41H4x7htoSdGd g7c9nLqY6OzuNMe7LEV8aqTsJ9ti+8kVAqZXQjCUnDw2HAC8GUZtpv7ZQUco2KaO0oat FSDrpm5WFwEUjwN6sFWeyZUdj411u+cnbEEY51Or7l7e9w/L2CMM9R4ZfDyfmJFlcgL4 V34hUzlzFypvixNYhYGSPl8/tAFzjgs6uZTTJb4kOUVQxWgaYhuZFLFklHtjgsXDoUGe yuWw== 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:message-id:date:to:from :delivered-to; bh=rk2fKt/c1H5i4IvimeVU8bXKJnfgYgdEzq6GK3BsJJc=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=gtIw0QCHFsfCcMmyNPq/c9zYCPM5Qqz6x5IqWeOgFUsO1YPXcWMLgzg+/j22vKknCX 2OH4t2OX5UrwjFYn4uV+AJ48B4DuNDD0W/sjtKWcrbNMUojeHbYOSxDkUFdj4272ffnQ 8EUy74rKj7uLwPbQKIm6KF9DeYtuRZgXD/9Xdlid9woon0WhkyPQJssrZwwoYkgSWYNO 0n/HVZcqIoxe/xzU70hhm1howQBVJVJx2b73ihdd0/NDRGU7KnJPpmofPiiVq906Q3lA +Hh6UZHoHgrYtQX0VKq7VSYpnRk1nql6k5HnBk5PzXfFvk4h3BSFtTcIf3UFWWMS6y9+ 2sCQ== 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 s21-20020a056402521500b0054369630f01si4560046edd.349.2023.11.14.13.14.54; Tue, 14 Nov 2023 13:14:55 -0800 (PST) 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 95DF068CD68; Tue, 14 Nov 2023 23:14:51 +0200 (EET) 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 4E07068CC5A for ; Tue, 14 Nov 2023 23:14:45 +0200 (EET) Received: from basile.remlab.net (localhost [IPv6:::1]) by ursule.remlab.net (Postfix) with ESMTP id 072EAC00A2 for ; Tue, 14 Nov 2023 23:14:43 +0200 (EET) From: =?utf-8?q?R=C3=A9mi_Denis-Courmont?= To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 Nov 2023 23:14:43 +0200 Message-ID: <20231114211443.13831-1-remi@remlab.net> X-Mailer: git-send-email 2.42.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] lavc/flacdsp: R-V V decorrelate_indep 16-bit packed 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: oe0t5Y5tSlls flac_decorrelate_indep2_16_c: 981.7 flac_decorrelate_indep2_16_rvv_i32: 199.2 flac_decorrelate_indep4_16_c: 1749.7 flac_decorrelate_indep4_16_rvv_i32: 401.2 flac_decorrelate_indep6_16_c: 2517.7 flac_decorrelate_indep6_16_rvv_i32: 858.0 flac_decorrelate_indep8_16_c: 3285.7 flac_decorrelate_indep8_16_rvv_i32: 1123.5 --- libavcodec/riscv/flacdsp_init.c | 22 +++++ libavcodec/riscv/flacdsp_rvv.S | 157 ++++++++++++++++++++++++++++++++ 2 files changed, 179 insertions(+) diff --git a/libavcodec/riscv/flacdsp_init.c b/libavcodec/riscv/flacdsp_init.c index 5bfaad7ca8..d44a92cd35 100644 --- a/libavcodec/riscv/flacdsp_init.c +++ b/libavcodec/riscv/flacdsp_init.c @@ -24,6 +24,14 @@ #include "libavutil/cpu.h" #include "libavcodec/flacdsp.h" +void ff_flac_decorrelate_indep2_16_rvv(uint8_t **out, int32_t **in, + int channels, int len, int shift); +void ff_flac_decorrelate_indep4_16_rvv(uint8_t **out, int32_t **in, + int channels, int len, int shift); +void ff_flac_decorrelate_indep6_16_rvv(uint8_t **out, int32_t **in, + int channels, int len, int shift); +void ff_flac_decorrelate_indep8_16_rvv(uint8_t **out, int32_t **in, + int channels, int len, int shift); void ff_flac_decorrelate_ls_16_rvv(uint8_t **out, int32_t **in, int channels, int len, int shift); void ff_flac_decorrelate_rs_16_rvv(uint8_t **out, int32_t **in, @@ -54,6 +62,20 @@ av_cold void ff_flacdsp_init_riscv(FLACDSPContext *c, enum AVSampleFormat fmt, if ((flags & AV_CPU_FLAG_RVV_I32) && (flags & AV_CPU_FLAG_RVB_ADDR)) { switch (fmt) { case AV_SAMPLE_FMT_S16: + switch (channels) { + case 2: + c->decorrelate[0] = ff_flac_decorrelate_indep2_16_rvv; + break; + case 4: + c->decorrelate[0] = ff_flac_decorrelate_indep4_16_rvv; + break; + case 6: + c->decorrelate[0] = ff_flac_decorrelate_indep6_16_rvv; + break; + case 8: + c->decorrelate[0] = ff_flac_decorrelate_indep8_16_rvv; + break; + } c->decorrelate[1] = ff_flac_decorrelate_ls_16_rvv; c->decorrelate[2] = ff_flac_decorrelate_rs_16_rvv; c->decorrelate[3] = ff_flac_decorrelate_ms_16_rvv; diff --git a/libavcodec/riscv/flacdsp_rvv.S b/libavcodec/riscv/flacdsp_rvv.S index 5a0607e044..12b456f7da 100644 --- a/libavcodec/riscv/flacdsp_rvv.S +++ b/libavcodec/riscv/flacdsp_rvv.S @@ -21,6 +21,163 @@ #include "libavutil/riscv/asm.S" #if (__riscv_xlen == 64) +func ff_flac_decorrelate_indep2_16_rvv, zve32x + ld a0, (a0) + ld a2, 8(a1) + ld a1, (a1) +1: + vsetvli t0, a3, e32, m8, ta, ma + vle32.v v0, (a1) + sub a3, a3, t0 + vle32.v v8, (a2) + sh2add a1, t0, a1 + vsll.vx v0, v0, a4 + sh2add a2, t0, a2 + vsll.vx v8, v8, a4 + vsetvli zero, zero, e16, m4, ta, ma + vncvt.x.x.w v16, v0 + vncvt.x.x.w v20, v8 + vsseg2e16.v v16, (a0) + sh2add a0, t0, a0 + bnez a3, 1b + + ret +endfunc + +func ff_flac_decorrelate_indep4_16_rvv, zve32x + ld a0, (a0) + ld a2, 8(a1) + ld t1, 16(a1) + ld t2, 24(a1) + ld a1, (a1) +1: + vsetvli t0, a3, e32, m4, ta, ma + vle32.v v0, (a1) + sub a3, a3, t0 + vle32.v v4, (a2) + sh2add a1, t0, a1 + vsll.vx v0, v0, a4 + sh2add a2, t0, a2 + vle32.v v8, (t1) + sh2add t1, t0, t1 + vsll.vx v4, v4, a4 + vle32.v v12, (t2) + sh2add t2, t0, t2 + vsll.vx v8, v8, a4 + vsll.vx v12, v12, a4 + vsetvli zero, zero, e16, m2, ta, ma + vncvt.x.x.w v16, v0 + vncvt.x.x.w v18, v4 + vncvt.x.x.w v20, v8 + vncvt.x.x.w v22, v12 + vsseg4e16.v v16, (a0) + sh3add a0, t0, a0 + bnez a3, 1b + + ret +endfunc + +func ff_flac_decorrelate_indep6_16_rvv, zve32x + ld a0, (a0) + ld a2, 8(a1) + ld t1, 16(a1) + ld t2, 24(a1) + ld t3, 32(a1) + ld t4, 40(a1) + ld a1, (a1) +1: + vsetvli t0, a3, e32, m2, ta, ma + vle32.v v0, (a1) + sub a3, a3, t0 + vle32.v v2, (a2) + sh2add a1, t0, a1 + vsll.vx v0, v0, a4 + sh2add a2, t0, a2 + vle32.v v4, (t1) + sh2add t1, t0, t1 + vsll.vx v2, v2, a4 + vle32.v v6, (t2) + sh2add t2, t0, t2 + vsll.vx v4, v4, a4 + vle32.v v8, (t3) + sh2add t3, t0, t3 + vsll.vx v6, v6, a4 + vle32.v v10, (t4) + sh2add t4, t0, t4 + vsll.vx v8, v8, a4 + slli t0, t0, 2 + vsll.vx v10, v10, a4 + sh1add t0, t0, t0 // t0 *= 3 + vsetvli zero, zero, e16, m1, ta, ma + vncvt.x.x.w v16, v0 + vncvt.x.x.w v17, v2 + vncvt.x.x.w v18, v4 + vncvt.x.x.w v19, v6 + vncvt.x.x.w v20, v8 + vncvt.x.x.w v21, v10 + vsseg6e16.v v16, (a0) + add a0, t0, a0 + bnez a3, 1b + + ret +endfunc + +func ff_flac_decorrelate_indep8_16_rvv, zve32x + ld a0, (a0) + ld a2, 8(a1) + ld t1, 16(a1) + ld t2, 24(a1) + ld t3, 32(a1) + ld t4, 40(a1) + ld t5, 48(a1) + ld t6, 56(a1) + ld a1, (a1) +1: + vsetvli t0, a3, e32, m2, ta, ma + vle32.v v0, (a1) + sub a3, a3, t0 + vle32.v v2, (a2) + sh2add a1, t0, a1 + vsll.vx v0, v0, a4 + vle32.v v4, (t1) + sh2add a2, t0, a2 + vsll.vx v2, v2, a4 + sh2add t1, t0, t1 + vle32.v v6, (t2) + vsll.vx v4, v4, a4 + sh2add t2, t0, t2 + vle32.v v8, (t3) + sh2add t3, t0, t3 + vsll.vx v6, v6, a4 + vle32.v v10, (t4) + sh2add t4, t0, t4 + vsll.vx v8, v8, a4 + vle32.v v12, (t5) + sh2add t5, t0, t5 + vsll.vx v10, v10, a4 + vle32.v v14, (t6) + sh2add t6, t0, t6 + vsll.vx v12, v12, a4 + slli t0, t0, 4 + vsll.vx v14, v14, a4 + vsetvli zero, zero, e16, m1, ta, ma + vncvt.x.x.w v16, v0 + vncvt.x.x.w v17, v2 + vncvt.x.x.w v18, v4 + vncvt.x.x.w v19, v6 + vncvt.x.x.w v20, v8 + vncvt.x.x.w v21, v10 + vncvt.x.x.w v22, v12 + vncvt.x.x.w v23, v14 + vsseg8e16.v v16, (a0) + add a0, t0, a0 + bnez a3, 1b + + ret +endfunc + + + func ff_flac_decorrelate_ls_16_rvv, zve32x ld a0, (a0) ld a2, 8(a1)