function __ftol( f : double) : Integer;
begin
Result := Trunc(f);
end;
更新:申し訳ありませんが、私は間違っています。ダブルは、この機能に入るとFPUに保存されます。次に、doubleはローカル変数fに入れられ、整数に切り捨てられます。だから私の答えを忘れてください。
このルーチンはGraphicExでは使用されないため、コメントを付けてください。
アップデート2。
Davidが言うように、.objファイルにリンクして使用できます。それらが同じパラメーターの受け渡し(FPUスタックではdouble)を実行する64ビットオブジェクトファイルであると仮定すると、(64ビットモードで)使用できる関数は次のとおりです。
function __ftol : Integer;
// Assumes double value is in FPU stack on entry
// Make a truncation to integer and put it into function result
var
TmpVal: Int64;
SaveCW, ScratchCW: word;
asm
.NOFRAME
fnstcw word ptr [SaveCW]
fnstcw word ptr [ScratchCW]
or word ptr [ScratchCW], 0F00h ;// trunc toward zero, full precision
fldcw word ptr [ScratchCW]
fistp qword ptr [TmpVal]
fldcw word ptr [SaveCW]
mov rax, TmpVal
end;