The comment reads: ??? We allow invalid registers if (reg:XMODE XREGNO) is also invalid. This is a kludge to work around how float/complex arguments are passed on 32-bit SPARC and should be fixed. */ if (!HARD_REGNO_MODE_OK (yregno, ymode) && HARD_REGNO_MODE_OK (xregno, xmode)) return -1;
It turns out that it is outdated, removing the kludge as follows: /* See whether (reg:YMODE YREGNO) is valid. */ if (!HARD_REGNO_MODE_OK (yregno, ymode)) return -1; works fine on the SPARC (both 32-bit and 64-bit). Now there is a problem on IA-64, see PR target/49226. So I'm changing the comment to reflect that. 2011-05-29 Eric Botcazou <ebotca...@adacore.com> PR target/48830 * rtlanal.c (simplify_subreg_regno): Adjust comment. -- Eric Botcazou
Index: rtlanal.c =================================================================== --- rtlanal.c (revision 174377) +++ rtlanal.c (working copy) @@ -3452,8 +3452,8 @@ simplify_subreg_regno (unsigned int xreg /* See whether (reg:YMODE YREGNO) is valid. ??? We allow invalid registers if (reg:XMODE XREGNO) is also invalid. - This is a kludge to work around how float/complex arguments are passed - on 32-bit SPARC and should be fixed. */ + This is a kludge to work around how complex FP arguments are passed + on IA-64 and should be fixed. See PR target/49226. */ if (!HARD_REGNO_MODE_OK (yregno, ymode) && HARD_REGNO_MODE_OK (xregno, xmode)) return -1;