+2005-07-21 Paolo Bonzini <bonzini@gnu.org>
+
+ PR target/22085
+ * config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Do not
+ initialize targetm.resolve_overloaded_builtin here.
+ (altivec_expand_overloaded_builtin): Make it non-static.
+ * config/rs6000/rs6000-protos.h
+ (altivec_expand_overloaded_builtin): New prototype.
+ * config/rs6000/rs6000.h (REGISTER_TARGET_PRAGMAS): Initialize
+ targetm.resolve_overloaded_builtin here.
+ * config/rs6000/darwin.h (REGISTER_TARGET_PRAGMAS): Likewise.
+
2005-07-21 Paolo Bonzini <bonzini@gnu.org>
Zdenek Dvorak <dvorakz@suse.cz>
#define BOOL_TYPE_SIZE (darwin_one_byte_bool ? CHAR_TYPE_SIZE : INT_TYPE_SIZE)
#undef REGISTER_TARGET_PRAGMAS
-#define REGISTER_TARGET_PRAGMAS DARWIN_REGISTER_TARGET_PRAGMAS
+#define REGISTER_TARGET_PRAGMAS() \
+ do \
+ { \
+ DARWIN_REGISTER_TARGET_PRAGMAS(); \
+ targetm.resolve_overloaded_builtin = altivec_resolve_overloaded_builtin; \
+ } \
+ while (0)
/* Just like config/darwin.h's REAL_LIBGCC_SPEC, but use -lgcc_s_ppc64 for
-m64. */
-static tree altivec_resolve_overloaded_builtin (tree, tree);
-
/* Handle the machine specific pragma longcall. Its syntax is
# pragma longcall ( TOGGLE )
/* Let the compiled code know if 'f' class registers will not be available. */
if (TARGET_SOFT_FLOAT || !TARGET_FPRS)
builtin_define ("__NO_FPRS__");
-
- targetm.resolve_overloaded_builtin = altivec_resolve_overloaded_builtin;
}
\f
/* Implementation of the resolve_overloaded_builtin target hook, to
support Altivec's overloaded builtins. */
-static tree
+tree
altivec_resolve_overloaded_builtin (tree fndecl, tree arglist)
{
unsigned int fcode = DECL_FUNCTION_CODE (fndecl);
tree, int, int);
extern int function_arg_boundary (enum machine_mode, tree);
extern rtx function_arg (CUMULATIVE_ARGS *, enum machine_mode, tree, int);
+extern tree altivec_resolve_overloaded_builtin (tree, tree);
extern rtx rs6000_function_value (tree, tree);
extern rtx rs6000_libcall_value (enum machine_mode);
extern rtx rs6000_va_arg (tree, tree);
/* Target pragma. */
#define REGISTER_TARGET_PRAGMAS() do { \
c_register_pragma (0, "longcall", rs6000_pragma_longcall); \
+ targetm.resolve_overloaded_builtin = altivec_resolve_overloaded_builtin; \
} while (0)
/* Target #defines. */
2005-07-21 Paolo Bonzini <bonzini@gnu.org>
+ PR target/22085
+ * gcc.dg/altivec-pr22085.c: New.
+
+2005-07-21 Paolo Bonzini <bonzini@gnu.org>
+
+ PR tree-optimization/19210
* gcc.dg/tree-ssa/pr19210-1.c: New.
* gcc.dg/tree-ssa/pr19210-2.c: New.
--- /dev/null
+/* { dg-do compile { target powerpc*-*-* } } */
+/* { dg-options "-maltivec -fpreprocessed" } */
+
+/* Program to test AltiVec with -fpreprocessed. */
+int foo(__attribute__((altivec(vector__))) float x,
+ __attribute__((altivec(vector__))) float y)
+{
+ if (__builtin_vec_vcmpeq_p (2, (x), (y)))
+ return 3245;
+ else
+ return 12;
+}