/*
 *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#include "webrtc/modules/audio_processing/aecm/aecm_core.h"

#include <assert.h>

#include "webrtc/modules/audio_processing/aecm/include/echo_control_mobile.h"
#include "webrtc/modules/audio_processing/utility/delay_estimator_wrapper.h"

static const ALIGN8_BEG int16_t WebRtcAecm_kSqrtHanning[] ALIGN8_END = {
  0, 399, 798, 1196, 1594, 1990, 2386, 2780, 3172,
  3562, 3951, 4337, 4720, 5101, 5478, 5853, 6224,
  6591, 6954, 7313, 7668, 8019, 8364, 8705, 9040,
  9370, 9695, 10013, 10326, 10633, 10933, 11227, 11514,
  11795, 12068, 12335, 12594, 12845, 13089, 13325, 13553,
  13773, 13985, 14189, 14384, 14571, 14749, 14918, 15079,
  15231, 15373, 15506, 15631, 15746, 15851, 15947, 16034,
  16111, 16179, 16237, 16286, 16325, 16354, 16373, 16384
};

static const int16_t kNoiseEstQDomain = 15;
static const int16_t kNoiseEstIncCount = 5;

static int16_t coefTable[] = {
   0,   4, 256, 260, 128, 132, 384, 388,
  64,  68, 320, 324, 192, 196, 448, 452,
  32,  36, 288, 292, 160, 164, 416, 420,
  96, 100, 352, 356, 224, 228, 480, 484,
  16,  20, 272, 276, 144, 148, 400, 404,
  80,  84, 336, 340, 208, 212, 464, 468,
  48,  52, 304, 308, 176, 180, 432, 436,
 112, 116, 368, 372, 240, 244, 496, 500,
   8,  12, 264, 268, 136, 140, 392, 396,
  72,  76, 328, 332, 200, 204, 456, 460,
  40,  44, 296, 300, 168, 172, 424, 428,
 104, 108, 360, 364, 232, 236, 488, 492,
  24,  28, 280, 284, 152, 156, 408, 412,
  88,  92, 344, 348, 216, 220, 472, 476,
  56,  60, 312, 316, 184, 188, 440, 444,
 120, 124, 376, 380, 248, 252, 504, 508
};

static int16_t coefTable_ifft[] = {
    0, 512, 256, 508, 128, 252, 384, 380,
   64, 124, 320, 444, 192, 188, 448, 316,
   32,  60, 288, 476, 160, 220, 416, 348,
   96,  92, 352, 412, 224, 156, 480, 284,
   16,  28, 272, 492, 144, 236, 400, 364,
   80, 108, 336, 428, 208, 172, 464, 300,
   48,  44, 304, 460, 176, 204, 432, 332,
  112,  76, 368, 396, 240, 140, 496, 268,
    8,  12, 264, 500, 136, 244, 392, 372,
   72, 116, 328, 436, 200, 180, 456, 308,
   40,  52, 296, 468, 168, 212, 424, 340,
  104,  84, 360, 404, 232, 148, 488, 276,
   24,  20, 280, 484, 152, 228, 408, 356,
   88, 100, 344, 420, 216, 164, 472, 292,
   56,  36, 312, 452, 184, 196, 440, 324,
  120,  68, 376, 388, 248, 132, 504, 260
};

static void ComfortNoise(AecmCore* aecm,
                         const uint16_t* dfa,
                         ComplexInt16* out,
                         const int16_t* lambda);

static void WindowAndFFT(AecmCore* aecm,
                         int16_t* fft,
                         const int16_t* time_signal,
                         ComplexInt16* freq_signal,
                         int time_signal_scaling) {
  int i, j;
  int32_t tmp1, tmp2, tmp3, tmp4;
  int16_t* pfrfi;
  ComplexInt16* pfreq_signal;
  int16_t  f_coef, s_coef;
  int32_t load_ptr, store_ptr1, store_ptr2, shift, shift1;
  int32_t hann, hann1, coefs;

  memset(fft, 0, sizeof(int16_t) * PART_LEN4);

  // FFT of signal
  __asm __volatile (
    ".set        push                                                    \n\t"
    ".set        noreorder                                               \n\t"
    "addiu       %[shift],          %[time_signal_scaling], -14          \n\t"
    "addiu       %[i],              $zero,                  64           \n\t"
    "addiu       %[load_ptr],       %[time_signal],         0            \n\t"
    "addiu       %[hann],           %[hanning],             0            \n\t"
    "addiu       %[hann1],          %[hanning],             128          \n\t"
    "addiu       %[coefs],          %[coefTable],           0            \n\t"
    "bltz        %[shift],          2f                                   \n\t"
    " negu       %[shift1],         %[shift]                             \n\t"
   "1:                                                                   \n\t"
    "lh          %[tmp1],           0(%[load_ptr])                       \n\t"
    "lh          %[tmp2],           0(%[hann])                           \n\t"
    "lh          %[tmp3],           128(%[load_ptr])                     \n\t"
    "lh          %[tmp4],           0(%[hann1])                          \n\t"
    "addiu       %[i],              %[i],                   -1           \n\t"
    "mul         %[tmp1],           %[tmp1],                %[tmp2]      \n\t"
    "mul         %[tmp3],           %[tmp3],                %[tmp4]      \n\t"
    "lh          %[f_coef],         0(%[coefs])                          \n\t"
    "lh          %[s_coef],         2(%[coefs])                          \n\t"
    "addiu       %[load_ptr],       %[load_ptr],            2            \n\t"
    "addiu       %[hann],           %[hann],                2            \n\t"
    "addiu       %[hann1],          %[hann1],               -2           \n\t"
    "addu        %[store_ptr1],     %[fft],                 %[f_coef]    \n\t"
    "addu        %[store_ptr2],     %[fft],                 %[s_coef]    \n\t"
    "sllv        %[tmp1],           %[tmp1],                %[shift]     \n\t"
    "sllv        %[tmp3],           %[tmp3],                %[shift]     \n\t"
    "sh          %[tmp1],           0(%[store_ptr1])                     \n\t"
    "sh          %[tmp3],           0(%[store_ptr2])                     \n\t"
    "bgtz        %[i],              1b                                   \n\t"
    " addiu      %[coefs],          %[coefs],               4            \n\t"
    "b           3f                                                      \n\t"
    " nop                                                                \n\t"
   "2:                                                                   \n\t"
    "lh          %[tmp1],           0(%[load_ptr])                       \n\t"
    "lh          %[tmp2],           0(%[hann])                           \n\t"
    "lh          %[tmp3],           128(%[load_ptr])                     \n\t"
    "lh          %[tmp4],           0(%[hann1])                          \n\t"
    "addiu       %[i],              %[i],                   -1           \n\t"
    "mul         %[tmp1],           %[tmp1],                %[tmp2]      \n\t"
    "mul         %[tmp3],           %[tmp3],                %[tmp4]      \n\t"
    "lh          %[f_coef],         0(%[coefs])                          \n\t"
    "lh          %[s_coef],         2(%[coefs])                          \n\t"
    "addiu       %[load_ptr],       %[load_ptr],            2            \n\t"
    "addiu       %[hann],           %[hann],                2            \n\t"
    "addiu       %[hann1],          %[hann1],               -2           \n\t"
    "addu        %[store_ptr1],     %[fft],                 %[f_coef]    \n\t"
    "addu        %[store_ptr2],     %[fft],                 %[s_coef]    \n\t"
    "srav        %[tmp1],           %[tmp1],                %[shift1]    \n\t"
    "srav        %[tmp3],           %[tmp3],                %[shift1]    \n\t"
    "sh          %[tmp1],           0(%[store_ptr1])                     \n\t"
    "sh          %[tmp3],           0(%[store_ptr2])                     \n\t"
    "bgtz        %[i],              2b                                   \n\t"
    " addiu      %[coefs],          %[coefs],               4            \n\t"
   "3:                                                                   \n\t"
    ".set        pop                                                     \n\t"
    : [load_ptr] "=&r" (load_ptr), [shift] "=&r" (shift), [hann] "=&r" (hann),
      [hann1] "=&r" (hann1), [shift1] "=&r" (shift1), [coefs] "=&r" (coefs),
      [tmp1] "=&r" (tmp1), [tmp2] "=&r" (tmp2), [tmp3] "=&r" (tmp3),
      [tmp4] "=&r" (tmp4), [i] "=&r" (i), [f_coef] "=&r" (f_coef),
      [s_coef] "=&r" (s_coef), [store_ptr1] "=&r" (store_ptr1),
      [store_ptr2] "=&r" (store_ptr2)
    : [time_signal] "r" (time_signal), [coefTable] "r" (coefTable),
      [time_signal_scaling] "r" (time_signal_scaling),
      [hanning] "r" (WebRtcAecm_kSqrtHanning), [fft] "r" (fft)
    : "memory", "hi", "lo"
  );

  WebRtcSpl_ComplexFFT(fft, PART_LEN_SHIFT, 1);
  pfrfi = fft;
  pfreq_signal = freq_signal;

  __asm __volatile (
    ".set        push                                                     \n\t"
    ".set        noreorder                                                \n\t"
    "addiu       %[j],              $zero,                 128            \n\t"
   "1:                                                                    \n\t"
    "lh          %[tmp1],           0(%[pfrfi])                           \n\t"
    "lh          %[tmp2],           2(%[pfrfi])                           \n\t"
    "lh          %[tmp3],           4(%[pfrfi])                           \n\t"
    "lh          %[tmp4],           6(%[pfrfi])                           \n\t"
    "subu        %[tmp2],           $zero,                 %[tmp2]        \n\t"
    "sh          %[tmp1],           0(%[pfreq_signal])                    \n\t"
    "sh          %[tmp2],           2(%[pfreq_signal])                    \n\t"
    "subu        %[tmp4],           $zero,                 %[tmp4]        \n\t"
    "sh          %[tmp3],           4(%[pfreq_signal])                    \n\t"
    "sh          %[tmp4],           6(%[pfreq_signal])                    \n\t"
    "lh          %[tmp1],           8(%[pfrfi])                           \n\t"
    "lh          %[tmp2],           10(%[pfrfi])                          \n\t"
    "lh          %[tmp3],           12(%[pfrfi])                          \n\t"
    "lh          %[tmp4],           14(%[pfrfi])                          \n\t"
    "addiu       %[j],              %[j],                  -8             \n\t"
    "subu        %[tmp2],           $zero,                 %[tmp2]        \n\t"
    "sh          %[tmp1],           8(%[pfreq_signal])                    \n\t"
    "sh          %[tmp2],           10(%[pfreq_signal])                   \n\t"
    "subu        %[tmp4],           $zero,                 %[tmp4]        \n\t"
    "sh          %[tmp3],           12(%[pfreq_signal])                   \n\t"
    "sh          %[tmp4],           14(%[pfreq_signal])                   \n\t"
    "addiu       %[pfreq_signal],   %[pfreq_signal],       16             \n\t"
    "bgtz        %[j],              1b                                    \n\t"
    " addiu      %[pfrfi],          %[pfrfi],              16             \n\t"
    ".set        pop                                                      \n\t"
    : [tmp1] "=&r" (tmp1), [tmp2] "=&r" (tmp2), [tmp3] "=&r" (tmp3),
      [j] "=&r" (j), [pfrfi] "+r" (pfrfi), [pfreq_signal] "+r" (pfreq_signal),
      [tmp4] "=&r" (tmp4)
    :
    : "memory"
  );
}

static void InverseFFTAndWindow(AecmCore* aecm,
                                int16_t* fft,
                                ComplexInt16* efw,
                                int16_t* output,
                                const int16_t* nearendClean) {
  int i, outCFFT;
  int32_t tmp1, tmp2, tmp3, tmp4, tmp_re, tmp_im;
  int16_t* pcoefTable_ifft = coefTable_ifft;
  int16_t* pfft = fft;
  int16_t* ppfft = fft;
  ComplexInt16* pefw = efw;
  int32_t out_aecm;
  int16_t* paecm_buf = aecm->outBuf;
  const int16_t* p_kSqrtHanning = WebRtcAecm_kSqrtHanning;
  const int16_t* pp_kSqrtHanning = &WebRtcAecm_kSqrtHanning[PART_LEN];
  int16_t* output1 = output;

  __asm __volatile (
    ".set      push                                                        \n\t"
    ".set      noreorder                                                   \n\t"
    "addiu     %[i],                $zero,                   64            \n\t"
   "1:                                                                     \n\t"
    "lh        %[tmp1],             0(%[pcoefTable_ifft])                  \n\t"
    "lh        %[tmp2],             2(%[pcoefTable_ifft])                  \n\t"
    "lh        %[tmp_re],           0(%[pefw])                             \n\t"
    "lh        %[tmp_im],           2(%[pefw])                             \n\t"
    "addu      %[pfft],             %[fft],                  %[tmp2]       \n\t"
    "sh        %[tmp_re],           0(%[pfft])                             \n\t"
    "sh        %[tmp_im],           2(%[pfft])                             \n\t"
    "addu      %[pfft],             %[fft],                  %[tmp1]       \n\t"
    "sh        %[tmp_re],           0(%[pfft])                             \n\t"
    "subu      %[tmp_im],           $zero,                   %[tmp_im]     \n\t"
    "sh        %[tmp_im],           2(%[pfft])                             \n\t"
    "lh        %[tmp1],             4(%[pcoefTable_ifft])                  \n\t"
    "lh        %[tmp2],             6(%[pcoefTable_ifft])                  \n\t"
    "lh        %[tmp_re],           4(%[pefw])                             \n\t"
    "lh        %[tmp_im],           6(%[pefw])                             \n\t"
    "addu      %[pfft],             %[fft],                  %[tmp2]       \n\t"
    "sh        %[tmp_re],           0(%[pfft])                             \n\t"
    "sh        %[tmp_im],           2(%[pfft])                             \n\t"
    "addu      %[pfft],             %[fft],                  %[tmp1]       \n\t"
    "sh        %[tmp_re],           0(%[pfft])                             \n\t"
    "subu      %[tmp_im],           $zero,                   %[tmp_im]     \n\t"
    "sh        %[tmp_im],           2(%[pfft])                             \n\t"
    "lh        %[tmp1],             8(%[pcoefTable_ifft])                  \n\t"
    "lh        %[tmp2],             10(%[pcoefTable_ifft])                 \n\t"
    "lh        %[tmp_re],           8(%[pefw])                             \n\t"
    "lh        %[tmp_im],           10(%[pefw])                            \n\t"
    "addu      %[pfft],             %[fft],                  %[tmp2]       \n\t"
    "sh        %[tmp_re],           0(%[pfft])                             \n\t"
    "sh        %[tmp_im],           2(%[pfft])                             \n\t"
    "addu      %[pfft],             %[fft],                  %[tmp1]       \n\t"
    "sh        %[tmp_re],           0(%[pfft])                             \n\t"
    "subu      %[tmp_im],           $zero,                   %[tmp_im]     \n\t"
    "sh        %[tmp_im],           2(%[pfft])                             \n\t"
    "lh        %[tmp1],             12(%[pcoefTable_ifft])                 \n\t"
    "lh        %[tmp2],             14(%[pcoefTable_ifft])                 \n\t"
    "lh        %[tmp_re],           12(%[pefw])                            \n\t"
    "lh        %[tmp_im],           14(%[pefw])                            \n\t"
    "addu      %[pfft],             %[fft],                  %[tmp2]       \n\t"
    "sh        %[tmp_re],           0(%[pfft])                             \n\t"
    "sh        %[tmp_im],           2(%[pfft])                             \n\t"
    "addu      %[pfft],             %[fft],                  %[tmp1]       \n\t"
    "sh        %[tmp_re],           0(%[pfft])                             \n\t"
    "subu      %[tmp_im],           $zero,                   %[tmp_im]     \n\t"
    "sh        %[tmp_im],           2(%[pfft])                             \n\t"
    "addiu     %[pcoefTable_ifft],  %[pcoefTable_ifft],      16            \n\t"
    "addiu     %[i],                %[i],                    -4            \n\t"
    "bgtz      %[i],                1b                                     \n\t"
    " addiu    %[pefw],             %[pefw],                 16            \n\t"
    ".set      pop                                                         \n\t"
    : [tmp1] "=&r" (tmp1), [tmp2] "=&r" (tmp2), [pfft] "+r" (pfft),
      [i] "=&r" (i), [tmp_re] "=&r" (tmp_re), [tmp_im] "=&r" (tmp_im),
      [pefw] "+r" (pefw), [pcoefTable_ifft] "+r" (pcoefTable_ifft),
      [fft] "+r" (fft)
    :
    : "memory"
  );

  fft[2] = efw[PART_LEN].real;
  fft[3] = -efw[PART_LEN].imag;

  outCFFT = WebRtcSpl_ComplexIFFT(fft, PART_LEN_SHIFT, 1);
  pfft = fft;

  __asm __volatile (
    ".set       push                                               \n\t"
    ".set       noreorder                                          \n\t"
    "addiu      %[i],            $zero,               128          \n\t"
   "1:                                                             \n\t"
    "lh         %[tmp1],         0(%[ppfft])                       \n\t"
    "lh         %[tmp2],         4(%[ppfft])                       \n\t"
    "lh         %[tmp3],         8(%[ppfft])                       \n\t"
    "lh         %[tmp4],         12(%[ppfft])                      \n\t"
    "addiu      %[i],            %[i],                -4           \n\t"
    "sh         %[tmp1],         0(%[pfft])                        \n\t"
    "sh         %[tmp2],         2(%[pfft])                        \n\t"
    "sh         %[tmp3],         4(%[pfft])                        \n\t"
    "sh         %[tmp4],         6(%[pfft])                        \n\t"
    "addiu      %[ppfft],        %[ppfft],            16           \n\t"
    "bgtz       %[i],            1b                                \n\t"
    " addiu     %[pfft],         %[pfft],             8            \n\t"
    ".set       pop                                                \n\t"
    : [tmp1] "=&r" (tmp1), [tmp2] "=&r" (tmp2), [pfft] "+r" (pfft),
      [i] "=&r" (i), [tmp3] "=&r" (tmp3), [tmp4] "=&r" (tmp4),
      [ppfft] "+r" (ppfft)
    :
    : "memory"
  );

  pfft = fft;
  out_aecm = (int32_t)(outCFFT - aecm->dfaCleanQDomain);

  __asm __volatile (
    ".set       push                                                       \n\t"
    ".set       noreorder                                                  \n\t"
    "addiu      %[i],                $zero,                  64            \n\t"
   "11:                                                                    \n\t"
    "lh         %[tmp1],             0(%[pfft])                            \n\t"
    "lh         %[tmp2],             0(%[p_kSqrtHanning])                  \n\t"
    "addiu      %[i],                %[i],                   -2            \n\t"
    "mul        %[tmp1],             %[tmp1],                %[tmp2]       \n\t"
    "lh         %[tmp3],             2(%[pfft])                            \n\t"
    "lh         %[tmp4],             2(%[p_kSqrtHanning])                  \n\t"
    "mul        %[tmp3],             %[tmp3],                %[tmp4]       \n\t"
    "addiu      %[tmp1],             %[tmp1],                8192          \n\t"
    "sra        %[tmp1],             %[tmp1],                14            \n\t"
    "addiu      %[tmp3],             %[tmp3],                8192          \n\t"
    "sra        %[tmp3],             %[tmp3],                14            \n\t"
    "bgez       %[out_aecm],         1f                                    \n\t"
    " negu      %[tmp2],             %[out_aecm]                           \n\t"
    "srav       %[tmp1],             %[tmp1],                %[tmp2]       \n\t"
    "b          2f                                                         \n\t"
    " srav      %[tmp3],             %[tmp3],                %[tmp2]       \n\t"
   "1:                                                                     \n\t"
    "sllv       %[tmp1],             %[tmp1],                %[out_aecm]   \n\t"
    "sllv       %[tmp3],             %[tmp3],                %[out_aecm]   \n\t"
   "2:                                                                     \n\t"
    "lh         %[tmp4],             0(%[paecm_buf])                       \n\t"
    "lh         %[tmp2],             2(%[paecm_buf])                       \n\t"
    "addu       %[tmp3],             %[tmp3],                %[tmp2]       \n\t"
    "addu       %[tmp1],             %[tmp1],                %[tmp4]       \n\t"
#if defined(MIPS_DSP_R1_LE)
    "shll_s.w   %[tmp1],             %[tmp1],                16            \n\t"
    "sra        %[tmp1],             %[tmp1],                16            \n\t"
    "shll_s.w   %[tmp3],             %[tmp3],                16            \n\t"
    "sra        %[tmp3],             %[tmp3],                16            \n\t"
#else  // #if defined(MIPS_DSP_R1_LE)
    "sra        %[tmp4],             %[tmp1],                31            \n\t"
    "sra        %[tmp2],             %[tmp1],                15            \n\t"
    "beq        %[tmp4],             %[tmp2],                3f            \n\t"
    " ori       %[tmp2],             $zero,                  0x7fff        \n\t"
    "xor        %[tmp1],             %[tmp2],                %[tmp4]       \n\t"
   "3:                                                                     \n\t"
    "sra        %[tmp2],             %[tmp3],                31            \n\t"
    "sra        %[tmp4],             %[tmp3],                15            \n\t"
    "beq        %[tmp2],             %[tmp4],                4f            \n\t"
    " ori       %[tmp4],             $zero,                  0x7fff        \n\t"
    "xor        %[tmp3],             %[tmp4],                %[tmp2]       \n\t"
   "4:                                                                     \n\t"
#endif  // #if defined(MIPS_DSP_R1_LE)
    "sh         %[tmp1],             0(%[pfft])                            \n\t"
    "sh         %[tmp1],             0(%[output1])                         \n\t"
    "sh         %[tmp3],             2(%[pfft])                            \n\t"
    "sh         %[tmp3],             2(%[output1])                         \n\t"
    "lh         %[tmp1],             128(%[pfft])                          \n\t"
    "lh         %[tmp2],             0(%[pp_kSqrtHanning])                 \n\t"
    "mul        %[tmp1],             %[tmp1],                %[tmp2]       \n\t"
    "lh         %[tmp3],             130(%[pfft])                          \n\t"
    "lh         %[tmp4],             -2(%[pp_kSqrtHanning])                \n\t"
    "mul        %[tmp3],             %[tmp3],                %[tmp4]       \n\t"
    "sra        %[tmp1],             %[tmp1],                14            \n\t"
    "sra        %[tmp3],             %[tmp3],                14            \n\t"
    "bgez       %[out_aecm],         5f                                    \n\t"
    " negu      %[tmp2],             %[out_aecm]                           \n\t"
    "srav       %[tmp3],             %[tmp3],                %[tmp2]       \n\t"
    "b          6f                                                         \n\t"
    " srav      %[tmp1],             %[tmp1],                %[tmp2]       \n\t"
   "5:                                                                     \n\t"
    "sllv       %[tmp1],             %[tmp1],                %[out_aecm]   \n\t"
    "sllv       %[tmp3],             %[tmp3],                %[out_aecm]   \n\t"
   "6:                                                                     \n\t"
#if defined(MIPS_DSP_R1_LE)
    "shll_s.w   %[tmp1],             %[tmp1],                16            \n\t"
    "sra        %[tmp1],             %[tmp1],                16            \n\t"
    "shll_s.w   %[tmp3],             %[tmp3],                16            \n\t"
    "sra        %[tmp3],             %[tmp3],                16            \n\t"
#else  // #if defined(MIPS_DSP_R1_LE)
    "sra        %[tmp4],             %[tmp1],                31            \n\t"
    "sra        %[tmp2],             %[tmp1],                15            \n\t"
    "beq        %[tmp4],             %[tmp2],                7f            \n\t"
    " ori       %[tmp2],             $zero,                  0x7fff        \n\t"
    "xor        %[tmp1],             %[tmp2],                %[tmp4]       \n\t"
   "7:                                                                     \n\t"
    "sra        %[tmp2],             %[tmp3],                31            \n\t"
    "sra        %[tmp4],             %[tmp3],                15            \n\t"
    "beq        %[tmp2],             %[tmp4],                8f            \n\t"
    " ori       %[tmp4],             $zero,                  0x7fff        \n\t"
    "xor        %[tmp3],             %[tmp4],                %[tmp2]       \n\t"
   "8:                                                                     \n\t"
#endif  // #if defined(MIPS_DSP_R1_LE)
    "sh         %[tmp1],             0(%[paecm_buf])                       \n\t"
    "sh         %[tmp3],             2(%[paecm_buf])                       \n\t"
    "addiu      %[output1],          %[output1],             4             \n\t"
    "addiu      %[paecm_buf],        %[paecm_buf],           4             \n\t"
    "addiu      %[pfft],             %[pfft],                4             \n\t"
    "addiu      %[p_kSqrtHanning],   %[p_kSqrtHanning],      4             \n\t"
    "bgtz       %[i],                11b                                   \n\t"
    " addiu     %[pp_kSqrtHanning],  %[pp_kSqrtHanning],     -4            \n\t"
    ".set       pop                                                        \n\t"
    : [tmp1] "=&r" (tmp1), [tmp2] "=&r" (tmp2), [pfft] "+r" (pfft),
      [output1] "+r" (output1), [tmp3] "=&r" (tmp3), [tmp4] "=&r" (tmp4),
      [paecm_buf] "+r" (paecm_buf), [i] "=&r" (i),
      [pp_kSqrtHanning] "+r" (pp_kSqrtHanning),
      [p_kSqrtHanning] "+r" (p_kSqrtHanning)
    : [out_aecm] "r" (out_aecm),
      [WebRtcAecm_kSqrtHanning] "r" (WebRtcAecm_kSqrtHanning)
    : "hi", "lo","memory"
  );

  // Copy the current block to the old position
  // (aecm->outBuf is shifted elsewhere)
  memcpy(aecm->xBuf, aecm->xBuf + PART_LEN, sizeof(int16_t) * PART_LEN);
  memcpy(aecm->dBufNoisy,
         aecm->dBufNoisy + PART_LEN,
         sizeof(int16_t) * PART_LEN);
  if (nearendClean != NULL) {
    memcpy(aecm->dBufClean,
           aecm->dBufClean + PART_LEN,
           sizeof(int16_t) * PART_LEN);
  }
}

void WebRtcAecm_CalcLinearEnergies_mips(AecmCore* aecm,
                                        const uint16_t* far_spectrum,
                                        int32_t* echo_est,
                                        uint32_t* far_energy,
                                        uint32_t* echo_energy_adapt,
                                        uint32_t* echo_energy_stored) {
  int i;
  uint32_t par1 = (*far_energy);
  uint32_t par2 = (*echo_energy_adapt);
  uint32_t par3 = (*echo_energy_stored);
  int16_t* ch_stored_p = &(aecm->channelStored[0]);
  int16_t* ch_adapt_p = &(aecm->channelAdapt16[0]);
  uint16_t* spectrum_p = (uint16_t*)(&(far_spectrum[0]));
  int32_t* echo_p = &(echo_est[0]);
  int32_t temp0, stored0, echo0, adept0, spectrum0;
  int32_t stored1, adept1, spectrum1, echo1, temp1;

  // Get energy for the delayed far end signal and estimated
  // echo using both stored and adapted channels.
  for (i = 0; i < PART_LEN; i+= 4) {
    __asm __volatile (
      ".set           push                                            \n\t"
      ".set           noreorder                                       \n\t"
      "lh             %[stored0],     0(%[ch_stored_p])               \n\t"
      "lhu            %[adept0],      0(%[ch_adapt_p])                \n\t"
      "lhu            %[spectrum0],   0(%[spectrum_p])                \n\t"
      "lh             %[stored1],     2(%[ch_stored_p])               \n\t"
      "lhu            %[adept1],      2(%[ch_adapt_p])                \n\t"
      "lhu            %[spectrum1],   2(%[spectrum_p])                \n\t"
      "mul            %[echo0],       %[stored0],     %[spectrum0]    \n\t"
      "mul            %[temp0],       %[adept0],      %[spectrum0]    \n\t"
      "mul            %[echo1],       %[stored1],     %[spectrum1]    \n\t"
      "mul            %[temp1],       %[adept1],      %[spectrum1]    \n\t"
      "addu           %[par1],        %[par1],        %[spectrum0]    \n\t"
      "addu           %[par1],        %[par1],        %[spectrum1]    \n\t"
      "addiu          %[echo_p],      %[echo_p],      16              \n\t"
      "addu           %[par3],        %[par3],        %[echo0]        \n\t"
      "addu           %[par2],        %[par2],        %[temp0]        \n\t"
      "addu           %[par3],        %[par3],        %[echo1]        \n\t"
      "addu           %[par2],        %[par2],        %[temp1]        \n\t"
      "usw            %[echo0],       -16(%[echo_p])                  \n\t"
      "usw            %[echo1],       -12(%[echo_p])                  \n\t"
      "lh             %[stored0],     4(%[ch_stored_p])               \n\t"
      "lhu            %[adept0],      4(%[ch_adapt_p])                \n\t"
      "lhu            %[spectrum0],   4(%[spectrum_p])                \n\t"
      "lh             %[stored1],     6(%[ch_stored_p])               \n\t"
      "lhu            %[adept1],      6(%[ch_adapt_p])                \n\t"
      "lhu            %[spectrum1],   6(%[spectrum_p])                \n\t"
      "mul            %[echo0],       %[stored0],     %[spectrum0]    \n\t"
      "mul            %[temp0],       %[adept0],      %[spectrum0]    \n\t"
      "mul            %[echo1],       %[stored1],     %[spectrum1]    \n\t"
      "mul            %[temp1],       %[adept1],      %[spectrum1]    \n\t"
      "addu           %[par1],        %[par1],        %[spectrum0]    \n\t"
      "addu           %[par1],        %[par1],        %[spectrum1]    \n\t"
      "addiu          %[ch_stored_p], %[ch_stored_p], 8               \n\t"
      "addiu          %[ch_adapt_p],  %[ch_adapt_p],  8               \n\t"
      "addiu          %[spectrum_p],  %[spectrum_p],  8               \n\t"
      "addu           %[par3],        %[par3],        %[echo0]        \n\t"
      "addu           %[par2],        %[par2],        %[temp0]        \n\t"
      "addu           %[par3],        %[par3],        %[echo1]        \n\t"
      "addu           %[par2],        %[par2],        %[temp1]        \n\t"
      "usw            %[echo0],       -8(%[echo_p])                   \n\t"
      "usw            %[echo1],       -4(%[echo_p])                   \n\t"
      ".set           pop                                             \n\t"
      : [temp0] "=&r" (temp0), [stored0] "=&r" (stored0),
        [adept0] "=&r" (adept0), [spectrum0] "=&r" (spectrum0),
        [echo0] "=&r" (echo0), [echo_p] "+r" (echo_p), [par3] "+r" (par3),
        [par1] "+r" (par1), [par2] "+r" (par2), [stored1] "=&r" (stored1),
        [adept1] "=&r" (adept1), [echo1] "=&r" (echo1),
        [spectrum1] "=&r" (spectrum1), [temp1] "=&r" (temp1),
        [ch_stored_p] "+r" (ch_stored_p), [ch_adapt_p] "+r" (ch_adapt_p),
        [spectrum_p] "+r" (spectrum_p)
      :
      : "hi", "lo", "memory"
    );
  }

  echo_est[PART_LEN] = WEBRTC_SPL_MUL_16_U16(aecm->channelStored[PART_LEN],
                                             far_spectrum[PART_LEN]);
  par1 += (uint32_t)(far_spectrum[PART_LEN]);
  par2 += aecm->channelAdapt16[PART_LEN] * far_spectrum[PART_LEN];
  par3 += (uint32_t)echo_est[PART_LEN];

  (*far_energy) = par1;
  (*echo_energy_adapt) = par2;
  (*echo_energy_stored) = par3;
}

#if defined(MIPS_DSP_R1_LE)
void WebRtcAecm_StoreAdaptiveChannel_mips(AecmCore* aecm,
                                          const uint16_t* far_spectrum,
                                          int32_t* echo_est) {
  int i;
  int16_t* temp1;
  uint16_t* temp8;
  int32_t temp0, temp2, temp3, temp4, temp5, temp6;
  int32_t* temp7 = &(echo_est[0]);
  temp1 = &(aecm->channelStored[0]);
  temp8 = (uint16_t*)(&far_spectrum[0]);

  // During startup we store the channel every block.
  memcpy(aecm->channelStored, aecm->channelAdapt16,
         sizeof(int16_t) * PART_LEN1);
  // Recalculate echo estimate
  for (i = 0; i < PART_LEN; i += 4) {
    __asm __volatile (
      "ulw            %[temp0],   0(%[temp8])               \n\t"
      "ulw            %[temp2],   0(%[temp1])               \n\t"
      "ulw            %[temp4],   4(%[temp8])               \n\t"
      "ulw            %[temp5],   4(%[temp1])               \n\t"
      "muleq_s.w.phl  %[temp3],   %[temp2],     %[temp0]    \n\t"
      "muleq_s.w.phr  %[temp0],   %[temp2],     %[temp0]    \n\t"
      "muleq_s.w.phl  %[temp6],   %[temp5],     %[temp4]    \n\t"
      "muleq_s.w.phr  %[temp4],   %[temp5],     %[temp4]    \n\t"
      "addiu          %[temp7],   %[temp7],     16          \n\t"
      "addiu          %[temp1],   %[temp1],     8           \n\t"
      "addiu          %[temp8],   %[temp8],     8           \n\t"
      "sra            %[temp3],   %[temp3],     1           \n\t"
      "sra            %[temp0],   %[temp0],     1           \n\t"
      "sra            %[temp6],   %[temp6],     1           \n\t"
      "sra            %[temp4],   %[temp4],     1           \n\t"
      "usw            %[temp3],   -12(%[temp7])             \n\t"
      "usw            %[temp0],   -16(%[temp7])             \n\t"
      "usw            %[temp6],   -4(%[temp7])              \n\t"
      "usw            %[temp4],   -8(%[temp7])              \n\t"
      : [temp0] "=&r" (temp0), [temp2] "=&r" (temp2), [temp3] "=&r" (temp3),
        [temp4] "=&r" (temp4), [temp5] "=&r" (temp5), [temp6] "=&r" (temp6),
        [temp1] "+r" (temp1), [temp8] "+r" (temp8), [temp7] "+r" (temp7)
      :
      : "hi", "lo", "memory"
    );
  }
  echo_est[i] = WEBRTC_SPL_MUL_16_U16(aecm->channelStored[i],
                                      far_spectrum[i]);
}

void WebRtcAecm_ResetAdaptiveChannel_mips(AecmCore* aecm) {
  int i;
  int32_t* temp3;
  int16_t* temp0;
  int32_t temp1, temp2, temp4, temp5;

  temp0 = &(aecm->channelStored[0]);
  temp3 = &(aecm->channelAdapt32[0]);

  // The stored channel has a significantly lower MSE than the adaptive one for
  // two consecutive calculations. Reset the adaptive channel.
  memcpy(aecm->channelAdapt16,
         aecm->channelStored,
         sizeof(int16_t) * PART_LEN1);

  // Restore the W32 channel
  for (i = 0; i < PART_LEN; i += 4) {
    __asm __volatile (
      "ulw            %[temp1], 0(%[temp0])           \n\t"
      "ulw            %[temp4], 4(%[temp0])           \n\t"
      "preceq.w.phl   %[temp2], %[temp1]              \n\t"
      "preceq.w.phr   %[temp1], %[temp1]              \n\t"
      "preceq.w.phl   %[temp5], %[temp4]              \n\t"
      "preceq.w.phr   %[temp4], %[temp4]              \n\t"
      "addiu          %[temp0], %[temp0], 8           \n\t"
      "usw            %[temp2], 4(%[temp3])           \n\t"
      "usw            %[temp1], 0(%[temp3])           \n\t"
      "usw            %[temp5], 12(%[temp3])          \n\t"
      "usw            %[temp4], 8(%[temp3])           \n\t"
      "addiu          %[temp3], %[temp3], 16          \n\t"
      : [temp1] "=&r" (temp1), [temp2] "=&r" (temp2),
        [temp4] "=&r" (temp4), [temp5] "=&r" (temp5),
        [temp3] "+r" (temp3), [temp0] "+r" (temp0)
      :
      : "memory"
    );
  }

  aecm->channelAdapt32[i] = (int32_t)aecm->channelStored[i] << 16;
}
#endif  // #if defined(MIPS_DSP_R1_LE)

// Transforms a time domain signal into the frequency domain, outputting the
// complex valued signal, absolute value and sum of absolute values.
//
// time_signal          [in]    Pointer to time domain signal
// freq_signal_real     [out]   Pointer to real part of frequency domain array
// freq_signal_imag     [out]   Pointer to imaginary part of frequency domain
//                              array
// freq_signal_abs      [out]   Pointer to absolute value of frequency domain
//                              array
// freq_signal_sum_abs  [out]   Pointer to the sum of all absolute values in
//                              the frequency domain array
// return value                 The Q-domain of current frequency values
//
static int TimeToFrequencyDomain(AecmCore* aecm,
                                 const int16_t* time_signal,
                                 ComplexInt16* freq_signal,
                                 uint16_t* freq_signal_abs,
                                 uint32_t* freq_signal_sum_abs) {
  int i = 0;
  int time_signal_scaling = 0;

  // In fft_buf, +16 for 32-byte alignment.
  int16_t fft_buf[PART_LEN4 + 16];
  int16_t *fft = (int16_t *) (((uintptr_t) fft_buf + 31) & ~31);

  int16_t tmp16no1;
#if !defined(MIPS_DSP_R2_LE)
  int32_t tmp32no1;
  int32_t tmp32no2;
  int16_t tmp16no2;
#else
  int32_t tmp32no10, tmp32no11, tmp32no12, tmp32no13;
  int32_t tmp32no20, tmp32no21, tmp32no22, tmp32no23;
  int16_t* freqp;
  uint16_t* freqabsp;
  uint32_t freqt0, freqt1, freqt2, freqt3;
  uint32_t freqs;
#endif

#ifdef AECM_DYNAMIC_Q
  tmp16no1 = WebRtcSpl_MaxAbsValueW16(time_signal, PART_LEN2);
  time_signal_scaling = WebRtcSpl_NormW16(tmp16no1);
#endif

  WindowAndFFT(aecm, fft, time_signal, freq_signal, time_signal_scaling);

  // Extract imaginary and real part,
  // calculate the magnitude for all frequency bins
  freq_signal[0].imag = 0;
  freq_signal[PART_LEN].imag = 0;
  freq_signal[PART_LEN].real = fft[PART_LEN2];
  freq_signal_abs[0] = (uint16_t)WEBRTC_SPL_ABS_W16(freq_signal[0].real);
  freq_signal_abs[PART_LEN] = (uint16_t)WEBRTC_SPL_ABS_W16(
    freq_signal[PART_LEN].real);
  (*freq_signal_sum_abs) = (uint32_t)(freq_signal_abs[0]) +
    (uint32_t)(freq_signal_abs[PART_LEN]);

#if !defined(MIPS_DSP_R2_LE)
  for (i = 1; i < PART_LEN; i++) {
    if (freq_signal[i].real == 0)
    {
      freq_signal_abs[i] = (uint16_t)WEBRTC_SPL_ABS_W16(
        freq_signal[i].imag);
    }
    else if (freq_signal[i].imag == 0)
    {
      freq_signal_abs[i] = (uint16_t)WEBRTC_SPL_ABS_W16(
        freq_signal[i].real);
    }
    else
    {
      // Approximation for magnitude of complex fft output
      // magn = sqrt(real^2 + imag^2)
      // magn ~= alpha * max(|imag|,|real|) + beta * min(|imag|,|real|)
      //
      // The parameters alpha and beta are stored in Q15
      tmp16no1 = WEBRTC_SPL_ABS_W16(freq_signal[i].real);
      tmp16no2 = WEBRTC_SPL_ABS_W16(freq_signal[i].imag);
      tmp32no1 = tmp16no1 * tmp16no1;
      tmp32no2 = tmp16no2 * tmp16no2;
      tmp32no2 = WebRtcSpl_AddSatW32(tmp32no1, tmp32no2);
      tmp32no1 = WebRtcSpl_SqrtFloor(tmp32no2);

      freq_signal_abs[i] = (uint16_t)tmp32no1;
    }
    (*freq_signal_sum_abs) += (uint32_t)freq_signal_abs[i];
  }
#else // #if !defined(MIPS_DSP_R2_LE)
  freqs = (uint32_t)(freq_signal_abs[0]) +
          (uint32_t)(freq_signal_abs[PART_LEN]);
  freqp = &(freq_signal[1].real);

  __asm __volatile (
    "lw             %[freqt0],      0(%[freqp])             \n\t"
    "lw             %[freqt1],      4(%[freqp])             \n\t"
    "lw             %[freqt2],      8(%[freqp])             \n\t"
    "mult           $ac0,           $zero,      $zero       \n\t"
    "mult           $ac1,           $zero,      $zero       \n\t"
    "mult           $ac2,           $zero,      $zero       \n\t"
    "dpaq_s.w.ph    $ac0,           %[freqt0],  %[freqt0]   \n\t"
    "dpaq_s.w.ph    $ac1,           %[freqt1],  %[freqt1]   \n\t"
    "dpaq_s.w.ph    $ac2,           %[freqt2],  %[freqt2]   \n\t"
    "addiu          %[freqp],       %[freqp],   12          \n\t"
    "extr.w         %[tmp32no20],   $ac0,       1           \n\t"
    "extr.w         %[tmp32no21],   $ac1,       1           \n\t"
    "extr.w         %[tmp32no22],   $ac2,       1           \n\t"
    : [freqt0] "=&r" (freqt0), [freqt1] "=&r" (freqt1),
      [freqt2] "=&r" (freqt2), [freqp] "+r" (freqp),
      [tmp32no20] "=r" (tmp32no20), [tmp32no21] "=r" (tmp32no21),
      [tmp32no22] "=r" (tmp32no22)
    :
    : "memory", "hi", "lo", "$ac1hi", "$ac1lo", "$ac2hi", "$ac2lo"
  );

  tmp32no10 = WebRtcSpl_SqrtFloor(tmp32no20);
  tmp32no11 = WebRtcSpl_SqrtFloor(tmp32no21);
  tmp32no12 = WebRtcSpl_SqrtFloor(tmp32no22);
  freq_signal_abs[1] = (uint16_t)tmp32no10;
  freq_signal_abs[2] = (uint16_t)tmp32no11;
  freq_signal_abs[3] = (uint16_t)tmp32no12;
  freqs += (uint32_t)tmp32no10;
  freqs += (uint32_t)tmp32no11;
  freqs += (uint32_t)tmp32no12;
  freqabsp = &(freq_signal_abs[4]);
  for (i = 4; i < PART_LEN; i+=4)
  {
    __asm __volatile (
      "ulw            %[freqt0],      0(%[freqp])                 \n\t"
      "ulw            %[freqt1],      4(%[freqp])                 \n\t"
      "ulw            %[freqt2],      8(%[freqp])                 \n\t"
      "ulw            %[freqt3],      12(%[freqp])                \n\t"
      "mult           $ac0,           $zero,          $zero       \n\t"
      "mult           $ac1,           $zero,          $zero       \n\t"
      "mult           $ac2,           $zero,          $zero       \n\t"
      "mult           $ac3,           $zero,          $zero       \n\t"
      "dpaq_s.w.ph    $ac0,           %[freqt0],      %[freqt0]   \n\t"
      "dpaq_s.w.ph    $ac1,           %[freqt1],      %[freqt1]   \n\t"
      "dpaq_s.w.ph    $ac2,           %[freqt2],      %[freqt2]   \n\t"
      "dpaq_s.w.ph    $ac3,           %[freqt3],      %[freqt3]   \n\t"
      "addiu          %[freqp],       %[freqp],       16          \n\t"
      "addiu          %[freqabsp],    %[freqabsp],    8           \n\t"
      "extr.w         %[tmp32no20],   $ac0,           1           \n\t"
      "extr.w         %[tmp32no21],   $ac1,           1           \n\t"
      "extr.w         %[tmp32no22],   $ac2,           1           \n\t"
      "extr.w         %[tmp32no23],   $ac3,           1           \n\t"
      : [freqt0] "=&r" (freqt0), [freqt1] "=&r" (freqt1),
        [freqt2] "=&r" (freqt2), [freqt3] "=&r" (freqt3),
        [tmp32no20] "=r" (tmp32no20), [tmp32no21] "=r" (tmp32no21),
        [tmp32no22] "=r" (tmp32no22), [tmp32no23] "=r" (tmp32no23),
        [freqabsp] "+r" (freqabsp), [freqp] "+r" (freqp)
      :
      : "memory", "hi", "lo", "$ac1hi", "$ac1lo",
        "$ac2hi", "$ac2lo", "$ac3hi", "$ac3lo"
    );

    tmp32no10 = WebRtcSpl_SqrtFloor(tmp32no20);
    tmp32no11 = WebRtcSpl_SqrtFloor(tmp32no21);
    tmp32no12 = WebRtcSpl_SqrtFloor(tmp32no22);
    tmp32no13 = WebRtcSpl_SqrtFloor(tmp32no23);

    __asm __volatile (
      "sh             %[tmp32no10],   -8(%[freqabsp])                 \n\t"
      "sh             %[tmp32no11],   -6(%[freqabsp])                 \n\t"
      "sh             %[tmp32no12],   -4(%[freqabsp])                 \n\t"
      "sh             %[tmp32no13],   -2(%[freqabsp])                 \n\t"
      "addu           %[freqs],       %[freqs],       %[tmp32no10]    \n\t"
      "addu           %[freqs],       %[freqs],       %[tmp32no11]    \n\t"
      "addu           %[freqs],       %[freqs],       %[tmp32no12]    \n\t"
      "addu           %[freqs],       %[freqs],       %[tmp32no13]    \n\t"
      : [freqs] "+r" (freqs)
      : [tmp32no10] "r" (tmp32no10), [tmp32no11] "r" (tmp32no11),
        [tmp32no12] "r" (tmp32no12), [tmp32no13] "r" (tmp32no13),
        [freqabsp] "r" (freqabsp)
      : "memory"
    );
  }

  (*freq_signal_sum_abs) = freqs;
#endif

  return time_signal_scaling;
}

int WebRtcAecm_ProcessBlock(AecmCore* aecm,
                            const int16_t* farend,
                            const int16_t* nearendNoisy,
                            const int16_t* nearendClean,
                            int16_t* output) {
  int i;
  uint32_t xfaSum;
  uint32_t dfaNoisySum;
  uint32_t dfaCleanSum;
  uint32_t echoEst32Gained;
  uint32_t tmpU32;
  int32_t tmp32no1;

  uint16_t xfa[PART_LEN1];
  uint16_t dfaNoisy[PART_LEN1];
  uint16_t dfaClean[PART_LEN1];
  uint16_t* ptrDfaClean = dfaClean;
  const uint16_t* far_spectrum_ptr = NULL;

  // 32 byte aligned buffers (with +8 or +16).
  int16_t fft_buf[PART_LEN4 + 2 + 16]; // +2 to make a loop safe.
  int32_t echoEst32_buf[PART_LEN1 + 8];
  int32_t dfw_buf[PART_LEN2 + 8];
  int32_t efw_buf[PART_LEN2 + 8];

  int16_t* fft = (int16_t*)(((uint32_t)fft_buf + 31) & ~ 31);
  int32_t* echoEst32 = (int32_t*)(((uint32_t)echoEst32_buf + 31) & ~ 31);
  ComplexInt16* dfw = (ComplexInt16*)(((uint32_t)dfw_buf + 31) & ~31);
  ComplexInt16* efw = (ComplexInt16*)(((uint32_t)efw_buf + 31) & ~31);

  int16_t hnl[PART_LEN1];
  int16_t numPosCoef = 0;
  int delay;
  int16_t tmp16no1;
  int16_t tmp16no2;
  int16_t mu;
  int16_t supGain;
  int16_t zeros32, zeros16;
  int16_t zerosDBufNoisy, zerosDBufClean, zerosXBuf;
  int far_q;
  int16_t resolutionDiff, qDomainDiff, dfa_clean_q_domain_diff;

  const int kMinPrefBand = 4;
  const int kMaxPrefBand = 24;
  int32_t avgHnl32 = 0;

  int32_t temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8;
  int16_t* ptr;
  int16_t* ptr1;
  int16_t* er_ptr;
  int16_t* dr_ptr;

  ptr = &hnl[0];
  ptr1 = &hnl[0];
  er_ptr = &efw[0].real;
  dr_ptr = &dfw[0].real;

  // Determine startup state. There are three states:
  // (0) the first CONV_LEN blocks
  // (1) another CONV_LEN blocks
  // (2) the rest

  if (aecm->startupState < 2) {
    aecm->startupState = (aecm->totCount >= CONV_LEN) +
                         (aecm->totCount >= CONV_LEN2);
  }
  // END: Determine startup state

  // Buffer near and far end signals
  memcpy(aecm->xBuf + PART_LEN, farend, sizeof(int16_t) * PART_LEN);
  memcpy(aecm->dBufNoisy + PART_LEN,
         nearendNoisy,
         sizeof(int16_t) * PART_LEN);
  if (nearendClean != NULL) {
    memcpy(aecm->dBufClean + PART_LEN,
           nearendClean,
           sizeof(int16_t) * PART_LEN);
  }

  // Transform far end signal from time domain to frequency domain.
  far_q = TimeToFrequencyDomain(aecm,
                                aecm->xBuf,
                                dfw,
                                xfa,
                                &xfaSum);

  // Transform noisy near end signal from time domain to frequency domain.
  zerosDBufNoisy = TimeToFrequencyDomain(aecm,
                                         aecm->dBufNoisy,
                                         dfw,
                                         dfaNoisy,
                                         &dfaNoisySum);
  aecm->dfaNoisyQDomainOld = aecm->dfaNoisyQDomain;
  aecm->dfaNoisyQDomain = (int16_t)zerosDBufNoisy;

  if (nearendClean == NULL) {
    ptrDfaClean = dfaNoisy;
    aecm->dfaCleanQDomainOld = aecm->dfaNoisyQDomainOld;
    aecm->dfaCleanQDomain = aecm->dfaNoisyQDomain;
    dfaCleanSum = dfaNoisySum;
  } else {
    // Transform clean near end signal from time domain to frequency domain.
    zerosDBufClean = TimeToFrequencyDomain(aecm,
                                           aecm->dBufClean,
                                           dfw,
                                           dfaClean,
                                           &dfaCleanSum);
    aecm->dfaCleanQDomainOld = aecm->dfaCleanQDomain;
    aecm->dfaCleanQDomain = (int16_t)zerosDBufClean;
  }

  // Get the delay
  // Save far-end history and estimate delay
  WebRtcAecm_UpdateFarHistory(aecm, xfa, far_q);

  if (WebRtc_AddFarSpectrumFix(aecm->delay_estimator_farend, xfa, PART_LEN1,
                               far_q) == -1) {
    return -1;
  }
  delay = WebRtc_DelayEstimatorProcessFix(aecm->delay_estimator,
                                          dfaNoisy,
                                          PART_LEN1,
                                          zerosDBufNoisy);
  if (delay == -1) {
    return -1;
  }
  else if (delay == -2) {
    // If the delay is unknown, we assume zero.
    // NOTE: this will have to be adjusted if we ever add lookahead.
    delay = 0;
  }

  if (aecm->fixedDelay >= 0) {
    // Use fixed delay
    delay = aecm->fixedDelay;
  }

  // Get aligned far end spectrum
  far_spectrum_ptr = WebRtcAecm_AlignedFarend(aecm, &far_q, delay);
  zerosXBuf = (int16_t) far_q;

  if (far_spectrum_ptr == NULL) {
    return -1;
  }

  // Calculate log(energy) and update energy threshold levels
  WebRtcAecm_CalcEnergies(aecm,
                          far_spectrum_ptr,
                          zerosXBuf,
                          dfaNoisySum,
                          echoEst32);
  // Calculate stepsize
  mu = WebRtcAecm_CalcStepSize(aecm);

  // Update counters
  aecm->totCount++;

  // This is the channel estimation algorithm.
  // It is base on NLMS but has a variable step length,
  // which was calculated above.
  WebRtcAecm_UpdateChannel(aecm,
                           far_spectrum_ptr,
                           zerosXBuf,
                           dfaNoisy,
                           mu,
                           echoEst32);

  supGain = WebRtcAecm_CalcSuppressionGain(aecm);

  // Calculate Wiener filter hnl[]
  for (i = 0; i < PART_LEN1; i++) {
    // Far end signal through channel estimate in Q8
    // How much can we shift right to preserve resolution
    tmp32no1 = echoEst32[i] - aecm->echoFilt[i];
    aecm->echoFilt[i] += (tmp32no1 * 50) >> 8;

    zeros32 = WebRtcSpl_NormW32(aecm->echoFilt[i]) + 1;
    zeros16 = WebRtcSpl_NormW16(supGain) + 1;
    if (zeros32 + zeros16 > 16) {
      // Multiplication is safe
      // Result in
      // Q(RESOLUTION_CHANNEL+RESOLUTION_SUPGAIN+aecm->xfaQDomainBuf[diff])
      echoEst32Gained = WEBRTC_SPL_UMUL_32_16((uint32_t)aecm->echoFilt[i],
                                              (uint16_t)supGain);
      resolutionDiff = 14 - RESOLUTION_CHANNEL16 - RESOLUTION_SUPGAIN;
      resolutionDiff += (aecm->dfaCleanQDomain - zerosXBuf);
    } else {
      tmp16no1 = 17 - zeros32 - zeros16;
      resolutionDiff = 14 + tmp16no1 - RESOLUTION_CHANNEL16 -
                       RESOLUTION_SUPGAIN;
      resolutionDiff += (aecm->dfaCleanQDomain - zerosXBuf);
      if (zeros32 > tmp16no1) {
        echoEst32Gained = WEBRTC_SPL_UMUL_32_16(
                            (uint32_t)aecm->echoFilt[i],
                            supGain >> tmp16no1);
      } else {
        // Result in Q-(RESOLUTION_CHANNEL+RESOLUTION_SUPGAIN-16)
        echoEst32Gained = (aecm->echoFilt[i] >> tmp16no1) * supGain;
      }
    }

    zeros16 = WebRtcSpl_NormW16(aecm->nearFilt[i]);
    assert(zeros16 >= 0);  // |zeros16| is a norm, hence non-negative.
    dfa_clean_q_domain_diff = aecm->dfaCleanQDomain - aecm->dfaCleanQDomainOld;
    if (zeros16 < dfa_clean_q_domain_diff && aecm->nearFilt[i]) {
      tmp16no1 = aecm->nearFilt[i] << zeros16;
      qDomainDiff = zeros16 - dfa_clean_q_domain_diff;
      tmp16no2 = ptrDfaClean[i] >> -qDomainDiff;
    } else {
      tmp16no1 = dfa_clean_q_domain_diff < 0
          ? aecm->nearFilt[i] >> -dfa_clean_q_domain_diff
          : aecm->nearFilt[i] << dfa_clean_q_domain_diff;
      qDomainDiff = 0;
      tmp16no2 = ptrDfaClean[i];
    }

    tmp32no1 = (int32_t)(tmp16no2 - tmp16no1);
    tmp16no2 = (int16_t)(tmp32no1 >> 4);
    tmp16no2 += tmp16no1;
    zeros16 = WebRtcSpl_NormW16(tmp16no2);
    if ((tmp16no2) & (-qDomainDiff > zeros16)) {
      aecm->nearFilt[i] = WEBRTC_SPL_WORD16_MAX;
    } else {
      aecm->nearFilt[i] = qDomainDiff < 0 ? tmp16no2 << -qDomainDiff
                                          : tmp16no2 >> qDomainDiff;
    }

    // Wiener filter coefficients, resulting hnl in Q14
    if (echoEst32Gained == 0) {
      hnl[i] = ONE_Q14;
      numPosCoef++;
    } else if (aecm->nearFilt[i] == 0) {
      hnl[i] = 0;
    } else {
      // Multiply the suppression gain
      // Rounding
      echoEst32Gained += (uint32_t)(aecm->nearFilt[i] >> 1);
      tmpU32 = WebRtcSpl_DivU32U16(echoEst32Gained,
                                   (uint16_t)aecm->nearFilt[i]);

      // Current resolution is
      // Q-(RESOLUTION_CHANNEL + RESOLUTION_SUPGAIN
      //    - max(0, 17 - zeros16 - zeros32))
      // Make sure we are in Q14
      tmp32no1 = (int32_t)WEBRTC_SPL_SHIFT_W32(tmpU32, resolutionDiff);
      if (tmp32no1 > ONE_Q14) {
        hnl[i] = 0;
      } else if (tmp32no1 < 0) {
        hnl[i] = ONE_Q14;
        numPosCoef++;
      } else {
        // 1-echoEst/dfa
        hnl[i] = ONE_Q14 - (int16_t)tmp32no1;
        if (hnl[i] <= 0) {
          hnl[i] = 0;
        } else {
          numPosCoef++;
        }
      }
    }
  }

  // Only in wideband. Prevent the gain in upper band from being larger than
  // in lower band.
  if (aecm->mult == 2) {
    // TODO(bjornv): Investigate if the scaling of hnl[i] below can cause
    //               speech distortion in double-talk.
    for (i = 0; i < (PART_LEN1 >> 3); i++) {
      __asm __volatile (
        "lh         %[temp1],       0(%[ptr1])                  \n\t"
        "lh         %[temp2],       2(%[ptr1])                  \n\t"
        "lh         %[temp3],       4(%[ptr1])                  \n\t"
        "lh         %[temp4],       6(%[ptr1])                  \n\t"
        "lh         %[temp5],       8(%[ptr1])                  \n\t"
        "lh         %[temp6],       10(%[ptr1])                 \n\t"
        "lh         %[temp7],       12(%[ptr1])                 \n\t"
        "lh         %[temp8],       14(%[ptr1])                 \n\t"
        "mul        %[temp1],       %[temp1],       %[temp1]    \n\t"
        "mul        %[temp2],       %[temp2],       %[temp2]    \n\t"
        "mul        %[temp3],       %[temp3],       %[temp3]    \n\t"
        "mul        %[temp4],       %[temp4],       %[temp4]    \n\t"
        "mul        %[temp5],       %[temp5],       %[temp5]    \n\t"
        "mul        %[temp6],       %[temp6],       %[temp6]    \n\t"
        "mul        %[temp7],       %[temp7],       %[temp7]    \n\t"
        "mul        %[temp8],       %[temp8],       %[temp8]    \n\t"
        "sra        %[temp1],       %[temp1],       14          \n\t"
        "sra        %[temp2],       %[temp2],       14          \n\t"
        "sra        %[temp3],       %[temp3],       14          \n\t"
        "sra        %[temp4],       %[temp4],       14          \n\t"
        "sra        %[temp5],       %[temp5],       14          \n\t"
        "sra        %[temp6],       %[temp6],       14          \n\t"
        "sra        %[temp7],       %[temp7],       14          \n\t"
        "sra        %[temp8],       %[temp8],       14          \n\t"
        "sh         %[temp1],       0(%[ptr1])                  \n\t"
        "sh         %[temp2],       2(%[ptr1])                  \n\t"
        "sh         %[temp3],       4(%[ptr1])                  \n\t"
        "sh         %[temp4],       6(%[ptr1])                  \n\t"
        "sh         %[temp5],       8(%[ptr1])                  \n\t"
        "sh         %[temp6],       10(%[ptr1])                 \n\t"
        "sh         %[temp7],       12(%[ptr1])                 \n\t"
        "sh         %[temp8],       14(%[ptr1])                 \n\t"
        "addiu      %[ptr1],        %[ptr1],        16          \n\t"
        : [temp1] "=&r" (temp1), [temp2] "=&r" (temp2), [temp3] "=&r" (temp3),
          [temp4] "=&r" (temp4), [temp5] "=&r" (temp5), [temp6] "=&r" (temp6),
          [temp7] "=&r" (temp7), [temp8] "=&r" (temp8), [ptr1] "+r" (ptr1)
        :
        : "memory", "hi", "lo"
      );
    }
    for(i = 0; i < (PART_LEN1 & 7); i++) {
      __asm __volatile (
        "lh         %[temp1],       0(%[ptr1])                  \n\t"
        "mul        %[temp1],       %[temp1],       %[temp1]    \n\t"
        "sra        %[temp1],       %[temp1],       14          \n\t"
        "sh         %[temp1],       0(%[ptr1])                  \n\t"
        "addiu      %[ptr1],        %[ptr1],        2           \n\t"
        : [temp1] "=&r" (temp1), [ptr1] "+r" (ptr1)
        :
        : "memory", "hi", "lo"
      );
    }

    for (i = kMinPrefBand; i <= kMaxPrefBand; i++) {
      avgHnl32 += (int32_t)hnl[i];
    }

    assert(kMaxPrefBand - kMinPrefBand + 1 > 0);
    avgHnl32 /= (kMaxPrefBand - kMinPrefBand + 1);

    for (i = kMaxPrefBand; i < PART_LEN1; i++) {
      if (hnl[i] > (int16_t)avgHnl32) {
        hnl[i] = (int16_t)avgHnl32;
      }
    }
  }

  // Calculate NLP gain, result is in Q14
  if (aecm->nlpFlag) {
    if (numPosCoef < 3) {
      for (i = 0; i < PART_LEN1; i++) {
        efw[i].real = 0;
        efw[i].imag = 0;
        hnl[i] = 0;
      }
    } else {
      for (i = 0; i < PART_LEN1; i++) {
#if defined(MIPS_DSP_R1_LE)
        __asm __volatile (
          ".set       push                                        \n\t"
          ".set       noreorder                                   \n\t"
          "lh         %[temp1],       0(%[ptr])                   \n\t"
          "lh         %[temp2],       0(%[dr_ptr])                \n\t"
          "slti       %[temp4],       %[temp1],       0x4001      \n\t"
          "beqz       %[temp4],       3f                          \n\t"
          " lh        %[temp3],       2(%[dr_ptr])                \n\t"
          "slti       %[temp5],       %[temp1],       3277        \n\t"
          "bnez       %[temp5],       2f                          \n\t"
          " addiu     %[dr_ptr],      %[dr_ptr],      4           \n\t"
          "mul        %[temp2],       %[temp2],       %[temp1]    \n\t"
          "mul        %[temp3],       %[temp3],       %[temp1]    \n\t"
          "shra_r.w   %[temp2],       %[temp2],       14          \n\t"
          "shra_r.w   %[temp3],       %[temp3],       14          \n\t"
          "b          4f                                          \n\t"
          " nop                                                   \n\t"
         "2:                                                      \n\t"
          "addu       %[temp1],       $zero,          $zero       \n\t"
          "addu       %[temp2],       $zero,          $zero       \n\t"
          "addu       %[temp3],       $zero,          $zero       \n\t"
          "b          1f                                          \n\t"
          " nop                                                   \n\t"
         "3:                                                      \n\t"
          "addiu      %[temp1],       $0,             0x4000      \n\t"
         "1:                                                      \n\t"
          "sh         %[temp1],       0(%[ptr])                   \n\t"
         "4:                                                      \n\t"
          "sh         %[temp2],       0(%[er_ptr])                \n\t"
          "sh         %[temp3],       2(%[er_ptr])                \n\t"
          "addiu      %[ptr],         %[ptr],         2           \n\t"
          "addiu      %[er_ptr],      %[er_ptr],      4           \n\t"
          ".set       pop                                         \n\t"
          : [temp1] "=&r" (temp1), [temp2] "=&r" (temp2), [temp3] "=&r" (temp3),
            [temp4] "=&r" (temp4), [temp5] "=&r" (temp5), [ptr] "+r" (ptr),
            [er_ptr] "+r" (er_ptr), [dr_ptr] "+r" (dr_ptr)
          :
          : "memory", "hi", "lo"
        );
#else
        __asm __volatile (
          ".set       push                                        \n\t"
          ".set       noreorder                                   \n\t"
          "lh         %[temp1],       0(%[ptr])                   \n\t"
          "lh         %[temp2],       0(%[dr_ptr])                \n\t"
          "slti       %[temp4],       %[temp1],       0x4001      \n\t"
          "beqz       %[temp4],       3f                          \n\t"
          " lh        %[temp3],       2(%[dr_ptr])                \n\t"
          "slti       %[temp5],       %[temp1],       3277        \n\t"
          "bnez       %[temp5],       2f                          \n\t"
          " addiu     %[dr_ptr],      %[dr_ptr],      4           \n\t"
          "mul        %[temp2],       %[temp2],       %[temp1]    \n\t"
          "mul        %[temp3],       %[temp3],       %[temp1]    \n\t"
          "addiu      %[temp2],       %[temp2],       0x2000      \n\t"
          "addiu      %[temp3],       %[temp3],       0x2000      \n\t"
          "sra        %[temp2],       %[temp2],       14          \n\t"
          "sra        %[temp3],       %[temp3],       14          \n\t"
          "b          4f                                          \n\t"
          " nop                                                   \n\t"
         "2:                                                      \n\t"
          "addu       %[temp1],       $zero,          $zero       \n\t"
          "addu       %[temp2],       $zero,          $zero       \n\t"
          "addu       %[temp3],       $zero,          $zero       \n\t"
          "b          1f                                          \n\t"
          " nop                                                   \n\t"
         "3:                                                      \n\t"
          "addiu      %[temp1],       $0,             0x4000      \n\t"
         "1:                                                      \n\t"
          "sh         %[temp1],       0(%[ptr])                   \n\t"
         "4:                                                      \n\t"
          "sh         %[temp2],       0(%[er_ptr])                \n\t"
          "sh         %[temp3],       2(%[er_ptr])                \n\t"
          "addiu      %[ptr],         %[ptr],         2           \n\t"
          "addiu      %[er_ptr],      %[er_ptr],      4           \n\t"
          ".set       pop                                         \n\t"
          : [temp1] "=&r" (temp1), [temp2] "=&r" (temp2), [temp3] "=&r" (temp3),
            [temp4] "=&r" (temp4), [temp5] "=&r" (temp5), [ptr] "+r" (ptr),
            [er_ptr] "+r" (er_ptr), [dr_ptr] "+r" (dr_ptr)
          :
          : "memory", "hi", "lo"
        );
#endif
      }
    }
  }
  else {
    // multiply with Wiener coefficients
    for (i = 0; i < PART_LEN1; i++) {
      efw[i].real = (int16_t)
                      (WEBRTC_SPL_MUL_16_16_RSFT_WITH_ROUND(dfw[i].real,
                                                            hnl[i],
                                                            14));
      efw[i].imag = (int16_t)
                      (WEBRTC_SPL_MUL_16_16_RSFT_WITH_ROUND(dfw[i].imag,
                                                            hnl[i],
                                                            14));
    }
  }

  if (aecm->cngMode == AecmTrue) {
    ComfortNoise(aecm, ptrDfaClean, efw, hnl);
  }

  InverseFFTAndWindow(aecm, fft, efw, output, nearendClean);

  return 0;
}

// Generate comfort noise and add to output signal.
static void ComfortNoise(AecmCore* aecm,
                         const uint16_t* dfa,
                         ComplexInt16* out,
                         const int16_t* lambda) {
  int16_t i;
  int16_t tmp16, tmp161, tmp162, tmp163, nrsh1, nrsh2;
  int32_t tmp32, tmp321, tnoise, tnoise1;
  int32_t tmp322, tmp323, *tmp1;
  int16_t* dfap;
  int16_t* lambdap;
  const int32_t c2049 = 2049;
  const int32_t c359 = 359;
  const int32_t c114 = ONE_Q14;

  int16_t randW16[PART_LEN];
  int16_t uReal[PART_LEN1];
  int16_t uImag[PART_LEN1];
  int32_t outLShift32;

  int16_t shiftFromNearToNoise = kNoiseEstQDomain - aecm->dfaCleanQDomain;
  int16_t minTrackShift = 9;

  assert(shiftFromNearToNoise >= 0);
  assert(shiftFromNearToNoise < 16);

  if (aecm->noiseEstCtr < 100) {
    // Track the minimum more quickly initially.
    aecm->noiseEstCtr++;
    minTrackShift = 6;
  }

  // Generate a uniform random array on [0 2^15-1].
  WebRtcSpl_RandUArray(randW16, PART_LEN, &aecm->seed);
  int16_t* randW16p = (int16_t*)randW16;
#if defined (MIPS_DSP_R1_LE)
  int16_t* kCosTablep = (int16_t*)WebRtcAecm_kCosTable;
  int16_t* kSinTablep = (int16_t*)WebRtcAecm_kSinTable;
#endif   // #if defined(MIPS_DSP_R1_LE)
  tmp1 = (int32_t*)aecm->noiseEst + 1;
  dfap = (int16_t*)dfa + 1;
  lambdap = (int16_t*)lambda + 1;
  // Estimate noise power.
  for (i = 1; i < PART_LEN1; i+=2) {
  // Shift to the noise domain.
    __asm __volatile (
      "lh     %[tmp32],       0(%[dfap])                              \n\t"
      "lw     %[tnoise],      0(%[tmp1])                              \n\t"
      "sllv   %[outLShift32], %[tmp32],   %[shiftFromNearToNoise]     \n\t"
      : [tmp32] "=&r" (tmp32), [outLShift32] "=r" (outLShift32),
        [tnoise] "=&r" (tnoise)
      : [tmp1] "r" (tmp1), [dfap] "r" (dfap),
        [shiftFromNearToNoise] "r" (shiftFromNearToNoise)
      : "memory"
    );

    if (outLShift32 < tnoise) {
      // Reset "too low" counter
      aecm->noiseEstTooLowCtr[i] = 0;
      // Track the minimum.
      if (tnoise < (1 << minTrackShift)) {
        // For small values, decrease noiseEst[i] every
        // |kNoiseEstIncCount| block. The regular approach below can not
        // go further down due to truncation.
        aecm->noiseEstTooHighCtr[i]++;
        if (aecm->noiseEstTooHighCtr[i] >= kNoiseEstIncCount) {
          tnoise--;
          aecm->noiseEstTooHighCtr[i] = 0;  // Reset the counter
        }
      } else {
        __asm __volatile (
          "subu   %[tmp32],       %[tnoise],      %[outLShift32]      \n\t"
          "srav   %[tmp32],       %[tmp32],       %[minTrackShift]    \n\t"
          "subu   %[tnoise],      %[tnoise],      %[tmp32]            \n\t"
          : [tmp32] "=&r" (tmp32), [tnoise] "+r" (tnoise)
          : [outLShift32] "r" (outLShift32), [minTrackShift] "r" (minTrackShift)
        );
      }
    } else {
      // Reset "too high" counter
      aecm->noiseEstTooHighCtr[i] = 0;
      // Ramp slowly upwards until we hit the minimum again.
      if ((tnoise >> 19) <= 0) {
        if ((tnoise >> 11) > 0) {
          // Large enough for relative increase
          __asm __volatile (
            "mul    %[tnoise],  %[tnoise],  %[c2049]    \n\t"
            "sra    %[tnoise],  %[tnoise],  11          \n\t"
            : [tnoise] "+r" (tnoise)
            : [c2049] "r" (c2049)
            : "hi", "lo"
          );
        } else {
          // Make incremental increases based on size every
          // |kNoiseEstIncCount| block
          aecm->noiseEstTooLowCtr[i]++;
          if (aecm->noiseEstTooLowCtr[i] >= kNoiseEstIncCount) {
            __asm __volatile (
              "sra    %[tmp32],   %[tnoise],  9           \n\t"
              "addi   %[tnoise],  %[tnoise],  1           \n\t"
              "addu   %[tnoise],  %[tnoise],  %[tmp32]    \n\t"
              : [tnoise] "+r" (tnoise), [tmp32] "=&r" (tmp32)
              :
            );
            aecm->noiseEstTooLowCtr[i] = 0; // Reset counter
          }
        }
      } else {
        // Avoid overflow.
        // Multiplication with 2049 will cause wrap around. Scale
        // down first and then multiply
        __asm __volatile (
          "sra    %[tnoise],  %[tnoise],  11          \n\t"
          "mul    %[tnoise],  %[tnoise],  %[c2049]    \n\t"
          : [tnoise] "+r" (tnoise)
          : [c2049] "r" (c2049)
          : "hi", "lo"
        );
      }
    }

    // Shift to the noise domain.
    __asm __volatile (
      "lh     %[tmp32],       2(%[dfap])                              \n\t"
      "lw     %[tnoise1],     4(%[tmp1])                              \n\t"
      "addiu  %[dfap],        %[dfap],    4                           \n\t"
      "sllv   %[outLShift32], %[tmp32],   %[shiftFromNearToNoise]     \n\t"
      : [tmp32] "=&r" (tmp32), [dfap] "+r" (dfap),
        [outLShift32] "=r" (outLShift32), [tnoise1] "=&r" (tnoise1)
      : [tmp1] "r" (tmp1), [shiftFromNearToNoise] "r" (shiftFromNearToNoise)
      : "memory"
    );

    if (outLShift32 < tnoise1) {
      // Reset "too low" counter
      aecm->noiseEstTooLowCtr[i + 1] = 0;
      // Track the minimum.
      if (tnoise1 < (1 << minTrackShift)) {
        // For small values, decrease noiseEst[i] every
        // |kNoiseEstIncCount| block. The regular approach below can not
        // go further down due to truncation.
        aecm->noiseEstTooHighCtr[i + 1]++;
        if (aecm->noiseEstTooHighCtr[i + 1] >= kNoiseEstIncCount) {
          tnoise1--;
          aecm->noiseEstTooHighCtr[i + 1] = 0; // Reset the counter
        }
      } else {
        __asm __volatile (
          "subu   %[tmp32],       %[tnoise1],     %[outLShift32]      \n\t"
          "srav   %[tmp32],       %[tmp32],       %[minTrackShift]    \n\t"
          "subu   %[tnoise1],     %[tnoise1],     %[tmp32]            \n\t"
          : [tmp32] "=&r" (tmp32), [tnoise1] "+r" (tnoise1)
          : [outLShift32] "r" (outLShift32), [minTrackShift] "r" (minTrackShift)
        );
      }
    } else {
      // Reset "too high" counter
      aecm->noiseEstTooHighCtr[i + 1] = 0;
      // Ramp slowly upwards until we hit the minimum again.
      if ((tnoise1 >> 19) <= 0) {
        if ((tnoise1 >> 11) > 0) {
          // Large enough for relative increase
          __asm __volatile (
            "mul    %[tnoise1], %[tnoise1], %[c2049]   \n\t"
            "sra    %[tnoise1], %[tnoise1], 11         \n\t"
            : [tnoise1] "+r" (tnoise1)
            : [c2049] "r" (c2049)
            : "hi", "lo"
          );
        } else {
          // Make incremental increases based on size every
          // |kNoiseEstIncCount| block
          aecm->noiseEstTooLowCtr[i + 1]++;
          if (aecm->noiseEstTooLowCtr[i + 1] >= kNoiseEstIncCount) {
            __asm __volatile (
              "sra    %[tmp32],   %[tnoise1], 9           \n\t"
              "addi   %[tnoise1], %[tnoise1], 1           \n\t"
              "addu   %[tnoise1], %[tnoise1], %[tmp32]    \n\t"
              : [tnoise1] "+r" (tnoise1), [tmp32] "=&r" (tmp32)
              :
            );
            aecm->noiseEstTooLowCtr[i + 1] = 0; // Reset counter
          }
        }
      } else {
        // Avoid overflow.
        // Multiplication with 2049 will cause wrap around. Scale
        // down first and then multiply
        __asm __volatile (
          "sra    %[tnoise1], %[tnoise1], 11          \n\t"
          "mul    %[tnoise1], %[tnoise1], %[c2049]    \n\t"
          : [tnoise1] "+r" (tnoise1)
          : [c2049] "r" (c2049)
          : "hi", "lo"
        );
      }
    }

    __asm __volatile (
      "lh     %[tmp16],   0(%[lambdap])                           \n\t"
      "lh     %[tmp161],  2(%[lambdap])                           \n\t"
      "sw     %[tnoise],  0(%[tmp1])                              \n\t"
      "sw     %[tnoise1], 4(%[tmp1])                              \n\t"
      "subu   %[tmp16],   %[c114],        %[tmp16]                \n\t"
      "subu   %[tmp161],  %[c114],        %[tmp161]               \n\t"
      "srav   %[tmp32],   %[tnoise],      %[shiftFromNearToNoise] \n\t"
      "srav   %[tmp321],  %[tnoise1],     %[shiftFromNearToNoise] \n\t"
      "addiu  %[lambdap], %[lambdap],     4                       \n\t"
      "addiu  %[tmp1],    %[tmp1],        8                       \n\t"
      : [tmp16] "=&r" (tmp16), [tmp161] "=&r" (tmp161), [tmp1] "+r" (tmp1),
        [tmp32] "=&r" (tmp32), [tmp321] "=&r" (tmp321), [lambdap] "+r" (lambdap)
      : [tnoise] "r" (tnoise), [tnoise1] "r" (tnoise1), [c114] "r" (c114),
        [shiftFromNearToNoise] "r" (shiftFromNearToNoise)
      : "memory"
    );

    if (tmp32 > 32767) {
      tmp32 = 32767;
      aecm->noiseEst[i] = tmp32 << shiftFromNearToNoise;
    }
    if (tmp321 > 32767) {
      tmp321 = 32767;
      aecm->noiseEst[i+1] = tmp321 << shiftFromNearToNoise;
    }

    __asm __volatile (
      "mul    %[tmp32],   %[tmp32],       %[tmp16]                \n\t"
      "mul    %[tmp321],  %[tmp321],      %[tmp161]               \n\t"
      "sra    %[nrsh1],   %[tmp32],       14                      \n\t"
      "sra    %[nrsh2],   %[tmp321],      14                      \n\t"
      : [nrsh1] "=&r" (nrsh1), [nrsh2] "=r" (nrsh2)
      : [tmp16] "r" (tmp16), [tmp161] "r" (tmp161), [tmp32] "r" (tmp32),
        [tmp321] "r" (tmp321)
      : "memory", "hi", "lo"
    );

    __asm __volatile (
      "lh     %[tmp32],       0(%[randW16p])              \n\t"
      "lh     %[tmp321],      2(%[randW16p])              \n\t"
      "addiu  %[randW16p],    %[randW16p],    4           \n\t"
      "mul    %[tmp32],       %[tmp32],       %[c359]     \n\t"
      "mul    %[tmp321],      %[tmp321],      %[c359]     \n\t"
      "sra    %[tmp16],       %[tmp32],       15          \n\t"
      "sra    %[tmp161],      %[tmp321],      15          \n\t"
      : [randW16p] "+r" (randW16p), [tmp32] "=&r" (tmp32),
        [tmp16] "=r" (tmp16), [tmp161] "=r" (tmp161), [tmp321] "=&r" (tmp321)
      : [c359] "r" (c359)
      : "memory", "hi", "lo"
    );

#if !defined(MIPS_DSP_R1_LE)
    tmp32 = WebRtcAecm_kCosTable[tmp16];
    tmp321 = WebRtcAecm_kSinTable[tmp16];
    tmp322 = WebRtcAecm_kCosTable[tmp161];
    tmp323 = WebRtcAecm_kSinTable[tmp161];
#else
    __asm __volatile (
      "sll    %[tmp16],       %[tmp16],                   1           \n\t"
      "sll    %[tmp161],      %[tmp161],                  1           \n\t"
      "lhx    %[tmp32],       %[tmp16](%[kCosTablep])                 \n\t"
      "lhx    %[tmp321],      %[tmp16](%[kSinTablep])                 \n\t"
      "lhx    %[tmp322],      %[tmp161](%[kCosTablep])                \n\t"
      "lhx    %[tmp323],      %[tmp161](%[kSinTablep])                \n\t"
      : [tmp32] "=&r" (tmp32), [tmp321] "=&r" (tmp321),
        [tmp322] "=&r" (tmp322), [tmp323] "=&r" (tmp323)
      : [kCosTablep] "r" (kCosTablep), [tmp16] "r" (tmp16),
        [tmp161] "r" (tmp161), [kSinTablep] "r" (kSinTablep)
      : "memory"
    );
#endif
    __asm __volatile (
      "mul    %[tmp32],       %[tmp32],                   %[nrsh1]    \n\t"
      "negu   %[tmp162],      %[nrsh1]                                \n\t"
      "mul    %[tmp322],      %[tmp322],                  %[nrsh2]    \n\t"
      "negu   %[tmp163],      %[nrsh2]                                \n\t"
      "sra    %[tmp32],       %[tmp32],                   13          \n\t"
      "mul    %[tmp321],      %[tmp321],                  %[tmp162]   \n\t"
      "sra    %[tmp322],      %[tmp322],                  13          \n\t"
      "mul    %[tmp323],      %[tmp323],                  %[tmp163]   \n\t"
      "sra    %[tmp321],      %[tmp321],                  13          \n\t"
      "sra    %[tmp323],      %[tmp323],                  13          \n\t"
      : [tmp32] "+r" (tmp32), [tmp321] "+r" (tmp321), [tmp162] "=&r" (tmp162),
        [tmp322] "+r" (tmp322), [tmp323] "+r" (tmp323), [tmp163] "=&r" (tmp163)
      : [nrsh1] "r" (nrsh1), [nrsh2] "r" (nrsh2)
      : "hi", "lo"
    );
    // Tables are in Q13.
    uReal[i] = (int16_t)tmp32;
    uImag[i] = (int16_t)tmp321;
    uReal[i + 1] = (int16_t)tmp322;
    uImag[i + 1] = (int16_t)tmp323;
  }

  int32_t tt, sgn;
  tt = out[0].real;
  sgn = ((int)tt) >> 31;
  out[0].real = sgn == (int16_t)(tt >> 15) ? (int16_t)tt : (16384 ^ sgn);
  tt = out[0].imag;
  sgn = ((int)tt) >> 31;
  out[0].imag = sgn == (int16_t)(tt >> 15) ? (int16_t)tt : (16384 ^ sgn);
  for (i = 1; i < PART_LEN; i++) {
    tt = out[i].real + uReal[i];
    sgn = ((int)tt) >> 31;
    out[i].real = sgn == (int16_t)(tt >> 15) ? (int16_t)tt : (16384 ^ sgn);
    tt = out[i].imag + uImag[i];
    sgn = ((int)tt) >> 31;
    out[i].imag = sgn == (int16_t)(tt >> 15) ? (int16_t)tt : (16384 ^ sgn);
  }
  tt = out[PART_LEN].real + uReal[PART_LEN];
  sgn = ((int)tt) >> 31;
  out[PART_LEN].real = sgn == (int16_t)(tt >> 15) ? (int16_t)tt : (16384 ^ sgn);
  tt = out[PART_LEN].imag;
  sgn = ((int)tt) >> 31;
  out[PART_LEN].imag = sgn == (int16_t)(tt >> 15) ? (int16_t)tt : (16384 ^ sgn);
}

