diff options
author | Jeff Law <law@gcc.gnu.org> | 1996-06-24 23:20:34 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1996-06-24 23:20:34 -0600 |
commit | ea3a7ffa914c57d1c08a28b5646e21bb5d9e99c2 (patch) | |
tree | 7431ca80d591459dc173b60909a595ccd8e5e45c /gcc | |
parent | 19848e74989b5f02534e09736b94ce638f52ebfc (diff) | |
download | gcc-ea3a7ffa914c57d1c08a28b5646e21bb5d9e99c2.zip gcc-ea3a7ffa914c57d1c08a28b5646e21bb5d9e99c2.tar.gz gcc-ea3a7ffa914c57d1c08a28b5646e21bb5d9e99c2.tar.bz2 |
h8300.c (function_prologue): Update "monitor" prologues.
* h8300/h8300.c (function_prologue): Update "monitor" prologues.
(function_epilogue): Similarly.
From-SVN: r12328
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/h8300/h8300.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c index 6e6967c..8ffd84e 100644 --- a/gcc/config/h8300/h8300.c +++ b/gcc/config/h8300/h8300.c @@ -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 |