Qt, GCC, SSE und Stapelausrichtung

8

Ich versuche, ein Programm zu erstellen, das mit GCC kompiliert wurde und Qt- und SSE-Intrinsics verwendet. Es scheint, dass wenn eine meiner Funktionen von Qt aufgerufen wird, die Stapelausrichtung nicht erhalten bleibt. Hier ist ein kurzes Beispiel, um zu verdeutlichen, was ich meine:

%Vor%

Hier ist die Ausgabe:

%Vor%

Konfiguration:

  • Intel Core2
  • WinXP, SP3
  • GCC 4.4 (Mingw im Qt SDK 2010.01 enthalten)

Ich habe versucht, das Beispielprogramm mit den gleichen Optionen zu kompilieren, die ich im Qt Makefile gesehen habe:

%Vor%

, Verknüpfungsoptionen:

%Vor%

Jetzt weiß ich nicht, in welche Richtung ich suchen soll. Irgendwelche Hinweise würden geschätzt werden. Danke!

Fabien

    
Fabien 05.03.2010, 11:45
quelle

2 Antworten

9

Sie können dazu die Option -mstackrealign verwenden, ohne Ihrem Quellcode Attribute hinzuzufügen:

-mstackrealign Richten Sie den Stapel beim Eintritt neu aus. Auf dem Intel x86 generiert die Option -mstackrealign einen alternativen Prolog und Epilog, der den Laufzeitstapel bei Bedarf neu ausrichtet. Dies unterstützt das Mischen von Legacy-Codes, die einen ausgerichteten 4-Byte-Stapel mit modernen Codes halten, die einen 16-Byte-Stapel für SSE-Kompatibilität behalten. Siehe auch das Attribut force_align_arg_pointer, anwendbar auf einzelne Funktionen.

(aus den GCC-Dokumenten )

    
Berendra Tusla 06.03.2010, 17:05
quelle
4
%Vor%

hat es funktioniert! Hat jemand eine bessere Lösung?

    
Fabien 05.03.2010 14:40
quelle

Tags und Links