History

lavc/riscv: Move VVC macro to h26x

sunyuechi committed 1 year ago

Commit 92881961 parent 89df9c42 files · +132 −112Browse files

Showing the changes to libavcodec (2 of 2 files). Show all

Unified · Split

2 files
  1. libavcodec/riscv/h26x/asm.S +127 −0
  2. libavcodec/riscv/vvc/vvc_mc_rvv.S +5 −112
libavcodec/riscv/h26x/asm.S+127−0
@@ -0,0 +1,127 @@
1+/*
2+ * Copyright (c) 2024 Institue of Software Chinese Academy of Sciences (ISCAS).
3+ *
4+ * This file is part of FFmpeg.
5+ *
6+ * FFmpeg is free software; you can redistribute it and/or
7+ * modify it under the terms of the GNU Lesser General Public
8+ * License as published by the Free Software Foundation; either
9+ * version 2.1 of the License, or (at your option) any later version.
10+ *
11+ * FFmpeg is distributed in the hope that it will be useful,
12+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14+ * Lesser General Public License for more details.
15+ *
16+ * You should have received a copy of the GNU Lesser General Public
17+ * License along with FFmpeg; if not, write to the Free Software
18+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19+ */
20+
21+#include "libavutil/riscv/asm.S"
22+
23+.macro vsetvlstatic8 w, vlen
24+ .if \w == 2 && \vlen == 128
25+ vsetivli zero, \w, e8, mf8, ta, ma
26+ .elseif \w <= 4 && \vlen == 128
27+ vsetivli zero, \w, e8, mf4, ta, ma
28+ .elseif \w <= 8 && \vlen == 128
29+ vsetivli zero, \w, e8, mf2, ta, ma
30+ .elseif \w <= 16 && \vlen == 128
31+ vsetivli zero, \w, e8, m1, ta, ma
32+ .elseif \w <= 32 && \vlen == 128
33+ li t0, \w
34+ vsetvli zero, t0, e8, m2, ta, ma
35+ .elseif \w <= 4 && \vlen == 256
36+ vsetivli zero, \w, e8, mf8, ta, ma
37+ .elseif \w <= 8 && \vlen == 256
38+ vsetivli zero, \w, e8, mf4, ta, ma
39+ .elseif \w <= 16 && \vlen == 256
40+ vsetivli zero, \w, e8, mf2, ta, ma
41+ .elseif \w <= 32 && \vlen == 256
42+ li t0, \w
43+ vsetvli zero, t0, e8, m1, ta, ma
44+ .elseif \w <= 64 && \vlen == 256
45+ li t0, \w
46+ vsetvli zero, t0, e8, m2, ta, ma
47+ .else
48+ li t0, \w
49+ vsetvli zero, t0, e8, m4, ta, ma
50+ .endif
51+.endm
52+
53+.macro vsetvlstatic16 w, vlen
54+ .if \w == 2 && \vlen == 128
55+ vsetivli zero, \w, e16, mf4, ta, ma
56+ .elseif \w <= 4 && \vlen == 128
57+ vsetivli zero, \w, e16, mf2, ta, ma
58+ .elseif \w <= 8 && \vlen == 128
59+ vsetivli zero, \w, e16, m1, ta, ma
60+ .elseif \w <= 16 && \vlen == 128
61+ vsetivli zero, \w, e16, m2, ta, ma
62+ .elseif \w <= 32 && \vlen == 128
63+ li t0, \w
64+ vsetvli zero, t0, e16, m4, ta, ma
65+ .elseif \w <= 4 && \vlen == 256
66+ vsetivli zero, \w, e16, mf4, ta, ma
67+ .elseif \w <= 8 && \vlen == 256
68+ vsetivli zero, \w, e16, mf2, ta, ma
69+ .elseif \w <= 16 && \vlen == 256
70+ vsetivli zero, \w, e16, m1, ta, ma
71+ .elseif \w <= 32 && \vlen == 256
72+ li t0, \w
73+ vsetvli zero, t0, e16, m2, ta, ma
74+ .elseif \w <= 64 && \vlen == 256
75+ li t0, \w
76+ vsetvli zero, t0, e16, m4, ta, ma
77+ .else
78+ li t0, \w
79+ vsetvli zero, t0, e16, m8, ta, ma
80+ .endif
81+.endm
82+
83+.macro vsetvlstatic32 w, vlen
84+ .if \w == 2
85+ vsetivli zero, \w, e32, mf2, ta, ma
86+ .elseif \w <= 4 && \vlen == 128
87+ vsetivli zero, \w, e32, m1, ta, ma
88+ .elseif \w <= 8 && \vlen == 128
89+ vsetivli zero, \w, e32, m2, ta, ma
90+ .elseif \w <= 16 && \vlen == 128
91+ vsetivli zero, \w, e32, m4, ta, ma
92+ .elseif \w <= 4 && \vlen == 256
93+ vsetivli zero, \w, e32, mf2, ta, ma
94+ .elseif \w <= 8 && \vlen == 256
95+ vsetivli zero, \w, e32, m1, ta, ma
96+ .elseif \w <= 16 && \vlen == 256
97+ vsetivli zero, \w, e32, m2, ta, ma
98+ .elseif \w <= 32 && \vlen == 256
99+ li t0, \w
100+ vsetvli zero, t0, e32, m4, ta, ma
101+ .else
102+ li t0, \w
103+ vsetvli zero, t0, e32, m8, ta, ma
104+ .endif
105+.endm
106+
107+.macro POW2_JMP_TABLE id, vlen
108+const jmp_table_\id\vlen
109+ .4byte \id\()2\vlen\()f - jmp_table_\id\vlen
110+ .4byte \id\()4\vlen\()f - jmp_table_\id\vlen
111+ .4byte \id\()8\vlen\()f - jmp_table_\id\vlen
112+ .4byte \id\()16\vlen\()f - jmp_table_\id\vlen
113+ .4byte \id\()32\vlen\()f - jmp_table_\id\vlen
114+ .4byte \id\()64\vlen\()f - jmp_table_\id\vlen
115+ .4byte \id\()128\vlen\()f - jmp_table_\id\vlen
116+endconst
117+.endm
118+
119+.macro POW2_J vlen, id, w
120+ clz t1, \w
121+ neg t1, t1
122+ lla t5, jmp_table_\id\vlen
123+ sh2add t1, t1, t5
124+ lw t1, ((__riscv_xlen-2)<<2)(t1)
125+ add t1, t1, t5
126+ jr t1
127+.endm
libavcodec/riscv/vvc/vvc_mc_rvv.S+5−112
@@ -18,91 +18,7 @@ · 17 unmodified lines
1818 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1919 */
2020
21−#include "libavutil/riscv/asm.S"
22−
23−.macro vsetvlstatic8 w, vlen
24− .if \w == 2 && \vlen == 128
25− vsetivli zero, \w, e8, mf8, ta, ma
26− .elseif \w <= 4 && \vlen == 128
27− vsetivli zero, \w, e8, mf4, ta, ma
28− .elseif \w <= 8 && \vlen == 128
29− vsetivli zero, \w, e8, mf2, ta, ma
30− .elseif \w <= 16 && \vlen == 128
31− vsetivli zero, \w, e8, m1, ta, ma
32− .elseif \w <= 32 && \vlen == 128
33− li t0, \w
34− vsetvli zero, t0, e8, m2, ta, ma
35− .elseif \w <= 4 && \vlen == 256
36− vsetivli zero, \w, e8, mf8, ta, ma
37− .elseif \w <= 8 && \vlen == 256
38− vsetivli zero, \w, e8, mf4, ta, ma
39− .elseif \w <= 16 && \vlen == 256
40− vsetivli zero, \w, e8, mf2, ta, ma
41− .elseif \w <= 32 && \vlen == 256
42− li t0, \w
43− vsetvli zero, t0, e8, m1, ta, ma
44− .elseif \w <= 64 && \vlen == 256
45− li t0, \w
46− vsetvli zero, t0, e8, m2, ta, ma
47− .else
48− li t0, \w
49− vsetvli zero, t0, e8, m4, ta, ma
50− .endif
51−.endm
52−
53−.macro vsetvlstatic16 w, vlen
54− .if \w == 2 && \vlen == 128
55− vsetivli zero, \w, e16, mf4, ta, ma
56− .elseif \w <= 4 && \vlen == 128
57− vsetivli zero, \w, e16, mf2, ta, ma
58− .elseif \w <= 8 && \vlen == 128
59− vsetivli zero, \w, e16, m1, ta, ma
60− .elseif \w <= 16 && \vlen == 128
61− vsetivli zero, \w, e16, m2, ta, ma
62− .elseif \w <= 32 && \vlen == 128
63− li t0, \w
64− vsetvli zero, t0, e16, m4, ta, ma
65− .elseif \w <= 4 && \vlen == 256
66− vsetivli zero, \w, e16, mf4, ta, ma
67− .elseif \w <= 8 && \vlen == 256
68− vsetivli zero, \w, e16, mf2, ta, ma
69− .elseif \w <= 16 && \vlen == 256
70− vsetivli zero, \w, e16, m1, ta, ma
71− .elseif \w <= 32 && \vlen == 256
72− li t0, \w
73− vsetvli zero, t0, e16, m2, ta, ma
74− .elseif \w <= 64 && \vlen == 256
75− li t0, \w
76− vsetvli zero, t0, e16, m4, ta, ma
77− .else
78− li t0, \w
79− vsetvli zero, t0, e16, m8, ta, ma
80− .endif
81−.endm
82−
83−.macro vsetvlstatic32 w, vlen
84− .if \w == 2
85− vsetivli zero, \w, e32, mf2, ta, ma
86− .elseif \w <= 4 && \vlen == 128
87− vsetivli zero, \w, e32, m1, ta, ma
88− .elseif \w <= 8 && \vlen == 128
89− vsetivli zero, \w, e32, m2, ta, ma
90− .elseif \w <= 16 && \vlen == 128
91− vsetivli zero, \w, e32, m4, ta, ma
92− .elseif \w <= 4 && \vlen == 256
93− vsetivli zero, \w, e32, mf2, ta, ma
94− .elseif \w <= 8 && \vlen == 256
95− vsetivli zero, \w, e32, m1, ta, ma
96− .elseif \w <= 16 && \vlen == 256
97− vsetivli zero, \w, e32, m2, ta, ma
98− .elseif \w <= 32 && \vlen == 256
99− li t0, \w
100− vsetvli zero, t0, e32, m4, ta, ma
101− .else
102− li t0, \w
103− vsetvli zero, t0, e32, m8, ta, ma
104− .endif
105−.endm
21+#include "libavcodec/riscv/h26x/asm.S"
10622
10723 .macro avg w, vlen, id
10824 \id\w\vlen:
@@ -157,35 +73,12 @@ · 48 unmodified lines
15773 ret
15874 .endm
15975
160−
161−.macro AVG_JMP_TABLE id, vlen
162−const jmp_table_\id\vlen
163− .4byte \id\()2\vlen\()f - jmp_table_\id\vlen
164− .4byte \id\()4\vlen\()f - jmp_table_\id\vlen
165− .4byte \id\()8\vlen\()f - jmp_table_\id\vlen
166− .4byte \id\()16\vlen\()f - jmp_table_\id\vlen
167− .4byte \id\()32\vlen\()f - jmp_table_\id\vlen
168− .4byte \id\()64\vlen\()f - jmp_table_\id\vlen
169− .4byte \id\()128\vlen\()f - jmp_table_\id\vlen
170−endconst
171−.endm
172−
173−.macro AVG_J vlen, id
174− clz t1, a4
175− neg t1, t1
176− lla t5, jmp_table_\id\vlen
177− sh2add t1, t1, t5
178− lw t1, ((__riscv_xlen-2)<<2)(t1)
179− add t1, t1, t5
180− jr t1
181−.endm
182−
18376 .macro func_avg vlen
18477 func ff_vvc_avg_8_rvv_\vlen\(), zve32x, zbb, zba
18578 lpad 0
186− AVG_JMP_TABLE 1, \vlen
79+ POW2_JMP_TABLE 1, \vlen
18780 csrwi vxrm, 0
188− AVG_J \vlen, 1
81+ POW2_J \vlen, 1, a4
18982 .irp w,2,4,8,16,32,64,128
19083 avg \w, \vlen, 1
19184 .endr
@@ -265,7 +158,7 @@ func_avg 256 · 73 unmodified lines
265158 .macro func_w_avg vlen
266159 func ff_vvc_w_avg_8_rvv_\vlen\(), zve32x, zbb, zba
267160 lpad 0
268− AVG_JMP_TABLE 2, \vlen
161+ POW2_JMP_TABLE 2, \vlen
269162 csrwi vxrm, 0
270163 addi t6, a6, 7
271164 ld t3, (sp)
@@ -275,7 +168,7 @@ func ff_vvc_w_avg_8_rvv_\vlen\(), zve32x, zbb, zba · 3 unmodified lines
275168 add t4, t4, t5
276169 addi t5, t6, -1 // shift - 1
277170 sll t4, t4, t5
278− AVG_J \vlen, 2
171+ POW2_J \vlen, 2, a4
279172 .irp w,2,4,8,16,32,64,128
280173 w_avg \w, \vlen, 2
281174 .endr

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t