mn10300.c (secondary_reload_class): Handle more cases where we need secondary reloads.
authorJeff Law <law@gcc.gnu.org>
Wed, 23 Apr 1997 23:54:59 +0000 (17:54 -0600)
committerJeff Law <law@gcc.gnu.org>
Wed, 23 Apr 1997 23:54:59 +0000 (17:54 -0600)
        * mn10300.c (secondary_reload_class): Handle more cases where we
        need secondary reloads.
        (impossible_plus_operand): Accept anything that involves addition
        of the stack pointer.
        * mn10300.md (reload_insi): Always load the stack pointer into
        the destination (which is always an address register).
        * mn10300.h (STORE_FLAG_VALUE): Remove definition.
        * xm-mn10300.h: Declare malloc, realloc, calloc and free.

From-SVN: r13973

gcc/config/mn10300/mn10300.c
gcc/config/mn10300/mn10300.h
gcc/config/mn10300/mn10300.md
gcc/config/mn10300/xm-mn10300.h

index 2e2bf5b1ea7132659bb79da0a01658e30cc35add..bbfb68eac94dff484867927d10656bcd6663f433 100644 (file)
@@ -675,6 +675,12 @@ secondary_reload_class (class, mode, in)
                  || XEXP (in, 1) == stack_pointer_rtx))))
     return ADDRESS_REGS;
 
+  if (GET_CODE (in) == PLUS
+      && (XEXP (in, 0) == stack_pointer_rtx
+         || XEXP (in, 1) == stack_pointer_rtx))
+    return DATA_REGS;
+
   /* Otherwise assume no secondary reloads are needed.  */
   return NO_REGS;
 }
@@ -950,16 +956,9 @@ impossible_plus_operand (op, mode)
   if (GET_CODE (op) != PLUS)
     return 0;
 
-  if ((XEXP (op, 0) == stack_pointer_rtx)
-      && ((REG_P (XEXP (op, 1)) && reg_equiv_mem [REGNO (XEXP (op, 1))])
-         || (GET_CODE (XEXP (op, 1)) == SUBREG
-             && GET_CODE (SUBREG_REG (XEXP (op, 1))) == MEM)))
+  if (XEXP (op, 0) == stack_pointer_rtx
+      || XEXP (op, 1) == stack_pointer_rtx)
     return 1;
 
-  if ((XEXP (op, 1) == stack_pointer_rtx)
-      && ((REG_P (XEXP (op, 0)) && reg_equiv_mem [REGNO (XEXP (op, 0))])
-         || (GET_CODE (XEXP (op, 0)) == SUBREG
-             && GET_CODE (SUBREG_REG (XEXP (op, 0))) == MEM)))
-    return 1;
   return 0;
 }
index 39b307b60ca81d09d904c35c46e09cb5233e095d..b24f6b42f6cfe0be628afe7772afef289c544339 100644 (file)
@@ -971,8 +971,6 @@ do { char dstr[30];                                 \
    is done just by pretending it is already truncated.  */
 #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
 
-#define STORE_FLAG_VALUE 1
-
 /* Specify the machine mode that pointers have.
    After generation of rtl, the compiler makes no further distinction
    between pointers and any other objects of this machine mode.  */
index c34b1bc36bef465cbf689b0a80c5b2a6179a241b..9f1d9179f8d79f089f6496baa722a04fa8faebef 100644 (file)
 (define_expand "reload_insi"
   [(set (match_operand:SI 0 "register_operand" "=a")
        (match_operand:SI 1 "impossible_plus_operand" ""))
-   (clobber (match_operand:SI 2 "register_operand" "=&a"))]
+   (clobber (match_operand:SI 2 "register_operand" "=&r"))]
   ""
   "
 {
-  emit_move_insn (operands[0], XEXP (operands[1], 0));
-  emit_move_insn (operands[2], XEXP (operands[1], 1));
+  if (XEXP (operands[1], 0) == stack_pointer_rtx)
+    {
+      emit_move_insn (operands[0], XEXP (operands[1], 0));
+      emit_move_insn (operands[2], XEXP (operands[1], 1));
+    }
+  else
+    {
+      emit_move_insn (operands[0], XEXP (operands[1], 1));
+      emit_move_insn (operands[2], XEXP (operands[1], 0));
+    }
   emit_insn (gen_addsi3 (operands[0], operands[0], operands[2]));
   DONE;
 }")
   btst %1,%0"
   [(set_attr "cc" "set_zn_c0")])
 
-;; -----------------------------------------------------------------
-;; -----------------------------------------------------------------
-;; Scc INSTRUCTIONS
-;; -----------------------------------------------------------------
-;; It's probably worth the time to define setcc type insns too
-
 \f
 ;; ----------------------------------------------------------------------
 ;; JUMP INSTRUCTIONS
index 4ea1bc8d6ccb5b9a514777e3919c6c4293e74ab7..63d61c276c221982cd3e9efbd3d59492a1be3318 100644 (file)
@@ -38,3 +38,10 @@ Boston, MA 02111-1307, USA.  */
    tm.h is a symbolic link to the actual target specific file.   */
 
 #include "tm.h"
+
+#ifndef __STDC__
+extern char *malloc (), *realloc (), *calloc ();
+#else
+extern void *malloc (), *realloc (), *calloc ();
+#endif
+extern void free ();