aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Pop <sebastian.pop@amd.com>2009-12-02 05:48:18 +0000
committerSebastian Pop <spop@gcc.gnu.org>2009-12-02 05:48:18 +0000
commit6a72cb46b22baf7fbb3f5c2eff0b44b37da1487c (patch)
tree646a88cd9f58037518ca2e63da3b65f92dcb01a4
parent13c0eb433cca19bb71e0c3591f487a4696d449c0 (diff)
downloadgcc-6a72cb46b22baf7fbb3f5c2eff0b44b37da1487c.zip
gcc-6a72cb46b22baf7fbb3f5c2eff0b44b37da1487c.tar.gz
gcc-6a72cb46b22baf7fbb3f5c2eff0b44b37da1487c.tar.bz2
ABM popcount intrinsics.
* config/i386/abmintrin.h (_mm_popcnt_u32): New. (_mm_popcnt_u64): New. From-SVN: r154894
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/abmintrin.h15
2 files changed, 20 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0125322..d04fb61 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2009-12-01 Sebastian Pop <sebastian.pop@amd.com>
+ * config/i386/abmintrin.h (_mm_popcnt_u32): New.
+ (_mm_popcnt_u64): New.
+
+2009-12-01 Sebastian Pop <sebastian.pop@amd.com>
+
* config/i386/abmintrin.h: New.
* config/i386/i386-c.c (ix86_target_macros_internal): Defined __ABM__.
* config/i386/x86intrin.h: Include abmintrin.h when __ABM__ is defined.
diff --git a/gcc/config/i386/abmintrin.h b/gcc/config/i386/abmintrin.h
index 6c77b3c..317bb98 100644
--- a/gcc/config/i386/abmintrin.h
+++ b/gcc/config/i386/abmintrin.h
@@ -33,4 +33,19 @@
#define _ABMINTRIN_H_INCLUDED
+/* Calculate a number of bits set to 1. */
+extern __inline int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm_popcnt_u32 (unsigned int __X)
+{
+ return __builtin_popcount (__X);
+}
+
+#ifdef __x86_64__
+extern __inline long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm_popcnt_u64 (unsigned long long __X)
+{
+ return __builtin_popcountll (__X);
+}
+#endif
+
#endif /* _ABMINTRIN_H_INCLUDED */