1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * Copyright (c) 2012
3cabdff1aSopenharmony_ci *      MIPS Technologies, Inc., California.
4cabdff1aSopenharmony_ci *
5cabdff1aSopenharmony_ci * Redistribution and use in source and binary forms, with or without
6cabdff1aSopenharmony_ci * modification, are permitted provided that the following conditions
7cabdff1aSopenharmony_ci * are met:
8cabdff1aSopenharmony_ci * 1. Redistributions of source code must retain the above copyright
9cabdff1aSopenharmony_ci *    notice, this list of conditions and the following disclaimer.
10cabdff1aSopenharmony_ci * 2. Redistributions in binary form must reproduce the above copyright
11cabdff1aSopenharmony_ci *    notice, this list of conditions and the following disclaimer in the
12cabdff1aSopenharmony_ci *    documentation and/or other materials provided with the distribution.
13cabdff1aSopenharmony_ci * 3. Neither the name of the MIPS Technologies, Inc., nor the names of its
14cabdff1aSopenharmony_ci *    contributors may be used to endorse or promote products derived from
15cabdff1aSopenharmony_ci *    this software without specific prior written permission.
16cabdff1aSopenharmony_ci *
17cabdff1aSopenharmony_ci * THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
18cabdff1aSopenharmony_ci * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19cabdff1aSopenharmony_ci * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20cabdff1aSopenharmony_ci * ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
21cabdff1aSopenharmony_ci * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22cabdff1aSopenharmony_ci * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23cabdff1aSopenharmony_ci * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24cabdff1aSopenharmony_ci * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25cabdff1aSopenharmony_ci * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26cabdff1aSopenharmony_ci * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27cabdff1aSopenharmony_ci * SUCH DAMAGE.
28cabdff1aSopenharmony_ci *
29cabdff1aSopenharmony_ci * Author:  Bojan Zivkovic (bojan@mips.com)
30cabdff1aSopenharmony_ci *
31cabdff1aSopenharmony_ci * MPEG Audio decoder optimized for MIPS floating-point architecture
32cabdff1aSopenharmony_ci *
33cabdff1aSopenharmony_ci * This file is part of FFmpeg.
34cabdff1aSopenharmony_ci *
35cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or
36cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public
37cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either
38cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version.
39cabdff1aSopenharmony_ci *
40cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
41cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
42cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
43cabdff1aSopenharmony_ci * Lesser General Public License for more details.
44cabdff1aSopenharmony_ci *
45cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public
46cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software
47cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
48cabdff1aSopenharmony_ci */
49cabdff1aSopenharmony_ci
50cabdff1aSopenharmony_ci/**
51cabdff1aSopenharmony_ci * @file
52cabdff1aSopenharmony_ci * Reference: libavcodec/mpegaudiodsp_template.c
53cabdff1aSopenharmony_ci *            libavcodec/dct32.c
54cabdff1aSopenharmony_ci */
55cabdff1aSopenharmony_ci
56cabdff1aSopenharmony_ci#include <string.h>
57cabdff1aSopenharmony_ci
58cabdff1aSopenharmony_ci#include "config.h"
59cabdff1aSopenharmony_ci#include "libavutil/mips/asmdefs.h"
60cabdff1aSopenharmony_ci#include "libavcodec/mpegaudiodsp.h"
61cabdff1aSopenharmony_ci
62cabdff1aSopenharmony_ci#if HAVE_INLINE_ASM && HAVE_MIPSFPU
63cabdff1aSopenharmony_ci#if !HAVE_MIPS32R6 && !HAVE_MIPS64R6
64cabdff1aSopenharmony_ci
65cabdff1aSopenharmony_cistatic void ff_mpadsp_apply_window_mips_float(float *synth_buf, float *window,
66cabdff1aSopenharmony_ci                               int *dither_state, float *samples, ptrdiff_t incr)
67cabdff1aSopenharmony_ci{
68cabdff1aSopenharmony_ci    register const float *w, *w2, *p;
69cabdff1aSopenharmony_ci    int j;
70cabdff1aSopenharmony_ci    float *samples2;
71cabdff1aSopenharmony_ci    float sum, sum2;
72cabdff1aSopenharmony_ci    /* temporary variables */
73cabdff1aSopenharmony_ci    int incr1 = incr << 2;
74cabdff1aSopenharmony_ci    int t_sample;
75cabdff1aSopenharmony_ci    float in1, in2, in3, in4, in5, in6, in7, in8;
76cabdff1aSopenharmony_ci    float *p2;
77cabdff1aSopenharmony_ci
78cabdff1aSopenharmony_ci    /* copy to avoid wrap */
79cabdff1aSopenharmony_ci    memcpy(synth_buf + 512, synth_buf, 32 * sizeof(*synth_buf));
80cabdff1aSopenharmony_ci
81cabdff1aSopenharmony_ci    /**
82cabdff1aSopenharmony_ci    * instructions are scheduled to minimize pipeline stall.
83cabdff1aSopenharmony_ci    * use of round_sample function from the original code is
84cabdff1aSopenharmony_ci    * changed with appropriate assembly instructions.
85cabdff1aSopenharmony_ci    */
86cabdff1aSopenharmony_ci
87cabdff1aSopenharmony_ci    __asm__ volatile (
88cabdff1aSopenharmony_ci        "lwc1    %[sum],      0(%[dither_state])                            \t\n"
89cabdff1aSopenharmony_ci        "sll     %[t_sample], %[incr1],     5                               \t\n"
90cabdff1aSopenharmony_ci        "sub     %[t_sample], %[t_sample],  %[incr1]                        \n\t"
91cabdff1aSopenharmony_ci        "li      %[j],        4                                             \t\n"
92cabdff1aSopenharmony_ci        "lwc1    %[in1],      0(%[window])                                  \t\n"
93cabdff1aSopenharmony_ci        "lwc1    %[in2],      16*4(%[synth_buf])                            \t\n"
94cabdff1aSopenharmony_ci        "sw      $zero,       0(%[dither_state])                            \t\n"
95cabdff1aSopenharmony_ci        "lwc1    %[in3],      64*4(%[window])                               \t\n"
96cabdff1aSopenharmony_ci        "lwc1    %[in4],      80*4(%[synth_buf])                            \t\n"
97cabdff1aSopenharmony_ci        PTR_ADDU "%[samples2],%[samples],   %[t_sample]                     \t\n"
98cabdff1aSopenharmony_ci        "madd.s  %[sum],      %[sum],       %[in1], %[in2]                  \t\n"
99cabdff1aSopenharmony_ci        "lwc1    %[in5],      128*4(%[window])                              \t\n"
100cabdff1aSopenharmony_ci        "lwc1    %[in6],      144*4(%[synth_buf])                           \t\n"
101cabdff1aSopenharmony_ci        "lwc1    %[in7],      192*4(%[window])                              \t\n"
102cabdff1aSopenharmony_ci        "madd.s  %[sum],      %[sum],       %[in3], %[in4]                  \t\n"
103cabdff1aSopenharmony_ci        "lwc1    %[in8],      208*4(%[synth_buf])                           \t\n"
104cabdff1aSopenharmony_ci        "lwc1    %[in1],      256*4(%[window])                              \t\n"
105cabdff1aSopenharmony_ci        "lwc1    %[in2],      272*4(%[synth_buf])                           \t\n"
106cabdff1aSopenharmony_ci        "madd.s  %[sum],      %[sum],       %[in5], %[in6]                  \t\n"
107cabdff1aSopenharmony_ci        "lwc1    %[in3],      320*4(%[window])                              \t\n"
108cabdff1aSopenharmony_ci        "lwc1    %[in4],      336*4(%[synth_buf])                           \t\n"
109cabdff1aSopenharmony_ci        "lwc1    %[in5],      384*4(%[window])                              \t\n"
110cabdff1aSopenharmony_ci        "madd.s  %[sum],      %[sum],       %[in7], %[in8]                  \t\n"
111cabdff1aSopenharmony_ci        "lwc1    %[in6],      400*4(%[synth_buf])                           \t\n"
112cabdff1aSopenharmony_ci        "lwc1    %[in7],      448*4(%[window])                              \t\n"
113cabdff1aSopenharmony_ci        "lwc1    %[in8],      464*4(%[synth_buf])                           \t\n"
114cabdff1aSopenharmony_ci        "madd.s  %[sum],      %[sum],       %[in1], %[in2]                  \t\n"
115cabdff1aSopenharmony_ci        "lwc1    %[in1],      32*4(%[window])                               \t\n"
116cabdff1aSopenharmony_ci        "lwc1    %[in2],      48*4(%[synth_buf])                            \t\n"
117cabdff1aSopenharmony_ci        "madd.s  %[sum],      %[sum],       %[in3], %[in4]                  \t\n"
118cabdff1aSopenharmony_ci        "lwc1    %[in3],      96*4(%[window])                               \t\n"
119cabdff1aSopenharmony_ci        "lwc1    %[in4],      112*4(%[synth_buf])                           \t\n"
120cabdff1aSopenharmony_ci        "madd.s  %[sum],      %[sum],       %[in5], %[in6]                  \t\n"
121cabdff1aSopenharmony_ci        "lwc1    %[in5],      160*4(%[window])                              \t\n"
122cabdff1aSopenharmony_ci        "lwc1    %[in6],      176*4(%[synth_buf])                           \t\n"
123cabdff1aSopenharmony_ci        "madd.s  %[sum],      %[sum],       %[in7], %[in8]                  \t\n"
124cabdff1aSopenharmony_ci        "lwc1    %[in7],      224*4(%[window])                              \t\n"
125cabdff1aSopenharmony_ci        "lwc1    %[in8],      240*4(%[synth_buf])                           \t\n"
126cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in1], %[in2]                  \t\n"
127cabdff1aSopenharmony_ci        "lwc1    %[in1],      288*4(%[window])                              \t\n"
128cabdff1aSopenharmony_ci        "lwc1    %[in2],      304*4(%[synth_buf])                           \t\n"
129cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in3], %[in4]                  \t\n"
130cabdff1aSopenharmony_ci        "lwc1    %[in3],      352*4(%[window])                              \t\n"
131cabdff1aSopenharmony_ci        "lwc1    %[in4],      368*4(%[synth_buf])                           \t\n"
132cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in5], %[in6]                  \t\n"
133cabdff1aSopenharmony_ci        "lwc1    %[in5],      416*4(%[window])                              \t\n"
134cabdff1aSopenharmony_ci        "lwc1    %[in6],      432*4(%[synth_buf])                           \t\n"
135cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in7], %[in8]                  \t\n"
136cabdff1aSopenharmony_ci        "lwc1    %[in7],      480*4(%[window])                              \t\n"
137cabdff1aSopenharmony_ci        "lwc1    %[in8],      496*4(%[synth_buf])                           \t\n"
138cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in1], %[in2]                  \t\n"
139cabdff1aSopenharmony_ci        PTR_ADDU "%[w],       %[window],    4                               \t\n"
140cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in3], %[in4]                  \t\n"
141cabdff1aSopenharmony_ci        PTR_ADDU "%[w2],      %[window],    124                             \t\n"
142cabdff1aSopenharmony_ci        PTR_ADDIU "%[p],      %[synth_buf], 68                              \t\n"
143cabdff1aSopenharmony_ci        PTR_ADDIU "%[p2],     %[synth_buf], 188                             \t\n"
144cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in5], %[in6]                  \t\n"
145cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in7], %[in8]                  \t\n"
146cabdff1aSopenharmony_ci        "swc1    %[sum],      0(%[samples])                                 \t\n"
147cabdff1aSopenharmony_ci        PTR_ADDU "%[samples], %[samples],   %[incr1]                        \t\n"
148cabdff1aSopenharmony_ci
149cabdff1aSopenharmony_ci        /* calculate two samples at the same time to avoid one memory
150cabdff1aSopenharmony_ci           access per two sample */
151cabdff1aSopenharmony_ci
152cabdff1aSopenharmony_ci        "ff_mpadsp_apply_window_loop%=:                                     \t\n"
153cabdff1aSopenharmony_ci        "lwc1    %[in1],      0(%[w])                                       \t\n"
154cabdff1aSopenharmony_ci        "lwc1    %[in2],      0(%[p])                                       \t\n"
155cabdff1aSopenharmony_ci        "lwc1    %[in3],      0(%[w2])                                      \t\n"
156cabdff1aSopenharmony_ci        "lwc1    %[in4],      64*4(%[w])                                    \t\n"
157cabdff1aSopenharmony_ci        "lwc1    %[in5],      64*4(%[p])                                    \t\n"
158cabdff1aSopenharmony_ci        "lwc1    %[in6],      64*4(%[w2])                                   \t\n"
159cabdff1aSopenharmony_ci        "mul.s   %[sum],      %[in1],       %[in2]                          \t\n"
160cabdff1aSopenharmony_ci        "mul.s   %[sum2],     %[in2],       %[in3]                          \t\n"
161cabdff1aSopenharmony_ci        "lwc1    %[in1],      128*4(%[w])                                   \t\n"
162cabdff1aSopenharmony_ci        "lwc1    %[in2],      128*4(%[p])                                   \t\n"
163cabdff1aSopenharmony_ci        "madd.s  %[sum],      %[sum],       %[in4], %[in5]                  \t\n"
164cabdff1aSopenharmony_ci        "nmadd.s %[sum2],     %[sum2],      %[in5], %[in6]                  \t\n"
165cabdff1aSopenharmony_ci        "lwc1    %[in3],      128*4(%[w2])                                  \t\n"
166cabdff1aSopenharmony_ci        "lwc1    %[in4],      192*4(%[w])                                   \t\n"
167cabdff1aSopenharmony_ci        "madd.s  %[sum],      %[sum],       %[in1], %[in2]                  \t\n"
168cabdff1aSopenharmony_ci        "lwc1    %[in5],      192*4(%[p])                                   \t\n"
169cabdff1aSopenharmony_ci        "lwc1    %[in6],      192*4(%[w2])                                  \t\n"
170cabdff1aSopenharmony_ci        "nmsub.s %[sum2],     %[sum2],      %[in2], %[in3]                  \t\n"
171cabdff1aSopenharmony_ci        "lwc1    %[in1],      256*4(%[w])                                   \t\n"
172cabdff1aSopenharmony_ci        "lwc1    %[in2],      256*4(%[p])                                   \t\n"
173cabdff1aSopenharmony_ci        "madd.s  %[sum],      %[sum],       %[in4], %[in5]                  \t\n"
174cabdff1aSopenharmony_ci        "nmsub.s %[sum2],     %[sum2],      %[in5], %[in6]                  \t\n"
175cabdff1aSopenharmony_ci        "lwc1    %[in3],      256*4(%[w2])                                  \t\n"
176cabdff1aSopenharmony_ci        "lwc1    %[in4],      320*4(%[w])                                   \t\n"
177cabdff1aSopenharmony_ci        "madd.s  %[sum],      %[sum],       %[in1], %[in2]                  \t\n"
178cabdff1aSopenharmony_ci        "lwc1    %[in5],      320*4(%[p])                                   \t\n"
179cabdff1aSopenharmony_ci        "lwc1    %[in6],      320*4(%[w2])                                  \t\n"
180cabdff1aSopenharmony_ci        "nmsub.s %[sum2],     %[sum2],      %[in2], %[in3]                  \t\n"
181cabdff1aSopenharmony_ci        "lwc1    %[in1],      384*4(%[w])                                   \t\n"
182cabdff1aSopenharmony_ci        "lwc1    %[in2],      384*4(%[p])                                   \t\n"
183cabdff1aSopenharmony_ci        "madd.s  %[sum],      %[sum],       %[in4], %[in5]                  \t\n"
184cabdff1aSopenharmony_ci        "nmsub.s %[sum2],     %[sum2],      %[in5], %[in6]                  \t\n"
185cabdff1aSopenharmony_ci        "lwc1    %[in3],      384*4(%[w2])                                  \t\n"
186cabdff1aSopenharmony_ci        "lwc1    %[in4],      448*4(%[w])                                   \t\n"
187cabdff1aSopenharmony_ci        "madd.s  %[sum],      %[sum],       %[in1], %[in2]                  \t\n"
188cabdff1aSopenharmony_ci        "lwc1    %[in5],      448*4(%[p])                                   \t\n"
189cabdff1aSopenharmony_ci        "lwc1    %[in6],      448*4(%[w2])                                  \t\n"
190cabdff1aSopenharmony_ci        "nmsub.s %[sum2],     %[sum2],      %[in2], %[in3]                  \t\n"
191cabdff1aSopenharmony_ci        "madd.s  %[sum],      %[sum],       %[in4], %[in5]                  \t\n"
192cabdff1aSopenharmony_ci        "lwc1    %[in1],      32*4(%[w])                                    \t\n"
193cabdff1aSopenharmony_ci        "lwc1    %[in2],      0(%[p2])                                      \t\n"
194cabdff1aSopenharmony_ci        "nmsub.s %[sum2],     %[sum2],      %[in5], %[in6]                  \t\n"
195cabdff1aSopenharmony_ci        "lwc1    %[in3],      32*4(%[w2])                                   \t\n"
196cabdff1aSopenharmony_ci        "lwc1    %[in4],      96*4(%[w])                                    \t\n"
197cabdff1aSopenharmony_ci        "lwc1    %[in5],      64*4(%[p2])                                   \t\n"
198cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in1], %[in2]                  \t\n"
199cabdff1aSopenharmony_ci        "lwc1    %[in6],      96*4(%[w2])                                   \t\n"
200cabdff1aSopenharmony_ci        "nmsub.s %[sum2],     %[sum2],      %[in2], %[in3]                  \t\n"
201cabdff1aSopenharmony_ci        "lwc1    %[in1],      160*4(%[w])                                   \t\n"
202cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in4], %[in5]                  \t\n"
203cabdff1aSopenharmony_ci        "lwc1    %[in2],      128*4(%[p2])                                  \t\n"
204cabdff1aSopenharmony_ci        "nmsub.s %[sum2],     %[sum2],      %[in5], %[in6]                  \t\n"
205cabdff1aSopenharmony_ci        "lwc1    %[in3],      160*4(%[w2])                                  \t\n"
206cabdff1aSopenharmony_ci        "lwc1    %[in4],      224*4(%[w])                                   \t\n"
207cabdff1aSopenharmony_ci        "lwc1    %[in5],      192*4(%[p2])                                  \t\n"
208cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in1], %[in2]                  \t\n"
209cabdff1aSopenharmony_ci        "lwc1    %[in6],      224*4(%[w2])                                  \t\n"
210cabdff1aSopenharmony_ci        "nmsub.s %[sum2],     %[sum2],      %[in2], %[in3]                  \t\n"
211cabdff1aSopenharmony_ci        "lwc1    %[in1],      288*4(%[w])                                   \t\n"
212cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in4], %[in5]                  \t\n"
213cabdff1aSopenharmony_ci        "lwc1    %[in2],      256*4(%[p2])                                  \t\n"
214cabdff1aSopenharmony_ci        "nmsub.s %[sum2],     %[sum2],      %[in5], %[in6]                  \t\n"
215cabdff1aSopenharmony_ci        "lwc1    %[in3],      288*4(%[w2])                                  \t\n"
216cabdff1aSopenharmony_ci        "lwc1    %[in4],      352*4(%[w])                                   \t\n"
217cabdff1aSopenharmony_ci        "lwc1    %[in5],      320*4(%[p2])                                  \t\n"
218cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in1], %[in2]                  \t\n"
219cabdff1aSopenharmony_ci        "lwc1    %[in6],      352*4(%[w2])                                  \t\n"
220cabdff1aSopenharmony_ci        "nmsub.s %[sum2],     %[sum2],      %[in2], %[in3]                  \t\n"
221cabdff1aSopenharmony_ci        "lwc1    %[in1],      416*4(%[w])                                   \t\n"
222cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in4], %[in5]                  \t\n"
223cabdff1aSopenharmony_ci        "lwc1    %[in2],      384*4(%[p2])                                  \t\n"
224cabdff1aSopenharmony_ci        "nmsub.s %[sum2],     %[sum2],      %[in5], %[in6]                  \t\n"
225cabdff1aSopenharmony_ci        "lwc1    %[in3],      416*4(%[w2])                                  \t\n"
226cabdff1aSopenharmony_ci        "lwc1    %[in4],      480*4(%[w])                                   \t\n"
227cabdff1aSopenharmony_ci        "lwc1    %[in5],      448*4(%[p2])                                  \t\n"
228cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in1], %[in2]                  \t\n"
229cabdff1aSopenharmony_ci        "lwc1    %[in6],      480*4(%[w2])                                  \t\n"
230cabdff1aSopenharmony_ci        "nmsub.s %[sum2],     %[sum2],      %[in2], %[in3]                  \t\n"
231cabdff1aSopenharmony_ci        PTR_ADDIU "%[w],      %[w],         4                               \t\n"
232cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in4], %[in5]                  \t\n"
233cabdff1aSopenharmony_ci        PTR_ADDIU "%[w2],     %[w2],        -4                              \t\n"
234cabdff1aSopenharmony_ci        "nmsub.s %[sum2],     %[sum2],      %[in5], %[in6]                  \t\n"
235cabdff1aSopenharmony_ci        "addu    %[j],        %[j],         4                               \t\n"
236cabdff1aSopenharmony_ci        PTR_ADDIU "%[p],      4                                             \t\n"
237cabdff1aSopenharmony_ci        "swc1    %[sum],      0(%[samples])                                 \t\n"
238cabdff1aSopenharmony_ci        PTR_ADDIU "%[p2],     -4                                            \t\n"
239cabdff1aSopenharmony_ci        "swc1    %[sum2],     0(%[samples2])                                \t\n"
240cabdff1aSopenharmony_ci        PTR_ADDU "%[samples], %[samples],   %[incr1]                        \t\n"
241cabdff1aSopenharmony_ci        PTR_SUBU "%[samples2],%[samples2],  %[incr1]                        \t\n"
242cabdff1aSopenharmony_ci        "bne     %[j],        64,           ff_mpadsp_apply_window_loop%=   \t\n"
243cabdff1aSopenharmony_ci
244cabdff1aSopenharmony_ci        "lwc1    %[in1],      48*4(%[window])                               \t\n"
245cabdff1aSopenharmony_ci        "lwc1    %[in2],      32*4(%[synth_buf])                            \t\n"
246cabdff1aSopenharmony_ci        "lwc1    %[in3],      112*4(%[window])                              \t\n"
247cabdff1aSopenharmony_ci        "lwc1    %[in4],      96*4(%[synth_buf])                            \t\n"
248cabdff1aSopenharmony_ci        "lwc1    %[in5],      176*4(%[window])                              \t\n"
249cabdff1aSopenharmony_ci        "lwc1    %[in6],      160*4(%[synth_buf])                           \t\n"
250cabdff1aSopenharmony_ci        "mul.s   %[sum],      %[in1],       %[in2]                          \t\n"
251cabdff1aSopenharmony_ci        "lwc1    %[in7],      240*4(%[window])                              \t\n"
252cabdff1aSopenharmony_ci        "lwc1    %[in8],      224*4(%[synth_buf])                           \t\n"
253cabdff1aSopenharmony_ci        "lwc1    %[in1],      304*4(%[window])                              \t\n"
254cabdff1aSopenharmony_ci        "nmadd.s %[sum],      %[sum],       %[in3], %[in4]                  \t\n"
255cabdff1aSopenharmony_ci        "lwc1    %[in2],      288*4(%[synth_buf])                           \t\n"
256cabdff1aSopenharmony_ci        "lwc1    %[in3],      368*4(%[window])                              \t\n"
257cabdff1aSopenharmony_ci        "lwc1    %[in4],      352*4(%[synth_buf])                           \t\n"
258cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in5], %[in6]                  \t\n"
259cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in7], %[in8]                  \t\n"
260cabdff1aSopenharmony_ci        "lwc1    %[in5],      432*4(%[window])                              \t\n"
261cabdff1aSopenharmony_ci        "lwc1    %[in6],      416*4(%[synth_buf])                           \t\n"
262cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in1], %[in2]                  \t\n"
263cabdff1aSopenharmony_ci        "lwc1    %[in7],      496*4(%[window])                              \t\n"
264cabdff1aSopenharmony_ci        "lwc1    %[in8],      480*4(%[synth_buf])                           \t\n"
265cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in3], %[in4]                  \t\n"
266cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in5], %[in6]                  \t\n"
267cabdff1aSopenharmony_ci        "nmsub.s %[sum],      %[sum],       %[in7], %[in8]                  \t\n"
268cabdff1aSopenharmony_ci        "swc1    %[sum],      0(%[samples])                                 \t\n"
269cabdff1aSopenharmony_ci
270cabdff1aSopenharmony_ci        : [sum] "=&f" (sum), [sum2] "=&f" (sum2),
271cabdff1aSopenharmony_ci          [w2] "=&r" (w2),   [w] "=&r" (w),
272cabdff1aSopenharmony_ci          [p] "=&r" (p), [p2] "=&r" (p2), [j] "=&r" (j),
273cabdff1aSopenharmony_ci          [samples] "+r" (samples), [samples2] "=&r" (samples2),
274cabdff1aSopenharmony_ci          [in1] "=&f" (in1), [in2] "=&f" (in2),
275cabdff1aSopenharmony_ci          [in3] "=&f" (in3), [in4] "=&f" (in4),
276cabdff1aSopenharmony_ci          [in5] "=&f" (in5), [in6] "=&f" (in6),
277cabdff1aSopenharmony_ci          [in7] "=&f" (in7), [in8] "=&f" (in8),
278cabdff1aSopenharmony_ci          [t_sample] "=&r" (t_sample)
279cabdff1aSopenharmony_ci        : [synth_buf] "r" (synth_buf), [window] "r" (window),
280cabdff1aSopenharmony_ci          [dither_state] "r" (dither_state), [incr1] "r" (incr1)
281cabdff1aSopenharmony_ci        : "memory"
282cabdff1aSopenharmony_ci    );
283cabdff1aSopenharmony_ci}
284cabdff1aSopenharmony_ci
285cabdff1aSopenharmony_cistatic void ff_dct32_mips_float(float *out, const float *tab)
286cabdff1aSopenharmony_ci{
287cabdff1aSopenharmony_ci    float val0 , val1 , val2 , val3 , val4 , val5 , val6 , val7,
288cabdff1aSopenharmony_ci          val8 , val9 , val10, val11, val12, val13, val14, val15,
289cabdff1aSopenharmony_ci          val16, val17, val18, val19, val20, val21, val22, val23,
290cabdff1aSopenharmony_ci          val24, val25, val26, val27, val28, val29, val30, val31;
291cabdff1aSopenharmony_ci    float fTmp1, fTmp2, fTmp3, fTmp4, fTmp5, fTmp6, fTmp8, fTmp9;
292cabdff1aSopenharmony_ci    float f1, f2, f3, f4, f5, f6, f7;
293cabdff1aSopenharmony_ci
294cabdff1aSopenharmony_ci    f1 = 0.50241928618815570551;
295cabdff1aSopenharmony_ci    f2 = 0.50060299823519630134;
296cabdff1aSopenharmony_ci    f3 = 10.19000812354805681150;
297cabdff1aSopenharmony_ci    f4 = 5.10114861868916385802;
298cabdff1aSopenharmony_ci    f5 = 0.67480834145500574602;
299cabdff1aSopenharmony_ci    f6 = 0.74453627100229844977;
300cabdff1aSopenharmony_ci    f7 = 0.50979557910415916894;
301cabdff1aSopenharmony_ci    /**
302cabdff1aSopenharmony_ci    * instructions are scheduled to minimize pipeline stall.
303cabdff1aSopenharmony_ci    */
304cabdff1aSopenharmony_ci    __asm__ volatile (
305cabdff1aSopenharmony_ci        "lwc1       %[fTmp1],       0*4(%[tab])                             \n\t"
306cabdff1aSopenharmony_ci        "lwc1       %[fTmp2],       31*4(%[tab])                            \n\t"
307cabdff1aSopenharmony_ci        "lwc1       %[fTmp3],       15*4(%[tab])                            \n\t"
308cabdff1aSopenharmony_ci        "lwc1       %[fTmp4],       16*4(%[tab])                            \n\t"
309cabdff1aSopenharmony_ci        "add.s      %[fTmp5],       %[fTmp1],       %[fTmp2]                \n\t"
310cabdff1aSopenharmony_ci        "sub.s      %[fTmp8],       %[fTmp1],       %[fTmp2]                \n\t"
311cabdff1aSopenharmony_ci        "add.s      %[fTmp6],       %[fTmp3],       %[fTmp4]                \n\t"
312cabdff1aSopenharmony_ci        "sub.s      %[fTmp9],       %[fTmp3],       %[fTmp4]                \n\t"
313cabdff1aSopenharmony_ci        "mul.s      %[fTmp8],       %[fTmp8],       %[f2]                   \n\t"
314cabdff1aSopenharmony_ci        "add.s      %[val0],        %[fTmp5],       %[fTmp6]                \n\t"
315cabdff1aSopenharmony_ci        "sub.s      %[val15],       %[fTmp5],       %[fTmp6]                \n\t"
316cabdff1aSopenharmony_ci        "lwc1       %[fTmp1],       7*4(%[tab])                             \n\t"
317cabdff1aSopenharmony_ci        "lwc1       %[fTmp2],       24*4(%[tab])                            \n\t"
318cabdff1aSopenharmony_ci        "madd.s     %[val16],       %[fTmp8],       %[fTmp9],   %[f3]       \n\t"
319cabdff1aSopenharmony_ci        "nmsub.s    %[val31],       %[fTmp8],       %[fTmp9],   %[f3]       \n\t"
320cabdff1aSopenharmony_ci        "mul.s      %[val15],       %[val15],       %[f1]                   \n\t"
321cabdff1aSopenharmony_ci        "lwc1       %[fTmp3],       8*4(%[tab])                             \n\t"
322cabdff1aSopenharmony_ci        "lwc1       %[fTmp4],       23*4(%[tab])                            \n\t"
323cabdff1aSopenharmony_ci        "add.s      %[fTmp5],       %[fTmp1],       %[fTmp2]                \n\t"
324cabdff1aSopenharmony_ci        "mul.s      %[val31],       %[val31],       %[f1]                   \n\t"
325cabdff1aSopenharmony_ci        "sub.s      %[fTmp8],       %[fTmp1],       %[fTmp2]                \n\t"
326cabdff1aSopenharmony_ci        "add.s      %[fTmp6],       %[fTmp3],       %[fTmp4]                \n\t"
327cabdff1aSopenharmony_ci        "sub.s      %[fTmp9],       %[fTmp3],       %[fTmp4]                \n\t"
328cabdff1aSopenharmony_ci        "add.s      %[val7],        %[fTmp5],       %[fTmp6]                \n\t"
329cabdff1aSopenharmony_ci        "sub.s      %[val8],        %[fTmp5],       %[fTmp6]                \n\t"
330cabdff1aSopenharmony_ci        "mul.s      %[fTmp8],       %[fTmp8],       %[f5]                   \n\t"
331cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val0],        %[val7]                 \n\t"
332cabdff1aSopenharmony_ci        "mul.s      %[val8],        %[val8],        %[f4]                   \n\t"
333cabdff1aSopenharmony_ci        "madd.s     %[val23],       %[fTmp8],       %[fTmp9],   %[f6]       \n\t"
334cabdff1aSopenharmony_ci        "nmsub.s    %[val24],       %[fTmp8],       %[fTmp9],   %[f6]       \n\t"
335cabdff1aSopenharmony_ci        "add.s      %[val0],        %[val0],        %[val7]                 \n\t"
336cabdff1aSopenharmony_ci        "mul.s      %[val7],        %[f7],          %[fTmp2]                \n\t"
337cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val15],       %[val8]                 \n\t"
338cabdff1aSopenharmony_ci        "add.s      %[val8],        %[val15],       %[val8]                 \n\t"
339cabdff1aSopenharmony_ci        "mul.s      %[val24],       %[val24],       %[f4]                   \n\t"
340cabdff1aSopenharmony_ci        "sub.s      %[fTmp3],       %[val16],       %[val23]                \n\t"
341cabdff1aSopenharmony_ci        "add.s      %[val16],       %[val16],       %[val23]                \n\t"
342cabdff1aSopenharmony_ci        "mul.s      %[val15],       %[f7],          %[fTmp2]                \n\t"
343cabdff1aSopenharmony_ci        "sub.s      %[fTmp4],       %[val31],       %[val24]                \n\t"
344cabdff1aSopenharmony_ci        "mul.s      %[val23],       %[f7],          %[fTmp3]                \n\t"
345cabdff1aSopenharmony_ci        "add.s      %[val24],       %[val31],       %[val24]                \n\t"
346cabdff1aSopenharmony_ci        "mul.s      %[val31],       %[f7],          %[fTmp4]                \n\t"
347cabdff1aSopenharmony_ci
348cabdff1aSopenharmony_ci        : [fTmp1]  "=&f" (fTmp1),  [fTmp2] "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3),
349cabdff1aSopenharmony_ci          [fTmp4]  "=&f" (fTmp4),  [fTmp5] "=&f" (fTmp5), [fTmp6] "=&f" (fTmp6),
350cabdff1aSopenharmony_ci          [fTmp8] "=&f" (fTmp8), [fTmp9] "=&f" (fTmp9),
351cabdff1aSopenharmony_ci          [val0]  "=&f" (val0),  [val7]  "=&f" (val7),
352cabdff1aSopenharmony_ci          [val8]  "=&f" (val8),  [val15] "=&f" (val15),
353cabdff1aSopenharmony_ci          [val16] "=&f" (val16), [val23] "=&f" (val23),
354cabdff1aSopenharmony_ci          [val24] "=&f" (val24), [val31] "=&f" (val31)
355cabdff1aSopenharmony_ci        : [tab] "r" (tab), [f1]"f"(f1), [f2]"f"(f2), [f3]"f"(f3),
356cabdff1aSopenharmony_ci          [f4]"f"(f4), [f5]"f"(f5), [f6]"f"(f6), [f7]"f"(f7)
357cabdff1aSopenharmony_ci        : "memory"
358cabdff1aSopenharmony_ci    );
359cabdff1aSopenharmony_ci
360cabdff1aSopenharmony_ci    f1 = 0.64682178335999012954;
361cabdff1aSopenharmony_ci    f2 = 0.53104259108978417447;
362cabdff1aSopenharmony_ci    f3 = 1.48416461631416627724;
363cabdff1aSopenharmony_ci    f4 = 0.78815462345125022473;
364cabdff1aSopenharmony_ci    f5 = 0.55310389603444452782;
365cabdff1aSopenharmony_ci    f6 = 1.16943993343288495515;
366cabdff1aSopenharmony_ci    f7 = 2.56291544774150617881;
367cabdff1aSopenharmony_ci    __asm__ volatile (
368cabdff1aSopenharmony_ci        "lwc1       %[fTmp1],       3*4(%[tab])                             \n\t"
369cabdff1aSopenharmony_ci        "lwc1       %[fTmp2],       28*4(%[tab])                            \n\t"
370cabdff1aSopenharmony_ci        "lwc1       %[fTmp3],       12*4(%[tab])                            \n\t"
371cabdff1aSopenharmony_ci        "lwc1       %[fTmp4],       19*4(%[tab])                            \n\t"
372cabdff1aSopenharmony_ci        "add.s      %[fTmp5],       %[fTmp1],       %[fTmp2]                \n\t"
373cabdff1aSopenharmony_ci        "sub.s      %[fTmp8],       %[fTmp1],       %[fTmp2]                \n\t"
374cabdff1aSopenharmony_ci        "add.s      %[fTmp6],       %[fTmp3],       %[fTmp4]                \n\t"
375cabdff1aSopenharmony_ci        "sub.s      %[fTmp9],       %[fTmp3],       %[fTmp4]                \n\t"
376cabdff1aSopenharmony_ci        "mul.s      %[fTmp8],       %[fTmp8],       %[f2]                   \n\t"
377cabdff1aSopenharmony_ci        "add.s      %[val3],        %[fTmp5],       %[fTmp6]                \n\t"
378cabdff1aSopenharmony_ci        "sub.s      %[val12],       %[fTmp5],       %[fTmp6]                \n\t"
379cabdff1aSopenharmony_ci        "lwc1       %[fTmp1],       4*4(%[tab])                             \n\t"
380cabdff1aSopenharmony_ci        "lwc1       %[fTmp2],       27*4(%[tab])                            \n\t"
381cabdff1aSopenharmony_ci        "madd.s     %[val19],       %[fTmp8],       %[fTmp9],   %[f3]       \n\t"
382cabdff1aSopenharmony_ci        "nmsub.s    %[val28],       %[fTmp8],       %[fTmp9],   %[f3]       \n\t"
383cabdff1aSopenharmony_ci        "mul.s      %[val12],       %[val12],       %[f1]                   \n\t"
384cabdff1aSopenharmony_ci        "lwc1       %[fTmp3],       11*4(%[tab])                            \n\t"
385cabdff1aSopenharmony_ci        "lwc1       %[fTmp4],       20*4(%[tab])                            \n\t"
386cabdff1aSopenharmony_ci        "add.s      %[fTmp5],       %[fTmp1],       %[fTmp2]                \n\t"
387cabdff1aSopenharmony_ci        "mul.s      %[val28],       %[val28],       %[f1]                   \n\t"
388cabdff1aSopenharmony_ci        "sub.s      %[fTmp8],       %[fTmp1],       %[fTmp2]                \n\t"
389cabdff1aSopenharmony_ci        "add.s      %[fTmp6],       %[fTmp3],       %[fTmp4]                \n\t"
390cabdff1aSopenharmony_ci        "sub.s      %[fTmp9],       %[fTmp3],       %[fTmp4]                \n\t"
391cabdff1aSopenharmony_ci        "mul.s      %[fTmp8],       %[fTmp8],       %[f5]                   \n\t"
392cabdff1aSopenharmony_ci        "add.s      %[val4],        %[fTmp5],       %[fTmp6]                \n\t"
393cabdff1aSopenharmony_ci        "sub.s      %[val11],       %[fTmp5],       %[fTmp6]                \n\t"
394cabdff1aSopenharmony_ci        "madd.s     %[val20],       %[fTmp8],       %[fTmp9],   %[f6]       \n\t"
395cabdff1aSopenharmony_ci        "nmsub.s    %[val27],       %[fTmp8],       %[fTmp9],   %[f6]       \n\t"
396cabdff1aSopenharmony_ci        "mul.s      %[val11],       %[val11],       %[f4]                   \n\t"
397cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val3],        %[val4]                 \n\t"
398cabdff1aSopenharmony_ci        "add.s      %[val3],        %[val3],        %[val4]                 \n\t"
399cabdff1aSopenharmony_ci        "sub.s      %[fTmp4],       %[val19],       %[val20]                \n\t"
400cabdff1aSopenharmony_ci        "mul.s      %[val27],       %[val27],       %[f4]                   \n\t"
401cabdff1aSopenharmony_ci        "sub.s      %[fTmp3],       %[val12],       %[val11]                \n\t"
402cabdff1aSopenharmony_ci        "mul.s      %[val4],        %[f7],          %[fTmp2]                \n\t"
403cabdff1aSopenharmony_ci        "add.s      %[val11],       %[val12],       %[val11]                \n\t"
404cabdff1aSopenharmony_ci        "add.s      %[val19],       %[val19],       %[val20]                \n\t"
405cabdff1aSopenharmony_ci        "mul.s      %[val20],       %[f7],          %[fTmp4]                \n\t"
406cabdff1aSopenharmony_ci        "mul.s      %[val12],       %[f7],          %[fTmp3]                \n\t"
407cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val28],       %[val27]                \n\t"
408cabdff1aSopenharmony_ci        "add.s      %[val27],       %[val28],       %[val27]                \n\t"
409cabdff1aSopenharmony_ci        "mul.s      %[val28],       %[f7],          %[fTmp2]                \n\t"
410cabdff1aSopenharmony_ci
411cabdff1aSopenharmony_ci        : [fTmp1]  "=&f" (fTmp1),  [fTmp2]  "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3),
412cabdff1aSopenharmony_ci          [fTmp4]  "=&f" (fTmp4),  [fTmp5]  "=&f" (fTmp5), [fTmp6] "=&f" (fTmp6),
413cabdff1aSopenharmony_ci          [fTmp8]  "=&f" (fTmp8), [fTmp9] "=&f" (fTmp9),
414cabdff1aSopenharmony_ci          [val3]  "=&f" (val3),  [val4]  "=&f" (val4),
415cabdff1aSopenharmony_ci          [val11] "=&f" (val11), [val12] "=&f" (val12),
416cabdff1aSopenharmony_ci          [val19] "=&f" (val19), [val20] "=&f" (val20),
417cabdff1aSopenharmony_ci          [val27] "=&f" (val27), [val28] "=&f" (val28)
418cabdff1aSopenharmony_ci        : [tab] "r" (tab), [f1]"f"(f1), [f2]"f"(f2), [f3]"f"(f3),
419cabdff1aSopenharmony_ci          [f4]"f"(f4), [f5]"f"(f5), [f6]"f"(f6), [f7]"f"(f7)
420cabdff1aSopenharmony_ci        : "memory"
421cabdff1aSopenharmony_ci    );
422cabdff1aSopenharmony_ci
423cabdff1aSopenharmony_ci    f1 = 0.54119610014619698439;
424cabdff1aSopenharmony_ci    __asm__ volatile (
425cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val0],        %[val3]                 \n\t"
426cabdff1aSopenharmony_ci        "add.s      %[val0],        %[val0],        %[val3]                 \n\t"
427cabdff1aSopenharmony_ci        "sub.s      %[fTmp3],       %[val7],        %[val4]                 \n\t"
428cabdff1aSopenharmony_ci        "add.s      %[val4],        %[val7],        %[val4]                 \n\t"
429cabdff1aSopenharmony_ci        "sub.s      %[fTmp4],       %[val8],        %[val11]                \n\t"
430cabdff1aSopenharmony_ci        "mul.s      %[val3],        %[f1],          %[fTmp2]                \n\t"
431cabdff1aSopenharmony_ci        "add.s      %[val8],        %[val8],        %[val11]                \n\t"
432cabdff1aSopenharmony_ci        "mul.s      %[val7],        %[f1],          %[fTmp3]                \n\t"
433cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val15],       %[val12]                \n\t"
434cabdff1aSopenharmony_ci        "mul.s      %[val11],       %[f1],          %[fTmp4]                \n\t"
435cabdff1aSopenharmony_ci        "add.s      %[val12],       %[val15],       %[val12]                \n\t"
436cabdff1aSopenharmony_ci        "mul.s      %[val15],       %[f1],          %[fTmp2]                \n\t"
437cabdff1aSopenharmony_ci
438cabdff1aSopenharmony_ci        : [val0]  "+&f" (val0),   [val3] "+&f" (val3),
439cabdff1aSopenharmony_ci          [val4]  "+&f" (val4),   [val7] "+&f" (val7),
440cabdff1aSopenharmony_ci          [val8]  "+&f" (val8),   [val11] "+&f" (val11),
441cabdff1aSopenharmony_ci          [val12] "+&f" (val12),  [val15] "+&f" (val15),
442cabdff1aSopenharmony_ci          [fTmp2] "=&f" (fTmp2),
443cabdff1aSopenharmony_ci          [fTmp3] "=&f" (fTmp3), [fTmp4] "=&f" (fTmp4)
444cabdff1aSopenharmony_ci        : [f1] "f" (f1)
445cabdff1aSopenharmony_ci    );
446cabdff1aSopenharmony_ci
447cabdff1aSopenharmony_ci    __asm__ volatile (
448cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val16],       %[val19]                \n\t"
449cabdff1aSopenharmony_ci        "add.s      %[val16],       %[val16],       %[val19]                \n\t"
450cabdff1aSopenharmony_ci        "sub.s      %[fTmp3],       %[val23],       %[val20]                \n\t"
451cabdff1aSopenharmony_ci        "add.s      %[val20],       %[val23],       %[val20]                \n\t"
452cabdff1aSopenharmony_ci        "sub.s      %[fTmp4],       %[val24],       %[val27]                \n\t"
453cabdff1aSopenharmony_ci        "mul.s      %[val19],       %[f1],          %[fTmp2]                \n\t"
454cabdff1aSopenharmony_ci        "add.s      %[val24],       %[val24],       %[val27]                \n\t"
455cabdff1aSopenharmony_ci        "mul.s      %[val23],       %[f1],          %[fTmp3]                \n\t"
456cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val31],       %[val28]                \n\t"
457cabdff1aSopenharmony_ci        "mul.s      %[val27],       %[f1],          %[fTmp4]                \n\t"
458cabdff1aSopenharmony_ci        "add.s      %[val28],       %[val31],       %[val28]                \n\t"
459cabdff1aSopenharmony_ci        "mul.s      %[val31],       %[f1],          %[fTmp2]                \n\t"
460cabdff1aSopenharmony_ci
461cabdff1aSopenharmony_ci        : [fTmp2] "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3), [fTmp4] "=&f" (fTmp4),
462cabdff1aSopenharmony_ci          [val16] "+&f" (val16), [val19] "+&f" (val19), [val20] "+&f" (val20),
463cabdff1aSopenharmony_ci          [val23] "+&f" (val23), [val24] "+&f" (val24), [val27] "+&f" (val27),
464cabdff1aSopenharmony_ci          [val28] "+&f" (val28), [val31] "+&f" (val31)
465cabdff1aSopenharmony_ci        : [f1] "f" (f1)
466cabdff1aSopenharmony_ci    );
467cabdff1aSopenharmony_ci
468cabdff1aSopenharmony_ci    f1 = 0.52249861493968888062;
469cabdff1aSopenharmony_ci    f2 = 0.50547095989754365998;
470cabdff1aSopenharmony_ci    f3 = 3.40760841846871878570;
471cabdff1aSopenharmony_ci    f4 = 1.72244709823833392782;
472cabdff1aSopenharmony_ci    f5 = 0.62250412303566481615;
473cabdff1aSopenharmony_ci    f6 = 0.83934964541552703873;
474cabdff1aSopenharmony_ci    f7 = 0.60134488693504528054;
475cabdff1aSopenharmony_ci    __asm__ volatile (
476cabdff1aSopenharmony_ci        "lwc1       %[fTmp1],       1*4(%[tab])                             \n\t"
477cabdff1aSopenharmony_ci        "lwc1       %[fTmp2],       30*4(%[tab])                            \n\t"
478cabdff1aSopenharmony_ci        "lwc1       %[fTmp3],       14*4(%[tab])                            \n\t"
479cabdff1aSopenharmony_ci        "lwc1       %[fTmp4],       17*4(%[tab])                            \n\t"
480cabdff1aSopenharmony_ci        "add.s      %[fTmp5],       %[fTmp1],       %[fTmp2]                \n\t"
481cabdff1aSopenharmony_ci        "sub.s      %[fTmp8],       %[fTmp1],       %[fTmp2]                \n\t"
482cabdff1aSopenharmony_ci        "add.s      %[fTmp6],       %[fTmp3],       %[fTmp4]                \n\t"
483cabdff1aSopenharmony_ci        "sub.s      %[fTmp9],       %[fTmp3],       %[fTmp4]                \n\t"
484cabdff1aSopenharmony_ci        "mul.s      %[fTmp8],       %[fTmp8],       %[f2]                   \n\t"
485cabdff1aSopenharmony_ci        "add.s      %[val1],        %[fTmp5],       %[fTmp6]                \n\t"
486cabdff1aSopenharmony_ci        "sub.s      %[val14],       %[fTmp5],       %[fTmp6]                \n\t"
487cabdff1aSopenharmony_ci        "lwc1       %[fTmp1],       6*4(%[tab])                             \n\t"
488cabdff1aSopenharmony_ci        "lwc1       %[fTmp2],       25*4(%[tab])                            \n\t"
489cabdff1aSopenharmony_ci        "madd.s     %[val17],       %[fTmp8],       %[fTmp9],   %[f3]       \n\t"
490cabdff1aSopenharmony_ci        "nmsub.s    %[val30],       %[fTmp8],       %[fTmp9],   %[f3]       \n\t"
491cabdff1aSopenharmony_ci        "mul.s      %[val14],       %[val14],       %[f1]                   \n\t"
492cabdff1aSopenharmony_ci        "lwc1       %[fTmp3],       9*4(%[tab])                             \n\t"
493cabdff1aSopenharmony_ci        "lwc1       %[fTmp4],       22*4(%[tab])                            \n\t"
494cabdff1aSopenharmony_ci        "add.s      %[fTmp5],       %[fTmp1],       %[fTmp2]                \n\t"
495cabdff1aSopenharmony_ci        "mul.s      %[val30],       %[val30],       %[f1]                   \n\t"
496cabdff1aSopenharmony_ci        "sub.s      %[fTmp8],       %[fTmp1],       %[fTmp2]                \n\t"
497cabdff1aSopenharmony_ci        "add.s      %[fTmp6],       %[fTmp3],       %[fTmp4]                \n\t"
498cabdff1aSopenharmony_ci        "sub.s      %[fTmp9],       %[fTmp3],       %[fTmp4]                \n\t"
499cabdff1aSopenharmony_ci        "add.s      %[val6],        %[fTmp5],       %[fTmp6]                \n\t"
500cabdff1aSopenharmony_ci        "sub.s      %[val9],        %[fTmp5],       %[fTmp6]                \n\t"
501cabdff1aSopenharmony_ci        "mul.s      %[fTmp8],       %[fTmp8],       %[f5]                   \n\t"
502cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val1],        %[val6]                 \n\t"
503cabdff1aSopenharmony_ci        "add.s      %[val1],        %[val1],        %[val6]                 \n\t"
504cabdff1aSopenharmony_ci        "mul.s      %[val9],        %[val9],        %[f4]                   \n\t"
505cabdff1aSopenharmony_ci        "madd.s     %[val22],       %[fTmp8],       %[fTmp9],   %[f6]       \n\t"
506cabdff1aSopenharmony_ci        "nmsub.s    %[val25],       %[fTmp8],       %[fTmp9],   %[f6]       \n\t"
507cabdff1aSopenharmony_ci        "mul.s      %[val6],        %[f7],          %[fTmp2]                \n\t"
508cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val14],       %[val9]                 \n\t"
509cabdff1aSopenharmony_ci        "add.s      %[val9],        %[val14],       %[val9]                 \n\t"
510cabdff1aSopenharmony_ci        "mul.s      %[val25],       %[val25],       %[f4]                   \n\t"
511cabdff1aSopenharmony_ci        "sub.s      %[fTmp3],       %[val17],       %[val22]                \n\t"
512cabdff1aSopenharmony_ci        "add.s      %[val17],       %[val17],       %[val22]                \n\t"
513cabdff1aSopenharmony_ci        "mul.s      %[val14],       %[f7],          %[fTmp2]                \n\t"
514cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val30],       %[val25]                \n\t"
515cabdff1aSopenharmony_ci        "mul.s      %[val22],       %[f7],          %[fTmp3]                \n\t"
516cabdff1aSopenharmony_ci        "add.s      %[val25],       %[val30],       %[val25]                \n\t"
517cabdff1aSopenharmony_ci        "mul.s      %[val30],       %[f7],          %[fTmp2]                \n\t"
518cabdff1aSopenharmony_ci
519cabdff1aSopenharmony_ci        : [fTmp1]  "=&f" (fTmp1),  [fTmp2]  "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3),
520cabdff1aSopenharmony_ci          [fTmp4]  "=&f" (fTmp4),  [fTmp5]  "=&f" (fTmp5), [fTmp6] "=&f" (fTmp6),
521cabdff1aSopenharmony_ci          [fTmp8]  "=&f" (fTmp8), [fTmp9] "=&f" (fTmp9),
522cabdff1aSopenharmony_ci          [val1]  "=&f" (val1),  [val6]  "=&f" (val6),
523cabdff1aSopenharmony_ci          [val9]  "=&f" (val9),  [val14] "=&f" (val14),
524cabdff1aSopenharmony_ci          [val17] "=&f" (val17), [val22] "=&f" (val22),
525cabdff1aSopenharmony_ci          [val25] "=&f" (val25), [val30] "=&f" (val30)
526cabdff1aSopenharmony_ci        : [tab] "r" (tab), [f1]"f"(f1), [f2]"f"(f2), [f3]"f"(f3),
527cabdff1aSopenharmony_ci          [f4]"f"(f4), [f5]"f"(f5), [f6]"f"(f6), [f7]"f"(f7)
528cabdff1aSopenharmony_ci        : "memory"
529cabdff1aSopenharmony_ci    );
530cabdff1aSopenharmony_ci
531cabdff1aSopenharmony_ci    f1 = 0.56694403481635770368;
532cabdff1aSopenharmony_ci    f2 = 0.51544730992262454697;
533cabdff1aSopenharmony_ci    f3 = 2.05778100995341155085;
534cabdff1aSopenharmony_ci    f4 = 1.06067768599034747134;
535cabdff1aSopenharmony_ci    f5 = 0.58293496820613387367;
536cabdff1aSopenharmony_ci    f6 = 0.97256823786196069369;
537cabdff1aSopenharmony_ci    f7 = 0.89997622313641570463;
538cabdff1aSopenharmony_ci    __asm__ volatile (
539cabdff1aSopenharmony_ci        "lwc1       %[fTmp1],       2*4(%[tab])                             \n\t"
540cabdff1aSopenharmony_ci        "lwc1       %[fTmp2],       29*4(%[tab])                            \n\t"
541cabdff1aSopenharmony_ci        "lwc1       %[fTmp3],       13*4(%[tab])                            \n\t"
542cabdff1aSopenharmony_ci        "lwc1       %[fTmp4],       18*4(%[tab])                            \n\t"
543cabdff1aSopenharmony_ci        "add.s      %[fTmp5],       %[fTmp1],       %[fTmp2]                \n\t"
544cabdff1aSopenharmony_ci        "sub.s      %[fTmp8],       %[fTmp1],       %[fTmp2]                \n\t"
545cabdff1aSopenharmony_ci        "add.s      %[fTmp6],       %[fTmp3],       %[fTmp4]                \n\t"
546cabdff1aSopenharmony_ci        "sub.s      %[fTmp9],       %[fTmp3],       %[fTmp4]                \n\t"
547cabdff1aSopenharmony_ci        "mul.s      %[fTmp8],       %[fTmp8],       %[f2]                   \n\t"
548cabdff1aSopenharmony_ci        "add.s      %[val2],        %[fTmp5],       %[fTmp6]                \n\t"
549cabdff1aSopenharmony_ci        "sub.s      %[val13],       %[fTmp5],       %[fTmp6]                \n\t"
550cabdff1aSopenharmony_ci        "lwc1       %[fTmp1],       5*4(%[tab])                             \n\t"
551cabdff1aSopenharmony_ci        "lwc1       %[fTmp2],       26*4(%[tab])                            \n\t"
552cabdff1aSopenharmony_ci        "madd.s     %[val18],       %[fTmp8],       %[fTmp9],   %[f3]       \n\t"
553cabdff1aSopenharmony_ci        "nmsub.s    %[val29],       %[fTmp8],       %[fTmp9],   %[f3]       \n\t"
554cabdff1aSopenharmony_ci        "mul.s      %[val13],       %[val13],       %[f1]                   \n\t"
555cabdff1aSopenharmony_ci        "lwc1       %[fTmp3],       10*4(%[tab])                            \n\t"
556cabdff1aSopenharmony_ci        "lwc1       %[fTmp4],       21*4(%[tab])                            \n\t"
557cabdff1aSopenharmony_ci        "mul.s      %[val29],       %[val29],       %[f1]                   \n\t"
558cabdff1aSopenharmony_ci        "add.s      %[fTmp5],       %[fTmp1],       %[fTmp2]                \n\t"
559cabdff1aSopenharmony_ci        "sub.s      %[fTmp8],       %[fTmp1],       %[fTmp2]                \n\t"
560cabdff1aSopenharmony_ci        "add.s      %[fTmp6],       %[fTmp3],       %[fTmp4]                \n\t"
561cabdff1aSopenharmony_ci        "sub.s      %[fTmp9],       %[fTmp3],       %[fTmp4]                \n\t"
562cabdff1aSopenharmony_ci        "add.s      %[val5],        %[fTmp5],       %[fTmp6]                \n\t"
563cabdff1aSopenharmony_ci        "sub.s      %[val10],       %[fTmp5],       %[fTmp6]                \n\t"
564cabdff1aSopenharmony_ci        "mul.s      %[fTmp8],       %[fTmp8],       %[f5]                   \n\t"
565cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val2],        %[val5]                 \n\t"
566cabdff1aSopenharmony_ci        "mul.s      %[val10],       %[val10],       %[f4]                   \n\t"
567cabdff1aSopenharmony_ci        "madd.s     %[val21],       %[fTmp8],       %[fTmp9],   %[f6]       \n\t"
568cabdff1aSopenharmony_ci        "nmsub.s    %[val26],       %[fTmp8],       %[fTmp9],   %[f6]       \n\t"
569cabdff1aSopenharmony_ci        "add.s      %[val2],        %[val2],        %[val5]                 \n\t"
570cabdff1aSopenharmony_ci        "mul.s      %[val5],        %[f7],          %[fTmp2]                \n\t"
571cabdff1aSopenharmony_ci        "sub.s      %[fTmp3],       %[val13],       %[val10]                \n\t"
572cabdff1aSopenharmony_ci        "add.s      %[val10],       %[val13],       %[val10]                \n\t"
573cabdff1aSopenharmony_ci        "mul.s      %[val26],       %[val26],       %[f4]                   \n\t"
574cabdff1aSopenharmony_ci        "sub.s      %[fTmp4],       %[val18],       %[val21]                \n\t"
575cabdff1aSopenharmony_ci        "add.s      %[val18],       %[val18],       %[val21]                \n\t"
576cabdff1aSopenharmony_ci        "mul.s      %[val13],       %[f7],          %[fTmp3]                \n\t"
577cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val29],       %[val26]                \n\t"
578cabdff1aSopenharmony_ci        "add.s      %[val26],       %[val29],       %[val26]                \n\t"
579cabdff1aSopenharmony_ci        "mul.s      %[val21],       %[f7],          %[fTmp4]                \n\t"
580cabdff1aSopenharmony_ci        "mul.s      %[val29],       %[f7],          %[fTmp2]                \n\t"
581cabdff1aSopenharmony_ci
582cabdff1aSopenharmony_ci        : [fTmp1]  "=&f" (fTmp1),  [fTmp2]  "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3),
583cabdff1aSopenharmony_ci          [fTmp4]  "=&f" (fTmp4),  [fTmp5]  "=&f" (fTmp5), [fTmp6] "=&f" (fTmp6),
584cabdff1aSopenharmony_ci          [fTmp8]  "=&f" (fTmp8), [fTmp9] "=&f" (fTmp9),
585cabdff1aSopenharmony_ci          [val2]  "=&f" (val2),  [val5]  "=&f" (val5),
586cabdff1aSopenharmony_ci          [val10] "=&f" (val10), [val13] "=&f" (val13),
587cabdff1aSopenharmony_ci          [val18] "=&f" (val18), [val21] "=&f" (val21),
588cabdff1aSopenharmony_ci          [val26] "=&f" (val26), [val29] "=&f" (val29)
589cabdff1aSopenharmony_ci        : [tab] "r" (tab), [f1]"f"(f1), [f2]"f"(f2), [f3]"f"(f3),
590cabdff1aSopenharmony_ci          [f4]"f"(f4), [f5]"f"(f5), [f6]"f"(f6), [f7]"f"(f7)
591cabdff1aSopenharmony_ci        : "memory"
592cabdff1aSopenharmony_ci    );
593cabdff1aSopenharmony_ci
594cabdff1aSopenharmony_ci    f1 = 1.30656296487637652785;
595cabdff1aSopenharmony_ci    __asm__ volatile (
596cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val1],        %[val2]                 \n\t"
597cabdff1aSopenharmony_ci        "add.s      %[val1],        %[val1],        %[val2]                 \n\t"
598cabdff1aSopenharmony_ci        "sub.s      %[fTmp3],       %[val6],        %[val5]                 \n\t"
599cabdff1aSopenharmony_ci        "add.s      %[val5],        %[val6],        %[val5]                 \n\t"
600cabdff1aSopenharmony_ci        "sub.s      %[fTmp4],       %[val9],        %[val10]                \n\t"
601cabdff1aSopenharmony_ci        "mul.s      %[val2],        %[f1],          %[fTmp2]                \n\t"
602cabdff1aSopenharmony_ci        "add.s      %[val9],        %[val9],        %[val10]                \n\t"
603cabdff1aSopenharmony_ci        "mul.s      %[val6],        %[f1],          %[fTmp3]                \n\t"
604cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val14],       %[val13]                \n\t"
605cabdff1aSopenharmony_ci        "mul.s      %[val10],       %[f1],          %[fTmp4]                \n\t"
606cabdff1aSopenharmony_ci        "add.s      %[val13],       %[val14],       %[val13]                \n\t"
607cabdff1aSopenharmony_ci        "mul.s      %[val14],       %[f1],          %[fTmp2]                \n\t"
608cabdff1aSopenharmony_ci
609cabdff1aSopenharmony_ci        : [fTmp2] "=&f" (fTmp2),
610cabdff1aSopenharmony_ci          [fTmp3] "=&f" (fTmp3), [fTmp4] "=&f" (fTmp4),
611cabdff1aSopenharmony_ci          [val1]  "+&f" (val1),  [val2]  "+&f" (val2),
612cabdff1aSopenharmony_ci          [val5]  "+&f" (val5),  [val6]  "+&f" (val6),
613cabdff1aSopenharmony_ci          [val9]  "+&f" (val9),  [val10] "+&f" (val10),
614cabdff1aSopenharmony_ci          [val13] "+&f" (val13), [val14] "+&f" (val14)
615cabdff1aSopenharmony_ci        : [f1]"f"(f1)
616cabdff1aSopenharmony_ci    );
617cabdff1aSopenharmony_ci
618cabdff1aSopenharmony_ci    __asm__ volatile (
619cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val17],       %[val18]                \n\t"
620cabdff1aSopenharmony_ci        "add.s      %[val17],       %[val17],       %[val18]                \n\t"
621cabdff1aSopenharmony_ci        "sub.s      %[fTmp3],       %[val22],       %[val21]                \n\t"
622cabdff1aSopenharmony_ci        "add.s      %[val21],       %[val22],       %[val21]                \n\t"
623cabdff1aSopenharmony_ci        "sub.s      %[fTmp4],       %[val25],       %[val26]                \n\t"
624cabdff1aSopenharmony_ci        "mul.s      %[val18],       %[f1],          %[fTmp2]                \n\t"
625cabdff1aSopenharmony_ci        "add.s      %[val25],       %[val25],       %[val26]                \n\t"
626cabdff1aSopenharmony_ci        "mul.s      %[val22],       %[f1],          %[fTmp3]                \n\t"
627cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val30],       %[val29]                \n\t"
628cabdff1aSopenharmony_ci        "mul.s      %[val26],       %[f1],          %[fTmp4]                \n\t"
629cabdff1aSopenharmony_ci        "add.s      %[val29],       %[val30],       %[val29]                \n\t"
630cabdff1aSopenharmony_ci        "mul.s      %[val30],       %[f1],          %[fTmp2]                \n\t"
631cabdff1aSopenharmony_ci
632cabdff1aSopenharmony_ci        : [fTmp2] "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3), [fTmp4] "=&f" (fTmp4),
633cabdff1aSopenharmony_ci          [val17] "+&f" (val17), [val18] "+&f" (val18), [val21] "+&f" (val21),
634cabdff1aSopenharmony_ci          [val22] "+&f" (val22), [val25] "+&f" (val25), [val26] "+&f" (val26),
635cabdff1aSopenharmony_ci          [val29] "+&f" (val29), [val30] "+&f" (val30)
636cabdff1aSopenharmony_ci        : [f1] "f" (f1)
637cabdff1aSopenharmony_ci    );
638cabdff1aSopenharmony_ci
639cabdff1aSopenharmony_ci    f1 = 0.70710678118654752439;
640cabdff1aSopenharmony_ci    __asm__ volatile (
641cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val0],        %[val1]                 \n\t"
642cabdff1aSopenharmony_ci        "add.s      %[val0],        %[val0],        %[val1]                 \n\t"
643cabdff1aSopenharmony_ci        "sub.s      %[fTmp3],       %[val3],        %[val2]                 \n\t"
644cabdff1aSopenharmony_ci        "add.s      %[val2],        %[val3],        %[val2]                 \n\t"
645cabdff1aSopenharmony_ci        "sub.s      %[fTmp4],       %[val4],        %[val5]                 \n\t"
646cabdff1aSopenharmony_ci        "mul.s      %[val1],        %[f1],          %[fTmp2]                \n\t"
647cabdff1aSopenharmony_ci        "swc1       %[val0],        0(%[out])                               \n\t"
648cabdff1aSopenharmony_ci        "mul.s      %[val3],        %[fTmp3],       %[f1]                   \n\t"
649cabdff1aSopenharmony_ci        "add.s      %[val4],        %[val4],        %[val5]                 \n\t"
650cabdff1aSopenharmony_ci        "mul.s      %[val5],        %[f1],          %[fTmp4]                \n\t"
651cabdff1aSopenharmony_ci        "swc1       %[val1],        16*4(%[out])                            \n\t"
652cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val7],        %[val6]                 \n\t"
653cabdff1aSopenharmony_ci        "add.s      %[val2],        %[val2],        %[val3]                 \n\t"
654cabdff1aSopenharmony_ci        "swc1       %[val3],        24*4(%[out])                            \n\t"
655cabdff1aSopenharmony_ci        "add.s      %[val6],        %[val7],        %[val6]                 \n\t"
656cabdff1aSopenharmony_ci        "mul.s      %[val7],        %[f1],          %[fTmp2]                \n\t"
657cabdff1aSopenharmony_ci        "swc1       %[val2],        8*4(%[out])                             \n\t"
658cabdff1aSopenharmony_ci        "add.s      %[val6],        %[val6],        %[val7]                 \n\t"
659cabdff1aSopenharmony_ci        "swc1       %[val7],        28*4(%[out])                            \n\t"
660cabdff1aSopenharmony_ci        "add.s      %[val4],        %[val4],        %[val6]                 \n\t"
661cabdff1aSopenharmony_ci        "add.s      %[val6],        %[val6],        %[val5]                 \n\t"
662cabdff1aSopenharmony_ci        "add.s      %[val5],        %[val5],        %[val7]                 \n\t"
663cabdff1aSopenharmony_ci        "swc1       %[val4],        4*4(%[out])                             \n\t"
664cabdff1aSopenharmony_ci        "swc1       %[val5],        20*4(%[out])                            \n\t"
665cabdff1aSopenharmony_ci        "swc1       %[val6],        12*4(%[out])                            \n\t"
666cabdff1aSopenharmony_ci
667cabdff1aSopenharmony_ci        : [fTmp2] "=&f" (fTmp2),
668cabdff1aSopenharmony_ci          [fTmp3] "=&f" (fTmp3), [fTmp4] "=&f" (fTmp4),
669cabdff1aSopenharmony_ci          [val0] "+&f" (val0), [val1] "+&f" (val1),
670cabdff1aSopenharmony_ci          [val2] "+&f" (val2), [val3] "+&f" (val3),
671cabdff1aSopenharmony_ci          [val4] "+&f" (val4), [val5] "+&f" (val5),
672cabdff1aSopenharmony_ci          [val6] "+&f" (val6), [val7] "+&f" (val7)
673cabdff1aSopenharmony_ci        : [out] "r" (out), [f1]"f"(f1)
674cabdff1aSopenharmony_ci    );
675cabdff1aSopenharmony_ci
676cabdff1aSopenharmony_ci    __asm__ volatile (
677cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val8],        %[val9]                 \n\t"
678cabdff1aSopenharmony_ci        "add.s      %[val8],        %[val8],        %[val9]                 \n\t"
679cabdff1aSopenharmony_ci        "sub.s      %[fTmp3],       %[val11],       %[val10]                \n\t"
680cabdff1aSopenharmony_ci        "add.s      %[val10],       %[val11],       %[val10]                \n\t"
681cabdff1aSopenharmony_ci        "sub.s      %[fTmp4],       %[val12],       %[val13]                \n\t"
682cabdff1aSopenharmony_ci        "mul.s      %[val9],        %[f1],          %[fTmp2]                \n\t"
683cabdff1aSopenharmony_ci        "add.s      %[val12],       %[val12],       %[val13]                \n\t"
684cabdff1aSopenharmony_ci        "mul.s      %[val11],       %[f1],          %[fTmp3]                \n\t"
685cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val15],       %[val14]                \n\t"
686cabdff1aSopenharmony_ci        "mul.s      %[val13],       %[f1],          %[fTmp4]                \n\t"
687cabdff1aSopenharmony_ci        "add.s      %[val14],       %[val15],       %[val14]                \n\t"
688cabdff1aSopenharmony_ci        "add.s      %[val10],       %[val10],       %[val11]                \n\t"
689cabdff1aSopenharmony_ci        "mul.s      %[val15],       %[f1],          %[fTmp2]                \n\t"
690cabdff1aSopenharmony_ci        "add.s      %[val14],       %[val14],       %[val15]                \n\t"
691cabdff1aSopenharmony_ci        "add.s      %[val12],       %[val12],       %[val14]                \n\t"
692cabdff1aSopenharmony_ci        "add.s      %[val14],       %[val14],       %[val13]                \n\t"
693cabdff1aSopenharmony_ci        "add.s      %[val13],       %[val13],       %[val15]                \n\t"
694cabdff1aSopenharmony_ci        "add.s      %[val8],        %[val8],        %[val12]                \n\t"
695cabdff1aSopenharmony_ci        "add.s      %[val12],       %[val12],       %[val10]                \n\t"
696cabdff1aSopenharmony_ci        "add.s      %[val10],       %[val10],       %[val14]                \n\t"
697cabdff1aSopenharmony_ci        "add.s      %[val14],       %[val14],       %[val9]                 \n\t"
698cabdff1aSopenharmony_ci        "add.s      %[val9],        %[val9],        %[val13]                \n\t"
699cabdff1aSopenharmony_ci        "add.s      %[val13],       %[val13],       %[val11]                \n\t"
700cabdff1aSopenharmony_ci        "add.s      %[val11],       %[val11],       %[val15]                \n\t"
701cabdff1aSopenharmony_ci        "swc1       %[val8],         2*4(%[out])                            \n\t"
702cabdff1aSopenharmony_ci        "swc1       %[val9],        18*4(%[out])                            \n\t"
703cabdff1aSopenharmony_ci        "swc1       %[val10],       10*4(%[out])                            \n\t"
704cabdff1aSopenharmony_ci        "swc1       %[val11],       26*4(%[out])                            \n\t"
705cabdff1aSopenharmony_ci        "swc1       %[val12],        6*4(%[out])                            \n\t"
706cabdff1aSopenharmony_ci        "swc1       %[val13],       22*4(%[out])                            \n\t"
707cabdff1aSopenharmony_ci        "swc1       %[val14],       14*4(%[out])                            \n\t"
708cabdff1aSopenharmony_ci        "swc1       %[val15],       30*4(%[out])                            \n\t"
709cabdff1aSopenharmony_ci
710cabdff1aSopenharmony_ci        : [fTmp2] "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3), [fTmp4] "=&f" (fTmp4),
711cabdff1aSopenharmony_ci          [val8]  "+&f" (val8),  [val9]  "+&f" (val9),  [val10] "+&f" (val10),
712cabdff1aSopenharmony_ci          [val11] "+&f" (val11), [val12] "+&f" (val12), [val13] "+&f" (val13),
713cabdff1aSopenharmony_ci          [val14] "+&f" (val14), [val15] "+&f" (val15)
714cabdff1aSopenharmony_ci        : [f1] "f" (f1), [out] "r" (out)
715cabdff1aSopenharmony_ci    );
716cabdff1aSopenharmony_ci
717cabdff1aSopenharmony_ci    __asm__ volatile (
718cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val16],       %[val17]                \n\t"
719cabdff1aSopenharmony_ci        "add.s      %[val16],       %[val16],       %[val17]                \n\t"
720cabdff1aSopenharmony_ci        "sub.s      %[fTmp3],       %[val19],       %[val18]                \n\t"
721cabdff1aSopenharmony_ci        "add.s      %[val18],       %[val19],       %[val18]                \n\t"
722cabdff1aSopenharmony_ci        "sub.s      %[fTmp4],       %[val20],       %[val21]                \n\t"
723cabdff1aSopenharmony_ci        "mul.s      %[val17],       %[f1],          %[fTmp2]                \n\t"
724cabdff1aSopenharmony_ci        "add.s      %[val20],       %[val20],       %[val21]                \n\t"
725cabdff1aSopenharmony_ci        "mul.s      %[val19],       %[f1],          %[fTmp3]                \n\t"
726cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val23],       %[val22]                \n\t"
727cabdff1aSopenharmony_ci        "mul.s      %[val21],       %[f1],          %[fTmp4]                \n\t"
728cabdff1aSopenharmony_ci        "add.s      %[val22],       %[val23],       %[val22]                \n\t"
729cabdff1aSopenharmony_ci        "add.s      %[val18],       %[val18],       %[val19]                \n\t"
730cabdff1aSopenharmony_ci        "mul.s      %[val23],       %[f1],          %[fTmp2]                \n\t"
731cabdff1aSopenharmony_ci        "add.s      %[val22],       %[val22],       %[val23]                \n\t"
732cabdff1aSopenharmony_ci        "add.s      %[val20],       %[val20],       %[val22]                \n\t"
733cabdff1aSopenharmony_ci        "add.s      %[val22],       %[val22],       %[val21]                \n\t"
734cabdff1aSopenharmony_ci        "add.s      %[val21],       %[val21],       %[val23]                \n\t"
735cabdff1aSopenharmony_ci
736cabdff1aSopenharmony_ci        : [fTmp2] "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3), [fTmp4] "=&f" (fTmp4),
737cabdff1aSopenharmony_ci          [val16] "+&f" (val16), [val17] "+&f" (val17), [val18] "+&f" (val18),
738cabdff1aSopenharmony_ci          [val19] "+&f" (val19), [val20] "+&f" (val20), [val21] "+&f" (val21),
739cabdff1aSopenharmony_ci          [val22] "+&f" (val22), [val23] "+&f" (val23)
740cabdff1aSopenharmony_ci        : [f1] "f" (f1)
741cabdff1aSopenharmony_ci    );
742cabdff1aSopenharmony_ci
743cabdff1aSopenharmony_ci    __asm__ volatile (
744cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val24],       %[val25]                \n\t"
745cabdff1aSopenharmony_ci        "add.s      %[val24],       %[val24],       %[val25]                \n\t"
746cabdff1aSopenharmony_ci        "sub.s      %[fTmp3],       %[val27],       %[val26]                \n\t"
747cabdff1aSopenharmony_ci        "add.s      %[val26],       %[val27],       %[val26]                \n\t"
748cabdff1aSopenharmony_ci        "sub.s      %[fTmp4],       %[val28],       %[val29]                \n\t"
749cabdff1aSopenharmony_ci        "mul.s      %[val25],       %[f1],          %[fTmp2]                \n\t"
750cabdff1aSopenharmony_ci        "add.s      %[val28],       %[val28],       %[val29]                \n\t"
751cabdff1aSopenharmony_ci        "mul.s      %[val27],       %[f1],          %[fTmp3]                \n\t"
752cabdff1aSopenharmony_ci        "sub.s      %[fTmp2],       %[val31],       %[val30]                \n\t"
753cabdff1aSopenharmony_ci        "mul.s      %[val29],       %[f1],          %[fTmp4]                \n\t"
754cabdff1aSopenharmony_ci        "add.s      %[val30],       %[val31],       %[val30]                \n\t"
755cabdff1aSopenharmony_ci        "add.s      %[val26],       %[val26],       %[val27]                \n\t"
756cabdff1aSopenharmony_ci        "mul.s      %[val31],       %[f1],          %[fTmp2]                \n\t"
757cabdff1aSopenharmony_ci        "add.s      %[val30],       %[val30],       %[val31]                \n\t"
758cabdff1aSopenharmony_ci        "add.s      %[val28],       %[val28],       %[val30]                \n\t"
759cabdff1aSopenharmony_ci        "add.s      %[val30],       %[val30],       %[val29]                \n\t"
760cabdff1aSopenharmony_ci        "add.s      %[val29],       %[val29],       %[val31]                \n\t"
761cabdff1aSopenharmony_ci        "add.s      %[val24],       %[val24],       %[val28]                \n\t"
762cabdff1aSopenharmony_ci        "add.s      %[val28],       %[val28],       %[val26]                \n\t"
763cabdff1aSopenharmony_ci        "add.s      %[val26],       %[val26],       %[val30]                \n\t"
764cabdff1aSopenharmony_ci        "add.s      %[val30],       %[val30],       %[val25]                \n\t"
765cabdff1aSopenharmony_ci        "add.s      %[val25],       %[val25],       %[val29]                \n\t"
766cabdff1aSopenharmony_ci        "add.s      %[val29],       %[val29],       %[val27]                \n\t"
767cabdff1aSopenharmony_ci        "add.s      %[val27],       %[val27],       %[val31]                \n\t"
768cabdff1aSopenharmony_ci
769cabdff1aSopenharmony_ci        : [fTmp2] "=&f" (fTmp2), [fTmp3] "=&f" (fTmp3), [fTmp4] "=&f" (fTmp4),
770cabdff1aSopenharmony_ci          [val24] "+&f" (val24), [val25] "+&f" (val25), [val26] "+&f" (val26),
771cabdff1aSopenharmony_ci          [val27] "+&f" (val27), [val28] "+&f" (val28), [val29] "+&f" (val29),
772cabdff1aSopenharmony_ci          [val30] "+&f" (val30), [val31] "+&f" (val31)
773cabdff1aSopenharmony_ci        : [f1] "f" (f1)
774cabdff1aSopenharmony_ci    );
775cabdff1aSopenharmony_ci
776cabdff1aSopenharmony_ci    out[ 1] = val16 + val24;
777cabdff1aSopenharmony_ci    out[17] = val17 + val25;
778cabdff1aSopenharmony_ci    out[ 9] = val18 + val26;
779cabdff1aSopenharmony_ci    out[25] = val19 + val27;
780cabdff1aSopenharmony_ci    out[ 5] = val20 + val28;
781cabdff1aSopenharmony_ci    out[21] = val21 + val29;
782cabdff1aSopenharmony_ci    out[13] = val22 + val30;
783cabdff1aSopenharmony_ci    out[29] = val23 + val31;
784cabdff1aSopenharmony_ci    out[ 3] = val24 + val20;
785cabdff1aSopenharmony_ci    out[19] = val25 + val21;
786cabdff1aSopenharmony_ci    out[11] = val26 + val22;
787cabdff1aSopenharmony_ci    out[27] = val27 + val23;
788cabdff1aSopenharmony_ci    out[ 7] = val28 + val18;
789cabdff1aSopenharmony_ci    out[23] = val29 + val19;
790cabdff1aSopenharmony_ci    out[15] = val30 + val17;
791cabdff1aSopenharmony_ci    out[31] = val31;
792cabdff1aSopenharmony_ci}
793cabdff1aSopenharmony_ci
794cabdff1aSopenharmony_cistatic void imdct36_mips_float(float *out, float *buf, float *in, float *win)
795cabdff1aSopenharmony_ci{
796cabdff1aSopenharmony_ci    float t0, t1, t2, t3, s0, s1, s2, s3;
797cabdff1aSopenharmony_ci    float tmp[18];
798cabdff1aSopenharmony_ci    /* temporary variables */
799cabdff1aSopenharmony_ci    float in1, in2, in3, in4, in5, in6;
800cabdff1aSopenharmony_ci    float out1, out2, out3, out4, out5;
801cabdff1aSopenharmony_ci    float f1, f2, f3, f4, f5, f6, f7, f8, f9;
802cabdff1aSopenharmony_ci
803cabdff1aSopenharmony_ci    /**
804cabdff1aSopenharmony_ci    * all loops are unrolled totally, and instructions are scheduled to
805cabdff1aSopenharmony_ci    * minimize pipeline stall. instructions of the first two loops are
806cabdff1aSopenharmony_ci    * reorganized, in order to eliminate unnecessary readings and
807cabdff1aSopenharmony_ci    * writings into array. values defined in macros and tables are
808cabdff1aSopenharmony_ci    * eliminated - they are directly loaded in appropriate variables
809cabdff1aSopenharmony_ci    */
810cabdff1aSopenharmony_ci
811cabdff1aSopenharmony_ci    /* loop 1 and 2 */
812cabdff1aSopenharmony_ci    __asm__ volatile (
813cabdff1aSopenharmony_ci        "lwc1   %[in1],  17*4(%[in])                                    \t\n"
814cabdff1aSopenharmony_ci        "lwc1   %[in2],  16*4(%[in])                                    \t\n"
815cabdff1aSopenharmony_ci        "lwc1   %[in3],  15*4(%[in])                                    \t\n"
816cabdff1aSopenharmony_ci        "lwc1   %[in4],  14*4(%[in])                                    \t\n"
817cabdff1aSopenharmony_ci        "lwc1   %[in5],  13*4(%[in])                                    \t\n"
818cabdff1aSopenharmony_ci        "lwc1   %[in6],  12*4(%[in])                                    \t\n"
819cabdff1aSopenharmony_ci        "add.s  %[out1], %[in1],  %[in2]                                \t\n"
820cabdff1aSopenharmony_ci        "add.s  %[out2], %[in2],  %[in3]                                \t\n"
821cabdff1aSopenharmony_ci        "add.s  %[out3], %[in3],  %[in4]                                \t\n"
822cabdff1aSopenharmony_ci        "add.s  %[out4], %[in4],  %[in5]                                \t\n"
823cabdff1aSopenharmony_ci        "add.s  %[out5], %[in5],  %[in6]                                \t\n"
824cabdff1aSopenharmony_ci        "lwc1   %[in1],  11*4(%[in])                                    \t\n"
825cabdff1aSopenharmony_ci        "swc1   %[out2], 16*4(%[in])                                    \t\n"
826cabdff1aSopenharmony_ci        "add.s  %[out1], %[out1], %[out3]                               \t\n"
827cabdff1aSopenharmony_ci        "swc1   %[out4], 14*4(%[in])                                    \t\n"
828cabdff1aSopenharmony_ci        "add.s  %[out3], %[out3], %[out5]                               \t\n"
829cabdff1aSopenharmony_ci        "lwc1   %[in2],  10*4(%[in])                                    \t\n"
830cabdff1aSopenharmony_ci        "lwc1   %[in3],  9*4(%[in])                                     \t\n"
831cabdff1aSopenharmony_ci        "swc1   %[out1], 17*4(%[in])                                    \t\n"
832cabdff1aSopenharmony_ci        "lwc1   %[in4],  8*4(%[in])                                     \t\n"
833cabdff1aSopenharmony_ci        "swc1   %[out3], 15*4(%[in])                                    \t\n"
834cabdff1aSopenharmony_ci        "add.s  %[out1], %[in6],  %[in1]                                \t\n"
835cabdff1aSopenharmony_ci        "add.s  %[out2], %[in1],  %[in2]                                \t\n"
836cabdff1aSopenharmony_ci        "add.s  %[out3], %[in2],  %[in3]                                \t\n"
837cabdff1aSopenharmony_ci        "add.s  %[out4], %[in3],  %[in4]                                \t\n"
838cabdff1aSopenharmony_ci        "lwc1   %[in5],  7*4(%[in])                                     \t\n"
839cabdff1aSopenharmony_ci        "swc1   %[out1], 12*4(%[in])                                    \t\n"
840cabdff1aSopenharmony_ci        "add.s  %[out5], %[out5], %[out2]                               \t\n"
841cabdff1aSopenharmony_ci        "swc1   %[out3], 10*4(%[in])                                    \t\n"
842cabdff1aSopenharmony_ci        "add.s  %[out2], %[out2], %[out4]                               \t\n"
843cabdff1aSopenharmony_ci        "lwc1   %[in6],  6*4(%[in])                                     \t\n"
844cabdff1aSopenharmony_ci        "lwc1   %[in1],  5*4(%[in])                                     \t\n"
845cabdff1aSopenharmony_ci        "swc1   %[out5], 13*4(%[in])                                    \t\n"
846cabdff1aSopenharmony_ci        "lwc1   %[in2],  4*4(%[in])                                     \t\n"
847cabdff1aSopenharmony_ci        "swc1   %[out2], 11*4(%[in])                                    \t\n"
848cabdff1aSopenharmony_ci        "add.s  %[out5], %[in4],  %[in5]                                \t\n"
849cabdff1aSopenharmony_ci        "add.s  %[out1], %[in5],  %[in6]                                \t\n"
850cabdff1aSopenharmony_ci        "add.s  %[out2], %[in6],  %[in1]                                \t\n"
851cabdff1aSopenharmony_ci        "add.s  %[out3], %[in1],  %[in2]                                \t\n"
852cabdff1aSopenharmony_ci        "lwc1   %[in3],  3*4(%[in])                                     \t\n"
853cabdff1aSopenharmony_ci        "swc1   %[out5], 8*4(%[in])                                     \t\n"
854cabdff1aSopenharmony_ci        "add.s  %[out4], %[out4], %[out1]                               \t\n"
855cabdff1aSopenharmony_ci        "swc1   %[out2], 6*4(%[in])                                     \t\n"
856cabdff1aSopenharmony_ci        "add.s  %[out1], %[out1], %[out3]                               \t\n"
857cabdff1aSopenharmony_ci        "lwc1   %[in4],  2*4(%[in])                                     \t\n"
858cabdff1aSopenharmony_ci        "lwc1   %[in5],  1*4(%[in])                                     \t\n"
859cabdff1aSopenharmony_ci        "swc1   %[out4], 9*4(%[in])                                     \t\n"
860cabdff1aSopenharmony_ci        "lwc1   %[in6],  0(%[in])                                       \t\n"
861cabdff1aSopenharmony_ci        "swc1   %[out1], 7*4(%[in])                                     \t\n"
862cabdff1aSopenharmony_ci        "add.s  %[out4], %[in2],  %[in3]                                \t\n"
863cabdff1aSopenharmony_ci        "add.s  %[out5], %[in3],  %[in4]                                \t\n"
864cabdff1aSopenharmony_ci        "add.s  %[out1], %[in4],  %[in5]                                \t\n"
865cabdff1aSopenharmony_ci        "add.s  %[out2], %[in5],  %[in6]                                \t\n"
866cabdff1aSopenharmony_ci        "swc1   %[out4], 4*4(%[in])                                     \t\n"
867cabdff1aSopenharmony_ci        "add.s  %[out3], %[out3], %[out5]                               \t\n"
868cabdff1aSopenharmony_ci        "swc1   %[out1], 2*4(%[in])                                     \t\n"
869cabdff1aSopenharmony_ci        "add.s  %[out5], %[out5], %[out2]                               \t\n"
870cabdff1aSopenharmony_ci        "swc1   %[out2], 1*4(%[in])                                     \t\n"
871cabdff1aSopenharmony_ci        "swc1   %[out3], 5*4(%[in])                                     \t\n"
872cabdff1aSopenharmony_ci        "swc1   %[out5], 3*4(%[in])                                     \t\n"
873cabdff1aSopenharmony_ci
874cabdff1aSopenharmony_ci        : [in1] "=&f" (in1), [in2] "=&f" (in2),
875cabdff1aSopenharmony_ci          [in3] "=&f" (in3), [in4] "=&f" (in4),
876cabdff1aSopenharmony_ci          [in5] "=&f" (in5), [in6] "=&f" (in6),
877cabdff1aSopenharmony_ci          [out1] "=&f" (out1), [out2] "=&f" (out2),
878cabdff1aSopenharmony_ci          [out3] "=&f" (out3), [out4] "=&f" (out4),
879cabdff1aSopenharmony_ci          [out5] "=&f" (out5)
880cabdff1aSopenharmony_ci        : [in] "r" (in)
881cabdff1aSopenharmony_ci        : "memory"
882cabdff1aSopenharmony_ci    );
883cabdff1aSopenharmony_ci
884cabdff1aSopenharmony_ci    /* loop 3 */
885cabdff1aSopenharmony_ci    f1 = 0.5;
886cabdff1aSopenharmony_ci    f2 = 0.93969262078590838405;
887cabdff1aSopenharmony_ci    f3 = -0.76604444311897803520;
888cabdff1aSopenharmony_ci    f4 = -0.17364817766693034885;
889cabdff1aSopenharmony_ci    f5 = -0.86602540378443864676;
890cabdff1aSopenharmony_ci    f6 = 0.98480775301220805936;
891cabdff1aSopenharmony_ci    f7 = -0.34202014332566873304;
892cabdff1aSopenharmony_ci    f8 = 0.86602540378443864676;
893cabdff1aSopenharmony_ci    f9 = -0.64278760968653932632;
894cabdff1aSopenharmony_ci    __asm__ volatile (
895cabdff1aSopenharmony_ci        "lwc1    %[in1],  8*4(%[in])                                    \t\n"
896cabdff1aSopenharmony_ci        "lwc1    %[in2],  16*4(%[in])                                   \t\n"
897cabdff1aSopenharmony_ci        "lwc1    %[in3],  4*4(%[in])                                    \t\n"
898cabdff1aSopenharmony_ci        "lwc1    %[in4],  0(%[in])                                      \t\n"
899cabdff1aSopenharmony_ci        "lwc1    %[in5],  12*4(%[in])                                   \t\n"
900cabdff1aSopenharmony_ci        "add.s   %[t2],   %[in1],  %[in2]                               \t\n"
901cabdff1aSopenharmony_ci        "add.s   %[t0],   %[in1],  %[in3]                               \t\n"
902cabdff1aSopenharmony_ci        "madd.s  %[t3],   %[in4],  %[in5], %[f1]                        \t\n"
903cabdff1aSopenharmony_ci        "sub.s   %[t1],   %[in4],  %[in5]                               \t\n"
904cabdff1aSopenharmony_ci        "sub.s   %[t2],   %[t2],   %[in3]                               \t\n"
905cabdff1aSopenharmony_ci        "mul.s   %[t0],   %[t0],   %[f2]                                \t\n"
906cabdff1aSopenharmony_ci        "nmsub.s %[out1], %[t1],   %[t2],  %[f1]                        \t\n"
907cabdff1aSopenharmony_ci        "add.s   %[out2], %[t1],   %[t2]                                \t\n"
908cabdff1aSopenharmony_ci        "add.s   %[t2],   %[in2],  %[in3]                               \t\n"
909cabdff1aSopenharmony_ci        "sub.s   %[t1],   %[in1],  %[in2]                               \t\n"
910cabdff1aSopenharmony_ci        "sub.s   %[out3], %[t3],   %[t0]                                \t\n"
911cabdff1aSopenharmony_ci        "swc1    %[out1], 6*4(%[tmp])                                   \t\n"
912cabdff1aSopenharmony_ci        "swc1    %[out2], 16*4(%[tmp])                                  \t\n"
913cabdff1aSopenharmony_ci        "mul.s   %[t2],   %[t2],   %[f3]                                \t\n"
914cabdff1aSopenharmony_ci        "mul.s   %[t1],   %[t1],   %[f4]                                \t\n"
915cabdff1aSopenharmony_ci        "add.s   %[out1], %[t3],   %[t0]                                \t\n"
916cabdff1aSopenharmony_ci        "lwc1    %[in1],  10*4(%[in])                                   \t\n"
917cabdff1aSopenharmony_ci        "lwc1    %[in2],  14*4(%[in])                                   \t\n"
918cabdff1aSopenharmony_ci        "sub.s   %[out3], %[out3], %[t2]                                \t\n"
919cabdff1aSopenharmony_ci        "add.s   %[out2], %[t3],   %[t2]                                \t\n"
920cabdff1aSopenharmony_ci        "add.s   %[out1], %[out1], %[t1]                                \t\n"
921cabdff1aSopenharmony_ci        "lwc1    %[in3],  2*4(%[in])                                    \t\n"
922cabdff1aSopenharmony_ci        "lwc1    %[in4],  6*4(%[in])                                    \t\n"
923cabdff1aSopenharmony_ci        "swc1    %[out3], 10*4(%[tmp])                                  \t\n"
924cabdff1aSopenharmony_ci        "sub.s   %[out2], %[out2], %[t1]                                \t\n"
925cabdff1aSopenharmony_ci        "swc1    %[out1], 2*4(%[tmp])                                   \t\n"
926cabdff1aSopenharmony_ci        "add.s   %[out1], %[in1],  %[in2]                               \t\n"
927cabdff1aSopenharmony_ci        "add.s   %[t2],   %[in1],  %[in3]                               \t\n"
928cabdff1aSopenharmony_ci        "sub.s   %[t3],   %[in1],  %[in2]                               \t\n"
929cabdff1aSopenharmony_ci        "swc1    %[out2], 14*4(%[tmp])                                  \t\n"
930cabdff1aSopenharmony_ci        "sub.s   %[out1], %[out1], %[in3]                               \t\n"
931cabdff1aSopenharmony_ci        "mul.s   %[t2],   %[t2],   %[f6]                                \t\n"
932cabdff1aSopenharmony_ci        "mul.s   %[t3],   %[t3],   %[f7]                                \t\n"
933cabdff1aSopenharmony_ci        "mul.s   %[t0],   %[in4],  %[f8]                                \t\n"
934cabdff1aSopenharmony_ci        "mul.s   %[out1], %[out1], %[f5]                                \t\n"
935cabdff1aSopenharmony_ci        "add.s   %[t1],   %[in2],  %[in3]                               \t\n"
936cabdff1aSopenharmony_ci        "add.s   %[out2], %[t2],   %[t3]                                \t\n"
937cabdff1aSopenharmony_ci        "lwc1    %[in1],  9*4(%[in])                                    \t\n"
938cabdff1aSopenharmony_ci        "swc1    %[out1], 4*4(%[tmp])                                   \t\n"
939cabdff1aSopenharmony_ci        "mul.s   %[t1],   %[t1],   %[f9]                                \t\n"
940cabdff1aSopenharmony_ci        "lwc1    %[in2],  17*4(%[in])                                   \t\n"
941cabdff1aSopenharmony_ci        "add.s   %[out2], %[out2], %[t0]                                \t\n"
942cabdff1aSopenharmony_ci        "lwc1    %[in3],  5*4(%[in])                                    \t\n"
943cabdff1aSopenharmony_ci        "lwc1    %[in4],  1*4(%[in])                                    \t\n"
944cabdff1aSopenharmony_ci        "add.s   %[out3], %[t2],   %[t1]                                \t\n"
945cabdff1aSopenharmony_ci        "sub.s   %[out1], %[t3],   %[t1]                                \t\n"
946cabdff1aSopenharmony_ci        "swc1    %[out2], 0(%[tmp])                                     \t\n"
947cabdff1aSopenharmony_ci        "lwc1    %[in5],  13*4(%[in])                                   \t\n"
948cabdff1aSopenharmony_ci        "add.s   %[t2],   %[in1],  %[in2]                               \t\n"
949cabdff1aSopenharmony_ci        "sub.s   %[out3], %[out3], %[t0]                                \t\n"
950cabdff1aSopenharmony_ci        "sub.s   %[out1], %[out1], %[t0]                                \t\n"
951cabdff1aSopenharmony_ci        "add.s   %[t0],   %[in1],  %[in3]                               \t\n"
952cabdff1aSopenharmony_ci        "madd.s  %[t3],   %[in4],  %[in5], %[f1]                        \t\n"
953cabdff1aSopenharmony_ci        "sub.s   %[t2],   %[t2],   %[in3]                               \t\n"
954cabdff1aSopenharmony_ci        "swc1    %[out3], 12*4(%[tmp])                                  \t\n"
955cabdff1aSopenharmony_ci        "swc1    %[out1], 8*4(%[tmp])                                   \t\n"
956cabdff1aSopenharmony_ci        "sub.s   %[t1],   %[in4],  %[in5]                               \t\n"
957cabdff1aSopenharmony_ci        "mul.s   %[t0],   %[t0],   %[f2]                                \t\n"
958cabdff1aSopenharmony_ci        "nmsub.s %[out1], %[t1],   %[t2],  %[f1]                        \t\n"
959cabdff1aSopenharmony_ci        "add.s   %[out2], %[t1],   %[t2]                                \t\n"
960cabdff1aSopenharmony_ci        "add.s   %[t2],   %[in2],  %[in3]                               \t\n"
961cabdff1aSopenharmony_ci        "sub.s   %[t1],   %[in1],  %[in2]                               \t\n"
962cabdff1aSopenharmony_ci        "sub.s   %[out3], %[t3],   %[t0]                                \t\n"
963cabdff1aSopenharmony_ci        "swc1    %[out1], 7*4(%[tmp])                                   \t\n"
964cabdff1aSopenharmony_ci        "swc1    %[out2], 17*4(%[tmp])                                  \t\n"
965cabdff1aSopenharmony_ci        "mul.s   %[t2],   %[t2],   %[f3]                                \t\n"
966cabdff1aSopenharmony_ci        "mul.s   %[t1],   %[t1],   %[f4]                                \t\n"
967cabdff1aSopenharmony_ci        "add.s   %[out1], %[t3],   %[t0]                                \t\n"
968cabdff1aSopenharmony_ci        "lwc1    %[in1],  11*4(%[in])                                   \t\n"
969cabdff1aSopenharmony_ci        "lwc1    %[in2],  15*4(%[in])                                   \t\n"
970cabdff1aSopenharmony_ci        "sub.s   %[out3], %[out3], %[t2]                                \t\n"
971cabdff1aSopenharmony_ci        "add.s   %[out2], %[t3],   %[t2]                                \t\n"
972cabdff1aSopenharmony_ci        "add.s   %[out1], %[out1], %[t1]                                \t\n"
973cabdff1aSopenharmony_ci        "lwc1    %[in3],  3*4(%[in])                                    \t\n"
974cabdff1aSopenharmony_ci        "lwc1    %[in4],  7*4(%[in])                                    \t\n"
975cabdff1aSopenharmony_ci        "swc1    %[out3], 11*4(%[tmp])                                  \t\n"
976cabdff1aSopenharmony_ci        "sub.s   %[out2], %[out2], %[t1]                                \t\n"
977cabdff1aSopenharmony_ci        "swc1    %[out1], 3*4(%[tmp])                                   \t\n"
978cabdff1aSopenharmony_ci        "add.s   %[out3], %[in1],  %[in2]                               \t\n"
979cabdff1aSopenharmony_ci        "add.s   %[t2],   %[in1],  %[in3]                               \t\n"
980cabdff1aSopenharmony_ci        "sub.s   %[t3],   %[in1],  %[in2]                               \t\n"
981cabdff1aSopenharmony_ci        "swc1    %[out2], 15*4(%[tmp])                                  \t\n"
982cabdff1aSopenharmony_ci        "mul.s   %[t0],   %[in4],  %[f8]                                \t\n"
983cabdff1aSopenharmony_ci        "sub.s   %[out3], %[out3], %[in3]                               \t\n"
984cabdff1aSopenharmony_ci        "mul.s   %[t2],   %[t2],   %[f6]                                \t\n"
985cabdff1aSopenharmony_ci        "mul.s   %[t3],   %[t3],   %[f7]                                \t\n"
986cabdff1aSopenharmony_ci        "add.s   %[t1],   %[in2],  %[in3]                               \t\n"
987cabdff1aSopenharmony_ci        "mul.s   %[out3], %[out3], %[f5]                                \t\n"
988cabdff1aSopenharmony_ci        "add.s   %[out1], %[t2],   %[t3]                                \t\n"
989cabdff1aSopenharmony_ci        "mul.s   %[t1],   %[t1],   %[f9]                                \t\n"
990cabdff1aSopenharmony_ci        "swc1    %[out3], 5*4(%[tmp])                                   \t\n"
991cabdff1aSopenharmony_ci        "add.s   %[out1], %[out1], %[t0]                                \t\n"
992cabdff1aSopenharmony_ci        "add.s   %[out2], %[t2],   %[t1]                                \t\n"
993cabdff1aSopenharmony_ci        "sub.s   %[out3], %[t3],   %[t1]                                \t\n"
994cabdff1aSopenharmony_ci        "swc1    %[out1], 1*4(%[tmp])                                   \t\n"
995cabdff1aSopenharmony_ci        "sub.s   %[out2], %[out2], %[t0]                                \t\n"
996cabdff1aSopenharmony_ci        "sub.s   %[out3], %[out3], %[t0]                                \t\n"
997cabdff1aSopenharmony_ci        "swc1    %[out2], 13*4(%[tmp])                                  \t\n"
998cabdff1aSopenharmony_ci        "swc1    %[out3], 9*4(%[tmp])                                   \t\n"
999cabdff1aSopenharmony_ci
1000cabdff1aSopenharmony_ci        : [t0] "=&f" (t0), [t1] "=&f" (t1),
1001cabdff1aSopenharmony_ci          [t2] "=&f" (t2), [t3] "=&f" (t3),
1002cabdff1aSopenharmony_ci          [in1] "=&f" (in1), [in2] "=&f" (in2),
1003cabdff1aSopenharmony_ci          [in3] "=&f" (in3), [in4] "=&f" (in4),
1004cabdff1aSopenharmony_ci          [in5] "=&f" (in5), [out1] "=&f" (out1),
1005cabdff1aSopenharmony_ci          [out2] "=&f" (out2), [out3] "=&f" (out3)
1006cabdff1aSopenharmony_ci        : [in] "r" (in), [tmp] "r" (tmp), [f1]"f"(f1), [f2]"f"(f2),
1007cabdff1aSopenharmony_ci          [f3]"f"(f3), [f4]"f"(f4), [f5]"f"(f5), [f6]"f"(f6),
1008cabdff1aSopenharmony_ci          [f7]"f"(f7), [f8]"f"(f8), [f9]"f"(f9)
1009cabdff1aSopenharmony_ci        : "memory"
1010cabdff1aSopenharmony_ci    );
1011cabdff1aSopenharmony_ci
1012cabdff1aSopenharmony_ci    /* loop 4 */
1013cabdff1aSopenharmony_ci    f1 = 0.50190991877167369479;
1014cabdff1aSopenharmony_ci    f2 = 5.73685662283492756461;
1015cabdff1aSopenharmony_ci    f3 = 0.51763809020504152469;
1016cabdff1aSopenharmony_ci    f4 = 1.93185165257813657349;
1017cabdff1aSopenharmony_ci    f5 = 0.55168895948124587824;
1018cabdff1aSopenharmony_ci    f6 = 1.18310079157624925896;
1019cabdff1aSopenharmony_ci    f7 = 0.61038729438072803416;
1020cabdff1aSopenharmony_ci    f8 = 0.87172339781054900991;
1021cabdff1aSopenharmony_ci    f9 = 0.70710678118654752439;
1022cabdff1aSopenharmony_ci    __asm__ volatile (
1023cabdff1aSopenharmony_ci        "lwc1   %[in1],  2*4(%[tmp])                                    \t\n"
1024cabdff1aSopenharmony_ci        "lwc1   %[in2],  0(%[tmp])                                      \t\n"
1025cabdff1aSopenharmony_ci        "lwc1   %[in3],  3*4(%[tmp])                                    \t\n"
1026cabdff1aSopenharmony_ci        "lwc1   %[in4],  1*4(%[tmp])                                    \t\n"
1027cabdff1aSopenharmony_ci        "add.s  %[s0],   %[in1], %[in2]                                 \t\n"
1028cabdff1aSopenharmony_ci        "sub.s  %[s2],   %[in1], %[in2]                                 \t\n"
1029cabdff1aSopenharmony_ci        "add.s  %[s1],   %[in3], %[in4]                                 \t\n"
1030cabdff1aSopenharmony_ci        "sub.s  %[s3],   %[in3], %[in4]                                 \t\n"
1031cabdff1aSopenharmony_ci        "lwc1   %[in1],  9*4(%[win])                                    \t\n"
1032cabdff1aSopenharmony_ci        "lwc1   %[in2],  4*9*4(%[buf])                                  \t\n"
1033cabdff1aSopenharmony_ci        "lwc1   %[in3],  8*4(%[win])                                    \t\n"
1034cabdff1aSopenharmony_ci        "mul.s  %[s1],   %[s1],  %[f1]                                  \t\n"
1035cabdff1aSopenharmony_ci        "mul.s  %[s3],   %[s3],  %[f2]                                  \t\n"
1036cabdff1aSopenharmony_ci        "lwc1   %[in4],  4*8*4(%[buf])                                  \t\n"
1037cabdff1aSopenharmony_ci        "lwc1   %[in5],  29*4(%[win])                                   \t\n"
1038cabdff1aSopenharmony_ci        "lwc1   %[in6],  28*4(%[win])                                   \t\n"
1039cabdff1aSopenharmony_ci        "add.s  %[t0],   %[s0],  %[s1]                                  \t\n"
1040cabdff1aSopenharmony_ci        "sub.s  %[t1],   %[s0],  %[s1]                                  \t\n"
1041cabdff1aSopenharmony_ci        "mul.s  %[out3], %[in5], %[t0]                                  \t\n"
1042cabdff1aSopenharmony_ci        "madd.s %[out1], %[in2], %[in1], %[t1]                          \t\n"
1043cabdff1aSopenharmony_ci        "madd.s %[out2], %[in4], %[in3], %[t1]                          \t\n"
1044cabdff1aSopenharmony_ci        "mul.s  %[out4], %[in6], %[t0]                                  \t\n"
1045cabdff1aSopenharmony_ci        "add.s  %[t0],   %[s2],  %[s3]                                  \t\n"
1046cabdff1aSopenharmony_ci        "swc1   %[out3], 4*9*4(%[buf])                                  \t\n"
1047cabdff1aSopenharmony_ci        "swc1   %[out1], 288*4(%[out])                                  \t\n"
1048cabdff1aSopenharmony_ci        "swc1   %[out2], 256*4(%[out])                                  \t\n"
1049cabdff1aSopenharmony_ci        "swc1   %[out4], 4*8*4(%[buf])                                  \t\n"
1050cabdff1aSopenharmony_ci        "sub.s  %[t1],   %[s2],  %[s3]                                  \t\n"
1051cabdff1aSopenharmony_ci        "lwc1   %[in1],  17*4(%[win])                                   \t\n"
1052cabdff1aSopenharmony_ci        "lwc1   %[in2],  4*17*4(%[buf])                                 \t\n"
1053cabdff1aSopenharmony_ci        "lwc1   %[in3],  0(%[win])                                      \t\n"
1054cabdff1aSopenharmony_ci        "lwc1   %[in4],  0(%[buf])                                      \t\n"
1055cabdff1aSopenharmony_ci        "lwc1   %[in5],  37*4(%[win])                                   \t\n"
1056cabdff1aSopenharmony_ci        "lwc1   %[in6],  20*4(%[win])                                   \t\n"
1057cabdff1aSopenharmony_ci        "madd.s %[out1], %[in2], %[in1], %[t1]                          \t\n"
1058cabdff1aSopenharmony_ci        "lwc1   %[in1],  6*4(%[tmp])                                    \t\n"
1059cabdff1aSopenharmony_ci        "madd.s %[out2], %[in4], %[in3], %[t1]                          \t\n"
1060cabdff1aSopenharmony_ci        "mul.s  %[out3], %[t0],  %[in5]                                 \t\n"
1061cabdff1aSopenharmony_ci        "mul.s  %[out4], %[t0],  %[in6]                                 \t\n"
1062cabdff1aSopenharmony_ci        "swc1   %[out1], 544*4(%[out])                                  \t\n"
1063cabdff1aSopenharmony_ci        "lwc1   %[in2],  4*4(%[tmp])                                    \t\n"
1064cabdff1aSopenharmony_ci        "swc1   %[out2], 0(%[out])                                      \t\n"
1065cabdff1aSopenharmony_ci        "swc1   %[out3], 4*17*4(%[buf])                                 \t\n"
1066cabdff1aSopenharmony_ci        "swc1   %[out4], 0(%[buf])                                      \t\n"
1067cabdff1aSopenharmony_ci        "lwc1   %[in3],  7*4(%[tmp])                                    \t\n"
1068cabdff1aSopenharmony_ci        "add.s  %[s0],   %[in1], %[in2]                                 \t\n"
1069cabdff1aSopenharmony_ci        "sub.s  %[s2],   %[in1], %[in2]                                 \t\n"
1070cabdff1aSopenharmony_ci        "lwc1   %[in4],  5*4(%[tmp])                                    \t\n"
1071cabdff1aSopenharmony_ci        "add.s  %[s1],   %[in3], %[in4]                                 \t\n"
1072cabdff1aSopenharmony_ci        "sub.s  %[s3],   %[in3], %[in4]                                 \t\n"
1073cabdff1aSopenharmony_ci        "lwc1   %[in1],  10*4(%[win])                                   \t\n"
1074cabdff1aSopenharmony_ci        "lwc1   %[in2],  4*10*4(%[buf])                                 \t\n"
1075cabdff1aSopenharmony_ci        "lwc1   %[in3],  7*4(%[win])                                    \t\n"
1076cabdff1aSopenharmony_ci        "mul.s  %[s1],   %[s1],  %[f3]                                  \t\n"
1077cabdff1aSopenharmony_ci        "mul.s  %[s3],   %[s3],  %[f4]                                  \t\n"
1078cabdff1aSopenharmony_ci        "add.s  %[t0],   %[s0],  %[s1]                                  \t\n"
1079cabdff1aSopenharmony_ci        "sub.s  %[t1],   %[s0],  %[s1]                                  \t\n"
1080cabdff1aSopenharmony_ci        "lwc1   %[in4],  4*7*4(%[buf])                                  \t\n"
1081cabdff1aSopenharmony_ci        "lwc1   %[in5],  30*4(%[win])                                   \t\n"
1082cabdff1aSopenharmony_ci        "lwc1   %[in6],  27*4(%[win])                                   \t\n"
1083cabdff1aSopenharmony_ci        "madd.s %[out1], %[in2], %[in1], %[t1]                          \t\n"
1084cabdff1aSopenharmony_ci        "madd.s %[out2], %[in4], %[in3], %[t1]                          \t\n"
1085cabdff1aSopenharmony_ci        "mul.s  %[out3], %[t0],  %[in5]                                 \t\n"
1086cabdff1aSopenharmony_ci        "mul.s  %[out4], %[t0],  %[in6]                                 \t\n"
1087cabdff1aSopenharmony_ci        "add.s  %[t0],   %[s2],  %[s3]                                  \t\n"
1088cabdff1aSopenharmony_ci        "swc1   %[out1], 320*4(%[out])                                  \t\n"
1089cabdff1aSopenharmony_ci        "swc1   %[out2], 224*4(%[out])                                  \t\n"
1090cabdff1aSopenharmony_ci        "swc1   %[out3], 4*10*4(%[buf])                                 \t\n"
1091cabdff1aSopenharmony_ci        "swc1   %[out4], 4*7*4(%[buf])                                  \t\n"
1092cabdff1aSopenharmony_ci        "sub.s  %[t1],   %[s2],  %[s3]                                  \t\n"
1093cabdff1aSopenharmony_ci        "lwc1   %[in1],  16*4(%[win])                                   \t\n"
1094cabdff1aSopenharmony_ci        "lwc1   %[in2],  4*16*4(%[buf])                                 \t\n"
1095cabdff1aSopenharmony_ci        "lwc1   %[in3],  1*4(%[win])                                    \t\n"
1096cabdff1aSopenharmony_ci        "lwc1   %[in4],  4*1*4(%[buf])                                  \t\n"
1097cabdff1aSopenharmony_ci        "lwc1   %[in5],  36*4(%[win])                                   \t\n"
1098cabdff1aSopenharmony_ci        "lwc1   %[in6],  21*4(%[win])                                   \t\n"
1099cabdff1aSopenharmony_ci        "madd.s %[out1], %[in2], %[in1], %[t1]                          \t\n"
1100cabdff1aSopenharmony_ci        "lwc1   %[in1],  10*4(%[tmp])                                   \t\n"
1101cabdff1aSopenharmony_ci        "madd.s %[out2], %[in4], %[in3], %[t1]                          \t\n"
1102cabdff1aSopenharmony_ci        "mul.s  %[out3], %[in5], %[t0]                                  \t\n"
1103cabdff1aSopenharmony_ci        "mul.s  %[out4], %[in6], %[t0]                                  \t\n"
1104cabdff1aSopenharmony_ci        "swc1   %[out1], 512*4(%[out])                                  \t\n"
1105cabdff1aSopenharmony_ci        "lwc1   %[in2],  8*4(%[tmp])                                    \t\n"
1106cabdff1aSopenharmony_ci        "swc1   %[out2], 32*4(%[out])                                   \t\n"
1107cabdff1aSopenharmony_ci        "swc1   %[out3], 4*16*4(%[buf])                                 \t\n"
1108cabdff1aSopenharmony_ci        "swc1   %[out4], 4*1*4(%[buf])                                  \t\n"
1109cabdff1aSopenharmony_ci        "add.s  %[s0],   %[in1], %[in2]                                 \t\n"
1110cabdff1aSopenharmony_ci        "sub.s  %[s2],   %[in1], %[in2]                                 \t\n"
1111cabdff1aSopenharmony_ci        "lwc1   %[in3],  11*4(%[tmp])                                   \t\n"
1112cabdff1aSopenharmony_ci        "lwc1   %[in4],  9*4(%[tmp])                                    \t\n"
1113cabdff1aSopenharmony_ci        "add.s  %[s1],   %[in3], %[in4]                                 \t\n"
1114cabdff1aSopenharmony_ci        "sub.s  %[s3],   %[in3], %[in4]                                 \t\n"
1115cabdff1aSopenharmony_ci        "lwc1   %[in1],  11*4(%[win])                                   \t\n"
1116cabdff1aSopenharmony_ci        "lwc1   %[in2],  4*11*4(%[buf])                                 \t\n"
1117cabdff1aSopenharmony_ci        "lwc1   %[in3],  6*4(%[win])                                    \t\n"
1118cabdff1aSopenharmony_ci        "mul.s  %[s1],   %[s1],  %[f5]                                  \t\n"
1119cabdff1aSopenharmony_ci        "mul.s  %[s3],   %[s3],  %[f6]                                  \t\n"
1120cabdff1aSopenharmony_ci        "lwc1   %[in4],  4*6*4(%[buf])                                  \t\n"
1121cabdff1aSopenharmony_ci        "lwc1   %[in5],  31*4(%[win])                                   \t\n"
1122cabdff1aSopenharmony_ci        "lwc1   %[in6],  26*4(%[win])                                   \t\n"
1123cabdff1aSopenharmony_ci        "add.s  %[t0],   %[s0],  %[s1]                                  \t\n"
1124cabdff1aSopenharmony_ci        "sub.s  %[t1],   %[s0],  %[s1]                                  \t\n"
1125cabdff1aSopenharmony_ci        "mul.s  %[out3], %[t0],  %[in5]                                 \t\n"
1126cabdff1aSopenharmony_ci        "mul.s  %[out4], %[t0],  %[in6]                                 \t\n"
1127cabdff1aSopenharmony_ci        "add.s  %[t0],   %[s2],  %[s3]                                  \t\n"
1128cabdff1aSopenharmony_ci        "madd.s %[out1], %[in2], %[in1], %[t1]                          \t\n"
1129cabdff1aSopenharmony_ci        "madd.s %[out2], %[in4], %[in3], %[t1]                          \t\n"
1130cabdff1aSopenharmony_ci        "swc1   %[out3], 4*11*4(%[buf])                                 \t\n"
1131cabdff1aSopenharmony_ci        "swc1   %[out4], 4*6*4(%[buf])                                  \t\n"
1132cabdff1aSopenharmony_ci        "sub.s  %[t1],   %[s2],  %[s3]                                  \t\n"
1133cabdff1aSopenharmony_ci        "swc1   %[out1], 352*4(%[out])                                  \t\n"
1134cabdff1aSopenharmony_ci        "swc1   %[out2], 192*4(%[out])                                  \t\n"
1135cabdff1aSopenharmony_ci        "lwc1   %[in1],  15*4(%[win])                                   \t\n"
1136cabdff1aSopenharmony_ci        "lwc1   %[in2],  4*15*4(%[buf])                                 \t\n"
1137cabdff1aSopenharmony_ci        "lwc1   %[in3],  2*4(%[win])                                    \t\n"
1138cabdff1aSopenharmony_ci        "lwc1   %[in4],  4*2*4(%[buf])                                  \t\n"
1139cabdff1aSopenharmony_ci        "lwc1   %[in5],  35*4(%[win])                                   \t\n"
1140cabdff1aSopenharmony_ci        "lwc1   %[in6],  22*4(%[win])                                   \t\n"
1141cabdff1aSopenharmony_ci        "madd.s %[out1], %[in2], %[in1], %[t1]                          \t\n"
1142cabdff1aSopenharmony_ci        "lwc1   %[in1],  14*4(%[tmp])                                   \t\n"
1143cabdff1aSopenharmony_ci        "madd.s %[out2], %[in4], %[in3], %[t1]                          \t\n"
1144cabdff1aSopenharmony_ci        "mul.s  %[out3], %[t0],  %[in5]                                 \t\n"
1145cabdff1aSopenharmony_ci        "mul.s  %[out4], %[t0],  %[in6]                                 \t\n"
1146cabdff1aSopenharmony_ci        "swc1   %[out1], 480*4(%[out])                                  \t\n"
1147cabdff1aSopenharmony_ci        "lwc1   %[in2],  12*4(%[tmp])                                   \t\n"
1148cabdff1aSopenharmony_ci        "swc1   %[out2], 64*4(%[out])                                   \t\n"
1149cabdff1aSopenharmony_ci        "swc1   %[out3], 4*15*4(%[buf])                                 \t\n"
1150cabdff1aSopenharmony_ci        "swc1   %[out4], 4*2*4(%[buf])                                  \t\n"
1151cabdff1aSopenharmony_ci        "lwc1   %[in3],  15*4(%[tmp])                                   \t\n"
1152cabdff1aSopenharmony_ci        "add.s  %[s0],   %[in1], %[in2]                                 \t\n"
1153cabdff1aSopenharmony_ci        "sub.s  %[s2],   %[in1], %[in2]                                 \t\n"
1154cabdff1aSopenharmony_ci        "lwc1   %[in4],  13*4(%[tmp])                                   \t\n"
1155cabdff1aSopenharmony_ci        "add.s  %[s1],   %[in3], %[in4]                                 \t\n"
1156cabdff1aSopenharmony_ci        "sub.s  %[s3],   %[in3], %[in4]                                 \t\n"
1157cabdff1aSopenharmony_ci        "lwc1   %[in1],  12*4(%[win])                                   \t\n"
1158cabdff1aSopenharmony_ci        "lwc1   %[in2],  4*12*4(%[buf])                                 \t\n"
1159cabdff1aSopenharmony_ci        "lwc1   %[in3],  5*4(%[win])                                    \t\n"
1160cabdff1aSopenharmony_ci        "mul.s  %[s1],   %[s1],  %[f7]                                  \t\n"
1161cabdff1aSopenharmony_ci        "mul.s  %[s3],   %[s3],  %[f8]                                  \t\n"
1162cabdff1aSopenharmony_ci        "lwc1   %[in4],  4*5*4(%[buf])                                  \t\n"
1163cabdff1aSopenharmony_ci        "lwc1   %[in5],  32*4(%[win])                                   \t\n"
1164cabdff1aSopenharmony_ci        "lwc1   %[in6],  25*4(%[win])                                   \t\n"
1165cabdff1aSopenharmony_ci        "add.s  %[t0],   %[s0],  %[s1]                                  \t\n"
1166cabdff1aSopenharmony_ci        "sub.s  %[t1],   %[s0],  %[s1]                                  \t\n"
1167cabdff1aSopenharmony_ci        "lwc1   %[s0],   16*4(%[tmp])                                   \t\n"
1168cabdff1aSopenharmony_ci        "lwc1   %[s1],   17*4(%[tmp])                                   \t\n"
1169cabdff1aSopenharmony_ci        "mul.s  %[out3], %[t0],  %[in5]                                 \t\n"
1170cabdff1aSopenharmony_ci        "madd.s %[out1], %[in2], %[in1], %[t1]                          \t\n"
1171cabdff1aSopenharmony_ci        "madd.s %[out2], %[in4], %[in3], %[t1]                          \t\n"
1172cabdff1aSopenharmony_ci        "mul.s  %[out4], %[t0],  %[in6]                                 \t\n"
1173cabdff1aSopenharmony_ci        "add.s  %[t0],   %[s2],  %[s3]                                  \t\n"
1174cabdff1aSopenharmony_ci        "swc1   %[out3], 4*12*4(%[buf])                                 \t\n"
1175cabdff1aSopenharmony_ci        "swc1   %[out1], 384*4(%[out])                                  \t\n"
1176cabdff1aSopenharmony_ci        "swc1   %[out2], 160*4(%[out])                                  \t\n"
1177cabdff1aSopenharmony_ci        "swc1   %[out4], 4*5*4(%[buf])                                  \t\n"
1178cabdff1aSopenharmony_ci        "sub.s  %[t1],   %[s2],  %[s3]                                  \t\n"
1179cabdff1aSopenharmony_ci        "lwc1   %[in1],  14*4(%[win])                                   \t\n"
1180cabdff1aSopenharmony_ci        "lwc1   %[in2],  4*14*4(%[buf])                                 \t\n"
1181cabdff1aSopenharmony_ci        "lwc1   %[in3],  3*4(%[win])                                    \t\n"
1182cabdff1aSopenharmony_ci        "lwc1   %[in4],  4*3*4(%[buf])                                  \t\n"
1183cabdff1aSopenharmony_ci        "lwc1   %[in5],  34*4(%[win])                                   \t\n"
1184cabdff1aSopenharmony_ci        "lwc1   %[in6],  23*4(%[win])                                   \t\n"
1185cabdff1aSopenharmony_ci        "madd.s %[out1], %[in2], %[in1], %[t1]                          \t\n"
1186cabdff1aSopenharmony_ci        "mul.s  %[s1],   %[s1],  %[f9]                                  \t\n"
1187cabdff1aSopenharmony_ci        "madd.s %[out2], %[in4], %[in3], %[t1]                          \t\n"
1188cabdff1aSopenharmony_ci        "mul.s  %[out3], %[in5], %[t0]                                  \t\n"
1189cabdff1aSopenharmony_ci        "mul.s  %[out4], %[in6], %[t0]                                  \t\n"
1190cabdff1aSopenharmony_ci        "swc1   %[out1], 448*4(%[out])                                  \t\n"
1191cabdff1aSopenharmony_ci        "add.s  %[t0],   %[s0],  %[s1]                                  \t\n"
1192cabdff1aSopenharmony_ci        "swc1   %[out2], 96*4(%[out])                                   \t\n"
1193cabdff1aSopenharmony_ci        "swc1   %[out3], 4*14*4(%[buf])                                 \t\n"
1194cabdff1aSopenharmony_ci        "swc1   %[out4], 4*3*4(%[buf])                                  \t\n"
1195cabdff1aSopenharmony_ci        "sub.s  %[t1],   %[s0],  %[s1]                                  \t\n"
1196cabdff1aSopenharmony_ci        "lwc1   %[in1],  13*4(%[win])                                   \t\n"
1197cabdff1aSopenharmony_ci        "lwc1   %[in2],  4*13*4(%[buf])                                 \t\n"
1198cabdff1aSopenharmony_ci        "lwc1   %[in3],  4*4(%[win])                                    \t\n"
1199cabdff1aSopenharmony_ci        "lwc1   %[in4],  4*4*4(%[buf])                                  \t\n"
1200cabdff1aSopenharmony_ci        "lwc1   %[in5],  33*4(%[win])                                   \t\n"
1201cabdff1aSopenharmony_ci        "lwc1   %[in6],  24*4(%[win])                                   \t\n"
1202cabdff1aSopenharmony_ci        "madd.s %[out1], %[in2], %[in1], %[t1]                          \t\n"
1203cabdff1aSopenharmony_ci        "madd.s %[out2], %[in4], %[in3], %[t1]                          \t\n"
1204cabdff1aSopenharmony_ci        "mul.s  %[out3], %[t0],  %[in5]                                 \t\n"
1205cabdff1aSopenharmony_ci        "mul.s  %[out4], %[t0],  %[in6]                                 \t\n"
1206cabdff1aSopenharmony_ci        "swc1   %[out1], 416*4(%[out])                                  \t\n"
1207cabdff1aSopenharmony_ci        "swc1   %[out2], 128*4(%[out])                                  \t\n"
1208cabdff1aSopenharmony_ci        "swc1   %[out3], 4*13*4(%[buf])                                 \t\n"
1209cabdff1aSopenharmony_ci        "swc1   %[out4], 4*4*4(%[buf])                                  \t\n"
1210cabdff1aSopenharmony_ci
1211cabdff1aSopenharmony_ci        : [in1] "=&f" (in1), [in2] "=&f" (in2),
1212cabdff1aSopenharmony_ci          [in3] "=&f" (in3), [in4] "=&f" (in4),
1213cabdff1aSopenharmony_ci          [in5] "=&f" (in5), [in6] "=&f" (in6),
1214cabdff1aSopenharmony_ci          [out1] "=&f" (out1), [out2] "=&f" (out2),
1215cabdff1aSopenharmony_ci          [out3] "=&f" (out3), [out4] "=&f" (out4),
1216cabdff1aSopenharmony_ci          [t0] "=&f" (t0), [t1] "=&f" (t1),
1217cabdff1aSopenharmony_ci          [s0] "=&f" (s0), [s1] "=&f" (s1),
1218cabdff1aSopenharmony_ci          [s2] "=&f" (s2), [s3] "=&f" (s3)
1219cabdff1aSopenharmony_ci        : [tmp] "r" (tmp), [win] "r" (win),
1220cabdff1aSopenharmony_ci          [buf] "r" (buf), [out] "r" (out),
1221cabdff1aSopenharmony_ci          [f1]"f"(f1), [f2]"f"(f2), [f3]"f"(f3), [f4]"f"(f4),
1222cabdff1aSopenharmony_ci          [f5]"f"(f5), [f6]"f"(f6), [f7]"f"(f7), [f8]"f"(f8), [f9]"f"(f9)
1223cabdff1aSopenharmony_ci        : "memory"
1224cabdff1aSopenharmony_ci    );
1225cabdff1aSopenharmony_ci}
1226cabdff1aSopenharmony_ci
1227cabdff1aSopenharmony_cistatic void ff_imdct36_blocks_mips_float(float *out, float *buf, float *in,
1228cabdff1aSopenharmony_ci                               int count, int switch_point, int block_type)
1229cabdff1aSopenharmony_ci{
1230cabdff1aSopenharmony_ci    int j;
1231cabdff1aSopenharmony_ci    for (j=0 ; j < count; j++) {
1232cabdff1aSopenharmony_ci        /* apply window & overlap with previous buffer */
1233cabdff1aSopenharmony_ci
1234cabdff1aSopenharmony_ci        /* select window */
1235cabdff1aSopenharmony_ci        int win_idx = (switch_point && j < 2) ? 0 : block_type;
1236cabdff1aSopenharmony_ci        float *win = ff_mdct_win_float[win_idx + (4 & -(j & 1))];
1237cabdff1aSopenharmony_ci
1238cabdff1aSopenharmony_ci        imdct36_mips_float(out, buf, in, win);
1239cabdff1aSopenharmony_ci
1240cabdff1aSopenharmony_ci        in  += 18;
1241cabdff1aSopenharmony_ci        buf += ((j&3) != 3 ? 1 : (72-3));
1242cabdff1aSopenharmony_ci        out++;
1243cabdff1aSopenharmony_ci    }
1244cabdff1aSopenharmony_ci}
1245cabdff1aSopenharmony_ci
1246cabdff1aSopenharmony_ci#endif /* !HAVE_MIPS32R6 && !HAVE_MIPS64R6 */
1247cabdff1aSopenharmony_ci#endif /* HAVE_INLINE_ASM && HAVE_MIPSFPU */
1248cabdff1aSopenharmony_ci
1249cabdff1aSopenharmony_civoid ff_mpadsp_init_mipsfpu(MPADSPContext *s)
1250cabdff1aSopenharmony_ci{
1251cabdff1aSopenharmony_ci#if HAVE_INLINE_ASM && HAVE_MIPSFPU
1252cabdff1aSopenharmony_ci#if !HAVE_MIPS32R6 && !HAVE_MIPS64R6
1253cabdff1aSopenharmony_ci    s->apply_window_float   = ff_mpadsp_apply_window_mips_float;
1254cabdff1aSopenharmony_ci    s->imdct36_blocks_float = ff_imdct36_blocks_mips_float;
1255cabdff1aSopenharmony_ci    s->dct32_float          = ff_dct32_mips_float;
1256cabdff1aSopenharmony_ci#endif
1257cabdff1aSopenharmony_ci#endif
1258cabdff1aSopenharmony_ci}
1259