Mitglieder von __m128 per Index erhalten?
Habe ich einige code, ursprünglich hat mir jemand die Arbeit mit MSVC, und ich bin versucht, es zu erhalten zu arbeiten auf Clang. Hier ist die Funktion, dass ich Probleme habe mit:
float vectorGetByIndex( __m128 V, unsigned int i )
{
assert( i <= 3 );
return V.m128_f32[i];
}
Den Fehler den ich bekomme, ist wie folgt:
Member reference has base type '__m128' is not a structure or union.
Habe ich umgesehen und festgestellt, dass das Geräusch (und vielleicht GCC) hat ein problem mit der Behandlung von __m128 als struct oder union. Allerdings habe ich es nicht geschafft zu finden, eine klare Antwort, wie bekomme ich diese Werte wieder. Ich habe versucht, mit den subskript-operator und konnte das nicht tun, und ich habe sah rund um die riesige Liste von SSE-systeminterne Funktionen und noch nicht gefunden haben ein passendes.
InformationsquelleAutor der Frage benwad | 2012-09-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer union ist wahrscheinlich die meisten tragbaren Weg, dies zu tun:
InformationsquelleAutor der Antwort Paul R
Selbst wenn SSE4.1 ist verfügbar und
i
ist eine compile-Zeit-Konstante, Sie nicht verwendenpextract
etc. auf diese Weise:Ich nicht löschen, weil es ist eine nützliche Erinnerung daran, wie die Dinge nicht und lassen Sie es stehen, wie eine öffentliche Demütigung.
Bessere Nutzung
die Arbeit wird unabhängig von den verfügbaren Befehlssatz.
InformationsquelleAutor der Antwort Gunther Piez
Als eine änderung hirschhornsalz Lösung, wenn
i
ist eine compile-Zeit-Konstante, die Sie vermeiden könnte, die union Pfad vollständig mit einem shuffle/Shop:InformationsquelleAutor der Antwort Jason R
Dem Weg, den ich verwenden ist
Scheint zu funktionieren ziemlich gut für mich.
InformationsquelleAutor der Antwort Jordan