diff options
author | DJ Delorie <dj@redhat.com> | 2009-09-16 18:18:30 -0400 |
---|---|---|
committer | DJ Delorie <dj@gcc.gnu.org> | 2009-09-16 18:18:30 -0400 |
commit | 402f2db8e6a58496c57a602609eddda363304833 (patch) | |
tree | 741c4169ead4eff9580b64c147fe6354cac9ea2d /gcc/config/m32c | |
parent | ee3422cf454a833648a34bee99beddb0dea78757 (diff) | |
download | gcc-402f2db8e6a58496c57a602609eddda363304833.zip gcc-402f2db8e6a58496c57a602609eddda363304833.tar.gz gcc-402f2db8e6a58496c57a602609eddda363304833.tar.bz2 |
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
Diffstat (limited to 'gcc/config/m32c')
-rw-r--r-- | gcc/config/m32c/m32c.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c index ae4c897..1bf3d1b 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, + "%<fast_interrupt%> attribute directive ignored"); + emit_jump_insn (gen_epilogue_reit_16 ()); + } + } else if (TARGET_A16) emit_jump_insn (gen_epilogue_reit_16 ()); else |