OSDN Git Service

* config/s390/s390.c (s390_fixup_clobbered_return_reg):
[pf3gnuchains/gcc-fork.git] / gcc / builtins.def
index 60a962a..f0df8bb 100644 (file)
@@ -1,6 +1,6 @@
 /* This file contains the definitions and documentation for the
    builtins used in the GNU compiler.
-   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -59,7 +59,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
    compiler.  For instance C90 reserves floorf function, but does not
    define it's meaning.  When user uses floorf we may assume that the
    floorf has the meaning we expect, but we can't produce floorf by
-   simplifing floor((double)float) since runtime don't need to implement it.  */
+   simplifying floor((double)float) since the runtime need not implement
+   it.  */
    
 /* A GCC builtin (like __builtin_saveregs) is provided by the
    compiler, but does not correspond to a function in the standard
@@ -99,13 +100,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
   DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE,        \
               true, true, false, ATTRS, true)
 
-/* Like DEF_LIB_BUILTIN, except that a call to the builtin should
-   never fall back to the library version.  */
-#undef DEF_LIB_ALWAYS_BUILTIN                          
-#define DEF_LIB_ALWAYS_BUILTIN(ENUM, NAME, TYPE)       \
-  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE,        \
-              true, false, true, ATTR_CONST_NOTHROW_LIST, true)
-
 /* Like DEF_LIB_BUILTIN, except that the function is not one that is
    specified by ANSI/ISO C.  So, when we're being fully conformant we
    ignore the version of these builtins that does not begin with
@@ -146,12 +140,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
   DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE,      \
               true, true, true, ATTRS, true)
 
-/* A built-in that is not currently used.  */
-#undef DEF_UNUSED_BUILTIN                                      
-#define DEF_UNUSED_BUILTIN(X)                                  \
-  DEF_BUILTIN (X, (const char *) NULL, NOT_BUILT_IN, BT_LAST,  \
-              BT_LAST, false, false, false, ATTR_NOTHROW_LIST, false)
-
 /* If SMALL_STACK is defined, then `alloca' is only defined in its
    `__builtin' form.  */
 #if SMALL_STACK  
@@ -166,22 +154,27 @@ DEF_EXT_LIB_BUILTIN(BUILT_IN_ALLOCA,
                    ATTR_MALLOC_NOTHROW_LIST)
 #endif
 
-DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_ABS,
-                      "__builtin_abs",
-                      BT_FN_INT_INT)
-DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_LABS,
-                      "__builtin_labs",
-                      BT_FN_LONG_LONG)
-
-DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABS,
-                      "__builtin_fabs",
-                      BT_FN_DOUBLE_DOUBLE)
-DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSF,
+DEF_LIB_BUILTIN(BUILT_IN_ABS,
+               "__builtin_abs",
+               BT_FN_INT_INT,
+               ATTR_CONST_NOTHROW_LIST)
+DEF_LIB_BUILTIN(BUILT_IN_LABS,
+               "__builtin_labs",
+               BT_FN_LONG_LONG,
+               ATTR_CONST_NOTHROW_LIST)
+
+DEF_LIB_BUILTIN(BUILT_IN_FABS,
+               "__builtin_fabs",
+               BT_FN_DOUBLE_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_FABSF,
                       "__builtin_fabsf",
-                      BT_FN_FLOAT_FLOAT)
-DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSL,
+                      BT_FN_FLOAT_FLOAT,
+                      ATTR_CONST_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_FABSL,
                       "__builtin_fabsl",
