Steve Ellcey <sell...@marvell.com> writes: > +/* Return true for types that could be supported as SIMD return or > + argument types. */ > + > +static bool supported_simd_type (tree t)
Missing line break after "static bool". > +{ > + if (SCALAR_FLOAT_TYPE_P (t) || INTEGRAL_TYPE_P (t) || POINTER_TYPE_P (t)) > + { > + HOST_WIDE_INT s = tree_to_shwi (TYPE_SIZE_UNIT (t)); > + return s == 1 || s == 2 || s == 4 || s == 8; > + } > + return false; > +} > + > +/* Return true for types that currently are supported as SIMD return > + or argument types. */ > + > +static bool currently_supported_simd_type (tree t, tree b) Same here. > +{ > + if (COMPLEX_FLOAT_TYPE_P (t)) > + return false; > + > + if (TYPE_SIZE (t) != TYPE_SIZE (b)) > + return false; > + > + return supported_simd_type (t); > +} > + > +/* Implement TARGET_SIMD_CLONE_COMPUTE_VECSIZE_AND_SIMDLEN. */ > + > +static int > +aarch64_simd_clone_compute_vecsize_and_simdlen (struct cgraph_node *node, > + struct cgraph_simd_clone *clonei, > + tree base_type, int num) > +{ > + tree t, ret_type, arg_type; > + unsigned int elt_bits, vec_bits, count; > + > + if (!TARGET_SIMD) > + return 0; > + > + if (clonei->simdlen > + && (clonei->simdlen < 2 > + || clonei->simdlen > 1024 > + || (clonei->simdlen & (clonei->simdlen - 1)) != 0)) > + { > + warning_at (DECL_SOURCE_LOCATION (node->decl), 0, > + "unsupported simdlen %d", clonei->simdlen); > + return 0; > + } > + > + ret_type = TREE_TYPE (TREE_TYPE (node->decl)); > + if (TREE_CODE (ret_type) != VOID_TYPE > + && !currently_supported_simd_type (ret_type, base_type)) > + { > + if (TYPE_SIZE (ret_type) != TYPE_SIZE (base_type)) > + warning_at (DECL_SOURCE_LOCATION (node->decl), 0, > + "GCC does not currently support mixed size types " > + "for %<simd%> functions"); > + else if (supported_simd_type (ret_type)) > + warning_at (DECL_SOURCE_LOCATION (node->decl), 0, > + "GCC does not currently support return type %qT " > + "for %<simd%> functions", ret_type); > + else > + warning_at (DECL_SOURCE_LOCATION (node->decl), 0, > + "unsupported return type %qT for %<simd%> functions", > + ret_type); > + return 0; > + } > + > + for (t = DECL_ARGUMENTS (node->decl); t; t = DECL_CHAIN (t)) > + { > + arg_type = TREE_TYPE (t); > + > + if (!currently_supported_simd_type (arg_type, base_type)) > + { > + if (TYPE_SIZE (arg_type) != TYPE_SIZE (base_type)) > + warning_at (DECL_SOURCE_LOCATION (node->decl), 0, > + "GCC does not currently support mixed size types " > + "for %<simd%> functions"); > + else > + warning_at (DECL_SOURCE_LOCATION (node->decl), 0, > + "GCC does not currently support argument type %qT " > + "for %<simd%> functions", arg_type); > + return 0; > + } > + } > + > + clonei->vecsize_mangle = 'n'; > + clonei->mask_mode = VOIDmode; > + elt_bits = GET_MODE_BITSIZE (SCALAR_TYPE_MODE (base_type)); > + if (clonei->simdlen == 0) > + { > + count = 2; > + vec_bits = (num == 0 ? 64 : 128); > + clonei->simdlen = vec_bits / elt_bits; > + } > + else > + { > + count = 1; > + vec_bits = clonei->simdlen * elt_bits; > + if (vec_bits != 64 && vec_bits != 128) > + { > + warning_at (DECL_SOURCE_LOCATION (node->decl), 0, > + "GCC does not currently support simdlen %d for type %qT", > + clonei->simdlen, base_type); > + return 0; The return should use tab indentation. OK otherwise, thanks. Richard