1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * Loongson SIMD optimized h264dsp
3cabdff1aSopenharmony_ci *
4cabdff1aSopenharmony_ci * Copyright (c) 2015 Loongson Technology Corporation Limited
5cabdff1aSopenharmony_ci * Copyright (c) 2015 Zhou Xiaoyong <zhouxiaoyong@loongson.cn>
6cabdff1aSopenharmony_ci *                    Zhang Shuangshuang <zhangshuangshuang@ict.ac.cn>
7cabdff1aSopenharmony_ci *                    Heiher <r@hev.cc>
8cabdff1aSopenharmony_ci *
9cabdff1aSopenharmony_ci * This file is part of FFmpeg.
10cabdff1aSopenharmony_ci *
11cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or
12cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public
13cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either
14cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version.
15cabdff1aSopenharmony_ci *
16cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
17cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
18cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19cabdff1aSopenharmony_ci * Lesser General Public License for more details.
20cabdff1aSopenharmony_ci *
21cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public
22cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software
23cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24cabdff1aSopenharmony_ci */
25cabdff1aSopenharmony_ci
26cabdff1aSopenharmony_ci#include "libavcodec/bit_depth_template.c"
27cabdff1aSopenharmony_ci#include "h264dsp_mips.h"
28cabdff1aSopenharmony_ci#include "libavutil/mips/mmiutils.h"
29cabdff1aSopenharmony_ci#include "libavutil/mem_internal.h"
30cabdff1aSopenharmony_ci
31cabdff1aSopenharmony_civoid ff_h264_add_pixels4_8_mmi(uint8_t *dst, int16_t *src, int stride)
32cabdff1aSopenharmony_ci{
33cabdff1aSopenharmony_ci    double ftmp[9];
34cabdff1aSopenharmony_ci    DECLARE_VAR_LOW32;
35cabdff1aSopenharmony_ci
36cabdff1aSopenharmony_ci    __asm__ volatile (
37cabdff1aSopenharmony_ci        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
38cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp1], %[src], 0x00)
39cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp2], %[src], 0x08)
40cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp3], %[src], 0x10)
41cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp4], %[src], 0x18)
42cabdff1aSopenharmony_ci        /* memset(src, 0, 32); */
43cabdff1aSopenharmony_ci        MMI_SQC1(%[ftmp0], %[ftmp0], %[src], 0x00)
44cabdff1aSopenharmony_ci        MMI_SQC1(%[ftmp0], %[ftmp0], %[src], 0x10)
45cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp5], %[dst0], 0x00)
46cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp6], %[dst1], 0x00)
47cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp7], %[dst2], 0x00)
48cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp8], %[dst3], 0x00)
49cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp5],   %[ftmp5],       %[ftmp0]                \n\t"
50cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp6],   %[ftmp6],       %[ftmp0]                \n\t"
51cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
52cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp8],   %[ftmp8],       %[ftmp0]                \n\t"
53cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp5]                \n\t"
54cabdff1aSopenharmony_ci        "paddh      %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
55cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp7]                \n\t"
56cabdff1aSopenharmony_ci        "paddh      %[ftmp4],   %[ftmp4],       %[ftmp8]                \n\t"
57cabdff1aSopenharmony_ci        "packushb   %[ftmp1],   %[ftmp1],       %[ftmp0]                \n\t"
58cabdff1aSopenharmony_ci        "packushb   %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
59cabdff1aSopenharmony_ci        "packushb   %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
60cabdff1aSopenharmony_ci        "packushb   %[ftmp4],   %[ftmp4],       %[ftmp0]                \n\t"
61cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp1], %[dst0], 0x00)
62cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp2], %[dst1], 0x00)
63cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp3], %[dst2], 0x00)
64cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp4], %[dst3], 0x00)
65cabdff1aSopenharmony_ci        : [ftmp0]"=&f"(ftmp[0]),            [ftmp1]"=&f"(ftmp[1]),
66cabdff1aSopenharmony_ci          [ftmp2]"=&f"(ftmp[2]),            [ftmp3]"=&f"(ftmp[3]),
67cabdff1aSopenharmony_ci          [ftmp4]"=&f"(ftmp[4]),            [ftmp5]"=&f"(ftmp[5]),
68cabdff1aSopenharmony_ci          [ftmp6]"=&f"(ftmp[6]),            [ftmp7]"=&f"(ftmp[7]),
69cabdff1aSopenharmony_ci          RESTRICT_ASM_LOW32
70cabdff1aSopenharmony_ci          [ftmp8]"=&f"(ftmp[8])
71cabdff1aSopenharmony_ci        : [dst0]"r"(dst),                   [dst1]"r"(dst+stride),
72cabdff1aSopenharmony_ci          [dst2]"r"(dst+2*stride),          [dst3]"r"(dst+3*stride),
73cabdff1aSopenharmony_ci          [src]"r"(src)
74cabdff1aSopenharmony_ci        : "memory"
75cabdff1aSopenharmony_ci    );
76cabdff1aSopenharmony_ci
77cabdff1aSopenharmony_ci}
78cabdff1aSopenharmony_ci
79cabdff1aSopenharmony_civoid ff_h264_idct_add_8_mmi(uint8_t *dst, int16_t *block, int stride)
80cabdff1aSopenharmony_ci{
81cabdff1aSopenharmony_ci    double ftmp[12];
82cabdff1aSopenharmony_ci    uint64_t tmp[1];
83cabdff1aSopenharmony_ci    DECLARE_VAR_LOW32;
84cabdff1aSopenharmony_ci    DECLARE_VAR_ADDRT;
85cabdff1aSopenharmony_ci
86cabdff1aSopenharmony_ci    __asm__ volatile (
87cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp0], %[block], 0x00)
88cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp1], %[block], 0x08)
89cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp2], %[block], 0x10)
90cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp3], %[block], 0x18)
91cabdff1aSopenharmony_ci        /* memset(block, 0, 32) */
92cabdff1aSopenharmony_ci        "pxor       %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
93cabdff1aSopenharmony_ci        MMI_SQC1(%[ftmp4], %[ftmp4], %[block], 0x00)
94cabdff1aSopenharmony_ci        MMI_SQC1(%[ftmp4], %[ftmp4], %[block], 0x10)
95cabdff1aSopenharmony_ci        "dli        %[tmp0],    0x01                                    \n\t"
96cabdff1aSopenharmony_ci        "mtc1       %[tmp0],    %[ftmp8]                                \n\t"
97cabdff1aSopenharmony_ci        "dli        %[tmp0],    0x06                                    \n\t"
98cabdff1aSopenharmony_ci        "mtc1       %[tmp0],    %[ftmp9]                                \n\t"
99cabdff1aSopenharmony_ci        "psrah      %[ftmp4],   %[ftmp1],       %[ftmp8]                \n\t"
100cabdff1aSopenharmony_ci        "psrah      %[ftmp5],   %[ftmp3],       %[ftmp8]                \n\t"
101cabdff1aSopenharmony_ci        "psubh      %[ftmp4],   %[ftmp4],       %[ftmp3]                \n\t"
102cabdff1aSopenharmony_ci        "paddh      %[ftmp5],   %[ftmp5],       %[ftmp1]                \n\t"
103cabdff1aSopenharmony_ci        "paddh      %[ftmp10],  %[ftmp2],       %[ftmp0]                \n\t"
104cabdff1aSopenharmony_ci        "psubh      %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
105cabdff1aSopenharmony_ci        "paddh      %[ftmp11],  %[ftmp5],       %[ftmp10]               \n\t"
106cabdff1aSopenharmony_ci        "psubh      %[ftmp2],   %[ftmp10],      %[ftmp5]                \n\t"
107cabdff1aSopenharmony_ci        "paddh      %[ftmp10],  %[ftmp4],       %[ftmp0]                \n\t"
108cabdff1aSopenharmony_ci        "psubh      %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
109cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp1],   %[ftmp11],      %[ftmp10]               \n\t"
110cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp5],   %[ftmp11],      %[ftmp10]               \n\t"
111cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp4],   %[ftmp0],       %[ftmp2]                \n\t"
112cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
113cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp2],   %[ftmp5],       %[ftmp0]                \n\t"
114cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp5],   %[ftmp5],       %[ftmp0]                \n\t"
115cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp10],  %[ftmp1],       %[ftmp4]                \n\t"
116cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp0],   %[ftmp1],       %[ftmp4]                \n\t"
117cabdff1aSopenharmony_ci        "paddh      %[ftmp5],   %[ftmp5],       %[ff_pw_32]             \n\t"
118cabdff1aSopenharmony_ci        "psrah      %[ftmp4],   %[ftmp2],       %[ftmp8]                \n\t"
119cabdff1aSopenharmony_ci        "psrah      %[ftmp3],   %[ftmp0],       %[ftmp8]                \n\t"
120cabdff1aSopenharmony_ci        "psubh      %[ftmp4],   %[ftmp4],       %[ftmp0]                \n\t"
121cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp2]                \n\t"
122cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp10],      %[ftmp5]                \n\t"
123cabdff1aSopenharmony_ci        "psubh      %[ftmp5],   %[ftmp5],       %[ftmp10]               \n\t"
124cabdff1aSopenharmony_ci        "paddh      %[ftmp10],  %[ftmp3],       %[ftmp1]                \n\t"
125cabdff1aSopenharmony_ci        "psubh      %[ftmp1],   %[ftmp1],       %[ftmp3]                \n\t"
126cabdff1aSopenharmony_ci        "paddh      %[ftmp11],  %[ftmp4],       %[ftmp5]                \n\t"
127cabdff1aSopenharmony_ci        "psubh      %[ftmp5],   %[ftmp5],       %[ftmp4]                \n\t"
128cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp2], %[dst], 0x00)
129cabdff1aSopenharmony_ci        MMI_LWXC1(%[ftmp0], %[dst], %[stride], 0x00)
130cabdff1aSopenharmony_ci        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
131cabdff1aSopenharmony_ci        "psrah      %[ftmp3],   %[ftmp10],      %[ftmp9]                \n\t"
132cabdff1aSopenharmony_ci        "psrah      %[ftmp4],   %[ftmp11],      %[ftmp9]                \n\t"
133cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp7]                \n\t"
134cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp7]                \n\t"
135cabdff1aSopenharmony_ci        "paddh      %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
136cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
137cabdff1aSopenharmony_ci        "packushb   %[ftmp2],   %[ftmp2],       %[ftmp7]                \n\t"
138cabdff1aSopenharmony_ci        "packushb   %[ftmp0],   %[ftmp0],       %[ftmp7]                \n\t"
139cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp2], %[dst], 0x00)
140cabdff1aSopenharmony_ci        MMI_SWXC1(%[ftmp0], %[dst], %[stride], 0x00)
141cabdff1aSopenharmony_ci        PTR_ADDU   "%[dst],     %[dst],         %[stride]               \n\t"
142cabdff1aSopenharmony_ci        PTR_ADDU   "%[dst],     %[dst],         %[stride]               \n\t"
143cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp2], %[dst], 0x00)
144cabdff1aSopenharmony_ci        "psrah      %[ftmp5],   %[ftmp5],       %[ftmp9]                \n\t"
145cabdff1aSopenharmony_ci        MMI_LWXC1(%[ftmp0], %[dst], %[stride], 0x00)
146cabdff1aSopenharmony_ci        "psrah      %[ftmp1],   %[ftmp1],       %[ftmp9]                \n\t"
147cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp7]                \n\t"
148cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp7]                \n\t"
149cabdff1aSopenharmony_ci        "paddh      %[ftmp2],   %[ftmp2],       %[ftmp5]                \n\t"
150cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
151cabdff1aSopenharmony_ci        "packushb   %[ftmp2],   %[ftmp2],       %[ftmp7]                \n\t"
152cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp2], %[dst], 0x00)
153cabdff1aSopenharmony_ci        "packushb   %[ftmp0],   %[ftmp0],       %[ftmp7]                \n\t"
154cabdff1aSopenharmony_ci        MMI_SWXC1(%[ftmp0], %[dst], %[stride], 0x00)
155cabdff1aSopenharmony_ci        : [ftmp0]"=&f"(ftmp[0]),            [ftmp1]"=&f"(ftmp[1]),
156cabdff1aSopenharmony_ci          [ftmp2]"=&f"(ftmp[2]),            [ftmp3]"=&f"(ftmp[3]),
157cabdff1aSopenharmony_ci          [ftmp4]"=&f"(ftmp[4]),            [ftmp5]"=&f"(ftmp[5]),
158cabdff1aSopenharmony_ci          [ftmp6]"=&f"(ftmp[6]),            [ftmp7]"=&f"(ftmp[7]),
159cabdff1aSopenharmony_ci          [ftmp8]"=&f"(ftmp[8]),            [ftmp9]"=&f"(ftmp[9]),
160cabdff1aSopenharmony_ci          [ftmp10]"=&f"(ftmp[10]),          [ftmp11]"=&f"(ftmp[11]),
161cabdff1aSopenharmony_ci          RESTRICT_ASM_LOW32
162cabdff1aSopenharmony_ci          RESTRICT_ASM_ADDRT
163cabdff1aSopenharmony_ci          [tmp0]"=&r"(tmp[0])
164cabdff1aSopenharmony_ci        : [dst]"r"(dst),                    [block]"r"(block),
165cabdff1aSopenharmony_ci          [stride]"r"((mips_reg)stride),    [ff_pw_32]"f"(ff_pw_32.f)
166cabdff1aSopenharmony_ci        : "memory"
167cabdff1aSopenharmony_ci    );
168cabdff1aSopenharmony_ci
169cabdff1aSopenharmony_ci}
170cabdff1aSopenharmony_ci
171cabdff1aSopenharmony_civoid ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride)
172cabdff1aSopenharmony_ci{
173cabdff1aSopenharmony_ci    double ftmp[16];
174cabdff1aSopenharmony_ci    uint64_t tmp[7];
175cabdff1aSopenharmony_ci    mips_reg addr[1];
176cabdff1aSopenharmony_ci    DECLARE_VAR_LOW32;
177cabdff1aSopenharmony_ci    DECLARE_VAR_ADDRT;
178cabdff1aSopenharmony_ci
179cabdff1aSopenharmony_ci    __asm__ volatile (
180cabdff1aSopenharmony_ci        "lhu        %[tmp0],    0x00(%[block])                          \n\t"
181cabdff1aSopenharmony_ci        PTR_ADDI   "$sp,        $sp,            -0x20                   \n\t"
182cabdff1aSopenharmony_ci        PTR_ADDIU  "%[tmp0],    %[tmp0],        0x20                    \n\t"
183cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp1], %[block], 0x10)
184cabdff1aSopenharmony_ci        "sh         %[tmp0],    0x00(%[block])                          \n\t"
185cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp2], %[block], 0x20)
186cabdff1aSopenharmony_ci        "dli        %[tmp0],    0x01                                    \n\t"
187cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp3], %[block], 0x30)
188cabdff1aSopenharmony_ci        "mtc1       %[tmp0],    %[ftmp8]                                \n\t"
189cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp5], %[block], 0x50)
190cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp6], %[block], 0x60)
191cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp7], %[block], 0x70)
192cabdff1aSopenharmony_ci        "mov.d      %[ftmp0],   %[ftmp1]                                \n\t"
193cabdff1aSopenharmony_ci        "psrah      %[ftmp1],   %[ftmp1],       %[ftmp8]                \n\t"
194cabdff1aSopenharmony_ci        "psrah      %[ftmp4],   %[ftmp5],       %[ftmp8]                \n\t"
195cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp0]                \n\t"
196cabdff1aSopenharmony_ci        "paddh      %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
197cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp5]                \n\t"
198cabdff1aSopenharmony_ci        "paddh      %[ftmp4],   %[ftmp4],       %[ftmp7]                \n\t"
199cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp3]                \n\t"
200cabdff1aSopenharmony_ci        "psubh      %[ftmp4],   %[ftmp4],       %[ftmp0]                \n\t"
201cabdff1aSopenharmony_ci        "psubh      %[ftmp0],   %[ftmp0],       %[ftmp3]                \n\t"
202cabdff1aSopenharmony_ci        "psubh      %[ftmp5],   %[ftmp5],       %[ftmp3]                \n\t"
203cabdff1aSopenharmony_ci        "psrah      %[ftmp3],   %[ftmp3],       %[ftmp8]                \n\t"
204cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp7]                \n\t"
205cabdff1aSopenharmony_ci        "psubh      %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
206cabdff1aSopenharmony_ci        "psrah      %[ftmp7],   %[ftmp7],       %[ftmp8]                \n\t"
207cabdff1aSopenharmony_ci        "psubh      %[ftmp0],   %[ftmp0],       %[ftmp3]                \n\t"
208cabdff1aSopenharmony_ci        "dli        %[tmp0],    0x02                                    \n\t"
209cabdff1aSopenharmony_ci        "psubh      %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
210cabdff1aSopenharmony_ci        "mtc1       %[tmp0],    %[ftmp9]                                \n\t"
211cabdff1aSopenharmony_ci        "mov.d      %[ftmp7],   %[ftmp1]                                \n\t"
212cabdff1aSopenharmony_ci        "psrah      %[ftmp1],   %[ftmp1],       %[ftmp9]                \n\t"
213cabdff1aSopenharmony_ci        "psrah      %[ftmp3],   %[ftmp4],       %[ftmp9]                \n\t"
214cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
215cabdff1aSopenharmony_ci        "psrah      %[ftmp0],   %[ftmp0],       %[ftmp9]                \n\t"
216cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp5]                \n\t"
217cabdff1aSopenharmony_ci        "psrah      %[ftmp5],   %[ftmp5],       %[ftmp9]                \n\t"
218cabdff1aSopenharmony_ci        "psubh      %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
219cabdff1aSopenharmony_ci        "psubh      %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
220cabdff1aSopenharmony_ci        "mov.d      %[ftmp5],   %[ftmp6]                                \n\t"
221cabdff1aSopenharmony_ci        "psrah      %[ftmp6],   %[ftmp6],       %[ftmp8]                \n\t"
222cabdff1aSopenharmony_ci        "psrah      %[ftmp4],   %[ftmp2],       %[ftmp8]                \n\t"
223cabdff1aSopenharmony_ci        "paddh      %[ftmp6],   %[ftmp6],       %[ftmp2]                \n\t"
224cabdff1aSopenharmony_ci        "psubh      %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
225cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp2], %[block], 0x00)
226cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp5], %[block], 0x40)
227cabdff1aSopenharmony_ci        "paddh      %[ftmp5],   %[ftmp5],       %[ftmp2]                \n\t"
228cabdff1aSopenharmony_ci        "paddh      %[ftmp2],   %[ftmp2],       %[ftmp2]                \n\t"
229cabdff1aSopenharmony_ci        "paddh      %[ftmp6],   %[ftmp6],       %[ftmp5]                \n\t"
230cabdff1aSopenharmony_ci        "psubh      %[ftmp2],   %[ftmp2],       %[ftmp5]                \n\t"
231cabdff1aSopenharmony_ci        "paddh      %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
232cabdff1aSopenharmony_ci        "paddh      %[ftmp4],   %[ftmp4],       %[ftmp2]                \n\t"
233cabdff1aSopenharmony_ci        "psubh      %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
234cabdff1aSopenharmony_ci        "paddh      %[ftmp2],   %[ftmp2],       %[ftmp2]                \n\t"
235cabdff1aSopenharmony_ci        "paddh      %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
236cabdff1aSopenharmony_ci        "psubh      %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
237cabdff1aSopenharmony_ci        "paddh      %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
238cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
239cabdff1aSopenharmony_ci        "psubh      %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
240cabdff1aSopenharmony_ci        "paddh      %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
241cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp2]                \n\t"
242cabdff1aSopenharmony_ci        "psubh      %[ftmp4],   %[ftmp4],       %[ftmp0]                \n\t"
243cabdff1aSopenharmony_ci        "paddh      %[ftmp2],   %[ftmp2],       %[ftmp2]                \n\t"
244cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp5]                \n\t"
245cabdff1aSopenharmony_ci        "psubh      %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
246cabdff1aSopenharmony_ci        "paddh      %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
247cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp6], %[block], 0x00)
248cabdff1aSopenharmony_ci        "psubh      %[ftmp5],   %[ftmp5],       %[ftmp1]                \n\t"
249cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp6],   %[ftmp7],       %[ftmp0]                \n\t"
250cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
251cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp0],   %[ftmp3],       %[ftmp1]                \n\t"
252cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp3],   %[ftmp3],       %[ftmp1]                \n\t"
253cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp1],   %[ftmp7],       %[ftmp3]                \n\t"
254cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp7],   %[ftmp7],       %[ftmp3]                \n\t"
255cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp3],   %[ftmp6],       %[ftmp0]                \n\t"
256cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp6],   %[ftmp6],       %[ftmp0]                \n\t"
257cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp0], %[block], 0x00)
258cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp7], $sp, 0x00)
259cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp1], $sp, 0x10)
260cabdff1aSopenharmony_ci        "dmfc1      %[tmp1],    %[ftmp6]                                \n\t"
261cabdff1aSopenharmony_ci        "dmfc1      %[tmp3],    %[ftmp3]                                \n\t"
262cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp3],   %[ftmp5],       %[ftmp2]                \n\t"
263cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp5],   %[ftmp5],       %[ftmp2]                \n\t"
264cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp2],   %[ftmp4],       %[ftmp0]                \n\t"
265cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp4],   %[ftmp4],       %[ftmp0]                \n\t"
266cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp0],   %[ftmp5],       %[ftmp4]                \n\t"
267cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp5],   %[ftmp5],       %[ftmp4]                \n\t"
268cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp4],   %[ftmp3],       %[ftmp2]                \n\t"
269cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp3],   %[ftmp3],       %[ftmp2]                \n\t"
270cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp5], $sp, 0x08)
271cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp0], $sp, 0x18)
272cabdff1aSopenharmony_ci        "dmfc1      %[tmp2],    %[ftmp3]                                \n\t"
273cabdff1aSopenharmony_ci        "dmfc1      %[tmp4],    %[ftmp4]                                \n\t"
274cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp1], %[block], 0x18)
275cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp6], %[block], 0x28)
276cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp2], %[block], 0x38)
277cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp0], %[block], 0x58)
278cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp3], %[block], 0x68)
279cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp4], %[block], 0x78)
280cabdff1aSopenharmony_ci        "mov.d      %[ftmp7],   %[ftmp1]                                \n\t"
281cabdff1aSopenharmony_ci        "psrah      %[ftmp5],   %[ftmp0],       %[ftmp8]                \n\t"
282cabdff1aSopenharmony_ci        "psrah      %[ftmp1],   %[ftmp1],       %[ftmp8]                \n\t"
283cabdff1aSopenharmony_ci        "paddh      %[ftmp5],   %[ftmp5],       %[ftmp0]                \n\t"
284cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp7]                \n\t"
285cabdff1aSopenharmony_ci        "paddh      %[ftmp5],   %[ftmp5],       %[ftmp4]                \n\t"
286cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp0]                \n\t"
287cabdff1aSopenharmony_ci        "psubh      %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
288cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp2]                \n\t"
289cabdff1aSopenharmony_ci        "psubh      %[ftmp7],   %[ftmp7],       %[ftmp2]                \n\t"
290cabdff1aSopenharmony_ci        "psubh      %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
291cabdff1aSopenharmony_ci        "psrah      %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
292cabdff1aSopenharmony_ci        "paddh      %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
293cabdff1aSopenharmony_ci        "psubh      %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
294cabdff1aSopenharmony_ci        "psrah      %[ftmp4],   %[ftmp4],       %[ftmp8]                \n\t"
295cabdff1aSopenharmony_ci        "psubh      %[ftmp7],   %[ftmp7],       %[ftmp2]                \n\t"
296cabdff1aSopenharmony_ci        "psubh      %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
297cabdff1aSopenharmony_ci        "mov.d      %[ftmp4],   %[ftmp1]                                \n\t"
298cabdff1aSopenharmony_ci        "psrah      %[ftmp2],   %[ftmp5],       %[ftmp9]                \n\t"
299cabdff1aSopenharmony_ci        "psrah      %[ftmp1],   %[ftmp1],       %[ftmp9]                \n\t"
300cabdff1aSopenharmony_ci        "paddh      %[ftmp2],   %[ftmp2],       %[ftmp7]                \n\t"
301cabdff1aSopenharmony_ci        "psrah      %[ftmp7],   %[ftmp7],       %[ftmp9]                \n\t"
302cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp0]                \n\t"
303cabdff1aSopenharmony_ci        "psrah      %[ftmp0],   %[ftmp0],       %[ftmp9]                \n\t"
304cabdff1aSopenharmony_ci        "psubh      %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
305cabdff1aSopenharmony_ci        "psubh      %[ftmp4],   %[ftmp4],       %[ftmp0]                \n\t"
306cabdff1aSopenharmony_ci        "mov.d      %[ftmp0],   %[ftmp3]                                \n\t"
307cabdff1aSopenharmony_ci        "psrah      %[ftmp3],   %[ftmp3],       %[ftmp8]                \n\t"
308cabdff1aSopenharmony_ci        "psrah      %[ftmp5],   %[ftmp6],       %[ftmp8]                \n\t"
309cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp6]                \n\t"
310cabdff1aSopenharmony_ci        "psubh      %[ftmp5],   %[ftmp5],       %[ftmp0]                \n\t"
311cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp6], %[block], 0x08)
312cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp0], %[block], 0x48)
313cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp6]                \n\t"
314cabdff1aSopenharmony_ci        "paddh      %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
315cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
316cabdff1aSopenharmony_ci        "psubh      %[ftmp6],   %[ftmp6],       %[ftmp0]                \n\t"
317cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
318cabdff1aSopenharmony_ci        "paddh      %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
319cabdff1aSopenharmony_ci        "psubh      %[ftmp0],   %[ftmp0],       %[ftmp3]                \n\t"
320cabdff1aSopenharmony_ci        "paddh      %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
321cabdff1aSopenharmony_ci        "paddh      %[ftmp4],   %[ftmp4],       %[ftmp3]                \n\t"
322cabdff1aSopenharmony_ci        "psubh      %[ftmp6],   %[ftmp6],       %[ftmp5]                \n\t"
323cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp3]                \n\t"
324cabdff1aSopenharmony_ci        "paddh      %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
325cabdff1aSopenharmony_ci        "psubh      %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
326cabdff1aSopenharmony_ci        "paddh      %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
327cabdff1aSopenharmony_ci        "paddh      %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
328cabdff1aSopenharmony_ci        "psubh      %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
329cabdff1aSopenharmony_ci        "paddh      %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
330cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp0]                \n\t"
331cabdff1aSopenharmony_ci        "psubh      %[ftmp6],   %[ftmp6],       %[ftmp2]                \n\t"
332cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
333cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp3], %[block], 0x08)
334cabdff1aSopenharmony_ci        "psubh      %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
335cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp3],   %[ftmp4],       %[ftmp7]                \n\t"
336cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp4],   %[ftmp4],       %[ftmp7]                \n\t"
337cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp7],   %[ftmp2],       %[ftmp1]                \n\t"
338cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp2],   %[ftmp2],       %[ftmp1]                \n\t"
339cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp1],   %[ftmp4],       %[ftmp2]                \n\t"
340cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp4],   %[ftmp4],       %[ftmp2]                \n\t"
341cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp2],   %[ftmp3],       %[ftmp7]                \n\t"
342cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp3],   %[ftmp3],       %[ftmp7]                \n\t"
343cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp7], %[block], 0x08)
344cabdff1aSopenharmony_ci        "dmfc1      %[tmp5],    %[ftmp4]                                \n\t"
345cabdff1aSopenharmony_ci        "mov.d      %[ftmp10],  %[ftmp1]                                \n\t"
346cabdff1aSopenharmony_ci        "mov.d      %[ftmp12],  %[ftmp3]                                \n\t"
347cabdff1aSopenharmony_ci        "mov.d      %[ftmp14],  %[ftmp2]                                \n\t"
348cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp2],   %[ftmp0],       %[ftmp6]                \n\t"
349cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp0],   %[ftmp0],       %[ftmp6]                \n\t"
350cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp6],   %[ftmp5],       %[ftmp7]                \n\t"
351cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
352cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp7],   %[ftmp0],       %[ftmp5]                \n\t"
353cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp0],   %[ftmp0],       %[ftmp5]                \n\t"
354cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp2],       %[ftmp6]                \n\t"
355cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
356cabdff1aSopenharmony_ci        "dmfc1      %[tmp6],    %[ftmp0]                                \n\t"
357cabdff1aSopenharmony_ci        "mov.d      %[ftmp11],  %[ftmp7]                                \n\t"
358cabdff1aSopenharmony_ci        "mov.d      %[ftmp13],  %[ftmp2]                                \n\t"
359cabdff1aSopenharmony_ci        "mov.d      %[ftmp15],  %[ftmp5]                                \n\t"
360cabdff1aSopenharmony_ci        PTR_ADDIU  "%[addr0],   %[dst],         0x04                    \n\t"
361cabdff1aSopenharmony_ci        "mov.d      %[ftmp7],   %[ftmp10]                               \n\t"
362cabdff1aSopenharmony_ci        "dmtc1      %[tmp3],    %[ftmp6]                                \n\t"
363cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp1], $sp, 0x10)
364cabdff1aSopenharmony_ci        "dmtc1      %[tmp1],    %[ftmp3]                                \n\t"
365cabdff1aSopenharmony_ci        "mov.d      %[ftmp4],   %[ftmp1]                                \n\t"
366cabdff1aSopenharmony_ci        "psrah      %[ftmp1],   %[ftmp1],       %[ftmp8]                \n\t"
367cabdff1aSopenharmony_ci        "psrah      %[ftmp0],   %[ftmp7],       %[ftmp8]                \n\t"
368cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp4]                \n\t"
369cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp7]                \n\t"
370cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp7]                \n\t"
371cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp14]               \n\t"
372cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp6]                \n\t"
373cabdff1aSopenharmony_ci        "psubh      %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
374cabdff1aSopenharmony_ci        "psubh      %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
375cabdff1aSopenharmony_ci        "psubh      %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
376cabdff1aSopenharmony_ci        "psrah      %[ftmp6],   %[ftmp6],       %[ftmp8]                \n\t"
377cabdff1aSopenharmony_ci        "paddh      %[ftmp4],   %[ftmp4],       %[ftmp14]               \n\t"
378cabdff1aSopenharmony_ci        "psubh      %[ftmp7],   %[ftmp7],       %[ftmp14]               \n\t"
379cabdff1aSopenharmony_ci        "psrah      %[ftmp5],   %[ftmp14],      %[ftmp8]                \n\t"
380cabdff1aSopenharmony_ci        "psubh      %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
381cabdff1aSopenharmony_ci        "psubh      %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
382cabdff1aSopenharmony_ci        "mov.d      %[ftmp5],   %[ftmp1]                                \n\t"
383cabdff1aSopenharmony_ci        "psrah      %[ftmp1],   %[ftmp1],       %[ftmp9]                \n\t"
384cabdff1aSopenharmony_ci        "psrah      %[ftmp6],   %[ftmp0],       %[ftmp9]                \n\t"
385cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp7]                \n\t"
386cabdff1aSopenharmony_ci        "paddh      %[ftmp6],   %[ftmp6],       %[ftmp4]                \n\t"
387cabdff1aSopenharmony_ci        "psrah      %[ftmp4],   %[ftmp4],       %[ftmp9]                \n\t"
388cabdff1aSopenharmony_ci        "psrah      %[ftmp7],   %[ftmp7],       %[ftmp9]                \n\t"
389cabdff1aSopenharmony_ci        "psubh      %[ftmp4],   %[ftmp4],       %[ftmp0]                \n\t"
390cabdff1aSopenharmony_ci        "psubh      %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
391cabdff1aSopenharmony_ci        "mov.d      %[ftmp7],   %[ftmp12]                               \n\t"
392cabdff1aSopenharmony_ci        "psrah      %[ftmp2],   %[ftmp12],      %[ftmp8]                \n\t"
393cabdff1aSopenharmony_ci        "psrah      %[ftmp0],   %[ftmp3],       %[ftmp8]                \n\t"
394cabdff1aSopenharmony_ci        "paddh      %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
395cabdff1aSopenharmony_ci        "psubh      %[ftmp0],   %[ftmp0],       %[ftmp7]                \n\t"
396cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp3], $sp, 0x00)
397cabdff1aSopenharmony_ci        "dmtc1      %[tmp5],    %[ftmp7]                                \n\t"
398cabdff1aSopenharmony_ci        "paddh      %[ftmp7],   %[ftmp7],       %[ftmp3]                \n\t"
399cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp3]                \n\t"
400cabdff1aSopenharmony_ci        "paddh      %[ftmp2],   %[ftmp2],       %[ftmp7]                \n\t"
401cabdff1aSopenharmony_ci        "psubh      %[ftmp3],   %[ftmp3],       %[ftmp7]                \n\t"
402cabdff1aSopenharmony_ci        "paddh      %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
403cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp3]                \n\t"
404cabdff1aSopenharmony_ci        "psubh      %[ftmp7],   %[ftmp7],       %[ftmp2]                \n\t"
405cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp3]                \n\t"
406cabdff1aSopenharmony_ci        "paddh      %[ftmp5],   %[ftmp5],       %[ftmp2]                \n\t"
407cabdff1aSopenharmony_ci        "psubh      %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
408cabdff1aSopenharmony_ci        "paddh      %[ftmp2],   %[ftmp2],       %[ftmp2]                \n\t"
409cabdff1aSopenharmony_ci        "paddh      %[ftmp4],   %[ftmp4],       %[ftmp0]                \n\t"
410cabdff1aSopenharmony_ci        "psubh      %[ftmp2],   %[ftmp2],       %[ftmp5]                \n\t"
411cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
412cabdff1aSopenharmony_ci        "paddh      %[ftmp6],   %[ftmp6],       %[ftmp3]                \n\t"
413cabdff1aSopenharmony_ci        "psubh      %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
414cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp3]                \n\t"
415cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp7]                \n\t"
416cabdff1aSopenharmony_ci        "psubh      %[ftmp3],   %[ftmp3],       %[ftmp6]                \n\t"
417cabdff1aSopenharmony_ci        "paddh      %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
418cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp3], $sp, 0x00)
419cabdff1aSopenharmony_ci        "psubh      %[ftmp7],   %[ftmp7],       %[ftmp1]                \n\t"
420cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp0], $sp, 0x10)
421cabdff1aSopenharmony_ci        "dmfc1      %[tmp1],    %[ftmp2]                                \n\t"
422cabdff1aSopenharmony_ci        "pxor       %[ftmp2],   %[ftmp2],       %[ftmp2]                \n\t"
423cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[block], 0x00)
424cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[block], 0x08)
425cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[block], 0x10)
426cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[block], 0x18)
427cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[block], 0x20)
428cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[block], 0x28)
429cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[block], 0x30)
430cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[block], 0x38)
431cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[block], 0x40)
432cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[block], 0x48)
433cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[block], 0x50)
434cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[block], 0x58)
435cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[block], 0x60)
436cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[block], 0x68)
437cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[block], 0x70)
438cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[block], 0x78)
439cabdff1aSopenharmony_ci        "dli        %[tmp3],    0x06                                    \n\t"
440cabdff1aSopenharmony_ci        "mtc1       %[tmp3],    %[ftmp10]                               \n\t"
441cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp3], %[dst], 0x00)
442cabdff1aSopenharmony_ci        MMI_LWXC1(%[ftmp0], %[dst], %[stride], 0x00)
443cabdff1aSopenharmony_ci        "psrah      %[ftmp5],   %[ftmp5],       %[ftmp10]               \n\t"
444cabdff1aSopenharmony_ci        "psrah      %[ftmp4],   %[ftmp4],       %[ftmp10]               \n\t"
445cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp3],   %[ftmp3],       %[ftmp2]                \n\t"
446cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
447cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp5]                \n\t"
448cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
449cabdff1aSopenharmony_ci        "packushb   %[ftmp3],   %[ftmp3],       %[ftmp2]                \n\t"
450cabdff1aSopenharmony_ci        "packushb   %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
451cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp3], %[dst], 0x00)
452cabdff1aSopenharmony_ci        MMI_SWXC1(%[ftmp0], %[dst], %[stride], 0x00)
453cabdff1aSopenharmony_ci        PTR_ADDU   "%[dst],     %[dst],         %[stride]               \n\t"
454cabdff1aSopenharmony_ci        PTR_ADDU   "%[dst],     %[dst],         %[stride]               \n\t"
455cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp3], %[dst], 0x00)
456cabdff1aSopenharmony_ci        MMI_LWXC1(%[ftmp0], %[dst], %[stride], 0x00)
457cabdff1aSopenharmony_ci        "psrah      %[ftmp6],   %[ftmp6],       %[ftmp10]               \n\t"
458cabdff1aSopenharmony_ci        "psrah      %[ftmp1],   %[ftmp1],       %[ftmp10]               \n\t"
459cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp3],   %[ftmp3],       %[ftmp2]                \n\t"
460cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
461cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp6]                \n\t"
462cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
463cabdff1aSopenharmony_ci        "packushb   %[ftmp3],   %[ftmp3],       %[ftmp2]                \n\t"
464cabdff1aSopenharmony_ci        "packushb   %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
465cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp3], %[dst], 0x00)
466cabdff1aSopenharmony_ci        MMI_SWXC1(%[ftmp0], %[dst], %[stride], 0x00)
467cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp5], $sp, 0x00)
468cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp4], $sp, 0x10)
469cabdff1aSopenharmony_ci        "dmtc1      %[tmp1],    %[ftmp6]                                \n\t"
470cabdff1aSopenharmony_ci        PTR_ADDU   "%[dst],     %[dst],         %[stride]               \n\t"
471cabdff1aSopenharmony_ci        PTR_ADDU   "%[dst],     %[dst],         %[stride]               \n\t"
472cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp3], %[dst], 0x00)
473cabdff1aSopenharmony_ci        MMI_LWXC1(%[ftmp0], %[dst], %[stride], 0x00)
474cabdff1aSopenharmony_ci        "psrah      %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
475cabdff1aSopenharmony_ci        "psrah      %[ftmp5],   %[ftmp5],       %[ftmp10]               \n\t"
476cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp3],   %[ftmp3],       %[ftmp2]                \n\t"
477cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
478cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp7]                \n\t"
479cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp5]                \n\t"
480cabdff1aSopenharmony_ci        "packushb   %[ftmp3],   %[ftmp3],       %[ftmp2]                \n\t"
481cabdff1aSopenharmony_ci        "packushb   %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
482cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp3], %[dst], 0x00)
483cabdff1aSopenharmony_ci        MMI_SWXC1(%[ftmp0], %[dst], %[stride], 0x00)
484cabdff1aSopenharmony_ci        PTR_ADDU   "%[dst],     %[dst],         %[stride]               \n\t"
485cabdff1aSopenharmony_ci        PTR_ADDU   "%[dst],     %[dst],         %[stride]               \n\t"
486cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp3], %[dst], 0x00)
487cabdff1aSopenharmony_ci        MMI_LWXC1(%[ftmp0], %[dst], %[stride], 0x00)
488cabdff1aSopenharmony_ci        "psrah      %[ftmp4],   %[ftmp4],       %[ftmp10]               \n\t"
489cabdff1aSopenharmony_ci        "psrah      %[ftmp6],   %[ftmp6],       %[ftmp10]               \n\t"
490cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp3],   %[ftmp3],       %[ftmp2]                \n\t"
491cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
492cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
493cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp6]                \n\t"
494cabdff1aSopenharmony_ci        "packushb   %[ftmp3],   %[ftmp3],       %[ftmp2]                \n\t"
495cabdff1aSopenharmony_ci        "packushb   %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
496cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp3], %[dst], 0x00)
497cabdff1aSopenharmony_ci        MMI_SWXC1(%[ftmp0], %[dst], %[stride], 0x00)
498cabdff1aSopenharmony_ci        "dmtc1      %[tmp4],    %[ftmp1]                                \n\t"
499cabdff1aSopenharmony_ci        "dmtc1      %[tmp2],    %[ftmp6]                                \n\t"
500cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp4], $sp, 0x18)
501cabdff1aSopenharmony_ci        "mov.d      %[ftmp5],   %[ftmp4]                                \n\t"
502cabdff1aSopenharmony_ci        "psrah      %[ftmp4],   %[ftmp4],       %[ftmp8]                \n\t"
503cabdff1aSopenharmony_ci        "psrah      %[ftmp7],   %[ftmp11],      %[ftmp8]                \n\t"
504cabdff1aSopenharmony_ci        "paddh      %[ftmp7],   %[ftmp7],       %[ftmp11]               \n\t"
505cabdff1aSopenharmony_ci        "paddh      %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
506cabdff1aSopenharmony_ci        "paddh      %[ftmp7],   %[ftmp7],       %[ftmp15]               \n\t"
507cabdff1aSopenharmony_ci        "paddh      %[ftmp4],   %[ftmp4],       %[ftmp11]               \n\t"
508cabdff1aSopenharmony_ci        "psubh      %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
509cabdff1aSopenharmony_ci        "paddh      %[ftmp4],   %[ftmp4],       %[ftmp1]                \n\t"
510cabdff1aSopenharmony_ci        "psubh      %[ftmp5],   %[ftmp5],       %[ftmp1]                \n\t"
511cabdff1aSopenharmony_ci        "psubh      %[ftmp3],   %[ftmp11],      %[ftmp1]                \n\t"
512cabdff1aSopenharmony_ci        "psrah      %[ftmp1],   %[ftmp1],       %[ftmp8]                \n\t"
513cabdff1aSopenharmony_ci        "paddh      %[ftmp5],   %[ftmp5],       %[ftmp15]               \n\t"
514cabdff1aSopenharmony_ci        "psubh      %[ftmp3],   %[ftmp3],       %[ftmp15]               \n\t"
515cabdff1aSopenharmony_ci        "psrah      %[ftmp2],   %[ftmp15],      %[ftmp8]                \n\t"
516cabdff1aSopenharmony_ci        "psubh      %[ftmp5],   %[ftmp5],       %[ftmp1]                \n\t"
517cabdff1aSopenharmony_ci        "psubh      %[ftmp3],   %[ftmp3],       %[ftmp2]                \n\t"
518cabdff1aSopenharmony_ci        "mov.d      %[ftmp2],   %[ftmp4]                                \n\t"
519cabdff1aSopenharmony_ci        "psrah      %[ftmp4],   %[ftmp4],       %[ftmp9]                \n\t"
520cabdff1aSopenharmony_ci        "psrah      %[ftmp1],   %[ftmp7],       %[ftmp9]                \n\t"
521cabdff1aSopenharmony_ci        "paddh      %[ftmp4],   %[ftmp4],       %[ftmp3]                \n\t"
522cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp5]                \n\t"
523cabdff1aSopenharmony_ci        "psrah      %[ftmp5],   %[ftmp5],       %[ftmp9]                \n\t"
524cabdff1aSopenharmony_ci        "psrah      %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
525cabdff1aSopenharmony_ci        "psubh      %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
526cabdff1aSopenharmony_ci        "psubh      %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
527cabdff1aSopenharmony_ci        "mov.d      %[ftmp3],   %[ftmp13]                               \n\t"
528cabdff1aSopenharmony_ci        "psrah      %[ftmp0],   %[ftmp13],      %[ftmp8]                \n\t"
529cabdff1aSopenharmony_ci        "psrah      %[ftmp7],   %[ftmp6],       %[ftmp8]                \n\t"
530cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp6]                \n\t"
531cabdff1aSopenharmony_ci        "psubh      %[ftmp7],   %[ftmp7],       %[ftmp3]                \n\t"
532cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp6], $sp, 0x08)
533cabdff1aSopenharmony_ci        "dmtc1      %[tmp6],    %[ftmp3]                                \n\t"
534cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp6]                \n\t"
535cabdff1aSopenharmony_ci        "paddh      %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
536cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp3]                \n\t"
537cabdff1aSopenharmony_ci        "psubh      %[ftmp6],   %[ftmp6],       %[ftmp3]                \n\t"
538cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp3]                \n\t"
539cabdff1aSopenharmony_ci        "paddh      %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
540cabdff1aSopenharmony_ci        "psubh      %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
541cabdff1aSopenharmony_ci        "paddh      %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
542cabdff1aSopenharmony_ci        "paddh      %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
543cabdff1aSopenharmony_ci        "psubh      %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
544cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
545cabdff1aSopenharmony_ci        "paddh      %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
546cabdff1aSopenharmony_ci        "psubh      %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
547cabdff1aSopenharmony_ci        "paddh      %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
548cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp6]                \n\t"
549cabdff1aSopenharmony_ci        "psubh      %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
550cabdff1aSopenharmony_ci        "paddh      %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
551cabdff1aSopenharmony_ci        "paddh      %[ftmp4],   %[ftmp4],       %[ftmp3]                \n\t"
552cabdff1aSopenharmony_ci        "psubh      %[ftmp6],   %[ftmp6],       %[ftmp1]                \n\t"
553cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp3]                \n\t"
554cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp6], $sp, 0x08)
555cabdff1aSopenharmony_ci        "psubh      %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
556cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp7], $sp, 0x18)
557cabdff1aSopenharmony_ci        "dmfc1      %[tmp2],    %[ftmp0]                                \n\t"
558cabdff1aSopenharmony_ci        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
559cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp6], %[addr0], 0x00)
560cabdff1aSopenharmony_ci        MMI_LWXC1(%[ftmp7], %[addr0], %[stride], 0x00)
561cabdff1aSopenharmony_ci        "psrah      %[ftmp2],   %[ftmp2],       %[ftmp10]               \n\t"
562cabdff1aSopenharmony_ci        "psrah      %[ftmp5],   %[ftmp5],       %[ftmp10]               \n\t"
563cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp6],   %[ftmp6],       %[ftmp0]                \n\t"
564cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
565cabdff1aSopenharmony_ci        "paddh      %[ftmp6],   %[ftmp6],       %[ftmp2]                \n\t"
566cabdff1aSopenharmony_ci        "paddh      %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
567cabdff1aSopenharmony_ci        "packushb   %[ftmp6],   %[ftmp6],       %[ftmp0]                \n\t"
568cabdff1aSopenharmony_ci        "packushb   %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
569cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp6], %[addr0], 0x00)
570cabdff1aSopenharmony_ci        MMI_SWXC1(%[ftmp7], %[addr0], %[stride], 0x00)
571cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr0],   %[addr0],       %[stride]               \n\t"
572cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr0],   %[addr0],       %[stride]               \n\t"
573cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp6], %[addr0], 0x00)
574cabdff1aSopenharmony_ci        MMI_LWXC1(%[ftmp7], %[addr0], %[stride], 0x00)
575cabdff1aSopenharmony_ci        "psrah      %[ftmp1],   %[ftmp1],       %[ftmp10]               \n\t"
576cabdff1aSopenharmony_ci        "psrah      %[ftmp4],   %[ftmp4],       %[ftmp10]               \n\t"
577cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp6],   %[ftmp6],       %[ftmp0]                \n\t"
578cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
579cabdff1aSopenharmony_ci        "paddh      %[ftmp6],   %[ftmp6],       %[ftmp1]                \n\t"
580cabdff1aSopenharmony_ci        "paddh      %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
581cabdff1aSopenharmony_ci        "packushb   %[ftmp6],   %[ftmp6],       %[ftmp0]                \n\t"
582cabdff1aSopenharmony_ci        "packushb   %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
583cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp6], %[addr0], 0x00)
584cabdff1aSopenharmony_ci        MMI_SWXC1(%[ftmp7], %[addr0], %[stride], 0x00)
585cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp2], $sp, 0x08)
586cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp5], $sp, 0x18)
587cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr0],   %[addr0],       %[stride]               \n\t"
588cabdff1aSopenharmony_ci        "dmtc1      %[tmp2],    %[ftmp1]                                \n\t"
589cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr0],   %[addr0],       %[stride]               \n\t"
590cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp6], %[addr0], 0x00)
591cabdff1aSopenharmony_ci        MMI_LWXC1(%[ftmp7], %[addr0], %[stride], 0x00)
592cabdff1aSopenharmony_ci        "psrah      %[ftmp3],   %[ftmp3],       %[ftmp10]               \n\t"
593cabdff1aSopenharmony_ci        "psrah      %[ftmp2],   %[ftmp2],       %[ftmp10]               \n\t"
594cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp6],   %[ftmp6],       %[ftmp0]                \n\t"
595cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
596cabdff1aSopenharmony_ci        "paddh      %[ftmp6],   %[ftmp6],       %[ftmp3]                \n\t"
597cabdff1aSopenharmony_ci        "paddh      %[ftmp7],   %[ftmp7],       %[ftmp2]                \n\t"
598cabdff1aSopenharmony_ci        "packushb   %[ftmp6],   %[ftmp6],       %[ftmp0]                \n\t"
599cabdff1aSopenharmony_ci        "packushb   %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
600cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp6], %[addr0], 0x00)
601cabdff1aSopenharmony_ci        MMI_SWXC1(%[ftmp7], %[addr0], %[stride], 0x00)
602cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr0],   %[addr0],       %[stride]               \n\t"
603cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr0],   %[addr0],       %[stride]               \n\t"
604cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp6], %[addr0], 0x00)
605cabdff1aSopenharmony_ci        MMI_LWXC1(%[ftmp7], %[addr0], %[stride], 0x00)
606cabdff1aSopenharmony_ci        "psrah      %[ftmp5],   %[ftmp5],       %[ftmp10]               \n\t"
607cabdff1aSopenharmony_ci        "psrah      %[ftmp1],   %[ftmp1],       %[ftmp10]               \n\t"
608cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp6],   %[ftmp6],       %[ftmp0]                \n\t"
609cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
610cabdff1aSopenharmony_ci        "paddh      %[ftmp6],   %[ftmp6],       %[ftmp5]                \n\t"
611cabdff1aSopenharmony_ci        "paddh      %[ftmp7],   %[ftmp7],       %[ftmp1]                \n\t"
612cabdff1aSopenharmony_ci        "packushb   %[ftmp6],   %[ftmp6],       %[ftmp0]                \n\t"
613cabdff1aSopenharmony_ci        "packushb   %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
614cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp6], %[addr0], 0x00)
615cabdff1aSopenharmony_ci        MMI_SWXC1(%[ftmp7], %[addr0], %[stride], 0x00)
616cabdff1aSopenharmony_ci        PTR_ADDIU  "$sp,        $sp,            0x20                    \n\t"
617cabdff1aSopenharmony_ci        : [ftmp0]"=&f"(ftmp[0]),            [ftmp1]"=&f"(ftmp[1]),
618cabdff1aSopenharmony_ci          [ftmp2]"=&f"(ftmp[2]),            [ftmp3]"=&f"(ftmp[3]),
619cabdff1aSopenharmony_ci          [ftmp4]"=&f"(ftmp[4]),            [ftmp5]"=&f"(ftmp[5]),
620cabdff1aSopenharmony_ci          [ftmp6]"=&f"(ftmp[6]),            [ftmp7]"=&f"(ftmp[7]),
621cabdff1aSopenharmony_ci          [ftmp8]"=&f"(ftmp[8]),            [ftmp9]"=&f"(ftmp[9]),
622cabdff1aSopenharmony_ci          [ftmp10]"=&f"(ftmp[10]),          [ftmp11]"=&f"(ftmp[11]),
623cabdff1aSopenharmony_ci          [ftmp12]"=&f"(ftmp[12]),          [ftmp13]"=&f"(ftmp[13]),
624cabdff1aSopenharmony_ci          [ftmp14]"=&f"(ftmp[14]),          [ftmp15]"=&f"(ftmp[15]),
625cabdff1aSopenharmony_ci          [tmp0]"=&r"(tmp[0]),              [tmp1]"=&r"(tmp[1]),
626cabdff1aSopenharmony_ci          [tmp2]"=&r"(tmp[2]),              [tmp3]"=&r"(tmp[3]),
627cabdff1aSopenharmony_ci          [tmp4]"=&r"(tmp[4]),              [tmp5]"=&r"(tmp[5]),
628cabdff1aSopenharmony_ci          [tmp6]"=&r"(tmp[6]),
629cabdff1aSopenharmony_ci          RESTRICT_ASM_LOW32
630cabdff1aSopenharmony_ci          RESTRICT_ASM_ADDRT
631cabdff1aSopenharmony_ci          [addr0]"=&r"(addr[0])
632cabdff1aSopenharmony_ci        : [dst]"r"(dst),                    [block]"r"(block),
633cabdff1aSopenharmony_ci          [stride]"r"((mips_reg)stride)
634cabdff1aSopenharmony_ci        : "memory"
635cabdff1aSopenharmony_ci    );
636cabdff1aSopenharmony_ci
637cabdff1aSopenharmony_ci}
638cabdff1aSopenharmony_ci
639cabdff1aSopenharmony_civoid ff_h264_idct_dc_add_8_mmi(uint8_t *dst, int16_t *block, int stride)
640cabdff1aSopenharmony_ci{
641cabdff1aSopenharmony_ci    int dc = (block[0] + 32) >> 6;
642cabdff1aSopenharmony_ci    double ftmp[6];
643cabdff1aSopenharmony_ci    DECLARE_VAR_LOW32;
644cabdff1aSopenharmony_ci
645cabdff1aSopenharmony_ci    block[0] = 0;
646cabdff1aSopenharmony_ci
647cabdff1aSopenharmony_ci    __asm__ volatile (
648cabdff1aSopenharmony_ci        "mtc1       %[dc],      %[ftmp5]                                \n\t"
649cabdff1aSopenharmony_ci        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
650cabdff1aSopenharmony_ci        "pshufh     %[ftmp5],   %[ftmp5],       %[ftmp0]                \n\t"
651cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp1], %[dst0], 0x00)
652cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp2], %[dst1], 0x00)
653cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp3], %[dst2], 0x00)
654cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp4], %[dst3], 0x00)
655cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp1],   %[ftmp1],       %[ftmp0]                \n\t"
656cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
657cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
658cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp4],   %[ftmp4],       %[ftmp0]                \n\t"
659cabdff1aSopenharmony_ci        "paddsh     %[ftmp1],   %[ftmp1],       %[ftmp5]                \n\t"
660cabdff1aSopenharmony_ci        "paddsh     %[ftmp2],   %[ftmp2],       %[ftmp5]                \n\t"
661cabdff1aSopenharmony_ci        "paddsh     %[ftmp3],   %[ftmp3],       %[ftmp5]                \n\t"
662cabdff1aSopenharmony_ci        "paddsh     %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
663cabdff1aSopenharmony_ci        "packushb   %[ftmp1],   %[ftmp1],       %[ftmp0]                \n\t"
664cabdff1aSopenharmony_ci        "packushb   %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
665cabdff1aSopenharmony_ci        "packushb   %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
666cabdff1aSopenharmony_ci        "packushb   %[ftmp4],   %[ftmp4],       %[ftmp0]                \n\t"
667cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp1], %[dst0], 0x00)
668cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp2], %[dst1], 0x00)
669cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp3], %[dst2], 0x00)
670cabdff1aSopenharmony_ci        MMI_SWC1(%[ftmp4], %[dst3], 0x00)
671cabdff1aSopenharmony_ci        : [ftmp0]"=&f"(ftmp[0]),            [ftmp1]"=&f"(ftmp[1]),
672cabdff1aSopenharmony_ci          [ftmp2]"=&f"(ftmp[2]),            [ftmp3]"=&f"(ftmp[3]),
673cabdff1aSopenharmony_ci          [ftmp4]"=&f"(ftmp[4]),
674cabdff1aSopenharmony_ci          RESTRICT_ASM_LOW32
675cabdff1aSopenharmony_ci          [ftmp5]"=&f"(ftmp[5])
676cabdff1aSopenharmony_ci        : [dst0]"r"(dst),                   [dst1]"r"(dst+stride),
677cabdff1aSopenharmony_ci          [dst2]"r"(dst+2*stride),          [dst3]"r"(dst+3*stride),
678cabdff1aSopenharmony_ci          [dc]"r"(dc)
679cabdff1aSopenharmony_ci        : "memory"
680cabdff1aSopenharmony_ci    );
681cabdff1aSopenharmony_ci}
682cabdff1aSopenharmony_ci
683cabdff1aSopenharmony_civoid ff_h264_idct8_dc_add_8_mmi(uint8_t *dst, int16_t *block, int stride)
684cabdff1aSopenharmony_ci{
685cabdff1aSopenharmony_ci    int dc = (block[0] + 32) >> 6;
686cabdff1aSopenharmony_ci    double ftmp[10];
687cabdff1aSopenharmony_ci    DECLARE_VAR_ALL64;
688cabdff1aSopenharmony_ci
689cabdff1aSopenharmony_ci    block[0] = 0;
690cabdff1aSopenharmony_ci
691cabdff1aSopenharmony_ci    __asm__ volatile (
692cabdff1aSopenharmony_ci        "mtc1       %[dc],      %[ftmp5]                                \n\t"
693cabdff1aSopenharmony_ci        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
694cabdff1aSopenharmony_ci        "pshufh     %[ftmp5],   %[ftmp5],       %[ftmp0]                \n\t"
695cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp1], %[dst0], 0x00)
696cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp2], %[dst1], 0x00)
697cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp3], %[dst2], 0x00)
698cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp4], %[dst3], 0x00)
699cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp6],   %[ftmp1],       %[ftmp0]                \n\t"
700cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp1],   %[ftmp1],       %[ftmp0]                \n\t"
701cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp7],   %[ftmp2],       %[ftmp0]                \n\t"
702cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
703cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp8],   %[ftmp3],       %[ftmp0]                \n\t"
704cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
705cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp9],   %[ftmp4],       %[ftmp0]                \n\t"
706cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp4],   %[ftmp4],       %[ftmp0]                \n\t"
707cabdff1aSopenharmony_ci        "paddsh     %[ftmp6],   %[ftmp6],       %[ftmp5]                \n\t"
708cabdff1aSopenharmony_ci        "paddsh     %[ftmp1],   %[ftmp1],       %[ftmp5]                \n\t"
709cabdff1aSopenharmony_ci        "paddsh     %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
710cabdff1aSopenharmony_ci        "paddsh     %[ftmp2],   %[ftmp2],       %[ftmp5]                \n\t"
711cabdff1aSopenharmony_ci        "paddsh     %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
712cabdff1aSopenharmony_ci        "paddsh     %[ftmp3],   %[ftmp3],       %[ftmp5]                \n\t"
713cabdff1aSopenharmony_ci        "paddsh     %[ftmp9],   %[ftmp9],       %[ftmp5]                \n\t"
714cabdff1aSopenharmony_ci        "paddsh     %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
715cabdff1aSopenharmony_ci        "packushb   %[ftmp1],   %[ftmp1],       %[ftmp6]                \n\t"
716cabdff1aSopenharmony_ci        "packushb   %[ftmp2],   %[ftmp2],       %[ftmp7]                \n\t"
717cabdff1aSopenharmony_ci        "packushb   %[ftmp3],   %[ftmp3],       %[ftmp8]                \n\t"
718cabdff1aSopenharmony_ci        "packushb   %[ftmp4],   %[ftmp4],       %[ftmp9]                \n\t"
719cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp1], %[dst0], 0x00)
720cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[dst1], 0x00)
721cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp3], %[dst2], 0x00)
722cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp4], %[dst3], 0x00)
723cabdff1aSopenharmony_ci
724cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp1], %[dst4], 0x00)
725cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp2], %[dst5], 0x00)
726cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp3], %[dst6], 0x00)
727cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp4], %[dst7], 0x00)
728cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp6],   %[ftmp1],       %[ftmp0]                \n\t"
729cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp1],   %[ftmp1],       %[ftmp0]                \n\t"
730cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp7],   %[ftmp2],       %[ftmp0]                \n\t"
731cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
732cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp8],   %[ftmp3],       %[ftmp0]                \n\t"
733cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
734cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp9],   %[ftmp4],       %[ftmp0]                \n\t"
735cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp4],   %[ftmp4],       %[ftmp0]                \n\t"
736cabdff1aSopenharmony_ci        "paddsh     %[ftmp6],   %[ftmp6],       %[ftmp5]                \n\t"
737cabdff1aSopenharmony_ci        "paddsh     %[ftmp1],   %[ftmp1],       %[ftmp5]                \n\t"
738cabdff1aSopenharmony_ci        "paddsh     %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
739cabdff1aSopenharmony_ci        "paddsh     %[ftmp2],   %[ftmp2],       %[ftmp5]                \n\t"
740cabdff1aSopenharmony_ci        "paddsh     %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
741cabdff1aSopenharmony_ci        "paddsh     %[ftmp3],   %[ftmp3],       %[ftmp5]                \n\t"
742cabdff1aSopenharmony_ci        "paddsh     %[ftmp9],   %[ftmp9],       %[ftmp5]                \n\t"
743cabdff1aSopenharmony_ci        "paddsh     %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
744cabdff1aSopenharmony_ci        "packushb   %[ftmp1],   %[ftmp1],       %[ftmp6]                \n\t"
745cabdff1aSopenharmony_ci        "packushb   %[ftmp2],   %[ftmp2],       %[ftmp7]                \n\t"
746cabdff1aSopenharmony_ci        "packushb   %[ftmp3],   %[ftmp3],       %[ftmp8]                \n\t"
747cabdff1aSopenharmony_ci        "packushb   %[ftmp4],   %[ftmp4],       %[ftmp9]                \n\t"
748cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp1], %[dst4], 0x00)
749cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[dst5], 0x00)
750cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp3], %[dst6], 0x00)
751cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp4], %[dst7], 0x00)
752cabdff1aSopenharmony_ci        : [ftmp0]"=&f"(ftmp[0]),            [ftmp1]"=&f"(ftmp[1]),
753cabdff1aSopenharmony_ci          [ftmp2]"=&f"(ftmp[2]),            [ftmp3]"=&f"(ftmp[3]),
754cabdff1aSopenharmony_ci          [ftmp4]"=&f"(ftmp[4]),            [ftmp5]"=&f"(ftmp[5]),
755cabdff1aSopenharmony_ci          [ftmp6]"=&f"(ftmp[6]),            [ftmp7]"=&f"(ftmp[7]),
756cabdff1aSopenharmony_ci          [ftmp8]"=&f"(ftmp[8]),
757cabdff1aSopenharmony_ci          RESTRICT_ASM_ALL64
758cabdff1aSopenharmony_ci          [ftmp9]"=&f"(ftmp[9])
759cabdff1aSopenharmony_ci        : [dst0]"r"(dst),                   [dst1]"r"(dst+stride),
760cabdff1aSopenharmony_ci          [dst2]"r"(dst+2*stride),          [dst3]"r"(dst+3*stride),
761cabdff1aSopenharmony_ci          [dst4]"r"(dst+4*stride),          [dst5]"r"(dst+5*stride),
762cabdff1aSopenharmony_ci          [dst6]"r"(dst+6*stride),          [dst7]"r"(dst+7*stride),
763cabdff1aSopenharmony_ci          [dc]"r"(dc)
764cabdff1aSopenharmony_ci        : "memory"
765cabdff1aSopenharmony_ci    );
766cabdff1aSopenharmony_ci}
767cabdff1aSopenharmony_ci
768cabdff1aSopenharmony_civoid ff_h264_idct_add16_8_mmi(uint8_t *dst, const int *block_offset,
769cabdff1aSopenharmony_ci                              int16_t *block, int stride,
770cabdff1aSopenharmony_ci                              const uint8_t nnzc[5 * 8])
771cabdff1aSopenharmony_ci{
772cabdff1aSopenharmony_ci    int i;
773cabdff1aSopenharmony_ci    for(i=0; i<16; i++){
774cabdff1aSopenharmony_ci        int nnz = nnzc[ scan8[i] ];
775cabdff1aSopenharmony_ci        if(nnz){
776cabdff1aSopenharmony_ci            if(nnz==1 && ((int16_t*)block)[i*16])
777cabdff1aSopenharmony_ci                ff_h264_idct_dc_add_8_mmi(dst + block_offset[i], block + i*16,
778cabdff1aSopenharmony_ci                        stride);
779cabdff1aSopenharmony_ci            else
780cabdff1aSopenharmony_ci                ff_h264_idct_add_8_mmi(dst + block_offset[i], block + i*16,
781cabdff1aSopenharmony_ci                        stride);
782cabdff1aSopenharmony_ci        }
783cabdff1aSopenharmony_ci    }
784cabdff1aSopenharmony_ci}
785cabdff1aSopenharmony_ci
786cabdff1aSopenharmony_civoid ff_h264_idct_add16intra_8_mmi(uint8_t *dst, const int *block_offset,
787cabdff1aSopenharmony_ci        int16_t *block, int stride, const uint8_t nnzc[5 * 8])
788cabdff1aSopenharmony_ci{
789cabdff1aSopenharmony_ci    int i;
790cabdff1aSopenharmony_ci    for(i=0; i<16; i++){
791cabdff1aSopenharmony_ci        if(nnzc[ scan8[i] ])
792cabdff1aSopenharmony_ci            ff_h264_idct_add_8_mmi(dst + block_offset[i], block + i*16, stride);
793cabdff1aSopenharmony_ci        else if(((int16_t*)block)[i*16])
794cabdff1aSopenharmony_ci            ff_h264_idct_dc_add_8_mmi(dst + block_offset[i], block + i*16,
795cabdff1aSopenharmony_ci                    stride);
796cabdff1aSopenharmony_ci    }
797cabdff1aSopenharmony_ci}
798cabdff1aSopenharmony_ci
799cabdff1aSopenharmony_civoid ff_h264_idct8_add4_8_mmi(uint8_t *dst, const int *block_offset,
800cabdff1aSopenharmony_ci        int16_t *block, int stride, const uint8_t nnzc[5 * 8])
801cabdff1aSopenharmony_ci{
802cabdff1aSopenharmony_ci    int i;
803cabdff1aSopenharmony_ci    for(i=0; i<16; i+=4){
804cabdff1aSopenharmony_ci        int nnz = nnzc[ scan8[i] ];
805cabdff1aSopenharmony_ci        if(nnz){
806cabdff1aSopenharmony_ci            if(nnz==1 && ((int16_t*)block)[i*16])
807cabdff1aSopenharmony_ci                ff_h264_idct8_dc_add_8_mmi(dst + block_offset[i],
808cabdff1aSopenharmony_ci                        block + i*16, stride);
809cabdff1aSopenharmony_ci            else
810cabdff1aSopenharmony_ci                ff_h264_idct8_add_8_mmi(dst + block_offset[i], block + i*16,
811cabdff1aSopenharmony_ci                        stride);
812cabdff1aSopenharmony_ci        }
813cabdff1aSopenharmony_ci    }
814cabdff1aSopenharmony_ci}
815cabdff1aSopenharmony_ci
816cabdff1aSopenharmony_civoid ff_h264_idct_add8_8_mmi(uint8_t **dest, const int *block_offset,
817cabdff1aSopenharmony_ci        int16_t *block, int stride, const uint8_t nnzc[15*8])
818cabdff1aSopenharmony_ci{
819cabdff1aSopenharmony_ci    int i, j;
820cabdff1aSopenharmony_ci    for(j=1; j<3; j++){
821cabdff1aSopenharmony_ci        for(i=j*16; i<j*16+4; i++){
822cabdff1aSopenharmony_ci            if(nnzc[ scan8[i] ])
823cabdff1aSopenharmony_ci                ff_h264_idct_add_8_mmi(dest[j-1] + block_offset[i],
824cabdff1aSopenharmony_ci                        block + i*16, stride);
825cabdff1aSopenharmony_ci            else if(((int16_t*)block)[i*16])
826cabdff1aSopenharmony_ci                ff_h264_idct_dc_add_8_mmi(dest[j-1] + block_offset[i],
827cabdff1aSopenharmony_ci                        block + i*16, stride);
828cabdff1aSopenharmony_ci        }
829cabdff1aSopenharmony_ci    }
830cabdff1aSopenharmony_ci}
831cabdff1aSopenharmony_ci
832cabdff1aSopenharmony_civoid ff_h264_idct_add8_422_8_mmi(uint8_t **dest, const int *block_offset,
833cabdff1aSopenharmony_ci        int16_t *block, int stride, const uint8_t nnzc[15*8])
834cabdff1aSopenharmony_ci{
835cabdff1aSopenharmony_ci    int i, j;
836cabdff1aSopenharmony_ci
837cabdff1aSopenharmony_ci    for(j=1; j<3; j++){
838cabdff1aSopenharmony_ci        for(i=j*16; i<j*16+4; i++){
839cabdff1aSopenharmony_ci            if(nnzc[ scan8[i] ])
840cabdff1aSopenharmony_ci                ff_h264_idct_add_8_mmi(dest[j-1] + block_offset[i],
841cabdff1aSopenharmony_ci                        block + i*16, stride);
842cabdff1aSopenharmony_ci            else if(((int16_t*)block)[i*16])
843cabdff1aSopenharmony_ci                ff_h264_idct_dc_add_8_mmi(dest[j-1] + block_offset[i],
844cabdff1aSopenharmony_ci                        block + i*16, stride);
845cabdff1aSopenharmony_ci        }
846cabdff1aSopenharmony_ci    }
847cabdff1aSopenharmony_ci
848cabdff1aSopenharmony_ci    for(j=1; j<3; j++){
849cabdff1aSopenharmony_ci        for(i=j*16+4; i<j*16+8; i++){
850cabdff1aSopenharmony_ci            if(nnzc[ scan8[i+4] ])
851cabdff1aSopenharmony_ci                ff_h264_idct_add_8_mmi(dest[j-1] + block_offset[i+4],
852cabdff1aSopenharmony_ci                        block + i*16, stride);
853cabdff1aSopenharmony_ci            else if(((int16_t*)block)[i*16])
854cabdff1aSopenharmony_ci                ff_h264_idct_dc_add_8_mmi(dest[j-1] + block_offset[i+4],
855cabdff1aSopenharmony_ci                        block + i*16, stride);
856cabdff1aSopenharmony_ci        }
857cabdff1aSopenharmony_ci    }
858cabdff1aSopenharmony_ci}
859cabdff1aSopenharmony_ci
860cabdff1aSopenharmony_civoid ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input,
861cabdff1aSopenharmony_ci        int qmul)
862cabdff1aSopenharmony_ci{
863cabdff1aSopenharmony_ci    double ftmp[10];
864cabdff1aSopenharmony_ci    uint64_t tmp[2];
865cabdff1aSopenharmony_ci    DECLARE_VAR_ALL64;
866cabdff1aSopenharmony_ci
867cabdff1aSopenharmony_ci    __asm__ volatile (
868cabdff1aSopenharmony_ci        ".set       noreorder                                           \n\t"
869cabdff1aSopenharmony_ci        "dli        %[tmp0],    0x08                                    \n\t"
870cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp3], %[input], 0x18)
871cabdff1aSopenharmony_ci        "mtc1       %[tmp0],    %[ftmp8]                                \n\t"
872cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp2], %[input], 0x10)
873cabdff1aSopenharmony_ci        "dli        %[tmp0],    0x20                                    \n\t"
874cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp1], %[input], 0x08)
875cabdff1aSopenharmony_ci        "mtc1       %[tmp0],    %[ftmp9]                                \n\t"
876cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp0], %[input], 0x00)
877cabdff1aSopenharmony_ci        "mov.d      %[ftmp4],   %[ftmp3]                                \n\t"
878cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp2]                \n\t"
879cabdff1aSopenharmony_ci        "psubh      %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
880cabdff1aSopenharmony_ci        "mov.d      %[ftmp4],   %[ftmp1]                                \n\t"
881cabdff1aSopenharmony_ci        "paddh      %[ftmp1],   %[ftmp1],       %[ftmp0]                \n\t"
882cabdff1aSopenharmony_ci        "psubh      %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
883cabdff1aSopenharmony_ci        "mov.d      %[ftmp4],   %[ftmp3]                                \n\t"
884cabdff1aSopenharmony_ci        "paddh      %[ftmp3],   %[ftmp3],       %[ftmp1]                \n\t"
885cabdff1aSopenharmony_ci        "psubh      %[ftmp1],   %[ftmp1],       %[ftmp4]                \n\t"
886cabdff1aSopenharmony_ci        "mov.d      %[ftmp4],   %[ftmp2]                                \n\t"
887cabdff1aSopenharmony_ci        "paddh      %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
888cabdff1aSopenharmony_ci        "psubh      %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
889cabdff1aSopenharmony_ci        "mov.d      %[ftmp4],   %[ftmp3]                                \n\t"
890cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp3],   %[ftmp3],       %[ftmp1]                \n\t"
891cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp4],   %[ftmp4],       %[ftmp1]                \n\t"
892cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp1],   %[ftmp0],       %[ftmp2]                \n\t"
893cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
894cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp2],   %[ftmp3],       %[ftmp0]                \n\t"
895cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
896cabdff1aSopenharmony_ci        "mov.d      %[ftmp0],   %[ftmp4]                                \n\t"
897cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp4],   %[ftmp4],       %[ftmp1]                \n\t"
898cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
899cabdff1aSopenharmony_ci        "mov.d      %[ftmp1],   %[ftmp0]                                \n\t"
900cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
901cabdff1aSopenharmony_ci        "psubh      %[ftmp4],   %[ftmp4],       %[ftmp1]                \n\t"
902cabdff1aSopenharmony_ci        "mov.d      %[ftmp1],   %[ftmp2]                                \n\t"
903cabdff1aSopenharmony_ci        "paddh      %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
904cabdff1aSopenharmony_ci        "psubh      %[ftmp3],   %[ftmp3],       %[ftmp1]                \n\t"
905cabdff1aSopenharmony_ci        "mov.d      %[ftmp1],   %[ftmp0]                                \n\t"
906cabdff1aSopenharmony_ci        "paddh      %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
907cabdff1aSopenharmony_ci        "psubh      %[ftmp2],   %[ftmp2],       %[ftmp1]                \n\t"
908cabdff1aSopenharmony_ci        "mov.d      %[ftmp1],   %[ftmp4]                                \n\t"
909cabdff1aSopenharmony_ci        "daddi      %[tmp0],    %[qmul],        -0x7fff                 \n\t"
910cabdff1aSopenharmony_ci        "paddh      %[ftmp4],   %[ftmp4],       %[ftmp3]                \n\t"
911cabdff1aSopenharmony_ci        "bgtz       %[tmp0],    1f                                      \n\t"
912cabdff1aSopenharmony_ci        "psubh      %[ftmp3],   %[ftmp3],       %[ftmp1]                \n\t"
913cabdff1aSopenharmony_ci        "ori        %[tmp0],    $0,             0x80                    \n\t"
914cabdff1aSopenharmony_ci        "dsll       %[tmp0],    %[tmp0],        0x10                    \n\t"
915cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp1],   %[ftmp0],       %[ff_pw_1]              \n\t"
916cabdff1aSopenharmony_ci        "daddu      %[qmul],    %[qmul],        %[tmp0]                 \n\t"
917cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp0],   %[ftmp0],       %[ff_pw_1]              \n\t"
918cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp5],   %[ftmp2],       %[ff_pw_1]              \n\t"
919cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp2],   %[ftmp2],       %[ff_pw_1]              \n\t"
920cabdff1aSopenharmony_ci        "mtc1       %[qmul],    %[ftmp7]                                \n\t"
921cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
922cabdff1aSopenharmony_ci        "pmaddhw    %[ftmp0],   %[ftmp0],       %[ftmp7]                \n\t"
923cabdff1aSopenharmony_ci        "pmaddhw    %[ftmp2],   %[ftmp2],       %[ftmp7]                \n\t"
924cabdff1aSopenharmony_ci        "pmaddhw    %[ftmp1],   %[ftmp1],       %[ftmp7]                \n\t"
925cabdff1aSopenharmony_ci        "pmaddhw    %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
926cabdff1aSopenharmony_ci        "psraw      %[ftmp0],   %[ftmp0],       %[ftmp8]                \n\t"
927cabdff1aSopenharmony_ci        "psraw      %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
928cabdff1aSopenharmony_ci        "psraw      %[ftmp1],   %[ftmp1],       %[ftmp8]                \n\t"
929cabdff1aSopenharmony_ci        "psraw      %[ftmp5],   %[ftmp5],       %[ftmp8]                \n\t"
930cabdff1aSopenharmony_ci        "packsswh   %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
931cabdff1aSopenharmony_ci        "packsswh   %[ftmp2],   %[ftmp2],       %[ftmp5]                \n\t"
932cabdff1aSopenharmony_ci        "dmfc1      %[tmp1],    %[ftmp0]                                \n\t"
933cabdff1aSopenharmony_ci        "ssrld      %[ftmp0],   %[ftmp0],       %[ftmp9]                \n\t"
934cabdff1aSopenharmony_ci        "mfc1       %[input],   %[ftmp0]                                \n\t"
935cabdff1aSopenharmony_ci        "sh         %[tmp1],    0x00(%[output])                         \n\t"
936cabdff1aSopenharmony_ci        "sh         %[input],   0x80(%[output])                         \n\t"
937cabdff1aSopenharmony_ci        "dsrl       %[tmp1],    %[tmp1],        0x10                    \n\t"
938cabdff1aSopenharmony_ci        PTR_SRL    "%[input],   %[input],       0x10                    \n\t"
939cabdff1aSopenharmony_ci        "sh         %[tmp1],    0x20(%[output])                         \n\t"
940cabdff1aSopenharmony_ci        "sh         %[input],   0xa0(%[output])                         \n\t"
941cabdff1aSopenharmony_ci        "dmfc1      %[tmp1],    %[ftmp2]                                \n\t"
942cabdff1aSopenharmony_ci        "ssrld      %[ftmp2],   %[ftmp2],       %[ftmp9]                \n\t"
943cabdff1aSopenharmony_ci        "mfc1       %[input],   %[ftmp2]                                \n\t"
944cabdff1aSopenharmony_ci        "sh         %[tmp1],    0x40(%[output])                         \n\t"
945cabdff1aSopenharmony_ci        "sh         %[input],   0xc0(%[output])                         \n\t"
946cabdff1aSopenharmony_ci        "dsrl       %[tmp1],    %[tmp1],        0x10                    \n\t"
947cabdff1aSopenharmony_ci        PTR_SRL    "%[input],   %[input],       0x10                    \n\t"
948cabdff1aSopenharmony_ci        "sh         %[tmp1],    0x60(%[output])                         \n\t"
949cabdff1aSopenharmony_ci        "sh         %[input],   0xe0(%[output])                         \n\t"
950cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp1],   %[ftmp3],       %[ff_pw_1]              \n\t"
951cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp3],   %[ftmp3],       %[ff_pw_1]              \n\t"
952cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp5],   %[ftmp4],       %[ff_pw_1]              \n\t"
953cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp4],   %[ftmp4],       %[ff_pw_1]              \n\t"
954cabdff1aSopenharmony_ci        "mtc1       %[qmul],    %[ftmp7]                                \n\t"
955cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
956cabdff1aSopenharmony_ci        "pmaddhw    %[ftmp3],   %[ftmp3],       %[ftmp7]                \n\t"
957cabdff1aSopenharmony_ci        "pmaddhw    %[ftmp4],   %[ftmp4],       %[ftmp7]                \n\t"
958cabdff1aSopenharmony_ci        "pmaddhw    %[ftmp1],   %[ftmp1],       %[ftmp7]                \n\t"
959cabdff1aSopenharmony_ci        "pmaddhw    %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
960cabdff1aSopenharmony_ci        "psraw      %[ftmp3],   %[ftmp3],       %[ftmp8]                \n\t"
961cabdff1aSopenharmony_ci        "psraw      %[ftmp4],   %[ftmp4],       %[ftmp8]                \n\t"
962cabdff1aSopenharmony_ci        "psraw      %[ftmp1],   %[ftmp1],       %[ftmp8]                \n\t"
963cabdff1aSopenharmony_ci        "psraw      %[ftmp5],   %[ftmp5],       %[ftmp8]                \n\t"
964cabdff1aSopenharmony_ci        "packsswh   %[ftmp3],   %[ftmp3],       %[ftmp1]                \n\t"
965cabdff1aSopenharmony_ci        "packsswh   %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
966cabdff1aSopenharmony_ci        "dmfc1      %[tmp1],    %[ftmp3]                                \n\t"
967cabdff1aSopenharmony_ci        "ssrld      %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
968cabdff1aSopenharmony_ci        "mfc1       %[input],   %[ftmp3]                                \n\t"
969cabdff1aSopenharmony_ci        "sh         %[tmp1],    0x100(%[output])                        \n\t"
970cabdff1aSopenharmony_ci        "sh         %[input],   0x180(%[output])                        \n\t"
971cabdff1aSopenharmony_ci        "dsrl       %[tmp1],    %[tmp1],        0x10                    \n\t"
972cabdff1aSopenharmony_ci        PTR_SRL    "%[input],   %[input],       0x10                    \n\t"
973cabdff1aSopenharmony_ci        "sh         %[tmp1],    0x120(%[output])                        \n\t"
974cabdff1aSopenharmony_ci        "sh         %[input],   0x1a0(%[output])                        \n\t"
975cabdff1aSopenharmony_ci        "dmfc1      %[tmp1],    %[ftmp4]                                \n\t"
976cabdff1aSopenharmony_ci        "ssrld      %[ftmp4],   %[ftmp4],       %[ftmp9]                \n\t"
977cabdff1aSopenharmony_ci        "mfc1       %[input],   %[ftmp4]                                \n\t"
978cabdff1aSopenharmony_ci        "sh         %[tmp1],    0x140(%[output])                        \n\t"
979cabdff1aSopenharmony_ci        "sh         %[input],   0x1c0(%[output])                        \n\t"
980cabdff1aSopenharmony_ci        "dsrl       %[tmp1],    %[tmp1],        0x10                    \n\t"
981cabdff1aSopenharmony_ci        PTR_SRL    "%[input],   %[input],       0x10                    \n\t"
982cabdff1aSopenharmony_ci        "sh         %[tmp1],    0x160(%[output])                        \n\t"
983cabdff1aSopenharmony_ci        "j          2f                                                  \n\t"
984cabdff1aSopenharmony_ci        "sh         %[input],   0x1e0(%[output])                        \n\t"
985cabdff1aSopenharmony_ci        "1:                                                             \n\t"
986cabdff1aSopenharmony_ci        "ori        %[tmp0],    $0,             0x1f                    \n\t"
987cabdff1aSopenharmony_ci#if HAVE_LOONGSON3
988cabdff1aSopenharmony_ci        "clz        %[tmp1],    %[qmul]                                 \n\t"
989cabdff1aSopenharmony_ci#elif HAVE_LOONGSON2
990cabdff1aSopenharmony_ci#endif
991cabdff1aSopenharmony_ci        "ori        %[input],   $0,             0x07                    \n\t"
992cabdff1aSopenharmony_ci        "dsubu      %[tmp1],    %[tmp0],        %[tmp1]                 \n\t"
993cabdff1aSopenharmony_ci        "ori        %[tmp0],    $0,             0x80                    \n\t"
994cabdff1aSopenharmony_ci        "dsll       %[tmp0],    %[tmp0],        0x10                    \n\t"
995cabdff1aSopenharmony_ci        "daddu      %[qmul],    %[qmul],        %[tmp0]                 \n\t"
996cabdff1aSopenharmony_ci        "dsubu      %[tmp0],    %[tmp1],        %[input]                \n\t"
997cabdff1aSopenharmony_ci        "movn       %[tmp1],    %[input],       %[tmp0]                 \n\t"
998cabdff1aSopenharmony_ci        PTR_ADDIU  "%[input],   %[input],       0x01                    \n\t"
999cabdff1aSopenharmony_ci        "andi       %[tmp0],    %[tmp1],        0xff                    \n\t"
1000cabdff1aSopenharmony_ci        "srlv       %[qmul],    %[qmul],        %[tmp0]                 \n\t"
1001cabdff1aSopenharmony_ci        PTR_SUBU   "%[input],   %[input],       %[tmp1]                 \n\t"
1002cabdff1aSopenharmony_ci        "mtc1       %[input],   %[ftmp6]                                \n\t"
1003cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp1],   %[ftmp0],       %[ff_pw_1]              \n\t"
1004cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp0],   %[ftmp0],       %[ff_pw_1]              \n\t"
1005cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp5],   %[ftmp2],       %[ff_pw_1]              \n\t"
1006cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp2],   %[ftmp2],       %[ff_pw_1]              \n\t"
1007cabdff1aSopenharmony_ci        "mtc1       %[qmul],    %[ftmp7]                                \n\t"
1008cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
1009cabdff1aSopenharmony_ci        "pmaddhw    %[ftmp0],   %[ftmp0],       %[ftmp7]                \n\t"
1010cabdff1aSopenharmony_ci        "pmaddhw    %[ftmp2],   %[ftmp2],       %[ftmp7]                \n\t"
1011cabdff1aSopenharmony_ci        "pmaddhw    %[ftmp1],   %[ftmp1],       %[ftmp7]                \n\t"
1012cabdff1aSopenharmony_ci        "pmaddhw    %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1013cabdff1aSopenharmony_ci        "psraw      %[ftmp0],   %[ftmp0],       %[ftmp6]                \n\t"
1014cabdff1aSopenharmony_ci        "psraw      %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
1015cabdff1aSopenharmony_ci        "psraw      %[ftmp1],   %[ftmp1],       %[ftmp6]                \n\t"
1016cabdff1aSopenharmony_ci        "psraw      %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
1017cabdff1aSopenharmony_ci        "packsswh   %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
1018cabdff1aSopenharmony_ci        "packsswh   %[ftmp2],   %[ftmp2],       %[ftmp5]                \n\t"
1019cabdff1aSopenharmony_ci        "dmfc1      %[tmp1],    %[ftmp0]                                \n\t"
1020cabdff1aSopenharmony_ci        "ssrld      %[ftmp0],   %[ftmp0],       %[ftmp9]                \n\t"
1021cabdff1aSopenharmony_ci        "sh         %[tmp1],    0x00(%[output])                         \n\t"
1022cabdff1aSopenharmony_ci        "mfc1       %[input],   %[ftmp0]                                \n\t"
1023cabdff1aSopenharmony_ci        "dsrl       %[tmp1],    %[tmp1],        0x10                    \n\t"
1024cabdff1aSopenharmony_ci        "sh         %[input],   0x80(%[output])                         \n\t"
1025cabdff1aSopenharmony_ci        "sh         %[tmp1],    0x20(%[output])                         \n\t"
1026cabdff1aSopenharmony_ci        PTR_SRL    "%[input],   %[input],       0x10                    \n\t"
1027cabdff1aSopenharmony_ci        "dmfc1      %[tmp1],    %[ftmp2]                                \n\t"
1028cabdff1aSopenharmony_ci        "sh         %[input],   0xa0(%[output])                         \n\t"
1029cabdff1aSopenharmony_ci        "ssrld      %[ftmp2],   %[ftmp2],       %[ftmp9]                \n\t"
1030cabdff1aSopenharmony_ci        "sh         %[tmp1],    0x40(%[output])                         \n\t"
1031cabdff1aSopenharmony_ci        "mfc1       %[input],   %[ftmp2]                                \n\t"
1032cabdff1aSopenharmony_ci        "dsrl       %[tmp1],    %[tmp1],        0x10                    \n\t"
1033cabdff1aSopenharmony_ci        "sh         %[input],   0xc0(%[output])                         \n\t"
1034cabdff1aSopenharmony_ci        "sh         %[tmp1],    0x60(%[output])                         \n\t"
1035cabdff1aSopenharmony_ci        PTR_SRL    "%[input],   %[input],       0x10                    \n\t"
1036cabdff1aSopenharmony_ci        "sh         %[input],   0xe0(%[output])                         \n\t"
1037cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp1],   %[ftmp3],       %[ff_pw_1]              \n\t"
1038cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp3],   %[ftmp3],       %[ff_pw_1]              \n\t"
1039cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp5],   %[ftmp4],       %[ff_pw_1]              \n\t"
1040cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp4],   %[ftmp4],       %[ff_pw_1]              \n\t"
1041cabdff1aSopenharmony_ci        "mtc1       %[qmul],    %[ftmp7]                                \n\t"
1042cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
1043cabdff1aSopenharmony_ci        "pmaddhw    %[ftmp3],   %[ftmp3],       %[ftmp7]                \n\t"
1044cabdff1aSopenharmony_ci        "pmaddhw    %[ftmp4],   %[ftmp4],       %[ftmp7]                \n\t"
1045cabdff1aSopenharmony_ci        "pmaddhw    %[ftmp1],   %[ftmp1],       %[ftmp7]                \n\t"
1046cabdff1aSopenharmony_ci        "pmaddhw    %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1047cabdff1aSopenharmony_ci        "psraw      %[ftmp3],   %[ftmp3],       %[ftmp6]                \n\t"
1048cabdff1aSopenharmony_ci        "psraw      %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
1049cabdff1aSopenharmony_ci        "psraw      %[ftmp1],   %[ftmp1],       %[ftmp6]                \n\t"
1050cabdff1aSopenharmony_ci        "psraw      %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
1051cabdff1aSopenharmony_ci        "packsswh   %[ftmp3],   %[ftmp3],       %[ftmp1]                \n\t"
1052cabdff1aSopenharmony_ci        "packsswh   %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
1053cabdff1aSopenharmony_ci        "dmfc1      %[tmp1],    %[ftmp3]                                \n\t"
1054cabdff1aSopenharmony_ci        "ssrld      %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
1055cabdff1aSopenharmony_ci        "mfc1       %[input],   %[ftmp3]                                \n\t"
1056cabdff1aSopenharmony_ci        "sh         %[tmp1],    0x100(%[output])                        \n\t"
1057cabdff1aSopenharmony_ci        "sh         %[input],   0x180(%[output])                        \n\t"
1058cabdff1aSopenharmony_ci        "dsrl       %[tmp1],    %[tmp1],        0x10                    \n\t"
1059cabdff1aSopenharmony_ci        PTR_SRL    "%[input],   %[input],       0x10                    \n\t"
1060cabdff1aSopenharmony_ci        "sh         %[tmp1],    0x120(%[output])                        \n\t"
1061cabdff1aSopenharmony_ci        "sh         %[input],   0x1a0(%[output])                        \n\t"
1062cabdff1aSopenharmony_ci        "dmfc1      %[tmp1],    %[ftmp4]                                \n\t"
1063cabdff1aSopenharmony_ci        "ssrld      %[ftmp4],   %[ftmp4],       %[ftmp9]                \n\t"
1064cabdff1aSopenharmony_ci        "mfc1       %[input],   %[ftmp4]                                \n\t"
1065cabdff1aSopenharmony_ci        "sh         %[tmp1],    0x140(%[output])                        \n\t"
1066cabdff1aSopenharmony_ci        "sh         %[input],   0x1c0(%[output])                        \n\t"
1067cabdff1aSopenharmony_ci        "dsrl       %[tmp1],    %[tmp1],        0x10                    \n\t"
1068cabdff1aSopenharmony_ci        PTR_SRL    "%[input],   %[input],       0x10                    \n\t"
1069cabdff1aSopenharmony_ci        "sh         %[tmp1],    0x160(%[output])                        \n\t"
1070cabdff1aSopenharmony_ci        "sh         %[input],   0x1e0(%[output])                        \n\t"
1071cabdff1aSopenharmony_ci        "2:                                                             \n\t"
1072cabdff1aSopenharmony_ci        ".set       reorder                                             \n\t"
1073cabdff1aSopenharmony_ci        : [ftmp0]"=&f"(ftmp[0]),            [ftmp1]"=&f"(ftmp[1]),
1074cabdff1aSopenharmony_ci          [ftmp2]"=&f"(ftmp[2]),            [ftmp3]"=&f"(ftmp[3]),
1075cabdff1aSopenharmony_ci          [ftmp4]"=&f"(ftmp[4]),            [ftmp5]"=&f"(ftmp[5]),
1076cabdff1aSopenharmony_ci          [ftmp6]"=&f"(ftmp[6]),            [ftmp7]"=&f"(ftmp[7]),
1077cabdff1aSopenharmony_ci          [ftmp8]"=&f"(ftmp[8]),            [ftmp9]"=&f"(ftmp[9]),
1078cabdff1aSopenharmony_ci          [tmp0]"=&r"(tmp[0]),              [tmp1]"=&r"(tmp[1]),
1079cabdff1aSopenharmony_ci          RESTRICT_ASM_ALL64
1080cabdff1aSopenharmony_ci          [output]"+&r"(output),            [input]"+&r"(input),
1081cabdff1aSopenharmony_ci          [qmul]"+&r"(qmul)
1082cabdff1aSopenharmony_ci        : [ff_pw_1]"f"(ff_pw_1.f)
1083cabdff1aSopenharmony_ci        : "memory"
1084cabdff1aSopenharmony_ci    );
1085cabdff1aSopenharmony_ci}
1086cabdff1aSopenharmony_ci
1087cabdff1aSopenharmony_civoid ff_h264_chroma422_dc_dequant_idct_8_mmi(int16_t *block, int qmul)
1088cabdff1aSopenharmony_ci{
1089cabdff1aSopenharmony_ci    int temp[8];
1090cabdff1aSopenharmony_ci    int t[8];
1091cabdff1aSopenharmony_ci
1092cabdff1aSopenharmony_ci    temp[0] = block[0] + block[16];
1093cabdff1aSopenharmony_ci    temp[1] = block[0] - block[16];
1094cabdff1aSopenharmony_ci    temp[2] = block[32] + block[48];
1095cabdff1aSopenharmony_ci    temp[3] = block[32] - block[48];
1096cabdff1aSopenharmony_ci    temp[4] = block[64] + block[80];
1097cabdff1aSopenharmony_ci    temp[5] = block[64] - block[80];
1098cabdff1aSopenharmony_ci    temp[6] = block[96] + block[112];
1099cabdff1aSopenharmony_ci    temp[7] = block[96] - block[112];
1100cabdff1aSopenharmony_ci
1101cabdff1aSopenharmony_ci    t[0] = temp[0] + temp[4] + temp[2] + temp[6];
1102cabdff1aSopenharmony_ci    t[1] = temp[0] - temp[4] + temp[2] - temp[6];
1103cabdff1aSopenharmony_ci    t[2] = temp[0] - temp[4] - temp[2] + temp[6];
1104cabdff1aSopenharmony_ci    t[3] = temp[0] + temp[4] - temp[2] - temp[6];
1105cabdff1aSopenharmony_ci    t[4] = temp[1] + temp[5] + temp[3] + temp[7];
1106cabdff1aSopenharmony_ci    t[5] = temp[1] - temp[5] + temp[3] - temp[7];
1107cabdff1aSopenharmony_ci    t[6] = temp[1] - temp[5] - temp[3] + temp[7];
1108cabdff1aSopenharmony_ci    t[7] = temp[1] + temp[5] - temp[3] - temp[7];
1109cabdff1aSopenharmony_ci
1110cabdff1aSopenharmony_ci    block[  0]= (t[0]*qmul + 128) >> 8;
1111cabdff1aSopenharmony_ci    block[ 32]= (t[1]*qmul + 128) >> 8;
1112cabdff1aSopenharmony_ci    block[ 64]= (t[2]*qmul + 128) >> 8;
1113cabdff1aSopenharmony_ci    block[ 96]= (t[3]*qmul + 128) >> 8;
1114cabdff1aSopenharmony_ci    block[ 16]= (t[4]*qmul + 128) >> 8;
1115cabdff1aSopenharmony_ci    block[ 48]= (t[5]*qmul + 128) >> 8;
1116cabdff1aSopenharmony_ci    block[ 80]= (t[6]*qmul + 128) >> 8;
1117cabdff1aSopenharmony_ci    block[112]= (t[7]*qmul + 128) >> 8;
1118cabdff1aSopenharmony_ci}
1119cabdff1aSopenharmony_ci
1120cabdff1aSopenharmony_civoid ff_h264_chroma_dc_dequant_idct_8_mmi(int16_t *block, int qmul)
1121cabdff1aSopenharmony_ci{
1122cabdff1aSopenharmony_ci    int a,b,c,d;
1123cabdff1aSopenharmony_ci
1124cabdff1aSopenharmony_ci    d = block[0] - block[16];
1125cabdff1aSopenharmony_ci    a = block[0] + block[16];
1126cabdff1aSopenharmony_ci    b = block[32] - block[48];
1127cabdff1aSopenharmony_ci    c = block[32] + block[48];
1128cabdff1aSopenharmony_ci    block[0] = ((a+c)*qmul) >> 7;
1129cabdff1aSopenharmony_ci    block[16]= ((d+b)*qmul) >> 7;
1130cabdff1aSopenharmony_ci    block[32]= ((a-c)*qmul) >> 7;
1131cabdff1aSopenharmony_ci    block[48]= ((d-b)*qmul) >> 7;
1132cabdff1aSopenharmony_ci}
1133cabdff1aSopenharmony_ci
1134cabdff1aSopenharmony_civoid ff_h264_weight_pixels16_8_mmi(uint8_t *block, ptrdiff_t stride, int height,
1135cabdff1aSopenharmony_ci        int log2_denom, int weight, int offset)
1136cabdff1aSopenharmony_ci{
1137cabdff1aSopenharmony_ci    int y;
1138cabdff1aSopenharmony_ci    double ftmp[8];
1139cabdff1aSopenharmony_ci    DECLARE_VAR_ALL64;
1140cabdff1aSopenharmony_ci
1141cabdff1aSopenharmony_ci    offset <<= log2_denom;
1142cabdff1aSopenharmony_ci
1143cabdff1aSopenharmony_ci    if (log2_denom)
1144cabdff1aSopenharmony_ci        offset += 1 << (log2_denom - 1);
1145cabdff1aSopenharmony_ci
1146cabdff1aSopenharmony_ci    for (y=0; y<height; y++, block+=stride) {
1147cabdff1aSopenharmony_ci        __asm__ volatile (
1148cabdff1aSopenharmony_ci            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
1149cabdff1aSopenharmony_ci            MMI_LDC1(%[ftmp1], %[block0], 0x00)
1150cabdff1aSopenharmony_ci            MMI_LDC1(%[ftmp2], %[block1], 0x00)
1151cabdff1aSopenharmony_ci            "mtc1       %[weight],  %[ftmp3]                            \n\t"
1152cabdff1aSopenharmony_ci            "mtc1       %[offset],  %[ftmp4]                            \n\t"
1153cabdff1aSopenharmony_ci            "mtc1       %[log2_denom],              %[ftmp5]            \n\t"
1154cabdff1aSopenharmony_ci            "pshufh     %[ftmp3],   %[ftmp3],       %[ftmp0]            \n\t"
1155cabdff1aSopenharmony_ci            "pshufh     %[ftmp4],   %[ftmp4],       %[ftmp0]            \n\t"
1156cabdff1aSopenharmony_ci            "punpckhbh  %[ftmp6],   %[ftmp1],       %[ftmp0]            \n\t"
1157cabdff1aSopenharmony_ci            "punpckhbh  %[ftmp7],   %[ftmp2],       %[ftmp0]            \n\t"
1158cabdff1aSopenharmony_ci            "punpcklbh  %[ftmp1],   %[ftmp1],       %[ftmp0]            \n\t"
1159cabdff1aSopenharmony_ci            "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp0]            \n\t"
1160cabdff1aSopenharmony_ci            "pmullh     %[ftmp6],   %[ftmp6],       %[ftmp3]            \n\t"
1161cabdff1aSopenharmony_ci            "pmullh     %[ftmp7],   %[ftmp7],       %[ftmp3]            \n\t"
1162cabdff1aSopenharmony_ci            "pmullh     %[ftmp1],   %[ftmp1],       %[ftmp3]            \n\t"
1163cabdff1aSopenharmony_ci            "pmullh     %[ftmp2],   %[ftmp2],       %[ftmp3]            \n\t"
1164cabdff1aSopenharmony_ci            "paddsh     %[ftmp6],   %[ftmp6],       %[ftmp4]            \n\t"
1165cabdff1aSopenharmony_ci            "paddsh     %[ftmp7],   %[ftmp7],       %[ftmp4]            \n\t"
1166cabdff1aSopenharmony_ci            "paddsh     %[ftmp1],   %[ftmp1],       %[ftmp4]            \n\t"
1167cabdff1aSopenharmony_ci            "paddsh     %[ftmp2],   %[ftmp2],       %[ftmp4]            \n\t"
1168cabdff1aSopenharmony_ci            "psrah      %[ftmp6],   %[ftmp6],       %[ftmp5]            \n\t"
1169cabdff1aSopenharmony_ci            "psrah      %[ftmp7],   %[ftmp7],       %[ftmp5]            \n\t"
1170cabdff1aSopenharmony_ci            "psrah      %[ftmp1],   %[ftmp1],       %[ftmp5]            \n\t"
1171cabdff1aSopenharmony_ci            "psrah      %[ftmp2],   %[ftmp2],       %[ftmp5]            \n\t"
1172cabdff1aSopenharmony_ci            "packushb   %[ftmp1],   %[ftmp1],       %[ftmp6]            \n\t"
1173cabdff1aSopenharmony_ci            "packushb   %[ftmp2],   %[ftmp2],       %[ftmp7]            \n\t"
1174cabdff1aSopenharmony_ci            MMI_SDC1(%[ftmp1], %[block0], 0x00)
1175cabdff1aSopenharmony_ci            MMI_SDC1(%[ftmp2], %[block1], 0x00)
1176cabdff1aSopenharmony_ci            : [ftmp0]"=&f"(ftmp[0]),        [ftmp1]"=&f"(ftmp[1]),
1177cabdff1aSopenharmony_ci              [ftmp2]"=&f"(ftmp[2]),        [ftmp3]"=&f"(ftmp[3]),
1178cabdff1aSopenharmony_ci              [ftmp4]"=&f"(ftmp[4]),        [ftmp5]"=&f"(ftmp[5]),
1179cabdff1aSopenharmony_ci              [ftmp6]"=&f"(ftmp[6]),
1180cabdff1aSopenharmony_ci              RESTRICT_ASM_ALL64
1181cabdff1aSopenharmony_ci              [ftmp7]"=&f"(ftmp[7])
1182cabdff1aSopenharmony_ci            : [block0]"r"(block),           [block1]"r"(block+8),
1183cabdff1aSopenharmony_ci              [weight]"r"(weight),          [offset]"r"(offset),
1184cabdff1aSopenharmony_ci              [log2_denom]"r"(log2_denom)
1185cabdff1aSopenharmony_ci            : "memory"
1186cabdff1aSopenharmony_ci        );
1187cabdff1aSopenharmony_ci    }
1188cabdff1aSopenharmony_ci}
1189cabdff1aSopenharmony_ci
1190cabdff1aSopenharmony_civoid ff_h264_biweight_pixels16_8_mmi(uint8_t *dst, uint8_t *src,
1191cabdff1aSopenharmony_ci        ptrdiff_t stride, int height, int log2_denom, int weightd, int weights,
1192cabdff1aSopenharmony_ci        int offset)
1193cabdff1aSopenharmony_ci{
1194cabdff1aSopenharmony_ci    int y;
1195cabdff1aSopenharmony_ci    double ftmp[9];
1196cabdff1aSopenharmony_ci    DECLARE_VAR_ALL64;
1197cabdff1aSopenharmony_ci
1198cabdff1aSopenharmony_ci    offset = ((offset + 1) | 1) << log2_denom;
1199cabdff1aSopenharmony_ci
1200cabdff1aSopenharmony_ci    for (y=0; y<height; y++, dst+=stride, src+=stride) {
1201cabdff1aSopenharmony_ci        __asm__ volatile (
1202cabdff1aSopenharmony_ci            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
1203cabdff1aSopenharmony_ci            MMI_LDC1(%[ftmp1], %[src0], 0x00)
1204cabdff1aSopenharmony_ci            MMI_LDC1(%[ftmp2], %[dst0], 0x00)
1205cabdff1aSopenharmony_ci            "mtc1       %[weights], %[ftmp3]                            \n\t"
1206cabdff1aSopenharmony_ci            "mtc1       %[weightd], %[ftmp4]                            \n\t"
1207cabdff1aSopenharmony_ci            "mtc1       %[offset],  %[ftmp5]                            \n\t"
1208cabdff1aSopenharmony_ci            "mtc1       %[log2_denom],              %[ftmp6]            \n\t"
1209cabdff1aSopenharmony_ci            "pshufh     %[ftmp3],   %[ftmp3],       %[ftmp0]            \n\t"
1210cabdff1aSopenharmony_ci            "pshufh     %[ftmp4],   %[ftmp4],       %[ftmp0]            \n\t"
1211cabdff1aSopenharmony_ci            "pshufh     %[ftmp5],   %[ftmp5],       %[ftmp0]            \n\t"
1212cabdff1aSopenharmony_ci            "punpckhbh  %[ftmp7],   %[ftmp1],       %[ftmp0]            \n\t"
1213cabdff1aSopenharmony_ci            "punpckhbh  %[ftmp8],   %[ftmp2],       %[ftmp0]            \n\t"
1214cabdff1aSopenharmony_ci            "punpcklbh  %[ftmp1],   %[ftmp1],       %[ftmp0]            \n\t"
1215cabdff1aSopenharmony_ci            "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp0]            \n\t"
1216cabdff1aSopenharmony_ci            "pmullh     %[ftmp7],   %[ftmp7],       %[ftmp3]            \n\t"
1217cabdff1aSopenharmony_ci            "pmullh     %[ftmp8],   %[ftmp8],       %[ftmp4]            \n\t"
1218cabdff1aSopenharmony_ci            "pmullh     %[ftmp1],   %[ftmp1],       %[ftmp3]            \n\t"
1219cabdff1aSopenharmony_ci            "pmullh     %[ftmp2],   %[ftmp2],       %[ftmp4]            \n\t"
1220cabdff1aSopenharmony_ci            "paddsh     %[ftmp7],   %[ftmp7],       %[ftmp5]            \n\t"
1221cabdff1aSopenharmony_ci            "paddsh     %[ftmp1],   %[ftmp1],       %[ftmp5]            \n\t"
1222cabdff1aSopenharmony_ci            "paddsh     %[ftmp7],   %[ftmp7],       %[ftmp8]            \n\t"
1223cabdff1aSopenharmony_ci            "paddsh     %[ftmp1],   %[ftmp1],       %[ftmp2]            \n\t"
1224cabdff1aSopenharmony_ci            "psrah      %[ftmp7],   %[ftmp7],       %[ftmp6]            \n\t"
1225cabdff1aSopenharmony_ci            "psrah      %[ftmp1],   %[ftmp1],       %[ftmp6]            \n\t"
1226cabdff1aSopenharmony_ci            "packushb   %[ftmp1],   %[ftmp1],       %[ftmp7]            \n\t"
1227cabdff1aSopenharmony_ci            MMI_SDC1(%[ftmp1], %[dst0], 0x00)
1228cabdff1aSopenharmony_ci            MMI_LDC1(%[ftmp1], %[src1], 0x00)
1229cabdff1aSopenharmony_ci            MMI_LDC1(%[ftmp2], %[dst1], 0x00)
1230cabdff1aSopenharmony_ci            "punpckhbh  %[ftmp7],   %[ftmp1],       %[ftmp0]            \n\t"
1231cabdff1aSopenharmony_ci            "punpckhbh  %[ftmp8],   %[ftmp2],       %[ftmp0]            \n\t"
1232cabdff1aSopenharmony_ci            "punpcklbh  %[ftmp1],   %[ftmp1],       %[ftmp0]            \n\t"
1233cabdff1aSopenharmony_ci            "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp0]            \n\t"
1234cabdff1aSopenharmony_ci            "pmullh     %[ftmp7],   %[ftmp7],       %[ftmp3]            \n\t"
1235cabdff1aSopenharmony_ci            "pmullh     %[ftmp8],   %[ftmp8],       %[ftmp4]            \n\t"
1236cabdff1aSopenharmony_ci            "pmullh     %[ftmp1],   %[ftmp1],       %[ftmp3]            \n\t"
1237cabdff1aSopenharmony_ci            "pmullh     %[ftmp2],   %[ftmp2],       %[ftmp4]            \n\t"
1238cabdff1aSopenharmony_ci            "paddsh     %[ftmp7],   %[ftmp7],       %[ftmp5]            \n\t"
1239cabdff1aSopenharmony_ci            "paddsh     %[ftmp1],   %[ftmp1],       %[ftmp5]            \n\t"
1240cabdff1aSopenharmony_ci            "paddsh     %[ftmp7],   %[ftmp7],       %[ftmp8]            \n\t"
1241cabdff1aSopenharmony_ci            "paddsh     %[ftmp1],   %[ftmp1],       %[ftmp2]            \n\t"
1242cabdff1aSopenharmony_ci            "psrah      %[ftmp7],   %[ftmp7],       %[ftmp6]            \n\t"
1243cabdff1aSopenharmony_ci            "psrah      %[ftmp1],   %[ftmp1],       %[ftmp6]            \n\t"
1244cabdff1aSopenharmony_ci            "packushb   %[ftmp1],   %[ftmp1],       %[ftmp7]            \n\t"
1245cabdff1aSopenharmony_ci            MMI_SDC1(%[ftmp1], %[dst1], 0x00)
1246cabdff1aSopenharmony_ci            : [ftmp0]"=&f"(ftmp[0]),        [ftmp1]"=&f"(ftmp[1]),
1247cabdff1aSopenharmony_ci              [ftmp2]"=&f"(ftmp[2]),        [ftmp3]"=&f"(ftmp[3]),
1248cabdff1aSopenharmony_ci              [ftmp4]"=&f"(ftmp[4]),        [ftmp5]"=&f"(ftmp[5]),
1249cabdff1aSopenharmony_ci              [ftmp6]"=&f"(ftmp[6]),        [ftmp7]"=&f"(ftmp[7]),
1250cabdff1aSopenharmony_ci              RESTRICT_ASM_ALL64
1251cabdff1aSopenharmony_ci              [ftmp8]"=&f"(ftmp[8])
1252cabdff1aSopenharmony_ci            : [dst0]"r"(dst),               [dst1]"r"(dst+8),
1253cabdff1aSopenharmony_ci              [src0]"r"(src),               [src1]"r"(src+8),
1254cabdff1aSopenharmony_ci              [weights]"r"(weights),        [weightd]"r"(weightd),
1255cabdff1aSopenharmony_ci              [offset]"r"(offset),          [log2_denom]"r"(log2_denom+1)
1256cabdff1aSopenharmony_ci            : "memory"
1257cabdff1aSopenharmony_ci        );
1258cabdff1aSopenharmony_ci    }
1259cabdff1aSopenharmony_ci}
1260cabdff1aSopenharmony_ci
1261cabdff1aSopenharmony_civoid ff_h264_weight_pixels8_8_mmi(uint8_t *block, ptrdiff_t stride, int height,
1262cabdff1aSopenharmony_ci        int log2_denom, int weight, int offset)
1263cabdff1aSopenharmony_ci{
1264cabdff1aSopenharmony_ci    int y;
1265cabdff1aSopenharmony_ci    double ftmp[6];
1266cabdff1aSopenharmony_ci    DECLARE_VAR_ALL64;
1267cabdff1aSopenharmony_ci
1268cabdff1aSopenharmony_ci    offset <<= log2_denom;
1269cabdff1aSopenharmony_ci
1270cabdff1aSopenharmony_ci    if (log2_denom)
1271cabdff1aSopenharmony_ci        offset += 1 << (log2_denom - 1);
1272cabdff1aSopenharmony_ci
1273cabdff1aSopenharmony_ci    for (y=0; y<height; y++, block+=stride) {
1274cabdff1aSopenharmony_ci        __asm__ volatile (
1275cabdff1aSopenharmony_ci            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
1276cabdff1aSopenharmony_ci            MMI_LDC1(%[ftmp1], %[block], 0x00)
1277cabdff1aSopenharmony_ci            "mtc1       %[weight],  %[ftmp2]                            \n\t"
1278cabdff1aSopenharmony_ci            "mtc1       %[offset],  %[ftmp3]                            \n\t"
1279cabdff1aSopenharmony_ci            "mtc1       %[log2_denom],              %[ftmp5]            \n\t"
1280cabdff1aSopenharmony_ci            "pshufh     %[ftmp2],   %[ftmp2],       %[ftmp0]            \n\t"
1281cabdff1aSopenharmony_ci            "pshufh     %[ftmp3],   %[ftmp3],       %[ftmp0]            \n\t"
1282cabdff1aSopenharmony_ci            "punpckhbh  %[ftmp4],   %[ftmp1],       %[ftmp0]            \n\t"
1283cabdff1aSopenharmony_ci            "punpcklbh  %[ftmp1],   %[ftmp1],       %[ftmp0]            \n\t"
1284cabdff1aSopenharmony_ci            "pmullh     %[ftmp4],   %[ftmp4],       %[ftmp2]            \n\t"
1285cabdff1aSopenharmony_ci            "pmullh     %[ftmp1],   %[ftmp1],       %[ftmp2]            \n\t"
1286cabdff1aSopenharmony_ci            "paddsh     %[ftmp4],   %[ftmp4],       %[ftmp3]            \n\t"
1287cabdff1aSopenharmony_ci            "paddsh     %[ftmp1],   %[ftmp1],       %[ftmp3]            \n\t"
1288cabdff1aSopenharmony_ci            "psrah      %[ftmp4],   %[ftmp4],       %[ftmp5]            \n\t"
1289cabdff1aSopenharmony_ci            "psrah      %[ftmp1],   %[ftmp1],       %[ftmp5]            \n\t"
1290cabdff1aSopenharmony_ci            "packushb   %[ftmp1],   %[ftmp1],       %[ftmp4]            \n\t"
1291cabdff1aSopenharmony_ci            MMI_SDC1(%[ftmp1], %[block], 0x00)
1292cabdff1aSopenharmony_ci            : [ftmp0]"=&f"(ftmp[0]),        [ftmp1]"=&f"(ftmp[1]),
1293cabdff1aSopenharmony_ci              [ftmp2]"=&f"(ftmp[2]),        [ftmp3]"=&f"(ftmp[3]),
1294cabdff1aSopenharmony_ci              [ftmp4]"=&f"(ftmp[4]),
1295cabdff1aSopenharmony_ci              RESTRICT_ASM_ALL64
1296cabdff1aSopenharmony_ci              [ftmp5]"=&f"(ftmp[5])
1297cabdff1aSopenharmony_ci            : [block]"r"(block),            [weight]"r"(weight),
1298cabdff1aSopenharmony_ci              [offset]"r"(offset),          [log2_denom]"r"(log2_denom)
1299cabdff1aSopenharmony_ci            : "memory"
1300cabdff1aSopenharmony_ci        );
1301cabdff1aSopenharmony_ci    }
1302cabdff1aSopenharmony_ci}
1303cabdff1aSopenharmony_ci
1304cabdff1aSopenharmony_civoid ff_h264_biweight_pixels8_8_mmi(uint8_t *dst, uint8_t *src,
1305cabdff1aSopenharmony_ci        ptrdiff_t stride, int height, int log2_denom, int weightd, int weights,
1306cabdff1aSopenharmony_ci        int offset)
1307cabdff1aSopenharmony_ci{
1308cabdff1aSopenharmony_ci    int y;
1309cabdff1aSopenharmony_ci    double ftmp[9];
1310cabdff1aSopenharmony_ci    DECLARE_VAR_ALL64;
1311cabdff1aSopenharmony_ci
1312cabdff1aSopenharmony_ci    offset = ((offset + 1) | 1) << log2_denom;
1313cabdff1aSopenharmony_ci
1314cabdff1aSopenharmony_ci    for (y=0; y<height; y++, dst+=stride, src+=stride) {
1315cabdff1aSopenharmony_ci        __asm__ volatile (
1316cabdff1aSopenharmony_ci            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
1317cabdff1aSopenharmony_ci            MMI_LDC1(%[ftmp1], %[src], 0x00)
1318cabdff1aSopenharmony_ci            MMI_LDC1(%[ftmp2], %[dst], 0x00)
1319cabdff1aSopenharmony_ci            "mtc1       %[weights], %[ftmp3]                            \n\t"
1320cabdff1aSopenharmony_ci            "mtc1       %[weightd], %[ftmp4]                            \n\t"
1321cabdff1aSopenharmony_ci            "mtc1       %[offset],  %[ftmp5]                            \n\t"
1322cabdff1aSopenharmony_ci            "mtc1       %[log2_denom],              %[ftmp6]            \n\t"
1323cabdff1aSopenharmony_ci            "pshufh     %[ftmp3],   %[ftmp3],       %[ftmp0]            \n\t"
1324cabdff1aSopenharmony_ci            "pshufh     %[ftmp4],   %[ftmp4],       %[ftmp0]            \n\t"
1325cabdff1aSopenharmony_ci            "pshufh     %[ftmp5],   %[ftmp5],       %[ftmp0]            \n\t"
1326cabdff1aSopenharmony_ci            "punpckhbh  %[ftmp7],   %[ftmp1],       %[ftmp0]            \n\t"
1327cabdff1aSopenharmony_ci            "punpckhbh  %[ftmp8],   %[ftmp2],       %[ftmp0]            \n\t"
1328cabdff1aSopenharmony_ci            "punpcklbh  %[ftmp1],   %[ftmp1],       %[ftmp0]            \n\t"
1329cabdff1aSopenharmony_ci            "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp0]            \n\t"
1330cabdff1aSopenharmony_ci            "pmullh     %[ftmp7],   %[ftmp7],       %[ftmp3]            \n\t"
1331cabdff1aSopenharmony_ci            "pmullh     %[ftmp8],   %[ftmp8],       %[ftmp4]            \n\t"
1332cabdff1aSopenharmony_ci            "pmullh     %[ftmp1],   %[ftmp1],       %[ftmp3]            \n\t"
1333cabdff1aSopenharmony_ci            "pmullh     %[ftmp2],   %[ftmp2],       %[ftmp4]            \n\t"
1334cabdff1aSopenharmony_ci            "paddsh     %[ftmp7],   %[ftmp7],       %[ftmp5]            \n\t"
1335cabdff1aSopenharmony_ci            "paddsh     %[ftmp1],   %[ftmp1],       %[ftmp5]            \n\t"
1336cabdff1aSopenharmony_ci            "paddsh     %[ftmp7],   %[ftmp7],       %[ftmp8]            \n\t"
1337cabdff1aSopenharmony_ci            "paddsh     %[ftmp1],   %[ftmp1],       %[ftmp2]            \n\t"
1338cabdff1aSopenharmony_ci            "psrah      %[ftmp7],   %[ftmp7],       %[ftmp6]            \n\t"
1339cabdff1aSopenharmony_ci            "psrah      %[ftmp1],   %[ftmp1],       %[ftmp6]            \n\t"
1340cabdff1aSopenharmony_ci            "packushb   %[ftmp1],   %[ftmp1],       %[ftmp7]            \n\t"
1341cabdff1aSopenharmony_ci            MMI_SDC1(%[ftmp1], %[dst], 0x00)
1342cabdff1aSopenharmony_ci            : [ftmp0]"=&f"(ftmp[0]),        [ftmp1]"=&f"(ftmp[1]),
1343cabdff1aSopenharmony_ci              [ftmp2]"=&f"(ftmp[2]),        [ftmp3]"=&f"(ftmp[3]),
1344cabdff1aSopenharmony_ci              [ftmp4]"=&f"(ftmp[4]),        [ftmp5]"=&f"(ftmp[5]),
1345cabdff1aSopenharmony_ci              [ftmp6]"=&f"(ftmp[6]),        [ftmp7]"=&f"(ftmp[7]),
1346cabdff1aSopenharmony_ci              RESTRICT_ASM_ALL64
1347cabdff1aSopenharmony_ci              [ftmp8]"=&f"(ftmp[8])
1348cabdff1aSopenharmony_ci            : [dst]"r"(dst),                [src]"r"(src),
1349cabdff1aSopenharmony_ci              [weights]"r"(weights),        [weightd]"r"(weightd),
1350cabdff1aSopenharmony_ci              [offset]"r"(offset),          [log2_denom]"r"(log2_denom+1)
1351cabdff1aSopenharmony_ci            : "memory"
1352cabdff1aSopenharmony_ci        );
1353cabdff1aSopenharmony_ci    }
1354cabdff1aSopenharmony_ci}
1355cabdff1aSopenharmony_ci
1356cabdff1aSopenharmony_civoid ff_h264_weight_pixels4_8_mmi(uint8_t *block, ptrdiff_t stride, int height,
1357cabdff1aSopenharmony_ci        int log2_denom, int weight, int offset)
1358cabdff1aSopenharmony_ci{
1359cabdff1aSopenharmony_ci    int y;
1360cabdff1aSopenharmony_ci    double ftmp[5];
1361cabdff1aSopenharmony_ci    DECLARE_VAR_LOW32;
1362cabdff1aSopenharmony_ci
1363cabdff1aSopenharmony_ci    offset <<= log2_denom;
1364cabdff1aSopenharmony_ci
1365cabdff1aSopenharmony_ci    if (log2_denom)
1366cabdff1aSopenharmony_ci        offset += 1 << (log2_denom - 1);
1367cabdff1aSopenharmony_ci
1368cabdff1aSopenharmony_ci    for (y=0; y<height; y++, block+=stride) {
1369cabdff1aSopenharmony_ci        __asm__ volatile (
1370cabdff1aSopenharmony_ci            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
1371cabdff1aSopenharmony_ci            MMI_ULWC1(%[ftmp1], %[block], 0x00)
1372cabdff1aSopenharmony_ci            "mtc1       %[weight],  %[ftmp2]                            \n\t"
1373cabdff1aSopenharmony_ci            "mtc1       %[offset],  %[ftmp3]                            \n\t"
1374cabdff1aSopenharmony_ci            "mtc1       %[log2_denom],              %[ftmp4]            \n\t"
1375cabdff1aSopenharmony_ci            "pshufh     %[ftmp2],   %[ftmp2],       %[ftmp0]            \n\t"
1376cabdff1aSopenharmony_ci            "pshufh     %[ftmp3],   %[ftmp3],       %[ftmp0]            \n\t"
1377cabdff1aSopenharmony_ci            "punpcklbh  %[ftmp1],   %[ftmp1],       %[ftmp0]            \n\t"
1378cabdff1aSopenharmony_ci            "pmullh     %[ftmp1],   %[ftmp1],       %[ftmp2]            \n\t"
1379cabdff1aSopenharmony_ci            "paddsh     %[ftmp1],   %[ftmp1],       %[ftmp3]            \n\t"
1380cabdff1aSopenharmony_ci            "psrah      %[ftmp1],   %[ftmp1],       %[ftmp4]            \n\t"
1381cabdff1aSopenharmony_ci            "packushb   %[ftmp1],   %[ftmp1],       %[ftmp0]            \n\t"
1382cabdff1aSopenharmony_ci            MMI_SWC1(%[ftmp1], %[block], 0x00)
1383cabdff1aSopenharmony_ci            : [ftmp0]"=&f"(ftmp[0]),        [ftmp1]"=&f"(ftmp[1]),
1384cabdff1aSopenharmony_ci              [ftmp2]"=&f"(ftmp[2]),        [ftmp3]"=&f"(ftmp[3]),
1385cabdff1aSopenharmony_ci              RESTRICT_ASM_LOW32
1386cabdff1aSopenharmony_ci              [ftmp4]"=&f"(ftmp[4])
1387cabdff1aSopenharmony_ci            : [block]"r"(block),            [weight]"r"(weight),
1388cabdff1aSopenharmony_ci              [offset]"r"(offset),          [log2_denom]"r"(log2_denom)
1389cabdff1aSopenharmony_ci            : "memory"
1390cabdff1aSopenharmony_ci        );
1391cabdff1aSopenharmony_ci    }
1392cabdff1aSopenharmony_ci}
1393cabdff1aSopenharmony_ci
1394cabdff1aSopenharmony_civoid ff_h264_biweight_pixels4_8_mmi(uint8_t *dst, uint8_t *src,
1395cabdff1aSopenharmony_ci        ptrdiff_t stride, int height, int log2_denom, int weightd, int weights,
1396cabdff1aSopenharmony_ci        int offset)
1397cabdff1aSopenharmony_ci{
1398cabdff1aSopenharmony_ci    int y;
1399cabdff1aSopenharmony_ci    double ftmp[7];
1400cabdff1aSopenharmony_ci    DECLARE_VAR_LOW32;
1401cabdff1aSopenharmony_ci
1402cabdff1aSopenharmony_ci    offset = ((offset + 1) | 1) << log2_denom;
1403cabdff1aSopenharmony_ci
1404cabdff1aSopenharmony_ci    for (y=0; y<height; y++, dst+=stride, src+=stride) {
1405cabdff1aSopenharmony_ci        __asm__ volatile (
1406cabdff1aSopenharmony_ci            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
1407cabdff1aSopenharmony_ci            MMI_ULWC1(%[ftmp1], %[src], 0x00)
1408cabdff1aSopenharmony_ci            MMI_ULWC1(%[ftmp2], %[dst], 0x00)
1409cabdff1aSopenharmony_ci            "mtc1       %[weight],  %[ftmp3]                            \n\t"
1410cabdff1aSopenharmony_ci            "mtc1       %[weightd], %[ftmp4]                            \n\t"
1411cabdff1aSopenharmony_ci            "mtc1       %[offset],  %[ftmp5]                            \n\t"
1412cabdff1aSopenharmony_ci            "mtc1       %[log2_denom],              %[ftmp6]            \n\t"
1413cabdff1aSopenharmony_ci            "pshufh     %[ftmp3],   %[ftmp3],       %[ftmp0]            \n\t"
1414cabdff1aSopenharmony_ci            "pshufh     %[ftmp4],   %[ftmp4],       %[ftmp0]            \n\t"
1415cabdff1aSopenharmony_ci            "pshufh     %[ftmp5],   %[ftmp5],       %[ftmp0]            \n\t"
1416cabdff1aSopenharmony_ci            "punpcklbh  %[ftmp1],   %[ftmp1],       %[ftmp0]            \n\t"
1417cabdff1aSopenharmony_ci            "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp0]            \n\t"
1418cabdff1aSopenharmony_ci            "pmullh     %[ftmp1],   %[ftmp1],       %[ftmp3]            \n\t"
1419cabdff1aSopenharmony_ci            "pmullh     %[ftmp2],   %[ftmp2],       %[ftmp4]            \n\t"
1420cabdff1aSopenharmony_ci            "paddsh     %[ftmp1],   %[ftmp1],       %[ftmp5]            \n\t"
1421cabdff1aSopenharmony_ci            "paddsh     %[ftmp1],   %[ftmp1],       %[ftmp2]            \n\t"
1422cabdff1aSopenharmony_ci            "psrah      %[ftmp1],   %[ftmp1],       %[ftmp6]            \n\t"
1423cabdff1aSopenharmony_ci            "packushb   %[ftmp1],   %[ftmp1],       %[ftmp0]            \n\t"
1424cabdff1aSopenharmony_ci            MMI_SWC1(%[ftmp1], %[dst], 0x00)
1425cabdff1aSopenharmony_ci            : [ftmp0]"=&f"(ftmp[0]),        [ftmp1]"=&f"(ftmp[1]),
1426cabdff1aSopenharmony_ci              [ftmp2]"=&f"(ftmp[2]),        [ftmp3]"=&f"(ftmp[3]),
1427cabdff1aSopenharmony_ci              [ftmp4]"=&f"(ftmp[4]),        [ftmp5]"=&f"(ftmp[5]),
1428cabdff1aSopenharmony_ci              RESTRICT_ASM_LOW32
1429cabdff1aSopenharmony_ci              [ftmp6]"=&f"(ftmp[6])
1430cabdff1aSopenharmony_ci            : [dst]"r"(dst),                [src]"r"(src),
1431cabdff1aSopenharmony_ci              [weight]"r"(weights),         [weightd]"r"(weightd),
1432cabdff1aSopenharmony_ci              [offset]"r"(offset),          [log2_denom]"r"(log2_denom+1)
1433cabdff1aSopenharmony_ci            : "memory"
1434cabdff1aSopenharmony_ci        );
1435cabdff1aSopenharmony_ci    }
1436cabdff1aSopenharmony_ci}
1437cabdff1aSopenharmony_ci
1438cabdff1aSopenharmony_civoid ff_deblock_v8_luma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int beta,
1439cabdff1aSopenharmony_ci        int8_t *tc0)
1440cabdff1aSopenharmony_ci{
1441cabdff1aSopenharmony_ci    double ftmp[12];
1442cabdff1aSopenharmony_ci    mips_reg addr[2];
1443cabdff1aSopenharmony_ci    DECLARE_VAR_LOW32;
1444cabdff1aSopenharmony_ci    DECLARE_VAR_ALL64;
1445cabdff1aSopenharmony_ci    DECLARE_VAR_ADDRT;
1446cabdff1aSopenharmony_ci
1447cabdff1aSopenharmony_ci    __asm__ volatile (
1448cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr0],   %[stride],      %[stride]               \n\t"
1449cabdff1aSopenharmony_ci        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
1450cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr1],   %[stride],      %[addr0]                \n\t"
1451cabdff1aSopenharmony_ci        "addi       %[alpha],   %[alpha],       -0x01                   \n\t"
1452cabdff1aSopenharmony_ci        PTR_SUBU   "%[addr1],   $0,             %[addr1]                \n\t"
1453cabdff1aSopenharmony_ci        "addi       %[beta],    %[beta],        -0x01                   \n\t"
1454cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr1],   %[addr1],       %[pix]                  \n\t"
1455cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp3], %[pix], 0x00)
1456cabdff1aSopenharmony_ci        MMI_LDXC1(%[ftmp1], %[addr1], %[stride], 0x00)
1457cabdff1aSopenharmony_ci        MMI_LDXC1(%[ftmp2], %[addr1], %[addr0], 0x00)
1458cabdff1aSopenharmony_ci        MMI_LDXC1(%[ftmp4], %[pix], %[stride], 0x00)
1459cabdff1aSopenharmony_ci        "mtc1       %[alpha],   %[ftmp5]                                \n\t"
1460cabdff1aSopenharmony_ci        "mtc1       %[beta],    %[ftmp6]                                \n\t"
1461cabdff1aSopenharmony_ci        "pshufh     %[ftmp5],   %[ftmp5],       %[ftmp0]                \n\t"
1462cabdff1aSopenharmony_ci        "pshufh     %[ftmp6],   %[ftmp6],       %[ftmp0]                \n\t"
1463cabdff1aSopenharmony_ci        "packushb   %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
1464cabdff1aSopenharmony_ci        "packushb   %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
1465cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp3],       %[ftmp2]                \n\t"
1466cabdff1aSopenharmony_ci        "psubusb    %[ftmp8],   %[ftmp2],       %[ftmp3]                \n\t"
1467cabdff1aSopenharmony_ci        "por        %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
1468cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp2],       %[ftmp1]                \n\t"
1469cabdff1aSopenharmony_ci        "psubusb    %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
1470cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp1],       %[ftmp2]                \n\t"
1471cabdff1aSopenharmony_ci        "por        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1472cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp3],       %[ftmp4]                \n\t"
1473cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
1474cabdff1aSopenharmony_ci        "por        %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
1475cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp4],       %[ftmp3]                \n\t"
1476cabdff1aSopenharmony_ci        "por        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1477cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
1478cabdff1aSopenharmony_ci        "por        %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
1479cabdff1aSopenharmony_ci        "pcmpeqb    %[ftmp8],   %[ftmp8],       %[ftmp0]                \n\t"
1480cabdff1aSopenharmony_ci        "pcmpeqb    %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
1481cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp5], %[tc0], 0x00)
1482cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
1483cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp9],   %[ftmp5],       %[ftmp5]                \n\t"
1484cabdff1aSopenharmony_ci        "pcmpgtb    %[ftmp5],   %[ftmp9],       %[ftmp4]                \n\t"
1485cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp4], %[addr1], 0x00)
1486cabdff1aSopenharmony_ci        "pand       %[ftmp10],  %[ftmp5],       %[ftmp8]                \n\t"
1487cabdff1aSopenharmony_ci        "psubusb    %[ftmp8],   %[ftmp4],       %[ftmp2]                \n\t"
1488cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp2],       %[ftmp4]                \n\t"
1489cabdff1aSopenharmony_ci        "psubusb    %[ftmp8],   %[ftmp8],       %[ftmp6]                \n\t"
1490cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
1491cabdff1aSopenharmony_ci        "pcmpeqb    %[ftmp7],   %[ftmp7],       %[ftmp8]                \n\t"
1492cabdff1aSopenharmony_ci        "pand       %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
1493cabdff1aSopenharmony_ci        "pand       %[ftmp5],   %[ftmp10],      %[ftmp9]                \n\t"
1494cabdff1aSopenharmony_ci        "psubb      %[ftmp8],   %[ftmp5],       %[ftmp7]                \n\t"
1495cabdff1aSopenharmony_ci        "pand       %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
1496cabdff1aSopenharmony_ci        "pavgb      %[ftmp5],   %[ftmp2],       %[ftmp3]                \n\t"
1497cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp11], %[addr1], 0x00)
1498cabdff1aSopenharmony_ci        "pavgb      %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
1499cabdff1aSopenharmony_ci        "pxor       %[ftmp5],   %[ftmp5],       %[ftmp11]               \n\t"
1500cabdff1aSopenharmony_ci        "pand       %[ftmp5],   %[ftmp5],       %[ff_pb_1]              \n\t"
1501cabdff1aSopenharmony_ci        "psubusb    %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
1502cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp1],       %[ftmp7]                \n\t"
1503cabdff1aSopenharmony_ci        "paddusb    %[ftmp7],   %[ftmp7],       %[ftmp1]                \n\t"
1504cabdff1aSopenharmony_ci        "pmaxub     %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
1505cabdff1aSopenharmony_ci        "pminub     %[ftmp4],   %[ftmp4],       %[ftmp7]                \n\t"
1506cabdff1aSopenharmony_ci        MMI_SDXC1(%[ftmp4], %[addr1], %[stride], 0x00)
1507cabdff1aSopenharmony_ci        MMI_LDXC1(%[ftmp5], %[pix], %[addr0], 0x00)
1508cabdff1aSopenharmony_ci        "psubusb    %[ftmp4],   %[ftmp5],       %[ftmp3]                \n\t"
1509cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp3],       %[ftmp5]                \n\t"
1510cabdff1aSopenharmony_ci        "psubusb    %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
1511cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
1512cabdff1aSopenharmony_ci        "pcmpeqb    %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
1513cabdff1aSopenharmony_ci        "pand       %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
1514cabdff1aSopenharmony_ci        "psubb      %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
1515cabdff1aSopenharmony_ci        "pand       %[ftmp6],   %[ftmp9],       %[ftmp7]                \n\t"
1516cabdff1aSopenharmony_ci        MMI_LDXC1(%[ftmp4], %[pix], %[stride], 0x00)
1517cabdff1aSopenharmony_ci        "pavgb      %[ftmp7],   %[ftmp2],       %[ftmp3]                \n\t"
1518cabdff1aSopenharmony_ci        MMI_LDXC1(%[ftmp11], %[pix], %[addr0], 0x00)
1519cabdff1aSopenharmony_ci        "pavgb      %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1520cabdff1aSopenharmony_ci        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp11]               \n\t"
1521cabdff1aSopenharmony_ci        "pand       %[ftmp7],   %[ftmp7],       %[ff_pb_1]              \n\t"
1522cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1523cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp4],       %[ftmp6]                \n\t"
1524cabdff1aSopenharmony_ci        "paddusb    %[ftmp6],   %[ftmp6],       %[ftmp4]                \n\t"
1525cabdff1aSopenharmony_ci        "pmaxub     %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1526cabdff1aSopenharmony_ci        "pminub     %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
1527cabdff1aSopenharmony_ci        MMI_SDXC1(%[ftmp5], %[pix], %[stride], 0x00)
1528cabdff1aSopenharmony_ci        "pxor       %[ftmp6],   %[ftmp2],       %[ftmp3]                \n\t"
1529cabdff1aSopenharmony_ci        "pcmpeqb    %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
1530cabdff1aSopenharmony_ci        "pand       %[ftmp6],   %[ftmp6],       %[ff_pb_1]              \n\t"
1531cabdff1aSopenharmony_ci        "pxor       %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
1532cabdff1aSopenharmony_ci        "pxor       %[ftmp5],   %[ftmp5],       %[ftmp2]                \n\t"
1533cabdff1aSopenharmony_ci        "pavgb      %[ftmp4],   %[ftmp4],       %[ftmp1]                \n\t"
1534cabdff1aSopenharmony_ci        "pavgb      %[ftmp4],   %[ftmp4],       %[ff_pb_3]              \n\t"
1535cabdff1aSopenharmony_ci        "pavgb      %[ftmp5],   %[ftmp5],       %[ftmp3]                \n\t"
1536cabdff1aSopenharmony_ci        "pavgb      %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
1537cabdff1aSopenharmony_ci        "paddusb    %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
1538cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ff_pb_A1],    %[ftmp4]                \n\t"
1539cabdff1aSopenharmony_ci        "psubusb    %[ftmp4],   %[ftmp4],       %[ff_pb_A1]             \n\t"
1540cabdff1aSopenharmony_ci        "pminub     %[ftmp7],   %[ftmp7],       %[ftmp8]                \n\t"
1541cabdff1aSopenharmony_ci        "pminub     %[ftmp4],   %[ftmp4],       %[ftmp8]                \n\t"
1542cabdff1aSopenharmony_ci        "psubusb    %[ftmp2],   %[ftmp2],       %[ftmp7]                \n\t"
1543cabdff1aSopenharmony_ci        "psubusb    %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
1544cabdff1aSopenharmony_ci        "paddusb    %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
1545cabdff1aSopenharmony_ci        "paddusb    %[ftmp3],   %[ftmp3],       %[ftmp7]                \n\t"
1546cabdff1aSopenharmony_ci        MMI_SDXC1(%[ftmp2], %[addr1], %[addr0], 0x00)
1547cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp3], %[pix], 0x00)
1548cabdff1aSopenharmony_ci        : [ftmp0]"=&f"(ftmp[0]),            [ftmp1]"=&f"(ftmp[1]),
1549cabdff1aSopenharmony_ci          [ftmp2]"=&f"(ftmp[2]),            [ftmp3]"=&f"(ftmp[3]),
1550cabdff1aSopenharmony_ci          [ftmp4]"=&f"(ftmp[4]),            [ftmp5]"=&f"(ftmp[5]),
1551cabdff1aSopenharmony_ci          [ftmp6]"=&f"(ftmp[6]),            [ftmp7]"=&f"(ftmp[7]),
1552cabdff1aSopenharmony_ci          [ftmp8]"=&f"(ftmp[8]),            [ftmp9]"=&f"(ftmp[9]),
1553cabdff1aSopenharmony_ci          [ftmp10]"=&f"(ftmp[10]),          [ftmp11]"=&f"(ftmp[11]),
1554cabdff1aSopenharmony_ci          RESTRICT_ASM_LOW32
1555cabdff1aSopenharmony_ci          RESTRICT_ASM_ALL64
1556cabdff1aSopenharmony_ci          RESTRICT_ASM_ADDRT
1557cabdff1aSopenharmony_ci          [addr0]"=&r"(addr[0]),            [addr1]"=&r"(addr[1])
1558cabdff1aSopenharmony_ci        : [pix]"r"(pix),                    [stride]"r"((mips_reg)stride),
1559cabdff1aSopenharmony_ci          [alpha]"r"((mips_reg)alpha),      [beta]"r"((mips_reg)beta),
1560cabdff1aSopenharmony_ci          [tc0]"r"(tc0),                    [ff_pb_1]"f"(ff_pb_1.f),
1561cabdff1aSopenharmony_ci          [ff_pb_3]"f"(ff_pb_3.f),          [ff_pb_A1]"f"(ff_pb_A1.f)
1562cabdff1aSopenharmony_ci        : "memory"
1563cabdff1aSopenharmony_ci    );
1564cabdff1aSopenharmony_ci}
1565cabdff1aSopenharmony_ci
1566cabdff1aSopenharmony_cistatic void deblock_v8_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha,
1567cabdff1aSopenharmony_ci        int beta)
1568cabdff1aSopenharmony_ci{
1569cabdff1aSopenharmony_ci    DECLARE_ALIGNED(8, const uint64_t, stack[0x0a]);
1570cabdff1aSopenharmony_ci    double ftmp[16];
1571cabdff1aSopenharmony_ci    uint64_t tmp[1];
1572cabdff1aSopenharmony_ci    mips_reg addr[3];
1573cabdff1aSopenharmony_ci    DECLARE_VAR_ALL64;
1574cabdff1aSopenharmony_ci    DECLARE_VAR_ADDRT;
1575cabdff1aSopenharmony_ci
1576cabdff1aSopenharmony_ci    __asm__ volatile (
1577cabdff1aSopenharmony_ci        "ori        %[tmp0],    $0,             0x01                    \n\t"
1578cabdff1aSopenharmony_ci        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
1579cabdff1aSopenharmony_ci        "mtc1       %[tmp0],    %[ftmp9]                                \n\t"
1580cabdff1aSopenharmony_ci        PTR_SLL    "%[addr0],   %[stride],      0x02                    \n\t"
1581cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr2],   %[stride],      %[stride]               \n\t"
1582cabdff1aSopenharmony_ci        PTR_ADDIU  "%[alpha],   %[alpha],       -0x01                   \n\t"
1583cabdff1aSopenharmony_ci        "sslld      %[ftmp11],  %[ftmp9],       %[ftmp9]                \n\t"
1584cabdff1aSopenharmony_ci        "bltz       %[alpha],   1f                                      \n\t"
1585cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr1],   %[addr2],       %[stride]               \n\t"
1586cabdff1aSopenharmony_ci        PTR_ADDIU  "%[beta],    %[beta],        -0x01                   \n\t"
1587cabdff1aSopenharmony_ci        "bltz       %[beta],    1f                                      \n\t"
1588cabdff1aSopenharmony_ci        PTR_SUBU   "%[addr0],   $0,             %[addr0]                \n\t"
1589cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr0],   %[addr0],       %[pix]                  \n\t"
1590cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp3], %[pix], 0x00)
1591cabdff1aSopenharmony_ci        MMI_LDXC1(%[ftmp1], %[addr0], %[addr2], 0x00)
1592cabdff1aSopenharmony_ci        MMI_LDXC1(%[ftmp2], %[addr0], %[addr1], 0x00)
1593cabdff1aSopenharmony_ci        MMI_LDXC1(%[ftmp4], %[pix], %[stride], 0x00)
1594cabdff1aSopenharmony_ci        "mtc1       %[alpha],   %[ftmp5]                                \n\t"
1595cabdff1aSopenharmony_ci        "mtc1       %[beta],    %[ftmp6]                                \n\t"
1596cabdff1aSopenharmony_ci        "pshufh     %[ftmp5],   %[ftmp5],       %[ftmp0]                \n\t"
1597cabdff1aSopenharmony_ci        "pshufh     %[ftmp6],   %[ftmp6],       %[ftmp0]                \n\t"
1598cabdff1aSopenharmony_ci        "packushb   %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
1599cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp3],       %[ftmp2]                \n\t"
1600cabdff1aSopenharmony_ci        "psubusb    %[ftmp8],   %[ftmp2],       %[ftmp3]                \n\t"
1601cabdff1aSopenharmony_ci        "packushb   %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
1602cabdff1aSopenharmony_ci        "por        %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
1603cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp5], %[stack], 0x10)
1604cabdff1aSopenharmony_ci        "psubusb    %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
1605cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp2],       %[ftmp1]                \n\t"
1606cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp1],       %[ftmp2]                \n\t"
1607cabdff1aSopenharmony_ci        "por        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1608cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
1609cabdff1aSopenharmony_ci        "por        %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
1610cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp3],       %[ftmp4]                \n\t"
1611cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp4],       %[ftmp3]                \n\t"
1612cabdff1aSopenharmony_ci        "por        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1613cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
1614cabdff1aSopenharmony_ci        "por        %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
1615cabdff1aSopenharmony_ci        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
1616cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp5], %[stack], 0x10)
1617cabdff1aSopenharmony_ci        "pcmpeqb    %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
1618cabdff1aSopenharmony_ci        "ldc1       %[ftmp10],  %[ff_pb_1]                              \n\t"
1619cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp8], %[stack], 0x20)
1620cabdff1aSopenharmony_ci        "pavgb      %[ftmp5],   %[ftmp5],       %[ftmp0]                \n\t"
1621cabdff1aSopenharmony_ci        "psubusb    %[ftmp8],   %[ftmp3],       %[ftmp2]                \n\t"
1622cabdff1aSopenharmony_ci        "pavgb      %[ftmp5],   %[ftmp5],       %[ftmp10]               \n\t"
1623cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp2],       %[ftmp3]                \n\t"
1624cabdff1aSopenharmony_ci        "psubusb    %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
1625cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
1626cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp15], %[stack], 0x20)
1627cabdff1aSopenharmony_ci        "pcmpeqb    %[ftmp7],   %[ftmp7],       %[ftmp8]                \n\t"
1628cabdff1aSopenharmony_ci        "pand       %[ftmp7],   %[ftmp7],       %[ftmp15]               \n\t"
1629cabdff1aSopenharmony_ci        MMI_LDXC1(%[ftmp15], %[addr0], %[stride], 0x00)
1630cabdff1aSopenharmony_ci        "psubusb    %[ftmp8],   %[ftmp15],      %[ftmp2]                \n\t"
1631cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp2],       %[ftmp15]               \n\t"
1632cabdff1aSopenharmony_ci        "psubusb    %[ftmp8],   %[ftmp8],       %[ftmp6]                \n\t"
1633cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
1634cabdff1aSopenharmony_ci        "pcmpeqb    %[ftmp5],   %[ftmp5],       %[ftmp8]                \n\t"
1635cabdff1aSopenharmony_ci        "pand       %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1636cabdff1aSopenharmony_ci        MMI_LDXC1(%[ftmp14], %[pix], %[addr2], 0x00)
1637cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp5], %[stack], 0x30)
1638cabdff1aSopenharmony_ci        "psubusb    %[ftmp8],   %[ftmp14],      %[ftmp3]                \n\t"
1639cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp3],       %[ftmp14]               \n\t"
1640cabdff1aSopenharmony_ci        "psubusb    %[ftmp8],   %[ftmp8],       %[ftmp6]                \n\t"
1641cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
1642cabdff1aSopenharmony_ci        "pcmpeqb    %[ftmp5],   %[ftmp5],       %[ftmp8]                \n\t"
1643cabdff1aSopenharmony_ci        "pand       %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1644cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp5], %[stack], 0x40)
1645cabdff1aSopenharmony_ci        "pavgb      %[ftmp5],   %[ftmp15],      %[ftmp1]                \n\t"
1646cabdff1aSopenharmony_ci        "pavgb      %[ftmp6],   %[ftmp2],       %[ftmp3]                \n\t"
1647cabdff1aSopenharmony_ci        "pavgb      %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
1648cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp6], %[stack], 0x10)
1649cabdff1aSopenharmony_ci        "paddb      %[ftmp7],   %[ftmp15],      %[ftmp1]                \n\t"
1650cabdff1aSopenharmony_ci        "paddb      %[ftmp8],   %[ftmp2],       %[ftmp3]                \n\t"
1651cabdff1aSopenharmony_ci        "paddb      %[ftmp7],   %[ftmp7],       %[ftmp8]                \n\t"
1652cabdff1aSopenharmony_ci        "mov.d      %[ftmp8],   %[ftmp7]                                \n\t"
1653cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp7], %[stack], 0x00)
1654cabdff1aSopenharmony_ci        "psrlh      %[ftmp7],   %[ftmp7],       %[ftmp9]                \n\t"
1655cabdff1aSopenharmony_ci        "pavgb      %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
1656cabdff1aSopenharmony_ci        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
1657cabdff1aSopenharmony_ci        "pand       %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
1658cabdff1aSopenharmony_ci        "psubb      %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1659cabdff1aSopenharmony_ci        "pavgb      %[ftmp6],   %[ftmp15],      %[ftmp4]                \n\t"
1660cabdff1aSopenharmony_ci        "psubb      %[ftmp7],   %[ftmp15],      %[ftmp4]                \n\t"
1661cabdff1aSopenharmony_ci        "paddb      %[ftmp8],   %[ftmp8],       %[ftmp8]                \n\t"
1662cabdff1aSopenharmony_ci        "psubb      %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
1663cabdff1aSopenharmony_ci        "pand       %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
1664cabdff1aSopenharmony_ci        "psubb      %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
1665cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp13], %[stack], 0x10)
1666cabdff1aSopenharmony_ci        "pavgb      %[ftmp6],   %[ftmp6],       %[ftmp1]                \n\t"
1667cabdff1aSopenharmony_ci        "psrlh      %[ftmp8],   %[ftmp8],       %[ftmp11]               \n\t"
1668cabdff1aSopenharmony_ci        "pavgb      %[ftmp6],   %[ftmp6],       %[ftmp13]               \n\t"
1669cabdff1aSopenharmony_ci        "pavgb      %[ftmp8],   %[ftmp8],       %[ftmp0]                \n\t"
1670cabdff1aSopenharmony_ci        "pxor       %[ftmp8],   %[ftmp8],       %[ftmp6]                \n\t"
1671cabdff1aSopenharmony_ci        "pand       %[ftmp8],   %[ftmp8],       %[ftmp10]               \n\t"
1672cabdff1aSopenharmony_ci        "psubb      %[ftmp6],   %[ftmp6],       %[ftmp8]                \n\t"
1673cabdff1aSopenharmony_ci        "pxor       %[ftmp8],   %[ftmp2],       %[ftmp4]                \n\t"
1674cabdff1aSopenharmony_ci        "pavgb      %[ftmp7],   %[ftmp2],       %[ftmp4]                \n\t"
1675cabdff1aSopenharmony_ci        "pand       %[ftmp8],   %[ftmp8],       %[ftmp10]               \n\t"
1676cabdff1aSopenharmony_ci        "psubb      %[ftmp7],   %[ftmp7],       %[ftmp8]                \n\t"
1677cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp13], %[stack], 0x30)
1678cabdff1aSopenharmony_ci        "pavgb      %[ftmp7],   %[ftmp7],       %[ftmp1]                \n\t"
1679cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp12], %[stack], 0x20)
1680cabdff1aSopenharmony_ci        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
1681cabdff1aSopenharmony_ci        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp2]                \n\t"
1682cabdff1aSopenharmony_ci        "pand       %[ftmp6],   %[ftmp6],       %[ftmp13]               \n\t"
1683cabdff1aSopenharmony_ci        "pand       %[ftmp7],   %[ftmp7],       %[ftmp12]               \n\t"
1684cabdff1aSopenharmony_ci        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
1685cabdff1aSopenharmony_ci        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp2]                \n\t"
1686cabdff1aSopenharmony_ci        MMI_SDXC1(%[ftmp6], %[addr0], %[addr1], 0x00)
1687cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp6], %[addr0], 0x00)
1688cabdff1aSopenharmony_ci        "paddb      %[ftmp7],   %[ftmp15],      %[ftmp6]                \n\t"
1689cabdff1aSopenharmony_ci        "pavgb      %[ftmp6],   %[ftmp6],       %[ftmp15]               \n\t"
1690cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp12], %[stack], 0x00)
1691cabdff1aSopenharmony_ci        "pavgb      %[ftmp6],   %[ftmp6],       %[ftmp5]                \n\t"
1692cabdff1aSopenharmony_ci        "paddb      %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
1693cabdff1aSopenharmony_ci        "paddb      %[ftmp7],   %[ftmp7],       %[ftmp12]               \n\t"
1694cabdff1aSopenharmony_ci        "psrlh      %[ftmp7],   %[ftmp7],       %[ftmp11]               \n\t"
1695cabdff1aSopenharmony_ci        "pavgb      %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
1696cabdff1aSopenharmony_ci        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
1697cabdff1aSopenharmony_ci        "pand       %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
1698cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp12], %[stack], 0x30)
1699cabdff1aSopenharmony_ci        "psubb      %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
1700cabdff1aSopenharmony_ci        "pxor       %[ftmp5],   %[ftmp5],       %[ftmp1]                \n\t"
1701cabdff1aSopenharmony_ci        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp15]               \n\t"
1702cabdff1aSopenharmony_ci        "pand       %[ftmp5],   %[ftmp5],       %[ftmp12]               \n\t"
1703cabdff1aSopenharmony_ci        "pand       %[ftmp6],   %[ftmp6],       %[ftmp12]               \n\t"
1704cabdff1aSopenharmony_ci        "pxor       %[ftmp5],   %[ftmp5],       %[ftmp1]                \n\t"
1705cabdff1aSopenharmony_ci        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp15]               \n\t"
1706cabdff1aSopenharmony_ci        MMI_SDXC1(%[ftmp5], %[addr0], %[addr2], 0x00)
1707cabdff1aSopenharmony_ci        MMI_SDXC1(%[ftmp6], %[addr0], %[stride], 0x00)
1708cabdff1aSopenharmony_ci        "pavgb      %[ftmp5],   %[ftmp14],      %[ftmp4]                \n\t"
1709cabdff1aSopenharmony_ci        "pavgb      %[ftmp6],   %[ftmp3],       %[ftmp2]                \n\t"
1710cabdff1aSopenharmony_ci        "pavgb      %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
1711cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp6], %[stack], 0x10)
1712cabdff1aSopenharmony_ci        "paddb      %[ftmp7],   %[ftmp14],      %[ftmp4]                \n\t"
1713cabdff1aSopenharmony_ci        "paddb      %[ftmp8],   %[ftmp3],       %[ftmp2]                \n\t"
1714cabdff1aSopenharmony_ci        "paddb      %[ftmp7],   %[ftmp7],       %[ftmp8]                \n\t"
1715cabdff1aSopenharmony_ci        "mov.d      %[ftmp8],   %[ftmp7]                                \n\t"
1716cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp7], %[stack], 0x00)
1717cabdff1aSopenharmony_ci        "psrlh      %[ftmp7],   %[ftmp7],       %[ftmp9]                \n\t"
1718cabdff1aSopenharmony_ci        "pavgb      %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
1719cabdff1aSopenharmony_ci        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
1720cabdff1aSopenharmony_ci        "pand       %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
1721cabdff1aSopenharmony_ci        "psubb      %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1722cabdff1aSopenharmony_ci        "pavgb      %[ftmp6],   %[ftmp14],      %[ftmp1]                \n\t"
1723cabdff1aSopenharmony_ci        "paddb      %[ftmp8],   %[ftmp8],       %[ftmp8]                \n\t"
1724cabdff1aSopenharmony_ci        "psubb      %[ftmp7],   %[ftmp14],      %[ftmp1]                \n\t"
1725cabdff1aSopenharmony_ci        "psubb      %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
1726cabdff1aSopenharmony_ci        "pand       %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
1727cabdff1aSopenharmony_ci        "psubb      %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
1728cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp12], %[stack], 0x10)
1729cabdff1aSopenharmony_ci        "pavgb      %[ftmp6],   %[ftmp6],       %[ftmp4]                \n\t"
1730cabdff1aSopenharmony_ci        "pavgb      %[ftmp6],   %[ftmp6],       %[ftmp12]               \n\t"
1731cabdff1aSopenharmony_ci        "psrlh      %[ftmp8],   %[ftmp8],       %[ftmp11]               \n\t"
1732cabdff1aSopenharmony_ci        "pavgb      %[ftmp8],   %[ftmp8],       %[ftmp0]                \n\t"
1733cabdff1aSopenharmony_ci        "pxor       %[ftmp8],   %[ftmp8],       %[ftmp6]                \n\t"
1734cabdff1aSopenharmony_ci        "pand       %[ftmp8],   %[ftmp8],       %[ftmp10]               \n\t"
1735cabdff1aSopenharmony_ci        "psubb      %[ftmp6],   %[ftmp6],       %[ftmp8]                \n\t"
1736cabdff1aSopenharmony_ci        "pxor       %[ftmp8],   %[ftmp3],       %[ftmp1]                \n\t"
1737cabdff1aSopenharmony_ci        "pavgb      %[ftmp7],   %[ftmp3],       %[ftmp1]                \n\t"
1738cabdff1aSopenharmony_ci        "pand       %[ftmp8],   %[ftmp8],       %[ftmp10]               \n\t"
1739cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp12], %[stack], 0x40)
1740cabdff1aSopenharmony_ci        "psubb      %[ftmp7],   %[ftmp7],       %[ftmp8]                \n\t"
1741cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp13], %[stack], 0x20)
1742cabdff1aSopenharmony_ci        "pavgb      %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
1743cabdff1aSopenharmony_ci        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
1744cabdff1aSopenharmony_ci        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp3]                \n\t"
1745cabdff1aSopenharmony_ci        "pand       %[ftmp6],   %[ftmp6],       %[ftmp12]               \n\t"
1746cabdff1aSopenharmony_ci        "pand       %[ftmp7],   %[ftmp7],       %[ftmp13]               \n\t"
1747cabdff1aSopenharmony_ci        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
1748cabdff1aSopenharmony_ci        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp3]                \n\t"
1749cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp6], %[pix], 0x00)
1750cabdff1aSopenharmony_ci        MMI_LDXC1(%[ftmp6], %[pix], %[addr1], 0x00)
1751cabdff1aSopenharmony_ci        "paddb      %[ftmp7],   %[ftmp14],      %[ftmp6]                \n\t"
1752cabdff1aSopenharmony_ci        "pavgb      %[ftmp6],   %[ftmp6],       %[ftmp14]               \n\t"
1753cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp12], %[stack], 0x00)
1754cabdff1aSopenharmony_ci        "pavgb      %[ftmp6],   %[ftmp6],       %[ftmp5]                \n\t"
1755cabdff1aSopenharmony_ci        "paddb      %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
1756cabdff1aSopenharmony_ci        "paddb      %[ftmp7],   %[ftmp7],       %[ftmp12]               \n\t"
1757cabdff1aSopenharmony_ci        "psrlh      %[ftmp7],   %[ftmp7],       %[ftmp11]               \n\t"
1758cabdff1aSopenharmony_ci        "pavgb      %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
1759cabdff1aSopenharmony_ci        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
1760cabdff1aSopenharmony_ci        "pand       %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
1761cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp12], %[stack], 0x40)
1762cabdff1aSopenharmony_ci        "psubb      %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
1763cabdff1aSopenharmony_ci        "pxor       %[ftmp5],   %[ftmp5],       %[ftmp4]                \n\t"
1764cabdff1aSopenharmony_ci        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp14]               \n\t"
1765cabdff1aSopenharmony_ci        "pand       %[ftmp5],   %[ftmp5],       %[ftmp12]               \n\t"
1766cabdff1aSopenharmony_ci        "pand       %[ftmp6],   %[ftmp6],       %[ftmp12]               \n\t"
1767cabdff1aSopenharmony_ci        "pxor       %[ftmp5],   %[ftmp5],       %[ftmp4]                \n\t"
1768cabdff1aSopenharmony_ci        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp14]               \n\t"
1769cabdff1aSopenharmony_ci        MMI_SDXC1(%[ftmp5], %[pix], %[stride], 0x00)
1770cabdff1aSopenharmony_ci        MMI_SDXC1(%[ftmp6], %[pix], %[addr2], 0x00)
1771cabdff1aSopenharmony_ci        "1:                                                             \n\t"
1772cabdff1aSopenharmony_ci        : [ftmp0]"=&f"(ftmp[0]),            [ftmp1]"=&f"(ftmp[1]),
1773cabdff1aSopenharmony_ci          [ftmp2]"=&f"(ftmp[2]),            [ftmp3]"=&f"(ftmp[3]),
1774cabdff1aSopenharmony_ci          [ftmp4]"=&f"(ftmp[4]),            [ftmp5]"=&f"(ftmp[5]),
1775cabdff1aSopenharmony_ci          [ftmp6]"=&f"(ftmp[6]),            [ftmp7]"=&f"(ftmp[7]),
1776cabdff1aSopenharmony_ci          [ftmp8]"=&f"(ftmp[8]),            [ftmp9]"=&f"(ftmp[9]),
1777cabdff1aSopenharmony_ci          [ftmp10]"=&f"(ftmp[10]),          [ftmp11]"=&f"(ftmp[11]),
1778cabdff1aSopenharmony_ci          [ftmp12]"=&f"(ftmp[12]),          [ftmp13]"=&f"(ftmp[13]),
1779cabdff1aSopenharmony_ci          [ftmp14]"=&f"(ftmp[14]),          [ftmp15]"=&f"(ftmp[15]),
1780cabdff1aSopenharmony_ci          [tmp0]"=&r"(tmp[0]),
1781cabdff1aSopenharmony_ci          RESTRICT_ASM_ALL64
1782cabdff1aSopenharmony_ci          RESTRICT_ASM_ADDRT
1783cabdff1aSopenharmony_ci          [addr0]"=&r"(addr[0]),            [addr1]"=&r"(addr[1]),
1784cabdff1aSopenharmony_ci          [addr2]"=&r"(addr[2]),
1785cabdff1aSopenharmony_ci          [alpha]"+&r"(alpha),              [beta]"+&r"(beta)
1786cabdff1aSopenharmony_ci        : [pix]"r"(pix),                    [stride]"r"((mips_reg)stride),
1787cabdff1aSopenharmony_ci          [stack]"r"(stack),                [ff_pb_1]"m"(ff_pb_1)
1788cabdff1aSopenharmony_ci        : "memory"
1789cabdff1aSopenharmony_ci    );
1790cabdff1aSopenharmony_ci}
1791cabdff1aSopenharmony_ci
1792cabdff1aSopenharmony_civoid ff_deblock_v_chroma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha,
1793cabdff1aSopenharmony_ci        int beta, int8_t *tc0)
1794cabdff1aSopenharmony_ci{
1795cabdff1aSopenharmony_ci    double ftmp[9];
1796cabdff1aSopenharmony_ci    mips_reg addr[1];
1797cabdff1aSopenharmony_ci    DECLARE_VAR_LOW32;
1798cabdff1aSopenharmony_ci    DECLARE_VAR_ALL64;
1799cabdff1aSopenharmony_ci    DECLARE_VAR_ADDRT;
1800cabdff1aSopenharmony_ci
1801cabdff1aSopenharmony_ci    __asm__ volatile (
1802cabdff1aSopenharmony_ci        "addi       %[alpha],   %[alpha],       -0x01                   \n\t"
1803cabdff1aSopenharmony_ci        "addi       %[beta],    %[beta],        -0x01                   \n\t"
1804cabdff1aSopenharmony_ci        "or         %[addr0],   $0,             %[pix]                  \n\t"
1805cabdff1aSopenharmony_ci        PTR_SUBU   "%[addr0],   %[addr0],       %[stride]               \n\t"
1806cabdff1aSopenharmony_ci        PTR_SUBU   "%[addr0],   %[addr0],       %[stride]               \n\t"
1807cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp1], %[addr0], 0x00)
1808cabdff1aSopenharmony_ci        MMI_LDXC1(%[ftmp2], %[addr0], %[stride], 0x00)
1809cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp3], %[pix], 0x00)
1810cabdff1aSopenharmony_ci        MMI_LDXC1(%[ftmp4], %[pix], %[stride], 0x00)
1811cabdff1aSopenharmony_ci
1812cabdff1aSopenharmony_ci        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
1813cabdff1aSopenharmony_ci        "mtc1       %[alpha],   %[ftmp5]                                \n\t"
1814cabdff1aSopenharmony_ci        "mtc1       %[beta],    %[ftmp6]                                \n\t"
1815cabdff1aSopenharmony_ci        "pshufh     %[ftmp5],   %[ftmp5],       %[ftmp0]                \n\t"
1816cabdff1aSopenharmony_ci        "pshufh     %[ftmp6],   %[ftmp6],       %[ftmp0]                \n\t"
1817cabdff1aSopenharmony_ci        "packushb   %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
1818cabdff1aSopenharmony_ci        "packushb   %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
1819cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp3],       %[ftmp2]                \n\t"
1820cabdff1aSopenharmony_ci        "psubusb    %[ftmp8],   %[ftmp2],       %[ftmp3]                \n\t"
1821cabdff1aSopenharmony_ci        "por        %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
1822cabdff1aSopenharmony_ci        "psubusb    %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
1823cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp2],       %[ftmp1]                \n\t"
1824cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp1],       %[ftmp2]                \n\t"
1825cabdff1aSopenharmony_ci        "por        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1826cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
1827cabdff1aSopenharmony_ci        "por        %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
1828cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp3],       %[ftmp4]                \n\t"
1829cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp4],       %[ftmp3]                \n\t"
1830cabdff1aSopenharmony_ci        "por        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1831cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
1832cabdff1aSopenharmony_ci        "por        %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
1833cabdff1aSopenharmony_ci        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
1834cabdff1aSopenharmony_ci        "pcmpeqb    %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
1835cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp7], %[tc0], 0x00)
1836cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
1837cabdff1aSopenharmony_ci        "pand       %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
1838cabdff1aSopenharmony_ci        "pcmpeqb    %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
1839cabdff1aSopenharmony_ci        "pxor       %[ftmp6],   %[ftmp2],       %[ftmp3]                \n\t"
1840cabdff1aSopenharmony_ci        "pxor       %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
1841cabdff1aSopenharmony_ci        "pand       %[ftmp6],   %[ftmp6],       %[ff_pb_1]              \n\t"
1842cabdff1aSopenharmony_ci        "pavgb      %[ftmp4],   %[ftmp4],       %[ftmp1]                \n\t"
1843cabdff1aSopenharmony_ci        "pxor       %[ftmp5],   %[ftmp5],       %[ftmp2]                \n\t"
1844cabdff1aSopenharmony_ci        "pavgb      %[ftmp4],   %[ftmp4],       %[ff_pb_3]              \n\t"
1845cabdff1aSopenharmony_ci        "pavgb      %[ftmp5],   %[ftmp5],       %[ftmp3]                \n\t"
1846cabdff1aSopenharmony_ci        "pavgb      %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
1847cabdff1aSopenharmony_ci        "paddusb    %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
1848cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ff_pb_A1],    %[ftmp4]                \n\t"
1849cabdff1aSopenharmony_ci        "psubusb    %[ftmp4],   %[ftmp4],       %[ff_pb_A1]             \n\t"
1850cabdff1aSopenharmony_ci        "pminub     %[ftmp7],   %[ftmp7],       %[ftmp8]                \n\t"
1851cabdff1aSopenharmony_ci        "pminub     %[ftmp4],   %[ftmp4],       %[ftmp8]                \n\t"
1852cabdff1aSopenharmony_ci        "psubusb    %[ftmp2],   %[ftmp2],       %[ftmp7]                \n\t"
1853cabdff1aSopenharmony_ci        "psubusb    %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
1854cabdff1aSopenharmony_ci        "paddusb    %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
1855cabdff1aSopenharmony_ci        "paddusb    %[ftmp3],   %[ftmp3],       %[ftmp7]                \n\t"
1856cabdff1aSopenharmony_ci
1857cabdff1aSopenharmony_ci        MMI_SDXC1(%[ftmp2], %[addr0], %[stride], 0x00)
1858cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp3], %[pix], 0x00)
1859cabdff1aSopenharmony_ci        : [ftmp0]"=&f"(ftmp[0]),            [ftmp1]"=&f"(ftmp[1]),
1860cabdff1aSopenharmony_ci          [ftmp2]"=&f"(ftmp[2]),            [ftmp3]"=&f"(ftmp[3]),
1861cabdff1aSopenharmony_ci          [ftmp4]"=&f"(ftmp[4]),            [ftmp5]"=&f"(ftmp[5]),
1862cabdff1aSopenharmony_ci          [ftmp6]"=&f"(ftmp[6]),            [ftmp7]"=&f"(ftmp[7]),
1863cabdff1aSopenharmony_ci          [ftmp8]"=&f"(ftmp[8]),
1864cabdff1aSopenharmony_ci          RESTRICT_ASM_LOW32
1865cabdff1aSopenharmony_ci          RESTRICT_ASM_ALL64
1866cabdff1aSopenharmony_ci          RESTRICT_ASM_ADDRT
1867cabdff1aSopenharmony_ci          [addr0]"=&r"(addr[0])
1868cabdff1aSopenharmony_ci        : [pix]"r"(pix),                    [stride]"r"((mips_reg)stride),
1869cabdff1aSopenharmony_ci          [alpha]"r"(alpha),                [beta]"r"(beta),
1870cabdff1aSopenharmony_ci          [tc0]"r"(tc0),                    [ff_pb_1]"f"(ff_pb_1.f),
1871cabdff1aSopenharmony_ci          [ff_pb_3]"f"(ff_pb_3.f),          [ff_pb_A1]"f"(ff_pb_A1.f)
1872cabdff1aSopenharmony_ci        : "memory"
1873cabdff1aSopenharmony_ci    );
1874cabdff1aSopenharmony_ci}
1875cabdff1aSopenharmony_ci
1876cabdff1aSopenharmony_civoid ff_deblock_v_chroma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha,
1877cabdff1aSopenharmony_ci        int beta)
1878cabdff1aSopenharmony_ci{
1879cabdff1aSopenharmony_ci    double ftmp[9];
1880cabdff1aSopenharmony_ci    mips_reg addr[1];
1881cabdff1aSopenharmony_ci    DECLARE_VAR_ALL64;
1882cabdff1aSopenharmony_ci    DECLARE_VAR_ADDRT;
1883cabdff1aSopenharmony_ci
1884cabdff1aSopenharmony_ci    __asm__ volatile (
1885cabdff1aSopenharmony_ci        "addi       %[alpha],   %[alpha],       -0x01                   \n\t"
1886cabdff1aSopenharmony_ci        "addi       %[beta],    %[beta],        -0x01                   \n\t"
1887cabdff1aSopenharmony_ci        "or         %[addr0],   $0,             %[pix]                  \n\t"
1888cabdff1aSopenharmony_ci        PTR_SUBU   "%[addr0],   %[addr0],       %[stride]               \n\t"
1889cabdff1aSopenharmony_ci        PTR_SUBU   "%[addr0],   %[addr0],       %[stride]               \n\t"
1890cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp1], %[addr0], 0x00)
1891cabdff1aSopenharmony_ci        MMI_LDXC1(%[ftmp2], %[addr0], %[stride], 0x00)
1892cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp3], %[pix], 0x00)
1893cabdff1aSopenharmony_ci        MMI_LDXC1(%[ftmp4], %[pix], %[stride], 0x00)
1894cabdff1aSopenharmony_ci
1895cabdff1aSopenharmony_ci        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
1896cabdff1aSopenharmony_ci        "mtc1       %[alpha],   %[ftmp5]                                \n\t"
1897cabdff1aSopenharmony_ci        "mtc1       %[beta],    %[ftmp6]                                \n\t"
1898cabdff1aSopenharmony_ci        "pshufh     %[ftmp5],   %[ftmp5],       %[ftmp0]                \n\t"
1899cabdff1aSopenharmony_ci        "pshufh     %[ftmp6],   %[ftmp6],       %[ftmp0]                \n\t"
1900cabdff1aSopenharmony_ci        "packushb   %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
1901cabdff1aSopenharmony_ci        "packushb   %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
1902cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp3],       %[ftmp2]                \n\t"
1903cabdff1aSopenharmony_ci        "psubusb    %[ftmp8],   %[ftmp2],       %[ftmp3]                \n\t"
1904cabdff1aSopenharmony_ci        "por        %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
1905cabdff1aSopenharmony_ci        "psubusb    %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
1906cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp2],       %[ftmp1]                \n\t"
1907cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp1],       %[ftmp2]                \n\t"
1908cabdff1aSopenharmony_ci        "por        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1909cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
1910cabdff1aSopenharmony_ci        "por        %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
1911cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp3],       %[ftmp4]                \n\t"
1912cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp4],       %[ftmp3]                \n\t"
1913cabdff1aSopenharmony_ci        "por        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1914cabdff1aSopenharmony_ci        "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
1915cabdff1aSopenharmony_ci        "por        %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
1916cabdff1aSopenharmony_ci        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
1917cabdff1aSopenharmony_ci        "pcmpeqb    %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
1918cabdff1aSopenharmony_ci        "mov.d      %[ftmp6],   %[ftmp2]                                \n\t"
1919cabdff1aSopenharmony_ci        "mov.d      %[ftmp7],   %[ftmp3]                                \n\t"
1920cabdff1aSopenharmony_ci        "pxor       %[ftmp5],   %[ftmp2],       %[ftmp4]                \n\t"
1921cabdff1aSopenharmony_ci        "pand       %[ftmp5],   %[ftmp5],       %[ff_pb_1]              \n\t"
1922cabdff1aSopenharmony_ci        "pavgb      %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
1923cabdff1aSopenharmony_ci        "psubusb    %[ftmp2],   %[ftmp2],       %[ftmp5]                \n\t"
1924cabdff1aSopenharmony_ci        "pavgb      %[ftmp2],   %[ftmp2],       %[ftmp1]                \n\t"
1925cabdff1aSopenharmony_ci        "pxor       %[ftmp5],   %[ftmp3],       %[ftmp1]                \n\t"
1926cabdff1aSopenharmony_ci        "pand       %[ftmp5],   %[ftmp5],       %[ff_pb_1]              \n\t"
1927cabdff1aSopenharmony_ci        "pavgb      %[ftmp3],   %[ftmp3],       %[ftmp1]                \n\t"
1928cabdff1aSopenharmony_ci        "psubusb    %[ftmp3],   %[ftmp3],       %[ftmp5]                \n\t"
1929cabdff1aSopenharmony_ci        "pavgb      %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
1930cabdff1aSopenharmony_ci        "psubb      %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
1931cabdff1aSopenharmony_ci        "psubb      %[ftmp3],   %[ftmp3],       %[ftmp7]                \n\t"
1932cabdff1aSopenharmony_ci        "pand       %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
1933cabdff1aSopenharmony_ci        "pand       %[ftmp3],   %[ftmp3],       %[ftmp8]                \n\t"
1934cabdff1aSopenharmony_ci        "paddb      %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
1935cabdff1aSopenharmony_ci        "paddb      %[ftmp3],   %[ftmp3],       %[ftmp7]                \n\t"
1936cabdff1aSopenharmony_ci
1937cabdff1aSopenharmony_ci        MMI_SDXC1(%[ftmp2], %[addr0], %[stride], 0x00)
1938cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp3], %[pix], 0x00)
1939cabdff1aSopenharmony_ci        : [ftmp0]"=&f"(ftmp[0]),            [ftmp1]"=&f"(ftmp[1]),
1940cabdff1aSopenharmony_ci          [ftmp2]"=&f"(ftmp[2]),            [ftmp3]"=&f"(ftmp[3]),
1941cabdff1aSopenharmony_ci          [ftmp4]"=&f"(ftmp[4]),            [ftmp5]"=&f"(ftmp[5]),
1942cabdff1aSopenharmony_ci          [ftmp6]"=&f"(ftmp[6]),            [ftmp7]"=&f"(ftmp[7]),
1943cabdff1aSopenharmony_ci          [ftmp8]"=&f"(ftmp[8]),
1944cabdff1aSopenharmony_ci          RESTRICT_ASM_ALL64
1945cabdff1aSopenharmony_ci          RESTRICT_ASM_ADDRT
1946cabdff1aSopenharmony_ci          [addr0]"=&r"(addr[0])
1947cabdff1aSopenharmony_ci        : [pix]"r"(pix),                    [stride]"r"((mips_reg)stride),
1948cabdff1aSopenharmony_ci          [alpha]"r"(alpha),                [beta]"r"(beta),
1949cabdff1aSopenharmony_ci          [ff_pb_1]"f"(ff_pb_1.f)
1950cabdff1aSopenharmony_ci        : "memory"
1951cabdff1aSopenharmony_ci    );
1952cabdff1aSopenharmony_ci}
1953cabdff1aSopenharmony_ci
1954cabdff1aSopenharmony_civoid ff_deblock_h_chroma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int beta,
1955cabdff1aSopenharmony_ci        int8_t *tc0)
1956cabdff1aSopenharmony_ci{
1957cabdff1aSopenharmony_ci    double ftmp[11];
1958cabdff1aSopenharmony_ci    mips_reg addr[6];
1959cabdff1aSopenharmony_ci    DECLARE_VAR_LOW32;
1960cabdff1aSopenharmony_ci
1961cabdff1aSopenharmony_ci    __asm__ volatile (
1962cabdff1aSopenharmony_ci        "addi       %[alpha],   %[alpha],       -0x01                   \n\t"
1963cabdff1aSopenharmony_ci        "addi       %[beta],    %[beta],        -0x01                   \n\t"
1964cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr0],   %[stride],      %[stride]               \n\t"
1965cabdff1aSopenharmony_ci        PTR_ADDI   "%[pix],     %[pix],         -0x02                   \n\t"
1966cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr1],   %[addr0],       %[stride]               \n\t"
1967cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr2],   %[addr0],       %[addr0]                \n\t"
1968cabdff1aSopenharmony_ci        "or         %[addr5],   $0,             %[pix]                  \n\t"
1969cabdff1aSopenharmony_ci        PTR_ADDU   "%[pix],     %[pix],         %[addr1]                \n\t"
1970cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp0], %[addr5], 0x00)
1971cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr5],       %[stride]               \n\t"
1972cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp2], %[addr3], 0x00)
1973cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr4],   %[addr5],       %[addr0]                \n\t"
1974cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp1], %[addr4], 0x00)
1975cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp3], %[pix], 0x00)
1976cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
1977cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp1],   %[ftmp1],       %[ftmp3]                \n\t"
1978cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[pix],         %[stride]               \n\t"
1979cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp2],   %[ftmp0],       %[ftmp1]                \n\t"
1980cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
1981cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp4], %[addr3], 0x00)
1982cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr4],   %[pix],         %[addr0]                \n\t"
1983cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp6], %[addr4], 0x00)
1984cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[pix],         %[addr1]                \n\t"
1985cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp5], %[addr3], 0x00)
1986cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr4],   %[pix],         %[addr2]                \n\t"
1987cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp7], %[addr4], 0x00)
1988cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
1989cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
1990cabdff1aSopenharmony_ci        "mov.d      %[ftmp6],   %[ftmp4]                                \n\t"
1991cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
1992cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp6],   %[ftmp6],       %[ftmp5]                \n\t"
1993cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp1],   %[ftmp0],       %[ftmp4]                \n\t"
1994cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp3],   %[ftmp2],       %[ftmp6]                \n\t"
1995cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
1996cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
1997cabdff1aSopenharmony_ci        "mov.d      %[ftmp9],   %[ftmp0]                                \n\t"
1998cabdff1aSopenharmony_ci        "mov.d      %[ftmp10],  %[ftmp3]                                \n\t"
1999cabdff1aSopenharmony_ci
2000cabdff1aSopenharmony_ci        "pxor       %[ftmp8],   %[ftmp8],       %[ftmp8]                \n\t"
2001cabdff1aSopenharmony_ci        "mtc1       %[alpha],   %[ftmp4]                                \n\t"
2002cabdff1aSopenharmony_ci        "mtc1       %[beta],    %[ftmp5]                                \n\t"
2003cabdff1aSopenharmony_ci        "pshufh     %[ftmp4],   %[ftmp4],       %[ftmp8]                \n\t"
2004cabdff1aSopenharmony_ci        "pshufh     %[ftmp5],   %[ftmp5],       %[ftmp8]                \n\t"
2005cabdff1aSopenharmony_ci        "packushb   %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
2006cabdff1aSopenharmony_ci        "packushb   %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
2007cabdff1aSopenharmony_ci        "psubusb    %[ftmp6],   %[ftmp2],       %[ftmp1]                \n\t"
2008cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp1],       %[ftmp2]                \n\t"
2009cabdff1aSopenharmony_ci        "por        %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
2010cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
2011cabdff1aSopenharmony_ci        "psubusb    %[ftmp6],   %[ftmp1],       %[ftmp0]                \n\t"
2012cabdff1aSopenharmony_ci        "psubusb    %[ftmp4],   %[ftmp0],       %[ftmp1]                \n\t"
2013cabdff1aSopenharmony_ci        "por        %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
2014cabdff1aSopenharmony_ci        "psubusb    %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
2015cabdff1aSopenharmony_ci        "por        %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
2016cabdff1aSopenharmony_ci        "psubusb    %[ftmp6],   %[ftmp2],       %[ftmp3]                \n\t"
2017cabdff1aSopenharmony_ci        "psubusb    %[ftmp4],   %[ftmp3],       %[ftmp2]                \n\t"
2018cabdff1aSopenharmony_ci        "por        %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
2019cabdff1aSopenharmony_ci        "psubusb    %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
2020cabdff1aSopenharmony_ci        "por        %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
2021cabdff1aSopenharmony_ci        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
2022cabdff1aSopenharmony_ci        "pcmpeqb    %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
2023cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp6], %[tc0], 0x00)
2024cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
2025cabdff1aSopenharmony_ci        "pand       %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
2026cabdff1aSopenharmony_ci        "pcmpeqb    %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
2027cabdff1aSopenharmony_ci        "pxor       %[ftmp5],   %[ftmp1],       %[ftmp2]                \n\t"
2028cabdff1aSopenharmony_ci        "pxor       %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
2029cabdff1aSopenharmony_ci        "pand       %[ftmp5],   %[ftmp5],       %[ff_pb_1]              \n\t"
2030cabdff1aSopenharmony_ci        "pavgb      %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
2031cabdff1aSopenharmony_ci        "pxor       %[ftmp4],   %[ftmp4],       %[ftmp1]                \n\t"
2032cabdff1aSopenharmony_ci        "pavgb      %[ftmp3],   %[ftmp3],       %[ff_pb_3]              \n\t"
2033cabdff1aSopenharmony_ci        "pavgb      %[ftmp4],   %[ftmp4],       %[ftmp2]                \n\t"
2034cabdff1aSopenharmony_ci        "pavgb      %[ftmp3],   %[ftmp3],       %[ftmp5]                \n\t"
2035cabdff1aSopenharmony_ci        "paddusb    %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
2036cabdff1aSopenharmony_ci        "psubusb    %[ftmp6],   %[ff_pb_A1],    %[ftmp3]                \n\t"
2037cabdff1aSopenharmony_ci        "psubusb    %[ftmp3],   %[ftmp3],       %[ff_pb_A1]             \n\t"
2038cabdff1aSopenharmony_ci        "pminub     %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
2039cabdff1aSopenharmony_ci        "pminub     %[ftmp3],   %[ftmp3],       %[ftmp7]                \n\t"
2040cabdff1aSopenharmony_ci        "psubusb    %[ftmp1],   %[ftmp1],       %[ftmp6]                \n\t"
2041cabdff1aSopenharmony_ci        "psubusb    %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
2042cabdff1aSopenharmony_ci        "paddusb    %[ftmp1],   %[ftmp1],       %[ftmp3]                \n\t"
2043cabdff1aSopenharmony_ci        "paddusb    %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
2044cabdff1aSopenharmony_ci
2045cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp4],   %[ftmp9],       %[ftmp9]                \n\t"
2046cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp1],       %[ftmp1]                \n\t"
2047cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp6],   %[ftmp2],       %[ftmp2]                \n\t"
2048cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp9],       %[ftmp1]                \n\t"
2049cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp10]               \n\t"
2050cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp1],   %[ftmp0],       %[ftmp2]                \n\t"
2051cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
2052cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp1], %[addr5], 0x00)
2053cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr5],       %[stride]               \n\t"
2054cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp1],   %[ftmp1],       %[ftmp1]                \n\t"
2055cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp1], %[addr3], 0x00)
2056cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr4],   %[addr5],       %[addr0]                \n\t"
2057cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp0], %[addr4], 0x00)
2058cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
2059cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp3],   %[ftmp10],      %[ftmp10]               \n\t"
2060cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp0], %[pix], 0x00)
2061cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
2062cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp6],   %[ftmp6],       %[ftmp3]                \n\t"
2063cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[pix],         %[stride]               \n\t"
2064cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp5],   %[ftmp4],       %[ftmp6]                \n\t"
2065cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
2066cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp5], %[addr3], 0x00)
2067cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
2068cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[pix],         %[addr0]                \n\t"
2069cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr4],   %[pix],         %[addr1]                \n\t"
2070cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp5], %[addr3], 0x00)
2071cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp4], %[addr4], 0x00)
2072cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[pix],         %[addr2]                \n\t"
2073cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp9],   %[ftmp4],       %[ftmp4]                \n\t"
2074cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp9], %[addr3], 0x00)
2075cabdff1aSopenharmony_ci        : [ftmp0]"=&f"(ftmp[0]),            [ftmp1]"=&f"(ftmp[1]),
2076cabdff1aSopenharmony_ci          [ftmp2]"=&f"(ftmp[2]),            [ftmp3]"=&f"(ftmp[3]),
2077cabdff1aSopenharmony_ci          [ftmp4]"=&f"(ftmp[4]),            [ftmp5]"=&f"(ftmp[5]),
2078cabdff1aSopenharmony_ci          [ftmp6]"=&f"(ftmp[6]),            [ftmp7]"=&f"(ftmp[7]),
2079cabdff1aSopenharmony_ci          [ftmp8]"=&f"(ftmp[8]),            [ftmp9]"=&f"(ftmp[9]),
2080cabdff1aSopenharmony_ci          [ftmp10]"=&f"(ftmp[10]),
2081cabdff1aSopenharmony_ci          RESTRICT_ASM_LOW32
2082cabdff1aSopenharmony_ci          [addr0]"=&r"(addr[0]),            [addr1]"=&r"(addr[1]),
2083cabdff1aSopenharmony_ci          [addr2]"=&r"(addr[2]),            [addr3]"=&r"(addr[3]),
2084cabdff1aSopenharmony_ci          [addr4]"=&r"(addr[4]),            [addr5]"=&r"(addr[5]),
2085cabdff1aSopenharmony_ci          [pix]"+&r"(pix)
2086cabdff1aSopenharmony_ci        : [alpha]"r"(alpha),                [beta]"r"(beta),
2087cabdff1aSopenharmony_ci          [stride]"r"((mips_reg)stride),    [tc0]"r"(tc0),
2088cabdff1aSopenharmony_ci          [ff_pb_1]"f"(ff_pb_1.f),          [ff_pb_3]"f"(ff_pb_3.f),
2089cabdff1aSopenharmony_ci          [ff_pb_A1]"f"(ff_pb_A1.f)
2090cabdff1aSopenharmony_ci        : "memory"
2091cabdff1aSopenharmony_ci    );
2092cabdff1aSopenharmony_ci}
2093cabdff1aSopenharmony_ci
2094cabdff1aSopenharmony_civoid ff_deblock_h_chroma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha,
2095cabdff1aSopenharmony_ci        int beta)
2096cabdff1aSopenharmony_ci{
2097cabdff1aSopenharmony_ci    double ftmp[11];
2098cabdff1aSopenharmony_ci    mips_reg addr[6];
2099cabdff1aSopenharmony_ci    DECLARE_VAR_LOW32;
2100cabdff1aSopenharmony_ci
2101cabdff1aSopenharmony_ci    __asm__ volatile (
2102cabdff1aSopenharmony_ci        "addi       %[alpha],   %[alpha],       -0x01                   \n\t"
2103cabdff1aSopenharmony_ci        "addi       %[beta],    %[beta],        -0x01                   \n\t"
2104cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr0],   %[stride],      %[stride]               \n\t"
2105cabdff1aSopenharmony_ci        PTR_ADDI   "%[pix],     %[pix],         -0x02                   \n\t"
2106cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr1],   %[addr0],       %[stride]               \n\t"
2107cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr2],   %[addr0],       %[addr0]                \n\t"
2108cabdff1aSopenharmony_ci        "or         %[addr5],   $0,             %[pix]                  \n\t"
2109cabdff1aSopenharmony_ci        PTR_ADDU   "%[pix],     %[pix],         %[addr1]                \n\t"
2110cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp0], %[addr5], 0x00)
2111cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr5],       %[stride]               \n\t"
2112cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp2], %[addr3], 0x00)
2113cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr4],   %[addr5],       %[addr0]                \n\t"
2114cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp1], %[addr4], 0x00)
2115cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp3], %[pix], 0x00)
2116cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
2117cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp1],   %[ftmp1],       %[ftmp3]                \n\t"
2118cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[pix],         %[stride]               \n\t"
2119cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp2],   %[ftmp0],       %[ftmp1]                \n\t"
2120cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
2121cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp4], %[addr3], 0x00)
2122cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr4],   %[pix],         %[addr0]                \n\t"
2123cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp6], %[addr4], 0x00)
2124cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[pix],         %[addr1]                \n\t"
2125cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp5], %[addr3], 0x00)
2126cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr4],   %[pix],         %[addr2]                \n\t"
2127cabdff1aSopenharmony_ci        MMI_ULWC1(%[ftmp7], %[addr4], 0x00)
2128cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
2129cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
2130cabdff1aSopenharmony_ci        "mov.d      %[ftmp6],   %[ftmp4]                                \n\t"
2131cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
2132cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp6],   %[ftmp6],       %[ftmp5]                \n\t"
2133cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp1],   %[ftmp0],       %[ftmp4]                \n\t"
2134cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp3],   %[ftmp2],       %[ftmp6]                \n\t"
2135cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
2136cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
2137cabdff1aSopenharmony_ci
2138cabdff1aSopenharmony_ci        "pxor       %[ftmp8],   %[ftmp8],       %[ftmp8]                \n\t"
2139cabdff1aSopenharmony_ci        "mtc1       %[alpha],   %[ftmp4]                                \n\t"
2140cabdff1aSopenharmony_ci        "mtc1       %[beta],    %[ftmp5]                                \n\t"
2141cabdff1aSopenharmony_ci        "pshufh     %[ftmp4],   %[ftmp4],       %[ftmp8]                \n\t"
2142cabdff1aSopenharmony_ci        "pshufh     %[ftmp5],   %[ftmp5],       %[ftmp8]                \n\t"
2143cabdff1aSopenharmony_ci        "packushb   %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
2144cabdff1aSopenharmony_ci        "packushb   %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
2145cabdff1aSopenharmony_ci        "psubusb    %[ftmp6],   %[ftmp2],       %[ftmp1]                \n\t"
2146cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp1],       %[ftmp2]                \n\t"
2147cabdff1aSopenharmony_ci        "por        %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
2148cabdff1aSopenharmony_ci        "psubusb    %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
2149cabdff1aSopenharmony_ci        "psubusb    %[ftmp6],   %[ftmp1],       %[ftmp0]                \n\t"
2150cabdff1aSopenharmony_ci        "psubusb    %[ftmp4],   %[ftmp0],       %[ftmp1]                \n\t"
2151cabdff1aSopenharmony_ci        "por        %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
2152cabdff1aSopenharmony_ci        "psubusb    %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
2153cabdff1aSopenharmony_ci        "por        %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
2154cabdff1aSopenharmony_ci        "psubusb    %[ftmp6],   %[ftmp2],       %[ftmp3]                \n\t"
2155cabdff1aSopenharmony_ci        "psubusb    %[ftmp4],   %[ftmp3],       %[ftmp2]                \n\t"
2156cabdff1aSopenharmony_ci        "por        %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
2157cabdff1aSopenharmony_ci        "psubusb    %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
2158cabdff1aSopenharmony_ci        "por        %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
2159cabdff1aSopenharmony_ci        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
2160cabdff1aSopenharmony_ci        "pcmpeqb    %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
2161cabdff1aSopenharmony_ci        "mov.d      %[ftmp5],   %[ftmp1]                                \n\t"
2162cabdff1aSopenharmony_ci        "mov.d      %[ftmp6],   %[ftmp2]                                \n\t"
2163cabdff1aSopenharmony_ci        "pxor       %[ftmp4],   %[ftmp1],       %[ftmp3]                \n\t"
2164cabdff1aSopenharmony_ci        "pand       %[ftmp4],   %[ftmp4],       %[ff_pb_1]              \n\t"
2165cabdff1aSopenharmony_ci        "pavgb      %[ftmp1],   %[ftmp1],       %[ftmp3]                \n\t"
2166cabdff1aSopenharmony_ci        "psubusb    %[ftmp1],   %[ftmp1],       %[ftmp4]                \n\t"
2167cabdff1aSopenharmony_ci        "pavgb      %[ftmp1],   %[ftmp1],       %[ftmp0]                \n\t"
2168cabdff1aSopenharmony_ci        "pxor       %[ftmp4],   %[ftmp2],       %[ftmp0]                \n\t"
2169cabdff1aSopenharmony_ci        "pand       %[ftmp4],   %[ftmp4],       %[ff_pb_1]              \n\t"
2170cabdff1aSopenharmony_ci        "pavgb      %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
2171cabdff1aSopenharmony_ci        "psubusb    %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
2172cabdff1aSopenharmony_ci        "pavgb      %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
2173cabdff1aSopenharmony_ci        "psubb      %[ftmp1],   %[ftmp1],       %[ftmp5]                \n\t"
2174cabdff1aSopenharmony_ci        "psubb      %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
2175cabdff1aSopenharmony_ci        "pand       %[ftmp1],   %[ftmp1],       %[ftmp7]                \n\t"
2176cabdff1aSopenharmony_ci        "pand       %[ftmp2],   %[ftmp2],       %[ftmp7]                \n\t"
2177cabdff1aSopenharmony_ci        "paddb      %[ftmp1],   %[ftmp1],       %[ftmp5]                \n\t"
2178cabdff1aSopenharmony_ci        "paddb      %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
2179cabdff1aSopenharmony_ci
2180cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp4],   %[ftmp0],       %[ftmp0]                \n\t"
2181cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp1],       %[ftmp1]                \n\t"
2182cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp6],   %[ftmp2],       %[ftmp2]                \n\t"
2183cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
2184cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
2185cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp1],   %[ftmp0],       %[ftmp2]                \n\t"
2186cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
2187cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp1], %[addr5], 0x00)
2188cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr5],       %[stride]               \n\t"
2189cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp1],   %[ftmp1],       %[ftmp1]                \n\t"
2190cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr4],   %[addr5],       %[addr0]                \n\t"
2191cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp1], %[addr3], 0x00)
2192cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp0], %[addr4], 0x00)
2193cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
2194cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp3],   %[ftmp3],       %[ftmp3]                \n\t"
2195cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp0], %[pix], 0x00)
2196cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
2197cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp6],   %[ftmp6],       %[ftmp3]                \n\t"
2198cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[pix],         %[stride]               \n\t"
2199cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp5],   %[ftmp4],       %[ftmp6]                \n\t"
2200cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
2201cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp5], %[addr3], 0x00)
2202cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
2203cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[pix],         %[addr0]                \n\t"
2204cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr4],   %[pix],         %[addr1]                \n\t"
2205cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp5], %[addr3], 0x00)
2206cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[pix],         %[addr2]                \n\t"
2207cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp4], %[addr4], 0x00)
2208cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp9],   %[ftmp4],       %[ftmp4]                \n\t"
2209cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp9], %[addr3], 0x00)
2210cabdff1aSopenharmony_ci        : [ftmp0]"=&f"(ftmp[0]),            [ftmp1]"=&f"(ftmp[1]),
2211cabdff1aSopenharmony_ci          [ftmp2]"=&f"(ftmp[2]),            [ftmp3]"=&f"(ftmp[3]),
2212cabdff1aSopenharmony_ci          [ftmp4]"=&f"(ftmp[4]),            [ftmp5]"=&f"(ftmp[5]),
2213cabdff1aSopenharmony_ci          [ftmp6]"=&f"(ftmp[6]),            [ftmp7]"=&f"(ftmp[7]),
2214cabdff1aSopenharmony_ci          [ftmp8]"=&f"(ftmp[8]),            [ftmp9]"=&f"(ftmp[9]),
2215cabdff1aSopenharmony_ci          [ftmp10]"=&f"(ftmp[10]),
2216cabdff1aSopenharmony_ci          RESTRICT_ASM_LOW32
2217cabdff1aSopenharmony_ci          [addr0]"=&r"(addr[0]),            [addr1]"=&r"(addr[1]),
2218cabdff1aSopenharmony_ci          [addr2]"=&r"(addr[2]),            [addr3]"=&r"(addr[3]),
2219cabdff1aSopenharmony_ci          [addr4]"=&r"(addr[4]),            [addr5]"=&r"(addr[5]),
2220cabdff1aSopenharmony_ci          [pix]"+&r"(pix)
2221cabdff1aSopenharmony_ci        : [alpha]"r"(alpha),                [beta]"r"(beta),
2222cabdff1aSopenharmony_ci          [stride]"r"((mips_reg)stride),    [ff_pb_1]"f"(ff_pb_1.f)
2223cabdff1aSopenharmony_ci        : "memory"
2224cabdff1aSopenharmony_ci    );
2225cabdff1aSopenharmony_ci}
2226cabdff1aSopenharmony_ci
2227cabdff1aSopenharmony_civoid ff_deblock_v_luma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int beta,
2228cabdff1aSopenharmony_ci        int8_t *tc0)
2229cabdff1aSopenharmony_ci{
2230cabdff1aSopenharmony_ci    if ((tc0[0] & tc0[1]) >= 0)
2231cabdff1aSopenharmony_ci        ff_deblock_v8_luma_8_mmi(pix + 0, stride, alpha, beta, tc0);
2232cabdff1aSopenharmony_ci    if ((tc0[2] & tc0[3]) >= 0)
2233cabdff1aSopenharmony_ci        ff_deblock_v8_luma_8_mmi(pix + 8, stride, alpha, beta, tc0 + 2);
2234cabdff1aSopenharmony_ci}
2235cabdff1aSopenharmony_ci
2236cabdff1aSopenharmony_civoid ff_deblock_v_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha,
2237cabdff1aSopenharmony_ci        int beta)
2238cabdff1aSopenharmony_ci{
2239cabdff1aSopenharmony_ci    deblock_v8_luma_intra_8_mmi(pix + 0, stride, alpha, beta);
2240cabdff1aSopenharmony_ci    deblock_v8_luma_intra_8_mmi(pix + 8, stride, alpha, beta);
2241cabdff1aSopenharmony_ci}
2242cabdff1aSopenharmony_ci
2243cabdff1aSopenharmony_civoid ff_deblock_h_luma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int beta,
2244cabdff1aSopenharmony_ci        int8_t *tc0)
2245cabdff1aSopenharmony_ci{
2246cabdff1aSopenharmony_ci    DECLARE_ALIGNED(8, const uint64_t, stack[0x0d]);
2247cabdff1aSopenharmony_ci    double ftmp[9];
2248cabdff1aSopenharmony_ci    mips_reg addr[8];
2249cabdff1aSopenharmony_ci    DECLARE_VAR_LOW32;
2250cabdff1aSopenharmony_ci    DECLARE_VAR_ALL64;
2251cabdff1aSopenharmony_ci
2252cabdff1aSopenharmony_ci    __asm__ volatile (
2253cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr0],   %[stride],      %[stride]               \n\t"
2254cabdff1aSopenharmony_ci        PTR_ADDI   "%[addr1],   %[pix],         -0x4                    \n\t"
2255cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr2],   %[stride],      %[addr0]                \n\t"
2256cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp0], %[addr1], 0x00)
2257cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr1],       %[stride]               \n\t"
2258cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr4],   %[addr1],       %[addr2]                \n\t"
2259cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp1], %[addr3], 0x00)
2260cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr1],       %[addr0]                \n\t"
2261cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp2], %[addr5], 0x00)
2262cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp3], %[addr4], 0x00)
2263cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr4],       %[stride]               \n\t"
2264cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp4], %[addr3], 0x00)
2265cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr4],       %[addr0]                \n\t"
2266cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp5], %[addr5], 0x00)
2267cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr4],       %[addr2]                \n\t"
2268cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp6], %[addr3], 0x00)
2269cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr6],   %[addr0],       %[addr0]                \n\t"
2270cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp7],   %[ftmp0],       %[ftmp1]                \n\t"
2271cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
2272cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp1],   %[ftmp2],       %[ftmp3]                \n\t"
2273cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
2274cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp3],   %[ftmp4],       %[ftmp5]                \n\t"
2275cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
2276cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr4],       %[addr6]                \n\t"
2277cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp1], %[stack], 0x10)
2278cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp8], %[addr3], 0x00)
2279cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr7],   %[addr6],       %[addr6]                \n\t"
2280cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp5],   %[ftmp6],       %[ftmp8]                \n\t"
2281cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp6],   %[ftmp6],       %[ftmp8]                \n\t"
2282cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp1],   %[ftmp0],       %[ftmp2]                \n\t"
2283cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
2284cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp2],   %[ftmp4],       %[ftmp6]                \n\t"
2285cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
2286cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp8], %[stack], 0x10)
2287cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
2288cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp0], %[stack], 0x00)
2289cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp6],   %[ftmp7],       %[ftmp8]                \n\t"
2290cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp7],   %[ftmp7],       %[ftmp8]                \n\t"
2291cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp0],   %[ftmp3],       %[ftmp5]                \n\t"
2292cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp3],   %[ftmp3],       %[ftmp5]                \n\t"
2293cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp6],   %[ftmp6],       %[ftmp0]                \n\t"
2294cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp7],       %[ftmp3]                \n\t"
2295cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp7],   %[ftmp7],       %[ftmp3]                \n\t"
2296cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp3],   %[ftmp1],       %[ftmp2]                \n\t"
2297cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp1],   %[ftmp1],       %[ftmp2]                \n\t"
2298cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp1], %[stack], 0x10)
2299cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp3], %[stack], 0x20)
2300cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp7], %[stack], 0x30)
2301cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp5], %[stack], 0x40)
2302cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp6], %[stack], 0x50)
2303cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr1],   %[addr1],       %[addr7]                \n\t"
2304cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr4],   %[addr4],       %[addr7]                \n\t"
2305cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp0], %[addr1], 0x00)
2306cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr1],       %[stride]               \n\t"
2307cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp1], %[addr3], 0x00)
2308cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr1],       %[addr0]                \n\t"
2309cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp2], %[addr5], 0x00)
2310cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp3], %[addr4], 0x00)
2311cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr4],       %[stride]               \n\t"
2312cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp4], %[addr3], 0x00)
2313cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr4],       %[addr0]                \n\t"
2314cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp5], %[addr5], 0x00)
2315cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr4],       %[addr2]                \n\t"
2316cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp6], %[addr3], 0x00)
2317cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp7],   %[ftmp0],       %[ftmp1]                \n\t"
2318cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
2319cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp1],   %[ftmp2],       %[ftmp3]                \n\t"
2320cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
2321cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp3],   %[ftmp4],       %[ftmp5]                \n\t"
2322cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
2323cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr4],       %[addr6]                \n\t"
2324cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp1], %[stack], 0x18)
2325cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp8], %[addr3], 0x00)
2326cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp1],   %[ftmp0],       %[ftmp2]                \n\t"
2327cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp5],   %[ftmp6],       %[ftmp8]                \n\t"
2328cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp6],   %[ftmp6],       %[ftmp8]                \n\t"
2329cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
2330cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp2],   %[ftmp4],       %[ftmp6]                \n\t"
2331cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
2332cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
2333cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp8], %[stack], 0x18)
2334cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp0], %[stack], 0x08)
2335cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp6],   %[ftmp7],       %[ftmp8]                \n\t"
2336cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp7],   %[ftmp7],       %[ftmp8]                \n\t"
2337cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp0],   %[ftmp3],       %[ftmp5]                \n\t"
2338cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp3],   %[ftmp3],       %[ftmp5]                \n\t"
2339cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp7],       %[ftmp3]                \n\t"
2340cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp7],   %[ftmp7],       %[ftmp3]                \n\t"
2341cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp3],   %[ftmp1],       %[ftmp2]                \n\t"
2342cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp1],   %[ftmp1],       %[ftmp2]                \n\t"
2343cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp6],   %[ftmp6],       %[ftmp0]                \n\t"
2344cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp1], %[stack], 0x18)
2345cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp3], %[stack], 0x28)
2346cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp7], %[stack], 0x38)
2347cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp5], %[stack], 0x48)
2348cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp6], %[stack], 0x58)
2349cabdff1aSopenharmony_ci        : [ftmp0]"=&f"(ftmp[0]),            [ftmp1]"=&f"(ftmp[1]),
2350cabdff1aSopenharmony_ci          [ftmp2]"=&f"(ftmp[2]),            [ftmp3]"=&f"(ftmp[3]),
2351cabdff1aSopenharmony_ci          [ftmp4]"=&f"(ftmp[4]),            [ftmp5]"=&f"(ftmp[5]),
2352cabdff1aSopenharmony_ci          [ftmp6]"=&f"(ftmp[6]),            [ftmp7]"=&f"(ftmp[7]),
2353cabdff1aSopenharmony_ci          [ftmp8]"=&f"(ftmp[8]),
2354cabdff1aSopenharmony_ci          RESTRICT_ASM_ALL64
2355cabdff1aSopenharmony_ci          [addr0]"=&r"(addr[0]),            [addr1]"=&r"(addr[1]),
2356cabdff1aSopenharmony_ci          [addr2]"=&r"(addr[2]),            [addr3]"=&r"(addr[3]),
2357cabdff1aSopenharmony_ci          [addr4]"=&r"(addr[4]),            [addr5]"=&r"(addr[5]),
2358cabdff1aSopenharmony_ci          [addr6]"=&r"(addr[6]),            [addr7]"=&r"(addr[7])
2359cabdff1aSopenharmony_ci        : [pix]"r"(pix),                    [stride]"r"((mips_reg)stride),
2360cabdff1aSopenharmony_ci          [stack]"r"(stack)
2361cabdff1aSopenharmony_ci        : "memory"
2362cabdff1aSopenharmony_ci    );
2363cabdff1aSopenharmony_ci
2364cabdff1aSopenharmony_ci    ff_deblock_v_luma_8_mmi((uint8_t *) &stack[6], 0x10, alpha, beta, tc0);
2365cabdff1aSopenharmony_ci
2366cabdff1aSopenharmony_ci    __asm__ volatile (
2367cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr0],   %[stride],      %[stride]               \n\t"
2368cabdff1aSopenharmony_ci        PTR_ADDI   "%[addr1],   %[pix],         -0x02                   \n\t"
2369cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr6],   %[addr0],       %[addr0]                \n\t"
2370cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr2],   %[addr0],       %[stride]               \n\t"
2371cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr7],   %[addr6],       %[addr6]                \n\t"
2372cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr4],   %[addr1],       %[addr2]                \n\t"
2373cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp0], %[stack], 0x10)
2374cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp1], %[stack], 0x20)
2375cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp2], %[stack], 0x30)
2376cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp3], %[stack], 0x40)
2377cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp4],   %[ftmp0],       %[ftmp0]                \n\t"
2378cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp1],       %[ftmp1]                \n\t"
2379cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp6],   %[ftmp2],       %[ftmp2]                \n\t"
2380cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
2381cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
2382cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp1],   %[ftmp0],       %[ftmp2]                \n\t"
2383cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
2384cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp1], %[addr1], 0x00)
2385cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr1],       %[stride]               \n\t"
2386cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp1],   %[ftmp1],       %[ftmp1]                \n\t"
2387cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr1],       %[addr0]                \n\t"
2388cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp1], %[addr3], 0x00)
2389cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp0], %[addr5], 0x00)
2390cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
2391cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp3],   %[ftmp3],       %[ftmp3]                \n\t"
2392cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp0], %[addr4], 0x00)
2393cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
2394cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp6],   %[ftmp6],       %[ftmp3]                \n\t"
2395cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp5],   %[ftmp4],       %[ftmp6]                \n\t"
2396cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr4],       %[stride]               \n\t"
2397cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
2398cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp5], %[addr3], 0x00)
2399cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr4],       %[addr0]                \n\t"
2400cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
2401cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr4],       %[addr2]                \n\t"
2402cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp5], %[addr3], 0x00)
2403cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp4], %[addr5], 0x00)
2404cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr4],       %[addr6]                \n\t"
2405cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
2406cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr1],   %[addr1],       %[addr7]                \n\t"
2407cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp4], %[addr3], 0x00)
2408cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr4],   %[addr4],       %[addr7]                \n\t"
2409cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp0], %[stack], 0x18)
2410cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp1], %[stack], 0x28)
2411cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp2], %[stack], 0x38)
2412cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp3], %[stack], 0x48)
2413cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr0],   %[stride],      %[stride]               \n\t"
2414cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp4],   %[ftmp0],       %[ftmp0]                \n\t"
2415cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr6],   %[addr0],       %[addr0]                \n\t"
2416cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp1],       %[ftmp1]                \n\t"
2417cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp6],   %[ftmp2],       %[ftmp2]                \n\t"
2418cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
2419cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
2420cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr1],       %[stride]               \n\t"
2421cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp1],   %[ftmp0],       %[ftmp2]                \n\t"
2422cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
2423cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp1], %[addr1], 0x00)
2424cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp1],   %[ftmp1],       %[ftmp1]                \n\t"
2425cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr1],       %[addr0]                \n\t"
2426cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp1], %[addr3], 0x00)
2427cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp0], %[addr5], 0x00)
2428cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
2429cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp3],   %[ftmp3],       %[ftmp3]                \n\t"
2430cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp0], %[addr4], 0x00)
2431cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
2432cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp6],   %[ftmp6],       %[ftmp3]                \n\t"
2433cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr4],       %[stride]               \n\t"
2434cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp5],   %[ftmp4],       %[ftmp6]                \n\t"
2435cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
2436cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp5], %[addr3], 0x00)
2437cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr4],       %[addr0]                \n\t"
2438cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
2439cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr4],       %[addr2]                \n\t"
2440cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp5], %[addr3], 0x00)
2441cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp4], %[addr5], 0x00)
2442cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr4],       %[addr6]                \n\t"
2443cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
2444cabdff1aSopenharmony_ci        MMI_USWC1(%[ftmp4], %[addr3], 0x00)
2445cabdff1aSopenharmony_ci        : [ftmp0]"=&f"(ftmp[0]),            [ftmp1]"=&f"(ftmp[1]),
2446cabdff1aSopenharmony_ci          [ftmp2]"=&f"(ftmp[2]),            [ftmp3]"=&f"(ftmp[3]),
2447cabdff1aSopenharmony_ci          [ftmp4]"=&f"(ftmp[4]),            [ftmp5]"=&f"(ftmp[5]),
2448cabdff1aSopenharmony_ci          [ftmp6]"=&f"(ftmp[6]),            [ftmp7]"=&f"(ftmp[7]),
2449cabdff1aSopenharmony_ci          [ftmp8]"=&f"(ftmp[8]),
2450cabdff1aSopenharmony_ci          RESTRICT_ASM_LOW32
2451cabdff1aSopenharmony_ci          RESTRICT_ASM_ALL64
2452cabdff1aSopenharmony_ci          [addr0]"=&r"(addr[0]),            [addr1]"=&r"(addr[1]),
2453cabdff1aSopenharmony_ci          [addr2]"=&r"(addr[2]),            [addr3]"=&r"(addr[3]),
2454cabdff1aSopenharmony_ci          [addr4]"=&r"(addr[4]),            [addr5]"=&r"(addr[5]),
2455cabdff1aSopenharmony_ci          [addr6]"=&r"(addr[6]),            [addr7]"=&r"(addr[7])
2456cabdff1aSopenharmony_ci        : [pix]"r"(pix),                    [stride]"r"((mips_reg)stride),
2457cabdff1aSopenharmony_ci          [stack]"r"(stack)
2458cabdff1aSopenharmony_ci        : "memory"
2459cabdff1aSopenharmony_ci    );
2460cabdff1aSopenharmony_ci}
2461cabdff1aSopenharmony_ci
2462cabdff1aSopenharmony_civoid ff_deblock_h_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha,
2463cabdff1aSopenharmony_ci        int beta)
2464cabdff1aSopenharmony_ci{
2465cabdff1aSopenharmony_ci    DECLARE_ALIGNED(8, const uint64_t, ptmp[0x11]);
2466cabdff1aSopenharmony_ci    DECLARE_ALIGNED(8, const uint64_t, pdat[0x04]);
2467cabdff1aSopenharmony_ci    double ftmp[9];
2468cabdff1aSopenharmony_ci    mips_reg addr[7];
2469cabdff1aSopenharmony_ci    DECLARE_VAR_ALL64;
2470cabdff1aSopenharmony_ci
2471cabdff1aSopenharmony_ci    __asm__ volatile (
2472cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr0],   %[stride],      %[stride]               \n\t"
2473cabdff1aSopenharmony_ci        PTR_ADDI   "%[addr1],   %[pix],         -0x04                   \n\t"
2474cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr2],   %[addr0],       %[stride]               \n\t"
2475cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr3],   %[addr0],       %[addr0]                \n\t"
2476cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr4],   %[addr1],       %[addr2]                \n\t"
2477cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr1],       %[stride]               \n\t"
2478cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp0], %[addr1], 0x00)
2479cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr6],   %[addr1],       %[addr0]                \n\t"
2480cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp1], %[addr5], 0x00)
2481cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp2], %[addr6], 0x00)
2482cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr4],       %[stride]               \n\t"
2483cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp3], %[addr4], 0x00)
2484cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr6],   %[addr4],       %[addr0]                \n\t"
2485cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp4], %[addr5], 0x00)
2486cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr4],       %[addr2]                \n\t"
2487cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp5], %[addr6], 0x00)
2488cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp6], %[addr5], 0x00)
2489cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr4],       %[addr3]                \n\t"
2490cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp7],   %[ftmp0],       %[ftmp1]                \n\t"
2491cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
2492cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp1],   %[ftmp2],       %[ftmp3]                \n\t"
2493cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
2494cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp3],   %[ftmp4],       %[ftmp5]                \n\t"
2495cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
2496cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp8], %[addr5], 0x00)
2497cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp5],   %[ftmp6],       %[ftmp8]                \n\t"
2498cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp6],   %[ftmp6],       %[ftmp8]                \n\t"
2499cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp3], %[ptmp], 0x00)
2500cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp3],   %[ftmp0],       %[ftmp2]                \n\t"
2501cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
2502cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp2],   %[ftmp4],       %[ftmp6]                \n\t"
2503cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
2504cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp6],   %[ftmp7],       %[ftmp1]                \n\t"
2505cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp7],   %[ftmp7],       %[ftmp1]                \n\t"
2506cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[ptmp], 0x20)
2507cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp2], %[ptmp], 0x00)
2508cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp1],   %[ftmp2],       %[ftmp5]                \n\t"
2509cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp2],   %[ftmp2],       %[ftmp5]                \n\t"
2510cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp0],       %[ftmp4]                \n\t"
2511cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
2512cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp4],   %[ftmp7],       %[ftmp2]                \n\t"
2513cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp7],   %[ftmp7],       %[ftmp2]                \n\t"
2514cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp0], %[ptmp], 0x00)
2515cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp5], %[ptmp], 0x10)
2516cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp7], %[ptmp], 0x40)
2517cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp4], %[ptmp], 0x50)
2518cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp8], %[ptmp], 0x20)
2519cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp0],   %[ftmp3],       %[ftmp8]                \n\t"
2520cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp3],   %[ftmp3],       %[ftmp8]                \n\t"
2521cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp6],       %[ftmp1]                \n\t"
2522cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp6],   %[ftmp6],       %[ftmp1]                \n\t"
2523cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr3],       %[addr3]                \n\t"
2524cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp3], %[ptmp], 0x20)
2525cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp0], %[ptmp], 0x30)
2526cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp6], %[ptmp], 0x60)
2527cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp5], %[ptmp], 0x70)
2528cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr1],   %[addr1],       %[addr5]                \n\t"
2529cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr4],   %[addr4],       %[addr5]                \n\t"
2530cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr1],       %[stride]               \n\t"
2531cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp0], %[addr1], 0x00)
2532cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr6],   %[addr1],       %[addr0]                \n\t"
2533cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp1], %[addr5], 0x00)
2534cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp2], %[addr6], 0x00)
2535cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr4],       %[stride]               \n\t"
2536cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp3], %[addr4], 0x00)
2537cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr6],   %[addr4],       %[addr0]                \n\t"
2538cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp4], %[addr5], 0x00)
2539cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr4],       %[addr2]                \n\t"
2540cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp5], %[addr6], 0x00)
2541cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp6], %[addr5], 0x00)
2542cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr4],       %[addr3]                \n\t"
2543cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp7],   %[ftmp0],       %[ftmp1]                \n\t"
2544cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
2545cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp1],   %[ftmp2],       %[ftmp3]                \n\t"
2546cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
2547cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp3],   %[ftmp4],       %[ftmp5]                \n\t"
2548cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
2549cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp8], %[addr5], 0x00)
2550cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp5],   %[ftmp6],       %[ftmp8]                \n\t"
2551cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp6],   %[ftmp6],       %[ftmp8]                \n\t"
2552cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp3], %[ptmp], 0x08)
2553cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp3],   %[ftmp0],       %[ftmp2]                \n\t"
2554cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
2555cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp2],   %[ftmp4],       %[ftmp6]                \n\t"
2556cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
2557cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp6],   %[ftmp7],       %[ftmp1]                \n\t"
2558cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp7],   %[ftmp7],       %[ftmp1]                \n\t"
2559cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp2], %[ptmp], 0x28)
2560cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp2], %[ptmp], 0x08)
2561cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp1],   %[ftmp2],       %[ftmp5]                \n\t"
2562cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp2],   %[ftmp2],       %[ftmp5]                \n\t"
2563cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp0],       %[ftmp4]                \n\t"
2564cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
2565cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp4],   %[ftmp7],       %[ftmp2]                \n\t"
2566cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp7],   %[ftmp7],       %[ftmp2]                \n\t"
2567cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp0], %[ptmp], 0x08)
2568cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp5], %[ptmp], 0x18)
2569cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp7], %[ptmp], 0x48)
2570cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp4], %[ptmp], 0x58)
2571cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp8], %[ptmp], 0x28)
2572cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp0],   %[ftmp3],       %[ftmp8]                \n\t"
2573cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp3],   %[ftmp3],       %[ftmp8]                \n\t"
2574cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp6],       %[ftmp1]                \n\t"
2575cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp6],   %[ftmp6],       %[ftmp1]                \n\t"
2576cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp3], %[ptmp], 0x28)
2577cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp0], %[ptmp], 0x38)
2578cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp6], %[ptmp], 0x68)
2579cabdff1aSopenharmony_ci        MMI_SDC1(%[ftmp5], %[ptmp], 0x78)
2580cabdff1aSopenharmony_ci        PTR_S      "%[addr1],   0x00(%[pdat])                           \n\t"
2581cabdff1aSopenharmony_ci        PTR_S      "%[addr2],   0x08(%[pdat])                           \n\t"
2582cabdff1aSopenharmony_ci        PTR_S      "%[addr0],   0x10(%[pdat])                           \n\t"
2583cabdff1aSopenharmony_ci        PTR_S      "%[addr3],   0x18(%[pdat])                           \n\t"
2584cabdff1aSopenharmony_ci        : [ftmp0]"=&f"(ftmp[0]),            [ftmp1]"=&f"(ftmp[1]),
2585cabdff1aSopenharmony_ci          [ftmp2]"=&f"(ftmp[2]),            [ftmp3]"=&f"(ftmp[3]),
2586cabdff1aSopenharmony_ci          [ftmp4]"=&f"(ftmp[4]),            [ftmp5]"=&f"(ftmp[5]),
2587cabdff1aSopenharmony_ci          [ftmp6]"=&f"(ftmp[6]),            [ftmp7]"=&f"(ftmp[7]),
2588cabdff1aSopenharmony_ci          [ftmp8]"=&f"(ftmp[8]),
2589cabdff1aSopenharmony_ci          RESTRICT_ASM_ALL64
2590cabdff1aSopenharmony_ci          [addr0]"=&r"(addr[0]),            [addr1]"=&r"(addr[1]),
2591cabdff1aSopenharmony_ci          [addr2]"=&r"(addr[2]),            [addr3]"=&r"(addr[3]),
2592cabdff1aSopenharmony_ci          [addr4]"=&r"(addr[4]),            [addr5]"=&r"(addr[5]),
2593cabdff1aSopenharmony_ci          [addr6]"=&r"(addr[6])
2594cabdff1aSopenharmony_ci        : [pix]"r"(pix),                    [stride]"r"((mips_reg)stride),
2595cabdff1aSopenharmony_ci          [ptmp]"r"(ptmp),                  [pdat]"r"(pdat)
2596cabdff1aSopenharmony_ci        : "memory"
2597cabdff1aSopenharmony_ci    );
2598cabdff1aSopenharmony_ci
2599cabdff1aSopenharmony_ci    ff_deblock_v_luma_intra_8_mmi((uint8_t *) &ptmp[8], 0x10, alpha, beta);
2600cabdff1aSopenharmony_ci
2601cabdff1aSopenharmony_ci    __asm__ volatile (
2602cabdff1aSopenharmony_ci        PTR_L      "%[addr1],   0x00(%[pdat])                           \n\t"
2603cabdff1aSopenharmony_ci        PTR_L      "%[addr2],   0x08(%[pdat])                           \n\t"
2604cabdff1aSopenharmony_ci        PTR_L      "%[addr0],   0x10(%[pdat])                           \n\t"
2605cabdff1aSopenharmony_ci        PTR_L      "%[addr3],   0x18(%[pdat])                           \n\t"
2606cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr4],   %[addr1],       %[addr2]                \n\t"
2607cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp0], %[ptmp], 0x08)
2608cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp1], %[ptmp], 0x18)
2609cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp2], %[ptmp], 0x28)
2610cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp3], %[ptmp], 0x38)
2611cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp4], %[ptmp], 0x48)
2612cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp5], %[ptmp], 0x58)
2613cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp6], %[ptmp], 0x68)
2614cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp7],   %[ftmp0],       %[ftmp1]                \n\t"
2615cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
2616cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp1],   %[ftmp2],       %[ftmp3]                \n\t"
2617cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
2618cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp3],   %[ftmp4],       %[ftmp5]                \n\t"
2619cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
2620cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp8], %[ptmp], 0x78)
2621cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp5],   %[ftmp6],       %[ftmp8]                \n\t"
2622cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp6],   %[ftmp6],       %[ftmp8]                \n\t"
2623cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp3], %[addr1], 0x00)
2624cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr1],       %[addr0]                \n\t"
2625cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp3],   %[ftmp0],       %[ftmp2]                \n\t"
2626cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
2627cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp2],   %[ftmp4],       %[ftmp6]                \n\t"
2628cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
2629cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp6],   %[ftmp7],       %[ftmp1]                \n\t"
2630cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp7],   %[ftmp7],       %[ftmp1]                \n\t"
2631cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp2], %[addr5], 0x00)
2632cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp2], %[addr1], 0x00)
2633cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp1],   %[ftmp2],       %[ftmp5]                \n\t"
2634cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp2],   %[ftmp2],       %[ftmp5]                \n\t"
2635cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp0],       %[ftmp4]                \n\t"
2636cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
2637cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp4],   %[ftmp7],       %[ftmp2]                \n\t"
2638cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp7],   %[ftmp7],       %[ftmp2]                \n\t"
2639cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr1],       %[stride]               \n\t"
2640cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp0], %[addr1], 0x00)
2641cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr6],   %[addr4],       %[stride]               \n\t"
2642cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp5], %[addr5], 0x00)
2643cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr4],       %[addr0]                \n\t"
2644cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp7], %[addr6], 0x00)
2645cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr6],   %[addr1],       %[addr0]                \n\t"
2646cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp4], %[addr5], 0x00)
2647cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp8], %[addr6], 0x00)
2648cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr1],       %[addr0]                \n\t"
2649cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp0],   %[ftmp3],       %[ftmp8]                \n\t"
2650cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp3],   %[ftmp3],       %[ftmp8]                \n\t"
2651cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp6],       %[ftmp1]                \n\t"
2652cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp6],   %[ftmp6],       %[ftmp1]                \n\t"
2653cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp3], %[addr5], 0x00)
2654cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr4],       %[addr2]                \n\t"
2655cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp0], %[addr4], 0x00)
2656cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr6],   %[addr4],       %[addr3]                \n\t"
2657cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp6], %[addr5], 0x00)
2658cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr3],       %[addr3]                \n\t"
2659cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp5], %[addr6], 0x00)
2660cabdff1aSopenharmony_ci        PTR_SUBU   "%[addr1],   %[addr1],       %[addr5]                \n\t"
2661cabdff1aSopenharmony_ci        PTR_SUBU   "%[addr4],   %[addr4],       %[addr5]                \n\t"
2662cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp0], %[ptmp], 0x00)
2663cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp1], %[ptmp], 0x10)
2664cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp2], %[ptmp], 0x20)
2665cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp3], %[ptmp], 0x30)
2666cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp4], %[ptmp], 0x40)
2667cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp5], %[ptmp], 0x50)
2668cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp6], %[ptmp], 0x60)
2669cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp7],   %[ftmp0],       %[ftmp1]                \n\t"
2670cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
2671cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp1],   %[ftmp2],       %[ftmp3]                \n\t"
2672cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
2673cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp3],   %[ftmp4],       %[ftmp5]                \n\t"
2674cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
2675cabdff1aSopenharmony_ci        MMI_LDC1(%[ftmp8], %[ptmp], 0x70)
2676cabdff1aSopenharmony_ci        "punpckhbh  %[ftmp5],   %[ftmp6],       %[ftmp8]                \n\t"
2677cabdff1aSopenharmony_ci        "punpcklbh  %[ftmp6],   %[ftmp6],       %[ftmp8]                \n\t"
2678cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp3], %[addr1], 0x00)
2679cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr1],       %[addr0]                \n\t"
2680cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp3],   %[ftmp0],       %[ftmp2]                \n\t"
2681cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
2682cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp2],   %[ftmp4],       %[ftmp6]                \n\t"
2683cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
2684cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp6],   %[ftmp7],       %[ftmp1]                \n\t"
2685cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp7],   %[ftmp7],       %[ftmp1]                \n\t"
2686cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp2], %[addr5], 0x00)
2687cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp2], %[addr1], 0x00)
2688cabdff1aSopenharmony_ci        "punpckhhw  %[ftmp1],   %[ftmp2],       %[ftmp5]                \n\t"
2689cabdff1aSopenharmony_ci        "punpcklhw  %[ftmp2],   %[ftmp2],       %[ftmp5]                \n\t"
2690cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp0],       %[ftmp4]                \n\t"
2691cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
2692cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp4],   %[ftmp7],       %[ftmp2]                \n\t"
2693cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp7],   %[ftmp7],       %[ftmp2]                \n\t"
2694cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr1],       %[stride]               \n\t"
2695cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp0], %[addr1], 0x00)
2696cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr6],   %[addr4],       %[stride]               \n\t"
2697cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp5], %[addr5], 0x00)
2698cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr4],       %[addr0]                \n\t"
2699cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp7], %[addr6], 0x00)
2700cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr6],   %[addr1],       %[addr0]                \n\t"
2701cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp4], %[addr5], 0x00)
2702cabdff1aSopenharmony_ci        MMI_ULDC1(%[ftmp8], %[addr6], 0x00)
2703cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr1],       %[addr0]                \n\t"
2704cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp0],   %[ftmp3],       %[ftmp8]                \n\t"
2705cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp3],   %[ftmp3],       %[ftmp8]                \n\t"
2706cabdff1aSopenharmony_ci        "punpckhwd  %[ftmp5],   %[ftmp6],       %[ftmp1]                \n\t"
2707cabdff1aSopenharmony_ci        "punpcklwd  %[ftmp6],   %[ftmp6],       %[ftmp1]                \n\t"
2708cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp3], %[addr5], 0x00)
2709cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr5],   %[addr4],       %[addr2]                \n\t"
2710cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp0], %[addr4], 0x00)
2711cabdff1aSopenharmony_ci        PTR_ADDU   "%[addr6],   %[addr4],       %[addr3]                \n\t"
2712cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp6], %[addr5], 0x00)
2713cabdff1aSopenharmony_ci        MMI_USDC1(%[ftmp5], %[addr6], 0x00)
2714cabdff1aSopenharmony_ci        : [ftmp0]"=&f"(ftmp[0]),            [ftmp1]"=&f"(ftmp[1]),
2715cabdff1aSopenharmony_ci          [ftmp2]"=&f"(ftmp[2]),            [ftmp3]"=&f"(ftmp[3]),
2716cabdff1aSopenharmony_ci          [ftmp4]"=&f"(ftmp[4]),            [ftmp5]"=&f"(ftmp[5]),
2717cabdff1aSopenharmony_ci          [ftmp6]"=&f"(ftmp[6]),            [ftmp7]"=&f"(ftmp[7]),
2718cabdff1aSopenharmony_ci          [ftmp8]"=&f"(ftmp[8]),
2719cabdff1aSopenharmony_ci          RESTRICT_ASM_ALL64
2720cabdff1aSopenharmony_ci          [addr0]"=&r"(addr[0]),            [addr1]"=&r"(addr[1]),
2721cabdff1aSopenharmony_ci          [addr2]"=&r"(addr[2]),            [addr3]"=&r"(addr[3]),
2722cabdff1aSopenharmony_ci          [addr4]"=&r"(addr[4]),            [addr5]"=&r"(addr[5]),
2723cabdff1aSopenharmony_ci          [addr6]"=&r"(addr[6])
2724cabdff1aSopenharmony_ci        : [pix]"r"(pix),                    [stride]"r"((mips_reg)stride),
2725cabdff1aSopenharmony_ci          [ptmp]"r"(ptmp),                  [pdat]"r"(pdat)
2726cabdff1aSopenharmony_ci        : "memory"
2727cabdff1aSopenharmony_ci    );
2728cabdff1aSopenharmony_ci}
2729