我可以将存储在_m128 SSE寄存器中的浮点数直接移动到普通寄存器吗?

时间:2013-11-03 23:04:44

标签: sse cpu-registers

我正在尝试对某些代码进行超级优化,而我想加速的地方如下:

我想得到一个点积运算(_mm_dp_ps)的答案,这是一个_m128,并将答案直接保存到寄存器中。但是,使用_mm_store,这意味着我必须向数组写入一个完整的128位,然后加载该数组的第一个条目。

调用我的_m128变量“vector”。

我可以浮动ans = *((float *)& vector)?

如果这样可以解决它是否有帮助的问题。将ans加载到寄存器中,或者我是否必须从L1加载它?

谢谢!!!

2 个答案:

答案 0 :(得分:3)

结果实际上已经登记;你只需要告诉编译器将其解释为标量而不是向量。您正在寻找_mm_cvtss_f32内在:

float result = _mm_cvtss_f32(vector_result);

答案 1 :(得分:0)

如果你只使用单个值,那么值得指出,你应该用ss内在函数代替ps而不是ps;在这种情况下,_mm_store_ss完全有效,可以将低值存储到单个精度浮点数,而无需使用_mm_cvtss_f32