Delphi继承了Microsoft x64 Calling Convention.因此,如果函数/过程的参数是float/double,则它们将在XMM0L,XMM1L,XMM2L和XMM3L寄存器中传递.
但您可以使用varbefore参数作为解决方法,如:
function DoSomething(var X:Double):Double;
asm
FLD qword ptr [X]
// Do Something ..
FST Result
end;
Run Code Online (Sandbox Code Playgroud)
在 x64 模式下,浮点参数在 xmm 寄存器中传递。因此,当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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1494 次 |
| 最近记录: |