Commit 17b962bd by Nick Clifton Committed by Nick Clifton

rl78.c (rl78_attribute_table): Add naked.

	* 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.

From-SVN: r199001
parent b1a0f84e
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> 2013-05-16 Jeff Law <law@redhat.com>
* Makefile.in (tree-switch-conversion.o): Depend on $(OPTABS_H). * Makefile.in (tree-switch-conversion.o): Depend on $(OPTABS_H).
......
...@@ -499,6 +499,8 @@ const struct attribute_spec rl78_attribute_table[] = ...@@ -499,6 +499,8 @@ const struct attribute_spec rl78_attribute_table[] =
false }, false },
{ "brk_interrupt", 0, 0, true, false, false, rl78_handle_func_attribute, { "brk_interrupt", 0, 0, true, false, false, rl78_handle_func_attribute,
false }, false },
{ "naked", 0, 0, true, false, false, rl78_handle_func_attribute,
false },
{ NULL, 0, 0, false, false, false, NULL, false } { NULL, 0, 0, false, false, false, NULL, false }
}; };
...@@ -825,6 +827,12 @@ rl78_initial_elimination_offset (int from, int to) ...@@ -825,6 +827,12 @@ rl78_initial_elimination_offset (int from, int to)
return rv; 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). */ /* Expand the function prologue (from the prologue pattern). */
void void
rl78_expand_prologue (void) rl78_expand_prologue (void)
...@@ -833,6 +841,9 @@ rl78_expand_prologue (void) ...@@ -833,6 +841,9 @@ rl78_expand_prologue (void)
rtx sp = gen_rtx_REG (HImode, STACK_POINTER_REGNUM); rtx sp = gen_rtx_REG (HImode, STACK_POINTER_REGNUM);
int rb = 0; int rb = 0;
if (rl78_is_naked_func ())
return;
if (!cfun->machine->computed) if (!cfun->machine->computed)
rl78_compute_frame_info (); rl78_compute_frame_info ();
...@@ -877,6 +888,9 @@ rl78_expand_epilogue (void) ...@@ -877,6 +888,9 @@ rl78_expand_epilogue (void)
rtx sp = gen_rtx_REG (HImode, STACK_POINTER_REGNUM); rtx sp = gen_rtx_REG (HImode, STACK_POINTER_REGNUM);
int rb = 0; int rb = 0;
if (rl78_is_naked_func ())
return;
if (frame_pointer_needed) if (frame_pointer_needed)
{ {
emit_move_insn (gen_rtx_REG (HImode, STACK_POINTER_REGNUM), emit_move_insn (gen_rtx_REG (HImode, STACK_POINTER_REGNUM),
......
...@@ -3142,7 +3142,7 @@ and newer. ...@@ -3142,7 +3142,7 @@ and newer.
@item naked @item naked
@cindex function without a prologue/epilogue code @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 specified function does not need prologue/epilogue sequences generated by
the compiler. It is up to the programmer to provide these sequences. The the compiler. It is up to the programmer to provide these sequences. The
only statements that can be safely included in naked functions are only statements that can be safely included in naked functions are
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment