]> gcc.gnu.org Git - gcc.git/commitdiff
h8300.c (function_prologue): Fix code for a monitor function.
authorKazu Hirata <kazu@hxi.com>
Tue, 9 Jan 2001 20:17:02 +0000 (20:17 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Tue, 9 Jan 2001 20:17:02 +0000 (20:17 +0000)
2001-01-09  Kazu Hirata  <kazu@hxi.com>

* config/h8300/h8300.c (function_prologue): Fix code for a
monitor function.  Support H8/S.
(function_epilogue): Do not output pop for a monitor function.

From-SVN: r38840

gcc/ChangeLog
gcc/config/h8300/h8300.c

index 94d8ca4e8624405c97de019bd8f4577737df5f1b..4ded428adc224eca1a113e2ee4c7b8a1f617848c 100644 (file)
@@ -5,6 +5,9 @@
        shift_mode.  Remove an extra error check.
        (emit_a_shift): Adopt to the new calling prototype of
        get_shift_alg.
+       (function_prologue): Fix code for a monitor
+       function.  Support H8/S.
+       (function_epilogue): Do not output pop for a monitor function.
 
 2001-01-09  Nick Clifton  <nickc@redhat.com>
 
index 0f88433aff26c331f08ad4de577744534c9b4e2a..d93c9d0e116fc13e800c079b6299e090dbcc2012 100644 (file)
@@ -297,16 +297,29 @@ function_prologue (file, size)
          fprintf (file, "\tsubs\t#2,sp\n");
          push (file, 0);
          fprintf (file, "\tstc\tccr,r0l\n");
+         fprintf (file, "\tmov.b\tr0l,@(2,sp)\n");
+         pop (file, 0);
          fprintf (file, "\torc\t#128,ccr\n");
+       }
+      else if (TARGET_H8300H)
+       {
+         push (file, 0);
+         fprintf (file, "\tstc\tccr,r0l\n");
          fprintf (file, "\tmov.b\tr0l,@(4,sp)\n");
+         pop (file, 0);
+         fprintf (file, "\torc\t#128,ccr\n");
        }
-      else
+      else if (TARGET_H8300S)
        {
+         fprintf (file, "\tstc\texr,@-sp\n");
          push (file, 0);
          fprintf (file, "\tstc\tccr,r0l\n");
+         fprintf (file, "\tmov.b\tr0l,@(6,sp)\n");
+         pop (file, 0);
          fprintf (file, "\torc\t#128,ccr\n");
-         fprintf (file, "\tmov.b\tr0l,@(4,sp)\n");
        }
+      else
+       abort ();
     }
 
   if (frame_pointer_needed)
@@ -430,11 +443,6 @@ function_epilogue (file, size)
   if (frame_pointer_needed)
     pop (file, FRAME_POINTER_REGNUM);
 
-  /* If this is a monitor function, there is one register still left on
-     the stack.  */
-  if (monitor)
-    pop (file, 0);
-
   if (interrupt_handler)
     fprintf (file, "\trte\n");
   else
This page took 0.079101 seconds and 5 git commands to generate.