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
This commit is contained in:
Kevin P. Fleming
2005-11-01 20:09:09 +00:00
parent c24c35e5b6
commit 8839ff95df
5 changed files with 29 additions and 23 deletions

View File

@@ -1,3 +1,12 @@
2005-11-01 Kevin P. Fleming <kpfleming@digium.com>
* 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 <kpfleming@digium.com> 2005-11-01 Kevin P. Fleming <kpfleming@digium.com>
* Asterisk 1.2.0-beta2 released. * Asterisk 1.2.0-beta2 released.

View File

@@ -27,4 +27,10 @@
#define __builtin_expect(exp, c) (exp) #define __builtin_expect(exp, c) (exp)
#endif #endif
#ifdef __GNUC__
#define force_inline inline __attribute__((always_inline))
#else
#define force_inline inline
#endif
#endif /* _ASTERISK_COMPILER_H */ #endif /* _ASTERISK_COMPILER_H */

View File

@@ -30,7 +30,7 @@
#include "asterisk/compiler.h" #include "asterisk/compiler.h"
#include "asterisk/compat.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')); return (!s || (*s == '\0'));
} }

View File

@@ -118,15 +118,6 @@ struct timeval ast_tvsub(struct timeval a, struct timeval b);
/*! /*!
* \brief Returns a timeval from sec, usec * \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( AST_INLINE_API(
struct timeval ast_tv(ast_time_t sec, ast_suseconds_t usec), struct timeval ast_tv(ast_time_t sec, ast_suseconds_t usec),
{ {

View File

@@ -138,14 +138,14 @@ struct ast_hostent {
char buf[1024]; 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 /* ast_md5_hash
\brief Produces MD5 hash based on input string */ \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); 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_base64decode(unsigned char *dst, const char *src, int max);
/*! ast_uri_encode /*! ast_uri_encode
\brief Turn text string to URI-encoded %XX version \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); 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; int res;
@@ -182,7 +182,7 @@ static inline void ast_slinear_saturated_add(short *input, short *value)
*input = (short) res; *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; int res;
@@ -195,25 +195,25 @@ static inline void ast_slinear_saturated_multiply(short *input, short *value)
*input = (short) res; *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; *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 #ifdef inet_ntoa
#undef inet_ntoa #undef inet_ntoa
#endif #endif
#define inet_ntoa __dont__use__inet_ntoa__use__ast_inet_ntoa__instead__ #define inet_ntoa __dont__use__inet_ntoa__use__ast_inet_ntoa__instead__
extern int ast_utils_init(void); int ast_utils_init(void);
extern int ast_wait_for_input(int fd, int ms); int ast_wait_for_input(int fd, int ms);
/*! Compares the source address and port of two sockaddr_in */ /*! 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) return ((sin1->sin_addr.s_addr != sin2->sin_addr.s_addr)
|| (sin1->sin_port != sin2->sin_port)); || (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_STACKSIZE 256 * 1024
#define ast_pthread_create(a,b,c,d) ast_pthread_create_stack(a,b,c,d,0) #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 \brief Process a string to find and replace characters