From afc5df0361caae100946d58aa557433891d52cb3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Sun, 18 Oct 2015 23:44:30 -0400 Subject: [PATCH] Port: Add Solaris fls compat MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérémie Galarneau --- configure.ac | 2 +- src/common/compat/string.h | 38 +++++++++++++++++++ .../filter/filter-visitor-generate-bytecode.c | 32 +--------------- 3 files changed, 41 insertions(+), 31 deletions(-) diff --git a/configure.ac b/configure.ac index 87eabe815..dda8f27ca 100644 --- a/configure.ac +++ b/configure.ac @@ -66,7 +66,7 @@ AC_CHECK_HEADERS([ \ # Basic functions check AC_CHECK_FUNCS([ \ - atexit bzero clock_gettime dup2 fdatasync ftruncate \ + atexit bzero clock_gettime dup2 fdatasync fls ftruncate \ gethostbyname gethostname getpagesize localtime_r memchr memset \ mkdir munmap putenv realpath rmdir socket strchr strcspn strdup \ strncasecmp strndup strnlen strpbrk strrchr strstr strtol strtoul \ diff --git a/src/common/compat/string.h b/src/common/compat/string.h index 91a1c09e2..7c426ef3d 100644 --- a/src/common/compat/string.h +++ b/src/common/compat/string.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 Michael Jeanson + * 2015 Jérémie Galarneau * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -86,4 +87,41 @@ end: } #endif /* HAVE_STRNDUP */ +#ifdef HAVE_FLS +static inline int lttng_fls(int val) +{ + return fls(val); +} +#else +static inline int lttng_fls(int val) +{ + int r = 32; + unsigned int x = (unsigned int) val; + + if (!x) + return 0; + if (!(x & 0xFFFF0000U)) { + x <<= 16; + r -= 16; + } + if (!(x & 0xFF000000U)) { + x <<= 8; + r -= 8; + } + if (!(x & 0xF0000000U)) { + x <<= 4; + r -= 4; + } + if (!(x & 0xC0000000U)) { + x <<= 2; + r -= 2; + } + if (!(x & 0x80000000U)) { + x <<= 1; + r -= 1; + } + return r; +} +#endif /* HAVE_FLS */ + #endif /* _COMPAT_STRING_H */ diff --git a/src/lib/lttng-ctl/filter/filter-visitor-generate-bytecode.c b/src/lib/lttng-ctl/filter/filter-visitor-generate-bytecode.c index 00c9adc16..e28abd572 100644 --- a/src/lib/lttng-ctl/filter/filter-visitor-generate-bytecode.c +++ b/src/lib/lttng-ctl/filter/filter-visitor-generate-bytecode.c @@ -23,6 +23,7 @@ #include #include #include +#include #include "filter-bytecode.h" #include "filter-ir.h" @@ -40,40 +41,11 @@ static int recursive_visit_gen_bytecode(struct filter_parser_ctx *ctx, struct ir_op *node); -static inline int fls(unsigned int x) -{ - int r = 32; - - if (!x) - return 0; - if (!(x & 0xFFFF0000U)) { - x <<= 16; - r -= 16; - } - if (!(x & 0xFF000000U)) { - x <<= 8; - r -= 8; - } - if (!(x & 0xF0000000U)) { - x <<= 4; - r -= 4; - } - if (!(x & 0xC0000000U)) { - x <<= 2; - r -= 2; - } - if (!(x & 0x80000000U)) { - x <<= 1; - r -= 1; - } - return r; -} - static inline int get_count_order(unsigned int count) { int order; - order = fls(count) - 1; + order = lttng_fls(count) - 1; if (count & (count - 1)) order++; return order; -- 2.34.1