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
This commit is contained in:
parent
b1a0f84edb
commit
17b962bd33
3 changed files with 26 additions and 1 deletions
|
@ -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).
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue