Index: Source/platform/audio/VectorMath.cpp |
diff --git a/Source/platform/audio/VectorMath.cpp b/Source/platform/audio/VectorMath.cpp |
index 219ed5463977ac5cc172f1117fd0cca3f9008a9a..9bef4f41c6c66003e2a73cecc1e58739a3046a10 100644 |
--- a/Source/platform/audio/VectorMath.cpp |
+++ b/Source/platform/audio/VectorMath.cpp |
@@ -27,11 +27,17 @@ |
#if ENABLE(WEB_AUDIO) |
#include "platform/audio/VectorMath.h" |
+ |
#include "wtf/Assertions.h" |
#include "wtf/CPU.h" |
+#include <algorithm> |
+#include <math.h> |
#include <stdint.h> |
#if OS(MACOSX) |
+// On the Mac we use the highly optimized versions in Accelerate.framework |
+// In 32-bit mode (__ppc__ or __i386__) <Accelerate/Accelerate.h> includes <vecLib/vDSP_translate.h> which defines macros of the same name as |
+// our namespaced function names, so we must handle this case differently. Other architectures (64bit, ARM, etc.) do not include this header file. |
#include <Accelerate/Accelerate.h> |
#endif |
@@ -39,46 +45,43 @@ |
#include <emmintrin.h> |
#endif |
-#if HAVE(ARM_NEON_INTRINSICS) |
-#include <arm_neon.h> |
-#endif |
- |
-#include <math.h> |
-#include <algorithm> |
namespace blink { |
namespace VectorMath { |
#if OS(MACOSX) |
-// On the Mac we use the highly optimized versions in Accelerate.framework |
-// In 32-bit mode (__ppc__ or __i386__) <Accelerate/Accelerate.h> includes <vecLib/vDSP_translate.h> which defines macros of the same name as |
-// our namespaced function names, so we must handle this case differently. Other architectures (64bit, ARM, etc.) do not include this header file. |
void vsmul(const float* sourceP, int sourceStride, const float* scale, float* destP, int destStride, size_t framesToProcess) |
{ |
-#if CPU(X86) |
- ::vsmul(sourceP, sourceStride, scale, destP, destStride, framesToProcess); |
-#else |
+#if OS(MACOSX) && !CPU(X86) |
vDSP_vsmul(sourceP, sourceStride, scale, destP, destStride, framesToProcess); |
+#elif HAVE(ARM_NEON_INTRINSICS) |
+ WTF_CPU_ARM_NEON_WRAP(vsmul)(sourceP, sourceStride, scale, destP, destStride, framesToProcess); |
+#else |
+ ::vsmul(sourceP, sourceStride, scale, destP, destStride, framesToProcess); |
#endif |
} |
void vadd(const float* source1P, int sourceStride1, const float* source2P, int sourceStride2, float* destP, int destStride, size_t framesToProcess) |
{ |
-#if CPU(X86) |
- ::vadd(source1P, sourceStride1, source2P, sourceStride2, destP, destStride, framesToProcess); |
-#else |
+#if OS(MACOSX) && !CPU(X86) |
vDSP_vadd(source1P, sourceStride1, source2P, sourceStride2, destP, destStride, framesToProcess); |
+#elif HAVE(ARM_NEON_INTRINSICS) |
+ WTF_CPU_ARM_NEON_WRAP(vadd)(source1P, sourceStride1, source2P, sourceStride2, destP, destStride, framesToProcess); |
+#else |
+ ::vadd(source1P, sourceStride1, source2P, sourceStride2, destP, destStride, framesToProcess); |
#endif |
} |
void vmul(const float* source1P, int sourceStride1, const float* source2P, int sourceStride2, float* destP, int destStride, size_t framesToProcess) |
{ |
-#if CPU(X86) |
- ::vmul(source1P, sourceStride1, source2P, sourceStride2, destP, destStride, framesToProcess); |
-#else |
+#if OS(MACOSX) && !CPU(X86) |
vDSP_vmul(source1P, sourceStride1, source2P, sourceStride2, destP, destStride, framesToProcess); |
+#elif HAVE(ARM_NEON_INTRINSICS) |
+ WTF_CPU_ARM_NEON_WRAP(vmul)(source1P, sourceStride1, source2P, sourceStride2, destP, destStride, framesToProcess); |
+#else |
+ ::vmul(source1P, sourceStride1, source2P, sourceStride2, destP, destStride, framesToProcess); |
#endif |
} |