Betrachten Sie diese Variablendeklaration:Zugriff auf Bytes einer __m128-Variablen über Union Legal?
union {
struct {
float x, y, z, padding;
} components;
__m128 sse;
} _data;
Meine Idee ist es, den Wert durch x
, y
, z
Felder zuweisen, SSE2 Berechnungen durchführen und das Ergebnis durch x
, y
, z
zu lesen. Ich habe jedoch leichte Zweifel, ob es legal ist. Meine Sorge ist Ausrichtung: MSDN sagt, dass __m128
Variablen automatisch auf 16-Byte-Grenze ausgerichtet sind, und ich frage mich, ob meine Vereinigung dieses Verhalten brechen kann. Gibt es hier noch andere Probleme?
Nein, die Ausrichtung ist kein Problem. Die Gewerkschaft wird jede Ausrichtung haben, die notwendig ist, damit alle ihre Mitglieder korrekt arbeiten können. –
Beachten Sie auch, dass Sie zumindest in Visual Studio die Komponenten von '__m128 sse;' mit 'sse.m128_f32 [0]', 'sse.m128_f32 [1]', 'sse.m128_f32 [2]', 'sse.m128_f32 [3]', also gibt es keinen Grund für diesen Trick. –
@ R.MartinhoFernandes und für gcc? –