diff options
Diffstat (limited to 'lib/rbcodec/codecs/libopus/silk/arm/macros_armv5e.h')
-rw-r--r-- | lib/rbcodec/codecs/libopus/silk/arm/macros_armv5e.h | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/rbcodec/codecs/libopus/silk/arm/macros_armv5e.h b/lib/rbcodec/codecs/libopus/silk/arm/macros_armv5e.h index aad4117e46..b14ec65ddb 100644 --- a/lib/rbcodec/codecs/libopus/silk/arm/macros_armv5e.h +++ b/lib/rbcodec/codecs/libopus/silk/arm/macros_armv5e.h | |||
@@ -29,6 +29,11 @@ POSSIBILITY OF SUCH DAMAGE. | |||
29 | #ifndef SILK_MACROS_ARMv5E_H | 29 | #ifndef SILK_MACROS_ARMv5E_H |
30 | #define SILK_MACROS_ARMv5E_H | 30 | #define SILK_MACROS_ARMv5E_H |
31 | 31 | ||
32 | /* This macro only avoids the undefined behaviour from a left shift of | ||
33 | a negative value. It should only be used in macros that can't include | ||
34 | SigProc_FIX.h. In other cases, use silk_LSHIFT32(). */ | ||
35 | #define SAFE_SHL(a,b) ((opus_int32)((opus_uint32)(a) << (b))) | ||
36 | |||
32 | /* (a32 * (opus_int32)((opus_int16)(b32))) >> 16 output have to be 32bit int */ | 37 | /* (a32 * (opus_int32)((opus_int16)(b32))) >> 16 output have to be 32bit int */ |
33 | #undef silk_SMULWB | 38 | #undef silk_SMULWB |
34 | static OPUS_INLINE opus_int32 silk_SMULWB_armv5e(opus_int32 a, opus_int16 b) | 39 | static OPUS_INLINE opus_int32 silk_SMULWB_armv5e(opus_int32 a, opus_int16 b) |
@@ -190,7 +195,7 @@ static OPUS_INLINE opus_int32 silk_CLZ16_armv5(opus_int16 in16) | |||
190 | "#silk_CLZ16\n\t" | 195 | "#silk_CLZ16\n\t" |
191 | "clz %0, %1;\n" | 196 | "clz %0, %1;\n" |
192 | : "=r"(res) | 197 | : "=r"(res) |
193 | : "r"(in16<<16|0x8000) | 198 | : "r"(SAFE_SHL(in16,16)|0x8000) |
194 | ); | 199 | ); |
195 | return res; | 200 | return res; |
196 | } | 201 | } |
@@ -210,4 +215,6 @@ static OPUS_INLINE opus_int32 silk_CLZ32_armv5(opus_int32 in32) | |||
210 | } | 215 | } |
211 | #define silk_CLZ32(in32) (silk_CLZ32_armv5(in32)) | 216 | #define silk_CLZ32(in32) (silk_CLZ32_armv5(in32)) |
212 | 217 | ||
218 | #undef SAFE_SHL | ||
219 | |||
213 | #endif /* SILK_MACROS_ARMv5E_H */ | 220 | #endif /* SILK_MACROS_ARMv5E_H */ |