Hi DJ, OK, I am abandoning my RL78 interrupt prologue patch for now. There are just too many complications to make it work. Instead here is a much simpler patch to add support for a naked function attribute.
OK to apply ? Cheers Nick gcc/ChangeLog 2013-05-16 Nick Clifton <ni...@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. Index: gcc/config/rl78/rl78.c =================================================================== --- gcc/config/rl78/rl78.c (revision 198971) +++ gcc/config/rl78/rl78.c (working copy) @@ -499,6 +499,8 @@ 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 @@ 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 @@ 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 @@ 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), Index: gcc/doc/extend.texi =================================================================== --- gcc/doc/extend.texi (revision 198959) +++ gcc/doc/extend.texi (working copy) @@ -3142,7 +3142,7 @@ @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