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