Add a constant value to a xmm register in x86

13,456

You can keep a constant in memory or in another register:

_1      dq      1.0

and

addsd   xmm1,[_1]

or

movsd   xmm0,[_1]
addsd   xmm1,xmm0

If you are on x64, you can do this:

mov     rax,1.0
movq    xmm0,rax
addsd   xmm1,xmm0  

or use the stack if the type mismatch bothers you:

mov     rax,1.0
push    rax
movsd   xmm0,[rsp]
pop     rax
addsd   xmm1,xmm0 

As for the x87 code, doubles are qwords, not dwords.

Share:
13,456
Tyilo
Author by

Tyilo

Lol

Updated on June 07, 2022

Comments

  • Tyilo
    Tyilo almost 2 years

    How would I add 1 or 2 to the register xmm0 (double)?

    I can do it like this, but sure there must be an easier way:

    movsd xmm0, [ecx]
    
    xor eax, eax
    inc eax
    cvtsi2sd xmm1, eax
    addsd xmm0, xmm1
    
    movsd [ecx], xmm0
    

    Also would it be possible to do this with the floating point x87 instructions?

    This doesn't work for me:

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