зеркало из https://github.com/mozilla/gecko-dev.git
153 строки
4.7 KiB
Diff
153 строки
4.7 KiB
Diff
diff -u /src/cpu_detect_x86.cpp /src/cpu_detect_x86.cpp
|
|
--- /src/cpu_detect_x86.cpp
|
|
+++ /src/cpu_detect_x86.cpp
|
|
@@ -37,9 +37,8 @@
|
|
|
|
|
|
#if defined(SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS)
|
|
-
|
|
- #if defined(__GNUC__) && defined(__i386__)
|
|
- // gcc
|
|
+ #if defined(__GNUC__) && defined(HAVE_CPUID_H)
|
|
+ // gcc and clang
|
|
#include "cpuid.h"
|
|
#elif defined(_M_IX86)
|
|
// windows non-gcc
|
|
@@ -71,10 +70,18 @@
|
|
/// Checks which instruction set extensions are supported by the CPU.
|
|
uint detectCPUextensions(void)
|
|
{
|
|
+/// If building for RLBox, we enable the SSE code that will be
|
|
+/// translated to WASMSIMD with SIMD-everywhere.
|
|
+#if defined(SOUNDTOUCH_WASM_SIMD)
|
|
+ uint res = 0;
|
|
+ res = res | SUPPORT_SSE;
|
|
+ res = res | SUPPORT_SSE2;
|
|
+ return res & ~_dwDisabledISA;
|
|
+
|
|
/// If building for a 64bit system (no Itanium) and the user wants optimizations.
|
|
/// Return the OR of SUPPORT_{MMX,SSE,SSE2}. 11001 or 0x19.
|
|
/// Keep the _dwDisabledISA test (2 more operations, could be eliminated).
|
|
-#if ((defined(__GNUC__) && defined(__x86_64__)) \
|
|
+#elif ((defined(__GNUC__) && defined(__x86_64__)) \
|
|
|| defined(_M_X64)) \
|
|
&& defined(SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS)
|
|
return 0x19 & ~_dwDisabledISA;
|
|
@@ -89,18 +96,7 @@
|
|
|
|
uint res = 0;
|
|
|
|
-#if defined(__GNUC__)
|
|
- // GCC version of cpuid. Requires GCC 4.3.0 or later for __cpuid intrinsic support.
|
|
- uint eax, ebx, ecx, edx; // unsigned int is the standard type. uint is defined by the compiler and not guaranteed to be portable.
|
|
-
|
|
- // Check if no cpuid support.
|
|
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) return 0; // always disable extensions.
|
|
-
|
|
- if (edx & bit_MMX) res = res | SUPPORT_MMX;
|
|
- if (edx & bit_SSE) res = res | SUPPORT_SSE;
|
|
- if (edx & bit_SSE2) res = res | SUPPORT_SSE2;
|
|
-
|
|
-#else
|
|
+#if !defined(__GNUC__)
|
|
// Window / VS version of cpuid. Notice that Visual Studio 2005 or later required
|
|
// for __cpuid intrinsic support.
|
|
int reg[4] = {-1};
|
|
@@ -113,7 +109,19 @@
|
|
if ((unsigned int)reg[3] & bit_MMX) res = res | SUPPORT_MMX;
|
|
if ((unsigned int)reg[3] & bit_SSE) res = res | SUPPORT_SSE;
|
|
if ((unsigned int)reg[3] & bit_SSE2) res = res | SUPPORT_SSE2;
|
|
+#elif defined(HAVE_CPUID_H)
|
|
+ // GCC version of cpuid. Requires GCC 4.3.0 or later for __cpuid intrinsic support.
|
|
+ uint eax, ebx, ecx, edx; // unsigned int is the standard type. uint is defined by the compiler and not guaranteed to be portable.
|
|
+
|
|
+ // Check if no cpuid support.
|
|
+ if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) return 0; // always disable extensions.
|
|
|
|
+ if (edx & bit_MMX) res = res | SUPPORT_MMX;
|
|
+ if (edx & bit_SSE) res = res | SUPPORT_SSE;
|
|
+ if (edx & bit_SSE2) res = res | SUPPORT_SSE2;
|
|
+#else
|
|
+ // Compatible with GCC but no cpuid.h.
|
|
+ return 0;
|
|
#endif
|
|
|
|
return res & ~_dwDisabledISA;
|
|
diff -u /src/STTypes.h /src/STTypes.h
|
|
--- /src/STTypes.h
|
|
+++ /src/STTypes.h
|
|
@@ -54,11 +54,7 @@
|
|
#define SOUNDTOUCH_ALIGN_POINTER_16(x) ( ( (ulongptr)(x) + 15 ) & ~(ulongptr)15 )
|
|
|
|
|
|
-#if (defined(__GNUC__) && !defined(ANDROID))
|
|
- // In GCC, include soundtouch_config.h made by config scritps.
|
|
- // Skip this in Android compilation that uses GCC but without configure scripts.
|
|
- #include "soundtouch_config.h"
|
|
-#endif
|
|
+#include "soundtouch_config.h"
|
|
|
|
namespace soundtouch
|
|
{
|
|
diff -u /src/FIRFilter.cpp /src/FIRFilter.cpp
|
|
--- /src/FIRFilter.cpp
|
|
+++ /src/FIRFilter.cpp
|
|
@@ -291,9 +296,11 @@
|
|
|
|
FIRFilter * FIRFilter::newInstance()
|
|
{
|
|
+#if defined(SOUNDTOUCH_ALLOW_MMX) || defined(SOUNDTOUCH_ALLOW_SSE)
|
|
uint uExtensions;
|
|
|
|
uExtensions = detectCPUextensions();
|
|
+#endif
|
|
|
|
// Check if MMX/SSE instruction set extensions supported by CPU
|
|
|
|
diff -u /src/TDStretch.cpp /src/TDStretch.cpp
|
|
--- /src/TDStretch.cpp
|
|
+++ /src/TDStretch.cpp
|
|
@@ -624,9 +624,11 @@
|
|
|
|
TDStretch * TDStretch::newInstance()
|
|
{
|
|
+#if defined(SOUNDTOUCH_ALLOW_MMX) || defined(SOUNDTOUCH_ALLOW_SSE)
|
|
uint uExtensions;
|
|
|
|
uExtensions = detectCPUextensions();
|
|
+#endif
|
|
|
|
// Check if MMX/SSE instruction set extensions supported by CPU
|
|
|
|
diff -u /src/AAFilter.cpp /src/AAFilter.cpp
|
|
--- /src/AAFilter.cpp
|
|
+++ /src/AAFilter.cpp
|
|
@@ -42,7 +42,7 @@
|
|
|
|
using namespace soundtouch;
|
|
|
|
-#define PI 3.14159265358979323846
|
|
+#define PI M_PI
|
|
#define TWOPI (2 * PI)
|
|
|
|
// define this to save AA filter coefficients to a file
|
|
|
|
|
|
diff -u /src/sse_optimized.cpp /src/sse_optimized.cpp
|
|
--- /src/sse_optimized.cpp
|
|
+++ /src_patched/sse_optimized.cpp
|
|
@@ -60,7 +60,13 @@
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "TDStretch.h"
|
|
+
|
|
+#ifdef SOUNDTOUCH_WASM_SIMD
|
|
+#include "simde/x86/avx2.h"
|
|
+#else
|
|
#include <xmmintrin.h>
|
|
+#endif
|
|
+
|
|
#include <math.h>
|
|
|
|
// Calculates cross correlation of two buffers
|