[patch] MIPS: 64bit floating point support for MIPS32R2

David Ung davidu@mips.com
Fri Nov 17 15:17:00 GMT 2006

Richard Sandiford wrote:

> I'm still a little worried about that cannot_change_mode_class hunk;
> do you know off-hand why it's needed?

hmm.  If I still recall this correctly.  The check (FP_INC > 1) is no longer 
valid for gp32+fp64, but there still needs a reg_classes_intersect_p (FP_REGS, 
class) check to ensure we ain't simply converting between 32bit integer and 
64bit floats.  The check at the end of the function will catch 32bit -> 64bit 
float, but not 64bit -> 32bit.
It should allow pattens such as subreg:SI (reg:DF) or even the paradoxical 
subreg:DI (reg:SF) provided they fit.  But subreg:SF (reg:DI) is a no no.
I first saw this problem in gdb.base/complex.c test back in the days of gcc 3.4.
I tried taking out this check to see the damage, the numbers of failures are 112 
and it has affected some ieee complex test, and basically generates wrong code 
for the others.

> mips_class_max_nregs might also need changing btw.

I guess we should add something like

   if (class == FP_REGS)
     return (GET_MODE_SIZE (mode) + UNITS_PER_FPREG - 1) / UNITS_PER_FPREG;


More information about the Gcc-patches mailing list