]> nv-tegra.nvidia Code Review - linux-2.6.git/blobdiff - include/asm-ia64/gcc_intrin.h
[IA64] fix fls()
[linux-2.6.git] / include / asm-ia64 / gcc_intrin.h
index 7c357dfbae50dc400b63c39e0f6add7a214a28a7..4fb4e439b05c35eca06daf2762936939c3e1b333 100644 (file)
@@ -133,13 +133,17 @@ register unsigned long ia64_r13 asm ("r13") __attribute_used__;
        ia64_intri_res;                                                         \
 })
 
-#define ia64_popcnt(x)                                         \
-({                                                             \
+#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+# define ia64_popcnt(x)                __builtin_popcountl(x)
+#else
+# define ia64_popcnt(x)                                                \
+  ({                                                           \
        __u64 ia64_intri_res;                                   \
        asm ("popcnt %0=%1" : "=r" (ia64_intri_res) : "r" (x)); \
                                                                \
        ia64_intri_res;                                         \
-})
+  })
+#endif
 
 #define ia64_getf_exp(x)                                       \
 ({                                                             \