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

Reply via email to