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
108const 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
116endconst
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
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */19 */
20 20
21#include "libavutil/riscv/asm.S"21#include "libavcodec/riscv/h26x/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 22
107.macro avg w, vlen, id23.macro avg w, vlen, id
108\id\w\vlen:24\id\w\vlen:
@@ -157,35 +73,12 @@ · 48 unmodified lines
157 ret73 ret
158.endm74.endm
159 75
160
161.macro AVG_JMP_TABLE id, vlen
162const 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
170endconst
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
183.macro func_avg vlen76.macro func_avg vlen
184func ff_vvc_avg_8_rvv_\vlen\(), zve32x, zbb, zba77func ff_vvc_avg_8_rvv_\vlen\(), zve32x, zbb, zba
185 lpad 078 lpad 0
186 AVG_JMP_TABLE 1, \vlen79 POW2_JMP_TABLE 1, \vlen
187 csrwi vxrm, 080 csrwi vxrm, 0
188 AVG_J \vlen, 181 POW2_J \vlen, 1, a4
189 .irp w,2,4,8,16,32,64,12882 .irp w,2,4,8,16,32,64,128
190 avg \w, \vlen, 183 avg \w, \vlen, 1
191 .endr84 .endr
@@ -265,7 +158,7 @@ func_avg 256 · 73 unmodified lines
265.macro func_w_avg vlen158.macro func_w_avg vlen
266func ff_vvc_w_avg_8_rvv_\vlen\(), zve32x, zbb, zba159func ff_vvc_w_avg_8_rvv_\vlen\(), zve32x, zbb, zba
267 lpad 0160 lpad 0
268 AVG_JMP_TABLE 2, \vlen161 POW2_JMP_TABLE 2, \vlen
269 csrwi vxrm, 0162 csrwi vxrm, 0
270 addi t6, a6, 7163 addi t6, a6, 7
271 ld t3, (sp)164 ld t3, (sp)
@@ -275,7 +168,7 @@ func ff_vvc_w_avg_8_rvv_\vlen\(), zve32x, zbb, zba · 3 unmodified lines
275 add t4, t4, t5168 add t4, t4, t5
276 addi t5, t6, -1 // shift - 1169 addi t5, t6, -1 // shift - 1
277 sll t4, t4, t5170 sll t4, t4, t5
278 AVG_J \vlen, 2171 POW2_J \vlen, 2, a4
279 .irp w,2,4,8,16,32,64,128172 .irp w,2,4,8,16,32,64,128
280 w_avg \w, \vlen, 2173 w_avg \w, \vlen, 2
281 .endr174 .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