openbsd-ports/lang/gcc/3.3/patches/pp-gcc_expr_c
2005-01-04 23:06:33 +00:00

90 lines
3.6 KiB
Plaintext

$OpenBSD: pp-gcc_expr_c,v 1.1 2005/01/04 23:06:33 espie Exp $
--- gcc/expr.c.orig Sun May 16 22:27:15 2004
+++ gcc/expr.c Mon Jan 3 10:17:42 2005
@@ -45,6 +45,7 @@ Software Foundation, 59 Temple Place - S
#include "langhooks.h"
#include "intl.h"
#include "tm_p.h"
+#include "protector.h"
/* Decide whether a function's arguments should be processed
from first to last or from last to first.
@@ -1560,7 +1561,7 @@ move_by_pieces (to, from, len, align)
if (USE_LOAD_PRE_DECREMENT (mode) && data.reverse && ! data.autinc_from)
{
- data.from_addr = copy_addr_to_reg (plus_constant (from_addr, len));
+ data.from_addr = copy_addr_to_reg (plus_constant (from_addr, len-GET_MODE_SIZE (mode)));
data.autinc_from = 1;
data.explicit_inc_from = -1;
}
@@ -1574,7 +1575,7 @@ move_by_pieces (to, from, len, align)
data.from_addr = copy_addr_to_reg (from_addr);
if (USE_STORE_PRE_DECREMENT (mode) && data.reverse && ! data.autinc_to)
{
- data.to_addr = copy_addr_to_reg (plus_constant (to_addr, len));
+ data.to_addr = copy_addr_to_reg (plus_constant (to_addr, len-GET_MODE_SIZE (mode)));
data.autinc_to = 1;
data.explicit_inc_to = -1;
}
@@ -1691,11 +1692,13 @@ move_by_pieces_1 (genfun, mode, data)
from1 = adjust_address (data->from, mode, data->offset);
if (HAVE_PRE_DECREMENT && data->explicit_inc_to < 0)
- emit_insn (gen_add2_insn (data->to_addr,
- GEN_INT (-(HOST_WIDE_INT)size)));
+ if (data->explicit_inc_to < -1)
+ emit_insn (gen_add2_insn (data->to_addr,
+ GEN_INT (-(HOST_WIDE_INT)size)));
if (HAVE_PRE_DECREMENT && data->explicit_inc_from < 0)
- emit_insn (gen_add2_insn (data->from_addr,
- GEN_INT (-(HOST_WIDE_INT)size)));
+ if (data->explicit_inc_from < -1)
+ emit_insn (gen_add2_insn (data->from_addr,
+ GEN_INT (-(HOST_WIDE_INT)size)));
if (data->to)
emit_insn ((*genfun) (to1, from1));
@@ -2868,7 +2871,7 @@ store_by_pieces_1 (data, align)
if (USE_STORE_PRE_DECREMENT (mode) && data->reverse && ! data->autinc_to)
{
- data->to_addr = copy_addr_to_reg (plus_constant (to_addr, data->len));
+ data->to_addr = copy_addr_to_reg (plus_constant (to_addr, data->len-GET_MODE_SIZE (mode)));
data->autinc_to = 1;
data->explicit_inc_to = -1;
}
@@ -2939,8 +2942,9 @@ store_by_pieces_2 (genfun, mode, data)
to1 = adjust_address (data->to, mode, data->offset);
if (HAVE_PRE_DECREMENT && data->explicit_inc_to < 0)
- emit_insn (gen_add2_insn (data->to_addr,
- GEN_INT (-(HOST_WIDE_INT) size)));
+ if (data->explicit_inc_to < -1)
+ emit_insn (gen_add2_insn (data->to_addr,
+ GEN_INT (-(HOST_WIDE_INT) size)));
cst = (*data->constfun) (data->constfundata, data->offset, mode);
emit_insn ((*genfun) (to1, cst));
@@ -5950,7 +5954,9 @@ force_operand (value, target)
&& GET_CODE (XEXP (value, 0)) == PLUS
&& GET_CODE (XEXP (XEXP (value, 0), 0)) == REG
&& REGNO (XEXP (XEXP (value, 0), 0)) >= FIRST_VIRTUAL_REGISTER
- && REGNO (XEXP (XEXP (value, 0), 0)) <= LAST_VIRTUAL_REGISTER)
+ && REGNO (XEXP (XEXP (value, 0), 0)) <= LAST_VIRTUAL_REGISTER
+ && (!flag_propolice_protection
+ || XEXP (XEXP (value, 0), 0) != virtual_stack_vars_rtx))
{
rtx temp = expand_simple_binop (GET_MODE (value), code,
XEXP (XEXP (value, 0), 0), op2,
@@ -8126,7 +8132,8 @@ expand_expr (exp, target, tmode, modifie
/* If adding to a sum including a constant,
associate it to put the constant outside. */
if (GET_CODE (op1) == PLUS
- && CONSTANT_P (XEXP (op1, 1)))
+ && CONSTANT_P (XEXP (op1, 1))
+ && !(flag_propolice_protection && (contains_fp (op0) || contains_fp (op1))))
{
rtx constant_term = const0_rtx;