avr.c (ret_cond_branch): New argument (reverse) added.
authorDenis Chertykov <denisc@overta.ru>
Sun, 21 Jan 2001 07:08:46 +0000 (07:08 +0000)
committerDenis Chertykov <denisc@gcc.gnu.org>
Sun, 21 Jan 2001 07:08:46 +0000 (10:08 +0300)
* config/avr/avr.c (ret_cond_branch): New argument (reverse) added.
If REVERSE nonzero then condition code in X must be reversed.
(encode_section_info): Optimise if/else.
(avr_function_value): Fix formatting.

* config/avr/avr.md (branch): Call to ret_cond_branch changed.
(difficult_branch): Likewise.
(rvbranch): Likewise.
(difficult_rvbranch): Likewise.

* config/avr/avr-protos.h (ret_cond_branch): Prototype changed.

* config/avr/libgcc.S: Fix comment.

From-SVN: r39163

gcc/ChangeLog
gcc/config/avr/avr-protos.h
gcc/config/avr/avr.c
gcc/config/avr/avr.md
gcc/config/avr/libgcc.S

index b0550ce484ee7bf39c2a00a6be4a20d3f05ec365..b0f77270d418b34dc45bc276d23e8e9f89cf382d 100644 (file)
@@ -1,3 +1,19 @@
+Sun Jan 21 09:44:17 2001  Denis Chertykov  <denisc@overta.ru>
+
+       * config/avr/avr.c (ret_cond_branch): New argument (reverse) added.
+       If REVERSE nonzero then condition code in X must be reversed.
+       (encode_section_info): Optimise if/else.
+       (avr_function_value): Fix formatting.
+
+       * config/avr/avr.md (branch): Call to ret_cond_branch changed.
+       (difficult_branch): Likewise.
+       (rvbranch): Likewise.
+       (difficult_rvbranch): Likewise.
+
+       * config/avr/avr-protos.h (ret_cond_branch): Prototype changed.
+
+       * config/avr/libgcc.S: Fix comment.
+
 2001-01-20  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
 
        * sdbout.c (PUT_SDB_DEF): Fix after last bogus change.
index 5ebea175c3e68a995a9f85ee52c240c714923a1d..c7f55397025b00634f53816700dd82092b1b35b0 100644 (file)
@@ -95,7 +95,7 @@ extern const char * out_movsi_mr_r  PARAMS ((rtx insn, rtx op[], int *l));
 extern const char * output_movsisf  PARAMS ((rtx insn, rtx operands[], int *l));
 extern const char * out_tstsi       PARAMS ((rtx insn, int *l));
 extern const char * out_tsthi       PARAMS ((rtx insn, int *l));
-extern const char * ret_cond_branch PARAMS ((RTX_CODE cond, int len));
+extern const char * ret_cond_branch PARAMS ((rtx x, int len, int reverse));
 
 extern const char * ashlqi3_out PARAMS ((rtx insn, rtx operands[], int *len));
 extern const char * ashlhi3_out PARAMS ((rtx insn, rtx operands[], int *len));
index 9e396df89cc06286ce52ec4ea2b563f2195d1860..3dc112353c4f42a6c19589ae2020821cd30474cc 100644 (file)
@@ -1194,14 +1194,19 @@ avr_jump_mode (x, insn)
   return 2;
 }
 
-/* return a AVR condition jump commands.
- LEN is a number returned by avr_jump_mode function.  */
+/* return an AVR condition jump commands.
+   X is a comparison RTX.
+   LEN is a number returned by avr_jump_mode function.
+   if REVERSE nonzero then condition code in X must be reversed.  */
 
 const char *
-ret_cond_branch (cond, len)
-     RTX_CODE cond;
+ret_cond_branch (x, len, reverse)
+     rtx x;
      int len;
+     int reverse;
 {
+  RTX_CODE cond = reverse ? reverse_condition (GET_CODE (x)) : GET_CODE (x);
+  
   switch (cond)
     {
     case GT:
@@ -1262,17 +1267,34 @@ ret_cond_branch (cond, len)
                AS1 (brsh,_PC_+4) CR_TAB
               AS1 (jmp,%0)));
     default:
