Commit 9c8cc54f by Richard Earnshaw Committed by Richard Earnshaw

arm.c (bad_signed_byte_operand): Check both arms of a sum in a memory address.

* arm.c (bad_signed_byte_operand): Check both arms of a sum in
a memory address.
* arm.md (splits for *extendqihi_insn and *extendqisi_insn): Handle
memory addresses that are not in standard canonical form.

From-SVN: r22478
parent 332072db
...@@ -5,6 +5,11 @@ Sat Sep 19 07:33:36 1998 Richard Earnshaw (rearnsha@arm.com) ...@@ -5,6 +5,11 @@ Sat Sep 19 07:33:36 1998 Richard Earnshaw (rearnsha@arm.com)
(arm_reorg): Handle cases where we need the address of an item in (arm_reorg): Handle cases where we need the address of an item in
the pool. the pool.
* arm.c (bad_signed_byte_operand): Check both arms of a sum in
a memory address.
* arm.md (splits for *extendqihi_insn and *extendqisi_insn): Handle
memory addresses that are not in standard canonical form.
Sat Sep 19 01:00:32 1998 Michael Hayes (mph@elec.canterbury.ac.nz) Sat Sep 19 01:00:32 1998 Michael Hayes (mph@elec.canterbury.ac.nz)
* README.C4X: New file with information about the c4x ports. * README.C4X: New file with information about the c4x ports.
......
...@@ -1769,7 +1769,9 @@ bad_signed_byte_operand (op, mode) ...@@ -1769,7 +1769,9 @@ bad_signed_byte_operand (op, mode)
/* A sum of anything more complex than reg + reg or reg + const is bad */ /* A sum of anything more complex than reg + reg or reg + const is bad */
if ((GET_CODE (op) == PLUS || GET_CODE (op) == MINUS) if ((GET_CODE (op) == PLUS || GET_CODE (op) == MINUS)
&& ! s_register_operand (XEXP (op, 0), VOIDmode)) && (! s_register_operand (XEXP (op, 0), VOIDmode)
|| (! s_register_operand (XEXP (op, 1), VOIDmode)
&& GET_CODE (XEXP (op, 1)) != CONST_INT)))
return 1; return 1;
/* Big constants are also bad */ /* Big constants are also bad */
......
...@@ -2399,6 +2399,12 @@ ...@@ -2399,6 +2399,12 @@
XEXP (operands[2], 0) = plus_constant (operands[3], low); XEXP (operands[2], 0) = plus_constant (operands[3], low);
operands[1] = plus_constant (XEXP (operands[1], 0), offset - low); operands[1] = plus_constant (XEXP (operands[1], 0), offset - low);
} }
/* Ensure the sum is in correct canonical form */
else if (GET_CODE (operands[1]) == PLUS
&& GET_CODE (XEXP (operands[1], 1)) != CONST_INT
&& ! s_register_operand (XEXP (operands[1], 1), VOIDmode))
operands[1] = gen_rtx (PLUS, GET_MODE (operands[1]),
XEXP (operands[1], 1), XEXP (operands[1], 0));
} }
") ")
...@@ -2464,6 +2470,12 @@ ...@@ -2464,6 +2470,12 @@
XEXP (operands[2], 0) = plus_constant (operands[0], low); XEXP (operands[2], 0) = plus_constant (operands[0], low);
operands[1] = plus_constant (XEXP (operands[1], 0), offset - low); operands[1] = plus_constant (XEXP (operands[1], 0), offset - low);
} }
/* Ensure the sum is in correct canonical form */
else if (GET_CODE (operands[1]) == PLUS
&& GET_CODE (XEXP (operands[1], 1)) != CONST_INT
&& ! s_register_operand (XEXP (operands[1], 1), VOIDmode))
operands[1] = gen_rtx (PLUS, GET_MODE (operands[1]),
XEXP (operands[1], 1), XEXP (operands[1], 0));
} }
") ")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment