tilegx.c (expand_set_cint64_one_inst): Inline tests for constraint J, K, N, P.

* config/tilegx/tilegx.c (expand_set_cint64_one_inst): Inline
       tests for constraint J, K, N, P.

From-SVN: r197074
This commit is contained in:
Walter Lee 2013-03-25 23:59:38 +00:00 committed by Walter Lee
parent 192ea533be
commit 5b2a3c829c
2 changed files with 14 additions and 7 deletions

View file

@ -1,3 +1,8 @@
2013-03-25 Walter Lee <walt@tilera.com>
* config/tilegx/tilegx.c (expand_set_cint64_one_inst): Inline
tests for constraint J, K, N, P.
2013-03-25 Walter Lee <walt@tilera.com>
* config/tilegx/tilegx.c (tilegx_asm_preferred_eh_data_format):

View file

@ -1429,14 +1429,16 @@ expand_set_cint64_one_inst (rtx dest_reg,
}
else if (!three_wide_only)
{
rtx imm_op = GEN_INT (val);
if (satisfies_constraint_J (imm_op)
|| satisfies_constraint_K (imm_op)
|| satisfies_constraint_N (imm_op)
|| satisfies_constraint_P (imm_op))
/* Test for the following constraints: J, K, N, P. We avoid
generating an rtx and using existing predicates because we
can be testing and rejecting a lot of constants, and GEN_INT
is O(N). */
if ((val >= -32768 && val <= 65535)
|| ((val == (val & 0xFF) * 0x0101010101010101LL))
|| (val == ((trunc_int_for_mode (val, QImode) & 0xFFFF)
* 0x0001000100010001LL)))
{
emit_move_insn (dest_reg, imm_op);
emit_move_insn (dest_reg, GEN_INT (val));
return true;
}
}