[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