m68k.c (m68k_output_mi_thunk): For ColdFire, use %d0 as a scratch to perform an add...
authorPeter Barada <peter@the-baradas.com>
Tue, 1 Jun 2004 13:22:04 +0000 (13:22 +0000)
committerBernardo Innocenti <bernie@gcc.gnu.org>
Tue, 1 Jun 2004 13:22:04 +0000 (15:22 +0200)
* config/m68k/m68k.c(m68k_output_mi_thunk):  For ColdFire, use %d0 as
a scratch to perform an add to memory.

From-SVN: r82547

gcc/ChangeLog
gcc/config/m68k/m68k.c

index aa5a1a9df1434a5c8f55bd69cf2cfb04529f61dc..ebe0dc21bcf8761b6cfb1359f59bf5d881d19121 100644 (file)
@@ -1,3 +1,8 @@
+2004-06-01  Peter Barada  <peter@the-baradas.com>
+
+       * config/m68k/m68k.c(m68k_output_mi_thunk):  For ColdFire, use %d0 as
+       a scratch to perform an add to memory.
+
 2004-06-01  Bernardo Innocenti  <bernie@develer.com>
 
        PR target/14018
index 1aebe96c548982966cc3ac45a1af76b7d3755a38..da17f65f9cd34547f9fd1a092c1deffad2b48ea4 100644 (file)
@@ -3334,6 +3334,23 @@ m68k_output_mi_thunk (FILE *file, tree thunk ATTRIBUTE_UNUSED,
                         "\tsubq.l %I%d,4(%Rsp)\n" :
                         "\tsubql %I%d,%Rsp@(4)\n",
                 (int) -delta);
+  else if (TARGET_COLDFIRE)
+    {
+      /* ColdFire can't add/sub a constant to memory unless it is in
+        the range of addq/subq.  So load the value into %d0 and
+        then add it to 4(%sp). */
+      if (delta >= -128 && delta <= 127)
+       asm_fprintf (file, MOTOROLA ?
+                    "\tmoveq.l %I%wd,%Rd0\n" :
+                    "\tmoveql %I%wd,%Rd0\n", delta);
+      else
+       asm_fprintf (file, MOTOROLA ?
+                    "\tmove.l %I%wd,%Rd0\n" :
+                    "\tmovel %I%wd,%Rd0\n", delta);
+      asm_fprintf (file, MOTOROLA ?
+                  "\tadd.l %Rd0,4(%Rsp)\n" :
+                  "\taddl %Rd0,%Rsp@(4)\n");
+    }
   else
     asm_fprintf (file, MOTOROLA ?
                         "\tadd.l %I%wd,4(%Rsp)\n" :