@cindex @code{cond_neg@var{mode}} instruction pattern
@cindex @code{cond_one_cmpl@var{mode}} instruction pattern
+@cindex @code{cond_sqrt@var{mode}} instruction pattern
+@cindex @code{cond_ceil@var{mode}} instruction pattern
+@cindex @code{cond_floor@var{mode}} instruction pattern
+@cindex @code{cond_round@var{mode}} instruction pattern
+@cindex @code{cond_rint@var{mode}} instruction pattern
@item @samp{cond_neg@var{mode}}
@itemx @samp{cond_one_cmpl@var{mode}}
+@itemx @samp{cond_sqrt@var{mode}}
+@itemx @samp{cond_ceil@var{mode}}
+@itemx @samp{cond_floor@var{mode}}
+@itemx @samp{cond_round@var{mode}}
+@itemx @samp{cond_rint@var{mode}}
When operand 1 is true, perform an operation on operands 2 and
store the result in operand 0, otherwise store operand 3 in operand 0.
The operation works elementwise if the operands are vectors.
@cindex @code{cond_len_neg@var{mode}} instruction pattern
@cindex @code{cond_len_one_cmpl@var{mode}} instruction pattern
+@cindex @code{cond_len_sqrt@var{mode}} instruction pattern
+@cindex @code{cond_len_ceil@var{mode}} instruction pattern
+@cindex @code{cond_len_floor@var{mode}} instruction pattern
+@cindex @code{cond_len_round@var{mode}} instruction pattern
+@cindex @code{cond_len_rint@var{mode}} instruction pattern
@item @samp{cond_len_neg@var{mode}}
@itemx @samp{cond_len_one_cmpl@var{mode}}
+@itemx @samp{cond_len_sqrt@var{mode}}
+@itemx @samp{cond_len_ceil@var{mode}}
+@itemx @samp{cond_len_floor@var{mode}}
+@itemx @samp{cond_len_round@var{mode}}
+@itemx @samp{cond_len_rint@var{mode}}
When operand 1 is true and element index < operand 4 + operand 5, perform an operation on operands 1 and
store the result in operand 0, otherwise store operand 2 in operand 0.
The operation only works for the operands are vectors.
T (FMA) \
T (FMS) \
T (FNMA) \
- T (FNMS)
+ T (FNMS) \
+ T (SQRT) \
+ T (ROUND) \
+ T (FLOOR) \
+ T (RINT) \
+ T (CEIL)
/* Return a function that only performs internal function FN when a
certain condition is met and that uses a given fallback value otherwise.
{
case IFN_COND_NEG:
case IFN_COND_NOT:
+ case IFN_COND_SQRT:
+ case IFN_COND_CEIL:
+ case IFN_COND_FLOOR:
+ case IFN_COND_ROUND:
+ case IFN_COND_RINT:
case IFN_COND_LEN_NEG:
case IFN_COND_LEN_NOT:
+ case IFN_COND_LEN_SQRT:
+ case IFN_COND_LEN_CEIL:
+ case IFN_COND_LEN_FLOOR:
+ case IFN_COND_LEN_ROUND:
+ case IFN_COND_LEN_RINT:
return 2;
case IFN_LEN_LOAD:
DEF_INTERNAL_SIGNED_OPTAB_FN (SAT_TRUNC, ECF_CONST, first, sstrunc, ustrunc, unary_convert)
+DEF_INTERNAL_COND_FN (SQRT, ECF_CONST, sqrt, unary)
+DEF_INTERNAL_COND_FN (CEIL, ECF_CONST, ceil, unary)
+DEF_INTERNAL_COND_FN (FLOOR, ECF_CONST, floor, unary)
+DEF_INTERNAL_COND_FN (ROUND, ECF_CONST, round, unary)
+DEF_INTERNAL_COND_FN (RINT, ECF_CONST, rint, unary)
DEF_INTERNAL_COND_FN (ADD, ECF_CONST, add, binary)
DEF_INTERNAL_COND_FN (SUB, ECF_CONST, sub, binary)
DEF_INTERNAL_COND_FN (MUL, ECF_CONST, smul, binary)
OPTAB_D (negcc_optab, "neg$acc")
OPTAB_D (notcc_optab, "not$acc")
OPTAB_D (movcc_optab, "mov$acc")
+OPTAB_D (cond_sqrt_optab, "cond_sqrt$F$a")
OPTAB_D (cond_add_optab, "cond_add$a")
OPTAB_D (cond_sub_optab, "cond_sub$a")
OPTAB_D (cond_smul_optab, "cond_mul$a")
OPTAB_D (cond_vec_cbranch_any_optab, "cond_vec_cbranch_any$a")
OPTAB_D (cond_vec_cbranch_all_optab, "cond_vec_cbranch_all$a")
OPTAB_D (cond_one_cmpl_optab, "cond_one_cmpl$a")
+OPTAB_D (cond_len_sqrt_optab, "cond_len_sqrt$F$a")
OPTAB_D (cond_len_add_optab, "cond_len_add$a")
OPTAB_D (cond_len_sub_optab, "cond_len_sub$a")
OPTAB_D (cond_len_smul_optab, "cond_len_mul$a")
OPTAB_D (ceil_optab, "ceil$a2")
OPTAB_D (btrunc_optab, "btrunc$a2")
OPTAB_D (nearbyint_optab, "nearbyint$a2")
+OPTAB_D (cond_rint_optab, "cond_rint$a")
+OPTAB_D (cond_round_optab, "cond_round$a")
+OPTAB_D (cond_floor_optab, "cond_floor$a")
+OPTAB_D (cond_ceil_optab, "cond_ceil$a")
+OPTAB_D (cond_len_rint_optab, "cond_len_rint$a")
+OPTAB_D (cond_len_round_optab, "cond_len_round$a")
+OPTAB_D (cond_len_floor_optab, "cond_len_floor$a")
+OPTAB_D (cond_len_ceil_optab, "cond_len_ceil$F$a")
OPTAB_D (acos_optab, "acos$a2")
OPTAB_D (acosh_optab, "acosh$a2")