aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/m32c
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2009-09-16 18:18:30 -0400
committerDJ Delorie <dj@gcc.gnu.org>2009-09-16 18:18:30 -0400
commit402f2db8e6a58496c57a602609eddda363304833 (patch)
tree741c4169ead4eff9580b64c147fe6354cac9ea2d /gcc/config/m32c
parentee3422cf454a833648a34bee99beddb0dea78757 (diff)
downloadgcc-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.c20
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