Patch to add declarations for many (most?) math builtins
Kaveh R. Ghazi
ghazi@caip.rutgers.edu
Wed Jul 30 16:46:00 GMT 2003
The ISO C math functions might as well all be declared so that the
appropriate attributes are set on these functions. (Actually IMHO
*all* ISO C functions should be predeclared like what g++ does with
cp/cfns.gperf. But I'll start with these math ones.)
I'd like special attention paid to my choices of DEF_LIB_BUILTIN vs
DEF_C99_C90RES_BUILTIN vs DEF_C99_BUILTIN. Some of these were guesses
on my part. And I probably missed some math functions, feel free to
suggest more and I'll include them in a follow-up patch.
Also, while writing the new testcase I may have uncovered a bug in the
declaration of ffsl. Currently we only get __builtin_ffsl, not ffsl.
The other two (ffs, ffsll) declare the plain function and the
__builtin_ one. I don't know if this omission is because ffsl
conflicted with someone's system header, or if it was a simple error.
I changed it to declare ffsl like the other two builtins do.
Bootstrapped on sparc-sun-solaris2.7 (minus java) no regressions and
all testcase additions pass, including the one testing for the `const'
attribute on the functions.
Ok for mainline?
Thanks,
--Kaveh
2003-07-30 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* builtin-types.def (BT_FN_LONG_DOUBLE_LONG_DOUBLE_INT,
BT_FN_DOUBLE_DOUBLE_INT, BT_FN_FLOAT_FLOAT_INT): New.
* builtins.def (BUILT_IN_FFSL): Fix declaration to be
DEF_EXT_LIB_BUILTIN.
(BUILT_IN_CBRT, BUILT_IN_HYPOT, BUILT_IN_LDEXP, BUILT_IN_SINH,
BUILT_IN_COSH, BUILT_IN_ASINH, BUILT_IN_ACOSH, BUILT_IN_ASIN,
BUILT_IN_ACOS, BUILT_IN_LOG10, BUILT_IN_TANH, BUILT_IN_ATANH,
BUILT_IN_CBRTF, BUILT_IN_HYPOTF, BUILT_IN_LDEXPF, BUILT_IN_SINHF,
BUILT_IN_COSHF, BUILT_IN_ASINHF, BUILT_IN_ACOSHF, BUILT_IN_ASINF,
BUILT_IN_ACOSF, BUILT_IN_LOG10F, BUILT_IN_TANHF, BUILT_IN_ATANHF,
BUILT_IN_CBRTL, BUILT_IN_HYPOTL, BUILT_IN_LDEXPL, BUILT_IN_SINHL,
BUILT_IN_COSHL, BUILT_IN_ASINHL, BUILT_IN_ACOSHL, BUILT_IN_ASINL,
BUILT_IN_ACOSL, BUILT_IN_LOG10L, BUILT_IN_TANHL, BUILT_IN_ATANHL):
New builtins.
testsuite:
* gcc.dg/builtins-1.c: Update with new builtins.
* gcc.dg/builtins-4.c: Likewise.
* gcc.dg/builtins-27.c: New testcase for `const' attribute on
builtins.
diff -rup orig/egcc-CVS20030729/gcc/builtin-types.def egcc-CVS20030729/gcc/builtin-types.def
--- orig/egcc-CVS20030729/gcc/builtin-types.def 2003-04-28 10:00:19.000000000 -0400
+++ egcc-CVS20030729/gcc/builtin-types.def 2003-07-30 06:38:36.606827000 -0400
@@ -157,6 +157,12 @@ DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE
BT_DOUBLE, BT_DOUBLE, BT_DOUBLE)
DEF_FUNCTION_TYPE_2 (BT_FN_LONG_DOUBLE_LONG_DOUBLE_LONG_DOUBLE,
BT_LONG_DOUBLE, BT_LONG_DOUBLE, BT_LONG_DOUBLE)
+DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_FLOAT_INT,
+ BT_FLOAT, BT_FLOAT, BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE_INT,
+ BT_DOUBLE, BT_DOUBLE, BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_LONG_DOUBLE_LONG_DOUBLE_INT,
+ BT_LONG_DOUBLE, BT_LONG_DOUBLE, BT_INT)
DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_VALIST_ARG,
BT_INT, BT_CONST_STRING, BT_VALIST_ARG)
DEF_FUNCTION_TYPE_2 (BT_FN_PTR_SIZE_SIZE,
diff -rup orig/egcc-CVS20030729/gcc/builtins.def egcc-CVS20030729/gcc/builtins.def
--- orig/egcc-CVS20030729/gcc/builtins.def 2003-07-26 20:00:59.000000000 -0400
+++ egcc-CVS20030729/gcc/builtins.def 2003-07-30 08:26:04.544675000 -0400
@@ -291,7 +291,7 @@ DEF_GCC_BUILTIN(BUILT_IN_PARITY,
BT_FN_INT_INT,
ATTR_CONST_NOTHROW_LIST)
-DEF_GCC_BUILTIN(BUILT_IN_FFSL,
+DEF_EXT_LIB_BUILTIN(BUILT_IN_FFSL,
"__builtin_ffsl",
BT_FN_INT_LONG,
ATTR_CONST_NOTHROW_LIST)
@@ -427,6 +427,53 @@ DEF_LIB_BUILTIN(BUILT_IN_SQRT,
: (flag_unsafe_math_optimizations
? ATTR_CONST_NOTHROW_LIST
: ATTR_PURE_NOTHROW_LIST))
+DEF_C99_BUILTIN(BUILT_IN_CBRT,
+ "__builtin_cbrt",
+ BT_FN_DOUBLE_DOUBLE,
+ flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN_HYPOT,
+ "__builtin_hypot",
+ BT_FN_DOUBLE_DOUBLE_DOUBLE,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_LDEXP,
+ "__builtin_ldexp",
+ BT_FN_DOUBLE_DOUBLE_INT,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_SINH,
+ "__builtin_sinh",
+ BT_FN_DOUBLE_DOUBLE,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_COSH,
+ "__builtin_cosh",
+ BT_FN_DOUBLE_DOUBLE,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_ASINH,
+ "__builtin_asinh",
+ BT_FN_DOUBLE_DOUBLE,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_ACOSH,
+ "__builtin_acosh",
+ BT_FN_DOUBLE_DOUBLE,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
DEF_LIB_BUILTIN(BUILT_IN_SIN,
"__builtin_sin",
BT_FN_DOUBLE_DOUBLE,
@@ -437,6 +484,20 @@ DEF_LIB_BUILTIN(BUILT_IN_COS,
BT_FN_DOUBLE_DOUBLE,
flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
: ATTR_PURE_NOTHROW_LIST)
+DEF_LIB_BUILTIN(BUILT_IN_ASIN,
+ "__builtin_asin",
+ BT_FN_DOUBLE_DOUBLE,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_ACOS,
+ "__builtin_acos",
+ BT_FN_DOUBLE_DOUBLE,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
DEF_LIB_BUILTIN(BUILT_IN_EXP,
"__builtin_exp",
BT_FN_DOUBLE_DOUBLE,
@@ -451,6 +512,23 @@ DEF_LIB_BUILTIN(BUILT_IN_LOG,
: (flag_unsafe_math_optimizations
? ATTR_CONST_NOTHROW_LIST
: ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_LOG10,
+ "__builtin_log10",
+ BT_FN_DOUBLE_DOUBLE,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_TANH,
+ "__builtin_tanh",
+ BT_FN_DOUBLE_DOUBLE,
+ flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST)
+DEF_LIB_BUILTIN(BUILT_IN_ATANH,
+ "__builtin_atanh",
+ BT_FN_DOUBLE_DOUBLE,
+ flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST)
DEF_LIB_BUILTIN(BUILT_IN_TAN,
"__builtin_tan",
BT_FN_DOUBLE_DOUBLE,
@@ -489,6 +567,53 @@ DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTF,
: (flag_unsafe_math_optimizations
? ATTR_CONST_NOTHROW_LIST
: ATTR_PURE_NOTHROW_LIST))
+DEF_C99_BUILTIN(BUILT_IN_CBRTF,
+ "__builtin_cbrtf",
+ BT_FN_FLOAT_FLOAT,
+ flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN_HYPOTF,
+ "__builtin_hypotf",
+ BT_FN_FLOAT_FLOAT_FLOAT,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_LDEXPF,
+ "__builtin_ldexpf",
+ BT_FN_FLOAT_FLOAT_INT,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_SINHF,
+ "__builtin_sinhf",
+ BT_FN_FLOAT_FLOAT,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_COSHF,
+ "__builtin_coshf",
+ BT_FN_FLOAT_FLOAT,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ASINHF,
+ "__builtin_asinhf",
+ BT_FN_FLOAT_FLOAT,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ACOSHF,
+ "__builtin_acoshf",
+ BT_FN_FLOAT_FLOAT,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
DEF_C99_C90RES_BUILTIN(BUILT_IN_SINF,
"__builtin_sinf",
BT_FN_FLOAT_FLOAT,
@@ -499,6 +624,20 @@ DEF_C99_C90RES_BUILTIN(BUILT_IN_COSF,
BT_FN_FLOAT_FLOAT,
flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
: ATTR_PURE_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ASINF,
+ "__builtin_asinf",
+ BT_FN_FLOAT_FLOAT,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ACOSF,
+ "__builtin_acosf",
+ BT_FN_FLOAT_FLOAT,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPF,
"__builtin_expf",
BT_FN_FLOAT_FLOAT,
@@ -513,6 +652,23 @@ DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGF,
: (flag_unsafe_math_optimizations
? ATTR_CONST_NOTHROW_LIST
: ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_LOG10F,
+ "__builtin_log10f",
+ BT_FN_FLOAT_FLOAT,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_TANHF,
+ "__builtin_tanhf",
+ BT_FN_FLOAT_FLOAT,
+ flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ATANHF,
+ "__builtin_atanhf",
+ BT_FN_FLOAT_FLOAT,
+ flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST)
DEF_C99_C90RES_BUILTIN(BUILT_IN_TANF,
"__builtin_tanf",
BT_FN_FLOAT_FLOAT,
@@ -551,6 +707,53 @@ DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTL,
: (flag_unsafe_math_optimizations
? ATTR_CONST_NOTHROW_LIST
: ATTR_PURE_NOTHROW_LIST))
+DEF_C99_BUILTIN(BUILT_IN_CBRTL,
+ "__builtin_cbrtl",
+ BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+ flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN_HYPOTL,
+ "__builtin_hypotl",
+ BT_FN_LONG_DOUBLE_LONG_DOUBLE_LONG_DOUBLE,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_LDEXPL,
+ "__builtin_ldexpl",
+ BT_FN_LONG_DOUBLE_LONG_DOUBLE_INT,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_SINHL,
+ "__builtin_sinhl",
+ BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_COSHL,
+ "__builtin_coshl",
+ BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ASINHL,
+ "__builtin_asinhl",
+ BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ACOSHL,
+ "__builtin_acoshl",
+ BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
DEF_C99_C90RES_BUILTIN(BUILT_IN_SINL,
"__builtin_sinl",
BT_FN_LONG_DOUBLE_LONG_DOUBLE,
@@ -561,6 +764,20 @@ DEF_C99_C90RES_BUILTIN(BUILT_IN_COSL,
BT_FN_LONG_DOUBLE_LONG_DOUBLE,
flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
: ATTR_PURE_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ASINL,
+ "__builtin_asinl",
+ BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ACOSL,
+ "__builtin_acosl",
+ BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPL,
"__builtin_expl",
BT_FN_LONG_DOUBLE_LONG_DOUBLE,
@@ -575,6 +792,23 @@ DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGL,
: (flag_unsafe_math_optimizations
? ATTR_CONST_NOTHROW_LIST
: ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_LOG10L,
+ "__builtin_log10l",
+ BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+ flag_errno_math ? ATTR_NOTHROW_LIST
+ : (flag_unsafe_math_optimizations
+ ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_TANHL,
+ "__builtin_tanhl",
+ BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+ flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ATANHL,
+ "__builtin_atanhl",
+ BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+ flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST)
DEF_C99_C90RES_BUILTIN(BUILT_IN_TANL,
"__builtin_tanl",
BT_FN_LONG_DOUBLE_LONG_DOUBLE,
diff -rup orig/egcc-CVS20030729/gcc/testsuite/gcc.dg/builtins-1.c egcc-CVS20030729/gcc/testsuite/gcc.dg/builtins-1.c
--- orig/egcc-CVS20030729/gcc/testsuite/gcc.dg/builtins-1.c 2003-05-23 20:01:58.000000000 -0400
+++ egcc-CVS20030729/gcc/testsuite/gcc.dg/builtins-1.c 2003-07-30 09:05:55.458706000 -0400
@@ -15,6 +15,16 @@ double test4(double x) { return __builti
double test5(double x) { return __builtin_log(x); }
double test6(double x) { return __builtin_tan(x); }
double test7(double x) { return __builtin_atan(x); }
+double test8(double x) { return __builtin_cbrt(x); }
+double test9(double x) { return __builtin_sinh(x); }
+double test10(double x) { return __builtin_cosh(x); }
+double test11(double x) { return __builtin_asinh(x); }
+double test12(double x) { return __builtin_acosh(x); }
+double test13(double x) { return __builtin_asin(x); }
+double test14(double x) { return __builtin_acos(x); }
+double test15(double x) { return __builtin_log10(x); }
+double test16(double x) { return __builtin_tanh(x); }
+double test17(double x) { return __builtin_atanh(x); }
float test1f(float x) { return __builtin_sqrtf(x); }
float test2f(float x) { return __builtin_cosf(x); }
@@ -23,6 +33,16 @@ float test4f(float x) { return __builtin
float test5f(float x) { return __builtin_logf(x); }
float test6f(float x) { return __builtin_tanf(x); }
float test7f(float x) { return __builtin_atanf(x); }
+float test8f(float x) { return __builtin_cbrtf(x); }
+float test9f(float x) { return __builtin_sinhf(x); }
+float test10f(float x) { return __builtin_coshf(x); }
+float test11f(float x) { return __builtin_asinhf(x); }
+float test12f(float x) { return __builtin_acoshf(x); }
+float test13f(float x) { return __builtin_asinf(x); }
+float test14f(float x) { return __builtin_acosf(x); }
+float test15f(float x) { return __builtin_log10f(x); }
+float test16f(float x) { return __builtin_tanhf(x); }
+float test17f(float x) { return __builtin_atanhf(x); }
long double test1l(long double x) { return __builtin_sqrtl(x); }
long double test2l(long double x) { return __builtin_cosl(x); }
@@ -31,4 +51,14 @@ long double test4l(long double x) { retu
long double test5l(long double x) { return __builtin_logl(x); }
long double test6l(long double x) { return __builtin_tanl(x); }
long double test7l(long double x) { return __builtin_atanl(x); }
+long double test8l(long double x) { return __builtin_cbrtl(x); }
+long double test9l(long double x) { return __builtin_sinhl(x); }
+long double test10l(long double x) { return __builtin_coshl(x); }
+long double test11l(long double x) { return __builtin_asinhl(x); }
+long double test12l(long double x) { return __builtin_acoshl(x); }
+long double test13l(long double x) { return __builtin_asinl(x); }
+long double test14l(long double x) { return __builtin_acosl(x); }
+long double test15l(long double x) { return __builtin_log10l(x); }
+long double test16l(long double x) { return __builtin_tanhl(x); }
+long double test17l(long double x) { return __builtin_atanhl(x); }
diff -rup orig/egcc-CVS20030729/gcc/testsuite/gcc.dg/builtins-4.c egcc-CVS20030729/gcc/testsuite/gcc.dg/builtins-4.c
--- orig/egcc-CVS20030729/gcc/testsuite/gcc.dg/builtins-4.c 2003-05-23 20:01:58.000000000 -0400
+++ egcc-CVS20030729/gcc/testsuite/gcc.dg/builtins-4.c 2003-07-30 07:50:53.885351000 -0400
@@ -11,10 +11,14 @@
double test1(double x, double y) { return __builtin_pow(x,y); }
double test2(double x, double y) { return __builtin_atan2(x,y); }
double test3(double x, double y) { return __builtin_fmod(x,y); }
+double test4(double x, double y) { return __builtin_hypot(x,y); }
+double test5(double x, int y) { return __builtin_ldexp(x,y); }
float test1f(float x, float y) { return __builtin_powf(x,y); }
float test2f(float x, float y) { return __builtin_atan2f(x,y); }
float test3f(float x, float y) { return __builtin_fmodf(x,y); }
+float test4f(float x, float y) { return __builtin_hypotf(x,y); }
+float test5f(float x, int y) { return __builtin_ldexpf(x,y); }
long double test1l(long double x, long double y)
{ return __builtin_powl(x,y); }
@@ -22,4 +26,8 @@ long double test2l(long double x, long d
{ return __builtin_atan2l(x,y); }
long double test3l(long double x, long double y)
{ return __builtin_fmodl(x,y); }
+long double test4l(long double x, long double y)
+{ return __builtin_hypotl(x,y); }
+long double test5l(long double x, int y)
+{ return __builtin_ldexpl(x,y); }
/* Copyright (C) 2003 Free Software Foundation.
Verify that the `const' attribute is applied to various builtins
and that these functions are optimized away by the compiler under
the appropriate circumstances.
Written by Kaveh Ghazi, 2003-07-30. */
/* { dg-do link } */
/* { dg-options "-O2 -ffast-math" } */
/* Don't link with libm.a since we want link failures if any functions
aren't optimized away. */
#include <math.h>
/* These are helper macros to test combinations of functions. We
instantiate foo() == foo() and expect the compiler to optimize away
these const functions. */
/* Just test the __builtin_ functions. */
#define BUILTIN_TEST1(FN, ARG) \
(__builtin_##FN(ARG) == __builtin_##FN(ARG))
/* Also test the regular (non-__builtin_) function. */
#define TEST1(FN, ARG) \
(FN(ARG) == FN(ARG) && BUILTIN_TEST1(FN, ARG))
/* Just test the __builtin_ functions with the FP "f" & "l" variants. */
#define BUILTIN_FPTEST0(FN) \
(__builtin_##FN() == __builtin_##FN() \
&& __builtin_##FN##f() == __builtin_##FN##f() \
&& __builtin_##FN##l() == __builtin_##FN##l())
#define BUILTIN_FPTEST1(FN, ARG) \
(__builtin_##FN(ARG) == __builtin_##FN(ARG) \
&& __builtin_##FN##f(ARG) == __builtin_##FN##f(ARG) \
&& __builtin_##FN##l(ARG) == __builtin_##FN##l(ARG))
#define BUILTIN_FPTEST2(FN, ARG1, ARG2) \
(__builtin_##FN(ARG1, ARG2) == __builtin_##FN(ARG1, ARG2) \
&& __builtin_##FN##f(ARG1, ARG2) == __builtin_##FN##f(ARG1, ARG2) \
&& __builtin_##FN##l(ARG1, ARG2) == __builtin_##FN##l(ARG1, ARG2))
/* These macros also test the regular (non-__builtin_) functions. */
#define FPTEST1(FN, ARG) \
(FN(ARG) == FN(ARG) \
&& FN##f(ARG) == FN##f(ARG) \
&& FN##l(ARG) == FN##l(ARG) \
&& BUILTIN_FPTEST1(FN, ARG))
#define FPTEST2(FN, ARG1, ARG2) \
(FN(ARG1, ARG2) == FN(ARG1, ARG2) \
&& FN##f(ARG1, ARG2) == FN##f(ARG1, ARG2) \
&& FN##l(ARG1, ARG2) == FN##l(ARG1, ARG2) \
&& BUILTIN_FPTEST2(FN, ARG1, ARG2))
int foo (double x, double y, int z)
{
return TEST1(ffs,z)
&& TEST1(ffsl,z)
&& TEST1(ffsll,z)
&& BUILTIN_TEST1(clz, z)
&& BUILTIN_TEST1(clzl, z)
&& BUILTIN_TEST1(clzll, z)
&& BUILTIN_TEST1(ctz, z)
&& BUILTIN_TEST1(ctzl, z)
&& BUILTIN_TEST1(ctzll, z)
&& BUILTIN_TEST1(popcount, z)
&& BUILTIN_TEST1(popcountl, z)
&& BUILTIN_TEST1(popcountll, z)
&& BUILTIN_TEST1(parity, z)
&& BUILTIN_TEST1(parityl, z)
&& BUILTIN_TEST1(parityll, z)
&& TEST1(abs,z)
&& TEST1(labs,z)
&& TEST1(llabs,z)
&& TEST1(imaxabs,z)
&& FPTEST1(fabs,x)
&& FPTEST1(floor,x)
&& FPTEST1(ceil,x)
&& FPTEST1(round,x)
&& FPTEST1(trunc,x)
&& FPTEST1(nearbyint,x)
&& FPTEST1(sqrt,x)
&& FPTEST1(cbrt,x)
&& FPTEST2(hypot,x,y)
&& FPTEST2(ldexp,x,z)
&& FPTEST1(sinh,x)
&& FPTEST1(cosh,x)
&& FPTEST1(asinh,x)
&& FPTEST1(acosh,x)
&& FPTEST1(sin,x)
&& FPTEST1(cos,x)
&& FPTEST1(asin,x)
&& FPTEST1(acos,x)
&& FPTEST1(exp,x)
&& FPTEST1(log,x)
&& FPTEST1(log10,x)
&& FPTEST1(tanh,x)
&& FPTEST1(atanh,x)
&& FPTEST1(tan,x)
&& FPTEST1(atan,x)
&& FPTEST2(pow,x,y)
&& FPTEST2(atan2,x,y)
&& FPTEST2(fmod,x,y)
&& BUILTIN_FPTEST0(inf)
&& BUILTIN_FPTEST0(huge_val)
&& FPTEST1(nan,"")
&& FPTEST1(nans,"");
}
int main(void)
{
return foo(2,3,4);
}
More information about the Gcc-patches
mailing list