re PR target/47558 (163267 breaks exception traceback in xplor-nih)

PR target/47558
	Add __ieee_divdc3 entry point.
	* config/i386/darwin.h (DECLARE_LIBRARY_RENAMES): Retain ___divdc3
	entry point.
	(SUBTARGET_INIT_BUILTINS): Call darwin_rename_builtins.
	* config/i386/i386.c (TARGET_INIT_LIBFUNCS): Likewise.
	* config/darwin.c (darwin_rename_builtins): Add.
	* config/darwin-protos.h (darwin_rename_builtins): Add.

From-SVN: r169902
This commit is contained in:
Mike Stump 2011-02-07 20:41:50 +00:00 committed by Mike Stump
parent ee09a3dd0f
commit 41cf94fbba
5 changed files with 54 additions and 0 deletions

View File

@ -1,3 +1,14 @@
2011-02-07 Mike Stump <mikestump@comcast.net>
PR target/47558
Add __ieee_divdc3 entry point.
* config/i386/darwin.h (DECLARE_LIBRARY_RENAMES): Retain ___divdc3
entry point.
(SUBTARGET_INIT_BUILTINS): Call darwin_rename_builtins.
* config/i386/i386.c (TARGET_INIT_LIBFUNCS): Likewise.
* config/darwin.c (darwin_rename_builtins): Add.
* config/darwin-protos.h (darwin_rename_builtins): Add.
2011-02-07 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/47636

View File

@ -124,3 +124,4 @@ extern bool darwin_use_anchors_for_symbol_p (const_rtx symbol);
extern bool darwin_kextabi_p (void);
extern void darwin_override_options (void);
extern void darwin_patch_builtins (void);
extern void darwin_rename_builtins (void);

View File

@ -2823,6 +2823,34 @@ darwin_fold_builtin (tree fndecl, int n_args, tree *argp,
return NULL_TREE;
}
void
darwin_rename_builtins (void)
{
/* The system ___divdc3 routine in libSystem on darwin10 is not
accurate to 1ulp, ours is, so we avoid ever using the system name
for this routine and instead install a non-conflicting name that
is accurate.
When -ffast-math or -funsafe-math-optimizations is given, we can
use the faster version. */
if (!flag_unsafe_math_optimizations)
{
int dcode = (BUILT_IN_COMPLEX_DIV_MIN
+ DCmode - MIN_MODE_COMPLEX_FLOAT);
tree fn = built_in_decls[dcode];
/* Fortran and c call TARGET_INIT_BUILTINS and
TARGET_INIT_LIBFUNCS at different times, so we have to put a
call into each to ensure that at least one of them is called
after build_common_builtin_nodes. A better fix is to add a
new hook to run after build_common_builtin_nodes runs. */
if (fn)
set_user_assembler_name (fn, "___ieee_divdc3");
fn = implicit_built_in_decls[dcode];
if (fn)
set_user_assembler_name (fn, "___ieee_divdc3");
}
}
static hashval_t
cfstring_hash (const void *ptr)
{

View File

@ -309,5 +309,14 @@ do { \
#define SUBTARGET_INIT_BUILTINS \
do { \
darwin_init_cfstring_builtins ((unsigned) (IX86_BUILTIN_MAX));\
darwin_rename_builtins (); \
} while(0)
/* The system ___divdc3 routine in libSystem on darwin10 is not
accurate to 1ulp, ours is, so we avoid ever using the system name
for this routine and instead install a non-conflicting name that is
accurate. See darwin_rename_builtins. */
#ifdef L_divdc3
#define DECLARE_LIBRARY_RENAMES \
asm(".text; ___divdc3: jmp ___ieee_divdc3 ; .globl ___divdc3");
#endif

View File

@ -35040,6 +35040,11 @@ ix86_autovectorize_vector_sizes (void)
#undef TARGET_CONDITIONAL_REGISTER_USAGE
#define TARGET_CONDITIONAL_REGISTER_USAGE ix86_conditional_register_usage
#if TARGET_MACHO
#undef TARGET_INIT_LIBFUNCS
#define TARGET_INIT_LIBFUNCS darwin_rename_builtins
#endif
struct gcc_target targetm = TARGET_INITIALIZER;
#include "gt-i386.h"