Imported Upstream version 6.1
[platform/upstream/ffmpeg.git] / libavcodec / riscv / pixblockdsp_rvi.S
1 /*
2  * Copyright © 2022 Rémi Denis-Courmont.
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 func ff_get_pixels_8_rvi
24 .irp row, 0, 1, 2, 3, 4, 5, 6, 7
25         ld      t0,    (a1)
26         add     a1, a1, a2
27         sd      zero, ((\row * 16) + 0)(a0)
28         addi    t6, t6, -1
29         sd      zero, ((\row * 16) + 8)(a0)
30         srli    t1, t0, 8
31         sb      t0, ((\row * 16) + 0)(a0)
32         srli    t2, t0, 16
33         sb      t1, ((\row * 16) + 2)(a0)
34         srli    t3, t0, 24
35         sb      t2, ((\row * 16) + 4)(a0)
36         srli    t4, t0, 32
37         sb      t3, ((\row * 16) + 6)(a0)
38         srli    t1, t0, 40
39         sb      t4, ((\row * 16) + 8)(a0)
40         srli    t2, t0, 48
41         sb      t1, ((\row * 16) + 10)(a0)
42         srli    t3, t0, 56
43         sb      t2, ((\row * 16) + 12)(a0)
44         sb      t3, ((\row * 16) + 14)(a0)
45 .endr
46         ret
47 endfunc
48
49 func ff_get_pixels_16_rvi
50 .irp row, 0, 1, 2, 3, 4, 5, 6, 7
51         ld      t0, 0(a1)
52         ld      t1, 8(a1)
53         add     a1, a1, a2
54         sd      t0, ((\row * 16) + 0)(a0)
55         sd      t1, ((\row * 16) + 8)(a0)
56 .endr
57         ret
58 endfunc