OSDN Git Service

2001-01-09 Kazu Hirata <kazu@hxi.com>
authorkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 9 Jan 2001 20:17:02 +0000 (20:17 +0000)
committerkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 9 Jan 2001 20:17:02 +0000 (20:17 +0000)
* 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.

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

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

index 94d8ca4..4ded428 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 0f88433..d93c9d0 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