-                      BT_FN_LONG_DOUBLE_LONG_DOUBLE)
+                      BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+                      ATTR_CONST_NOTHROW_LIST)
 
 DEF_LIB_BUILTIN(BUILT_IN_FLOOR,
                 "__builtin_floor",
@@ -293,13 +286,6 @@ DEF_C99_BUILTIN(BUILT_IN_CIMAGL,
                BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
                ATTR_CONST_NOTHROW_LIST)
 
-DEF_UNUSED_BUILTIN(BUILT_IN_DIV)
-DEF_UNUSED_BUILTIN(BUILT_IN_LDIV)
-DEF_UNUSED_BUILTIN(BUILT_IN_FFLOOR)
-DEF_UNUSED_BUILTIN(BUILT_IN_FCEIL)
-DEF_UNUSED_BUILTIN(BUILT_IN_FMOD)
-DEF_UNUSED_BUILTIN(BUILT_IN_FREM)
-
 /* The system prototypes for `bzero' and `bcmp' functions have many
    variations, so don't specify parameters to avoid conflicts.  The
    expand_* functions check the argument types anyway.  */
@@ -487,6 +473,27 @@ DEF_LIB_BUILTIN(BUILT_IN_LOG,
                                : (flag_unsafe_math_optimizations
                                   ? ATTR_CONST_NOTHROW_LIST
                                   : ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_POW,
+               "__builtin_pow",
+               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_ATAN2,
+               "__builtin_atan2",
+               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_FMOD,
+               "__builtin_fmod",
+               BT_FN_DOUBLE_DOUBLE_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_SQRTF,
                       "__builtin_sqrtf",
                       BT_FN_FLOAT_FLOAT,
@@ -518,6 +525,27 @@ 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_POWF,
+                      "__builtin_powf",
+                      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_ATAN2F,
+                      "__builtin_atan2f",
+                      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_FMODF,
+                      "__builtin_fmodf",
+                      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_SQRTL,
                       "__builtin_sqrtl",
                       BT_FN_LONG_DOUBLE_LONG_DOUBLE,
@@ -549,6 +577,27 @@ 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_POWL,
+                      "__builtin_powl",
+                      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_ATAN2L,
+                      "__builtin_atan2l",
+                      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_FMODL,
+                      "__builtin_fmodl",
+                      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_GCC_BUILTIN(BUILT_IN_INF,
                "__builtin_inf",
@@ -663,27 +712,69 @@ DEF_GCC_BUILTIN(BUILT_IN_PREFETCH,
                BT_FN_VOID_CONST_PTR_VAR,
                ATTR_NULL)
 
-/* Stdio builtins.  */
-DEF_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR,
-                   "__builtin_putchar",
-                    BT_FN_INT_INT,
-                    ATTR_NOTHROW_LIST)
-DEF_FALLBACK_BUILTIN(BUILT_IN_PUTS,
-                    "__builtin_puts",
-                    BT_FN_INT_CONST_STRING,
-                    ATTR_NOTHROW_LIST)
+/* stdio.h builtins (without FILE *).  */
+
 DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF,
                          "__builtin_printf",
                          BT_FN_INT_CONST_STRING_VAR,
                          ATTR_FORMAT_PRINTF_1_2)
-DEF_FALLBACK_BUILTIN(BUILT_IN_FPUTC,
-                    "__builtin_fputc",
-                    BT_FN_INT_INT_PTR,
-                    ATTR_NOTHROW_LIST)
+DEF_LIB_BUILTIN(BUILT_IN_PUTCHAR,
+               "__builtin_putchar",
+               BT_FN_INT_INT,
+               ATTR_NOTHROW_LIST)
+DEF_LIB_BUILTIN(BUILT_IN_PUTS,
+               "__builtin_puts",
+               BT_FN_INT_CONST_STRING,
+               ATTR_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN_SNPRINTF,
+               "__builtin_snprintf",
+               BT_FN_INT_STRING_SIZE_CONST_STRING_VAR,
+               ATTR_FORMAT_PRINTF_3_4)
+DEF_LIB_BUILTIN(BUILT_IN_SPRINTF,
+               "__builtin_sprintf",
+               BT_FN_INT_STRING_CONST_STRING_VAR,
+               ATTR_FORMAT_PRINTF_2_3)
+DEF_LIB_BUILTIN(BUILT_IN_SCANF,
+               "__builtin_scanf",
+               BT_FN_INT_CONST_STRING_VAR,
+               ATTR_FORMAT_SCANF_1_2)
+DEF_LIB_BUILTIN(BUILT_IN_SSCANF,
+               "__builtin_sscanf",
+               BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
+               ATTR_FORMAT_SCANF_2_3)
+DEF_LIB_BUILTIN(BUILT_IN_VPRINTF,
+               "__builtin_vprintf",
+               BT_FN_INT_CONST_STRING_VALIST_ARG,
+               ATTR_FORMAT_PRINTF_1_0)
+DEF_C99_BUILTIN(BUILT_IN_VSCANF,
+               "__builtin_vscanf",
+               BT_FN_INT_CONST_STRING_VALIST_ARG,
+               ATTR_FORMAT_SCANF_1_0)
+DEF_C99_BUILTIN(BUILT_IN_VSSCANF,
+               "__builtin_vsscanf",
+               BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG,
+               ATTR_FORMAT_SCANF_2_0)
+DEF_C99_BUILTIN(BUILT_IN_VSNPRINTF,
+               "__builtin_vsnprintf",
+               BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG,
+               ATTR_FORMAT_PRINTF_3_0)
+DEF_LIB_BUILTIN(BUILT_IN_VSPRINTF,
+               "__builtin_vsprintf",
+               BT_FN_INT_STRING_CONST_STRING_VALIST_ARG,
+               ATTR_FORMAT_PRINTF_2_0)
+
+
+/* stdio.h builtins (with FILE *).  */
+
 /* Declare the __builtin_ style with arguments and the regular style
    without them.  We rely on stdio.h to supply the arguments for the
    regular style declaration since we had to use void* instead of
    FILE* in the __builtin_ prototype supplied here.  */
+
+DEF_FALLBACK_BUILTIN(BUILT_IN_FPUTC,
+                    "__builtin_fputc",
+                    BT_FN_INT_INT_PTR,
+                    ATTR_NOTHROW_LIST)
 DEF_BUILTIN (BUILT_IN_FPUTS,
             "__builtin_fputs",
             BUILT_IN_NORMAL,
@@ -699,7 +790,7 @@ DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF,
                         BT_FN_INT_PTR_CONST_STRING_VAR,
                         ATTR_FORMAT_PRINTF_2_3)
 
-/* Stdio unlocked builtins.  */
+/* stdio unlocked builtins (without FILE *).  */
 
 DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED,
                         "__builtin_putchar_unlocked",
@@ -711,13 +802,17 @@ DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF_UNLOCKED,
                              "__builtin_printf_unlocked",
                              BT_FN_INT_CONST_STRING_VAR,
                              ATTR_FORMAT_PRINTF_1_2)
-DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FPUTC_UNLOCKED,
-                        "__builtin_fputc_unlocked",
-                        BT_FN_INT_INT_PTR)
+
+/* stdio unlocked builtins (with FILE *).  */
+
 /* Declare the __builtin_ style with arguments and the regular style
    without them.  We rely on stdio.h to supply the arguments for the
    regular style declaration since we had to use void* instead of
    FILE* in the __builtin_ prototype supplied here.  */
