[openal] [PATCH] Add AVX linear resampler

Chris Robinson chris.kcat at gmail.com
Sun Jun 8 00:36:01 EDT 2014


On 06/07/2014 02:59 AM, Timothy Arceri wrote:
> +    float const fracOne = 1.0f/FRACTIONONE;
> +    ...
> +    const __m256 fracOne8 = _mm256_broadcast_ss(&fracOne);

I'm a bit confused by this. According to Intel's docs for 
_mm256_broadcast_ss and _mm_broadcast_ss:

<https://software.intel.com/sites/products/documentation/studio/composer/en-us/2011Update/compiler_c/intref_cls/common/intref_avx_broadcast_ss.htm>

the given parameter is a "pointer to a memory location that can hold 
constant 256-bit or 128-bit float32 values". In that case, isn't a raw 
float too small? It may also not be aligned correctly. Though if it's 
only taking a single float value, I don't see why it would have to be 
256/128 bits large. Maybe its in error in their docs.

Perhaps it would be better to do:

const __m256 fracOne8 = _mm256_set1_ps(1.0f/FRACTIONONE);

GCC should actually turn that call into a compile-time vector constant 
and simply move it into a register as needed (it does for _mm_set1_ps 
and _mm_set1_epi32 when given a compile-time constant).


More information about the openal mailing list