TargetLibraryInfo.h revision f8e021ce4621688f8f57bf98302cba23f5d7e0f1
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 16f8e021ce4621688f8f57bf98302cba23f5d7e0f1Stephen Hines// BEGIN ANDROID-SPECIFIC 17f8e021ce4621688f8f57bf98302cba23f5d7e0f1Stephen Hines#ifdef WIN32 18f8e021ce4621688f8f57bf98302cba23f5d7e0f1Stephen Hines#ifdef fseeko 19f8e021ce4621688f8f57bf98302cba23f5d7e0f1Stephen Hines#undef fseeko 20f8e021ce4621688f8f57bf98302cba23f5d7e0f1Stephen Hines#endif 21f8e021ce4621688f8f57bf98302cba23f5d7e0f1Stephen Hines#ifdef ftello 22f8e021ce4621688f8f57bf98302cba23f5d7e0f1Stephen Hines#undef ftello 23f8e021ce4621688f8f57bf98302cba23f5d7e0f1Stephen Hines#endif 24f8e021ce4621688f8f57bf98302cba23f5d7e0f1Stephen Hines#endif // WIN32 25f8e021ce4621688f8f57bf98302cba23f5d7e0f1Stephen Hines// END ANDROID-SPECIFIC 26f8e021ce4621688f8f57bf98302cba23f5d7e0f1Stephen Hines 27ce99120084f549a523213064648662a704e8b789Chris Lattnernamespace llvm { 28ce99120084f549a523213064648662a704e8b789Chris Lattner class Triple; 29ce99120084f549a523213064648662a704e8b789Chris Lattner 30ce99120084f549a523213064648662a704e8b789Chris Lattner namespace LibFunc { 31ce99120084f549a523213064648662a704e8b789Chris Lattner enum Func { 32cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int _IO_getc(_IO_FILE * __fp); 33cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge under_IO_getc, 34cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int _IO_putc(int __c, _IO_FILE * __fp); 35cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge under_IO_putc, 368e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void operator delete[](void*); 378e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer ZdaPv, 3872c8331ec1437f8c33fff1dac1ea0ebb11009411Richard Smith /// void operator delete[](void*, nothrow); 3972c8331ec1437f8c33fff1dac1ea0ebb11009411Richard Smith ZdaPvRKSt9nothrow_t, 408e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void operator delete(void*); 418e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer ZdlPv, 4272c8331ec1437f8c33fff1dac1ea0ebb11009411Richard Smith /// void operator delete(void*, nothrow); 4372c8331ec1437f8c33fff1dac1ea0ebb11009411Richard Smith ZdlPvRKSt9nothrow_t, 448e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *new[](unsigned int); 458e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer Znaj, 468e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *new[](unsigned int, nothrow); 478e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer ZnajRKSt9nothrow_t, 488e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *new[](unsigned long); 498e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer Znam, 508e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *new[](unsigned long, nothrow); 518e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer ZnamRKSt9nothrow_t, 528e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *new(unsigned int); 538e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer Znwj, 548e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *new(unsigned int, nothrow); 558e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer ZnwjRKSt9nothrow_t, 568e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *new(unsigned long); 578e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer Znwm, 588e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *new(unsigned long, nothrow); 598e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer ZnwmRKSt9nothrow_t, 60208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson /// double __cospi(double x); 61208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson cospi, 62208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson /// float __cospif(float x); 63208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson cospif, 64d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// int __cxa_atexit(void (*f)(void *), void *p, void *d); 65d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson cxa_atexit, 66d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// void __cxa_guard_abort(guard_t *guard); 67d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// guard_t is int64_t in Itanium ABI or int32_t on ARM eabi. 68d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson cxa_guard_abort, 69d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// int __cxa_guard_acquire(guard_t *guard); 70d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson cxa_guard_acquire, 71d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// void __cxa_guard_release(guard_t *guard); 72d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson cxa_guard_release, 73cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int __isoc99_scanf (const char *format, ...) 74cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge dunder_isoc99_scanf, 75cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int __isoc99_sscanf(const char *s, const char *format, ...) 76cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge dunder_isoc99_sscanf, 77d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// void *__memcpy_chk(void *s1, const void *s2, size_t n, size_t s1size); 78d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson memcpy_chk, 79208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson /// double __sincospi_stret(double x); 80208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson sincospi_stret, 8136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// float __sincospif_stret(float x); 8236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines sincospif_stret, 83208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson /// double __sinpi(double x); 84208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson sinpi, 85208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson /// float __sinpif(float x); 86208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson sinpif, 87b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd /// double __sqrt_finite(double x); 88b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd sqrt_finite, 89b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd /// float __sqrt_finite(float x); 90b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd sqrtf_finite, 91b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd /// long double __sqrt_finite(long double x); 92b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd sqrtl_finite, 93cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char * __strdup(const char *s); 94cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge dunder_strdup, 95cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char *__strndup(const char *s, size_t n); 96cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge dunder_strndup, 97cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char * __strtok_r(char *s, const char *delim, char **save_ptr); 98cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge dunder_strtok_r, 996098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int abs(int j); 1006098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge abs, 101cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int access(const char *path, int amode); 102cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge access, 1038ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double acos(double x); 1048ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier acos, 1058ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float acosf(float x); 1068ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier acosf, 1076871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// double acosh(double x); 1086871d1eceba0455707de29708c36ae3c2778c160Chad Rosier acosh, 1096871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// float acoshf(float x); 1106871d1eceba0455707de29708c36ae3c2778c160Chad Rosier acoshf, 1116871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// long double acoshl(long double x); 1126871d1eceba0455707de29708c36ae3c2778c160Chad Rosier acoshl, 113d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double acosl(long double x); 114d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson acosl, 1158ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double asin(double x); 1168ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier asin, 1178ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float asinf(float x); 1188ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier asinf, 1196871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// double asinh(double x); 1206871d1eceba0455707de29708c36ae3c2778c160Chad Rosier asinh, 1216871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// float asinhf(float x); 1226871d1eceba0455707de29708c36ae3c2778c160Chad Rosier asinhf, 1236871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// long double asinhl(long double x); 1246871d1eceba0455707de29708c36ae3c2778c160Chad Rosier asinhl, 125d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double asinl(long double x); 126d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson asinl, 1278ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double atan(double x); 1288ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier atan, 12932b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// double atan2(double y, double x); 13032b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier atan2, 13132b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// float atan2f(float y, float x); 13232b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier atan2f, 133d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double atan2l(long double y, long double x); 134d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson atan2l, 135d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// float atanf(float x); 136d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson atanf, 1376871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// double atanh(double x); 1386871d1eceba0455707de29708c36ae3c2778c160Chad Rosier atanh, 1396871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// float atanhf(float x); 1406871d1eceba0455707de29708c36ae3c2778c160Chad Rosier atanhf, 1416871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// long double atanhl(long double x); 1426871d1eceba0455707de29708c36ae3c2778c160Chad Rosier atanhl, 143d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double atanl(long double x); 144d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson atanl, 145cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// double atof(const char *str); 146cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge atof, 147cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int atoi(const char *str); 148cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge atoi, 149cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// long atol(const char *str); 150cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge atol, 151cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// long long atoll(const char *nptr); 152cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge atoll, 153cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int bcmp(const void *s1, const void *s2, size_t n); 154cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge bcmp, 155cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void bcopy(const void *s1, void *s2, size_t n); 156cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge bcopy, 157cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void bzero(void *s, size_t n); 158cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge bzero, 1598e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *calloc(size_t count, size_t size); 1608e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer calloc, 1616871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// double cbrt(double x); 1626871d1eceba0455707de29708c36ae3c2778c160Chad Rosier cbrt, 1636871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// float cbrtf(float x); 1646871d1eceba0455707de29708c36ae3c2778c160Chad Rosier cbrtf, 1656871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// long double cbrtl(long double x); 1666871d1eceba0455707de29708c36ae3c2778c160Chad Rosier cbrtl, 1678ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double ceil(double x); 1688ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier ceil, 1698ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float ceilf(float x); 1708ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier ceilf, 171d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double ceill(long double x); 172d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson ceill, 173cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int chmod(const char *path, mode_t mode); 174cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge chmod, 175cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int chown(const char *path, uid_t owner, gid_t group); 176cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge chown, 177cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void clearerr(FILE *stream); 178cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge clearerr, 179cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int closedir(DIR *dirp); 180cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge closedir, 181243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// double copysign(double x, double y); 182243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson copysign, 183243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// float copysignf(float x, float y); 184243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson copysignf, 185243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// long double copysignl(long double x, long double y); 186243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson copysignl, 1878ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double cos(double x); 1888ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier cos, 1898ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float cosf(float x); 1908ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier cosf, 1918ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double cosh(double x); 1928ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier cosh, 1938ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float coshf(float x); 1948ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier coshf, 195d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double coshl(long double x); 196d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson coshl, 197d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double cosl(long double x); 198d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson cosl, 199cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char *ctermid(char *s); 200cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ctermid, 2018ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double exp(double x); 2028ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier exp, 2036871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// double exp10(double x); 2046871d1eceba0455707de29708c36ae3c2778c160Chad Rosier exp10, 2056871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// float exp10f(float x); 2066871d1eceba0455707de29708c36ae3c2778c160Chad Rosier exp10f, 2076871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// long double exp10l(long double x); 2086871d1eceba0455707de29708c36ae3c2778c160Chad Rosier exp10l, 2098ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double exp2(double x); 2108ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier exp2, 2118ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float exp2f(float x); 2128ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier exp2f, 213d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double exp2l(long double x); 214d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson exp2l, 215d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// float expf(float x); 216d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson expf, 217d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double expl(long double x); 218d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson expl, 2198ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double expm1(double x); 2208ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier expm1, 2218ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float expm1f(float x); 222d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff expm1f, 223d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double expm1l(long double x); 224d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson expm1l, 2258ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double fabs(double x); 2268ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier fabs, 2278ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float fabsf(float x); 2288ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier fabsf, 229d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double fabsl(long double x); 230d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson fabsl, 231cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fclose(FILE *stream); 232cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fclose, 233cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// FILE *fdopen(int fildes, const char *mode); 234cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fdopen, 235cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int feof(FILE *stream); 236cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge feof, 237cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int ferror(FILE *stream); 238cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ferror, 239cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fflush(FILE *stream); 240cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fflush, 2416098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int ffs(int i); 2426098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge ffs, 2436098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int ffsl(long int i); 2446098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge ffsl, 2456098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int ffsll(long long int i); 2466098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge ffsll, 247cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fgetc(FILE *stream); 248cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fgetc, 249cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fgetpos(FILE *stream, fpos_t *pos); 250cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fgetpos, 251cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char *fgets(char *s, int n, FILE *stream); 252cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fgets, 253cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fileno(FILE *stream); 254cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fileno, 255d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// int fiprintf(FILE *stream, const char *format, ...); 256d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson fiprintf, 257cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void flockfile(FILE *file); 258cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge flockfile, 2598ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double floor(double x); 2608ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier floor, 2618ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float floorf(float x); 2628ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier floorf, 263d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double floorl(long double x); 264d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson floorl, 26536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// double fmax(double x, double y); 26636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines fmax, 26736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// float fmaxf(float x, float y); 26836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines fmaxf, 26936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// long double fmaxl(long double x, long double y); 27036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines fmaxl, 27136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// double fmin(double x, double y); 27236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines fmin, 27336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// float fminf(float x, float y); 27436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines fminf, 27536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// long double fminl(long double x, long double y); 27636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines fminl, 27732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// double fmod(double x, double y); 27832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier fmod, 27932b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// float fmodf(float x, float y); 28032b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier fmodf, 281d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double fmodl(long double x, long double y); 282d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson fmodl, 283cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// FILE *fopen(const char *filename, const char *mode); 284cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fopen, 285cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// FILE *fopen64(const char *filename, const char *opentype) 286cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fopen64, 2876098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int fprintf(FILE *stream, const char *format, ...); 2886098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge fprintf, 2898d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes /// int fputc(int c, FILE *stream); 2908d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes fputc, 291683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier /// int fputs(const char *s, FILE *stream); 292683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier fputs, 293cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream); 294cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fread, 2958e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void free(void *ptr); 2968e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer free, 297cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// double frexp(double num, int *exp); 298cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge frexp, 299cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// float frexpf(float num, int *exp); 300cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge frexpf, 301cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// long double frexpl(long double num, int *exp); 302cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge frexpl, 303cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fscanf(FILE *stream, const char *format, ... ); 304cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fscanf, 305cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fseek(FILE *stream, long offset, int whence); 306cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fseek, 307cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fseeko(FILE *stream, off_t offset, int whence); 308cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fseeko, 309cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fseeko64(FILE *stream, off64_t offset, int whence) 310cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fseeko64, 311cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fsetpos(FILE *stream, const fpos_t *pos); 312cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fsetpos, 313cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fstat(int fildes, struct stat *buf); 314cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fstat, 315cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fstat64(int filedes, struct stat64 *buf) 316cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fstat64, 317cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fstatvfs(int fildes, struct statvfs *buf); 318cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fstatvfs, 319cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int fstatvfs64(int fildes, struct statvfs64 *buf); 320cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge fstatvfs64, 321cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// long ftell(FILE *stream); 322cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ftell, 323cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// off_t ftello(FILE *stream); 324cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ftello, 325cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// off64_t ftello64(FILE *stream) 326cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ftello64, 327cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int ftrylockfile(FILE *file); 328cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ftrylockfile, 329cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void funlockfile(FILE *file); 330cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge funlockfile, 331683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier /// size_t fwrite(const void *ptr, size_t size, size_t nitems, 332683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier /// FILE *stream); 333683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier fwrite, 334cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int getc(FILE *stream); 335cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge getc, 336cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int getc_unlocked(FILE *stream); 337cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge getc_unlocked, 338cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int getchar(void); 339cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge getchar, 340cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char *getenv(const char *name); 341cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge getenv, 342cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int getitimer(int which, struct itimerval *value); 343cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge getitimer, 344cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int getlogin_r(char *name, size_t namesize); 345cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge getlogin_r, 346cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// struct passwd *getpwnam(const char *name); 347cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge getpwnam, 348cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char *gets(char *s); 349cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge gets, 350f0f85eab0469ac93f9bb6c7d19aca2c35868d83aMichael Gottesman /// int gettimeofday(struct timeval *tp, void *tzp); 351f0f85eab0469ac93f9bb6c7d19aca2c35868d83aMichael Gottesman gettimeofday, 352cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// uint32_t htonl(uint32_t hostlong); 353cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge htonl, 354cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// uint16_t htons(uint16_t hostshort); 355cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge htons, 356683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier /// int iprintf(const char *format, ...); 357683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier iprintf, 3586098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int isascii(int c); 3596098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge isascii, 3606098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int isdigit(int c); 3616098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge isdigit, 3626098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// long int labs(long int j); 3636098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge labs, 364cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int lchown(const char *path, uid_t owner, gid_t group); 365cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge lchown, 36636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// double ldexp(double x, int n); 36736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ldexp, 36836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// float ldexpf(float x, int n); 36936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ldexpf, 37036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// long double ldexpl(long double x, int n); 37136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ldexpl, 3726098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// long long int llabs(long long int j); 3736098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge llabs, 3748ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double log(double x); 3758ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier log, 3768ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double log10(double x); 3778ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier log10, 3788ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float log10f(float x); 3798ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier log10f, 380d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double log10l(long double x); 381d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson log10l, 3828ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double log1p(double x); 3838ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier log1p, 3848ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float log1pf(float x); 3858ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier log1pf, 386d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double log1pl(long double x); 387d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson log1pl, 388d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// double log2(double x); 389d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson log2, 390d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// float log2f(float x); 391d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson log2f, 392d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// double long double log2l(long double x); 393d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson log2l, 3946871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// double logb(double x); 3956871d1eceba0455707de29708c36ae3c2778c160Chad Rosier logb, 3966871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// float logbf(float x); 3976871d1eceba0455707de29708c36ae3c2778c160Chad Rosier logbf, 3986871d1eceba0455707de29708c36ae3c2778c160Chad Rosier /// long double logbl(long double x); 3996871d1eceba0455707de29708c36ae3c2778c160Chad Rosier logbl, 400d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// float logf(float x); 401d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson logf, 402d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double logl(long double x); 403d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson logl, 404cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int lstat(const char *path, struct stat *buf); 405cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge lstat, 406cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int lstat64(const char *path, struct stat64 *buf); 407cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge lstat64, 4088e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *malloc(size_t size); 4098e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer malloc, 410cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void *memalign(size_t boundary, size_t size); 411cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge memalign, 412cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void *memccpy(void *s1, const void *s2, int c, size_t n); 413cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge memccpy, 4148d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes /// void *memchr(const void *s, int c, size_t n); 4158d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes memchr, 4168d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes /// int memcmp(const void *s1, const void *s2, size_t n); 4178d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes memcmp, 418683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier /// void *memcpy(void *s1, const void *s2, size_t n); 419398c0d8b7417dedbe244020ffb67abb54aaa1c59Chris Lattner memcpy, 420683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier /// void *memmove(void *s1, const void *s2, size_t n); 421149f5283f93ec85b96888c284f56099a72cc2731Chris Lattner memmove, 422cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge // void *memrchr(const void *s, int c, size_t n); 423cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge memrchr, 424683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier /// void *memset(void *b, int c, size_t len); 425683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier memset, 426ce99120084f549a523213064648662a704e8b789Chris Lattner /// void memset_pattern16(void *b, const void *pattern16, size_t len); 427ce99120084f549a523213064648662a704e8b789Chris Lattner memset_pattern16, 428cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int mkdir(const char *path, mode_t mode); 429cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge mkdir, 430cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// time_t mktime(struct tm *timeptr); 431cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge mktime, 432cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// double modf(double x, double *iptr); 433cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge modf, 434cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// float modff(float, float *iptr); 435cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge modff, 436cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// long double modfl(long double value, long double *iptr); 437cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge modfl, 438243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// double nearbyint(double x); 439243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson nearbyint, 440243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// float nearbyintf(float x); 441243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson nearbyintf, 442243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// long double nearbyintl(long double x); 443243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson nearbyintl, 444cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// uint32_t ntohl(uint32_t netlong); 445cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ntohl, 446cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// uint16_t ntohs(uint16_t netshort); 447cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ntohs, 448cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int open(const char *path, int oflag, ... ); 449cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge open, 450cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int open64(const char *filename, int flags[, mode_t mode]) 451cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge open64, 452cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// DIR *opendir(const char *dirname); 453cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge opendir, 454cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int pclose(FILE *stream); 455cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge pclose, 456cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void perror(const char *s); 457cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge perror, 458cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// FILE *popen(const char *command, const char *mode); 459cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge popen, 4608e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// int posix_memalign(void **memptr, size_t alignment, size_t size); 4618e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer posix_memalign, 4628ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// double pow(double x, double y); 4638ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier pow, 4648ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// float powf(float x, float y); 4658ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier powf, 4668ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier /// long double powl(long double x, long double y); 4678ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier powl, 468cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset); 469cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge pread, 4706098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int printf(const char *format, ...); 4716098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge printf, 472cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int putc(int c, FILE *stream); 473cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge putc, 4748d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes /// int putchar(int c); 4758d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes putchar, 4768d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes /// int puts(const char *s); 4778d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes puts, 478cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// ssize_t pwrite(int fildes, const void *buf, size_t nbyte, 479cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// off_t offset); 480cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge pwrite, 481cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void qsort(void *base, size_t nel, size_t width, 482cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int (*compar)(const void *, const void *)); 483cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge qsort, 484cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// ssize_t read(int fildes, void *buf, size_t nbyte); 485cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge read, 486cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// ssize_t readlink(const char *path, char *buf, size_t bufsize); 487cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge readlink, 4888e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *realloc(void *ptr, size_t size); 4898e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer realloc, 4908e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *reallocf(void *ptr, size_t size); 4918e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer reallocf, 492cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char *realpath(const char *file_name, char *resolved_name); 493cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge realpath, 494cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int remove(const char *path); 495cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge remove, 496cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int rename(const char *old, const char *new); 497cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge rename, 498cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void rewind(FILE *stream); 499cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge rewind, 500243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// double rint(double x); 501243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson rint, 502243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// float rintf(float x); 503243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson rintf, 504d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff /// long double rintl(long double x); 505243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson rintl, 506cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int rmdir(const char *path); 507cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge rmdir, 508d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff /// double round(double x); 509d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff round, 510d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff /// float roundf(float x); 511d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff roundf, 512d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff /// long double roundl(long double x); 513d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff roundl, 514cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int scanf(const char *restrict format, ... ); 515cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge scanf, 516cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// void setbuf(FILE *stream, char *buf); 517cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge setbuf, 518cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int setitimer(int which, const struct itimerval *value, 519cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// struct itimerval *ovalue); 520cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge setitimer, 521cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int setvbuf(FILE *stream, char *buf, int type, size_t size); 522cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge setvbuf, 52332b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// double sin(double x); 52432b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier sin, 52532b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// float sinf(float x); 52632b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier sinf, 52732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// double sinh(double x); 52832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier sinh, 52932b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// float sinhf(float x); 53032b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier sinhf, 531d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double sinhl(long double x); 532d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson sinhl, 533d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double sinl(long double x); 534d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson sinl, 535419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne /// int siprintf(char *str, const char *format, ...); 536419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne siprintf, 537cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int snprintf(char *s, size_t n, const char *format, ...); 538cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge snprintf, 5396098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int sprintf(char *str, const char *format, ...); 5406098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge sprintf, 5413d925d24e8c54cde05228258c25cc21687cad922Chad Rosier /// double sqrt(double x); 5423d925d24e8c54cde05228258c25cc21687cad922Chad Rosier sqrt, 5433d925d24e8c54cde05228258c25cc21687cad922Chad Rosier /// float sqrtf(float x); 5443d925d24e8c54cde05228258c25cc21687cad922Chad Rosier sqrtf, 545d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double sqrtl(long double x); 546d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson sqrtl, 547cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int sscanf(const char *s, const char *format, ... ); 548cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge sscanf, 549cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int stat(const char *path, struct stat *buf); 550cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge stat, 551cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int stat64(const char *path, struct stat64 *buf); 552cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge stat64, 553cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int statvfs(const char *path, struct statvfs *buf); 554cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge statvfs, 555cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int statvfs64(const char *path, struct statvfs64 *buf) 556cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge statvfs64, 557939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// char *stpcpy(char *s1, const char *s2); 558939f5002027e3ccb710ac1c3050dc25471251565Meador Inge stpcpy, 559cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// char *stpncpy(char *s1, const char *s2, size_t n); 560cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge stpncpy, 561cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int strcasecmp(const char *s1, const char *s2); 562cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge strcasecmp, 5630841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes /// char *strcat(char *s1, const char *s2); 5640841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes strcat, 5658d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes /// char *strchr(const char *s, int c); 5668d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes strchr, 567939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// int strcmp(const char *s1, const char *s2); 568939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strcmp, 569cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int strcoll(const char *s1, const char *s2); 570cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge strcoll, 5710841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes /// char *strcpy(char *s1, const char *s2); 5720841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes strcpy, 573939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// size_t strcspn(const char *s1, const char *s2); 574939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strcspn, 5758e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// char *strdup(const char *s1); 5768e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer strdup, 5770841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes /// size_t strlen(const char *s); 5780841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes strlen, 579cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int strncasecmp(const char *s1, const char *s2, size_t n); 580cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge strncasecmp, 5810841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes /// char *strncat(char *s1, const char *s2, size_t n); 5820841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes strncat, 5838d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes /// int strncmp(const char *s1, const char *s2, size_t n); 5848d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes strncmp, 5850841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes /// char *strncpy(char *s1, const char *s2, size_t n); 5860841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes strncpy, 5878e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// char *strndup(const char *s1, size_t n); 5888e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer strndup, 5890841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes /// size_t strnlen(const char *s, size_t maxlen); 5900841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes strnlen, 591939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// char *strpbrk(const char *s1, const char *s2); 592939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strpbrk, 593939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// char *strrchr(const char *s, int c); 594939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strrchr, 595939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// size_t strspn(const char *s1, const char *s2); 596939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strspn, 597939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// char *strstr(const char *s1, const char *s2); 598939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strstr, 599939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// double strtod(const char *nptr, char **endptr); 600939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strtod, 601939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// float strtof(const char *nptr, char **endptr); 602939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strtof, 603cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge // char *strtok(char *s1, const char *s2); 604cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge strtok, 605cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge // char *strtok_r(char *s, const char *sep, char **lasts); 606cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge strtok_r, 607939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// long int strtol(const char *nptr, char **endptr, int base); 608939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strtol, 609939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// long double strtold(const char *nptr, char **endptr); 610939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strtold, 611939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// long long int strtoll(const char *nptr, char **endptr, int base); 612939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strtoll, 613939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// unsigned long int strtoul(const char *nptr, char **endptr, int base); 614939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strtoul, 615939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// unsigned long long int strtoull(const char *nptr, char **endptr, 616939f5002027e3ccb710ac1c3050dc25471251565Meador Inge /// int base); 617939f5002027e3ccb710ac1c3050dc25471251565Meador Inge strtoull, 618cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// size_t strxfrm(char *s1, const char *s2, size_t n); 619cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge strxfrm, 620cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int system(const char *command); 621cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge system, 62232b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// double tan(double x); 62332b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier tan, 62432b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// float tanf(float x); 62532b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier tanf, 62632b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// double tanh(double x); 62732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier tanh, 62832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier /// float tanhf(float x); 62932b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier tanhf, 630d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double tanhl(long double x); 631d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson tanhl, 632d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// long double tanl(long double x); 633d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson tanl, 634cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// clock_t times(struct tms *buffer); 635cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge times, 636cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// FILE *tmpfile(void); 637cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge tmpfile, 638cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// FILE *tmpfile64(void) 639cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge tmpfile64, 6406098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge /// int toascii(int c); 6416098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge toascii, 642243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// double trunc(double x); 643243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson trunc, 644243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// float truncf(float x); 645243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson truncf, 646243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson /// long double truncl(long double x); 647243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson truncl, 648cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int uname(struct utsname *name); 649cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge uname, 650cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int ungetc(int c, FILE *stream); 651cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge ungetc, 652cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int unlink(const char *path); 653cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge unlink, 654cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int unsetenv(const char *name); 655cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge unsetenv, 656cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int utime(const char *path, const struct utimbuf *times); 657cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge utime, 658cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int utimes(const char *path, const struct timeval times[2]); 659cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge utimes, 6608e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer /// void *valloc(size_t size); 6618e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer valloc, 662cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int vfprintf(FILE *stream, const char *format, va_list ap); 663cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge vfprintf, 664cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int vfscanf(FILE *stream, const char *format, va_list arg); 665cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge vfscanf, 666cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int vprintf(const char *restrict format, va_list ap); 667cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge vprintf, 668cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int vscanf(const char *format, va_list arg); 669cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge vscanf, 670cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int vsnprintf(char *s, size_t n, const char *format, va_list ap); 671cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge vsnprintf, 672cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int vsprintf(char *s, const char *format, va_list ap); 673cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge vsprintf, 674cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// int vsscanf(const char *s, const char *format, va_list arg); 675cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge vsscanf, 676cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge /// ssize_t write(int fildes, const void *buf, size_t nbyte); 677cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge write, 6789d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman 679ce99120084f549a523213064648662a704e8b789Chris Lattner NumLibFuncs 680ce99120084f549a523213064648662a704e8b789Chris Lattner }; 681ce99120084f549a523213064648662a704e8b789Chris Lattner } 682ce99120084f549a523213064648662a704e8b789Chris Lattner 683ce99120084f549a523213064648662a704e8b789Chris Lattner/// TargetLibraryInfo - This immutable pass captures information about what 684ce99120084f549a523213064648662a704e8b789Chris Lattner/// library functions are available for the current target, and allows a 685ce99120084f549a523213064648662a704e8b789Chris Lattner/// frontend to disable optimizations through -fno-builtin etc. 686ce99120084f549a523213064648662a704e8b789Chris Lattnerclass TargetLibraryInfo : public ImmutablePass { 6872d24e2a396a1d211baaeedf32148a3b657240170David Blaikie virtual void anchor(); 6889d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman unsigned char AvailableArray[(LibFunc::NumLibFuncs+3)/4]; 6899d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman llvm::DenseMap<unsigned, std::string> CustomNames; 6909d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman static const char* StandardNames[LibFunc::NumLibFuncs]; 6919d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman 6929d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman enum AvailabilityState { 6939d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman StandardName = 3, // (memset to all ones) 6949d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman CustomName = 1, 6959d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman Unavailable = 0 // (memset to all zeros) 6969d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman }; 6979d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman void setState(LibFunc::Func F, AvailabilityState State) { 6989d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman AvailableArray[F/4] &= ~(3 << 2*(F&3)); 6999d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman AvailableArray[F/4] |= State << 2*(F&3); 7009d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman } 7019d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman AvailabilityState getState(LibFunc::Func F) const { 7029d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman return static_cast<AvailabilityState>((AvailableArray[F/4] >> 2*(F&3)) & 3); 7039d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman } 7049d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman 705ce99120084f549a523213064648662a704e8b789Chris Lattnerpublic: 706ce99120084f549a523213064648662a704e8b789Chris Lattner static char ID; 707ce99120084f549a523213064648662a704e8b789Chris Lattner TargetLibraryInfo(); 708ce99120084f549a523213064648662a704e8b789Chris Lattner TargetLibraryInfo(const Triple &T); 70940f5fbcc5c95bb96c43ce2d06d57ae9b7f852539Chris Lattner explicit TargetLibraryInfo(const TargetLibraryInfo &TLI); 710ce99120084f549a523213064648662a704e8b789Chris Lattner 711d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// getLibFunc - Search for a particular function name. If it is one of the 712d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson /// known library functions, return true and set F to the corresponding value. 713d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson bool getLibFunc(StringRef funcName, LibFunc::Func &F) const; 714d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson 715ce99120084f549a523213064648662a704e8b789Chris Lattner /// has - This function is used by optimizations that want to match on or form 716ce99120084f549a523213064648662a704e8b789Chris Lattner /// a given library function. 717ce99120084f549a523213064648662a704e8b789Chris Lattner bool has(LibFunc::Func F) const { 7189d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman return getState(F) != Unavailable; 7199d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman } 7209d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman 721982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson /// hasOptimizedCodeGen - Return true if the function is both available as 722982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson /// a builtin and a candidate for optimized code generation. 723982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson bool hasOptimizedCodeGen(LibFunc::Func F) const { 724982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson if (getState(F) == Unavailable) 725982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson return false; 726982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson switch (F) { 727982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson default: break; 728982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::copysign: case LibFunc::copysignf: case LibFunc::copysignl: 729982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::fabs: case LibFunc::fabsf: case LibFunc::fabsl: 730982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::sin: case LibFunc::sinf: case LibFunc::sinl: 731982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::cos: case LibFunc::cosf: case LibFunc::cosl: 732982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::sqrt: case LibFunc::sqrtf: case LibFunc::sqrtl: 733b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd case LibFunc::sqrt_finite: case LibFunc::sqrtf_finite: 734b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd case LibFunc::sqrtl_finite: 73536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case LibFunc::fmax: case LibFunc::fmaxf: case LibFunc::fmaxl: 73636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case LibFunc::fmin: case LibFunc::fminf: case LibFunc::fminl: 737982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::floor: case LibFunc::floorf: case LibFunc::floorl: 738982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::nearbyint: case LibFunc::nearbyintf: case LibFunc::nearbyintl: 739982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::ceil: case LibFunc::ceilf: case LibFunc::ceill: 740982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::rint: case LibFunc::rintf: case LibFunc::rintl: 74141418d17cced656f91038b2482bc9d173b4974b0Hal Finkel case LibFunc::round: case LibFunc::roundf: case LibFunc::roundl: 742982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::trunc: case LibFunc::truncf: case LibFunc::truncl: 743982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::log2: case LibFunc::log2f: case LibFunc::log2l: 744982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson case LibFunc::exp2: case LibFunc::exp2f: case LibFunc::exp2l: 7454fc7355a21e1fa838406e15459aaf54a58fcf909Richard Sandiford case LibFunc::memcmp: case LibFunc::strcmp: case LibFunc::strcpy: 74619262ee0725a09b7c621a3d2eb66ba1513ae932aRichard Sandiford case LibFunc::stpcpy: case LibFunc::strlen: case LibFunc::strnlen: 7478c20158fb0e1e5d747077f065eb0170c5af1fbfaRichard Sandiford case LibFunc::memchr: 748982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson return true; 749982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson } 750982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson return false; 751982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson } 752982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson 7539d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman StringRef getName(LibFunc::Func F) const { 7549d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman AvailabilityState State = getState(F); 7559d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman if (State == Unavailable) 7569d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman return StringRef(); 7579d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman if (State == StandardName) 7589d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman return StandardNames[F]; 7599d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman assert(State == CustomName); 7609d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman return CustomNames.find(F)->second; 761ce99120084f549a523213064648662a704e8b789Chris Lattner } 762ce99120084f549a523213064648662a704e8b789Chris Lattner 763ce99120084f549a523213064648662a704e8b789Chris Lattner /// setUnavailable - this can be used by whatever sets up TargetLibraryInfo to 764ce99120084f549a523213064648662a704e8b789Chris Lattner /// ban use of specific library functions. 765ce99120084f549a523213064648662a704e8b789Chris Lattner void setUnavailable(LibFunc::Func F) { 7669d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman setState(F, Unavailable); 767ce99120084f549a523213064648662a704e8b789Chris Lattner } 768ce99120084f549a523213064648662a704e8b789Chris Lattner 769ce99120084f549a523213064648662a704e8b789Chris Lattner void setAvailable(LibFunc::Func F) { 7709d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman setState(F, StandardName); 771ce99120084f549a523213064648662a704e8b789Chris Lattner } 7729d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman 7739d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman void setAvailableWithName(LibFunc::Func F, StringRef Name) { 7749d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman if (StandardNames[F] != Name) { 7759d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman setState(F, CustomName); 7769d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman CustomNames[F] = Name; 7779d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman assert(CustomNames.find(F) != CustomNames.end()); 7789d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman } else { 7799d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman setState(F, StandardName); 7809d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman } 7819d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman } 7829d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman 783188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner /// disableAllFunctions - This disables all builtins, which is used for 784188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner /// options like -fno-builtin. 785188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner void disableAllFunctions(); 786ce99120084f549a523213064648662a704e8b789Chris Lattner}; 787ce99120084f549a523213064648662a704e8b789Chris Lattner 788ce99120084f549a523213064648662a704e8b789Chris Lattner} // end namespace llvm 789ce99120084f549a523213064648662a704e8b789Chris Lattner 790ce99120084f549a523213064648662a704e8b789Chris Lattner#endif 791