diff options
author | bjornv@webrtc.org <bjornv@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-06-05 08:53:51 +0000 |
---|---|---|
committer | bjornv@webrtc.org <bjornv@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-06-05 08:53:51 +0000 |
commit | 39dec2c6b1537a46bb35fecc0dd2ffca28bb58a8 (patch) | |
tree | a482b5262e99b0b4507f39e9b67b3e1dab80ab02 /common_audio/signal_processing | |
parent | c80629028957f285a03b1f1b8360dca4d4bd7e98 (diff) | |
download | webrtc-39dec2c6b1537a46bb35fecc0dd2ffca28bb58a8.tar.gz |
The correct fix of workaround in r6261.
The CL also includes same changes to filterbanks.c in iSAC fix and aecm_core_c.c
BUG=3370,3395,3439
TESTED=trybots
R=fdegans@chromium.org, glaznev@webrtc.org, kwiberg@webrtc.org, tina.legrand@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/14609004
git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@6337 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'common_audio/signal_processing')
-rw-r--r-- | common_audio/signal_processing/complex_fft.c | 33 | ||||
-rw-r--r-- | common_audio/signal_processing/include/spl_inl_armv7.h | 2 |
2 files changed, 17 insertions, 18 deletions
diff --git a/common_audio/signal_processing/complex_fft.c b/common_audio/signal_processing/complex_fft.c index a026b70b..c8230647 100644 --- a/common_audio/signal_processing/complex_fft.c +++ b/common_audio/signal_processing/complex_fft.c @@ -105,7 +105,6 @@ int WebRtcSpl_ComplexFFT(int16_t frfi[], int stages, int mode) #ifdef WEBRTC_ARCH_ARM_V7 int32_t wri = 0; - int32_t frfi_r = 0; __asm __volatile("pkhbt %0, %1, %2, lsl #16" : "=r"(wri) : "r"((int32_t)wr), "r"((int32_t)wi)); #endif @@ -115,19 +114,19 @@ int WebRtcSpl_ComplexFFT(int16_t frfi[], int stages, int mode) j = i + l; #ifdef WEBRTC_ARCH_ARM_V7 - __asm __volatile( - "pkhbt %[frfi_r], %[frfi_even], %[frfi_odd], lsl #16\n\t" - "smlsd %[tr32], %[wri], %[frfi_r], %[cfftrnd]\n\t" - :[frfi_r]"+r"(frfi_r), - [tr32]"=r"(tr32) - :[frfi_even]"r"((int32_t)frfi[2*j]), - [frfi_odd]"r"((int32_t)frfi[2*j +1]), - [wri]"r"(wri), - [cfftrnd]"r"(CFFTRND) - ); - __asm __volatile("smladx %0, %1, %2, %3\n\t" : "=r"(ti32) : - "r"(wri), "r"(frfi_r), "r"(CFFTRND)); - + register int32_t frfi_r; + __asm __volatile( + "pkhbt %[frfi_r], %[frfi_even], %[frfi_odd]," + " lsl #16\n\t" + "smlsd %[tr32], %[wri], %[frfi_r], %[cfftrnd]\n\t" + "smladx %[ti32], %[wri], %[frfi_r], %[cfftrnd]\n\t" + :[frfi_r]"=&r"(frfi_r), + [tr32]"=&r"(tr32), + [ti32]"=r"(ti32) + :[frfi_even]"r"((int32_t)frfi[2*j]), + [frfi_odd]"r"((int32_t)frfi[2*j +1]), + [wri]"r"(wri), + [cfftrnd]"r"(CFFTRND)); #else tr32 = WEBRTC_SPL_MUL_16_16(wr, frfi[2 * j]) - WEBRTC_SPL_MUL_16_16(wi, frfi[2 * j + 1]) + CFFTRND; @@ -252,7 +251,6 @@ int WebRtcSpl_ComplexIFFT(int16_t frfi[], int stages, int mode) #ifdef WEBRTC_ARCH_ARM_V7 int32_t wri = 0; - int32_t frfi_r = 0; __asm __volatile("pkhbt %0, %1, %2, lsl #16" : "=r"(wri) : "r"((int32_t)wr), "r"((int32_t)wi)); #endif @@ -262,12 +260,13 @@ int WebRtcSpl_ComplexIFFT(int16_t frfi[], int stages, int mode) j = i + l; #ifdef WEBRTC_ARCH_ARM_V7 + register int32_t frfi_r; __asm __volatile( "pkhbt %[frfi_r], %[frfi_even], %[frfi_odd], lsl #16\n\t" "smlsd %[tr32], %[wri], %[frfi_r], %[cifftrnd]\n\t" "smladx %[ti32], %[wri], %[frfi_r], %[cifftrnd]\n\t" - :[frfi_r]"+r"(frfi_r), - [tr32]"=r"(tr32), + :[frfi_r]"=&r"(frfi_r), + [tr32]"=&r"(tr32), [ti32]"=r"(ti32) :[frfi_even]"r"((int32_t)frfi[2*j]), [frfi_odd]"r"((int32_t)frfi[2*j +1]), diff --git a/common_audio/signal_processing/include/spl_inl_armv7.h b/common_audio/signal_processing/include/spl_inl_armv7.h index fdbcb434..a437a555 100644 --- a/common_audio/signal_processing/include/spl_inl_armv7.h +++ b/common_audio/signal_processing/include/spl_inl_armv7.h @@ -41,7 +41,7 @@ static __inline int32_t WEBRTC_SPL_MUL_32_32_RSFT32(int16_t a, __asm __volatile ( "pkhbt %[tmp], %[b], %[a], lsl #16\n\t" "smmulr %[tmp], %[tmp], %[c]\n\t" - :[tmp]"+r"(tmp) + :[tmp]"+&r"(tmp) :[a]"r"(a), [b]"r"(b), [c]"r"(c) |