diff options
author | fxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-02-23 18:42:04 +0000 |
---|---|---|
committer | fxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-02-23 18:42:04 +0000 |
commit | 6aee6ac84bd42d1bdcc717474e4da612bc40672a (patch) | |
tree | cd6f69f8cb255a89ac25d6d47a969d01dbc4675e /gcc/config | |
parent | 3d72a1b5ff364096199c1f9ebce2bb4fde8dfab7 (diff) | |
download | gcc-6aee6ac84bd42d1bdcc717474e4da612bc40672a.tar.gz |
PR target/25477
* config/darwin-protos.h: Add darwin_patch_builtins prototype.
* config/darwin-ppc-ldouble-patch.def: New file.
* config/rs6000/darwin.h (SUBTARGET_INIT_BUILTINS): New macro.
* config/rs6000/rs6000.c (rs6000_init_builtins): Call
SUBTARGET_INIT_BUILTINS if defined.
* config/darwin.c (darwin_patch_builtin,
darwin_patch_builtins): New functions.
* trans-expr.c (gfc_conv_power_op): Use BUILT_IN_CPOW{F,,L}.
* f95-lang.c (gfc_init_builtin_functions): Define BUILT_IN_CPOW{F,,L}.
* trans.h (gfor_fndecl_math_cpow, gfor_fndecl_math_cpowf,
gfor_fndecl_math_cpowl10, gfor_fndecl_math_cpowl16): Remove.
* trans-decl.c: Likewise.
* gfortran.dg/large_real_kind_2.F90: Split testing of ERF and
ERFC into gfortran.dg/large_real_kind_3.F90.
* gfortran.dg/large_real_kind_3.F90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@132576 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/darwin-ppc-ldouble-patch.def | 95 | ||||
-rw-r--r-- | gcc/config/darwin-protos.h | 1 | ||||
-rw-r--r-- | gcc/config/darwin.c | 48 | ||||
-rw-r--r-- | gcc/config/rs6000/darwin.h | 3 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 4 |
5 files changed, 151 insertions, 0 deletions
diff --git a/gcc/config/darwin-ppc-ldouble-patch.def b/gcc/config/darwin-ppc-ldouble-patch.def new file mode 100644 index 00000000000..0d09221e6a3 --- /dev/null +++ b/gcc/config/darwin-ppc-ldouble-patch.def @@ -0,0 +1,95 @@ +PATCH_BUILTIN (BUILT_IN_ACOSHL) +PATCH_BUILTIN (BUILT_IN_ACOSL) +PATCH_BUILTIN (BUILT_IN_ASINHL) +PATCH_BUILTIN (BUILT_IN_ASINL) +PATCH_BUILTIN (BUILT_IN_ATAN2L) +PATCH_BUILTIN (BUILT_IN_ATANHL) +PATCH_BUILTIN (BUILT_IN_ATANL) +PATCH_BUILTIN (BUILT_IN_CABSL) +PATCH_BUILTIN (BUILT_IN_CACOSHL) +PATCH_BUILTIN (BUILT_IN_CACOSL) +PATCH_BUILTIN (BUILT_IN_CARGL) +PATCH_BUILTIN (BUILT_IN_CASINHL) +PATCH_BUILTIN (BUILT_IN_CASINL) +PATCH_BUILTIN (BUILT_IN_CATANHL) +PATCH_BUILTIN (BUILT_IN_CATANL) +PATCH_BUILTIN (BUILT_IN_CBRTL) +PATCH_BUILTIN (BUILT_IN_CCOSHL) +PATCH_BUILTIN (BUILT_IN_CCOSL) +PATCH_BUILTIN (BUILT_IN_CEILL) +PATCH_BUILTIN (BUILT_IN_CEXPL) +PATCH_BUILTIN (BUILT_IN_CIMAGL) +PATCH_BUILTIN (BUILT_IN_CLOGL) +PATCH_BUILTIN (BUILT_IN_CONJL) +PATCH_BUILTIN (BUILT_IN_COPYSIGNL) +PATCH_BUILTIN (BUILT_IN_COSHL) +PATCH_BUILTIN (BUILT_IN_COSL) +PATCH_BUILTIN (BUILT_IN_CPOWL) +PATCH_BUILTIN (BUILT_IN_CPROJL) +PATCH_BUILTIN (BUILT_IN_CREALL) +PATCH_BUILTIN (BUILT_IN_CSINHL) +PATCH_BUILTIN (BUILT_IN_CSINL) +PATCH_BUILTIN (BUILT_IN_CSQRTL) +PATCH_BUILTIN (BUILT_IN_CTANHL) +PATCH_BUILTIN (BUILT_IN_CTANL) +PATCH_BUILTIN (BUILT_IN_ERFCL) +PATCH_BUILTIN (BUILT_IN_ERFL) +PATCH_BUILTIN (BUILT_IN_EXP2L) +PATCH_BUILTIN (BUILT_IN_EXPL) +PATCH_BUILTIN (BUILT_IN_EXPM1L) +PATCH_BUILTIN (BUILT_IN_FABSL) +PATCH_BUILTIN (BUILT_IN_FDIML) +PATCH_BUILTIN (BUILT_IN_FLOORL) +PATCH_BUILTIN (BUILT_IN_FMAL) +PATCH_BUILTIN (BUILT_IN_FMAXL) +PATCH_BUILTIN (BUILT_IN_FMINL) +PATCH_BUILTIN (BUILT_IN_FMODL) +PATCH_BUILTIN (BUILT_IN_FREXPL) +PATCH_BUILTIN (BUILT_IN_HYPOTL) +PATCH_BUILTIN (BUILT_IN_ILOGBL) +PATCH_BUILTIN (BUILT_IN_LDEXPL) +PATCH_BUILTIN (BUILT_IN_LGAMMAL) +PATCH_BUILTIN (BUILT_IN_LLRINTL) +PATCH_BUILTIN (BUILT_IN_LLROUNDL) +PATCH_BUILTIN (BUILT_IN_LOG10L) +PATCH_BUILTIN (BUILT_IN_LOG1PL) +PATCH_BUILTIN (BUILT_IN_LOG2L) +PATCH_BUILTIN (BUILT_IN_LOGBL) +PATCH_BUILTIN (BUILT_IN_LOGL) +PATCH_BUILTIN (BUILT_IN_LRINTL) +PATCH_BUILTIN (BUILT_IN_LROUNDL) +PATCH_BUILTIN (BUILT_IN_MODFL) +PATCH_BUILTIN (BUILT_IN_NEARBYINTL) +PATCH_BUILTIN (BUILT_IN_NEXTAFTERL) +PATCH_BUILTIN (BUILT_IN_NEXTTOWARD) +PATCH_BUILTIN (BUILT_IN_NEXTTOWARDF) +PATCH_BUILTIN (BUILT_IN_NEXTTOWARDL) +PATCH_BUILTIN (BUILT_IN_POWL) +PATCH_BUILTIN (BUILT_IN_REMAINDERL) +PATCH_BUILTIN (BUILT_IN_REMQUOL) +PATCH_BUILTIN (BUILT_IN_RINTL) +PATCH_BUILTIN (BUILT_IN_ROUNDL) +PATCH_BUILTIN (BUILT_IN_SCALBLNL) +PATCH_BUILTIN (BUILT_IN_SCALBNL) +PATCH_BUILTIN (BUILT_IN_SINHL) +PATCH_BUILTIN (BUILT_IN_SINL) +PATCH_BUILTIN (BUILT_IN_SQRTL) +PATCH_BUILTIN (BUILT_IN_TANHL) +PATCH_BUILTIN (BUILT_IN_TANL) +PATCH_BUILTIN (BUILT_IN_TGAMMAL) +PATCH_BUILTIN (BUILT_IN_TRUNCL) +PATCH_BUILTIN_NO64 (BUILT_IN_VFPRINTF) +PATCH_BUILTIN_NO64 (BUILT_IN_VFSCANF) +PATCH_BUILTIN_NO64 (BUILT_IN_VPRINTF) +PATCH_BUILTIN_NO64 (BUILT_IN_VSCANF) +PATCH_BUILTIN_NO64 (BUILT_IN_VSNPRINTF) +PATCH_BUILTIN_NO64 (BUILT_IN_VSPRINTF) +PATCH_BUILTIN_NO64 (BUILT_IN_VSSCANF) + +PATCH_BUILTIN_VARIADIC (BUILT_IN_FPRINTF) +PATCH_BUILTIN_VARIADIC (BUILT_IN_FSCANF) +PATCH_BUILTIN_VARIADIC (BUILT_IN_PRINTF) +PATCH_BUILTIN_VARIADIC (BUILT_IN_SCANF) +PATCH_BUILTIN_VARIADIC (BUILT_IN_SNPRINTF) +PATCH_BUILTIN_VARIADIC (BUILT_IN_SPRINTF) +PATCH_BUILTIN_VARIADIC (BUILT_IN_SSCANF) diff --git a/gcc/config/darwin-protos.h b/gcc/config/darwin-protos.h index a8ce17c0111..c894bf05104 100644 --- a/gcc/config/darwin-protos.h +++ b/gcc/config/darwin-protos.h @@ -89,3 +89,4 @@ extern void darwin_cpp_builtins (struct cpp_reader *); extern void darwin_asm_output_anchor (rtx symbol); extern bool darwin_kextabi_p (void); extern void darwin_override_options (void); +extern void darwin_patch_builtins (void); diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c index 307698d095f..13aa021f4c6 100644 --- a/gcc/config/darwin.c +++ b/gcc/config/darwin.c @@ -1735,4 +1735,52 @@ darwin_override_options (void) flag_var_tracking_uninit = 1; } +/* Add $LDBL128 suffix to long double builtins. */ + +static void +darwin_patch_builtin (int fncode) +{ + tree fn = built_in_decls[fncode]; + tree sym; + char *newname; + + if (!fn) + return; + + sym = DECL_ASSEMBLER_NAME (fn); + newname = alloca (IDENTIFIER_LENGTH (sym) + 10); + strcpy (newname, "_"); + strcat (newname, IDENTIFIER_POINTER (sym)); + strcat (newname, "$LDBL128"); + set_user_assembler_name (fn, newname); + /*sym = get_identifier (newname); + SET_DECL_ASSEMBLER_NAME (fn, sym);*/ + + fn = implicit_built_in_decls[fncode]; + if (fn) + set_user_assembler_name (fn, newname); + /*SET_DECL_ASSEMBLER_NAME (fn, sym);*/ +} + +void +darwin_patch_builtins (void) +{ + if (LONG_DOUBLE_TYPE_SIZE != 128) + return; + +#define PATCH_BUILTIN(fncode) darwin_patch_builtin (fncode); +#define PATCH_BUILTIN_NO64(fncode) \ + if (!TARGET_64BIT) \ + darwin_patch_builtin (fncode); +#define PATCH_BUILTIN_VARIADIC(fncode) \ + if (!TARGET_64BIT \ + && (strverscmp (darwin_macosx_version_min, "10.3.9") >= 0)) \ + darwin_patch_builtin (fncode); +#include "darwin-ppc-ldouble-patch.def" +#undef PATCH_BUILTIN +#undef PATCH_BUILTIN_NO64 +#undef PATCH_BUILTIN_VARIADIC +} + + #include "gt-darwin.h" diff --git a/gcc/config/rs6000/darwin.h b/gcc/config/rs6000/darwin.h index 6c88757d24e..f6c9ee3c2e2 100644 --- a/gcc/config/rs6000/darwin.h +++ b/gcc/config/rs6000/darwin.h @@ -432,3 +432,6 @@ /* When generating kernel code or kexts, we don't use Altivec by default, as kernel code doesn't save/restore those registers. */ #define OS_MISSING_ALTIVEC (flag_mkernel || flag_apple_kext) + +/* Darwin has to rename some of the long double builtins. */ +#define SUBTARGET_INIT_BUILTINS darwin_patch_builtins () diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index fb6aa19659a..00a7bc59063 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -9187,6 +9187,10 @@ rs6000_init_builtins (void) if (built_in_decls [BUILT_IN_CLOG]) set_user_assembler_name (built_in_decls [BUILT_IN_CLOG], "__clog"); #endif + +#ifdef SUBTARGET_INIT_BUILTINS + SUBTARGET_INIT_BUILTINS; +#endif } /* Search through a set of builtins and enable the mask bits. |