SSE将寄存器设置为0.0和1.0的最佳方法是什么?

Pub*_*bby 3 c math assembly sse vector

我正在做一些sse vector3数学.

通常,我将矢量的第四位设置为1.0f,因为这使我的大部分数学工作,但有时我需要将其设置为0.0f.

所以我想改变像:(32.4f,21.2f,-4.0f,1.0f)到(32.4f,21.2f,-4.0f,0.0f)

我想知道这样做的最佳方法是:

  1. 转换为4个浮点数,设置第4个浮点数,然后发送回SSE
  2. xor自己的寄存器,然后做2 shufps
  3. 用1.0f完成所有SSE数学运算,然后将变量设置为完成时应该是什么.
  4. 其他?

注意:当我需要更改它时,向量已经在SSE寄存器中.

Spa*_*rky 5

并使用常量掩码.

在组装......

myMask:
.long 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000

...
andps  myMask, %xmm#
Run Code Online (Sandbox Code Playgroud)

#= {0,1,2,....}

希望这可以帮助.