5

x64ビットのFLD命令で少し問題があります... st0レジスタのスタックポインタFPUにDouble値をロードしたいのですが、無理そうです。Delphi x32 では、次のコードを使用できます。

function DoSomething(X:Double):Double;
asm

  FLD    X
   // Do Something ..
  FST Result

end;

残念ながら、x64 では同じコードは機能しません。

4

3 に答える 3

4

x64 モードでは、浮動小数点パラメーターは xmm-register で渡されます。そのため、Delphi が FLD X をコンパイルしようとすると、FLD xmm0 になりますが、そのような命令はありません。最初にメモリに移動する必要があります。

結果も同様で、xmm0 に返されます。

これを試してください(テストされていません):

function DoSomething(X:Double):Double;
var
  Temp : double;
asm
  MOVQ qword ptr Temp,X
  FLD Temp
  //do something
  FST Temp
  MOVQ xmm0,qword ptr Temp
end;
于 2013-04-03T12:20:00.880 に答える