-      switch (len)
-        {
-        case 1:
-          return AS1 (br%j1,%0);
-        case 2:
-          return (AS1 (br%k1,_PC_+2) CR_TAB
-                  AS1 (rjmp,%0));
-        default:
-          return (AS1 (br%k1,_PC_+4) CR_TAB
-                  AS1 (jmp,%0));
-        }
+      if (reverse)
+       {
+         switch (len)
+           {
+           case 1:
+             return AS1 (br%k1,%0);
+           case 2:
+             return (AS1 (br%j1,_PC_+2) CR_TAB
+                     AS1 (rjmp,%0));
+           default:
+             return (AS1 (br%j1,_PC_+4) CR_TAB
+                     AS1 (jmp,%0));
+           }
+       }
+       else
+         {
+           switch (len)
+             {
+             case 1:
+               return AS1 (br%j1,%0);
+             case 2:
+               return (AS1 (br%k1,_PC_+2) CR_TAB
+                       AS1 (rjmp,%0));
+             default:
+               return (AS1 (br%k1,_PC_+4) CR_TAB
+                       AS1 (jmp,%0));
+             }
+         }
     }
   return "";
 }
@@ -4736,10 +4758,9 @@ encode_section_info (decl)
 {
   if (TREE_CODE (decl) == FUNCTION_DECL)
     SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 1;
-
-  if ((TREE_STATIC (decl) || DECL_EXTERNAL (decl))
-      && TREE_CODE (decl) == VAR_DECL
-      && avr_progmem_p (decl))
+  else if ((TREE_STATIC (decl) || DECL_EXTERNAL (decl))
+          && TREE_CODE (decl) == VAR_DECL
+          && avr_progmem_p (decl))
     {
       const char *dsec = ".progmem.data";
       DECL_SECTION_NAME (decl) = build_string (strlen (dsec), dsec);
@@ -5102,6 +5123,7 @@ avr_function_value (type, func)
      tree func ATTRIBUTE_UNUSED;
 {
   unsigned int offs;
+  
   if (TYPE_MODE (type) != BLKmode)
     return avr_libcall_value (TYPE_MODE (type));
   
index 663585669cfadae22bc46ccdf13c0eca8989683b..cd72f1014dc601a466784a9a1b6f6b13eda43377 100644 (file)
   "! (GET_CODE (operands[1]) == GT || GET_CODE (operands[1]) == GTU
       || GET_CODE (operands[1]) == LE || GET_CODE (operands[1]) == LEU)"
   "*
-   return ret_cond_branch (GET_CODE (operands[1]),
-                           avr_jump_mode (operands[0],insn));"
+   return ret_cond_branch (operands[1], avr_jump_mode (operands[0],insn), 0);"
   [(set_attr "type" "branch")
    (set_attr "cc" "clobber")])
 
   "(GET_CODE (operands[1]) == GT || GET_CODE (operands[1]) == GTU
     || GET_CODE (operands[1]) == LE || GET_CODE (operands[1]) == LEU)"
   "*
-   return ret_cond_branch (GET_CODE (operands[1]),
-                           avr_jump_mode (operands[0],insn));"
+   return ret_cond_branch (operands[1], avr_jump_mode (operands[0],insn), 0);"
   [(set_attr "type" "branch1")
    (set_attr "cc" "clobber")])
 
   "! (GET_CODE (operands[1]) == GT || GET_CODE (operands[1]) == GTU
       || GET_CODE (operands[1]) == LE || GET_CODE (operands[1]) == LEU)"
   "*
-   return ret_cond_branch (reverse_condition (GET_CODE (operands[1])),
-                           avr_jump_mode (operands[0],insn));"
+   return ret_cond_branch (operands[1], avr_jump_mode (operands[0], insn), 1);"
   [(set_attr "type" "branch1")
    (set_attr "cc" "clobber")])
 
   "(GET_CODE (operands[1]) == GT || GET_CODE (operands[1]) == GTU
     || GET_CODE (operands[1]) == LE || GET_CODE (operands[1]) == LEU)"
   "*
-   return ret_cond_branch (reverse_condition (GET_CODE (operands[1])),
-                           avr_jump_mode (operands[0],insn));"
+   return ret_cond_branch (operands[1], avr_jump_mode (operands[0], insn), 1);"
   [(set_attr "type" "branch")
    (set_attr "cc" "clobber")])
 
index aa96a520239618564aad612a1b188264fd384667..cdf2c3f4ee1f0f7374f97858c9f29e24bc33aa32 100644 (file)
@@ -597,7 +597,7 @@ __prologue_saves__:
 #endif /* defined (L_prologue) */
 
 /*
- * This is a epilogue subroutine
+ * This is an epilogue subroutine
  */
 #if defined (L_epilogue)