Commit a14b88bb by Paul Brook Committed by Paul Brook

arm-protos.h (arm_canonicalize_comparison): Update prototype.

2005-07-30  Paul Brook  <paul@codesourcery.com>

	* config/arm/arm-protos.h (arm_canonicalize_comparison): Update
	prototype.
	* config/arm/arm.c (arm_canonicalize_comparison): Use correct limit
	value for mode.
	* config/arm/arm.h (CANONICALIZE_COMPARISON): Pass mode argument.

From-SVN: r102574
parent 7c47d6e9
2005-07-30 Paul Brook <paul@codesourcery.com>
* config/arm/arm-protos.h (arm_canonicalize_comparison): Update
prototype.
* config/arm/arm.c (arm_canonicalize_comparison): Use correct limit
value for mode.
* config/arm/arm.h (CANONICALIZE_COMPARISON): Pass mode argument.
2005-07-29 Joseph S. Myers <joseph@codesourcery.com> 2005-07-29 Joseph S. Myers <joseph@codesourcery.com>
PR c/529 PR c/529
......
...@@ -52,7 +52,8 @@ extern int arm_hard_regno_mode_ok (unsigned int, enum machine_mode); ...@@ -52,7 +52,8 @@ extern int arm_hard_regno_mode_ok (unsigned int, enum machine_mode);
extern int const_ok_for_arm (HOST_WIDE_INT); extern int const_ok_for_arm (HOST_WIDE_INT);
extern int arm_split_constant (RTX_CODE, enum machine_mode, rtx, extern int arm_split_constant (RTX_CODE, enum machine_mode, rtx,
HOST_WIDE_INT, rtx, rtx, int); HOST_WIDE_INT, rtx, rtx, int);
extern RTX_CODE arm_canonicalize_comparison (RTX_CODE, rtx *); extern RTX_CODE arm_canonicalize_comparison (RTX_CODE, enum machine_mode,
rtx *);
extern int legitimate_pic_operand_p (rtx); extern int legitimate_pic_operand_p (rtx);
extern rtx legitimize_pic_address (rtx, enum machine_mode, rtx); extern rtx legitimize_pic_address (rtx, enum machine_mode, rtx);
extern int arm_legitimate_address_p (enum machine_mode, rtx, RTX_CODE, int); extern int arm_legitimate_address_p (enum machine_mode, rtx, RTX_CODE, int);
......
...@@ -2328,9 +2328,12 @@ arm_gen_constant (enum rtx_code code, enum machine_mode mode, rtx cond, ...@@ -2328,9 +2328,12 @@ arm_gen_constant (enum rtx_code code, enum machine_mode mode, rtx cond,
immediate value easier to load. */ immediate value easier to load. */
enum rtx_code enum rtx_code
arm_canonicalize_comparison (enum rtx_code code, rtx * op1) arm_canonicalize_comparison (enum rtx_code code, enum machine_mode mode,
rtx * op1)
{ {
unsigned HOST_WIDE_INT i = INTVAL (*op1); unsigned HOST_WIDE_INT i = INTVAL (*op1);
unsigned HOST_WIDE_INT maxval;
maxval = (((unsigned HOST_WIDE_INT) 1) << (GET_MODE_BITSIZE(mode) - 1)) - 1;
switch (code) switch (code)
{ {
...@@ -2340,7 +2343,7 @@ arm_canonicalize_comparison (enum rtx_code code, rtx * op1) ...@@ -2340,7 +2343,7 @@ arm_canonicalize_comparison (enum rtx_code code, rtx * op1)
case GT: case GT:
case LE: case LE:
if (i != ((((unsigned HOST_WIDE_INT) 1) << (HOST_BITS_PER_WIDE_INT - 1)) - 1) if (i != maxval
&& (const_ok_for_arm (i + 1) || const_ok_for_arm (-(i + 1)))) && (const_ok_for_arm (i + 1) || const_ok_for_arm (-(i + 1))))
{ {
*op1 = GEN_INT (i + 1); *op1 = GEN_INT (i + 1);
...@@ -2350,7 +2353,7 @@ arm_canonicalize_comparison (enum rtx_code code, rtx * op1) ...@@ -2350,7 +2353,7 @@ arm_canonicalize_comparison (enum rtx_code code, rtx * op1)
case GE: case GE:
case LT: case LT:
if (i != (((unsigned HOST_WIDE_INT) 1) << (HOST_BITS_PER_WIDE_INT - 1)) if (i != ~maxval
&& (const_ok_for_arm (i - 1) || const_ok_for_arm (-(i - 1)))) && (const_ok_for_arm (i - 1) || const_ok_for_arm (-(i - 1))))
{ {
*op1 = GEN_INT (i - 1); *op1 = GEN_INT (i - 1);
......
...@@ -2243,7 +2243,8 @@ extern int making_const_table; ...@@ -2243,7 +2243,8 @@ extern int making_const_table;
|| (const_ok_for_arm (- INTVAL (OP1))))) \ || (const_ok_for_arm (- INTVAL (OP1))))) \
{ \ { \
rtx const_op = OP1; \ rtx const_op = OP1; \
CODE = arm_canonicalize_comparison ((CODE), &const_op); \ CODE = arm_canonicalize_comparison ((CODE), GET_MODE (OP0), \
&const_op); \
OP1 = const_op; \ OP1 = const_op; \
} \ } \
} \ } \
......
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