Wrapper für `__m256` erzeugt Segmentierungsfehler mit Konstruktor - Windows 64 + MinGW + AVX-Probleme

Ich habe eine Gewerkschaft, die so aussieht

 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;
    }
}

Der __m256 muss an der 32-Byte-Grenze ausgerichtet sein, damit er mit SSE-Funktionen verwendet werden kann, und sollte auch innerhalb der Union automatisch erfolgen.

Und wenn ich das tue

bareVec8f test = _mm256_set1_ps(1.0f);

Ich erhalte einen Segmentierungsfehler. Dieser Code sollte aufgrund des von mir erstellten Konstruktors funktionieren. Wenn ich dies jedoch tue

bareVec8f test;
test.m256 = _mm256_set1_ps(8.f);

Ich erhalte keinen Segmentierungsfehler.

So weil das gut funktioniert, ist die Vereinigung wahrscheinlich richtig ausgerichtet, es gibt nur einen Segmentierungsfehler, der durch den Konstruktor verursacht wird, wie es scheint

Ich benutze GCC 64bit Windows Compiler

--------------------------------- BEARBEITEN Matt hat es geschafft, das einfachste Beispiel für den Fehler zu liefern, der zu passieren scheint Hier

#include <immintrin.h>

void foo(__m256 x) {}

int main()
{
    __m256 r = _mm256_set1_ps(0.0f);
    foo(r);
}

Ich kompiliere mit-std=c++11 -mavx

Antworten auf die Frage(2)

Ihre Antwort auf die Frage