From: Richard Henderson Date: Wed, 29 Jun 2005 22:22:13 +0000 (-0700) Subject: ia64.c (ia64_expand_vecint_minmax): Use us_minus and plus for V4HImode UMAX. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=93b4080b3d02d47d9bd5e971b296430c5db567b1;p=gcc.git ia64.c (ia64_expand_vecint_minmax): Use us_minus and plus for V4HImode UMAX. * config/ia64/ia64.c (ia64_expand_vecint_minmax): Use us_minus and plus for V4HImode UMAX. From-SVN: r101441 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 91e2631840e..ea8a5ae9d2f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2005-06-29 Richard Henderson + + * config/ia64/ia64.c (ia64_expand_vecint_minmax): Use us_minus and + plus for V4HImode UMAX. + 2005-06-29 Joseph S. Myers * c-tree.h (default_function_array_conversion): Take and return diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index 85d0bd22cd8..f8f34635827 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -1689,6 +1689,18 @@ ia64_expand_vecint_minmax (enum rtx_code code, enum machine_mode mode, if (mode == V4HImode && (code == SMIN || code == SMAX)) return false; + /* This combination can be implemented with only saturating subtraction. */ + if (mode == V4HImode && code == UMAX) + { + rtx x, tmp = gen_reg_rtx (mode); + + x = gen_rtx_US_MINUS (mode, operands[1], operands[2]); + emit_insn (gen_rtx_SET (VOIDmode, tmp, x)); + + emit_insn (gen_addv4hi3 (operands[0], tmp, operands[2])); + return true; + } + /* Everything else implemented via vector comparisons. */ xops[0] = operands[0]; xops[4] = xops[1] = operands[1];