2012-05-07 1 views
5

Ich verwende MSVC, um einige SSE-Eigen- schaften zu verwenden. Um dies zu unterstützen, habe ich einige meiner Daten an einer 16-Byte-Grenze ausgerichtet. Jetzt, da ich für x86 statt für x64 kompiliere, besteht MSVC darauf, dass es mir illegal ist, einen Funktionsparameter auf 16 Bytes auszurichten. Aber wenn das stimmt, wie kann dann irgendjemand jemals SSE-Datentypen als Funktionsparameter senden?MSVC kann Funktionsparameter der 16-Byte-Ausrichtung nicht an x86 senden

Also wie kann ich 16byte ausgerichtete Parameter in einer Funktion senden?

Antwort

4

Wenn das stimmt dann wie kann jemand jemals SSE-Datentypen als Funktionsparameter senden?

Sie können nicht. :) Unter Microsofts ABI müssen Sie es durch Verweis oder Zeiger übergeben.

Eine Abhilfe kann die Verwendung der Aufrufkonvention fastcall sein, die anscheinend die ersten paar SSE-Argumente in XMM-Registern übergibt.

+0

Ich denke, die natürliche Folge Frage ist "Kann der Compiler diese Transformation für mich tun?". – Puppy

+0

Bleh, du hast mich dazu geschlagen. Referenz ist hier: Nach: http://msdn.microsoft.com/en-us/library/zthk2dkh.aspx – Mysticial

+0

@Mysticial: das ist die Dokumentation für die x64-Aufruf Konvention. Er fragt nach x86 :) – jalf

Verwandte Themen