Need help on FPU division on 64 bit RHEL

Andrew Haley aph@redhat.com
Fri Mar 20 08:43:00 GMT 2009


Halesh S wrote:

> I am writing assembly level code for dividing two numbers.
> 
> The assembly function i used is
> 
> float  assm_div(float a1, float b1)
> {
>  float res;
>  __asm__ ("fld 8(%%ebp)"
>           :
>           :"a"(a1)
>          );
>  __asm__ ("fld 12(%%ebp)"
>          :
>          :"b"(b1)
>          );
>  __asm__ ("fdiv %st(1), %st");
>  __asm__ ("fstp -8(%ebp)"
>          );
>  __asm__ ("fstp -12(%ebp)"
>          );
>  return res;
> }
> 
> It works fine in Red hat 32 bit Linux, for the same its not working
> Red hat 64 bit Linux, on same hardware.
> 
> Is there any changes required for code to make work??

It'll have to be rewritten for x86_64, which has a different instruction
set.  But there are several bugs in the i386 version anyway: it works
only by accident.  Why do you not do

  return a/b;

?

Andrew.



More information about the Gcc-help mailing list