*** ChangeLog.~1~ Fri Aug 31 17:32:39 1990
--- ChangeLog Fri Aug 31 17:34:02 1990
***************
*** 1,3 ****
--- 1,19 ----
+ Fri Aug 31 17:09:38 1990 Michael Meissner (meissner at osf.org)
+
+ * mips.md (anonymous add insn before addsi3): Allow offsets from the
+ frame pointer to be >16 bits, just like the stack pointer. This is
+ to prevent insn's not found generated when optimizing programs that
+ have stack frames more than 32K, and the optimizer wants to load the
+ address of an array into a register, it does so by generating a PLUS
+ insn with the appropriate offset. This PLUS insn is never checked
+ to see if the machine can handle the offset.
+ (anonymous subtract insn before subsi3): same change as above.
+ (addsi3): Don't accept large constants with a !n constraint. Just
+ reject any large constants, the anonymous add pattern before addsi
+ will catch references to the stack and frame pointers.
+ (subsi3): Same change as addsi3.
+
+
Tue Aug 21 20:03:51 1990 Michael Meissner (meissner at osf.org)
* Makefile (install): Add code to build libg.a if it doesn't exist
*** config/mips.md.~1~ Fri Aug 31 17:05:31 1990
--- config/mips.md Fri Aug 31 13:30:55 1990
***************
*** 110,121 ****
"add.s\\t%0,%1,%2")
;; The following is generated when omiting the frame pointer
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=r")
(plus:SI (match_operand:SI 1 "register_operand" "%r")
(match_operand:SI 2 "immediate_operand" "i")))]
! "operands[1] == stack_pointer_rtx"
"*
{
return (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0)
--- 110,122 ----
"add.s\\t%0,%1,%2")
;; The following is generated when omiting the frame pointer
+ ;; and for referencing large auto arrays during optimization.
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=r")
(plus:SI (match_operand:SI 1 "register_operand" "%r")
(match_operand:SI 2 "immediate_operand" "i")))]
! "operands[1] == stack_pointer_rtx || operands[1] == frame_pointer_rtx"
"*
{
return (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0)
***************
*** 124,132 ****
}")
(define_insn "addsi3"
! [(set (match_operand:SI 0 "register_operand" "=r,r")
! (plus:SI (match_operand:SI 1 "arith_operand" "%r,r")
! (match_operand:SI 2 "arith_operand" "rI,!n")))]
""
"*
{
--- 125,133 ----
}")
(define_insn "addsi3"
! [(set (match_operand:SI 0 "register_operand" "=r")
! (plus:SI (match_operand:SI 1 "arith_operand" "%r")
! (match_operand:SI 2 "arith_operand" "rI")))]
""
"*
{
***************
*** 153,164 ****
"sub.s\\t%0,%1,%2")
;; The following is generated when omiting the frame pointer
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=r")
(minus:SI (match_operand:SI 1 "register_operand" "%r")
(match_operand:SI 2 "immediate_operand" "i")))]
! "operands[1] == stack_pointer_rtx"
"*
{
return (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0)
--- 154,166 ----
"sub.s\\t%0,%1,%2")
;; The following is generated when omiting the frame pointer
+ ;; and for referencing large auto arrays during optimization.
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=r")
(minus:SI (match_operand:SI 1 "register_operand" "%r")
(match_operand:SI 2 "immediate_operand" "i")))]
! "operands[1] == stack_pointer_rtx || operands[1] == frame_pointer_rtx"
"*
{
return (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0)
***************
*** 167,175 ****
}")
(define_insn "subsi3"
! [(set (match_operand:SI 0 "register_operand" "=r,r")
! (minus:SI (match_operand:SI 1 "register_operand" "r,r")
! (match_operand:SI 2 "arith_operand" "rI,!n")))]
""
"*
{
--- 169,177 ----
}")
(define_insn "subsi3"
! [(set (match_operand:SI 0 "register_operand" "=r")
! (minus:SI (match_operand:SI 1 "register_operand" "r")
! (match_operand:SI 2 "arith_operand" "rI")))]
""
"*
{