1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * Alpha optimized DSP utils
3cabdff1aSopenharmony_ci * Copyright (c) 2002 Falk Hueffner <falk@debian.org>
4cabdff1aSopenharmony_ci *
5cabdff1aSopenharmony_ci * This file is part of FFmpeg.
6cabdff1aSopenharmony_ci *
7cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or
8cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public
9cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either
10cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version.
11cabdff1aSopenharmony_ci *
12cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
13cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
14cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15cabdff1aSopenharmony_ci * Lesser General Public License for more details.
16cabdff1aSopenharmony_ci *
17cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public
18cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software
19cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20cabdff1aSopenharmony_ci */
21cabdff1aSopenharmony_ci
22cabdff1aSopenharmony_ci/*
23cabdff1aSopenharmony_ci * These functions are scheduled for pca56. They should work
24cabdff1aSopenharmony_ci * reasonably on ev6, though.
25cabdff1aSopenharmony_ci */
26cabdff1aSopenharmony_ci
27cabdff1aSopenharmony_ci#include "regdef.h"
28cabdff1aSopenharmony_ci
29cabdff1aSopenharmony_ci
30cabdff1aSopenharmony_ci        .set noat
31cabdff1aSopenharmony_ci        .set noreorder
32cabdff1aSopenharmony_ci        .arch pca56
33cabdff1aSopenharmony_ci        .text
34cabdff1aSopenharmony_ci
35cabdff1aSopenharmony_ci/************************************************************************
36cabdff1aSopenharmony_ci * void put_pixels_axp_asm(uint8_t *block, const uint8_t *pixels,
37cabdff1aSopenharmony_ci *                         int line_size, int h)
38cabdff1aSopenharmony_ci */
39cabdff1aSopenharmony_ci        .align 6
40cabdff1aSopenharmony_ci        .globl put_pixels_axp_asm
41cabdff1aSopenharmony_ci        .ent put_pixels_axp_asm
42cabdff1aSopenharmony_ciput_pixels_axp_asm:
43cabdff1aSopenharmony_ci        .frame sp, 0, ra
44cabdff1aSopenharmony_ci        .prologue 0
45cabdff1aSopenharmony_ci
46cabdff1aSopenharmony_ci        and     a1, 7, t0
47cabdff1aSopenharmony_ci        beq     t0, $aligned
48cabdff1aSopenharmony_ci
49cabdff1aSopenharmony_ci        .align 4
50cabdff1aSopenharmony_ci$unaligned:
51cabdff1aSopenharmony_ci        ldq_u   t0, 0(a1)
52cabdff1aSopenharmony_ci        ldq_u   t1, 8(a1)
53cabdff1aSopenharmony_ci        addq    a1, a2, a1
54cabdff1aSopenharmony_ci        nop
55cabdff1aSopenharmony_ci
56cabdff1aSopenharmony_ci        ldq_u   t2, 0(a1)
57cabdff1aSopenharmony_ci        ldq_u   t3, 8(a1)
58cabdff1aSopenharmony_ci        addq    a1, a2, a1
59cabdff1aSopenharmony_ci        nop
60cabdff1aSopenharmony_ci
61cabdff1aSopenharmony_ci        ldq_u   t4, 0(a1)
62cabdff1aSopenharmony_ci        ldq_u   t5, 8(a1)
63cabdff1aSopenharmony_ci        addq    a1, a2, a1
64cabdff1aSopenharmony_ci        nop
65cabdff1aSopenharmony_ci
66cabdff1aSopenharmony_ci        ldq_u   t6, 0(a1)
67cabdff1aSopenharmony_ci        ldq_u   t7, 8(a1)
68cabdff1aSopenharmony_ci        extql   t0, a1, t0
69cabdff1aSopenharmony_ci        addq    a1, a2, a1
70cabdff1aSopenharmony_ci
71cabdff1aSopenharmony_ci        extqh   t1, a1, t1
72cabdff1aSopenharmony_ci        addq    a0, a2, t8
73cabdff1aSopenharmony_ci        extql   t2, a1, t2
74cabdff1aSopenharmony_ci        addq    t8, a2, t9
75cabdff1aSopenharmony_ci
76cabdff1aSopenharmony_ci        extqh   t3, a1, t3
77cabdff1aSopenharmony_ci        addq    t9, a2, ta
78cabdff1aSopenharmony_ci        extql   t4, a1, t4
79cabdff1aSopenharmony_ci        or      t0, t1, t0
80cabdff1aSopenharmony_ci
81cabdff1aSopenharmony_ci        extqh   t5, a1, t5
82cabdff1aSopenharmony_ci        or      t2, t3, t2
83cabdff1aSopenharmony_ci        extql   t6, a1, t6
84cabdff1aSopenharmony_ci        or      t4, t5, t4
85cabdff1aSopenharmony_ci
86cabdff1aSopenharmony_ci        extqh   t7, a1, t7
87cabdff1aSopenharmony_ci        or      t6, t7, t6
88cabdff1aSopenharmony_ci        stq     t0, 0(a0)
89cabdff1aSopenharmony_ci        stq     t2, 0(t8)
90cabdff1aSopenharmony_ci
91cabdff1aSopenharmony_ci        stq     t4, 0(t9)
92cabdff1aSopenharmony_ci        subq    a3, 4, a3
93cabdff1aSopenharmony_ci        stq     t6, 0(ta)
94cabdff1aSopenharmony_ci        addq    ta, a2, a0
95cabdff1aSopenharmony_ci
96cabdff1aSopenharmony_ci        bne     a3, $unaligned
97cabdff1aSopenharmony_ci        ret
98cabdff1aSopenharmony_ci
99cabdff1aSopenharmony_ci        .align 4
100cabdff1aSopenharmony_ci$aligned:
101cabdff1aSopenharmony_ci        ldq     t0, 0(a1)
102cabdff1aSopenharmony_ci        addq    a1, a2, a1
103cabdff1aSopenharmony_ci        ldq     t1, 0(a1)
104cabdff1aSopenharmony_ci        addq    a1, a2, a1
105cabdff1aSopenharmony_ci
106cabdff1aSopenharmony_ci        ldq     t2, 0(a1)
107cabdff1aSopenharmony_ci        addq    a1, a2, a1
108cabdff1aSopenharmony_ci        ldq     t3, 0(a1)
109cabdff1aSopenharmony_ci
110cabdff1aSopenharmony_ci        addq    a0, a2, t4
111cabdff1aSopenharmony_ci        addq    a1, a2, a1
112cabdff1aSopenharmony_ci        addq    t4, a2, t5
113cabdff1aSopenharmony_ci        subq    a3, 4, a3
114cabdff1aSopenharmony_ci
115cabdff1aSopenharmony_ci        stq     t0, 0(a0)
116cabdff1aSopenharmony_ci        addq    t5, a2, t6
117cabdff1aSopenharmony_ci        stq     t1, 0(t4)
118cabdff1aSopenharmony_ci        addq    t6, a2, a0
119cabdff1aSopenharmony_ci
120cabdff1aSopenharmony_ci        stq     t2, 0(t5)
121cabdff1aSopenharmony_ci        stq     t3, 0(t6)
122cabdff1aSopenharmony_ci
123cabdff1aSopenharmony_ci        bne     a3, $aligned
124cabdff1aSopenharmony_ci        ret
125cabdff1aSopenharmony_ci        .end put_pixels_axp_asm
126