leggevo this on MSDN, e si dicePerché non dovresti accedere direttamente ai campi __m128i?
non si deve accedere direttamente ai campi __m128i. Tuttavia, è possibile vedere questi tipi nel debugger. Una variabile di tipo __m128i si associa ai registri XMM [0-7].
Tuttavia, non spiega perché. Perché è? Per esempio, è il seguente "cattivo":
void func(unsigned short x, unsigned short y)
{
__m128i a;
a.m128i_i64[0] = x;
__m128i b;
b.m128i_i64[0] = y;
// Now do something with a and b ...
}
Invece di fare le assegnazioni, come nell'esempio di cui sopra, si dovrebbe utilizzare una sorta di load
funzione?
I campi sono specifiche di Microsoft. Ovviamente a loro non interessa, dato che adoreranno bloccarti nel loro compilatore. La vera ragione è per le prestazioni. Non esiste un modo efficace per accedere ai singoli elementi di un registro SSE. SSE4.1 ha istruzioni per farlo, ma l'indice deve essere una costante in fase di compilazione. – Mysticial