From 402f2db8e6a58496c57a602609eddda363304833 Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Wed, 16 Sep 2009 18:18:30 -0400 Subject: [PATCH] m32c.c (m32c_emit_epilogue): Check for R8C or M16C chip and ignore the "fast_interrupt" attribute if so. * config/m32c/m32c.c (m32c_emit_epilogue): Check for R8C or M16C chip and ignore the "fast_interrupt" attribute if so. From-SVN: r151780 --- gcc/ChangeLog | 5 +++++ gcc/config/m32c/m32c.c | 20 +++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index da86ebe9588..bbbc1bb95f7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2009-09-16 DJ Delorie + + * config/m32c/m32c.c (m32c_emit_epilogue): Check for R8C or M16C + chip and ignore the "fast_interrupt" attribute if so. + 2009-09-16 Richard Henderson PR middle-end/41360 diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c index ae4c8973dea..1bf3d1bcb2f 100644 --- a/gcc/config/m32c/m32c.c +++ b/gcc/config/m32c/m32c.c @@ -4052,8 +4052,26 @@ m32c_emit_epilogue (void) if (!bank_switch_p (cfun->decl) && cfun->machine->intr_pushm) emit_insn (gen_popm (GEN_INT (cfun->machine->intr_pushm))); + /* The FREIT (Fast REturn from InTerrupt) instruction should be + generated only for M32C/M32CM targets (generate the REIT + instruction otherwise). */ if (fast_interrupt_p (cfun->decl)) - emit_jump_insn (gen_epilogue_freit ()); + { + /* Check if fast_attribute is set for M32C or M32CM. */ + if (TARGET_A24) + { + emit_jump_insn (gen_epilogue_freit ()); + } + /* If fast_interrupt attribute is set for an R8C or M16C + target ignore this attribute and generated REIT + instruction. */ + else + { + warning (OPT_Wattributes, + "% attribute directive ignored"); + emit_jump_insn (gen_epilogue_reit_16 ()); + } + } else if (TARGET_A16) emit_jump_insn (gen_epilogue_reit_16 ()); else -- 2.30.2