Replace left shift with equivalent multiplication.

We have done changes to the Audio Processing fuzzer here
https://webrtc-review.googlesource.com/c/src/+/36500/6.

We ran the new version of the fuzzer locally. The UBSAN
detector found these (minor) issues.

We have used the Godbolt compiler explorer to check that similar
changes produce identical compiled code.

Bug: webrtc:7820
Change-Id: I9cc3b81e4be7cf691f878c37010ce105bc2f3e38
Reviewed-on: https://webrtc-review.googlesource.com/39264
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21605}
This commit is contained in:
Alex Loiko 2018-01-12 13:48:06 +01:00 committed by Commit Bot
parent d84b3d1f3d
commit ee67ca3fd8
2 changed files with 6 additions and 6 deletions

View file

@ -134,8 +134,8 @@ int WebRtcSpl_ComplexFFT(int16_t frfi[], int stages, int mode)
tr32 >>= 15 - CFFTSFT; tr32 >>= 15 - CFFTSFT;
ti32 >>= 15 - CFFTSFT; ti32 >>= 15 - CFFTSFT;
qr32 = ((int32_t)frfi[2 * i]) << CFFTSFT; qr32 = ((int32_t)frfi[2 * i]) * (1 << CFFTSFT);
qi32 = ((int32_t)frfi[2 * i + 1]) << CFFTSFT; qi32 = ((int32_t)frfi[2 * i + 1]) * (1 << CFFTSFT);
frfi[2 * j] = (int16_t)( frfi[2 * j] = (int16_t)(
(qr32 - tr32 + CFFTRND2) >> (1 + CFFTSFT)); (qr32 - tr32 + CFFTRND2) >> (1 + CFFTSFT));
@ -276,8 +276,8 @@ int WebRtcSpl_ComplexIFFT(int16_t frfi[], int stages, int mode)
tr32 >>= 15 - CIFFTSFT; tr32 >>= 15 - CIFFTSFT;
ti32 >>= 15 - CIFFTSFT; ti32 >>= 15 - CIFFTSFT;
qr32 = ((int32_t)frfi[2 * i]) << CIFFTSFT; qr32 = ((int32_t)frfi[2 * i]) * (1 << CIFFTSFT);
qi32 = ((int32_t)frfi[2 * i + 1]) << CIFFTSFT; qi32 = ((int32_t)frfi[2 * i + 1]) * (1 << CIFFTSFT);
frfi[2 * j] = (int16_t)( frfi[2 * j] = (int16_t)(
(qr32 - tr32 + round2) >> (shift + CIFFTSFT)); (qr32 - tr32 + round2) >> (shift + CIFFTSFT));

View file

@ -74,9 +74,9 @@ static void WindowAndFFT(AecmCore* aecm,
for (i = 0; i < PART_LEN; i++) { for (i = 0; i < PART_LEN; i++) {
// Window time domain signal and insert into real part of // Window time domain signal and insert into real part of
// transformation array |fft| // transformation array |fft|
int16_t scaled_time_signal = time_signal[i] << time_signal_scaling; int16_t scaled_time_signal = time_signal[i] * (1 << time_signal_scaling);
fft[i] = (int16_t)((scaled_time_signal * WebRtcAecm_kSqrtHanning[i]) >> 14); fft[i] = (int16_t)((scaled_time_signal * WebRtcAecm_kSqrtHanning[i]) >> 14);
scaled_time_signal = time_signal[i + PART_LEN] << time_signal_scaling; scaled_time_signal = time_signal[i + PART_LEN] * (1 << time_signal_scaling);
fft[PART_LEN + i] = (int16_t)(( fft[PART_LEN + i] = (int16_t)((
scaled_time_signal * WebRtcAecm_kSqrtHanning[PART_LEN - i]) >> 14); scaled_time_signal * WebRtcAecm_kSqrtHanning[PART_LEN - i]) >> 14);
} }