47 lines
1.8 KiB
Plaintext
47 lines
1.8 KiB
Plaintext
$OpenBSD: pp-gcc_combine_c,v 1.1 2005/01/04 23:06:33 espie Exp $
|
|
--- gcc/combine.c.orig Sun Jul 25 20:49:54 2004
|
|
+++ gcc/combine.c Mon Jan 3 10:17:41 2005
|
|
@@ -3873,7 +3873,17 @@ combine_simplify_rtx (x, op0_mode, last,
|
|
rtx inner_op0 = XEXP (XEXP (x, 0), 1);
|
|
rtx inner_op1 = XEXP (x, 1);
|
|
rtx inner;
|
|
-
|
|
+
|
|
+#ifndef FRAME_GROWS_DOWNWARD
|
|
+ if (flag_propolice_protection
|
|
+ && code == PLUS
|
|
+ && other == frame_pointer_rtx
|
|
+ && GET_CODE (inner_op0) == CONST_INT
|
|
+ && GET_CODE (inner_op1) == CONST_INT
|
|
+ && INTVAL (inner_op0) > 0
|
|
+ && INTVAL (inner_op0) + INTVAL (inner_op1) <= 0)
|
|
+ return x;
|
|
+#endif
|
|
/* Make sure we pass the constant operand if any as the second
|
|
one if this is a commutative operation. */
|
|
if (CONSTANT_P (inner_op0) && GET_RTX_CLASS (code) == 'c')
|
|
@@ -4286,6 +4296,11 @@ combine_simplify_rtx (x, op0_mode, last,
|
|
they are now checked elsewhere. */
|
|
if (GET_CODE (XEXP (x, 0)) == PLUS
|
|
&& CONSTANT_ADDRESS_P (XEXP (XEXP (x, 0), 1)))
|
|
+#ifndef FRAME_GROWS_DOWNWARD
|
|
+ if (! (flag_propolice_protection
|
|
+ && XEXP (XEXP (x, 0), 0) == frame_pointer_rtx
|
|
+ && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT))
|
|
+#endif
|
|
return gen_binary (PLUS, mode,
|
|
gen_binary (PLUS, mode, XEXP (XEXP (x, 0), 0),
|
|
XEXP (x, 1)),
|
|
@@ -4414,7 +4429,10 @@ combine_simplify_rtx (x, op0_mode, last,
|
|
|
|
/* Canonicalize (minus A (plus B C)) to (minus (minus A B) C) for
|
|
integers. */
|
|
- if (GET_CODE (XEXP (x, 1)) == PLUS && INTEGRAL_MODE_P (mode))
|
|
+ if (GET_CODE (XEXP (x, 1)) == PLUS && INTEGRAL_MODE_P (mode)
|
|
+ && (! (flag_propolice_protection
|
|
+ && XEXP (XEXP (x, 1), 0) == frame_pointer_rtx
|
|
+ && GET_CODE (XEXP (XEXP (x, 1), 1)) == CONST_INT)))
|
|
return gen_binary (MINUS, mode,
|
|
gen_binary (MINUS, mode, XEXP (x, 0),
|
|
XEXP (XEXP (x, 1), 0)),
|