Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Side by Side Diff: webrtc/modules/audio_processing/aec/aec_core_mips.c

Issue 1455163006: Ducking fix #1:Initial refactoring preparing for further AEC work (changes are bitexact). (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixed problem with variable declared inside loop statement Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 "swc1 %[temp4], -4(%[p_efw1]) \n\t" 692 "swc1 %[temp4], -4(%[p_efw1]) \n\t"
693 : [temp1] "=&f" (temp1), [temp2] "=&f" (temp2), [temp3] "=&f" (temp3), 693 : [temp1] "=&f" (temp1), [temp2] "=&f" (temp2), [temp3] "=&f" (temp3),
694 [temp4] "=&f" (temp4), [p_efw0] "+r" (p_efw0), [p_efw1] "+r" (p_efw1), 694 [temp4] "=&f" (temp4), [p_efw0] "+r" (p_efw0), [p_efw1] "+r" (p_efw1),
695 [p_hNl] "+r" (p_hNl) 695 [p_hNl] "+r" (p_hNl)
696 : 696 :
697 : "memory" 697 : "memory"
698 ); 698 );
699 } 699 }
700 } 700 }
701 701
702 void WebRtcAec_ScaleErrorSignal_mips(AecCore* aec, float ef[2][PART_LEN1]) { 702 void WebRtcAec_ScaleErrorSignal_mips(int extended_filter_enabled,
703 const float mu = aec->extended_filter_enabled ? kExtendedMu : aec->normal_mu; 703 float normal_mu,
704 const float error_threshold = aec->extended_filter_enabled 704 float normal_error_threshold,
705 float *x_pow,
706 float ef[2][PART_LEN1]) {
707 const float mu = extended_filter_enabled ? kExtendedMu : normal_mu;
708 const float error_threshold = extended_filter_enabled
705 ? kExtendedErrorThreshold 709 ? kExtendedErrorThreshold
706 : aec->normal_error_threshold; 710 : normal_error_threshold;
707 int len = (PART_LEN1); 711 int len = (PART_LEN1);
708 float* ef0 = ef[0]; 712 float* ef0 = ef[0];
709 float* ef1 = ef[1]; 713 float* ef1 = ef[1];
710 float* xPow = aec->xPow;
711 float fac1 = 1e-10f; 714 float fac1 = 1e-10f;
712 float err_th2 = error_threshold * error_threshold; 715 float err_th2 = error_threshold * error_threshold;
713 float f0, f1, f2; 716 float f0, f1, f2;
714 #if !defined(MIPS32_R2_LE) 717 #if !defined(MIPS32_R2_LE)
715 float f3; 718 float f3;
716 #endif 719 #endif
717 720
718 __asm __volatile ( 721 __asm __volatile (
719 ".set push \n\t" 722 ".set push \n\t"
720 ".set noreorder \n\t" 723 ".set noreorder \n\t"
721 "1: \n\t" 724 "1: \n\t"
722 "lwc1 %[f0], 0(%[xPow]) \n\t" 725 "lwc1 %[f0], 0(%[x_pow]) \n\t"
723 "lwc1 %[f1], 0(%[ef0]) \n\t" 726 "lwc1 %[f1], 0(%[ef0]) \n\t"
724 "lwc1 %[f2], 0(%[ef1]) \n\t" 727 "lwc1 %[f2], 0(%[ef1]) \n\t"
725 "add.s %[f0], %[f0], %[fac1] \n\t" 728 "add.s %[f0], %[f0], %[fac1] \n\t"
726 "div.s %[f1], %[f1], %[f0] \n\t" 729 "div.s %[f1], %[f1], %[f0] \n\t"
727 "div.s %[f2], %[f2], %[f0] \n\t" 730 "div.s %[f2], %[f2], %[f0] \n\t"
728 "mul.s %[f0], %[f1], %[f1] \n\t" 731 "mul.s %[f0], %[f1], %[f1] \n\t"
729 #if defined(MIPS32_R2_LE) 732 #if defined(MIPS32_R2_LE)
730 "madd.s %[f0], %[f0], %[f2], %[f2] \n\t" 733 "madd.s %[f0], %[f0], %[f2], %[f2] \n\t"
731 #else 734 #else
732 "mul.s %[f3], %[f2], %[f2] \n\t" 735 "mul.s %[f3], %[f2], %[f2] \n\t"
733 "add.s %[f0], %[f0], %[f3] \n\t" 736 "add.s %[f0], %[f0], %[f3] \n\t"
734 #endif 737 #endif
735 "c.le.s %[f0], %[err_th2] \n\t" 738 "c.le.s %[f0], %[err_th2] \n\t"
736 "nop \n\t" 739 "nop \n\t"
737 "bc1t 2f \n\t" 740 "bc1t 2f \n\t"
738 " nop \n\t" 741 " nop \n\t"
739 "sqrt.s %[f0], %[f0] \n\t" 742 "sqrt.s %[f0], %[f0] \n\t"
740 "add.s %[f0], %[f0], %[fac1] \n\t" 743 "add.s %[f0], %[f0], %[fac1] \n\t"
741 "div.s %[f0], %[err_th], %[f0] \n\t" 744 "div.s %[f0], %[err_th], %[f0] \n\t"
742 "mul.s %[f1], %[f1], %[f0] \n\t" 745 "mul.s %[f1], %[f1], %[f0] \n\t"
743 "mul.s %[f2], %[f2], %[f0] \n\t" 746 "mul.s %[f2], %[f2], %[f0] \n\t"
744 "2: \n\t" 747 "2: \n\t"
745 "mul.s %[f1], %[f1], %[mu] \n\t" 748 "mul.s %[f1], %[f1], %[mu] \n\t"
746 "mul.s %[f2], %[f2], %[mu] \n\t" 749 "mul.s %[f2], %[f2], %[mu] \n\t"
747 "swc1 %[f1], 0(%[ef0]) \n\t" 750 "swc1 %[f1], 0(%[ef0]) \n\t"
748 "swc1 %[f2], 0(%[ef1]) \n\t" 751 "swc1 %[f2], 0(%[ef1]) \n\t"
749 "addiu %[len], %[len], -1 \n\t" 752 "addiu %[len], %[len], -1 \n\t"
750 "addiu %[xPow], %[xPow], 4 \n\t" 753 "addiu %[x_pow], %[x_pow], 4 \n\t"
751 "addiu %[ef0], %[ef0], 4 \n\t" 754 "addiu %[ef0], %[ef0], 4 \n\t"
752 "bgtz %[len], 1b \n\t" 755 "bgtz %[len], 1b \n\t"
753 " addiu %[ef1], %[ef1], 4 \n\t" 756 " addiu %[ef1], %[ef1], 4 \n\t"
754 ".set pop \n\t" 757 ".set pop \n\t"
755 : [f0] "=&f" (f0), [f1] "=&f" (f1), [f2] "=&f" (f2), 758 : [f0] "=&f" (f0), [f1] "=&f" (f1), [f2] "=&f" (f2),
756 #if !defined(MIPS32_R2_LE) 759 #if !defined(MIPS32_R2_LE)
757 [f3] "=&f" (f3), 760 [f3] "=&f" (f3),
758 #endif 761 #endif
759 [xPow] "+r" (xPow), [ef0] "+r" (ef0), [ef1] "+r" (ef1), 762 [x_pow] "+r" (x_pow), [ef0] "+r" (ef0), [ef1] "+r" (ef1),
760 [len] "+r" (len) 763 [len] "+r" (len)
761 : [fac1] "f" (fac1), [err_th2] "f" (err_th2), [mu] "f" (mu), 764 : [fac1] "f" (fac1), [err_th2] "f" (err_th2), [mu] "f" (mu),
762 [err_th] "f" (error_threshold) 765 [err_th] "f" (error_threshold)
763 : "memory" 766 : "memory"
764 ); 767 );
765 } 768 }
766 769
767 void WebRtcAec_InitAec_mips(void) { 770 void WebRtcAec_InitAec_mips(void) {
768 WebRtcAec_FilterFar = WebRtcAec_FilterFar_mips; 771 WebRtcAec_FilterFar = WebRtcAec_FilterFar_mips;
769 WebRtcAec_FilterAdaptation = WebRtcAec_FilterAdaptation_mips; 772 WebRtcAec_FilterAdaptation = WebRtcAec_FilterAdaptation_mips;
770 WebRtcAec_ScaleErrorSignal = WebRtcAec_ScaleErrorSignal_mips; 773 WebRtcAec_ScaleErrorSignal = WebRtcAec_ScaleErrorSignal_mips;
771 WebRtcAec_ComfortNoise = WebRtcAec_ComfortNoise_mips; 774 WebRtcAec_ComfortNoise = WebRtcAec_ComfortNoise_mips;
772 WebRtcAec_OverdriveAndSuppress = WebRtcAec_OverdriveAndSuppress_mips; 775 WebRtcAec_OverdriveAndSuppress = WebRtcAec_OverdriveAndSuppress_mips;
773 } 776 }
774
OLDNEW
« no previous file with comments | « webrtc/modules/audio_processing/aec/aec_core_internal.h ('k') | webrtc/modules/audio_processing/aec/aec_core_neon.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698