summaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
authorHiroaki Etoh <etoh@cvs.openbsd.org>2003-03-15 04:06:38 +0000
committerHiroaki Etoh <etoh@cvs.openbsd.org>2003-03-15 04:06:38 +0000
commit5f15aa007f7abd75c0e9e95984ff0ceda6aa3ca6 (patch)
tree41b1cf51de4de1567516a33de5286b2661e05caf /gnu
parentf5a7957305ac9d2273318b55c0809a89c963d2b4 (diff)
New frame addressing (plus (subreg (reg fp)) const) is supported by push_frame_in_operand.
Diffstat (limited to 'gnu')
-rw-r--r--gnu/egcs/gcc/protector.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/gnu/egcs/gcc/protector.c b/gnu/egcs/gcc/protector.c
index e674a886849..59507f713fb 100644
--- a/gnu/egcs/gcc/protector.c
+++ b/gnu/egcs/gcc/protector.c
@@ -2281,6 +2281,22 @@ push_frame_in_operand (insn, orig, push_size, boundary)
return;
}
/*
+ Handle alpha case:
+ (plus:SI (subreg:SI (reg:DI 63 FP) 0) (const_int 64 [0x40]))
+ */
+ if (CONSTANT_P (XEXP (x, 1))
+ && GET_CODE (XEXP (x, 0)) == SUBREG
+ && SUBREG_REG (XEXP (x, 0)) == frame_pointer_rtx)
+ {
+ if (x->used || offset < boundary)
+ return;
+
+ XEXP (x, 1) = gen_rtx_CONST_INT (VOIDmode, offset + push_size);
+ x->used = 1; insn_pushed = TRUE;
+
+ return;
+ }
+ /*
Handle powerpc case:
(set (reg x) (plus fp const))
(set (.....) (... (plus (reg x) (const B))))