Revert inadvertant code commit to app_originate
[asterisk/asterisk.git] / codecs / log2comp.h
old mode 100755 (executable)
new mode 100644 (file)
index 1a42f35..aa397c8
@@ -1,10 +1,11 @@
-/* log2comp.h - various base 2 log computation versions
+/*! \file 
+ * \brief log2comp.h - various base 2 log computation versions
  * 
  * Asterisk -- A telephony toolkit for Linux.
  *
- * Implementation by Alex Volkov <codepro@usa.net>
+ * \author Alex Volkov <codepro@usa.net>
  *
- * Copyright (c) 2004 - 2005, Digium
+ * Copyright (c) 2004 - 2005, Digium Inc.
  *
  * This program is free software, distributed under the terms of
  * the GNU General Public License
@@ -24,7 +25,7 @@
 #if defined(WANT_ASM) && defined(_MSC_VER) && defined(_M_IX86)
 /* MS C Inline Asm */
 #      pragma warning( disable : 4035 )
-static inline int log2(int val) { __asm
+static inline int ilog2(int val) { __asm
 {
        xor             eax, eax
        dec             eax
@@ -33,7 +34,7 @@ static inline int log2(int val) { __asm
 #      pragma warning( default : 4035 )
 #elif defined(WANT_ASM) && defined(__GNUC__) && (defined(__i386__) || defined(i386))
 /* GNU Inline Asm */
-static inline int log2(int val)
+static inline int ilog2(int val)
 {
        int a;
        __asm__
@@ -42,18 +43,28 @@ static inline int log2(int val)
                decl    %0                      ;\
                bsrl    %1, %0          ;\
                "
-               : "=r" (a)
+               : "=&r" (a)
                : "mr" (val)
                : "cc"
        );
        return a;
 }
+#elif defined(WANT_ASM) && defined(__GNUC__) && defined(__powerpc__)
+static inline int ilog2(int val)
+{
+       int a;
+       __asm__ ("cntlzw %0,%1" 
+                : "=r" (a) 
+                : "r" (val)
+                );
+       return 31-a;
+}
 #else
 /* no ASM for this compiler and/or platform */
 /* rather slow base 2 log computation
  * Using looped shift.
  */
-static inline int log2(int val)
+static inline int ilog2(int val)
 {
        int i;
        for (i = -1; val; ++i, val >>= 1)