OSDN Git Service

2003-12-26 Fariborz Jahanian <fjahanian@apple.com>
authordje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 Dec 2003 22:07:07 +0000 (22:07 +0000)
committerdje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 Dec 2003 22:07:07 +0000 (22:07 +0000)
            Geoffrey Keating <geoffk@apple.com>
            David Edelsohn <edelsohn@gnu.org>

        * config/rs6000/rs6000.c (legitimate_offset_address_p): Do not
        restrict DFmode and TFmode to word alignment.
        * config/rs6000/rs6000.md (movdf_hardfloat64): Use 'o' constraint
        for ld/std and order before mr.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@75040 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.md

index 5898c3c..ba7e756 100644 (file)
@@ -1,3 +1,12 @@
+2003-12-26  Fariborz Jahanian <fjahanian@apple.com>
+           Geoffrey Keating <geoffk@apple.com>
+           David Edelsohn <edelsohn@gnu.org>
+
+       * config/rs6000/rs6000.c (legitimate_offset_address_p): Do not
+       restrict DFmode and TFmode to word alignment.
+       * config/rs6000/rs6000.md (movdf_hardfloat64): Use 'o' constraint
+       for ld/std and order before mr.
+
 2003-12-26  Andrew Pinski  <pinskia@physics.uc.edu>
 
        * config/darwin.h (LINK_COMMAND_SPEC): Arrange
index 5e3d49a..4dc83c1 100644 (file)
@@ -2448,7 +2448,7 @@ legitimate_offset_address_p (enum machine_mode mode, rtx x, int strict)
 
     case DFmode:
     case DImode:
-      if (!TARGET_POWERPC64)
+      if (mode == DFmode || !TARGET_POWERPC64)
        extra = 4;
       else if (offset & 3)
        return false;
@@ -2456,7 +2456,7 @@ legitimate_offset_address_p (enum machine_mode mode, rtx x, int strict)
 
     case TFmode:
     case TImode:
-      if (!TARGET_POWERPC64)
+      if (mode == TFmode || !TARGET_POWERPC64)
        extra = 12;
       else if (offset & 3)
        return false;
index 402c08c..3ab0465 100644 (file)
   [(set_attr "type" "*,load,store,*,*,*")
    (set_attr "length" "8,8,8,8,12,16")])
 
+; ld/std require word-aligned displacements, so use offsettable constraint.
+; List o->r and r->o before r->r for reload.
 (define_insn "*movdf_hardfloat64"
-  [(set (match_operand:DF 0 "nonimmediate_operand" "=!r,??r,m,f,f,m,!cl,!r,!r,!r,!r")
-       (match_operand:DF 1 "input_operand" "r,m,r,f,m,f,r,h,G,H,F"))]
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=o,??r,!r,f,f,m,!cl,!r,!r,!r,!r")
+       (match_operand:DF 1 "input_operand" "r,o,r,f,m,f,r,h,G,H,F"))]
   "TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS
    && (gpc_reg_operand (operands[0], DFmode)
        || gpc_reg_operand (operands[1], DFmode))"
   "@
-   mr %0,%1
-   ld%U1%X1 %0,%1
    std%U0%X0 %1,%0
+   ld%U1%X1 %0,%1
+   mr %0,%1
    fmr %0,%1
    lfd%U1%X1 %0,%1
    stfd%U0%X0 %1,%0