float
SSEレジスタに値を入れる方法はいくつかあります。次の組み込み関数を使用できます。
__m128 sseval;
float a, b, c, d;
sseval = _mm_set_ps(a, b, c, d); // make vector from [ a, b, c, d ]
sseval = _mm_setr_ps(a, b, c, d); // make vector from [ d, c, b, a ]
sseval = _mm_load_ps(&a); // ill-specified here - "a" not float[] ...
// same as _mm_set_ps(a[0], a[1], a[2], a[3])
// if you have an actual array
sseval = _mm_set1_ps(a); // make vector from [ a, a, a, a ]
sseval = _mm_load1_ps(&a); // load from &a, replicate - same as previous
sseval = _mm_set_ss(a); // make vector from [ a, 0, 0, 0 ]
sseval = _mm_load_ss(&a); // load from &a, zero others - same as prev
_mm_set_ss(val)
コンパイラは、記述したかどうかに関係なく、同じ命令を作成することがよくあります_mm_load_ss(&val)
。それを試して、コードを逆アセンブルしてください。
場合によっては、コード(の構造)に応じて..._mm_set_ss(*valptr)
の代わりに記述する方が有利な場合があります。_mm_load_ss(valptr)