20 #ifndef MPD_PCM_NEON_HXX 21 #define MPD_PCM_NEON_HXX 34 #define neon_x4_u(func, result, vector) do { \ 35 result.val[0] = func(vector.val[0]); \ 36 result.val[1] = func(vector.val[1]); \ 37 result.val[2] = func(vector.val[2]); \ 38 result.val[3] = func(vector.val[3]); \ 48 #define neon_x4_b(func, result, vector, ...) do { \ 49 result.val[0] = func(vector.val[0], __VA_ARGS__); \ 50 result.val[1] = func(vector.val[1], __VA_ARGS__); \ 51 result.val[2] = func(vector.val[2], __VA_ARGS__); \ 52 result.val[3] = func(vector.val[3], __VA_ARGS__); \ 64 typedef typename SrcTraits::value_type
SV;
65 typedef typename DstTraits::value_type
DV;
69 void Convert(int16_t *dst,
const float *src,
const size_t n)
const {
74 float32x4x4_t value = vld4q_f32(src);
85 30 - DstTraits::BITS + 1);
88 vst4_s16(dst, nvalue);
Convert floating point samples to 16 bit signed integer using ARM NEON.
This template describes the specified SampleFormat.
void Convert(int16_t *dst, const float *src, const size_t n) const
static constexpr size_t BLOCK_SIZE
#define neon_x4_b(func, result, vector,...)
Call a NEON intrinsic for each element in the vector.
static constexpr SampleFormat dst_format
SampleTraits< dst_format > DstTraits
static constexpr SampleFormat src_format
SampleTraits< src_format > SrcTraits