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

Reply via email to