Commit bc2c1a60 by Andrew Stubbs Committed by Andrew Stubbs

arm.c (arm_gen_constant): Move movw support ....

2011-04-20  Andrew Stubbs  <ams@codesourcery.com>

	gcc/
	* config/arm/arm.c (arm_gen_constant): Move movw support ....
	(const_ok_for_op): ... to here.

From-SVN: r172777
parent 583722ee
2011-04-20 Andrew Stubbs <ams@codesourcery.com>
* config/arm/arm.c (arm_gen_constant): Move movw support ....
(const_ok_for_op): ... to here.
2011-04-20 Kai Tietz <ktietz@redhat.com> 2011-04-20 Kai Tietz <ktietz@redhat.com>
* fold-const.c (fold_binary_loc): Add handling for * fold-const.c (fold_binary_loc): Add handling for
......
...@@ -2307,6 +2307,13 @@ const_ok_for_op (HOST_WIDE_INT i, enum rtx_code code) ...@@ -2307,6 +2307,13 @@ const_ok_for_op (HOST_WIDE_INT i, enum rtx_code code)
switch (code) switch (code)
{ {
case SET:
/* See if we can use movw. */
if (arm_arch_thumb2 && (i & 0xffff0000) == 0)
return 1;
else
return 0;
case PLUS: case PLUS:
case COMPARE: case COMPARE:
case EQ: case EQ:
...@@ -2663,9 +2670,7 @@ arm_gen_constant (enum rtx_code code, enum machine_mode mode, rtx cond, ...@@ -2663,9 +2670,7 @@ arm_gen_constant (enum rtx_code code, enum machine_mode mode, rtx cond,
} }
/* If we can do it in one insn get out quickly. */ /* If we can do it in one insn get out quickly. */
if (const_ok_for_arm (val) if (const_ok_for_op (val, code))
|| (can_negate_initial && const_ok_for_arm (-val))
|| (can_invert && const_ok_for_arm (~val)))
{ {
if (generate) if (generate)
emit_constant_insn (cond, emit_constant_insn (cond,
...@@ -2718,15 +2723,6 @@ arm_gen_constant (enum rtx_code code, enum machine_mode mode, rtx cond, ...@@ -2718,15 +2723,6 @@ arm_gen_constant (enum rtx_code code, enum machine_mode mode, rtx cond,
switch (code) switch (code)
{ {
case SET: case SET:
/* See if we can use movw. */
if (arm_arch_thumb2 && (remainder & 0xffff0000) == 0)
{
if (generate)
emit_constant_insn (cond, gen_rtx_SET (VOIDmode, target,
GEN_INT (val)));
return 1;
}
/* See if we can do this by sign_extending a constant that is known /* See if we can do this by sign_extending a constant that is known
to be negative. This is a good, way of doing it, since the shift to be negative. This is a good, way of doing it, since the shift
may well merge into a subsequent insn. */ may well merge into a subsequent insn. */
......
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