将常量值添加到x86中的xmm寄存器

Tyi*_*ilo 3 x86 assembly sse x87

我如何添加12注册xmm0(双)?

我可以这样做,但肯定必须有一个更简单的方法:

movsd xmm0, [ecx]

xor eax, eax
inc eax
cvtsi2sd xmm1, eax
addsd xmm0, xmm1

movsd [ecx], xmm0

还可以使用浮点x87指令执行此操作吗?

这对我不起作用:

fld dword ptr [ecx]
fld1
faddp
fstp dword ptr [ecx]

Jen*_*ger 9

您可以在内存或其他寄存器中保持常量:

_1      dq      1.0
Run Code Online (Sandbox Code Playgroud)

addsd   xmm1,[_1]
Run Code Online (Sandbox Code Playgroud)

要么

movsd   xmm0,[_1]
addsd   xmm1,xmm0
Run Code Online (Sandbox Code Playgroud)

如果您使用的是x64,则可以执行以下操作:

mov     rax,1.0
movq    xmm0,rax
addsd   xmm1,xmm0  
Run Code Online (Sandbox Code Playgroud)

如果类型不匹配困扰你,请使用堆栈:

mov     rax,1.0
push    rax
movsd   xmm0,[rsp]
pop     rax
addsd   xmm1,xmm0 
Run Code Online (Sandbox Code Playgroud)

至于x87代码,doubles qwords不是dwords.