1ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org/* 2ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 3ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org * 4ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org */ 10ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org 11ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#include "webrtc/modules/audio_coding/codecs/isac/fix/source/codec.h" 12ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#include "webrtc/modules/audio_coding/codecs/isac/fix/source/fft.h" 13ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#include "webrtc/modules/audio_coding/codecs/isac/fix/source/settings.h" 14ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org 15ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org// The tables are defined in transform_tables.c file. 16ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.orgextern const int16_t WebRtcIsacfix_kCosTab1[FRAMESAMPLES/2]; 17ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.orgextern const int16_t WebRtcIsacfix_kSinTab1[FRAMESAMPLES/2]; 18ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.orgextern const int16_t WebRtcIsacfix_kCosTab2[FRAMESAMPLES/4]; 19ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.orgextern const int16_t WebRtcIsacfix_kSinTab2[FRAMESAMPLES/4]; 20ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org 21ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org// MIPS DSPr2 version of the WebRtcIsacfix_Time2Spec function 22ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org// is not bit-exact with the C version. 23ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org// The accuracy of the MIPS DSPr2 version is same or better. 24ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.orgvoid WebRtcIsacfix_Time2SpecMIPS(int16_t* inre1Q9, 25ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int16_t* inre2Q9, 26ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int16_t* outreQ7, 27ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int16_t* outimQ7) { 28ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int k = FRAMESAMPLES / 2; 29ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int32_t tmpreQ16[FRAMESAMPLES / 2], tmpimQ16[FRAMESAMPLES / 2]; 30ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int32_t r0, r1, r2, r3, r4, r5, r6, r7, r8, r9; 31ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int32_t inre1, inre2, tmpre, tmpim, factor, max, max1; 32ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int16_t* cosptr; 33ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int16_t* sinptr; 34ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org 35ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org cosptr = (int16_t*)WebRtcIsacfix_kCosTab1; 36ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org sinptr = (int16_t*)WebRtcIsacfix_kSinTab1; 37ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org 38ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org __asm __volatile ( 39ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set push \n\t" 40ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set noreorder \n\t" 41ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre1], %[inre1Q9], 0 \n\t" 42ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre2], %[inre2Q9], 0 \n\t" 43ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[tmpre], %[tmpreQ16], 0 \n\t" 44ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[tmpim], %[tmpimQ16], 0 \n\t" 45ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[factor], $zero, 16921 \n\t" 46ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[max], $zero, $zero \n\t" 47ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // Multiply with complex exponentials and combine into one complex vector. 48ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // Also, calculate the maximal absolute value in the same loop. 49ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "1: \n\t" 50ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R2_LE) 51ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwl %[r0], 0(%[inre1]) \n\t" 52ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwl %[r2], 0(%[cosptr]) \n\t" 53ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwl %[r3], 0(%[sinptr]) \n\t" 54ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwl %[r1], 0(%[inre2]) \n\t" 55ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwr %[r0], 0(%[inre1]) \n\t" 56ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwr %[r2], 0(%[cosptr]) \n\t" 57ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwr %[r3], 0(%[sinptr]) \n\t" 58ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwr %[r1], 0(%[inre2]) \n\t" 59ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phr %[r4], %[r2], %[r0] \n\t" 60ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phr %[r5], %[r3], %[r0] \n\t" 61ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phr %[r6], %[r3], %[r1] \n\t" 62ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phr %[r7], %[r2], %[r1] \n\t" 63ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phl %[r8], %[r2], %[r0] \n\t" 64ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phl %[r0], %[r3], %[r0] \n\t" 65ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phl %[r3], %[r3], %[r1] \n\t" 66ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phl %[r1], %[r2], %[r1] \n\t" 67ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[k], %[k], -2 \n\t" 68ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r4], %[r4], %[r6] \n\t" 69ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r5], %[r7], %[r5] \n\t" 70ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r4], %[r4], 8 \n\t" 71ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r5], %[r5], 8 \n\t" 72ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac0, %[factor], %[r4] \n\t" 73ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac1, %[factor], %[r5] \n\t" 74ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r3], %[r8], %[r3] \n\t" 75ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r0], %[r1], %[r0] \n\t" 76ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r3], %[r3], 8 \n\t" 77ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r0], %[r0], 8 \n\t" 78ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac2, %[factor], %[r3] \n\t" 79ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac3, %[factor], %[r0] \n\t" 80ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r4], $ac0, 16 \n\t" 81ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r5], $ac1, 16 \n\t" 82ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre1], %[inre1], 4 \n\t" 83ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre2], %[inre2], 4 \n\t" 84ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r6], $ac2, 16 \n\t" 85ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r7], $ac3, 16 \n\t" 86ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[cosptr], %[cosptr], 4 \n\t" 87ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[sinptr], %[sinptr], 4 \n\t" 88ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r4], %[r4], 3 \n\t" 89ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r5], %[r5], 3 \n\t" 90ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r4], 0(%[tmpre]) \n\t" 91ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "absq_s.w %[r4], %[r4] \n\t" 92ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r5], 0(%[tmpim]) \n\t" 93ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "absq_s.w %[r5], %[r5] \n\t" 94ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r6], %[r6], 3 \n\t" 95ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r7], %[r7], 3 \n\t" 96ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r6], 4(%[tmpre]) \n\t" 97ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "absq_s.w %[r6], %[r6] \n\t" 98ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r7], 4(%[tmpim]) \n\t" 99ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "absq_s.w %[r7], %[r7] \n\t" 100ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r0], %[r4], %[r5] \n\t" 101ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[r4], %[r5], %[r0] \n\t" 102ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r1], %[r6], %[r7] \n\t" 103ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[r6], %[r7], %[r1] \n\t" 104ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r0], %[max], %[r4] \n\t" 105ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[max], %[r4], %[r0] \n\t" 106ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r1], %[max], %[r6] \n\t" 107ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[max], %[r6], %[r1] \n\t" 108ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[tmpre], %[tmpre], 8 \n\t" 109ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "bgtz %[k], 1b \n\t" 110ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " addiu %[tmpim], %[tmpim], 8 \n\t" 111ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R2_LE) 112ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r0], 0(%[inre1]) \n\t" 113ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r1], 0(%[inre2]) \n\t" 114ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r2], 0(%[cosptr]) \n\t" 115ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r3], 0(%[sinptr]) \n\t" 116ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[k], %[k], -1 \n\t" 117ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r4], %[r0], %[r2] \n\t" 118ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r5], %[r1], %[r3] \n\t" 119ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r0], %[r0], %[r3] \n\t" 120ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r2], %[r1], %[r2] \n\t" 121ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre1], %[inre1], 2 \n\t" 122ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre2], %[inre2], 2 \n\t" 123ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[cosptr], %[cosptr], 2 \n\t" 124ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[sinptr], %[sinptr], 2 \n\t" 125ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r1], %[r4], %[r5] \n\t" 126ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r1], %[r1], 7 \n\t" 127ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r3], %[r1], 16 \n\t" 128ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r1], %[r1], 0xFFFF \n\t" 129ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r1], %[r1], 1 \n\t" 130ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r1], %[factor], %[r1] \n\t" 131ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r3], %[factor], %[r3] \n\t" 132ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r0], %[r2], %[r0] \n\t" 133ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r0], %[r0], 7 \n\t" 134ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r2], %[r0], 16 \n\t" 135ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r0], %[r0], 0xFFFF \n\t" 136ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r0], %[r0], 1 \n\t" 137ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r0], %[factor], %[r0] \n\t" 138ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r2], %[factor], %[r2] \n\t" 139ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 140ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r1], %[r1], 15 \n\t" 141ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 142ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r1], %[r1], 0x4000 \n\t" 143ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r1], %[r1], 15 \n\t" 144ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 145ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r1], %[r3], %[r1] \n\t" 146ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 147ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r1], %[r1], 3 \n\t" 148ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 149ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r1], %[r1], 4 \n\t" 150ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r1], %[r1], 3 \n\t" 151ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 152ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r1], 0(%[tmpre]) \n\t" 153ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[tmpre], %[tmpre], 4 \n\t" 154ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 155ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "absq_s.w %[r1], %[r1] \n\t" 156ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r0], %[r0], 15 \n\t" 157ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 158ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "negu %[r4], %[r1] \n\t" 159ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r3], %[r1], $zero \n\t" 160ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[r1], %[r4], %[r3] \n\t" 161ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r0], %[r0], 0x4000 \n\t" 162ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r0], %[r0], 15 \n\t" 163ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 164ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r0], %[r0], %[r2] \n\t" 165ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 166ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r0], %[r0], 3 \n\t" 167ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r0], 0(%[tmpim]) \n\t" 168ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "absq_s.w %[r0], %[r0] \n\t" 169ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 170ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r0], %[r0], 4 \n\t" 171ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r0], %[r0], 3 \n\t" 172ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r0], 0(%[tmpim]) \n\t" 173ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "negu %[r2], %[r0] \n\t" 174ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r3], %[r0], $zero \n\t" 175ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[r0], %[r2], %[r3] \n\t" 176ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 177ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r2], %[max], %[r1] \n\t" 178ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[max], %[r1], %[r2] \n\t" 179ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r2], %[max], %[r0] \n\t" 180ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[max], %[r0], %[r2] \n\t" 181ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "bgtz %[k], 1b \n\t" 182ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " addiu %[tmpim], %[tmpim], 4 \n\t" 183ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R2_LE) 184ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // Calculate WebRtcSpl_NormW32(max). 185ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // If max gets value >=0, we should shift max steps to the left, and the 186ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // domain will be Q(16+shift). If max gets value <0, we should shift -max 187ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // steps to the right, and the domain will be Q(16+max) 188ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "clz %[max], %[max] \n\t" 189ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[max], %[max], -25 \n\t" 190ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set pop \n\t" 191ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : [k] "+r" (k), [inre1] "=&r" (inre1), [inre2] "=&r" (inre2), 192ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [r0] "=&r" (r0), [r1] "=&r" (r1), [r2] "=&r" (r2), 193ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [r3] "=&r" (r3), [r4] "=&r" (r4), [tmpre] "=&r" (tmpre), 194ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [tmpim] "=&r" (tmpim), [max] "=&r" (max), [factor] "=&r" (factor), 195ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R2_LE) 196ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [r6] "=&r" (r6), [r7] "=&r" (r7), [r8] "=&r" (r8), 197ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R2_LE) 198ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [r5] "=&r" (r5) 199ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : [inre1Q9] "r" (inre1Q9), [inre2Q9] "r" (inre2Q9), 200ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [tmpreQ16] "r" (tmpreQ16), [tmpimQ16] "r" (tmpimQ16), 201ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [cosptr] "r" (cosptr), [sinptr] "r" (sinptr) 202ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : "hi", "lo", "memory" 20384d84471f5f0031436e798657784b8938a25ac0fandrew@webrtc.org#if defined(MIPS_DSP_R2_LE) 20484d84471f5f0031436e798657784b8938a25ac0fandrew@webrtc.org , "$ac1hi", "$ac1lo", "$ac2hi", "$ac2lo", "$ac3hi", "$ac3lo" 20584d84471f5f0031436e798657784b8938a25ac0fandrew@webrtc.org#endif // #if defined(MIPS_DSP_R2_LE) 206ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ); 207ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org 208ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // "Fastest" vectors 209ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org k = FRAMESAMPLES / 4; 210ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org __asm __volatile ( 211ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set push \n\t" 212ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set noreorder \n\t" 213ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[tmpre], %[tmpreQ16], 0 \n\t" 214ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[tmpim], %[tmpimQ16], 0 \n\t" 215ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre1], %[inre1Q9], 0 \n\t" 216ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre2], %[inre2Q9], 0 \n\t" 217ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "blez %[max], 2f \n\t" 218ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " subu %[max1], $zero, %[max] \n\t" 219ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "1: \n\t" 220ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lw %[r0], 0(%[tmpre]) \n\t" 221ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lw %[r1], 0(%[tmpim]) \n\t" 222ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lw %[r2], 4(%[tmpre]) \n\t" 223ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lw %[r3], 4(%[tmpim]) \n\t" 224ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[k], %[k], -1 \n\t" 225ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r0], %[r0], %[max] \n\t" 226ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r1], %[r1], %[max] \n\t" 227ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r2], %[r2], %[max] \n\t" 228ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r3], %[r3], %[max] \n\t" 229ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[tmpre], %[tmpre], 8 \n\t" 230ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[tmpim], %[tmpim], 8 \n\t" 231ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r0], 0(%[inre1]) \n\t" 232ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r1], 0(%[inre2]) \n\t" 233ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r2], 2(%[inre1]) \n\t" 234ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r3], 2(%[inre2]) \n\t" 235ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre1], %[inre1], 4 \n\t" 236ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "bgtz %[k], 1b \n\t" 237ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " addiu %[inre2], %[inre2], 4 \n\t" 238ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "b 4f \n\t" 239ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " nop \n\t" 240ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "2: \n\t" 241ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if !defined(MIPS_DSP_R1_LE) 242ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r4], %[max1], -1 \n\t" 243ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r5], $zero, 1 \n\t" 244ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r4], %[r5], %[r4] \n\t" 245ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if !defined(MIPS_DSP_R1_LE) 246ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "3: \n\t" 247ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lw %[r0], 0(%[tmpre]) \n\t" 248ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lw %[r1], 0(%[tmpim]) \n\t" 249ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lw %[r2], 4(%[tmpre]) \n\t" 250ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lw %[r3], 4(%[tmpim]) \n\t" 251ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[k], %[k], -1 \n\t" 252ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 253ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shrav_r.w %[r0], %[r0], %[max1] \n\t" 254ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shrav_r.w %[r1], %[r1], %[max1] \n\t" 255ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shrav_r.w %[r2], %[r2], %[max1] \n\t" 256ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shrav_r.w %[r3], %[r3], %[max1] \n\t" 257ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if !defined(MIPS_DSP_R1_LE) 258ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r0], %[r0], %[r4] \n\t" 259ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r1], %[r1], %[r4] \n\t" 260ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r2], %[r2], %[r4] \n\t" 261ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r3], %[r3], %[r4] \n\t" 262ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "srav %[r0], %[r0], %[max1] \n\t" 263ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "srav %[r1], %[r1], %[max1] \n\t" 264ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "srav %[r2], %[r2], %[max1] \n\t" 265ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "srav %[r3], %[r3], %[max1] \n\t" 266ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if !defined(MIPS_DSP_R1_LE) 267ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[tmpre], %[tmpre], 8 \n\t" 268ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[tmpim], %[tmpim], 8 \n\t" 269ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r0], 0(%[inre1]) \n\t" 270ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r1], 0(%[inre2]) \n\t" 271ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r2], 2(%[inre1]) \n\t" 272ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r3], 2(%[inre2]) \n\t" 273ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre1], %[inre1], 4 \n\t" 274ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "bgtz %[k], 3b \n\t" 275ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " addiu %[inre2], %[inre2], 4 \n\t" 276ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "4: \n\t" 277ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set pop \n\t" 278ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : [tmpre] "=&r" (tmpre), [tmpim] "=&r" (tmpim), [inre1] "=&r" (inre1), 279ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [inre2] "=&r" (inre2), [k] "+r" (k), [max1] "=&r" (max1), 280ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if !defined(MIPS_DSP_R1_LE) 281ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [r4] "=&r" (r4), [r5] "=&r" (r5), 282ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if !defined(MIPS_DSP_R1_LE) 283ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [r0] "=&r" (r0), [r1] "=&r" (r1), [r2] "=&r" (r2), [r3] "=&r" (r3) 284ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : [tmpreQ16] "r" (tmpreQ16), [tmpimQ16] "r" (tmpimQ16), 285ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [inre1Q9] "r" (inre1Q9), [inre2Q9] "r" (inre2Q9), [max] "r" (max) 286ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : "memory" 287ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ); 288ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org 289ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // Get DFT 290ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org WebRtcIsacfix_FftRadix16Fastest(inre1Q9, inre2Q9, -1); // real call 291ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org 292ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // "Fastest" vectors and 293ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // Use symmetry to separate into two complex vectors 294ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // and center frames in time around zero 295ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // merged into one loop 296ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org cosptr = (int16_t*)WebRtcIsacfix_kCosTab2; 297ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org sinptr = (int16_t*)WebRtcIsacfix_kSinTab2; 298ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org k = FRAMESAMPLES / 4; 299ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org factor = FRAMESAMPLES - 2; // offset for FRAMESAMPLES / 2 - 1 array member 300ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org 301ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org __asm __volatile ( 302ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set push \n\t" 303ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set noreorder \n\t" 304ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre1], %[inre1Q9], 0 \n\t" 305ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre2], %[inre2Q9], 0 \n\t" 306ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[tmpre], %[outreQ7], 0 \n\t" 307ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[tmpim], %[outimQ7], 0 \n\t" 308ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "bltz %[max], 2f \n\t" 309ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " subu %[max1], $zero, %[max] \n\t" 310ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "1: \n\t" 311ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if !defined(MIPS_DSP_R1_LE) 312ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r4], %[inre1], %[offset] \n\t" 313ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r5], %[inre2], %[offset] \n\t" 314ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if !defined(MIPS_DSP_R1_LE) 315ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r0], 0(%[inre1]) \n\t" 316ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r1], 0(%[inre2]) \n\t" 317ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 318ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lhx %[r2], %[offset](%[inre1]) \n\t" 319ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lhx %[r3], %[offset](%[inre2]) \n\t" 320ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 321ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r2], 0(%[r4]) \n\t" 322ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r3], 0(%[r5]) \n\t" 323ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 324ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "srav %[r0], %[r0], %[max] \n\t" 325ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "srav %[r1], %[r1], %[max] \n\t" 326ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "srav %[r2], %[r2], %[max] \n\t" 327ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "srav %[r3], %[r3], %[max] \n\t" 328ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r4], %[r0], %[r2] \n\t" 329ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r0], %[r2], %[r0] \n\t" 330ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r2], %[r1], %[r3] \n\t" 331ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r1], %[r1], %[r3] \n\t" 332ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r3], 0(%[cosptr]) \n\t" 333ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r5], 0(%[sinptr]) \n\t" 334ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r6], %[r4], 0xFFFF \n\t" 335ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r4], %[r4], 16 \n\t" 336ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r7], %[r3], %[r6] \n\t" 337ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r8], %[r3], %[r4] \n\t" 338ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r6], %[r5], %[r6] \n\t" 339ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r4], %[r5], %[r4] \n\t" 340ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[k], %[k], -1 \n\t" 341ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre1], %[inre1], 2 \n\t" 342ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre2], %[inre2], 2 \n\t" 343ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 344ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r7], %[r7], 14 \n\t" 345ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 346ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r7], %[r7], 0x2000 \n\t" 347ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r7], %[r7], 14 \n\t" 348ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 349ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r8], %[r8], 2 \n\t" 350ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r8], %[r8], %[r7] \n\t" 351ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 352ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r6], %[r6], 14 \n\t" 353ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 354ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r6], %[r6], 0x2000 \n\t" 355ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r6], %[r6], 14 \n\t" 356ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 357ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r4], %[r4], 2 \n\t" 358ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r4], %[r4], %[r6] \n\t" 359ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r6], %[r2], 0xFFFF \n\t" 360ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r2], %[r2], 16 \n\t" 361ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r7], %[r5], %[r6] \n\t" 362ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r9], %[r5], %[r2] \n\t" 363ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r6], %[r3], %[r6] \n\t" 364ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r2], %[r3], %[r2] \n\t" 365ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[cosptr], %[cosptr], 2 \n\t" 366ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[sinptr], %[sinptr], 2 \n\t" 367ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 368ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r7], %[r7], 14 \n\t" 369ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 370ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r7], %[r7], 0x2000 \n\t" 371ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r7], %[r7], 14 \n\t" 372ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 373ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r9], %[r9], 2 \n\t" 374ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r9], %[r7], %[r9] \n\t" 375ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 376ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r6], %[r6], 14 \n\t" 377ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 378ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r6], %[r6], 0x2000 \n\t" 379ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r6], %[r6], 14 \n\t" 380ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 381ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r2], %[r2], 2 \n\t" 382ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r2], %[r6], %[r2] \n\t" 383ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r8], %[r8], %[r9] \n\t" 384ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r8], %[r8], 9 \n\t" 385ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r2], %[r4], %[r2] \n\t" 386ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r2], %[r2], 9 \n\t" 387ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r8], 0(%[tmpre]) \n\t" 388ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r2], 0(%[tmpim]) \n\t" 389ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org 390ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r4], %[r1], 0xFFFF \n\t" 391ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r1], %[r1], 16 \n\t" 392ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r6], %[r0], 0xFFFF \n\t" 393ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r0], %[r0], 16 \n\t" 394ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r7], %[r5], %[r4] \n\t" 395ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r9], %[r5], %[r1] \n\t" 396ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r4], %[r3], %[r4] \n\t" 397ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r1], %[r3], %[r1] \n\t" 398ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r8], %[r3], %[r0] \n\t" 399ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r3], %[r3], %[r6] \n\t" 400ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r6], %[r5], %[r6] \n\t" 401ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r0], %[r5], %[r0] \n\t" 402ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 403ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r7], %[r7], 14 \n\t" 404ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 405ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r7], %[r7], 0x2000 \n\t" 406ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r7], %[r7], 14 \n\t" 407ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 408ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r9], %[r9], 2 \n\t" 409ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r9], %[r9], %[r7] \n\t" 410ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 411ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r4], %[r4], 14 \n\t" 412ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 413ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r4], %[r4], 0x2000 \n\t" 414ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r4], %[r4], 14 \n\t" 415ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 416ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r1], %[r1], 2 \n\t" 417ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r1], %[r1], %[r4] \n\t" 418ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 419ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r3], %[r3], 14 \n\t" 420ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 421ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r3], %[r3], 0x2000 \n\t" 422ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r3], %[r3], 14 \n\t" 423ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 424ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r8], %[r8], 2 \n\t" 425ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r8], %[r8], %[r3] \n\t" 426ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 427ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r6], %[r6], 14 \n\t" 428ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 429ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r6], %[r6], 0x2000 \n\t" 430ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r6], %[r6], 14 \n\t" 431ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 432ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r0], %[r0], 2 \n\t" 433ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r0], %[r0], %[r6] \n\t" 434ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r3], %[tmpre], %[offset] \n\t" 435ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r2], %[tmpim], %[offset] \n\t" 436ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r9], %[r9], %[r8] \n\t" 437ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "negu %[r9], %[r9] \n\t" 438ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r9], %[r9], 9 \n\t" 439ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r0], %[r0], %[r1] \n\t" 440ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[offset], %[offset], -4 \n\t" 441ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r9], 0(%[r3]) \n\t" 442ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r0], 0(%[r2]) \n\t" 443ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[tmpre], %[tmpre], 2 \n\t" 444ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "bgtz %[k], 1b \n\t" 445ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " addiu %[tmpim], %[tmpim], 2 \n\t" 446ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "b 3f \n\t" 447ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " nop \n\t" 448ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "2: \n\t" 449ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if !defined(MIPS_DSP_R1_LE) 450ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r4], %[inre1], %[offset] \n\t" 451ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r5], %[inre2], %[offset] \n\t" 452ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if !defined(MIPS_DSP_R1_LE) 453ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r0], 0(%[inre1]) \n\t" 454ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r1], 0(%[inre2]) \n\t" 455ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 456ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lhx %[r2], %[offset](%[inre1]) \n\t" 457ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lhx %[r3], %[offset](%[inre2]) \n\t" 458ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 459ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r2], 0(%[r4]) \n\t" 460ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r3], 0(%[r5]) \n\t" 461ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 462ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r0], %[r0], %[max1] \n\t" 463ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r1], %[r1], %[max1] \n\t" 464ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r2], %[r2], %[max1] \n\t" 465ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r3], %[r3], %[max1] \n\t" 466ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r4], %[r0], %[r2] \n\t" 467ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r0], %[r2], %[r0] \n\t" 468ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r2], %[r1], %[r3] \n\t" 469ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r1], %[r1], %[r3] \n\t" 470ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r3], 0(%[cosptr]) \n\t" 471ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r5], 0(%[sinptr]) \n\t" 472ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r6], %[r4], 0xFFFF \n\t" 473ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r4], %[r4], 16 \n\t" 474ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r7], %[r3], %[r6] \n\t" 475ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r8], %[r3], %[r4] \n\t" 476ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r6], %[r5], %[r6] \n\t" 477ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r4], %[r5], %[r4] \n\t" 478ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[k], %[k], -1 \n\t" 479ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre1], %[inre1], 2 \n\t" 480ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre2], %[inre2], 2 \n\t" 481ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 482ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r7], %[r7], 14 \n\t" 483ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 484ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r7], %[r7], 0x2000 \n\t" 485ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r7], %[r7], 14 \n\t" 486ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 487ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r8], %[r8], 2 \n\t" 488ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r8], %[r8], %[r7] \n\t" 489ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 490ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r6], %[r6], 14 \n\t" 491ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 492ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r6], %[r6], 0x2000 \n\t" 493ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r6], %[r6], 14 \n\t" 494ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 495ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r4], %[r4], 2 \n\t" 496ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r4], %[r4], %[r6] \n\t" 497ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r6], %[r2], 0xFFFF \n\t" 498ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r2], %[r2], 16 \n\t" 499ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r7], %[r5], %[r6] \n\t" 500ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r9], %[r5], %[r2] \n\t" 501ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r6], %[r3], %[r6] \n\t" 502ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r2], %[r3], %[r2] \n\t" 503ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[cosptr], %[cosptr], 2 \n\t" 504ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[sinptr], %[sinptr], 2 \n\t" 505ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 506ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r7], %[r7], 14 \n\t" 507ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 508ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r7], %[r7], 0x2000 \n\t" 509ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r7], %[r7], 14 \n\t" 510ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 511ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r9], %[r9], 2 \n\t" 512ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r9], %[r7], %[r9] \n\t" 513ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 514ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r6], %[r6], 14 \n\t" 515ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 516ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r6], %[r6], 0x2000 \n\t" 517ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r6], %[r6], 14 \n\t" 518ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 519ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r2], %[r2], 2 \n\t" 520ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r2], %[r6], %[r2] \n\t" 521ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r8], %[r8], %[r9] \n\t" 522ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r8], %[r8], 9 \n\t" 523ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r2], %[r4], %[r2] \n\t" 524ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r2], %[r2], 9 \n\t" 525ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r8], 0(%[tmpre]) \n\t" 526ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r2], 0(%[tmpim]) \n\t" 527ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r4], %[r1], 0xFFFF \n\t" 528ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r1], %[r1], 16 \n\t" 529ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r6], %[r0], 0xFFFF \n\t" 530ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r0], %[r0], 16 \n\t" 531ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r7], %[r5], %[r4] \n\t" 532ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r9], %[r5], %[r1] \n\t" 533ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r4], %[r3], %[r4] \n\t" 534ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r1], %[r3], %[r1] \n\t" 535ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r8], %[r3], %[r0] \n\t" 536ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r3], %[r3], %[r6] \n\t" 537ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r6], %[r5], %[r6] \n\t" 538ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r0], %[r5], %[r0] \n\t" 539ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 540ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r7], %[r7], 14 \n\t" 541ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 542ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r7], %[r7], 0x2000 \n\t" 543ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r7], %[r7], 14 \n\t" 544ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 545ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r9], %[r9], 2 \n\t" 546ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r9], %[r9], %[r7] \n\t" 547ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 548ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r4], %[r4], 14 \n\t" 549ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 550ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r4], %[r4], 0x2000 \n\t" 551ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r4], %[r4], 14 \n\t" 552ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif 553ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r1], %[r1], 2 \n\t" 554ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r1], %[r1], %[r4] \n\t" 555ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 556ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r3], %[r3], 14 \n\t" 557ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 558ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r3], %[r3], 0x2000 \n\t" 559ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r3], %[r3], 14 \n\t" 560ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 561ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r8], %[r8], 2 \n\t" 562ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r8], %[r8], %[r3] \n\t" 563ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 564ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r6], %[r6], 14 \n\t" 565ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 566ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r6], %[r6], 0x2000 \n\t" 567ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r6], %[r6], 14 \n\t" 568ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 569ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r0], %[r0], 2 \n\t" 570ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r0], %[r0], %[r6] \n\t" 571ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r3], %[tmpre], %[offset] \n\t" 572ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r2], %[tmpim], %[offset] \n\t" 573ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r9], %[r9], %[r8] \n\t" 574ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "negu %[r9], %[r9] \n\t" 575ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r9], %[r9], 9 \n\t" 576ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r0], %[r0], %[r1] \n\t" 577ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r0], %[r0], 9 \n\t" 578ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[offset], %[offset], -4 \n\t" 579ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r9], 0(%[r3]) \n\t" 580ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r0], 0(%[r2]) \n\t" 581ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[tmpre], %[tmpre], 2 \n\t" 582ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "bgtz %[k], 2b \n\t" 583ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " addiu %[tmpim], %[tmpim], 2 \n\t" 584ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "3: \n\t" 585ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set pop \n\t" 586ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : [inre1] "=&r" (inre1), [inre2] "=&r" (inre2), [tmpre] "=&r" (tmpre), 587ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [tmpim] "=&r" (tmpim), [offset] "+r" (factor), [k] "+r" (k), 588ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [r0] "=&r" (r0), [r1] "=&r" (r1), [r2] "=&r" (r2), [r3] "=&r" (r3), 589ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [r4] "=&r" (r4), [r5] "=&r" (r5), [r6] "=&r" (r6), [r7] "=&r" (r7), 590ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [r8] "=&r" (r8), [r9] "=&r" (r9), [max1] "=&r" (max1) 591ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : [inre1Q9] "r" (inre1Q9), [inre2Q9] "r" (inre2Q9), 592ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [outreQ7] "r" (outreQ7), [outimQ7] "r" (outimQ7), 593ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [max] "r" (max), [cosptr] "r" (cosptr), [sinptr] "r" (sinptr) 594ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : "hi", "lo", "memory" 595ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ); 596ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org} 597ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org 598ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.orgvoid WebRtcIsacfix_Spec2TimeMIPS(int16_t *inreQ7, 599ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int16_t *inimQ7, 600ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int32_t *outre1Q16, 601ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int32_t *outre2Q16) { 602ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int k = FRAMESAMPLES / 4; 603ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int16_t* inre; 604ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int16_t* inim; 605ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int32_t* outre1; 606ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int32_t* outre2; 607ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int16_t* cosptr = (int16_t*)WebRtcIsacfix_kCosTab2; 608ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int16_t* sinptr = (int16_t*)WebRtcIsacfix_kSinTab2; 6098f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga int32_t r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, max, max1; 610ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 611ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int32_t offset = FRAMESAMPLES - 4; 612ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 613ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org int32_t offset = FRAMESAMPLES - 2; 614ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 615ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org 616ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org __asm __volatile ( 617ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set push \n\t" 618ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set noreorder \n\t" 619ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre], %[inreQ7], 0 \n\t" 620ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inim] , %[inimQ7], 0 \n\t" 621ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[outre1], %[outre1Q16], 0 \n\t" 622ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[outre2], %[outre2Q16], 0 \n\t" 623ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[max], $zero, $zero \n\t" 624ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "1: \n\t" 625ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 626ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // Process two samples in one iteration avoiding left shift before 627ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // multiplication. MaxAbsValueW32 function inlined into the loop. 628ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r8], %[inre], %[offset] \n\t" 629ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r9], %[inim], %[offset] \n\t" 630ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwl %[r4], 0(%[r8]) \n\t" 631ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwl %[r5], 0(%[r9]) \n\t" 632ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwl %[r0], 0(%[inre]) \n\t" 633ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwl %[r1], 0(%[inim]) \n\t" 634ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwl %[r2], 0(%[cosptr]) \n\t" 635ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwl %[r3], 0(%[sinptr]) \n\t" 636ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwr %[r4], 0(%[r8]) \n\t" 637ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwr %[r5], 0(%[r9]) \n\t" 638ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwr %[r0], 0(%[inre]) \n\t" 639ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwr %[r1], 0(%[inim]) \n\t" 640ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwr %[r2], 0(%[cosptr]) \n\t" 641ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwr %[r3], 0(%[sinptr]) \n\t" 642ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "packrl.ph %[r4], %[r4], %[r4] \n\t" 643ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "packrl.ph %[r5], %[r5], %[r5] \n\t" 644ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phr %[r6], %[r0], %[r2] \n\t" 645ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phr %[r7], %[r1], %[r3] \n\t" 646ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phr %[r8], %[r4], %[r2] \n\t" 647ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phr %[r9], %[r5], %[r3] \n\t" 648ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[k], %[k], -2 \n\t" 649ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[cosptr], %[cosptr], 4 \n\t" 650ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[sinptr], %[sinptr], 4 \n\t" 651ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre], %[inre], 4 \n\t" 652ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inim], %[inim], 4 \n\t" 653ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r6], %[r6], 6 \n\t" 654ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r7], %[r7], 6 \n\t" 655ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r8], %[r8], 6 \n\t" 656ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r9], %[r9], 6 \n\t" 657ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r6], %[r6], %[r7] \n\t" 658ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r9], %[r9], %[r8] \n\t" 659ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r7], %[r6], %[r9] \n\t" 660ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r6], %[r6], %[r9] \n\t" 661ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r7], 0(%[outre1]) \n\t" 662ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "absq_s.w %[r7], %[r7] \n\t" 663ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r8], %[max], %[r7] \n\t" 664ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[max], %[r7], %[r8] \n\t" 6658f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga "sll %[r7], %[offset], 1 \n\t" 6668f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga "addu %[r7], %[outre1], %[r7] \n\t" 6678f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga "sw %[r6], 4(%[r7]) \n\t" 6688f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga "absq_s.w %[r6], %[r6] \n\t" 669ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r8], %[max], %[r6] \n\t" 670ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[max], %[r6], %[r8] \n\t" 671ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phl %[r6], %[r0], %[r2] \n\t" 672ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phl %[r7], %[r1], %[r3] \n\t" 673ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phl %[r8], %[r4], %[r2] \n\t" 674ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phl %[r9], %[r5], %[r3] \n\t" 675ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r6], %[r6], 6 \n\t" 676ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r7], %[r7], 6 \n\t" 677ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r8], %[r8], 6 \n\t" 678ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r9], %[r9], 6 \n\t" 679ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r6], %[r6], %[r7] \n\t" 680ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r9], %[r9], %[r8] \n\t" 681ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r7], %[r6], %[r9] \n\t" 682ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r6], %[r6], %[r9] \n\t" 683ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r7], 4(%[outre1]) \n\t" 684ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "absq_s.w %[r7], %[r7] \n\t" 685ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r8], %[max], %[r7] \n\t" 686ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[max], %[r7], %[r8] \n\t" 6878f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga "sll %[r7], %[offset], 1 \n\t" 6888f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga "addu %[r7], %[outre1], %[r7] \n\t" 6898f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga "sw %[r6], 0(%[r7]) \n\t" 6908f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga "absq_s.w %[r6], %[r6] \n\t" 691ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r8], %[max], %[r6] \n\t" 692ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[max], %[r6], %[r8] \n\t" 693ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phr %[r6], %[r1], %[r2] \n\t" 694ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phr %[r7], %[r0], %[r3] \n\t" 695ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phr %[r8], %[r5], %[r2] \n\t" 696ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phr %[r9], %[r4], %[r3] \n\t" 697ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[outre1], %[outre1], 8 \n\t" 698ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r6], %[r6], 6 \n\t" 699ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r7], %[r7], 6 \n\t" 700ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r8], %[r8], 6 \n\t" 701ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r9], %[r9], 6 \n\t" 702ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r6], %[r6], %[r7] \n\t" 703ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r9], %[r9], %[r8] \n\t" 704ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r7], %[r6], %[r9] \n\t" 705ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r6], %[r9], %[r6] \n\t" 706ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "negu %[r6], %[r6] \n\t" 707ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r7], 0(%[outre2]) \n\t" 708ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "absq_s.w %[r7], %[r7] \n\t" 709ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r8], %[max], %[r7] \n\t" 710ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[max], %[r7], %[r8] \n\t" 7118f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga "sll %[r7], %[offset], 1 \n\t" 7128f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga "addu %[r7], %[outre2], %[r7] \n\t" 7138f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga "sw %[r6], 4(%[r7]) \n\t" 7148f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga "absq_s.w %[r6], %[r6] \n\t" 715ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r8], %[max], %[r6] \n\t" 716ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[max], %[r6], %[r8] \n\t" 717ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phl %[r6], %[r1], %[r2] \n\t" 718ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phl %[r7], %[r0], %[r3] \n\t" 719ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phl %[r8], %[r5], %[r2] \n\t" 720ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phl %[r9], %[r4], %[r3] \n\t" 721ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[offset], %[offset], -8 \n\t" 722ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r6], %[r6], 6 \n\t" 723ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r7], %[r7], 6 \n\t" 724ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r8], %[r8], 6 \n\t" 725ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r9], %[r9], 6 \n\t" 726ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r6], %[r6], %[r7] \n\t" 727ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r9], %[r9], %[r8] \n\t" 728ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r7], %[r6], %[r9] \n\t" 729ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r6], %[r9], %[r6] \n\t" 730ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "negu %[r6], %[r6] \n\t" 731ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r7], 4(%[outre2]) \n\t" 732ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "absq_s.w %[r7], %[r7] \n\t" 733ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r8], %[max], %[r7] \n\t" 734ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[max], %[r7], %[r8] \n\t" 7358f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga "sll %[r7], %[offset], 1 \n\t" 7368f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga "addu %[r7], %[outre2], %[r7] \n\t" 7378f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga "sw %[r6], 0(%[r7]) \n\t" 7388f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga "absq_s.w %[r6], %[r6] \n\t" 739ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r8], %[max], %[r6] \n\t" 740ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[max], %[r6], %[r8] \n\t" 741ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "bgtz %[k], 1b \n\t" 742ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " addiu %[outre2], %[outre2], 8 \n\t" 743ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 744ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r0], 0(%[inre]) \n\t" 745ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r1], 0(%[inim]) \n\t" 746ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r4], 0(%[cosptr]) \n\t" 747ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r5], 0(%[sinptr]) \n\t" 748ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[k], %[k], -1 \n\t" 749ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r2], %[r0], %[r4] \n\t" 750ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r0], %[r0], %[r5] \n\t" 751ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r3], %[r1], %[r5] \n\t" 752ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r1], %[r1], %[r4] \n\t" 753ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[cosptr], %[cosptr], 2 \n\t" 754ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[sinptr], %[sinptr], 2 \n\t" 755ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r8], %[inre], %[offset] \n\t" 756ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r9], %[inim], %[offset] \n\t" 757ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r2], %[r2], 16 \n\t" 758ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r2], %[r2], 5 \n\t" 759ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r0], %[r0], 16 \n\t" 760ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r0], %[r0], 5 \n\t" 761ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r3], %[r3], 16 \n\t" 762ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r3], %[r3], 5 \n\t" 763ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r6], 0(%[r8]) \n\t" 764ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r7], 0(%[r9]) \n\t" 765ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r1], %[r1], 16 \n\t" 766ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r1], %[r1], 5 \n\t" 767ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r8], %[r7], %[r4] \n\t" 768ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r7], %[r7], %[r5] \n\t" 769ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r9], %[r6], %[r4] \n\t" 770ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r6], %[r6], %[r5] \n\t" 771ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r2], %[r2], %[r3] \n\t" 772ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r1], %[r1], %[r0] \n\t" 773ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r0], %[offset], 1 \n\t" 774ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r4], %[outre1], %[r0] \n\t" 775ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r5], %[outre2], %[r0] \n\t" 776ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r8], %[r8], 16 \n\t" 777ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r8], %[r8], 5 \n\t" 778ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r7], %[r7], 16 \n\t" 779ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r7], %[r7], 5 \n\t" 780ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r6], %[r6], 16 \n\t" 781ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r6], %[r6], 5 \n\t" 782ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r9], %[r9], 16 \n\t" 783ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r9], %[r9], 5 \n\t" 784ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r8], %[r8], %[r6] \n\t" 785ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "negu %[r8], %[r8] \n\t" 786ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r7], %[r7], %[r9] \n\t" 787ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r6], %[r2], %[r7] \n\t" 788ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r0], %[r2], %[r7] \n\t" 789ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r3], %[r1], %[r8] \n\t" 790ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r1], %[r8], %[r1] \n\t" 791ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r6], 0(%[outre1]) \n\t" 792ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r0], 0(%[r4]) \n\t" 793ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r3], 0(%[outre2]) \n\t" 794ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r1], 0(%[r5]) \n\t" 795ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[outre1], %[outre1], 4 \n\t" 796ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[offset], %[offset], -4 \n\t" 797ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre], %[inre], 2 \n\t" 798ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inim], %[inim], 2 \n\t" 799ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // Inlined WebRtcSpl_MaxAbsValueW32 800ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "negu %[r5], %[r6] \n\t" 801ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r2], %[r6], $zero \n\t" 802ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[r6], %[r5], %[r2] \n\t" 803ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "negu %[r5], %[r0] \n\t" 804ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r2], %[r0], $zero \n\t" 805ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[r0], %[r5], %[r2] \n\t" 806ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "negu %[r5], %[r3] \n\t" 807ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r2], %[r3], $zero \n\t" 808ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[r3], %[r5], %[r2] \n\t" 809ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "negu %[r5], %[r1] \n\t" 810ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r2], %[r1], $zero \n\t" 811ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[r1], %[r5], %[r2] \n\t" 812ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r2], %[r6], %[r0] \n\t" 813ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r5], %[r3], %[r1] \n\t" 814ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[r6], %[r0], %[r2] \n\t" 815ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[r3], %[r1], %[r5] \n\t" 816ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r2], %[r6], %[r3] \n\t" 817ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[r6], %[r3], %[r2] \n\t" 818ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "slt %[r2], %[max], %[r6] \n\t" 819ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "movn %[max], %[r6], %[r2] \n\t" 820ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "bgtz %[k], 1b \n\t" 821ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " addiu %[outre2], %[outre2], 4 \n\t" 822ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 823ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "clz %[max], %[max] \n\t" 824ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[max], %[max], -25 \n\t" 825ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set pop \n\t" 826ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : [inre] "=&r" (inre), [inim] "=&r" (inim), 827ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [outre1] "=&r" (outre1), [outre2] "=&r" (outre2), 828ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [offset] "+r" (offset), [k] "+r" (k), [r0] "=&r" (r0), 829ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [r1] "=&r" (r1), [r2] "=&r" (r2), [r3] "=&r" (r3), 830ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [r4] "=&r" (r4), [r5] "=&r" (r5), [r6] "=&r" (r6), 8318f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga [r7] "=&r" (r7), [r8] "=&r" (r8), [r9] "=&r" (r9), 8328f85dbcce437c49808e2ed181452e42056b22dd7Ljubomir Papuga [max] "=&r" (max) 833ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : [inreQ7] "r" (inreQ7), [inimQ7] "r" (inimQ7), 834ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [cosptr] "r" (cosptr), [sinptr] "r" (sinptr), 835ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [outre1Q16] "r" (outre1Q16), [outre2Q16] "r" (outre2Q16) 836ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : "hi", "lo", "memory" 837ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ); 838ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org 839ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // "Fastest" vectors 840ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org k = FRAMESAMPLES / 4; 841ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org __asm __volatile ( 842ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set push \n\t" 843ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set noreorder \n\t" 844ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre], %[inreQ7], 0 \n\t" 845ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inim], %[inimQ7], 0 \n\t" 846ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[outre1], %[outre1Q16], 0 \n\t" 847ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[outre2], %[outre2Q16], 0 \n\t" 848ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "bltz %[max], 2f \n\t" 849ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " subu %[max1], $zero, %[max] \n\t" 850ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "1: \n\t" 851ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lw %[r0], 0(%[outre1]) \n\t" 852ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lw %[r1], 0(%[outre2]) \n\t" 853ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lw %[r2], 4(%[outre1]) \n\t" 854ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lw %[r3], 4(%[outre2]) \n\t" 855ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r0], %[r0], %[max] \n\t" 856ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r1], %[r1], %[max] \n\t" 857ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r2], %[r2], %[max] \n\t" 858ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r3], %[r3], %[max] \n\t" 859ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[k], %[k], -1 \n\t" 860ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[outre1], %[outre1], 8 \n\t" 861ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[outre2], %[outre2], 8 \n\t" 862ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r0], 0(%[inre]) \n\t" 863ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r1], 0(%[inim]) \n\t" 864ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r2], 2(%[inre]) \n\t" 865ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r3], 2(%[inim]) \n\t" 866ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre], %[inre], 4 \n\t" 867ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "bgtz %[k], 1b \n\t" 868ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " addiu %[inim], %[inim], 4 \n\t" 869ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "b 4f \n\t" 870ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " nop \n\t" 871ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "2: \n\t" 872ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if !defined(MIPS_DSP_R1_LE) 873ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r4], $zero, 1 \n\t" 874ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r5], %[max1], -1 \n\t" 875ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r4], %[r4], %[r5] \n\t" 876ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if !defined(MIPS_DSP_R1_LE) 877ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "3: \n\t" 878ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lw %[r0], 0(%[outre1]) \n\t" 879ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lw %[r1], 0(%[outre2]) \n\t" 880ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lw %[r2], 4(%[outre1]) \n\t" 881ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lw %[r3], 4(%[outre2]) \n\t" 882ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 883ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shrav_r.w %[r0], %[r0], %[max1] \n\t" 884ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shrav_r.w %[r1], %[r1], %[max1] \n\t" 885ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shrav_r.w %[r2], %[r2], %[max1] \n\t" 886ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shrav_r.w %[r3], %[r3], %[max1] \n\t" 887ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 888ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r0], %[r0], %[r4] \n\t" 889ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r1], %[r1], %[r4] \n\t" 890ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r2], %[r2], %[r4] \n\t" 891ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r3], %[r3], %[r4] \n\t" 892ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "srav %[r0], %[r0], %[max1] \n\t" 893ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "srav %[r1], %[r1], %[max1] \n\t" 894ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "srav %[r2], %[r2], %[max1] \n\t" 895ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "srav %[r3], %[r3], %[max1] \n\t" 896ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 897ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[outre1], %[outre1], 8 \n\t" 898ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[outre2], %[outre2], 8 \n\t" 899ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r0], 0(%[inre]) \n\t" 900ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r1], 0(%[inim]) \n\t" 901ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r2], 2(%[inre]) \n\t" 902ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sh %[r3], 2(%[inim]) \n\t" 903ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[k], %[k], -1 \n\t" 904ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre], %[inre], 4 \n\t" 905ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "bgtz %[k], 3b \n\t" 906ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " addiu %[inim], %[inim], 4 \n\t" 907ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "4: \n\t" 908ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set pop \n\t" 909ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : [k] "+r" (k), [max1] "=&r" (max1), [r0] "=&r" (r0), 910ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [inre] "=&r" (inre), [inim] "=&r" (inim), 911ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [outre1] "=&r" (outre1), [outre2] "=&r" (outre2), 912ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if !defined(MIPS_DSP_R1_LE) 913ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [r4] "=&r" (r4), [r5] "=&r" (r5), 914ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if !defined(MIPS_DSP_R1_LE) 915ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [r1] "=&r" (r1), [r2] "=&r" (r2), [r3] "=&r" (r3) 916ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : [max] "r" (max), [inreQ7] "r" (inreQ7), 917ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [inimQ7] "r" (inimQ7), [outre1Q16] "r" (outre1Q16), 918ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [outre2Q16] "r" (outre2Q16) 919ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : "memory" 920ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ); 921ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org 922ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org WebRtcIsacfix_FftRadix16Fastest(inreQ7, inimQ7, 1); // real call 923ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org 924ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // All the remaining processing is done inside a single loop to avoid 925ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // unnecessary memory accesses. MIPS DSPr2 version processes two samples 926ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org // at a time. 927ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org cosptr = (int16_t*)WebRtcIsacfix_kCosTab1; 928ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org sinptr = (int16_t*)WebRtcIsacfix_kSinTab1; 929ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org k = FRAMESAMPLES / 2; 930ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org __asm __volatile ( 931ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set push \n\t" 932ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set noreorder \n\t" 933ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre], %[inreQ7], 0 \n\t" 934ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inim], %[inimQ7], 0 \n\t" 935ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[outre1], %[outre1Q16], 0 \n\t" 936ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[outre2], %[outre2Q16], 0 \n\t" 937ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r4], $zero, 273 \n\t" 938ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r5], $zero, 31727 \n\t" 939ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R2_LE) 940ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[max], %[max], 16 \n\t" 941ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "replv.ph %[r4], %[r4] \n\t" 942ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R2_LE) 943ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "bltz %[max], 2f \n\t" 944ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " subu %[max1], $zero, %[max] \n\t" 945ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R2_LE) 946ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[max], %[max], 1 \n\t" 947ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R2_LE) 948ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "1: \n\t" 949ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R2_LE) 950ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwl %[r0], 0(%[inre]) \n\t" 951ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwl %[r1], 0(%[inim]) \n\t" 952ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r2], 0(%[cosptr]) \n\t" 953ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwr %[r0], 0(%[inre]) \n\t" 954ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwr %[r1], 0(%[inim]) \n\t" 955ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r3], 0(%[sinptr]) \n\t" 956ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phr %[r6], %[r0], %[r4] \n\t" 957ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phr %[r7], %[r1], %[r4] \n\t" 958ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phl %[r0], %[r0], %[r4] \n\t" 959ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phl %[r1], %[r1], %[r4] \n\t" 960ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[k], %[k], -2 \n\t" 961ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre], %[inre], 4 \n\t" 962ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inim], %[inim], 4 \n\t" 963ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shrav_r.w %[r6], %[r6], %[max] \n\t" 964ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shrav_r.w %[r7], %[r7], %[max] \n\t" 965ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac0, %[r2], %[r6] \n\t" 966ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac1, %[r3], %[r7] \n\t" 967ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac2, %[r2], %[r7] \n\t" 968ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac3, %[r3], %[r6] \n\t" 969ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r2], 2(%[cosptr]) \n\t" 970ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r3], 2(%[sinptr]) \n\t" 971ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r6], $ac0, 14 \n\t" 972ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r7], $ac1, 14 \n\t" 973ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r8], $ac2, 14 \n\t" 974ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r9], $ac3, 14 \n\t" 975ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shrav_r.w %[r0], %[r0], %[max] \n\t" 976ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shrav_r.w %[r1], %[r1], %[max] \n\t" 977ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac0, %[r2], %[r0] \n\t" 978ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac1, %[r3], %[r1] \n\t" 979ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac2, %[r2], %[r1] \n\t" 980ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac3, %[r3], %[r0] \n\t" 981ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[cosptr], %[cosptr], 4 \n\t" 982ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r0], $ac0, 14 \n\t" 983ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r1], $ac1, 14 \n\t" 984ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r2], $ac2, 14 \n\t" 985ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r3], $ac3, 14 \n\t" 986ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r6], %[r6], %[r7] \n\t" 987ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r8], %[r8], %[r9] \n\t" 988ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac0, %[r5], %[r6] \n\t" 989ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac1, %[r5], %[r8] \n\t" 990ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[sinptr], %[sinptr], 4 \n\t" 991ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r0], %[r0], %[r1] \n\t" 992ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r2], %[r2], %[r3] \n\t" 993ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r1], $ac0, 11 \n\t" 994ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r3], $ac1, 11 \n\t" 995ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac2, %[r5], %[r0] \n\t" 996ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac3, %[r5], %[r2] \n\t" 997ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r1], 0(%[outre1]) \n\t" 998ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r3], 0(%[outre2]) \n\t" 999ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[outre1], %[outre1], 8 \n\t" 1000ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r0], $ac2, 11 \n\t" 1001ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r2], $ac3, 11 \n\t" 1002ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r0], -4(%[outre1]) \n\t" 1003ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r2], 4(%[outre2]) \n\t" 1004ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "bgtz %[k], 1b \n\t" 1005ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " addiu %[outre2], %[outre2], 8 \n\t" 1006ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "b 3f \n\t" 1007ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R2_LE) 1008ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r0], 0(%[inre]) \n\t" 1009ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r1], 0(%[inim]) \n\t" 1010ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[k], %[k], -1 \n\t" 1011ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "srav %[r0], %[r0], %[max] \n\t" 1012ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "srav %[r1], %[r1], %[max] \n\t" 1013ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r2], %[r0], 16 \n\t" 1014ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r0], %[r0], 0xFFFF \n\t" 1015ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r0], %[r0], 1 \n\t" 1016ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r3], %[r1], 16 \n\t" 1017ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r1], %[r1], 0xFFFF \n\t" 1018ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r1], %[r1], 1 \n\t" 1019ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r2], %[r2], %[r4] \n\t" 1020ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r0], %[r0], %[r4] \n\t" 1021ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r3], %[r3], %[r4] \n\t" 1022ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r1], %[r1], %[r4] \n\t" 1023ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre], %[inre], 2 \n\t" 1024ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inim], %[inim], 2 \n\t" 1025ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r6], 0(%[cosptr]) \n\t" 1026ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r7], 0(%[sinptr]) \n\t" 1027ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 1028ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r0], %[r0], 15 \n\t" 1029ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r1], %[r1], 15 \n\t" 1030ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 1031ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r0], %[r0], 0x4000 \n\t" 1032ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r1], %[r1], 0x4000 \n\t" 1033ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r0], %[r0], 15 \n\t" 1034ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r1], %[r1], 15 \n\t" 1035ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 1036ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r0], %[r2], %[r0] \n\t" 1037ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r1], %[r3], %[r1] \n\t" 1038ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r2], %[r0], 16 \n\t" 1039ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r0], %[r0], 0xFFFF \n\t" 1040ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r9], %[r2], %[r6] \n\t" 1041ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r2], %[r2], %[r7] \n\t" 1042ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r8], %[r0], %[r6] \n\t" 1043ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r0], %[r0], %[r7] \n\t" 1044ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r3], %[r3], 16 \n\t" 1045ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r1], %[r1], 0xFFFF \n\t" 1046ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r9], %[r9], 2 \n\t" 1047ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r2], %[r2], 2 \n\t" 1048ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 1049ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r8], %[r8], 14 \n\t" 1050ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r0], %[r0], 14 \n\t" 1051ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 1052ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r8], %[r8], 0x2000 \n\t" 1053ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r0], %[r0], 0x2000 \n\t" 1054ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r8], %[r8], 14 \n\t" 1055ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r0], %[r0], 14 \n\t" 1056ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 1057ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r9], %[r9], %[r8] \n\t" 1058ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r2], %[r2], %[r0] \n\t" 1059ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r0], %[r3], %[r6] \n\t" 1060ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r3], %[r3], %[r7] \n\t" 1061ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r8], %[r1], %[r6] \n\t" 1062ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r1], %[r1], %[r8] \n\t" 1063ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[cosptr], %[cosptr], 2 \n\t" 1064ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[sinptr], %[sinptr], 2 \n\t" 1065ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r0], %[r0], 2 \n\t" 1066ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r3], %[r3], 2 \n\t" 1067ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 1068ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r8], %[r8], 14 \n\t" 1069ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r1], %[r1], 14 \n\t" 1070ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 1071ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r8], %[r8], 0x2000 \n\t" 1072ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r1], %[r1], 0x2000 \n\t" 1073ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r8], %[r8], 14 \n\t" 1074ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r1], %[r1], 14 \n\t" 1075ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 1076ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r0], %[r0], %[r8] \n\t" 1077ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r3], %[r3], %[r1] \n\t" 1078ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r9], %[r9], %[r3] \n\t" 1079ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r0], %[r0], %[r2] \n\t" 1080ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r1], %[r9], 16 \n\t" 1081ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r9], %[r9], 0xFFFF \n\t" 1082ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r1], %[r1], %[r5] \n\t" 1083ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r9], %[r9], %[r5] \n\t" 1084ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r2], %[r0], 16 \n\t" 1085ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r0], %[r0], 0xFFFF \n\t" 1086ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r2], %[r2], %[r5] \n\t" 1087ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r0], %[r0], %[r5] \n\t" 1088ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r1], %[r1], 5 \n\t" 1089ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 1090ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r9], %[r9], 11 \n\t" 1091ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 1092ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r9], %[r9], 0x400 \n\t" 1093ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r9], %[r9], 11 \n\t" 1094ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 1095ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r1], %[r1], %[r9] \n\t" 1096ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r2], %[r2], 5 \n\t" 1097ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 1098ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r0], %[r0], 11 \n\t" 1099ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 1100ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r0], %[r0], 0x400 \n\t" 1101ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r0], %[r0], 11 \n\t" 1102ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 1103ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r0], %[r0], %[r2] \n\t" 1104ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r1], 0(%[outre1]) \n\t" 1105ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[outre1], %[outre1], 4 \n\t" 1106ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r0], 0(%[outre2]) \n\t" 1107ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "bgtz %[k], 1b \n\t" 1108ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " addiu %[outre2], %[outre2], 4 \n\t" 1109ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "b 3f \n\t" 1110ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " nop \n\t" 1111ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R2_LE) 1112ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "2: \n\t" 1113ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R2_LE) 1114ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[max1], %[max1], -1 \n\t" 1115ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "21: \n\t" 1116ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwl %[r0], 0(%[inre]) \n\t" 1117ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwl %[r1], 0(%[inim]) \n\t" 1118ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r2], 0(%[cosptr]) \n\t" 1119ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwr %[r0], 0(%[inre]) \n\t" 1120ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lwr %[r1], 0(%[inim]) \n\t" 1121ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r3], 0(%[sinptr]) \n\t" 1122ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phr %[r6], %[r0], %[r4] \n\t" 1123ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phr %[r7], %[r1], %[r4] \n\t" 1124ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phl %[r0], %[r0], %[r4] \n\t" 1125ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "muleq_s.w.phl %[r1], %[r1], %[r4] \n\t" 1126ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[k], %[k], -2 \n\t" 1127ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre], %[inre], 4 \n\t" 1128ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inim], %[inim], 4 \n\t" 1129ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r6], %[r6], %[max1] \n\t" 1130ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r7], %[r7], %[max1] \n\t" 1131ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac0, %[r2], %[r6] \n\t" 1132ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac1, %[r3], %[r7] \n\t" 1133ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac2, %[r2], %[r7] \n\t" 1134ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac3, %[r3], %[r6] \n\t" 1135ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r2], 2(%[cosptr]) \n\t" 1136ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r3], 2(%[sinptr]) \n\t" 1137ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r6], $ac0, 14 \n\t" 1138ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r7], $ac1, 14 \n\t" 1139ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r8], $ac2, 14 \n\t" 1140ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r9], $ac3, 14 \n\t" 1141ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r0], %[r0], %[max1] \n\t" 1142ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r1], %[r1], %[max1] \n\t" 1143ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac0, %[r2], %[r0] \n\t" 1144ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac1, %[r3], %[r1] \n\t" 1145ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac2, %[r2], %[r1] \n\t" 1146ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac3, %[r3], %[r0] \n\t" 1147ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[cosptr], %[cosptr], 4 \n\t" 1148ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r0], $ac0, 14 \n\t" 1149ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r1], $ac1, 14 \n\t" 1150ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r2], $ac2, 14 \n\t" 1151ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r3], $ac3, 14 \n\t" 1152ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r6], %[r6], %[r7] \n\t" 1153ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r8], %[r8], %[r9] \n\t" 1154ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac0, %[r5], %[r6] \n\t" 1155ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac1, %[r5], %[r8] \n\t" 1156ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[sinptr], %[sinptr], 4 \n\t" 1157ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r0], %[r0], %[r1] \n\t" 1158ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r2], %[r2], %[r3] \n\t" 1159ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r1], $ac0, 11 \n\t" 1160ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r3], $ac1, 11 \n\t" 1161ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac2, %[r5], %[r0] \n\t" 1162ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mult $ac3, %[r5], %[r2] \n\t" 1163ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r1], 0(%[outre1]) \n\t" 1164ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r3], 0(%[outre2]) \n\t" 1165ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[outre1], %[outre1], 8 \n\t" 1166ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r0], $ac2, 11 \n\t" 1167ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "extr_r.w %[r2], $ac3, 11 \n\t" 1168ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r0], -4(%[outre1]) \n\t" 1169ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r2], 4(%[outre2]) \n\t" 1170ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "bgtz %[k], 21b \n\t" 1171ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " addiu %[outre2], %[outre2], 8 \n\t" 1172ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "b 3f \n\t" 1173ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " nop \n\t" 1174ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R2_LE) 1175ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r0], 0(%[inre]) \n\t" 1176ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r1], 0(%[inim]) \n\t" 1177ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[k], %[k], -1 \n\t" 1178ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r0], %[r0], %[max1] \n\t" 1179ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sllv %[r1], %[r1], %[max1] \n\t" 1180ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r2], %[r0], 16 \n\t" 1181ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r0], %[r0], 0xFFFF \n\t" 1182ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r0], %[r0], 1 \n\t" 1183ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r3], %[r1], 16 \n\t" 1184ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r1], %[r1], 0xFFFF \n\t" 1185ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r1], %[r1], 1 \n\t" 1186ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r2], %[r2], %[r4] \n\t" 1187ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r0], %[r0], %[r4] \n\t" 1188ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r3], %[r3], %[r4] \n\t" 1189ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r1], %[r1], %[r4] \n\t" 1190ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inre], %[inre], 2 \n\t" 1191ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[inim], %[inim], 2 \n\t" 1192ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r6], 0(%[cosptr]) \n\t" 1193ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "lh %[r7], 0(%[sinptr]) \n\t" 1194ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 1195ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r0], %[r0], 15 \n\t" 1196ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r1], %[r1], 15 \n\t" 1197ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 1198ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r0], %[r0], 0x4000 \n\t" 1199ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r1], %[r1], 0x4000 \n\t" 1200ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r0], %[r0], 15 \n\t" 1201ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r1], %[r1], 15 \n\t" 1202ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 1203ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r0], %[r2], %[r0] \n\t" 1204ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r1], %[r3], %[r1] \n\t" 1205ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r2], %[r0], 16 \n\t" 1206ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r0], %[r0], 0xFFFF \n\t" 1207ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r9], %[r2], %[r6] \n\t" 1208ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r2], %[r2], %[r7] \n\t" 1209ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r8], %[r0], %[r6] \n\t" 1210ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r0], %[r0], %[r7] \n\t" 1211ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r3], %[r1], 16 \n\t" 1212ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r1], %[r1], 0xFFFF \n\t" 1213ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r9], %[r9], 2 \n\t" 1214ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r2], %[r2], 2 \n\t" 1215ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 1216ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r8], %[r8], 14 \n\t" 1217ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r0], %[r0], 14 \n\t" 1218ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 1219ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r8], %[r8], 0x2000 \n\t" 1220ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r0], %[r0], 0x2000 \n\t" 1221ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r8], %[r8], 14 \n\t" 1222ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r0], %[r0], 14 \n\t" 1223ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 1224ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r9], %[r9], %[r8] \n\t" 1225ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r2], %[r2], %[r0] \n\t" 1226ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r0], %[r3], %[r6] \n\t" 1227ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r3], %[r3], %[r7] \n\t" 1228ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r8], %[r1], %[r6] \n\t" 1229ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r1], %[r1], %[r7] \n\t" 1230ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[cosptr], %[cosptr], 2 \n\t" 1231ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[sinptr], %[sinptr], 2 \n\t" 1232ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r0], %[r0], 2 \n\t" 1233ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r3], %[r3], 2 \n\t" 1234ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 1235ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r8], %[r8], 14 \n\t" 1236ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r1], %[r1], 14 \n\t" 1237ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 1238ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r8], %[r8], 0x2000 \n\t" 1239ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r1], %[r1], 0x2000 \n\t" 1240ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r8], %[r8], 14 \n\t" 1241ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r1], %[r1], 14 \n\t" 1242ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 1243ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r0], %[r0], %[r8] \n\t" 1244ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r3], %[r3], %[r1] \n\t" 1245ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "subu %[r9], %[r9], %[r3] \n\t" 1246ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r0], %[r0], %[r2] \n\t" 1247ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r1], %[r9], 16 \n\t" 1248ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r9], %[r9], 0xFFFF \n\t" 1249ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r1], %[r1], %[r5] \n\t" 1250ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r9], %[r9], %[r5] \n\t" 1251ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r2], %[r0], 16 \n\t" 1252ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "andi %[r0], %[r0], 0xFFFF \n\t" 1253ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r2], %[r2], %[r5] \n\t" 1254ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "mul %[r0], %[r0], %[r5] \n\t" 1255ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r1], %[r1], 5 \n\t" 1256ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 1257ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r9], %[r9], 11 \n\t" 1258ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 1259ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r9], %[r9], 0x400 \n\t" 1260ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r9], %[r9], 11 \n\t" 1261ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 1262ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r1], %[r1], %[r9] \n\t" 1263ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sll %[r2], %[r2], 5 \n\t" 1264ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R1_LE) 1265ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "shra_r.w %[r0], %[r0], 11 \n\t" 1266ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#else // #if defined(MIPS_DSP_R1_LE) 1267ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[r0], %[r0], 0x400 \n\t" 1268ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sra %[r0], %[r0], 11 \n\t" 1269ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R1_LE) 1270ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addu %[r0], %[r0], %[r2] \n\t" 1271ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r1], 0(%[outre1]) \n\t" 1272ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "addiu %[outre1], %[outre1], 4 \n\t" 1273ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "sw %[r0], 0(%[outre2]) \n\t" 1274ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "bgtz %[k], 2b \n\t" 1275ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org " addiu %[outre2], %[outre2], 4 \n\t" 1276ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R2_LE) 1277ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org "3: \n\t" 1278ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ".set pop \n\t" 1279ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : [k] "+r" (k), [r0] "=&r" (r0), [r1] "=&r" (r1), 1280ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [r2] "=&r" (r2), [r3] "=&r" (r3), [r4] "=&r" (r4), 1281ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [r5] "=&r" (r5), [r6] "=&r" (r6), [r7] "=&r" (r7), 1282ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [r8] "=&r" (r8), [r9] "=&r" (r9), [max1] "=&r" (max1), 1283ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [inre] "=&r" (inre), [inim] "=&r" (inim), 1284ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [outre1] "=&r" (outre1), [outre2] "=&r" (outre2) 1285ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : [max] "r" (max), [inreQ7] "r" (inreQ7), 1286ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [inimQ7] "r" (inimQ7), [cosptr] "r" (cosptr), 1287ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [sinptr] "r" (sinptr), [outre1Q16] "r" (outre1Q16), 1288ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org [outre2Q16] "r" (outre2Q16) 1289ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org : "hi", "lo", "memory" 1290ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#if defined(MIPS_DSP_R2_LE) 1291ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org , "$ac1hi", "$ac1lo", "$ac2hi", "$ac2lo", "$ac3hi", "$ac3lo" 1292ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org#endif // #if defined(MIPS_DSP_R2_LE) 1293ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org ); 1294ceafa8cce9554b0777aa3cbdf70236e1fbabb414andrew@webrtc.org} 1295