Unified · Split
| @@ -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 | |
| @@ -18,91 +18,7 @@ · 17 unmodified lines | ||
| 18 | 18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| 19 | 19 | */ |
| 20 | 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 | |
| 21 | +#include "libavcodec/riscv/h26x/asm.S" | |
| 106 | 22 | |
| 107 | 23 | .macro avg w, vlen, id |
| 108 | 24 | \id\w\vlen: |
| @@ -157,35 +73,12 @@ · 48 unmodified lines | ||
| 157 | 73 | ret |
| 158 | 74 | .endm |
| 159 | 75 | |
| 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 | − | |
| 183 | 76 | .macro func_avg vlen |
| 184 | 77 | func ff_vvc_avg_8_rvv_\vlen\(), zve32x, zbb, zba |
| 185 | 78 | lpad 0 |
| 186 | − AVG_JMP_TABLE 1, \vlen | |
| 79 | + POW2_JMP_TABLE 1, \vlen | |
| 187 | 80 | csrwi vxrm, 0 |
| 188 | − AVG_J \vlen, 1 | |
| 81 | + POW2_J \vlen, 1, a4 | |
| 189 | 82 | .irp w,2,4,8,16,32,64,128 |
| 190 | 83 | avg \w, \vlen, 1 |
| 191 | 84 | .endr |
| @@ -265,7 +158,7 @@ func_avg 256 · 73 unmodified lines | ||
| 265 | 158 | .macro func_w_avg vlen |
| 266 | 159 | func ff_vvc_w_avg_8_rvv_\vlen\(), zve32x, zbb, zba |
| 267 | 160 | lpad 0 |
| 268 | − AVG_JMP_TABLE 2, \vlen | |
| 161 | + POW2_JMP_TABLE 2, \vlen | |
| 269 | 162 | csrwi vxrm, 0 |
| 270 | 163 | addi t6, a6, 7 |
| 271 | 164 | ld t3, (sp) |
| @@ -275,7 +168,7 @@ func ff_vvc_w_avg_8_rvv_\vlen\(), zve32x, zbb, zba · 3 unmodified lines | ||
| 275 | 168 | add t4, t4, t5 |
| 276 | 169 | addi t5, t6, -1 // shift - 1 |
| 277 | 170 | sll t4, t4, t5 |
| 278 | − AVG_J \vlen, 2 | |
| 171 | + POW2_J \vlen, 2, a4 | |
| 279 | 172 | .irp w,2,4,8,16,32,64,128 |
| 280 | 173 | w_avg \w, \vlen, 2 |
| 281 | 174 | .endr |