OSDN Git Service

* config/ia64/ia64.c (ia64_load_pair_ok): Return 0 if the second member
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 6 Apr 2012 06:45:16 +0000 (06:45 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 6 Apr 2012 06:45:16 +0000 (06:45 +0000)
of the destination isn't also a FP_REGS register.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@186178 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/ia64/ia64.c

index e6127eb..5f6b62e 100644 (file)
@@ -1,3 +1,8 @@
+2012-04-06  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * config/ia64/ia64.c (ia64_load_pair_ok): Return 0 if the second member
+       of the destination isn't also a FP_REGS register.
+
 2012-04-03  Richard Guenther  <rguenther@suse.de>
 
        Backport from mainline
 2012-04-03  Richard Guenther  <rguenther@suse.de>
 
        Backport from mainline
index b5fad9f..77be757 100644 (file)
@@ -885,7 +885,11 @@ ia64_move_ok (rtx dst, rtx src)
 int
 ia64_load_pair_ok (rtx dst, rtx src)
 {
 int
 ia64_load_pair_ok (rtx dst, rtx src)
 {
-  if (GET_CODE (dst) != REG || !FP_REGNO_P (REGNO (dst)))
+  /* ??? There is a thinko in the implementation of the "x" constraint and the
+     FP_REGS class.  The constraint will also reject (reg f30:TI) so we must
+     also return false for it.  */
+  if (GET_CODE (dst) != REG
+      || !(FP_REGNO_P (REGNO (dst)) && FP_REGNO_P (REGNO (dst) + 1)))
     return 0;
   if (GET_CODE (src) != MEM || MEM_VOLATILE_P (src))
     return 0;
     return 0;
   if (GET_CODE (src) != MEM || MEM_VOLATILE_P (src))
     return 0;