Hi,
I'm porting a reporting engine from Delphi to Free Pascal. I want to get
it as cross-platform as possible even though my deployment environment
is only x86 systems.
There is a function implemented in Assembly language, but I would prefer
a Object Pascal implementation. From the name I gather it's a math Power
function, but not 100% sure how to convert it to Pascal. My ASM knoledge
is non-existent. ;)
Could anybody help port this to Object Pascal, or does RTL or FCL have
an equivalent function?
function Ipwr(const Base: Double; const Exponent: integer): Double;
begin
asm
mov ecx, eax
cdq
fld1 { Result := 1 }
xor eax, edx
sub eax, edx { eax := Abs(Exponent) }
jz @@3
fld Base
jmp @@2
@@1: fmul ST, ST { X := Base * Base }
@@2: shr eax,1
jnc @@1
fmul ST(1),ST { Result := Result * X }
jnz @@1
fstp st { pop X from FPU stack }
cmp ecx, 0
jge @@3
fld1
fdivrp { Result := 1 / Result }
@@3:
fwait
end;
end;
Regards,
- Graeme -
_______________________________________________________
fpGUI - a cross-platform GUI toolkit using Free Pascal
http://opensoft.homeip.net/fpgui/
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel