4

レジスター(double)に追加1または追加するにはどうすればよいですか?2xmm0

私はこのようにそれを行うことができますが、もっと簡単な方法があるはずです:

movsd xmm0、[ecx]

xor eax、eax
株式会社eax
cvtsi2sd xmm1、eax
追加されたxmm0、xmm1

movsd [ecx]、xmm0

また、浮動小数点x87命令でこれを行うことは可能でしょうか?

これは私にはうまくいきません:

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

2 に答える 2

9

メモリまたは別のレジスタに定数を保持できます。

_1      dq      1.0

addsd   xmm1,[_1]

また

movsd   xmm0,[_1]
addsd   xmm1,xmm0

x64を使用している場合は、次の操作を実行できます。

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

または、タイプの不一致が気になる場合は、スタックを使用します。

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

x87コードに関しては、doublesはqwordsであり、ではありませんdwords

于 2012-12-30T05:36:12.900 に答える
0
vpcmpeqq  xmm1,xmm1,xmm1          ; xmm1 = [ -1 | -1 | -1 | -1 ] as ints
vmovsd    xmm0,dword ptr [ecx]    ; xmm0 = VALUE as int
vsubsd    xmm0,xmm0,xmm1          ; xmm0 = VALUE - (-1) = VALUE + 1

上記は

vpcmpeqq  xmm1,xmm1,xmm1          ; xmm1 = [ -1 | -1 | -1 | -1 ] as ints
vmovd     xmm0,dword ptr [ecx]    ; xmm0 = VALUE as int
vpsubd    xmm0,xmm0,xmm1          ; xmm0 = VALUE - (-1) = VALUE + 1

1ずつの整数増分の場合

vpcmpeqq  xmm1,xmm1,xmm1          ; xmm1 = [ -1 | -1 ] as quads
vmovsd    xmm0,dword ptr [ecx]    ; xmm0 = VALUE as double
vcvtdq2pd xmm1,xmm1               ; xmm1 = [ -1.0 | -1.0 ] as doubles
vsubsd    xmm0,xmm0,xmm1          ; xmm0 = VALUE - (-1.0) = VALUE + 1.0

1.0の2倍の増分

于 2021-04-10T13:46:08.160 に答える