Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Meissner, patch #30 for MIPS/NS32K [large stack frames]

3 views
Skip to first unread message

meis...@osf.org

unread,
Aug 31, 1990, 5:40:17 PM8/31/90
to
This patch to the MIPS fixes a problem encountered when optimizing
MIPS programs that have large stack frames (> 32K). The ChangeLog
patch is against 1.37.92, and the mips.md should apply to either
1.37.92 or to 1.37.1 with all of my previous patches applied.

*** 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")))]
""
"*
{

KP KP

unread,
Aug 1, 2022, 7:00:17 PM8/1/22
to
fjalks
0 new messages