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