Index: silk/mips/sigproc_fix_mipsr1.h |
diff --git a/silk/lin2log.c b/silk/mips/sigproc_fix_mipsr1.h |
similarity index 73% |
copy from silk/lin2log.c |
copy to silk/mips/sigproc_fix_mipsr1.h |
index d4fe515321f0d5b76d6d314ccff4d16f93f91838..3b0a6953656d97318f3aa83ebba9f208be1bd88b 100644 |
--- a/silk/lin2log.c |
+++ b/silk/mips/sigproc_fix_mipsr1.h |
@@ -25,22 +25,41 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
POSSIBILITY OF SUCH DAMAGE. |
***********************************************************************/ |
-#ifdef HAVE_CONFIG_H |
-#include "config.h" |
+#ifndef SILK_SIGPROC_FIX_MIPSR1_H |
+#define SILK_SIGPROC_FIX_MIPSR1_H |
+ |
+#ifdef __cplusplus |
+extern "C" |
+{ |
#endif |
-#include "SigProc_FIX.h" |
-/* Approximation of 128 * log2() (very close inverse of silk_log2lin()) */ |
-/* Convert input to a log scale */ |
-opus_int32 silk_lin2log( |
- const opus_int32 inLin /* I input in linear scale */ |
-) |
+#undef silk_SAT16 |
+static inline short int silk_SAT16(int a) |
+{ |
+ int c; |
+ c = __builtin_mips_shll_s_w(a, 16); |
+ c = c>>16; |
+ |
+ return c; |
+} |
+ |
+#undef silk_LSHIFT_SAT32 |
+static inline int silk_LSHIFT_SAT32(int a, int shift) |
{ |
- opus_int32 lz, frac_Q7; |
+ int r; |
+ |
+ r = __builtin_mips_shll_s_w(a, shift); |
- silk_CLZ_FRAC( inLin, &lz, &frac_Q7 ); |
+ return r; |
+} |
+ |
+#undef silk_RSHIFT_ROUND |
+static inline int silk_RSHIFT_ROUND(int a, int shift) |
+{ |
+ int r; |
- /* Piece-wise parabolic approximation */ |
- return silk_LSHIFT( 31 - lz, 7 ) + silk_SMLAWB( frac_Q7, silk_MUL( frac_Q7, 128 - frac_Q7 ), 179 ); |
+ r = __builtin_mips_shra_r_w(a, shift); |
+ return r; |
} |
+#endif /* SILK_SIGPROC_FIX_MIPSR1_H */ |