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 <[email protected]>
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;