| //===--- Builtins.def - Builtin function info database ----------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file defines the standard builtin function database. Users of this file |
| // must define the BUILTIN macro to make use of this information. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| // FIXME: this needs to be the full list supported by GCC. Right now, I'm just |
| // adding stuff on demand. |
| // |
| // FIXME: This should really be a .td file, but that requires modifying tblgen. |
| // Perhaps tblgen should have plugins. |
| |
| // The first value provided to the macro specifies the function name of the |
| // builtin, and results in a clang::builtin::BIXX enum value for XX. |
| |
| // The second value provided to the macro specifies the type of the function |
| // (result value, then each argument) as follows: |
| // v -> void |
| // b -> boolean |
| // c -> char |
| // s -> short |
| // i -> int |
| // f -> float |
| // d -> double |
| // z -> size_t |
| // F -> constant CFString |
| // a -> __builtin_va_list |
| // A -> "reference" to __builtin_va_list |
| // V -> Vector, following num elements and a base type. |
| // P -> FILE |
| // J -> jmp_buf |
| // SJ -> sigjmp_buf |
| // . -> "...". This may only occur at the end of the function list. |
| // |
| // Types maybe prefixed with the following modifiers: |
| // L -> long (e.g. Li for 'long int') |
| // LL -> long long |
| // LLL -> __int128_t (e.g. LLLi) |
| // S -> signed |
| // U -> unsigned |
| // |
| // Types may be postfixed with the following modifiers: |
| // * -> pointer |
| // & -> reference |
| // C -> const |
| |
| // The third value provided to the macro specifies information about attributes |
| // of the function. These must be kept in sync with the predicates in the |
| // Builtin::Context class. Currently we have: |
| // n -> nothrow |
| // r -> noreturn |
| // c -> const |
| // F -> this is a libc/libm function with a '__builtin_' prefix added. |
| // f -> this is a libc/libm function without the '__builtin_' prefix. It can |
| // be followed by ':headername:' to state which header this function |
| // comes from. |
| // p:N: -> this is a printf-like function whose Nth argument is the format |
| // string. |
| // P:N: -> similar to the p:N: attribute, but the function is like vprintf |
| // in that it accepts its arguments as a va_list rather than |
| // through an ellipsis |
| // e -> const, but only when -fmath-errno=0 |
| // FIXME: gcc has nonnull |
| |
| #if defined(BUILTIN) && !defined(LIBBUILTIN) |
| # define LIBBUILTIN(ID, TYPE, ATTRS, HEADER) BUILTIN(ID, TYPE, ATTRS) |
| #endif |
| |
| // Standard libc/libm functions: |
| BUILTIN(__builtin_huge_val, "d", "nc") |
| BUILTIN(__builtin_huge_valf, "f", "nc") |
| BUILTIN(__builtin_huge_vall, "Ld", "nc") |
| BUILTIN(__builtin_inf , "d" , "nc") |
| BUILTIN(__builtin_inff , "f" , "nc") |
| BUILTIN(__builtin_infl , "Ld" , "nc") |
| BUILTIN(__builtin_nan, "dcC*" , "ncF") |
| BUILTIN(__builtin_nanf, "fcC*" , "ncF") |
| BUILTIN(__builtin_nanl, "LdcC*", "ncF") |
| BUILTIN(__builtin_nans, "dcC*" , "ncF") |
| BUILTIN(__builtin_nansf, "fcC*" , "ncF") |
| BUILTIN(__builtin_nansl, "LdcC*", "ncF") |
| BUILTIN(__builtin_abs , "ii" , "ncF") |
| BUILTIN(__builtin_fabs , "dd" , "ncF") |
| BUILTIN(__builtin_fabsf, "ff" , "ncF") |
| BUILTIN(__builtin_fabsl, "LdLd", "ncF") |
| BUILTIN(__builtin_copysign, "ddd", "ncF") |
| BUILTIN(__builtin_copysignf, "fff", "ncF") |
| BUILTIN(__builtin_copysignl, "LdLdLd", "ncF") |
| BUILTIN(__builtin_powi , "ddi" , "nc") |
| BUILTIN(__builtin_powif, "ffi" , "nc") |
| BUILTIN(__builtin_powil, "LdLdi", "nc") |
| |
| // FP Comparisons. |
| BUILTIN(__builtin_isgreater , "i.", "nc") |
| BUILTIN(__builtin_isgreaterequal, "i.", "nc") |
| BUILTIN(__builtin_isless , "i.", "nc") |
| BUILTIN(__builtin_islessequal , "i.", "nc") |
| BUILTIN(__builtin_islessgreater , "i.", "nc") |
| BUILTIN(__builtin_isunordered , "i.", "nc") |
| |
| // Builtins for arithmetic. |
| BUILTIN(__builtin_clz , "iUi" , "nc") |
| BUILTIN(__builtin_clzl , "iULi" , "nc") |
| BUILTIN(__builtin_clzll, "iULLi", "nc") |
| // TODO: int clzimax(uintmax_t) |
| BUILTIN(__builtin_ctz , "iUi" , "nc") |
| BUILTIN(__builtin_ctzl , "iULi" , "nc") |
| BUILTIN(__builtin_ctzll, "iULLi", "nc") |
| // TODO: int ctzimax(uintmax_t) |
| BUILTIN(__builtin_ffs , "iUi" , "nc") |
| BUILTIN(__builtin_ffsl , "iULi" , "nc") |
| BUILTIN(__builtin_ffsll, "iULLi", "nc") |
| BUILTIN(__builtin_parity , "iUi" , "nc") |
| BUILTIN(__builtin_parityl , "iULi" , "nc") |
| BUILTIN(__builtin_parityll, "iULLi", "nc") |
| BUILTIN(__builtin_popcount , "iUi" , "nc") |
| BUILTIN(__builtin_popcountl , "iULi" , "nc") |
| BUILTIN(__builtin_popcountll, "iULLi", "nc") |
| |
| // FIXME: These type signatures are not correct for targets with int != 32-bits |
| // or with ULL != 64-bits. |
| BUILTIN(__builtin_bswap32, "UiUi", "nc") |
| BUILTIN(__builtin_bswap64, "ULLiULLi", "nc") |
| |
| // Random GCC builtins |
| BUILTIN(__builtin_constant_p, "Us.", "nc") |
| BUILTIN(__builtin_classify_type, "i.", "nc") |
| BUILTIN(__builtin___CFStringMakeConstantString, "FC*cC*", "nc") |
| BUILTIN(__builtin_va_start, "vA.", "n") |
| BUILTIN(__builtin_va_end, "vA", "n") |
| BUILTIN(__builtin_va_copy, "vAA", "n") |
| BUILTIN(__builtin_stdarg_start, "vA.", "n") |
| BUILTIN(__builtin_bcmp, "iv*v*z", "n") |
| BUILTIN(__builtin_bcopy, "vv*v*z", "n") |
| BUILTIN(__builtin_bzero, "vv*z", "n") |
| BUILTIN(__builtin_memcmp, "ivC*vC*z", "nF") |
| BUILTIN(__builtin_memcpy, "v*v*vC*z", "nF") |
| BUILTIN(__builtin_memmove, "v*v*vC*z", "nF") |
| BUILTIN(__builtin_mempcpy, "v*v*vC*z", "nF") |
| BUILTIN(__builtin_memset, "v*v*iz", "nF") |
| BUILTIN(__builtin_stpcpy, "c*c*cC*", "nF") |
| BUILTIN(__builtin_stpncpy, "c*c*cC*z", "nF") |
| BUILTIN(__builtin_strcasecmp, "icC*cC*", "nF") |
| BUILTIN(__builtin_strcat, "c*c*cC*", "nF") |
| BUILTIN(__builtin_strchr, "c*cC*i", "nF") |
| BUILTIN(__builtin_strcmp, "icC*cC*", "nF") |
| BUILTIN(__builtin_strcpy, "c*c*cC*", "nF") |
| BUILTIN(__builtin_strcspn, "zcC*cC*", "nF") |
| BUILTIN(__builtin_strdup, "c*cC*", "nF") |
| BUILTIN(__builtin_strlen, "zcC*", "nF") |
| BUILTIN(__builtin_strncasecmp, "icC*cC*z", "nF") |
| BUILTIN(__builtin_strncat, "c*c*cC*z", "nF") |
| BUILTIN(__builtin_strncmp, "icC*cC*z", "nF") |
| BUILTIN(__builtin_strncpy, "c*c*cC*z", "nF") |
| BUILTIN(__builtin_strndup, "c*cC*z", "nF") |
| BUILTIN(__builtin_strpbrk, "c*cC*cC*", "nF") |
| BUILTIN(__builtin_strrchr, "c*cC*i", "nF") |
| BUILTIN(__builtin_strspn, "zcC*cC*", "nF") |
| BUILTIN(__builtin_strstr, "c*cC*cC*", "nF") |
| BUILTIN(__builtin_return_address, "v*Ui", "n") |
| BUILTIN(__builtin_extract_return_addr, "v*v*", "n") |
| BUILTIN(__builtin_frame_address, "v*Ui", "n") |
| BUILTIN(__builtin_flt_rounds, "i", "nc") |
| BUILTIN(__builtin_setjmp, "iv**", "") |
| BUILTIN(__builtin_longjmp, "vv**i", "") |
| BUILTIN(__builtin_unwind_init, "v", "") |
| |
| // GCC Object size checking builtins |
| BUILTIN(__builtin_object_size, "zv*i", "n") |
| BUILTIN(__builtin___memcpy_chk, "v*v*vC*zz", "nF") |
| BUILTIN(__builtin___memmove_chk, "v*v*vC*zz", "nF") |
| BUILTIN(__builtin___mempcpy_chk, "v*v*vC*zz", "nF") |
| BUILTIN(__builtin___memset_chk, "v*v*izz", "nF") |
| BUILTIN(__builtin___stpcpy_chk, "c*c*cC*z", "nF") |
| BUILTIN(__builtin___strcat_chk, "c*c*cC*z", "nF") |
| BUILTIN(__builtin___strcpy_chk, "c*c*cC*z", "nF") |
| BUILTIN(__builtin___strncat_chk, "c*c*cC*zz", "nF") |
| BUILTIN(__builtin___strncpy_chk, "c*c*cC*zz", "nF") |
| BUILTIN(__builtin___snprintf_chk, "ic*zizcC*.", "Fp:4:") |
| BUILTIN(__builtin___sprintf_chk, "ic*izcC*.", "Fp:3:") |
| BUILTIN(__builtin___vsnprintf_chk, "ic*zizcC*a", "FP:4:") |
| BUILTIN(__builtin___vsprintf_chk, "ic*izcC*a", "FP:3:") |
| BUILTIN(__builtin___fprintf_chk, "iP*icC*.", "Fp:2:") |
| BUILTIN(__builtin___printf_chk, "iicC*.", "Fp:1:") |
| BUILTIN(__builtin___vfprintf_chk, "iP*icC*a", "FP:2:") |
| BUILTIN(__builtin___vprintf_chk, "iicC*a", "FP:1:") |
| |
| BUILTIN(__builtin_expect, "iii" , "nc") |
| BUILTIN(__builtin_prefetch, "vvC*.", "nc") |
| BUILTIN(__builtin_trap, "v", "n") |
| |
| BUILTIN(__builtin_shufflevector, "v." , "nc") |
| |
| BUILTIN(__builtin_alloca, "v*z" , "n") |
| |
| // "Overloaded" Atomic operator builtins. These are overloaded to support data |
| // types of i8, i16, i32, i64, and i128. The front-end sees calls to the |
| // non-suffixed version of these (which has a bogus type) and transforms them to |
| // the right overloaded version in Sema (plus casts). |
| |
| // FIXME: These assume that char -> i8, short -> i16, int -> i32, |
| // long long -> i64. |
| |
| BUILTIN(__sync_fetch_and_add, "v.", "") |
| BUILTIN(__sync_fetch_and_add_1, "cc*c.", "n") |
| BUILTIN(__sync_fetch_and_add_2, "ss*s.", "n") |
| BUILTIN(__sync_fetch_and_add_4, "ii*i.", "n") |
| BUILTIN(__sync_fetch_and_add_8, "LLiLLi*LLi.", "n") |
| BUILTIN(__sync_fetch_and_add_16, "LLLiLLLi*LLLi.", "n") |
| |
| BUILTIN(__sync_fetch_and_sub, "v.", "") |
| BUILTIN(__sync_fetch_and_sub_1, "cc*c.", "n") |
| BUILTIN(__sync_fetch_and_sub_2, "ss*s.", "n") |
| BUILTIN(__sync_fetch_and_sub_4, "ii*i.", "n") |
| BUILTIN(__sync_fetch_and_sub_8, "LLiLLi*LLi.", "n") |
| BUILTIN(__sync_fetch_and_sub_16, "LLLiLLLi*LLLi.", "n") |
| |
| BUILTIN(__sync_fetch_and_or, "v.", "") |
| BUILTIN(__sync_fetch_and_or_1, "cc*c.", "n") |
| BUILTIN(__sync_fetch_and_or_2, "ss*s.", "n") |
| BUILTIN(__sync_fetch_and_or_4, "ii*i.", "n") |
| BUILTIN(__sync_fetch_and_or_8, "LLiLLi*LLi.", "n") |
| BUILTIN(__sync_fetch_and_or_16, "LLLiLLLi*LLLi.", "n") |
| |
| BUILTIN(__sync_fetch_and_and, "v.", "") |
| BUILTIN(__sync_fetch_and_and_1, "cc*c.", "n") |
| BUILTIN(__sync_fetch_and_and_2, "ss*s.", "n") |
| BUILTIN(__sync_fetch_and_and_4, "ii*i.", "n") |
| BUILTIN(__sync_fetch_and_and_8, "LLiLLi*LLi.", "n") |
| BUILTIN(__sync_fetch_and_and_16, "LLLiLLLi*LLLi.", "n") |
| |
| BUILTIN(__sync_fetch_and_xor, "v.", "") |
| BUILTIN(__sync_fetch_and_xor_1, "cc*c.", "n") |
| BUILTIN(__sync_fetch_and_xor_2, "ss*s.", "n") |
| BUILTIN(__sync_fetch_and_xor_4, "ii*i.", "n") |
| BUILTIN(__sync_fetch_and_xor_8, "LLiLLi*LLi.", "n") |
| BUILTIN(__sync_fetch_and_xor_16, "LLLiLLLi*LLLi.", "n") |
| |
| BUILTIN(__sync_fetch_and_nand, "v.", "") |
| BUILTIN(__sync_fetch_and_nand_1, "cc*c.", "n") |
| BUILTIN(__sync_fetch_and_nand_2, "ss*s.", "n") |
| BUILTIN(__sync_fetch_and_nand_4, "ii*i.", "n") |
| BUILTIN(__sync_fetch_and_nand_8, "LLiLLi*LLi.", "n") |
| BUILTIN(__sync_fetch_and_nand_16, "LLLiLLLi*LLLi.", "n") |
| |
| |
| BUILTIN(__sync_add_and_fetch, "v.", "") |
| BUILTIN(__sync_add_and_fetch_1, "cc*c.", "n") |
| BUILTIN(__sync_add_and_fetch_2, "ss*s.", "n") |
| BUILTIN(__sync_add_and_fetch_4, "ii*i.", "n") |
| BUILTIN(__sync_add_and_fetch_8, "LLiLLi*LLi.", "n") |
| BUILTIN(__sync_add_and_fetch_16, "LLLiLLLi*LLLi.", "n") |
| |
| BUILTIN(__sync_sub_and_fetch, "v.", "") |
| BUILTIN(__sync_sub_and_fetch_1, "cc*c.", "n") |
| BUILTIN(__sync_sub_and_fetch_2, "ss*s.", "n") |
| BUILTIN(__sync_sub_and_fetch_4, "ii*i.", "n") |
| BUILTIN(__sync_sub_and_fetch_8, "LLiLLi*LLi.", "n") |
| BUILTIN(__sync_sub_and_fetch_16, "LLLiLLLi*LLLi.", "n") |
| |
| BUILTIN(__sync_or_and_fetch, "v.", "") |
| BUILTIN(__sync_or_and_fetch_1, "cc*c.", "n") |
| BUILTIN(__sync_or_and_fetch_2, "ss*s.", "n") |
| BUILTIN(__sync_or_and_fetch_4, "ii*i.", "n") |
| BUILTIN(__sync_or_and_fetch_8, "LLiLLi*LLi.", "n") |
| BUILTIN(__sync_or_and_fetch_16, "LLLiLLLi*LLLi.", "n") |
| |
| BUILTIN(__sync_and_and_fetch, "v.", "") |
| BUILTIN(__sync_and_and_fetch_1, "cc*c.", "n") |
| BUILTIN(__sync_and_and_fetch_2, "ss*s.", "n") |
| BUILTIN(__sync_and_and_fetch_4, "ii*i.", "n") |
| BUILTIN(__sync_and_and_fetch_8, "LLiLLi*LLi.", "n") |
| BUILTIN(__sync_and_and_fetch_16, "LLLiLLLi*LLLi.", "n") |
| |
| BUILTIN(__sync_xor_and_fetch, "v.", "") |
| BUILTIN(__sync_xor_and_fetch_1, "cc*c.", "n") |
| BUILTIN(__sync_xor_and_fetch_2, "ss*s.", "n") |
| BUILTIN(__sync_xor_and_fetch_4, "ii*i.", "n") |
| BUILTIN(__sync_xor_and_fetch_8, "LLiLLi*LLi.", "n") |
| BUILTIN(__sync_xor_and_fetch_16, "LLLiLLLi*LLLi.", "n") |
| |
| BUILTIN(__sync_nand_and_fetch, "v.", "") |
| BUILTIN(__sync_nand_and_fetch_1, "cc*c.", "n") |
| BUILTIN(__sync_nand_and_fetch_2, "ss*s.", "n") |
| BUILTIN(__sync_nand_and_fetch_4, "ii*i.", "n") |
| BUILTIN(__sync_nand_and_fetch_8, "LLiLLi*LLi.", "n") |
| BUILTIN(__sync_nand_and_fetch_16, "LLLiLLLi*LLLi.", "n") |
| |
| |
| BUILTIN(__sync_bool_compare_and_swap, "v.", "") |
| BUILTIN(__sync_bool_compare_and_swap_1, "bc*cc.", "n") |
| BUILTIN(__sync_bool_compare_and_swap_2, "bs*ss.", "n") |
| BUILTIN(__sync_bool_compare_and_swap_4, "bi*ii.", "n") |
| BUILTIN(__sync_bool_compare_and_swap_8, "bLLi*LLi.", "n") |
| BUILTIN(__sync_bool_compare_and_swap_16, "bLLLi*LLLiLLLi.", "n") |
| |
| BUILTIN(__sync_val_compare_and_swap, "v.", "") |
| BUILTIN(__sync_val_compare_and_swap_1, "cc*cc.", "n") |
| BUILTIN(__sync_val_compare_and_swap_2, "ss*ss.", "n") |
| BUILTIN(__sync_val_compare_and_swap_4, "ii*ii.", "n") |
| BUILTIN(__sync_val_compare_and_swap_8, "LLiLLi*LLi.", "n") |
| BUILTIN(__sync_val_compare_and_swap_16, "LLLiLLLi*LLLiLLLi.", "n") |
| |
| BUILTIN(__sync_lock_test_and_set, "v.", "") |
| BUILTIN(__sync_lock_test_and_set_1, "cc*c.", "n") |
| BUILTIN(__sync_lock_test_and_set_2, "ss*s.", "n") |
| BUILTIN(__sync_lock_test_and_set_4, "ii*i.", "n") |
| BUILTIN(__sync_lock_test_and_set_8, "LLiLLi*LLi.", "n") |
| BUILTIN(__sync_lock_test_and_set_16, "LLLiLLLi*LLLi.", "n") |
| |
| BUILTIN(__sync_lock_release, "v.", "") |
| BUILTIN(__sync_lock_release_1, "vc*.", "n") |
| BUILTIN(__sync_lock_release_2, "vs*.", "n") |
| BUILTIN(__sync_lock_release_4, "vi*.", "n") |
| BUILTIN(__sync_lock_release_8, "vLLi*.", "n") |
| BUILTIN(__sync_lock_release_16, "vLLLi*.", "n") |
| |
| |
| |
| // Non-overloaded atomic builtins. |
| BUILTIN(__sync_synchronize, "v.", "n") |
| // LLVM instruction builtin [Clang extension]. |
| BUILTIN(__builtin_llvm_memory_barrier,"vbbbbb", "n") |
| // GCC does not support these, they are a Clang extension. |
| BUILTIN(__sync_fetch_and_min, "ii*i", "n") |
| BUILTIN(__sync_fetch_and_max, "ii*i", "n") |
| BUILTIN(__sync_fetch_and_umin, "UiUi*Ui", "n") |
| BUILTIN(__sync_fetch_and_umax, "UiUi*Ui", "n") |
| |
| // C99 library functions |
| // C99 stdlib.h |
| LIBBUILTIN(calloc, "v*zz", "f", "stdlib.h") |
| LIBBUILTIN(exit, "vi", "fr", "stdlib.h") |
| LIBBUILTIN(_Exit, "vi", "fr", "stdlib.h") |
| LIBBUILTIN(malloc, "v*z", "f", "stdlib.h") |
| LIBBUILTIN(realloc, "v*v*z", "f", "stdlib.h") |
| // C99 string.h |
| LIBBUILTIN(memcpy, "v*v*vC*z", "f", "string.h") |
| LIBBUILTIN(memmove, "v*v*vC*z", "f", "string.h") |
| LIBBUILTIN(strcpy, "c*c*cC*", "f", "string.h") |
| LIBBUILTIN(strncpy, "c*c*cC*z", "f", "string.h") |
| LIBBUILTIN(strcat, "c*c*cC*", "f", "string.h") |
| LIBBUILTIN(strncat, "c*c*cC*z", "f", "string.h") |
| LIBBUILTIN(strxfrm, "zc*cC*z", "f", "string.h") |
| LIBBUILTIN(memchr, "v*vC*iz", "f", "string.h") |
| LIBBUILTIN(strchr, "c*cC*i", "f", "string.h") |
| LIBBUILTIN(strcspn, "zcC*cC*", "f", "string.h") |
| LIBBUILTIN(strpbrk, "c*cC*cC*", "f", "string.h") |
| LIBBUILTIN(strrchr, "c*cC*i", "f", "string.h") |
| LIBBUILTIN(strspn, "zcC*cC*", "f", "string.h") |
| LIBBUILTIN(strstr, "c*cC*cC*", "f", "string.h") |
| LIBBUILTIN(strtok, "c*c*cC*", "f", "string.h") |
| LIBBUILTIN(memset, "v*v*iz", "f", "string.h") |
| LIBBUILTIN(strerror, "c*i", "f", "string.h") |
| LIBBUILTIN(strlen, "zcC*", "f", "string.h") |
| // C99 stdio.h |
| LIBBUILTIN(printf, "icC*.", "fp:0:", "stdio.h") |
| LIBBUILTIN(fprintf, "iP*cC*.", "fp:1:", "stdio.h") |
| LIBBUILTIN(snprintf, "ic*zcC*.", "fp:2:", "stdio.h") |
| LIBBUILTIN(sprintf, "ic*cC*.", "fp:1:", "stdio.h") |
| LIBBUILTIN(vprintf, "icC*a", "fP:0:", "stdio.h") |
| LIBBUILTIN(vfprintf, "i.", "fP:1:", "stdio.h") |
| LIBBUILTIN(vsnprintf, "ic*zcC*a", "fP:2:", "stdio.h") |
| LIBBUILTIN(vsprintf, "ic*cC*a", "fP:1:", "stdio.h") |
| // C99 |
| LIBBUILTIN(longjmp, "vJi", "fr", "setjmp.h") |
| |
| // Non-C library functions |
| // FIXME: Non-C-standard stuff shouldn't be builtins in non-GNU mode! |
| LIBBUILTIN(alloca, "v*z", "f", "stdlib.h") |
| // POSIX string.h |
| LIBBUILTIN(stpcpy, "c*c*cC*", "f", "string.h") |
| LIBBUILTIN(stpncpy, "c*c*cC*z", "f", "string.h") |
| LIBBUILTIN(strdup, "c*cC*", "f", "string.h") |
| LIBBUILTIN(strndup, "c*cC*z", "f", "string.h") |
| // POSIX strings.h |
| LIBBUILTIN(index, "c*cC*i", "f", "strings.h") |
| LIBBUILTIN(rindex, "c*cC*i", "f", "strings.h") |
| // POSIX unistd.h |
| LIBBUILTIN(_exit, "vi", "fr", "unistd.h") |
| // POSIX setjmp.h |
| LIBBUILTIN(_longjmp, "vJi", "fr", "setjmp.h") |
| LIBBUILTIN(siglongjmp, "vSJi", "fr", "setjmp.h") |
| |
| // FIXME: This type isn't very correct, it should be |
| // id objc_msgSend(id, SEL) |
| // but we need new type letters for that. |
| LIBBUILTIN(objc_msgSend, "v*.", "f", "objc/message.h") |
| |
| // Builtin math library functions |
| LIBBUILTIN(pow, "ddd", "fe", "math.h") |
| LIBBUILTIN(powl, "LdLdLd", "fe", "math.h") |
| LIBBUILTIN(powf, "fff", "fe", "math.h") |
| |
| LIBBUILTIN(sqrt, "dd", "fe", "math.h") |
| LIBBUILTIN(sqrtl, "LdLd", "fe", "math.h") |
| LIBBUILTIN(sqrtf, "ff", "fe", "math.h") |
| |
| LIBBUILTIN(sin, "dd", "fe", "math.h") |
| LIBBUILTIN(sinl, "LdLd", "fe", "math.h") |
| LIBBUILTIN(sinf, "ff", "fe", "math.h") |
| |
| LIBBUILTIN(cos, "dd", "fe", "math.h") |
| LIBBUILTIN(cosl, "LdLd", "fe", "math.h") |
| LIBBUILTIN(cosf, "ff", "fe", "math.h") |
| |
| #undef BUILTIN |
| #undef LIBBUILTIN |