[MinGW] MT+SIMD = SIGSEGV



  • Ich nutze den TDM-GCC 4.8.1 (mingw32).
    Die Kombination von Multithreading und SSE2 führt bei mir zu mysteriösen Laufzeit-Abstürzen. Der Debugger gibt mir als Grund stets den Ausdruck vor dem ersten SSE Befehl aus.
    Beispiel:

    ... // Crash-Ursache
    accum = _mm_xor_ps(accum, accum);
    
    __m128 accum = _mm_setzero_ps(); // Crash-Ursache (wegen der Deklaration)
    

    Ich weiß nicht mehr weiter. Ist es ein Compiler Bug, liegt es an MinGW allgemein oder nur der TDM Version, gibt es Unterschiede in der Thread-Erstellung zwischen MSVC (wo exakt der gleiche Code funktioniert) und MinGW?



  • Nach Betrachtung der Disassembly kam ich zu neuer Erkenntnis:
    Im den Crash verursachenden Ausdruck wird stets movaps auf unaligned Stack-Speicher angewendet. Der Compiler generiert diesen Müll, wenn ich selber versuche, SSE Code zu erzeugen. Ein Umstellen des Optimierungslevels von -O3 zu -O2 beim Release bzw. -O0 zu -O1 im Debug hat dieses Problem vorzeitig gelöst...

    Auf zu neuen Bugs :S


Log in to reply