h8300.c (function_prologue): Update "monitor" prologues.
authorJeff Law <law@gcc.gnu.org>
Tue, 25 Jun 1996 05:20:34 +0000 (23:20 -0600)
committerJeff Law <law@gcc.gnu.org>
Tue, 25 Jun 1996 05:20:34 +0000 (23:20 -0600)
        * h8300/h8300.c (function_prologue): Update "monitor" prologues.
        (function_epilogue): Similarly.

From-SVN: r12328

gcc/config/h8300/h8300.c

index 6e6967c0d7eede7424b5cf2c96c9808e78524095..8ffd84e317532b21e647de5e358c2d0088a71f05 100644 (file)
@@ -232,7 +232,21 @@ function_prologue (file, size)
       fprintf (file, ";monitor prologue\n");
       interrupt_handler = 1;
       monitor = 1;
-      fprintf (file, "\torc\t#128,ccr\n");
+      if (TARGET_H8300)
+       {
+         fprintf (file, "\tsubs\t#2,sp\n");
+         fprintf (file, "\tpush\tr0\n");
+         fprintf (file, "\tstc\tccr,r0l\n");
+         fprintf (file, "\torc\t#128,ccr\n");
+         fprintf (file, "\tmov.b\tr0l,@(4,sp)\n");
+       }
+      else if (TARGET_H8300H)
+       {
+         fprintf (file, "\tpush\ter0\n");
+         fprintf (file, "\tstc\tccr,r0l\n");
+         fprintf (file, "\torc\t#128,ccr\n");
+         fprintf (file, "\tmov.b\tr0l,@(4,sp)\n");
+       }
     }
 
   if (frame_pointer_needed)
@@ -333,6 +347,11 @@ function_epilogue (file, size)
       dosize (file, "add", fsize);
     }
 
+  /* If this is a monitor function, there is one register still left on
+     the stack.  */
+  if (monitor)
+    fprintf (file, "\t%s\t%s\n", h8_pop_op, h8_reg_names[0]);
+
   if (interrupt_handler)
     fprintf (file, "\trte\n");
   else