considerare questo dichiarazione di variabile:L'accesso ai byte di una variabile __m128 tramite unione legale?
union {
struct {
float x, y, z, padding;
} components;
__m128 sse;
} _data;
La mia idea è quella di assegnare il valore attraverso x
, y
, z
campi, eseguire calcoli SSE2 e leggere il risultato attraverso x
, y
, z
. Ho qualche dubbio sul fatto che sia legale, però. La mia preoccupazione è l'allineamento: MSDN dice che le variabili __m128
sono automaticamente allineate al limite di 16 byte e mi chiedo se il mio sindacato possa rompere questo comportamento. Ci sono altre insidie da considerare qui?
No, l'allineamento non è un problema. L'unione avrà tutto l'allineamento necessario per far funzionare correttamente tutti i suoi membri. –
Si noti inoltre che, almeno su Visual Studio, è possibile ottenere i componenti di '__m128 sse;' con 'sse.m128_f32 [0]', 'sse.m128_f32 [1]', 'sse.m128_f32 [2]', 'sse.m128_f32 [3]', quindi non c'è bisogno di questo trucco. –
@ R.MartinhoFernandes e per gcc? –