diff options
author | Nick Clifton <nickc@redhat.com> | 2013-05-17 07:51:53 +0000 |
---|---|---|
committer | Nick Clifton <nickc@gcc.gnu.org> | 2013-05-17 07:51:53 +0000 |
commit | 17b962bd33aa88fbe170ffd67a5273d56350066e (patch) | |
tree | 093fd6f9bc10606205b0aea14e8824e8e4c177e1 | |
parent | b1a0f84edb849a7b78db47450e7f2d180aeec088 (diff) | |
download | gcc-17b962bd33aa88fbe170ffd67a5273d56350066e.zip gcc-17b962bd33aa88fbe170ffd67a5273d56350066e.tar.gz gcc-17b962bd33aa88fbe170ffd67a5273d56350066e.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/config/rl78/rl78.c | 14 | ||||
-rw-r--r-- | gcc/doc/extend.texi | 2 |
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 |