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