22#ifndef _FFTCONVOLVER_UTILITIES_H
23#define _FFTCONVOLVER_UTILITIES_H
34#if defined(__SSE__) || (defined(_M_IX86_FP) && _M_IX86_FP >= 2)
35#if !defined(FFTCONVOLVER_USE_SSE) && !defined(FFTCONVOLVER_DONT_USE_SSE)
36#define FFTCONVOLVER_USE_SSE
40#if defined(FFTCONVOLVER_USE_SSE)
45#define FFTCONVOLVER_RESTRICT __restrict__
47#define FFTCONVOLVER_RESTRICT
130#if defined(FFTCONVOLVER_USE_SSE)
131 return static_cast<T*
>(_mm_malloc(
size *
sizeof(T), 16));
139#if defined(FFTCONVOLVER_USE_SSE)
233 while (nextPowerOf2 < val)
258 assert(dest.
size() >= srcSize);
259 ::memcpy(dest.
data(), src, srcSize *
sizeof(T));
260 ::memset(dest.
data() + srcSize, 0, (dest.
size() - srcSize) *
sizeof(T));
Simple buffer implementation (uses 16-byte alignment if SSE optimization is enabled)
Definition Utilities.h:61
T * data()
Definition Utilities.h:117
T * _data
Definition Utilities.h:146
void setZero()
Definition Utilities.h:92
void copyFrom(const Buffer< T > &other)
Definition Utilities.h:94
size_t _size
Definition Utilities.h:147
void resize(size_t size)
Definition Utilities.h:74
const T & operator[](size_t index) const
Definition Utilities.h:109
Buffer(size_t initialSize=0)
Definition Utilities.h:63
void deallocate(T *ptr)
Definition Utilities.h:137
T & operator[](size_t index)
Definition Utilities.h:103
T * allocate(size_t size)
Definition Utilities.h:128
virtual ~Buffer()
Definition Utilities.h:65
size_t size() const
Definition Utilities.h:90
const T * data() const
Definition Utilities.h:119
static void Swap(Buffer< T > &a, Buffer< T > &b)
Definition Utilities.h:121
Buffer & operator=(const Buffer &)
void clear()
Definition Utilities.h:67
Buffer for split-complex representation of FFT results.
Definition Utilities.h:173
SplitComplex(size_t initialSize=0)
Definition Utilities.h:175
void setZero()
Definition Utilities.h:193
size_t size() const
Definition Utilities.h:213
const Sample * im() const
Definition Utilities.h:211
Sample * im()
Definition Utilities.h:209
SampleBuffer _re
Definition Utilities.h:217
void clear()
Definition Utilities.h:179
void copyFrom(const SplitComplex &other)
Definition Utilities.h:199
size_t _size
Definition Utilities.h:216
void resize(size_t newSize)
Definition Utilities.h:186
SampleBuffer _im
Definition Utilities.h:218
const Sample * re() const
Definition Utilities.h:207
SplitComplex(const SplitComplex &)
Sample * re()
Definition Utilities.h:205
~SplitComplex()
Definition Utilities.h:177
SplitComplex & operator=(const SplitComplex &)
Definition FFTConvolver.cpp:29
bool SSEEnabled()
Returns whether SSE optimization for the convolver is enabled.
Definition Utilities.cpp:27
Buffer< Sample > SampleBuffer
Buffer for samples.
Definition Utilities.h:162
float Sample
Type of one sample.
Definition Utilities.h:157
T NextPowerOf2(const T &val)
Returns the next power of 2 of a given number.
Definition Utilities.h:230
void ComplexMultiplyAccumulate(SplitComplex &result, const SplitComplex &a, const SplitComplex &b)
Adds the complex product of two split-complex buffers to a result buffer.
Definition Utilities.cpp:53
void CopyAndPad(Buffer< T > &dest, const T *src, size_t srcSize)
Copies a source array into a destination buffer and pads the destination buffer with zeros.
Definition Utilities.h:256
void Sum(Sample *FFTCONVOLVER_RESTRICT result, const Sample *FFTCONVOLVER_RESTRICT a, const Sample *FFTCONVOLVER_RESTRICT b, size_t len)
Sums two given sample arrays.
Definition Utilities.cpp:36
#define FFTCONVOLVER_RESTRICT
Definition Utilities.h:47