Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.xiph.org/xiph/opus.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Maxwell <greg@xiph.org>2012-11-27 21:51:20 +0400
committerGregory Maxwell <greg@xiph.org>2012-11-27 22:07:45 +0400
commit07418d9dd8c486c4b3842a4268b272ed6f1b9c54 (patch)
treebb1dfe77dff6f37273ae30cc0516828feb7f7e21
parentb880e9b415f39d83429330d1f3cb40d23ce7de98 (diff)
Guard _BitScanReverse on MSVC so that MSVC 6 doesn't break.
This also adds some extra casts to shut up compiler warnings reported on MSVC 6 where there is implicit truncation for the arguments of bitexact_cos(). Lacking access to CLZ/BSR will make the code a fair bit slower but that is better than failing to compile.
-rw-r--r--celt/bands.c4
-rw-r--r--celt/ecintrin.h2
-rw-r--r--celt/entcode.c5
3 files changed, 8 insertions, 3 deletions
diff --git a/celt/bands.c b/celt/bands.c
index 8883f40a..35eb83e5 100644
--- a/celt/bands.c
+++ b/celt/bands.c
@@ -923,8 +923,8 @@ static unsigned quant_band(int encode, const CELTMode *m, int i, celt_norm *X, c
fill &= ((1<<B)-1)<<B;
delta = 16384;
} else {
- imid = bitexact_cos(itheta);
- iside = bitexact_cos(16384-itheta);
+ imid = bitexact_cos((opus_int16)itheta);
+ iside = bitexact_cos((opus_int16)(16384-itheta));
/* This is the mid vs side allocation that minimizes squared error
in that band. */
delta = FRAC_MUL16((N-1)<<7,bitexact_log2tan(iside,imid));
diff --git a/celt/ecintrin.h b/celt/ecintrin.h
index 3dffa5f9..be57dd40 100644
--- a/celt/ecintrin.h
+++ b/celt/ecintrin.h
@@ -48,7 +48,7 @@
/*Count leading zeros.
This macro should only be used for implementing ec_ilog(), if it is defined.
All other code should use EC_ILOG() instead.*/
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
# include <intrin.h>
/*In _DEBUG mode this is not an intrinsic by default.*/
# pragma intrinsic(_BitScanReverse)
diff --git a/celt/entcode.c b/celt/entcode.c
index 02ac690b..fa5d7c7c 100644
--- a/celt/entcode.c
+++ b/celt/entcode.c
@@ -33,6 +33,11 @@
#include "arch.h"
#if !defined(EC_CLZ)
+/*This is a fallback for systems where we don't know how to access
+ a BSR or CLZ instruction (see ecintrin.h).
+ If you are optimizing Opus on a new platform and it has a native CLZ or
+ BZR (e.g. cell, MIPS, x86, etc) then making it available to Opus will be
+ an easy performance win.*/
int ec_ilog(opus_uint32 _v){
/*On a Pentium M, this branchless version tested as the fastest on
1,000,000,000 random 32-bit integers, edging out a similar version with