+Wed Sep 22 17:58:01 1999 Stan Cox <scox@cygnus.com>
+
+ * mips.h (GO_IF_LEGITIMATE_ADDRESS): Don't accept large
+ register offsets; let LEGITIMIZE_ADDRESS load it into a register.
+ (LEGITIMIZE_ADDRESS): Use plus_constant to avoid
+ (plus (reg) (const_int 0))
+ * mips.md (call_internal3c): New pattern for -mips16 -mlong-calls.
+
Wed Sep 22 17:55:31 1999 David Edelsohn <edelsohn@gnu.org>
* rs6000.c (expand_block_move): DImode loads and stores require
&& (!TARGET_EMBEDDED_PIC \
|| code1 != CONST \
|| GET_CODE (XEXP (xplus1, 0)) != MINUS) \
+ && ! (code1 == CONST_INT && ! SMALL_INT (xplus1)) \
&& !TARGET_MIPS16) \
goto ADDR; \
} \
ptr_reg, \
gen_rtx_PLUS (Pmode, xplus0, int_reg))); \
\
- X = gen_rtx_PLUS (Pmode, ptr_reg, \
- GEN_INT (INTVAL (xplus1) & 0x7fff)); \
+ X = plus_constant (ptr_reg, INTVAL (xplus1) & 0x7fff); \
goto WIN; \
} \
} \
[(call (mem:SI (match_operand:SI 0 "register_operand" "r"))
(match_operand 1 "" "i"))
(clobber (match_operand:SI 2 "register_operand" "=d"))]
- "!(Pmode == DImode) && !TARGET_ABICALLS && TARGET_LONG_CALLS"
+ "!TARGET_MIPS16
+ && !(Pmode == DImode) && !TARGET_ABICALLS && TARGET_LONG_CALLS"
"%*jal\\t%2,%0"
[(set_attr "type" "call")
(set_attr "mode" "none")])
[(call (mem:DI (match_operand:DI 0 "se_register_operand" "r"))
(match_operand 1 "" "i"))
(clobber (match_operand:SI 2 "register_operand" "=d"))]
- "Pmode == DImode && !TARGET_ABICALLS && TARGET_LONG_CALLS"
+ "!TARGET_MIPS16
+ && Pmode == DImode && !TARGET_ABICALLS && TARGET_LONG_CALLS"
+ "%*jal\\t%2,%0"
+ [(set_attr "type" "call")
+ (set_attr "mode" "none")
+ (set_attr "length" "1")])
+
+(define_insn "call_internal3c"
+ [(call (mem:SI (match_operand:SI 0 "register_operand" "e"))
+ (match_operand 1 "" "i"))
+ (clobber (match_operand:SI 2 "register_operand" "=y"))]
+ "TARGET_MIPS16 && !(Pmode == DImode) && !TARGET_ABICALLS && TARGET_LONG_CALLS
+ && GET_CODE (operands[2]) == REG && REGNO (operands[2]) == 31"
"%*jal\\t%2,%0"
[(set_attr "type" "call")
(set_attr "mode" "none")])