Contenedor para `__m256` Producir falla de segmentación con el constructor - Windows 64 + MinGW + AVX Issues
Tengo una unión que se ve así
union bareVec8f {
__m256 m256; //avx 8x float vector
float floats[8];
int ints[8];
inline bareVec8f(){
}
inline bareVec8f(__m256 vec){
this->m256 = vec;
}
inline bareVec8f &operator=(__m256 m256) {
this->m256 = m256;
return *this;
}
inline operator __m256 &() {
return m256;
}
}
El __m256 debe alinearse en el límite de 32 bytes para usarse con las funciones SSE, y debe estar automáticamente, incluso dentro de la unión.
Y cuando hago esto
bareVec8f test = _mm256_set1_ps(1.0f);
Me sale una falla de segmentación. Este código debería funcionar debido al constructor que hice. Sin embargo, cuando hago esto
bareVec8f test;
test.m256 = _mm256_set1_ps(8.f);
No obtengo una falla de segmentación.
Entonces, debido a que funciona bien, la unión probablemente esté alineada correctamente, parece que se está produciendo una falla de segmentación con el constructor.
Estoy usando el compilador de Windows gcc 64bit
--------------------------------- EDITAR Matt logró producir el ejemplo más simple del error que parece estar sucediendo aquí .
#include <immintrin.h>
void foo(__m256 x) {}
int main()
{
__m256 r = _mm256_set1_ps(0.0f);
foo(r);
}
Estoy compilando con-std=c++11 -mavx