From 8839ff95dfcd9f62120244c94270db086959b52f Mon Sep 17 00:00:00 2001 From: "Kevin P. Fleming" Date: Tue, 1 Nov 2005 20:09:09 +0000 Subject: add new GCC-specific macro and force inlining of certain functions where speed is paramount, even when optimization is disabled git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6929 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- ChangeLog | 9 +++++++++ include/asterisk/compiler.h | 6 ++++++ include/asterisk/strings.h | 2 +- include/asterisk/time.h | 9 --------- include/asterisk/utils.h | 26 +++++++++++++------------- 5 files changed, 29 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index e2dcf428b..bb182b673 100755 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2005-11-01 Kevin P. Fleming + + * include/asterisk/utils.h (ast_slinear_saturated_add): force to be inlined whenever possible + (ast_slinear_saturated_multiply): same + (ast_slinear_saturated_divide): same + (inaddrcmp): same + * include/asterisk/strings.h (ast_strlen_zero): force to be inlined whenever possible + * include/asterisk/compiler.h (force_inline): add macro to force inlining of functions + 2005-11-01 Kevin P. Fleming * Asterisk 1.2.0-beta2 released. diff --git a/include/asterisk/compiler.h b/include/asterisk/compiler.h index f436f4cb4..62564c91c 100755 --- a/include/asterisk/compiler.h +++ b/include/asterisk/compiler.h @@ -27,4 +27,10 @@ #define __builtin_expect(exp, c) (exp) #endif +#ifdef __GNUC__ +#define force_inline inline __attribute__((always_inline)) +#else +#define force_inline inline +#endif + #endif /* _ASTERISK_COMPILER_H */ diff --git a/include/asterisk/strings.h b/include/asterisk/strings.h index 370d4281c..13ecb3a5f 100755 --- a/include/asterisk/strings.h +++ b/include/asterisk/strings.h @@ -30,7 +30,7 @@ #include "asterisk/compiler.h" #include "asterisk/compat.h" -static inline int ast_strlen_zero(const char *s) +static force_inline int ast_strlen_zero(const char *s) { return (!s || (*s == '\0')); } diff --git a/include/asterisk/time.h b/include/asterisk/time.h index c957cb142..8132e9cd1 100755 --- a/include/asterisk/time.h +++ b/include/asterisk/time.h @@ -118,15 +118,6 @@ struct timeval ast_tvsub(struct timeval a, struct timeval b); /*! * \brief Returns a timeval from sec, usec */ -#if 0 -AST_INLINE_API( -struct timeval ast_tv(int sec, int usec), -{ - struct timeval t = { sec, usec}; - return t; -} -) -#endif AST_INLINE_API( struct timeval ast_tv(ast_time_t sec, ast_suseconds_t usec), { diff --git a/include/asterisk/utils.h b/include/asterisk/utils.h index 92a228aae..8eed095f0 100755 --- a/include/asterisk/utils.h +++ b/include/asterisk/utils.h @@ -138,14 +138,14 @@ struct ast_hostent { char buf[1024]; }; -extern struct hostent *ast_gethostbyname(const char *host, struct ast_hostent *hp); +struct hostent *ast_gethostbyname(const char *host, struct ast_hostent *hp); /* ast_md5_hash \brief Produces MD5 hash based on input string */ -extern void ast_md5_hash(char *output, char *input); +void ast_md5_hash(char *output, char *input); -extern int ast_base64encode(char *dst, const unsigned char *src, int srclen, int max); -extern int ast_base64decode(unsigned char *dst, const char *src, int max); +int ast_base64encode(char *dst, const unsigned char *src, int srclen, int max); +int ast_base64decode(unsigned char *dst, const char *src, int max); /*! ast_uri_encode \brief Turn text string to URI-encoded %XX version @@ -169,7 +169,7 @@ char *ast_uri_encode(char *string, char *outbuf, int buflen, int doreserved); */ void ast_uri_decode(char *s); -static inline void ast_slinear_saturated_add(short *input, short *value) +static force_inline void ast_slinear_saturated_add(short *input, short *value) { int res; @@ -182,7 +182,7 @@ static inline void ast_slinear_saturated_add(short *input, short *value) *input = (short) res; } -static inline void ast_slinear_saturated_multiply(short *input, short *value) +static force_inline void ast_slinear_saturated_multiply(short *input, short *value) { int res; @@ -195,25 +195,25 @@ static inline void ast_slinear_saturated_multiply(short *input, short *value) *input = (short) res; } -static inline void ast_slinear_saturated_divide(short *input, short *value) +static force_inline void ast_slinear_saturated_divide(short *input, short *value) { *input /= *value; } -extern int test_for_thread_safety(void); +int test_for_thread_safety(void); -extern const char *ast_inet_ntoa(char *buf, int bufsiz, struct in_addr ia); +const char *ast_inet_ntoa(char *buf, int bufsiz, struct in_addr ia); #ifdef inet_ntoa #undef inet_ntoa #endif #define inet_ntoa __dont__use__inet_ntoa__use__ast_inet_ntoa__instead__ -extern int ast_utils_init(void); -extern int ast_wait_for_input(int fd, int ms); +int ast_utils_init(void); +int ast_wait_for_input(int fd, int ms); /*! Compares the source address and port of two sockaddr_in */ -static inline int inaddrcmp(const struct sockaddr_in *sin1, const struct sockaddr_in *sin2) +static force_inline int inaddrcmp(const struct sockaddr_in *sin1, const struct sockaddr_in *sin2) { return ((sin1->sin_addr.s_addr != sin2->sin_addr.s_addr) || (sin1->sin_port != sin2->sin_port)); @@ -221,7 +221,7 @@ static inline int inaddrcmp(const struct sockaddr_in *sin1, const struct sockadd #define AST_STACKSIZE 256 * 1024 #define ast_pthread_create(a,b,c,d) ast_pthread_create_stack(a,b,c,d,0) -extern int ast_pthread_create_stack(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *data, size_t stacksize); +int ast_pthread_create_stack(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *data, size_t stacksize); /*! \brief Process a string to find and replace characters -- cgit v1.2.3