1e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org/* 2e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org * 4e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org */ 10e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org 11e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org#include "webrtc/modules/audio_coding/codecs/isac/fix/source/pitch_estimator.h" 12e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" 13e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org#include "webrtc/system_wrappers/interface/compile_assert_c.h" 14e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org 15e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.orgextern int32_t WebRtcIsacfix_Log2Q8(uint32_t x); 16e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org 17e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.orgvoid WebRtcIsacfix_PCorr2Q32(const int16_t* in, int32_t* logcorQ8) { 18e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org int16_t scaling,n,k; 19e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org int32_t ysum32,csum32, lys, lcs; 20e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org int32_t oneQ8; 21e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org const int16_t* x; 22e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org const int16_t* inptr; 23e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org 24e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org oneQ8 = WEBRTC_SPL_LSHIFT_W32((int32_t)1, 8); // 1.00 in Q8 25e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org x = in + PITCH_MAX_LAG / 2 + 2; 26e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org scaling = WebRtcSpl_GetScalingSquare((int16_t*)in, 27e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org PITCH_CORR_LEN2, 28e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org PITCH_CORR_LEN2); 29e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org ysum32 = 1; 30e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org csum32 = 0; 31e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org x = in + PITCH_MAX_LAG / 2 + 2; 32e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org { 33e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org const int16_t* tmp_x = x; 34e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org const int16_t* tmp_in = in; 35e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org int32_t tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8; 36e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org n = PITCH_CORR_LEN2; 37e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org COMPILE_ASSERT(PITCH_CORR_LEN2 % 4 == 0); 38e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org __asm __volatile ( 39e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org ".set push \n\t" 40e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org ".set noreorder \n\t" 41e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "1: \n\t" 42e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp1], 0(%[tmp_in]) \n\t" 43e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp2], 2(%[tmp_in]) \n\t" 44e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp3], 4(%[tmp_in]) \n\t" 45e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp4], 6(%[tmp_in]) \n\t" 46e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp5], 0(%[tmp_x]) \n\t" 47e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp6], 2(%[tmp_x]) \n\t" 48e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp7], 4(%[tmp_x]) \n\t" 49e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp8], 6(%[tmp_x]) \n\t" 50e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp5], %[tmp1], %[tmp5] \n\t" 51e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp1], %[tmp1], %[tmp1] \n\t" 52e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp6], %[tmp2], %[tmp6] \n\t" 53e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp2], %[tmp2], %[tmp2] \n\t" 54e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp7], %[tmp3], %[tmp7] \n\t" 55e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp3], %[tmp3], %[tmp3] \n\t" 56e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp8], %[tmp4], %[tmp8] \n\t" 57e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp4], %[tmp4], %[tmp4] \n\t" 58e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addiu %[n], %[n], -4 \n\t" 59e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "srav %[tmp5], %[tmp5], %[scaling] \n\t" 60e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "srav %[tmp1], %[tmp1], %[scaling] \n\t" 61e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "srav %[tmp6], %[tmp6], %[scaling] \n\t" 62e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "srav %[tmp2], %[tmp2], %[scaling] \n\t" 63e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "srav %[tmp7], %[tmp7], %[scaling] \n\t" 64e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "srav %[tmp3], %[tmp3], %[scaling] \n\t" 65e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "srav %[tmp8], %[tmp8], %[scaling] \n\t" 66e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "srav %[tmp4], %[tmp4], %[scaling] \n\t" 67e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addu %[ysum32], %[ysum32], %[tmp1] \n\t" 68e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addu %[csum32], %[csum32], %[tmp5] \n\t" 69e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addu %[ysum32], %[ysum32], %[tmp2] \n\t" 70e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addu %[csum32], %[csum32], %[tmp6] \n\t" 71e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addu %[ysum32], %[ysum32], %[tmp3] \n\t" 72e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addu %[csum32], %[csum32], %[tmp7] \n\t" 73e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addu %[ysum32], %[ysum32], %[tmp4] \n\t" 74e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addu %[csum32], %[csum32], %[tmp8] \n\t" 75e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addiu %[tmp_in], %[tmp_in], 8 \n\t" 76e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "bgtz %[n], 1b \n\t" 77e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org " addiu %[tmp_x], %[tmp_x], 8 \n\t" 78e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org ".set pop \n\t" 79e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org : [tmp1] "=&r" (tmp1), [tmp2] "=&r" (tmp2), [tmp3] "=&r" (tmp3), 80e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org [tmp4] "=&r" (tmp4), [tmp5] "=&r" (tmp5), [tmp6] "=&r" (tmp6), 81e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org [tmp7] "=&r" (tmp7), [tmp8] "=&r" (tmp8), [tmp_in] "+r" (tmp_in), 82e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org [ysum32] "+r" (ysum32), [tmp_x] "+r" (tmp_x), [csum32] "+r" (csum32), 83e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org [n] "+r" (n) 84e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org : [scaling] "r" (scaling) 85e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org : "memory", "hi", "lo" 86e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org ); 87e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org } 88e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org logcorQ8 += PITCH_LAG_SPAN2 - 1; 89e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org lys = WebRtcIsacfix_Log2Q8((uint32_t)ysum32); // Q8 90e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org lys = WEBRTC_SPL_RSHIFT_W32(lys, 1); //sqrt(ysum); 91e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org if (csum32 > 0) { 92e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org lcs = WebRtcIsacfix_Log2Q8((uint32_t)csum32); // 2log(csum) in Q8 93e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org if (lcs > (lys + oneQ8)) { // csum/sqrt(ysum) > 2 in Q8 94e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org *logcorQ8 = lcs - lys; // log2(csum/sqrt(ysum)) 95e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org } else { 96e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org *logcorQ8 = oneQ8; // 1.00 97e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org } 98e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org } else { 99e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org *logcorQ8 = 0; 100e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org } 101e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org 102e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org for (k = 1; k < PITCH_LAG_SPAN2; k++) { 103e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org inptr = &in[k]; 104e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org const int16_t* tmp_in1 = &in[k - 1]; 105e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org const int16_t* tmp_in2 = &in[PITCH_CORR_LEN2 + k - 1]; 106e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org const int16_t* tmp_x = x; 107e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org int32_t tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8; 108e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org n = PITCH_CORR_LEN2; 109e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org csum32 = 0; 110e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org __asm __volatile ( 111e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org ".set push \n\t" 112e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org ".set noreorder \n\t" 113e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp1], 0(%[tmp_in1]) \n\t" 114e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp2], 0(%[tmp_in2]) \n\t" 115e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp1], %[tmp1], %[tmp1] \n\t" 116e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp2], %[tmp2], %[tmp2] \n\t" 117e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "srav %[tmp1], %[tmp1], %[scaling] \n\t" 118e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "srav %[tmp2], %[tmp2], %[scaling] \n\t" 119e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "subu %[ysum32], %[ysum32], %[tmp1] \n\t" 120e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "bnez %[scaling], 2f \n\t" 121e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org " addu %[ysum32], %[ysum32], %[tmp2] \n\t" 122e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "1: \n\t" 123e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp1], 0(%[inptr]) \n\t" 124e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp2], 0(%[tmp_x]) \n\t" 125e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp3], 2(%[inptr]) \n\t" 126e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp4], 2(%[tmp_x]) \n\t" 127e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp5], 4(%[inptr]) \n\t" 128e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp6], 4(%[tmp_x]) \n\t" 129e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp7], 6(%[inptr]) \n\t" 130e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp8], 6(%[tmp_x]) \n\t" 131e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp1], %[tmp1], %[tmp2] \n\t" 132e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp2], %[tmp3], %[tmp4] \n\t" 133e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp3], %[tmp5], %[tmp6] \n\t" 134e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp4], %[tmp7], %[tmp8] \n\t" 135e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addiu %[n], %[n], -4 \n\t" 136e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addiu %[inptr], %[inptr], 8 \n\t" 137e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addiu %[tmp_x], %[tmp_x], 8 \n\t" 138e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addu %[csum32], %[csum32], %[tmp1] \n\t" 139e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addu %[csum32], %[csum32], %[tmp2] \n\t" 140e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addu %[csum32], %[csum32], %[tmp3] \n\t" 141e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "bgtz %[n], 1b \n\t" 142e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org " addu %[csum32], %[csum32], %[tmp4] \n\t" 143e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "b 3f \n\t" 144e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org " nop \n\t" 145e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "2: \n\t" 146e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp1], 0(%[inptr]) \n\t" 147e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp2], 0(%[tmp_x]) \n\t" 148e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp3], 2(%[inptr]) \n\t" 149e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp4], 2(%[tmp_x]) \n\t" 150e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp5], 4(%[inptr]) \n\t" 151e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp6], 4(%[tmp_x]) \n\t" 152e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp7], 6(%[inptr]) \n\t" 153e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "lh %[tmp8], 6(%[tmp_x]) \n\t" 154e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp1], %[tmp1], %[tmp2] \n\t" 155e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp2], %[tmp3], %[tmp4] \n\t" 156e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp3], %[tmp5], %[tmp6] \n\t" 157e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "mul %[tmp4], %[tmp7], %[tmp8] \n\t" 158e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addiu %[n], %[n], -4 \n\t" 159e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addiu %[inptr], %[inptr], 8 \n\t" 160e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addiu %[tmp_x], %[tmp_x], 8 \n\t" 161e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "srav %[tmp1], %[tmp1], %[scaling] \n\t" 162e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "srav %[tmp2], %[tmp2], %[scaling] \n\t" 163e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "srav %[tmp3], %[tmp3], %[scaling] \n\t" 164e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "srav %[tmp4], %[tmp4], %[scaling] \n\t" 165e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addu %[csum32], %[csum32], %[tmp1] \n\t" 166e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addu %[csum32], %[csum32], %[tmp2] \n\t" 167e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "addu %[csum32], %[csum32], %[tmp3] \n\t" 168e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "bgtz %[n], 2b \n\t" 169e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org " addu %[csum32], %[csum32], %[tmp4] \n\t" 170e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org "3: \n\t" 171e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org ".set pop \n\t" 172e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org : [tmp1] "=&r" (tmp1), [tmp2] "=&r" (tmp2), [tmp3] "=&r" (tmp3), 173e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org [tmp4] "=&r" (tmp4), [tmp5] "=&r" (tmp5), [tmp6] "=&r" (tmp6), 174e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org [tmp7] "=&r" (tmp7), [tmp8] "=&r" (tmp8), [inptr] "+r" (inptr), 175e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org [csum32] "+r" (csum32), [tmp_x] "+r" (tmp_x), [ysum32] "+r" (ysum32), 176e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org [n] "+r" (n) 177e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org : [tmp_in1] "r" (tmp_in1), [tmp_in2] "r" (tmp_in2), 178e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org [scaling] "r" (scaling) 179e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org : "memory", "hi", "lo" 180e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org ); 181e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org 182e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org logcorQ8--; 183e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org lys = WebRtcIsacfix_Log2Q8((uint32_t)ysum32); // Q8 184e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org lys = WEBRTC_SPL_RSHIFT_W32(lys, 1); //sqrt(ysum); 185e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org if (csum32 > 0) { 186e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org lcs = WebRtcIsacfix_Log2Q8((uint32_t)csum32); // 2log(csum) in Q8 187e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org if (lcs > (lys + oneQ8)) { // csum/sqrt(ysum) > 2 188e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org *logcorQ8 = lcs - lys; // log2(csum/sqrt(ysum)) 189e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org } else { 190e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org *logcorQ8 = oneQ8; // 1.00 191e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org } 192e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org } else { 193e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org *logcorQ8 = 0; 194e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org } 195e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org } 196e4834e042a794dbf042bfd0934e335598d7ce4b8andrew@webrtc.org} 197