summaryrefslogtreecommitdiff
path: root/gcc/config/rs6000/rs6000-call.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/rs6000/rs6000-call.c')
-rw-r--r--gcc/config/rs6000/rs6000-call.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/gcc/config/rs6000/rs6000-call.c b/gcc/config/rs6000/rs6000-call.c
index ab6ba576605..952f17c6854 100644
--- a/gcc/config/rs6000/rs6000-call.c
+++ b/gcc/config/rs6000/rs6000-call.c
@@ -5505,6 +5505,17 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI,
RS6000_BTI_INTSI, RS6000_BTI_INTSI },
+ /* FUTURE overloaded builtin functions, */
+ { FUTURE_BUILTIN_VEC_GNB, FUTURE_BUILTIN_VGNB, RS6000_BTI_unsigned_long_long,
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_UINTQI, 0 },
+ { FUTURE_BUILTIN_VEC_GNB, FUTURE_BUILTIN_VGNB, RS6000_BTI_unsigned_long_long,
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_UINTQI, 0 },
+ { FUTURE_BUILTIN_VEC_GNB, FUTURE_BUILTIN_VGNB, RS6000_BTI_unsigned_long_long,
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_UINTQI, 0 },
+ { FUTURE_BUILTIN_VEC_GNB, FUTURE_BUILTIN_VGNB, RS6000_BTI_unsigned_long_long,
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_UINTQI, 0 },
+ { FUTURE_BUILTIN_VEC_GNB, FUTURE_BUILTIN_VGNB, RS6000_BTI_unsigned_long_long,
+ RS6000_BTI_unsigned_V1TI, RS6000_BTI_UINTQI, 0 },
{ RS6000_BUILTIN_NONE, RS6000_BUILTIN_NONE, 0, 0, 0, 0 }
};
@@ -8829,6 +8840,20 @@ rs6000_expand_binop_builtin (enum insn_code icode, tree exp, rtx target)
return CONST0_RTX (tmode);
}
}
+ else if (icode == CODE_FOR_vgnb)
+ {
+ /* Only allow unsigned literals in range 2..7. */
+ /* Note that arg1 is second operand. */
+ STRIP_NOPS (arg1);
+ if (TREE_CODE (arg1) != INTEGER_CST
+ || (TREE_INT_CST_LOW (arg1) & ~7)
+ || !IN_RANGE (TREE_INT_CST_LOW (arg1), 2, 7))
+ {
+ error ("argument 2 must be unsigned literal between "
+ "2 and 7 inclusive");
+ return CONST0_RTX (tmode);
+ }
+ }
else if (icode == CODE_FOR_altivec_vsplth)
{
/* Only allow 3-bit unsigned literals. */
@@ -12928,6 +12953,7 @@ builtin_function_type (machine_mode mode_ret, machine_mode mode_arg0,
case P8V_BUILTIN_ORC_V1TI_UNS:
case FUTURE_BUILTIN_VCLZDM:
case FUTURE_BUILTIN_VCTZDM:
+ case FUTURE_BUILTIN_VGNB:
case FUTURE_BUILTIN_VPDEPD:
case FUTURE_BUILTIN_VPEXTD:
h.uns_p[0] = 1;