TargetLibraryInfo.h revision 36b56886974eae4f9c5ebc96befd3e7bfe5de338
1ce99120084f549a523213064648662a704e8b789Chris Lattner//===-- llvm/Target/TargetLibraryInfo.h - Library information ---*- C++ -*-===// 2ce99120084f549a523213064648662a704e8b789Chris Lattner// 3ce99120084f549a523213064648662a704e8b789Chris Lattner// The LLVM Compiler Infrastructure 4ce99120084f549a523213064648662a704e8b789Chris Lattner// 5ce99120084f549a523213064648662a704e8b789Chris Lattner// This file is distributed under the University of Illinois Open Source 6ce99120084f549a523213064648662a704e8b789Chris Lattner// License. See LICENSE.TXT for details. 7ce99120084f549a523213064648662a704e8b789Chris Lattner// 8ce99120084f549a523213064648662a704e8b789Chris Lattner//===----------------------------------------------------------------------===// 9ce99120084f549a523213064648662a704e8b789Chris Lattner 10ce99120084f549a523213064648662a704e8b789Chris Lattner#ifndef LLVM_TARGET_TARGETLIBRARYINFO_H 11ce99120084f549a523213064648662a704e8b789Chris Lattner#define LLVM_TARGET_TARGETLIBRARYINFO_H 12ce99120084f549a523213064648662a704e8b789Chris Lattner 139d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman#include "llvm/ADT/DenseMap.h" 14255f89faee13dc491cb64fbeae3c763e7e2ea4e6Chandler Carruth#include "llvm/Pass.h" 15ce99120084f549a523213064648662a704e8b789Chris Lattner 16ce99120084f549a523213064648662a704e8b789Chris Lattnernamespace llvm { 17ce99120084f549a523213064648662a704e8b789Chris Lattner class Triple; 18ce99120084f549a523213064648662a704e8b789Chris Lattner 19ce99120084f549a523213064648662a704e8b789Chris Lattner namespace LibFunc { 20ce99120084f549a523213064648662a704e8b789Chris Lattner enum Func { 21cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int _IO_getc(_IO_FILE * __fp); 22cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge under_IO_getc, 23cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int _IO_putc(int __c, _IO_FILE * __fp); 24cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge under_IO_putc, 258e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void operator delete[](void*); 268e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer ZdaPv, 2772c8331ec1437f8c33fff1dac1ea0ebb11009411Richard Smith /// void operator delete[](void*, nothrow); 2872c8331ec1437f8c33fff1dac1ea0ebb11009411Richard Smith ZdaPvRKSt9nothrow_t, 298e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void operator delete(void*); 308e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer ZdlPv, 3172c8331ec1437f8c33fff1dac1ea0ebb11009411Richard Smith /// void operator delete(void*, nothrow); 3272c8331ec1437f8c33fff1dac1ea0ebb11009411Richard Smith ZdlPvRKSt9nothrow_t, 338e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *new[](unsigned int); 348e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer Znaj, 358e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *new[](unsigned int, nothrow); 368e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer ZnajRKSt9nothrow_t, 378e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *new[](unsigned long); 388e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer Znam, 398e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *new[](unsigned long, nothrow); 408e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer ZnamRKSt9nothrow_t, 418e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *new(unsigned int); 428e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer Znwj, 438e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *new(unsigned int, nothrow); 448e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer ZnwjRKSt9nothrow_t, 458e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *new(unsigned long); 468e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer Znwm, 478e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *new(unsigned long, nothrow); 488e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer ZnwmRKSt9nothrow_t, 49208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson /// double __cospi(double x); 50208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson cospi, 51208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson /// float __cospif(float x); 52208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson cospif, 53d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// int __cxa_atexit(void (*f)(void *), void *p, void *d); 54d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson cxa_atexit, 55d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// void __cxa_guard_abort(guard_t *guard); 56d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// guard_t is int64_t in Itanium ABI or int32_t on ARM eabi. 57d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson cxa_guard_abort, 58d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// int __cxa_guard_acquire(guard_t *guard); 59d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson cxa_guard_acquire, 60d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// void __cxa_guard_release(guard_t *guard); 61d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson cxa_guard_release, 62cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int __isoc99_scanf (const char *format, ...) 63cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge dunder_isoc99_scanf, 64cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int __isoc99_sscanf(const char *s, const char *format, ...) 65cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge dunder_isoc99_sscanf, 66d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// void *__memcpy_chk(void *s1, const void *s2, size_t n, size_t s1size); 67d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson memcpy_chk, 68208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson /// double __sincospi_stret(double x); 69208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson sincospi_stret, 7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// float __sincospif_stret(float x); 7136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines sincospif_stret, 72208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson /// double __sinpi(double x); 73208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson sinpi, 74208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson /// float __sinpif(float x); 75208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson sinpif, 76b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd /// double __sqrt_finite(double x); 77b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd sqrt_finite, 78b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd /// float __sqrt_finite(float x); 79b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd sqrtf_finite, 80b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd /// long double __sqrt_finite(long double x); 81b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd sqrtl_finite, 82cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char * __strdup(const char *s); 83cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge dunder_strdup, 84cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char *__strndup(const char *s, size_t n); 85cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge dunder_strndup, 86cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char * __strtok_r(char *s, const char *delim, char **save_ptr); 87cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge dunder_strtok_r, 886098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int abs(int j); 896098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge abs, 90cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int access(const char *path, int amode); 91cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge access, 928ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double acos(double x); 938ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier acos, 948ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float acosf(float x); 958ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier acosf, 966871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// double acosh(double x); 976871d1eceba0455707de29708c36ae3c2778c160Chad Rosier acosh, 986871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// float acoshf(float x); 996871d1eceba0455707de29708c36ae3c2778c160Chad Rosier acoshf, 1006871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// long double acoshl(long double x); 1016871d1eceba0455707de29708c36ae3c2778c160Chad Rosier acoshl, 102d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double acosl(long double x); 103d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson acosl, 1048ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double asin(double x); 1058ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier asin, 1068ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float asinf(float x); 1078ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier asinf, 1086871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// double asinh(double x); 1096871d1eceba0455707de29708c36ae3c2778c160Chad Rosier asinh, 1106871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// float asinhf(float x); 1116871d1eceba0455707de29708c36ae3c2778c160Chad Rosier asinhf, 1126871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// long double asinhl(long double x); 1136871d1eceba0455707de29708c36ae3c2778c160Chad Rosier asinhl, 114d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double asinl(long double x); 115d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson asinl, 1168ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double atan(double x); 1178ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier atan, 11832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// double atan2(double y, double x); 11932b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier atan2, 12032b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// float atan2f(float y, float x); 12132b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier atan2f, 122d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double atan2l(long double y, long double x); 123d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson atan2l, 124d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// float atanf(float x); 125d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson atanf, 1266871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// double atanh(double x); 1276871d1eceba0455707de29708c36ae3c2778c160Chad Rosier atanh, 1286871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// float atanhf(float x); 1296871d1eceba0455707de29708c36ae3c2778c160Chad Rosier atanhf, 1306871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// long double atanhl(long double x); 1316871d1eceba0455707de29708c36ae3c2778c160Chad Rosier atanhl, 132d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double atanl(long double x); 133d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson atanl, 134cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// double atof(const char *str); 135cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge atof, 136cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int atoi(const char *str); 137cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge atoi, 138cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// long atol(const char *str); 139cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge atol, 140cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// long long atoll(const char *nptr); 141cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge atoll, 142cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int bcmp(const void *s1, const void *s2, size_t n); 143cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge bcmp, 144cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void bcopy(const void *s1, void *s2, size_t n); 145cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge bcopy, 146cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void bzero(void *s, size_t n); 147cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge bzero, 1488e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *calloc(size_t count, size_t size); 1498e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer calloc, 1506871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// double cbrt(double x); 1516871d1eceba0455707de29708c36ae3c2778c160Chad Rosier cbrt, 1526871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// float cbrtf(float x); 1536871d1eceba0455707de29708c36ae3c2778c160Chad Rosier cbrtf, 1546871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// long double cbrtl(long double x); 1556871d1eceba0455707de29708c36ae3c2778c160Chad Rosier cbrtl, 1568ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double ceil(double x); 1578ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier ceil, 1588ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float ceilf(float x); 1598ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier ceilf, 160d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double ceill(long double x); 161d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson ceill, 162cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int chmod(const char *path, mode_t mode); 163cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge chmod, 164cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int chown(const char *path, uid_t owner, gid_t group); 165cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge chown, 166cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void clearerr(FILE *stream); 167cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge clearerr, 168cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int closedir(DIR *dirp); 169cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge closedir, 170243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// double copysign(double x, double y); 171243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson copysign, 172243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// float copysignf(float x, float y); 173243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson copysignf, 174243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// long double copysignl(long double x, long double y); 175243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson copysignl, 1768ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double cos(double x); 1778ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier cos, 1788ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float cosf(float x); 1798ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier cosf, 1808ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double cosh(double x); 1818ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier cosh, 1828ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float coshf(float x); 1838ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier coshf, 184d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double coshl(long double x); 185d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson coshl, 186d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double cosl(long double x); 187d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson cosl, 188cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char *ctermid(char *s); 189cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ctermid, 1908ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double exp(double x); 1918ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier exp, 1926871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// double exp10(double x); 1936871d1eceba0455707de29708c36ae3c2778c160Chad Rosier exp10, 1946871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// float exp10f(float x); 1956871d1eceba0455707de29708c36ae3c2778c160Chad Rosier exp10f, 1966871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// long double exp10l(long double x); 1976871d1eceba0455707de29708c36ae3c2778c160Chad Rosier exp10l, 1988ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double exp2(double x); 1998ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier exp2, 2008ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float exp2f(float x); 2018ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier exp2f, 202d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double exp2l(long double x); 203d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson exp2l, 204d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// float expf(float x); 205d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson expf, 206d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double expl(long double x); 207d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson expl, 2088ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double expm1(double x); 2098ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier expm1, 2108ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float expm1f(float x); 211d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff expm1f, 212d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double expm1l(long double x); 213d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson expm1l, 2148ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double fabs(double x); 2158ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier fabs, 2168ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float fabsf(float x); 2178ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier fabsf, 218d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double fabsl(long double x); 219d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson fabsl, 220cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fclose(FILE *stream); 221cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fclose, 222cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// FILE *fdopen(int fildes, const char *mode); 223cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fdopen, 224cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int feof(FILE *stream); 225cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge feof, 226cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int ferror(FILE *stream); 227cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ferror, 228cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fflush(FILE *stream); 229cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fflush, 2306098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int ffs(int i); 2316098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge ffs, 2326098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int ffsl(long int i); 2336098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge ffsl, 2346098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int ffsll(long long int i); 2356098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge ffsll, 236cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fgetc(FILE *stream); 237cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fgetc, 238cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fgetpos(FILE *stream, fpos_t *pos); 239cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fgetpos, 240cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char *fgets(char *s, int n, FILE *stream); 241cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fgets, 242cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fileno(FILE *stream); 243cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fileno, 244d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// int fiprintf(FILE *stream, const char *format, ...); 245d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson fiprintf, 246cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void flockfile(FILE *file); 247cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge flockfile, 2488ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double floor(double x); 2498ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier floor, 2508ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float floorf(float x); 2518ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier floorf, 252d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double floorl(long double x); 253d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson floorl, 25436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// double fmax(double x, double y); 25536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines fmax, 25636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// float fmaxf(float x, float y); 25736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines fmaxf, 25836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// long double fmaxl(long double x, long double y); 25936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines fmaxl, 26036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// double fmin(double x, double y); 26136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines fmin, 26236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// float fminf(float x, float y); 26336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines fminf, 26436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// long double fminl(long double x, long double y); 26536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines fminl, 26632b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// double fmod(double x, double y); 26732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier fmod, 26832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// float fmodf(float x, float y); 26932b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier fmodf, 270d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double fmodl(long double x, long double y); 271d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson fmodl, 272cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// FILE *fopen(const char *filename, const char *mode); 273cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fopen, 274cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// FILE *fopen64(const char *filename, const char *opentype) 275cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fopen64, 2766098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int fprintf(FILE *stream, const char *format, ...); 2776098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge fprintf, 2788d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes /// int fputc(int c, FILE *stream); 2798d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes fputc, 280683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier /// int fputs(const char *s, FILE *stream); 281683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier fputs, 282cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream); 283cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fread, 2848e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void free(void *ptr); 2858e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer free, 286cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// double frexp(double num, int *exp); 287cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge frexp, 288cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// float frexpf(float num, int *exp); 289cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge frexpf, 290cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// long double frexpl(long double num, int *exp); 291cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge frexpl, 292cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fscanf(FILE *stream, const char *format, ... ); 293cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fscanf, 294cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fseek(FILE *stream, long offset, int whence); 295cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fseek, 296cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fseeko(FILE *stream, off_t offset, int whence); 297cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fseeko, 298cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fseeko64(FILE *stream, off64_t offset, int whence) 299cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fseeko64, 300cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fsetpos(FILE *stream, const fpos_t *pos); 301cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fsetpos, 302cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fstat(int fildes, struct stat *buf); 303cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fstat, 304cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fstat64(int filedes, struct stat64 *buf) 305cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fstat64, 306cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fstatvfs(int fildes, struct statvfs *buf); 307cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fstatvfs, 308cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fstatvfs64(int fildes, struct statvfs64 *buf); 309cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fstatvfs64, 310cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// long ftell(FILE *stream); 311cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ftell, 312cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// off_t ftello(FILE *stream); 313cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ftello, 314cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// off64_t ftello64(FILE *stream) 315cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ftello64, 316cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int ftrylockfile(FILE *file); 317cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ftrylockfile, 318cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void funlockfile(FILE *file); 319cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge funlockfile, 320683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier /// size_t fwrite(const void *ptr, size_t size, size_t nitems, 321683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier /// FILE *stream); 322683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier fwrite, 323cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int getc(FILE *stream); 324cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge getc, 325cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int getc_unlocked(FILE *stream); 326cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge getc_unlocked, 327cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int getchar(void); 328cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge getchar, 329cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char *getenv(const char *name); 330cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge getenv, 331cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int getitimer(int which, struct itimerval *value); 332cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge getitimer, 333cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int getlogin_r(char *name, size_t namesize); 334cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge getlogin_r, 335cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// struct passwd *getpwnam(const char *name); 336cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge getpwnam, 337cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char *gets(char *s); 338cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge gets, 339f0f85eab0469ac93f9bb6c7d19aca2c35868d83aMichael Gottesman /// int gettimeofday(struct timeval *tp, void *tzp); 340f0f85eab0469ac93f9bb6c7d19aca2c35868d83aMichael Gottesman gettimeofday, 341cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// uint32_t htonl(uint32_t hostlong); 342cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge htonl, 343cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// uint16_t htons(uint16_t hostshort); 344cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge htons, 345683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier /// int iprintf(const char *format, ...); 346683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier iprintf, 3476098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int isascii(int c); 3486098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge isascii, 3496098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int isdigit(int c); 3506098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge isdigit, 3516098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// long int labs(long int j); 3526098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge labs, 353cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int lchown(const char *path, uid_t owner, gid_t group); 354cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge lchown, 35536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// double ldexp(double x, int n); 35636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ldexp, 35736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// float ldexpf(float x, int n); 35836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ldexpf, 35936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// long double ldexpl(long double x, int n); 36036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ldexpl, 3616098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// long long int llabs(long long int j); 3626098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge llabs, 3638ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double log(double x); 3648ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier log, 3658ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double log10(double x); 3668ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier log10, 3678ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float log10f(float x); 3688ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier log10f, 369d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double log10l(long double x); 370d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson log10l, 3718ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double log1p(double x); 3728ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier log1p, 3738ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float log1pf(float x); 3748ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier log1pf, 375d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double log1pl(long double x); 376d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson log1pl, 377d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// double log2(double x); 378d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson log2, 379d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// float log2f(float x); 380d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson log2f, 381d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// double long double log2l(long double x); 382d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson log2l, 3836871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// double logb(double x); 3846871d1eceba0455707de29708c36ae3c2778c160Chad Rosier logb, 3856871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// float logbf(float x); 3866871d1eceba0455707de29708c36ae3c2778c160Chad Rosier logbf, 3876871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// long double logbl(long double x); 3886871d1eceba0455707de29708c36ae3c2778c160Chad Rosier logbl, 389d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// float logf(float x); 390d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson logf, 391d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double logl(long double x); 392d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson logl, 393cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int lstat(const char *path, struct stat *buf); 394cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge lstat, 395cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int lstat64(const char *path, struct stat64 *buf); 396cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge lstat64, 3978e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *malloc(size_t size); 3988e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer malloc, 399cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void *memalign(size_t boundary, size_t size); 400cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge memalign, 401cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void *memccpy(void *s1, const void *s2, int c, size_t n); 402cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge memccpy, 4038d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes /// void *memchr(const void *s, int c, size_t n); 4048d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes memchr, 4058d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes /// int memcmp(const void *s1, const void *s2, size_t n); 4068d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes memcmp, 407683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier /// void *memcpy(void *s1, const void *s2, size_t n); 408398c0d8b7417dedbe244020ffb67abb54aaa1c59Chris Lattner memcpy, 409683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier /// void *memmove(void *s1, const void *s2, size_t n); 410149f5283f93ec85b96888c284f56099a72cc2731Chris Lattner memmove, 411cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge // void *memrchr(const void *s, int c, size_t n); 412cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge memrchr, 413683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier /// void *memset(void *b, int c, size_t len); 414683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier memset, 415ce99120084f549a523213064648662a704e8b789Chris Lattner /// void memset_pattern16(void *b, const void *pattern16, size_t len); 416ce99120084f549a523213064648662a704e8b789Chris Lattner memset_pattern16, 417cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int mkdir(const char *path, mode_t mode); 418cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge mkdir, 419cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// time_t mktime(struct tm *timeptr); 420cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge mktime, 421cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// double modf(double x, double *iptr); 422cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge modf, 423cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// float modff(float, float *iptr); 424cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge modff, 425cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// long double modfl(long double value, long double *iptr); 426cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge modfl, 427243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// double nearbyint(double x); 428243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson nearbyint, 429243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// float nearbyintf(float x); 430243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson nearbyintf, 431243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// long double nearbyintl(long double x); 432243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson nearbyintl, 433cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// uint32_t ntohl(uint32_t netlong); 434cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ntohl, 435cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// uint16_t ntohs(uint16_t netshort); 436cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ntohs, 437cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int open(const char *path, int oflag, ... ); 438cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge open, 439cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int open64(const char *filename, int flags[, mode_t mode]) 440cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge open64, 441cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// DIR *opendir(const char *dirname); 442cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge opendir, 443cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int pclose(FILE *stream); 444cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge pclose, 445cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void perror(const char *s); 446cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge perror, 447cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// FILE *popen(const char *command, const char *mode); 448cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge popen, 4498e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// int posix_memalign(void **memptr, size_t alignment, size_t size); 4508e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer posix_memalign, 4518ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double pow(double x, double y); 4528ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier pow, 4538ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float powf(float x, float y); 4548ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier powf, 4558ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// long double powl(long double x, long double y); 4568ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier powl, 457cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset); 458cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge pread, 4596098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int printf(const char *format, ...); 4606098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge printf, 461cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int putc(int c, FILE *stream); 462cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge putc, 4638d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes /// int putchar(int c); 4648d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes putchar, 4658d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes /// int puts(const char *s); 4668d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes puts, 467cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// ssize_t pwrite(int fildes, const void *buf, size_t nbyte, 468cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// off_t offset); 469cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge pwrite, 470cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void qsort(void *base, size_t nel, size_t width, 471cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int (*compar)(const void *, const void *)); 472cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge qsort, 473cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// ssize_t read(int fildes, void *buf, size_t nbyte); 474cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge read, 475cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// ssize_t readlink(const char *path, char *buf, size_t bufsize); 476cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge readlink, 4778e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *realloc(void *ptr, size_t size); 4788e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer realloc, 4798e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *reallocf(void *ptr, size_t size); 4808e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer reallocf, 481cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char *realpath(const char *file_name, char *resolved_name); 482cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge realpath, 483cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int remove(const char *path); 484cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge remove, 485cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int rename(const char *old, const char *new); 486cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge rename, 487cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void rewind(FILE *stream); 488cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge rewind, 489243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// double rint(double x); 490243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson rint, 491243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// float rintf(float x); 492243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson rintf, 493d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff /// long double rintl(long double x); 494243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson rintl, 495cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int rmdir(const char *path); 496cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge rmdir, 497d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff /// double round(double x); 498d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff round, 499d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff /// float roundf(float x); 500d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff roundf, 501d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff /// long double roundl(long double x); 502d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff roundl, 503cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int scanf(const char *restrict format, ... ); 504cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge scanf, 505cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void setbuf(FILE *stream, char *buf); 506cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge setbuf, 507cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int setitimer(int which, const struct itimerval *value, 508cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// struct itimerval *ovalue); 509cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge setitimer, 510cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int setvbuf(FILE *stream, char *buf, int type, size_t size); 511cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge setvbuf, 51232b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// double sin(double x); 51332b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier sin, 51432b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// float sinf(float x); 51532b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier sinf, 51632b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// double sinh(double x); 51732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier sinh, 51832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// float sinhf(float x); 51932b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier sinhf, 520d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double sinhl(long double x); 521d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson sinhl, 522d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double sinl(long double x); 523d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson sinl, 524419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne /// int siprintf(char *str, const char *format, ...); 525419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne siprintf, 526cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int snprintf(char *s, size_t n, const char *format, ...); 527cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge snprintf, 5286098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int sprintf(char *str, const char *format, ...); 5296098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge sprintf, 5303d925d24e8c54cde05228258c25cc21687cad922Chad Rosier /// double sqrt(double x); 5313d925d24e8c54cde05228258c25cc21687cad922Chad Rosier sqrt, 5323d925d24e8c54cde05228258c25cc21687cad922Chad Rosier /// float sqrtf(float x); 5333d925d24e8c54cde05228258c25cc21687cad922Chad Rosier sqrtf, 534d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double sqrtl(long double x); 535d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson sqrtl, 536cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int sscanf(const char *s, const char *format, ... ); 537cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge sscanf, 538cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int stat(const char *path, struct stat *buf); 539cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge stat, 540cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int stat64(const char *path, struct stat64 *buf); 541cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge stat64, 542cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int statvfs(const char *path, struct statvfs *buf); 543cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge statvfs, 544cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int statvfs64(const char *path, struct statvfs64 *buf) 545cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge statvfs64, 546939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// char *stpcpy(char *s1, const char *s2); 547939f5002027e3ccb710ac1c3050dc25471251565Meador Inge stpcpy, 548cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char *stpncpy(char *s1, const char *s2, size_t n); 549cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge stpncpy, 550cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int strcasecmp(const char *s1, const char *s2); 551cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge strcasecmp, 5520841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes /// char *strcat(char *s1, const char *s2); 5530841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes strcat, 5548d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes /// char *strchr(const char *s, int c); 5558d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes strchr, 556939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// int strcmp(const char *s1, const char *s2); 557939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strcmp, 558cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int strcoll(const char *s1, const char *s2); 559cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge strcoll, 5600841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes /// char *strcpy(char *s1, const char *s2); 5610841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes strcpy, 562939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// size_t strcspn(const char *s1, const char *s2); 563939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strcspn, 5648e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// char *strdup(const char *s1); 5658e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer strdup, 5660841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes /// size_t strlen(const char *s); 5670841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes strlen, 568cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int strncasecmp(const char *s1, const char *s2, size_t n); 569cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge strncasecmp, 5700841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes /// char *strncat(char *s1, const char *s2, size_t n); 5710841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes strncat, 5728d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes /// int strncmp(const char *s1, const char *s2, size_t n); 5738d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes strncmp, 5740841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes /// char *strncpy(char *s1, const char *s2, size_t n); 5750841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes strncpy, 5768e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// char *strndup(const char *s1, size_t n); 5778e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer strndup, 5780841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes /// size_t strnlen(const char *s, size_t maxlen); 5790841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes strnlen, 580939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// char *strpbrk(const char *s1, const char *s2); 581939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strpbrk, 582939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// char *strrchr(const char *s, int c); 583939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strrchr, 584939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// size_t strspn(const char *s1, const char *s2); 585939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strspn, 586939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// char *strstr(const char *s1, const char *s2); 587939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strstr, 588939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// double strtod(const char *nptr, char **endptr); 589939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strtod, 590939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// float strtof(const char *nptr, char **endptr); 591939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strtof, 592cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge // char *strtok(char *s1, const char *s2); 593cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge strtok, 594cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge // char *strtok_r(char *s, const char *sep, char **lasts); 595cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge strtok_r, 596939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// long int strtol(const char *nptr, char **endptr, int base); 597939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strtol, 598939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// long double strtold(const char *nptr, char **endptr); 599939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strtold, 600939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// long long int strtoll(const char *nptr, char **endptr, int base); 601939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strtoll, 602939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// unsigned long int strtoul(const char *nptr, char **endptr, int base); 603939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strtoul, 604939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// unsigned long long int strtoull(const char *nptr, char **endptr, 605939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// int base); 606939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strtoull, 607cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// size_t strxfrm(char *s1, const char *s2, size_t n); 608cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge strxfrm, 609cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int system(const char *command); 610cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge system, 61132b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// double tan(double x); 61232b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier tan, 61332b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// float tanf(float x); 61432b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier tanf, 61532b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// double tanh(double x); 61632b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier tanh, 61732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// float tanhf(float x); 61832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier tanhf, 619d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double tanhl(long double x); 620d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson tanhl, 621d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double tanl(long double x); 622d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson tanl, 623cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// clock_t times(struct tms *buffer); 624cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge times, 625cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// FILE *tmpfile(void); 626cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge tmpfile, 627cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// FILE *tmpfile64(void) 628cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge tmpfile64, 6296098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int toascii(int c); 6306098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge toascii, 631243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// double trunc(double x); 632243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson trunc, 633243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// float truncf(float x); 634243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson truncf, 635243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// long double truncl(long double x); 636243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson truncl, 637cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int uname(struct utsname *name); 638cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge uname, 639cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int ungetc(int c, FILE *stream); 640cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ungetc, 641cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int unlink(const char *path); 642cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge unlink, 643cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int unsetenv(const char *name); 644cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge unsetenv, 645cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int utime(const char *path, const struct utimbuf *times); 646cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge utime, 647cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int utimes(const char *path, const struct timeval times[2]); 648cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge utimes, 6498e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *valloc(size_t size); 6508e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer valloc, 651cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int vfprintf(FILE *stream, const char *format, va_list ap); 652cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge vfprintf, 653cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int vfscanf(FILE *stream, const char *format, va_list arg); 654cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge vfscanf, 655cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int vprintf(const char *restrict format, va_list ap); 656cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge vprintf, 657cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int vscanf(const char *format, va_list arg); 658cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge vscanf, 659cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int vsnprintf(char *s, size_t n, const char *format, va_list ap); 660cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge vsnprintf, 661cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int vsprintf(char *s, const char *format, va_list ap); 662cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge vsprintf, 663cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int vsscanf(const char *s, const char *format, va_list arg); 664cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge vsscanf, 665cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// ssize_t write(int fildes, const void *buf, size_t nbyte); 666cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge write, 6679d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman 668ce99120084f549a523213064648662a704e8b789Chris Lattner NumLibFuncs 669ce99120084f549a523213064648662a704e8b789Chris Lattner }; 670ce99120084f549a523213064648662a704e8b789Chris Lattner } 671ce99120084f549a523213064648662a704e8b789Chris Lattner 672ce99120084f549a523213064648662a704e8b789Chris Lattner/// TargetLibraryInfo - This immutable pass captures information about what 673ce99120084f549a523213064648662a704e8b789Chris Lattner/// library functions are available for the current target, and allows a 674ce99120084f549a523213064648662a704e8b789Chris Lattner/// frontend to disable optimizations through -fno-builtin etc. 675ce99120084f549a523213064648662a704e8b789Chris Lattnerclass TargetLibraryInfo : public ImmutablePass { 6762d24e2a396a1d211baaeedf32148a3b657240170David Blaikie virtual void anchor(); 6779d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman unsigned char AvailableArray[(LibFunc::NumLibFuncs+3)/4]; 6789d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman llvm::DenseMap<unsigned, std::string> CustomNames; 6799d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman static const char* StandardNames[LibFunc::NumLibFuncs]; 6809d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman 6819d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman enum AvailabilityState { 6829d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman StandardName = 3, // (memset to all ones) 6839d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman CustomName = 1, 6849d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman Unavailable = 0 // (memset to all zeros) 6859d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman }; 6869d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman void setState(LibFunc::Func F, AvailabilityState State) { 6879d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman AvailableArray[F/4] &= ~(3 << 2*(F&3)); 6889d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman AvailableArray[F/4] |= State << 2*(F&3); 6899d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman } 6909d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman AvailabilityState getState(LibFunc::Func F) const { 6919d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman return static_cast<AvailabilityState>((AvailableArray[F/4] >> 2*(F&3)) & 3); 6929d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman } 6939d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman 694ce99120084f549a523213064648662a704e8b789Chris Lattnerpublic: 695ce99120084f549a523213064648662a704e8b789Chris Lattner static char ID; 696ce99120084f549a523213064648662a704e8b789Chris Lattner TargetLibraryInfo(); 697ce99120084f549a523213064648662a704e8b789Chris Lattner TargetLibraryInfo(const Triple &T); 69840f5fbcc5c95bb96c43ce2d06d57ae9b7f852539Chris Lattner explicit TargetLibraryInfo(const TargetLibraryInfo &TLI); 699ce99120084f549a523213064648662a704e8b789Chris Lattner 700d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// getLibFunc - Search for a particular function name. If it is one of the 701d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// known library functions, return true and set F to the corresponding value. 702d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson bool getLibFunc(StringRef funcName, LibFunc::Func &F) const; 703d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson 704ce99120084f549a523213064648662a704e8b789Chris Lattner /// has - This function is used by optimizations that want to match on or form 705ce99120084f549a523213064648662a704e8b789Chris Lattner /// a given library function. 706ce99120084f549a523213064648662a704e8b789Chris Lattner bool has(LibFunc::Func F) const { 7079d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman return getState(F) != Unavailable; 7089d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman } 7099d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman 710982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson /// hasOptimizedCodeGen - Return true if the function is both available as 711982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson /// a builtin and a candidate for optimized code generation. 712982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson bool hasOptimizedCodeGen(LibFunc::Func F) const { 713982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson if (getState(F) == Unavailable) 714982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson return false; 715982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson switch (F) { 716982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson default: break; 717982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::copysign: case LibFunc::copysignf: case LibFunc::copysignl: 718982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::fabs: case LibFunc::fabsf: case LibFunc::fabsl: 719982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::sin: case LibFunc::sinf: case LibFunc::sinl: 720982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::cos: case LibFunc::cosf: case LibFunc::cosl: 721982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::sqrt: case LibFunc::sqrtf: case LibFunc::sqrtl: 722b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd case LibFunc::sqrt_finite: case LibFunc::sqrtf_finite: 723b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd case LibFunc::sqrtl_finite: 72436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case LibFunc::fmax: case LibFunc::fmaxf: case LibFunc::fmaxl: 72536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case LibFunc::fmin: case LibFunc::fminf: case LibFunc::fminl: 726982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::floor: case LibFunc::floorf: case LibFunc::floorl: 727982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::nearbyint: case LibFunc::nearbyintf: case LibFunc::nearbyintl: 728982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::ceil: case LibFunc::ceilf: case LibFunc::ceill: 729982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::rint: case LibFunc::rintf: case LibFunc::rintl: 73041418d17cced656f91038b2482bc9d173b4974b0Hal Finkel case LibFunc::round: case LibFunc::roundf: case LibFunc::roundl: 731982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::trunc: case LibFunc::truncf: case LibFunc::truncl: 732982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::log2: case LibFunc::log2f: case LibFunc::log2l: 733982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::exp2: case LibFunc::exp2f: case LibFunc::exp2l: 7344fc7355a21e1fa838406e15459aaf54a58fcf909Richard Sandiford case LibFunc::memcmp: case LibFunc::strcmp: case LibFunc::strcpy: 73519262ee0725a09b7c621a3d2eb66ba1513ae932aRichard Sandiford case LibFunc::stpcpy: case LibFunc::strlen: case LibFunc::strnlen: 7368c20158fb0e1e5d747077f065eb0170c5af1fbfaRichard Sandiford case LibFunc::memchr: 737982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson return true; 738982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson } 739982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson return false; 740982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson } 741982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson 7429d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman StringRef getName(LibFunc::Func F) const { 7439d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman AvailabilityState State = getState(F); 7449d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman if (State == Unavailable) 7459d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman return StringRef(); 7469d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman if (State == StandardName) 7479d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman return StandardNames[F]; 7489d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman assert(State == CustomName); 7499d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman return CustomNames.find(F)->second; 750ce99120084f549a523213064648662a704e8b789Chris Lattner } 751ce99120084f549a523213064648662a704e8b789Chris Lattner 752ce99120084f549a523213064648662a704e8b789Chris Lattner /// setUnavailable - this can be used by whatever sets up TargetLibraryInfo to 753ce99120084f549a523213064648662a704e8b789Chris Lattner /// ban use of specific library functions. 754ce99120084f549a523213064648662a704e8b789Chris Lattner void setUnavailable(LibFunc::Func F) { 7559d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman setState(F, Unavailable); 756ce99120084f549a523213064648662a704e8b789Chris Lattner } 757ce99120084f549a523213064648662a704e8b789Chris Lattner 758ce99120084f549a523213064648662a704e8b789Chris Lattner void setAvailable(LibFunc::Func F) { 7599d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman setState(F, StandardName); 760ce99120084f549a523213064648662a704e8b789Chris Lattner } 7619d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman 7629d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman void setAvailableWithName(LibFunc::Func F, StringRef Name) { 7639d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman if (StandardNames[F] != Name) { 7649d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman setState(F, CustomName); 7659d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman CustomNames[F] = Name; 7669d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman assert(CustomNames.find(F) != CustomNames.end()); 7679d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman } else { 7689d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman setState(F, StandardName); 7699d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman } 7709d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman } 7719d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman 772188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner /// disableAllFunctions - This disables all builtins, which is used for 773188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner /// options like -fno-builtin. 774188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner void disableAllFunctions(); 775ce99120084f549a523213064648662a704e8b789Chris Lattner}; 776ce99120084f549a523213064648662a704e8b789Chris Lattner 777ce99120084f549a523213064648662a704e8b789Chris Lattner} // end namespace llvm 778ce99120084f549a523213064648662a704e8b789Chris Lattner 779ce99120084f549a523213064648662a704e8b789Chris Lattner#endif 780