+
+DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FPUTC_UNLOCKED,
+                        "__builtin_fputc_unlocked",
+                        BT_FN_INT_INT_PTR)
 DEF_BUILTIN (BUILT_IN_FPUTS_UNLOCKED,
             "__builtin_fputs_unlocked",
             BUILT_IN_NORMAL,
@@ -815,42 +910,21 @@ DEF_GCC_BUILTIN(BUILT_IN_EXPECT,
                BT_FN_LONG_LONG_LONG,
                ATTR_NULL)
 
-/* C++ extensions */
-DEF_UNUSED_BUILTIN(BUILT_IN_NEW)
-DEF_UNUSED_BUILTIN(BUILT_IN_VEC_NEW)
-DEF_UNUSED_BUILTIN(BUILT_IN_DELETE)
-DEF_UNUSED_BUILTIN(BUILT_IN_VEC_DELETE)
-
 /* Declare abort, exit, _exit and _Exit */
-DEF_BUILTIN (BUILT_IN_ABORT,
-            "__builtin_abort",
-            NOT_BUILT_IN,
-            BT_FN_VOID,
-            BT_FN_VOID,
-            1, 0, 0,
-            ATTR_NORETURN_NOTHROW_LIST, true)
-
-DEF_BUILTIN (BUILT_IN_EXIT,
-            "__builtin_exit",
-            NOT_BUILT_IN,
-            BT_FN_VOID_INT,
-            BT_FN_VOID_INT,
-            1, 0, 0,
-            ATTR_NORETURN_NOTHROW_LIST, true)
-
-DEF_BUILTIN (BUILT_IN__EXIT,
-            "__builtin__exit",
-            NOT_BUILT_IN,
-            BT_FN_VOID_INT,
-            BT_FN_VOID_INT,
-            1, 0, 1,
-            ATTR_NORETURN_NOTHROW_LIST, false)
-
-DEF_BUILTIN (BUILT_IN__EXIT2,
-            "__builtin__Exit",
-            NOT_BUILT_IN,
-            BT_FN_VOID_INT,
-            BT_FN_VOID_INT,
-            1, 0, !flag_isoc99,
-            ATTR_NORETURN_NOTHROW_LIST, false)
+DEF_LIB_BUILTIN(BUILT_IN_ABORT,
+                "__builtin_abort",
+               BT_FN_VOID,
+               ATTR_NORETURN_NOTHROW_LIST)
+DEF_LIB_BUILTIN(BUILT_IN_EXIT,
+               "__builtin_exit",
+               BT_FN_VOID_INT,
+               ATTR_NORETURN_NOTHROW_LIST)
+DEF_EXT_LIB_BUILTIN(BUILT_IN__EXIT,
+                   "__builtin__exit",
+                   BT_FN_VOID_INT,
+                   ATTR_NORETURN_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN__EXIT2,
+               "__builtin__Exit",
+               BT_FN_VOID_INT,
+               ATTR_NORETURN_NOTHROW_LIST)