From ffcf6757d6cf21d94bef73f3696fc3d13c294d0d Mon Sep 17 00:00:00 2001 From: MelwareDE Date: Thu, 12 Mar 2009 15:56:20 +0000 Subject: [PATCH] Runtime optimization --- chan_capi.c | 1 + chan_capi_chat.c | 1 + chan_capi_command.c | 1 + chan_capi_platform.h | 25 +++++++++++++++++++++++++ chan_capi_qsig_asn197ade.c | 3 ++- chan_capi_qsig_asn197no.c | 1 + chan_capi_qsig_core.c | 1 + chan_capi_qsig_ecma.c | 1 + chan_capi_rtp.c | 1 + chan_capi_supplementary.c | 1 + chan_capi_utils.c | 5 +++-- chan_capi_utils.h | 2 +- libcapi20/capi20.c | 26 ++++++++++++++++++-------- libcapi20/capi20_platform.h | 24 ++++++++++++++++++++++++ 14 files changed, 81 insertions(+), 12 deletions(-) create mode 100644 chan_capi_platform.h create mode 100644 libcapi20/capi20_platform.h diff --git a/chan_capi.c b/chan_capi.c index c6a5671..e223143 100644 --- a/chan_capi.c +++ b/chan_capi.c @@ -26,6 +26,7 @@ #include #include +#include "chan_capi_platform.h" #include "xlaw.h" #include "chan_capi20.h" #include "chan_capi.h" diff --git a/chan_capi_chat.c b/chan_capi_chat.c index 09c1207..b57c8e0 100644 --- a/chan_capi_chat.c +++ b/chan_capi_chat.c @@ -15,6 +15,7 @@ #include #include +#include "chan_capi_platform.h" #include "chan_capi20.h" #include "chan_capi.h" #include "chan_capi_chat.h" diff --git a/chan_capi_command.c b/chan_capi_command.c index 9cb9a04..1de717f 100644 --- a/chan_capi_command.c +++ b/chan_capi_command.c @@ -33,6 +33,7 @@ #include #include +#include "chan_capi_platform.h" #include "xlaw.h" #include "chan_capi20.h" #include "chan_capi.h" diff --git a/chan_capi_platform.h b/chan_capi_platform.h new file mode 100644 index 0000000..9025158 --- /dev/null +++ b/chan_capi_platform.h @@ -0,0 +1,25 @@ +#ifndef __CHAN_CAPI_PLATFORM_H__ +#define __CHAN_CAPI_PLATFORM_H__ + +#if __GNUC__ >= 3 /* { */ + +#ifndef likely +#define likely(x) __builtin_expect(!!(x), 1) +#endif +#ifndef unlikely +#define unlikely(x) __builtin_expect(!!(x), 0) +#endif + +#else /* } { */ + +#ifndef likely +#define likely(x) (!!(__x__)) +#endif +#ifndef unlikely +#define unlikely(__x__) (!!(__x__)) +#endif + +#endif /* } */ + +#endif + diff --git a/chan_capi_qsig_asn197ade.c b/chan_capi_qsig_asn197ade.c index 03244ae..14c8bf9 100644 --- a/chan_capi_qsig_asn197ade.c +++ b/chan_capi_qsig_asn197ade.c @@ -18,7 +18,8 @@ #include #include #include - + +#include "chan_capi_platform.h" #include "chan_capi20.h" #include "chan_capi.h" #include "chan_capi_utils.h" diff --git a/chan_capi_qsig_asn197no.c b/chan_capi_qsig_asn197no.c index 179a025..cc5dbba 100644 --- a/chan_capi_qsig_asn197no.c +++ b/chan_capi_qsig_asn197no.c @@ -19,6 +19,7 @@ #include #include +#include "chan_capi_platform.h" #include "chan_capi20.h" #include "chan_capi.h" #include "chan_capi_utils.h" diff --git a/chan_capi_qsig_core.c b/chan_capi_qsig_core.c index be0af31..984e9c9 100644 --- a/chan_capi_qsig_core.c +++ b/chan_capi_qsig_core.c @@ -15,6 +15,7 @@ #include #include +#include "chan_capi_platform.h" #include "chan_capi20.h" #include "chan_capi.h" #include "chan_capi_utils.h" diff --git a/chan_capi_qsig_ecma.c b/chan_capi_qsig_ecma.c index db1ec73..3cb2db8 100644 --- a/chan_capi_qsig_ecma.c +++ b/chan_capi_qsig_ecma.c @@ -15,6 +15,7 @@ #include #include +#include "chan_capi_platform.h" #include "chan_capi20.h" #include "chan_capi.h" #include "chan_capi_utils.h" diff --git a/chan_capi_rtp.c b/chan_capi_rtp.c index 8acfcb2..2d6805b 100644 --- a/chan_capi_rtp.c +++ b/chan_capi_rtp.c @@ -19,6 +19,7 @@ #include #include +#include "chan_capi_platform.h" #include "chan_capi20.h" #include "chan_capi.h" #include "chan_capi_rtp.h" diff --git a/chan_capi_supplementary.c b/chan_capi_supplementary.c index a6b0405..e2a5822 100644 --- a/chan_capi_supplementary.c +++ b/chan_capi_supplementary.c @@ -13,6 +13,7 @@ #include #include +#include "chan_capi_platform.h" #include "chan_capi20.h" #include "chan_capi.h" #include "chan_capi_supplementary.h" diff --git a/chan_capi_utils.c b/chan_capi_utils.c index 12b9b82..749f6aa 100644 --- a/chan_capi_utils.c +++ b/chan_capi_utils.c @@ -17,6 +17,7 @@ #include #include #include +#include "chan_capi_platform.h" #include "xlaw.h" #include "chan_capi20.h" #include "chan_capi.h" @@ -239,7 +240,7 @@ struct capi_pvt *capi_find_interface_by_plci(unsigned int plci) { struct capi_pvt *i; - if (plci == 0) + if (unlikely(plci == 0)) return NULL; for (i = capi_iflist; i; i = i->next) { @@ -435,7 +436,7 @@ MESSAGE_EXCHANGE_ERROR capi_sendf( va_start(ap, format); for (i = 0; format[i]; i++) { - if (((p - (&msg[0])) + 12) >= sizeof(msg)) { + if (unlikely(((p - (&msg[0])) + 12) >= sizeof(msg))) { cc_log(LOG_ERROR, "capi_sendf: message too big (%d)\n", (int)(p - (&msg[0]))); return 0x1004; diff --git a/chan_capi_utils.h b/chan_capi_utils.h index b5ec74b..9099023 100644 --- a/chan_capi_utils.h +++ b/chan_capi_utils.h @@ -21,7 +21,7 @@ extern char *emptyid; extern void cc_verbose_internal(char *text, ...); static inline int cc_verbose_check(int o_v, int c_d) { - if ((o_v == 0) || (option_verbose > o_v)) { + if (unlikely((o_v == 0) || (option_verbose > o_v))) { if ((!c_d) || ((c_d) && (capidebug))) { return (1); } diff --git a/libcapi20/capi20.c b/libcapi20/capi20.c index 756df6e..c694c28 100644 --- a/libcapi20/capi20.c +++ b/libcapi20/capi20.c @@ -25,6 +25,8 @@ #include #include #include + +#include "capi20_platform.h" #include "capi20.h" @@ -311,9 +313,17 @@ static void write_capi_trace(int send, unsigned char *buf, int length, int datam } } -unsigned capi20_isinstalled (void) +static inline unsigned capi20_isinstalled_internal(void) { - if (capi_fd >= 0) + if (likely(capi_fd >= 0)) + return CapiNoError; + + return (capi20_isinstalled()); +} + +unsigned capi20_isinstalled(void) +{ + if (likely(capi_fd >= 0)) return CapiNoError; /*----- open managment link -----*/ @@ -696,10 +706,10 @@ capi20_put_message (unsigned ApplID, unsigned char *Msg) int fd; int datareq = 0; - if (capi20_isinstalled() != CapiNoError) + if (capi20_isinstalled_internal() != CapiNoError) return CapiRegNotInstalled; - if (!validapplid(ApplID)) + if (unlikely(!validapplid(ApplID))) return CapiIllAppNr; fd = applid2fd(ApplID); @@ -797,10 +807,10 @@ capi20_get_message (unsigned ApplID, unsigned char **Buf) size_t bufsiz; int rc, fd; - if (capi20_isinstalled() != CapiNoError) + if (capi20_isinstalled_internal() != CapiNoError) return CapiRegNotInstalled; - if (!validapplid(ApplID)) + if (unlikely(!validapplid(ApplID))) return CapiIllAppNr; fd = applid2fd(ApplID); @@ -1009,10 +1019,10 @@ capi20_waitformessage(unsigned ApplID, struct timeval *TimeOut) FD_ZERO(&rfds); - if (capi20_isinstalled() != CapiNoError) + if (capi20_isinstalled_internal() != CapiNoError) return CapiRegNotInstalled; - if (!validapplid(ApplID)) + if (unlikely(!validapplid(ApplID))) return CapiIllAppNr; fd = applid2fd(ApplID); diff --git a/libcapi20/capi20_platform.h b/libcapi20/capi20_platform.h new file mode 100644 index 0000000..fdfc443 --- /dev/null +++ b/libcapi20/capi20_platform.h @@ -0,0 +1,24 @@ +#ifndef __CAPI20_PLATFORM_H__ +#define __CAPI20_PLATFORM_H__ + +#if __GNUC__ >= 3 /* { */ + +#ifndef likely +#define likely(x) __builtin_expect(!!(x), 1) +#endif +#ifndef unlikely +#define unlikely(x) __builtin_expect(!!(x), 0) +#endif + +#else /* } { */ + +#ifndef likely +#define likely(x) (!!(__x__)) +#endif +#ifndef unlikely +#define unlikely(__x__) (!!(__x__)) +#endif + +#endif /* } */ + +#endif