diff options
Diffstat (limited to 'gcc/config/m68k/m68k.md')
-rw-r--r-- | gcc/config/m68k/m68k.md | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md index 78ddf58..19abe62 100644 --- a/gcc/config/m68k/m68k.md +++ b/gcc/config/m68k/m68k.md @@ -6833,15 +6833,23 @@ [(return)] "" { - if (m68k_interrupt_function_p (current_function_decl)) - return "rte"; - else if (current_function_pops_args) + switch (m68k_get_function_kind (current_function_decl)) { - operands[0] = GEN_INT (current_function_pops_args); - return "rtd %0"; + case m68k_fk_interrupt_handler: + return "rte"; + + case m68k_fk_interrupt_thread: + return "sleep"; + + default: + if (current_function_pops_args) + { + operands[0] = GEN_INT (current_function_pops_args); + return "rtd %0"; + } + else + return "rts"; } - else - return "rts"; }) (define_insn "*m68k_store_multiple" |