#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_AUDIO_CPU_X86_VECTOR_MATH_X86_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_AUDIO_CPU_X86_VECTOR_MATH_X86_H_
#include "base/check_op.h"
#include "base/cpu.h"
#include "third_party/blink/renderer/platform/audio/cpu/x86/vector_math_avx.h"
#include "third_party/blink/renderer/platform/audio/cpu/x86/vector_math_sse.h"
#include "third_party/blink/renderer/platform/audio/vector_math_scalar.h"
namespace blink {
namespace vector_math {
namespace x86 {
struct FrameCounts { … };
static bool CPUSupportsAVX() { … }
static uint32_t GetAVXAlignmentOffsetInNumberOfFloats(const float* source_p) { … }
ALWAYS_INLINE static FrameCounts SplitFramesToProcess(
const float* source_p,
uint32_t frames_to_process) { … }
ALWAYS_INLINE static void PrepareFilterForConv(
const float* filter_p,
int filter_stride,
size_t filter_size,
AudioFloatArray* prepared_filter) { … }
ALWAYS_INLINE static void Conv(const float* source_p,
int source_stride,
const float* filter_p,
int filter_stride,
float* dest_p,
int dest_stride,
uint32_t frames_to_process,
size_t filter_size,
const AudioFloatArray* prepared_filter) { … }
ALWAYS_INLINE static void Vadd(const float* source1p,
int source_stride1,
const float* source2p,
int source_stride2,
float* dest_p,
int dest_stride,
uint32_t frames_to_process) { … }
ALWAYS_INLINE static void Vsub(const float* source1p,
int source_stride1,
const float* source2p,
int source_stride2,
float* dest_p,
int dest_stride,
uint32_t frames_to_process) { … }
ALWAYS_INLINE static void Vclip(const float* source_p,
int source_stride,
const float* low_threshold_p,
const float* high_threshold_p,
float* dest_p,
int dest_stride,
uint32_t frames_to_process) { … }
ALWAYS_INLINE static void Vmaxmgv(const float* source_p,
int source_stride,
float* max_p,
uint32_t frames_to_process) { … }
ALWAYS_INLINE static void Vmul(const float* source1p,
int source_stride1,
const float* source2p,
int source_stride2,
float* dest_p,
int dest_stride,
uint32_t frames_to_process) { … }
ALWAYS_INLINE static void Vsma(const float* source_p,
int source_stride,
const float* scale,
float* dest_p,
int dest_stride,
uint32_t frames_to_process) { … }
ALWAYS_INLINE static void Vsmul(const float* source_p,
int source_stride,
const float* scale,
float* dest_p,
int dest_stride,
uint32_t frames_to_process) { … }
ALWAYS_INLINE static void Vsadd(const float* source_p,
int source_stride,
const float* addend,
float* dest_p,
int dest_stride,
uint32_t frames_to_process) { … }
ALWAYS_INLINE static void Vsvesq(const float* source_p,
int source_stride,
float* sum_p,
uint32_t frames_to_process) { … }
ALWAYS_INLINE static void Zvmul(const float* real1p,
const float* imag1p,
const float* real2p,
const float* imag2p,
float* real_dest_p,
float* imag_dest_p,
uint32_t frames_to_process) { … }
}
}
}
#endif