ieee128_float_type_node = ibm128_float_type_node = long_double_type_node;
/* Vector pair and vector quad support. */
- if (TARGET_MMA)
+ if (TARGET_EXTRA_BUILTINS)
{
tree oi_uns_type = make_unsigned_type (256);
vector_pair_type_node = build_distinct_type_copy (oi_uns_type);
pixel_V8HI_type_node = rs6000_vector_type ("__vector __pixel",
pixel_type_node, 8);
- /* Create Altivec and VSX builtins on machines with at least the
+ /* Create Altivec, VSX and MMA builtins on machines with at least the
general purpose extensions (970 and newer) to allow the use of
the target attribute. */
if (TARGET_EXTRA_BUILTINS)
- altivec_init_builtins ();
- if (TARGET_MMA)
- mma_init_builtins ();
+ {
+ altivec_init_builtins ();
+ mma_init_builtins ();
+ }
if (TARGET_HTM)
htm_init_builtins ();
for (unsigned i = 0; i < ARRAY_SIZE (bdesc_mma); i++, d++)
{
tree op[MAX_MMA_OPERANDS], type;
- HOST_WIDE_INT mask = d->mask;
unsigned icode = (unsigned) d->icode;
unsigned attr = rs6000_builtin_info[d->code].attr;
int attr_args = (attr & RS6000_BTC_OPND_MASK);
bool gimple_func = (attr & RS6000_BTC_GIMPLE);
unsigned nopnds = 0;
- if ((mask & rs6000_builtin_mask) != mask)
- {
- if (TARGET_DEBUG_BUILTIN)
- fprintf (stderr, "mma_builtin, skip binary %s\n", d->name);
- continue;
- }
-
if (d->name == 0)
{
if (TARGET_DEBUG_BUILTIN)
rs6000_isa_flags &= ~OPTION_MASK_PCREL;
}
+ /* Enable -mmma by default on power10 systems. */
+ if (TARGET_POWER10 && (rs6000_isa_flags_explicit & OPTION_MASK_MMA) == 0)
+ rs6000_isa_flags |= OPTION_MASK_MMA;
+
/* Turn off vector pair/mma options on non-power10 systems. */
- if (!TARGET_POWER10 && TARGET_MMA)
+ else if (!TARGET_POWER10 && TARGET_MMA)
{
if ((rs6000_isa_flags_explicit & OPTION_MASK_MMA) != 0)
error ("%qs requires %qs", "-mmma", "-mcpu=power10");
--- /dev/null
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-mdejagnu-cpu=power7 -O2" } */
+
+void
+__attribute__((target("cpu=power10")))
+test0 (__vector_quad *dst)
+{
+ __vector_quad acc;
+ __builtin_mma_xxsetaccz (&acc);
+ *dst = acc;
+}
+
+void
+test1 (__vector_quad *dst)
+{
+ __vector_quad acc;
+ __builtin_mma_xxsetaccz (&acc); /* { dg-error "'__builtin_mma_xxsetaccz' requires the '-mmma' option" } */
+ *dst = acc;
+}
+
+#pragma GCC target("cpu=power10")
+void
+test2 (__vector_quad *dst)
+{
+ __vector_quad acc;
+ __builtin_mma_xxsetaccz (&acc);
+ *dst = acc;
+}
+
+void
+test3 (__vector_quad *dst)
+{
+ __vector_quad acc;
+ __builtin_mma_xxsetaccz (&acc);
+ *dst = acc;
+}
+
+#pragma GCC reset_options
+void
+test4 (__vector_quad *dst)
+{
+ __vector_quad acc;
+ __builtin_mma_xxmfacc (&acc); /* { dg-error "'__builtin_mma_xxmfacc' requires the '-mmma' option" } */
+ *dst = acc;
+}
+