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

Side by Side Diff: webrtc/modules/audio_processing/utility/ooura_fft_mips.cc

Issue 2348213002: Move the aec_rdft* files to a more proper place beneath APM and make them thread-safe. (Closed)
Patch Set: Rebase Created 4 years, 2 months 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) 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2014 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
11 #include "webrtc/modules/audio_processing/aec/aec_rdft.h" 11 #include "webrtc/modules/audio_processing/utility/ooura_fft.h"
12
13 #include "webrtc/modules/audio_processing/utility/ooura_fft_tables_common.h"
12 #include "webrtc/typedefs.h" 14 #include "webrtc/typedefs.h"
13 15
14 static void bitrv2_128_mips(float* a) { 16 namespace webrtc {
17
18 #if defined(MIPS_FPU_LE)
19 void bitrv2_128_mips(float* a) {
15 // n is 128 20 // n is 128
16 float xr, xi, yr, yi; 21 float xr, xi, yr, yi;
17 22
18 xr = a[8]; 23 xr = a[8];
19 xi = a[9]; 24 xi = a[9];
20 yr = a[16]; 25 yr = a[16];
21 yi = a[17]; 26 yi = a[17];
22 a[8] = yr; 27 a[8] = yr;
23 a[9] = yi; 28 a[9] = yi;
24 a[16] = xr; 29 a[16] = xr;
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 xr = a[110]; 266 xr = a[110];
262 xi = a[111]; 267 xi = a[111];
263 yr = a[118]; 268 yr = a[118];
264 yi = a[119]; 269 yi = a[119];
265 a[110] = yr; 270 a[110] = yr;
266 a[111] = yi; 271 a[111] = yi;
267 a[118] = xr; 272 a[118] = xr;
268 a[119] = xi; 273 a[119] = xi;
269 } 274 }
270 275
271 static void cft1st_128_mips(float* a) { 276 void cft1st_128_mips(float* a) {
272 float f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14; 277 float f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14;
273 int a_ptr, p1_rdft, p2_rdft, count; 278 int a_ptr, p1_rdft, p2_rdft, count;
274 const float* first = rdft_wk3ri_first; 279 const float* first = rdft_wk3ri_first;
275 const float* second = rdft_wk3ri_second; 280 const float* second = rdft_wk3ri_second;
276 281
277 __asm __volatile ( 282 __asm __volatile (
278 ".set push \n\t" 283 ".set push \n\t"
279 ".set noreorder \n\t" 284 ".set noreorder \n\t"
280 // first 8 285 // first 8
281 "lwc1 %[f0], 0(%[a]) \n\t" 286 "lwc1 %[f0], 0(%[a]) \n\t"
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 [f4] "=&f" (f4), [f5] "=&f" (f5), [f6] "=&f" (f6), [f7] "=&f" (f7), 515 [f4] "=&f" (f4), [f5] "=&f" (f5), [f6] "=&f" (f6), [f7] "=&f" (f7),
511 [f8] "=&f" (f8), [f9] "=&f" (f9), [f10] "=&f" (f10), [f11] "=&f" (f11), 516 [f8] "=&f" (f8), [f9] "=&f" (f9), [f10] "=&f" (f10), [f11] "=&f" (f11),
512 [f12] "=&f" (f12), [f13] "=&f" (f13), [f14] "=&f" (f14), 517 [f12] "=&f" (f12), [f13] "=&f" (f13), [f14] "=&f" (f14),
513 [a_ptr] "=&r" (a_ptr), [p1_rdft] "=&r" (p1_rdft), [first] "+r" (first), 518 [a_ptr] "=&r" (a_ptr), [p1_rdft] "=&r" (p1_rdft), [first] "+r" (first),
514 [p2_rdft] "=&r" (p2_rdft), [count] "=&r" (count), [second] "+r" (second) 519 [p2_rdft] "=&r" (p2_rdft), [count] "=&r" (count), [second] "+r" (second)
515 : [a] "r" (a), [rdft_w] "r" (rdft_w) 520 : [a] "r" (a), [rdft_w] "r" (rdft_w)
516 : "memory" 521 : "memory"
517 ); 522 );
518 } 523 }
519 524
520 static void cftmdl_128_mips(float* a) { 525 void cftmdl_128_mips(float* a) {
521 float f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14; 526 float f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14;
522 int tmp_a, count; 527 int tmp_a, count;
523 __asm __volatile ( 528 __asm __volatile (
524 ".set push \n\t" 529 ".set push \n\t"
525 ".set noreorder \n\t" 530 ".set noreorder \n\t"
526 "addiu %[tmp_a], %[a], 0 \n\t" 531 "addiu %[tmp_a], %[a], 0 \n\t"
527 "addiu %[count], $zero, 4 \n\t" 532 "addiu %[count], $zero, 4 \n\t"
528 "1: \n\t" 533 "1: \n\t"
529 "addiu %[count], %[count], -1 \n\t" 534 "addiu %[count], %[count], -1 \n\t"
530 "lwc1 %[f0], 0(%[tmp_a]) \n\t" 535 "lwc1 %[f0], 0(%[tmp_a]) \n\t"
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
796 ".set pop \n\t" 801 ".set pop \n\t"
797 : [f0] "=&f" (f0), [f1] "=&f" (f1), [f2] "=&f" (f2), [f3] "=&f" (f3), 802 : [f0] "=&f" (f0), [f1] "=&f" (f1), [f2] "=&f" (f2), [f3] "=&f" (f3),
798 [f4] "=&f" (f4), [f5] "=&f" (f5), [f6] "=&f" (f6), [f7] "=&f" (f7), 803 [f4] "=&f" (f4), [f5] "=&f" (f5), [f6] "=&f" (f6), [f7] "=&f" (f7),
799 [f8] "=&f" (f8), [tmp_a] "=&r" (tmp_a), [count] "=&r" (count) 804 [f8] "=&f" (f8), [tmp_a] "=&r" (tmp_a), [count] "=&r" (count)
800 : [a] "r" (a), [f9] "f" (f9), [f10] "f" (f10), [f11] "f" (f11), 805 : [a] "r" (a), [f9] "f" (f9), [f10] "f" (f10), [f11] "f" (f11),
801 [f12] "f" (f12), [f13] "f" (f13), [f14] "f" (f14) 806 [f12] "f" (f12), [f13] "f" (f13), [f14] "f" (f14)
802 : "memory" 807 : "memory"
803 ); 808 );
804 } 809 }
805 810
806 static void cftfsub_128_mips(float* a) { 811 void cftfsub_128_mips(float* a) {
807 float f0, f1, f2, f3, f4, f5, f6, f7, f8; 812 float f0, f1, f2, f3, f4, f5, f6, f7, f8;
808 int tmp_a, count; 813 int tmp_a, count;
809 814
810 cft1st_128(a); 815 cft1st_128_mips(a);
811 cftmdl_128(a); 816 cftmdl_128_mips(a);
812 817
813 __asm __volatile ( 818 __asm __volatile (
814 ".set push \n\t" 819 ".set push \n\t"
815 ".set noreorder \n\t" 820 ".set noreorder \n\t"
816 "addiu %[tmp_a], %[a], 0 \n\t" 821 "addiu %[tmp_a], %[a], 0 \n\t"
817 "addiu %[count], $zero, 16 \n\t" 822 "addiu %[count], $zero, 16 \n\t"
818 "1: \n\t" 823 "1: \n\t"
819 "addiu %[count], %[count], -1 \n\t" 824 "addiu %[count], %[count], -1 \n\t"
820 "lwc1 %[f0], 0(%[tmp_a]) \n\t" 825 "lwc1 %[f0], 0(%[tmp_a]) \n\t"
821 "lwc1 %[f2], 128(%[tmp_a]) \n\t" 826 "lwc1 %[f2], 128(%[tmp_a]) \n\t"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
854 ".set pop \n\t" 859 ".set pop \n\t"
855 : [f0] "=&f" (f0), [f1] "=&f" (f1), [f2] "=&f" (f2), [f3] "=&f" (f3), 860 : [f0] "=&f" (f0), [f1] "=&f" (f1), [f2] "=&f" (f2), [f3] "=&f" (f3),
856 [f4] "=&f" (f4), [f5] "=&f" (f5), [f6] "=&f" (f6), [f7] "=&f" (f7), 861 [f4] "=&f" (f4), [f5] "=&f" (f5), [f6] "=&f" (f6), [f7] "=&f" (f7),
857 [f8] "=&f" (f8), [tmp_a] "=&r" (tmp_a), 862 [f8] "=&f" (f8), [tmp_a] "=&r" (tmp_a),
858 [count] "=&r" (count) 863 [count] "=&r" (count)
859 : [a] "r" (a) 864 : [a] "r" (a)
860 : "memory" 865 : "memory"
861 ); 866 );
862 } 867 }
863 868
864 static void cftbsub_128_mips(float* a) { 869 void cftbsub_128_mips(float* a) {
865 float f0, f1, f2, f3, f4, f5, f6, f7, f8; 870 float f0, f1, f2, f3, f4, f5, f6, f7, f8;
866 int tmp_a, count; 871 int tmp_a, count;
867 872
868 cft1st_128(a); 873 cft1st_128_mips(a);
869 cftmdl_128(a); 874 cftmdl_128_mips(a);
870 875
871 __asm __volatile ( 876 __asm __volatile (
872 ".set push \n\t" 877 ".set push \n\t"
873 ".set noreorder \n\t" 878 ".set noreorder \n\t"
874 "addiu %[tmp_a], %[a], 0 \n\t" 879 "addiu %[tmp_a], %[a], 0 \n\t"
875 "addiu %[count], $zero, 16 \n\t" 880 "addiu %[count], $zero, 16 \n\t"
876 "1: \n\t" 881 "1: \n\t"
877 "addiu %[count], %[count], -1 \n\t" 882 "addiu %[count], %[count], -1 \n\t"
878 "lwc1 %[f0], 0(%[tmp_a]) \n\t" 883 "lwc1 %[f0], 0(%[tmp_a]) \n\t"
879 "lwc1 %[f2], 128(%[tmp_a]) \n\t" 884 "lwc1 %[f2], 128(%[tmp_a]) \n\t"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
912 " addiu %[tmp_a], %[tmp_a], 8 \n\t" 917 " addiu %[tmp_a], %[tmp_a], 8 \n\t"
913 ".set pop \n\t" 918 ".set pop \n\t"
914 : [f0] "=&f" (f0), [f1] "=&f" (f1), [f2] "=&f" (f2), [f3] "=&f" (f3), 919 : [f0] "=&f" (f0), [f1] "=&f" (f1), [f2] "=&f" (f2), [f3] "=&f" (f3),
915 [f4] "=&f" (f4), [f5] "=&f" (f5), [f6] "=&f" (f6), [f7] "=&f" (f7), 920 [f4] "=&f" (f4), [f5] "=&f" (f5), [f6] "=&f" (f6), [f7] "=&f" (f7),
916 [f8] "=&f" (f8), [tmp_a] "=&r" (tmp_a), [count] "=&r" (count) 921 [f8] "=&f" (f8), [tmp_a] "=&r" (tmp_a), [count] "=&r" (count)
917 : [a] "r" (a) 922 : [a] "r" (a)
918 : "memory" 923 : "memory"
919 ); 924 );
920 } 925 }
921 926
922 static void rftfsub_128_mips(float* a) { 927 void rftfsub_128_mips(float* a) {
923 const float* c = rdft_w + 32; 928 const float* c = rdft_w + 32;
924 const float f0 = 0.5f; 929 const float f0 = 0.5f;
925 float* a1 = &a[2]; 930 float* a1 = &a[2];
926 float* a2 = &a[126]; 931 float* a2 = &a[126];
927 const float* c1 = &c[1]; 932 const float* c1 = &c[1];
928 const float* c2 = &c[31]; 933 const float* c2 = &c[31];
929 float f1, f2, f3 ,f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15; 934 float f1, f2, f3 ,f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15;
930 int count; 935 int count;
931 936
932 __asm __volatile ( 937 __asm __volatile (
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1039 [f1] "=&f" (f1), [f2] "=&f" (f2), [f3] "=&f" (f3), [f4] "=&f" (f4), 1044 [f1] "=&f" (f1), [f2] "=&f" (f2), [f3] "=&f" (f3), [f4] "=&f" (f4),
1040 [f5] "=&f" (f5), [f6] "=&f" (f6), [f7] "=&f" (f7), [f8] "=&f" (f8), 1045 [f5] "=&f" (f5), [f6] "=&f" (f6), [f7] "=&f" (f7), [f8] "=&f" (f8),
1041 [f9] "=&f" (f9), [f10] "=&f" (f10), [f11] "=&f" (f11), [f12] "=&f" (f12), 1046 [f9] "=&f" (f9), [f10] "=&f" (f10), [f11] "=&f" (f11), [f12] "=&f" (f12),
1042 [f13] "=&f" (f13), [f14] "=&f" (f14), [f15] "=&f" (f15), 1047 [f13] "=&f" (f13), [f14] "=&f" (f14), [f15] "=&f" (f15),
1043 [count] "=&r" (count) 1048 [count] "=&r" (count)
1044 : [f0] "f" (f0) 1049 : [f0] "f" (f0)
1045 : "memory" 1050 : "memory"
1046 ); 1051 );
1047 } 1052 }
1048 1053
1049 static void rftbsub_128_mips(float* a) { 1054 void rftbsub_128_mips(float* a) {
1050 const float *c = rdft_w + 32; 1055 const float *c = rdft_w + 32;
1051 const float f0 = 0.5f; 1056 const float f0 = 0.5f;
1052 float* a1 = &a[2]; 1057 float* a1 = &a[2];
1053 float* a2 = &a[126]; 1058 float* a2 = &a[126];
1054 const float* c1 = &c[1]; 1059 const float* c1 = &c[1];
1055 const float* c2 = &c[31]; 1060 const float* c2 = &c[31];
1056 float f1, f2, f3 ,f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15; 1061 float f1, f2, f3 ,f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15;
1057 int count; 1062 int count;
1058 1063
1059 a[1] = -a[1]; 1064 a[1] = -a[1];
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1168 : [a1] "+r" (a1), [a2] "+r" (a2), [c1] "+r" (c1), [c2] "+r" (c2), 1173 : [a1] "+r" (a1), [a2] "+r" (a2), [c1] "+r" (c1), [c2] "+r" (c2),
1169 [f1] "=&f" (f1), [f2] "=&f" (f2), [f3] "=&f" (f3), [f4] "=&f" (f4), 1174 [f1] "=&f" (f1), [f2] "=&f" (f2), [f3] "=&f" (f3), [f4] "=&f" (f4),
1170 [f5] "=&f" (f5), [f6] "=&f" (f6), [f7] "=&f" (f7), [f8] "=&f" (f8), 1175 [f5] "=&f" (f5), [f6] "=&f" (f6), [f7] "=&f" (f7), [f8] "=&f" (f8),
1171 [f9] "=&f" (f9), [f10] "=&f" (f10), [f11] "=&f" (f11), [f12] "=&f" (f12), 1176 [f9] "=&f" (f9), [f10] "=&f" (f10), [f11] "=&f" (f11), [f12] "=&f" (f12),
1172 [f13] "=&f" (f13), [f14] "=&f" (f14), [f15] "=&f" (f15), 1177 [f13] "=&f" (f13), [f14] "=&f" (f14), [f15] "=&f" (f15),
1173 [count] "=&r" (count) 1178 [count] "=&r" (count)
1174 : [f0] "f" (f0) 1179 : [f0] "f" (f0)
1175 : "memory" 1180 : "memory"
1176 ); 1181 );
1177 } 1182 }
1183 #endif
1178 1184
1179 void aec_rdft_init_mips(void) { 1185 } // namespace webrtc
1180 cft1st_128 = cft1st_128_mips;
1181 cftmdl_128 = cftmdl_128_mips;
1182 rftfsub_128 = rftfsub_128_mips;
1183 rftbsub_128 = rftbsub_128_mips;
1184 cftfsub_128 = cftfsub_128_mips;
1185 cftbsub_128 = cftbsub_128_mips;
1186 bitrv2_128 = bitrv2_128_mips;
1187 }
OLDNEW
« no previous file with comments | « webrtc/modules/audio_processing/utility/ooura_fft.cc ('k') | webrtc/modules/audio_processing/utility/ooura_fft_neon.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698