aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/config/rl78/rl78.c14
-rw-r--r--gcc/doc/extend.texi2
3 files changed, 26 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 38e8f18..e47c760 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2013-05-16 Nick Clifton <nickc@redhat.com>
+
+ * config/rl78/rl78.c (rl78_attribute_table): Add naked.
+ (rl78_is_naked_func): New function.
+ (rl78_expand_prologue): Skip prologue generation for naked
+ functions.
+ (rl78_expand_epilogue): Skip epilogue generation for naked
+ functions.
+ * doc/extend.texi (naked): Add RL78 to the list of processors
+ that supports this attribute.
+
2013-05-16 Jeff Law <law@redhat.com>
* Makefile.in (tree-switch-conversion.o): Depend on $(OPTABS_H).
diff --git a/gcc/config/rl78/rl78.c b/gcc/config/rl78/rl78.c
index 895d7db..2e18beb 100644
--- a/gcc/config/rl78/rl78.c
+++ b/gcc/config/rl78/rl78.c
@@ -499,6 +499,8 @@ const struct attribute_spec rl78_attribute_table[] =
false },
{ "brk_interrupt", 0, 0, true, false, false, rl78_handle_func_attribute,
false },
+ { "naked", 0, 0, true, false, false, rl78_handle_func_attribute,
+ false },
{ NULL, 0, 0, false, false, false, NULL, false }
};
@@ -825,6 +827,12 @@ rl78_initial_elimination_offset (int from, int to)
return rv;
}
+static int
+rl78_is_naked_func (void)
+{
+ return (lookup_attribute ("naked", DECL_ATTRIBUTES (current_function_decl)) != NULL_TREE);
+}
+
/* Expand the function prologue (from the prologue pattern). */
void
rl78_expand_prologue (void)
@@ -833,6 +841,9 @@ rl78_expand_prologue (void)
rtx sp = gen_rtx_REG (HImode, STACK_POINTER_REGNUM);
int rb = 0;
+ if (rl78_is_naked_func ())
+ return;
+
if (!cfun->machine->computed)
rl78_compute_frame_info ();
@@ -877,6 +888,9 @@ rl78_expand_epilogue (void)
rtx sp = gen_rtx_REG (HImode, STACK_POINTER_REGNUM);
int rb = 0;
+ if (rl78_is_naked_func ())
+ return;
+
if (frame_pointer_needed)
{
emit_move_insn (gen_rtx_REG (HImode, STACK_POINTER_REGNUM),
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 1e1f8b3..76a90ec 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -3142,7 +3142,7 @@ and newer.
@item naked
@cindex function without a prologue/epilogue code
-Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to indicate that
+Use this attribute on the ARM, AVR, MCORE, RL78, RX and SPU ports to indicate that
the specified function does not need prologue/epilogue sequences generated by
the compiler. It is up to the programmer to provide these sequences. The
only statements that can be safely included in naked functions are