According to http://gcc.gnu.org/projects/mipso64-abi.html
"if the first and second arguments floating-point arguments 
to a function are 32-bit values, they are passed in $f12 
and $f14". The assembler file obtained as a result of
compilation with mips64-none-elf-gcc-4.1.0 of the following 
file (o64.c), shows that a pair of "float" parameters is 
passed on $f12 and $f13 instead of $f12 and $f14.

When I compile the same file with mips64-none-elf-gcc-3.4.5,
I get assembler code where the parameters are passed on 
$f12 and $f14.


extern float g01f; 

int checkf (float x, float v) 
{ if (x != v + 90.0) 
  { return 1; } 
  else 
  { return 0; }
} 

void checkgf (void) { 
  checkf (g01f, 1);
}

void initf (float *p, float v) 
  { *p = v + 90.0; }


-- 
           Summary: Violation of mips o64 ABI
           Product: gcc
           Version: 4.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: niva at niisi dot msk dot ru
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: mips64-none-elf


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27338

Reply via email to