tried to convert a variation to assembler.

although compiled code looks MUCH less optimal than this, I haven't noticed any performance increase :-/
This commit is contained in:
zueuk 2005-09-22 16:08:29 +00:00
parent 6f3af378af
commit 573de31ffc

View File

@ -23,12 +23,45 @@ uses
///////////////////////////////////////////////////////////////////////////////
procedure TVariationEyefish.CalcFunction;
{$if false}
var
r: double;
begin
r := 2 / (sqrt(FTx^ * FTx^ + FTy^ * FTy^) + 1);
FPx^ := FPx^ + vvar * r * FTx^;
FPy^ := FPy^ + vvar * r * FTy^;
r := 2 * vvar / (sqrt(FTx^ * FTx^ + FTy^ * FTy^) + 1);
FPx^ := FPx^ + r * FTx^;
FPy^ := FPy^ + r * FTy^;
{$else}
asm
fld qword ptr [eax+vvar]
fadd st, st
mov ecx, [eax+FTy]
fld qword ptr [ecx]
mov ecx, [eax+FTx]
fld qword ptr [ecx]
fld st(1)
fmul st, st
fld st(1)
fmul st, st
fadd
fsqrt
fld1
fadd
fdivp st(3), st
fmul st, st(2)
mov ecx, [eax+FPx]
fadd qword ptr [ecx]
fstp qword ptr [ecx]
fmulp
mov ecx, [eax+FPy]
fadd qword ptr [ecx]
fstp qword ptr [ecx]
{$ifend}
end;
///////////////////////////////////////////////////////////////////////////////