aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCristi Vîjdea <cristi@cvjd.me>2020-03-19 11:46:52 +0200
committerGitHub <noreply@github.com>2020-03-19 10:46:52 +0100
commitf503cb709ca181dbf5c73986ebac1b18ac5c9f63 (patch)
treea2b3fef9523640ce85930e90ec8eef51e244cd86
parent36ac0feaf9654855ee090b1f042363ecfb256f31 (diff)
downloadbrotli-f503cb709ca181dbf5c73986ebac1b18ac5c9f63.zip
brotli-f503cb709ca181dbf5c73986ebac1b18ac5c9f63.tar.gz
brotli-f503cb709ca181dbf5c73986ebac1b18ac5c9f63.tar.bz2
Add HAVE_LOG2 build macro (#783)
* Add HAVE_LOG2 build macro Fixes #781 * Rename macro to BROTLI_HAVE_LOG2 and move comment for visibility
-rw-r--r--CMakeLists.txt5
-rw-r--r--c/enc/fast_log.h15
2 files changed, 15 insertions, 5 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a8ea872..2520278 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -110,13 +110,16 @@ if(NOT LOG2_RES)
CHECK_FUNCTION_EXISTS(log2 LOG2_LIBM_RES)
if(LOG2_LIBM_RES)
set(LIBM_LIBRARY "m")
+ add_definitions(-DBROTLI_HAVE_LOG2=1)
else()
- message(FATAL_ERROR "log2() not found")
+ add_definitions(-DBROTLI_HAVE_LOG2=0)
endif()
set(CMAKE_REQUIRED_LIBRARIES "${orig_req_libs}")
unset(LOG2_LIBM_RES)
unset(orig_req_libs)
+else()
+ add_definitions(-DBROTLI_HAVE_LOG2=1)
endif()
unset(LOG2_RES)
diff --git a/c/enc/fast_log.h b/c/enc/fast_log.h
index cade123..b1268e0 100644
--- a/c/enc/fast_log.h
+++ b/c/enc/fast_log.h
@@ -123,6 +123,16 @@ static const float kLog2Table[] = {
7.9943534368588578f
};
+/* Visual Studio 2012 and Android API levels < 18 do not have the log2()
+ * function defined, so we use log() and a multiplication instead. */
+#ifndef BROTLI_HAVE_LOG2
+#if ((defined(_MSC_VER) && _MSC_VER <= 1700) || (defined(__ANDROID_API__) && __ANDROID_API__ < 18))
+#define BROTLI_HAVE_LOG2 0
+#else
+#define BROTLI_HAVE_LOG2 1
+#endif
+#endif
+
#define LOG_2_INV 1.4426950408889634
/* Faster logarithm for small integers, with the property of log2(0) == 0. */
@@ -130,10 +140,7 @@ static BROTLI_INLINE double FastLog2(size_t v) {
if (v < sizeof(kLog2Table) / sizeof(kLog2Table[0])) {
return kLog2Table[v];
}
-#if (defined(_MSC_VER) && _MSC_VER <= 1700) || \
- (defined(__ANDROID_API__) && __ANDROID_API__ < 18)
- /* Visual Studio 2012 and Android API levels < 18 do not have the log2()
- * function defined, so we use log() and a multiplication instead. */
+#if !(BROTLI_HAVE_LOG2)
return log((double)v) * LOG_2_INV;
#else
return log2((double)v);