summaryrefslogtreecommitdiffstats
path: root/libcxx/include/support/ibm/support.h
diff options
context:
space:
mode:
authorHoward Hinnant <hhinnant@apple.com>2013-08-14 18:00:20 +0000
committerHoward Hinnant <hhinnant@apple.com>2013-08-14 18:00:20 +0000
commit5d1a701d6def1e4e6ae3d5bce67efd40b07fba16 (patch)
treef24f148cd0e121eac7f27d1423983ac369ea1bb3 /libcxx/include/support/ibm/support.h
parenta8c7c154bb820e21a141602297514b5849607148 (diff)
downloadbcm5719-llvm-5d1a701d6def1e4e6ae3d5bce67efd40b07fba16.tar.gz
bcm5719-llvm-5d1a701d6def1e4e6ae3d5bce67efd40b07fba16.zip
Xing Xue: port to IBM XLC++/AIX.
llvm-svn: 188396
Diffstat (limited to 'libcxx/include/support/ibm/support.h')
-rw-r--r--libcxx/include/support/ibm/support.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/libcxx/include/support/ibm/support.h b/libcxx/include/support/ibm/support.h
new file mode 100644
index 00000000000..3effbaed160
--- /dev/null
+++ b/libcxx/include/support/ibm/support.h
@@ -0,0 +1,54 @@
+// -*- C++ -*-
+//===----------------------- support/ibm/support.h ----------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP_SUPPORT_IBM_SUPPORT_H
+#define _LIBCPP_SUPPORT_IBM_SUPPORT_H
+
+extern "builtin" int __popcnt4(unsigned int);
+extern "builtin" int __popcnt8(unsigned long long);
+extern "builtin" unsigned int __cnttz4(unsigned int);
+extern "builtin" unsigned int __cnttz8(unsigned long long);
+extern "builtin" unsigned int __cntlz4(unsigned long long);
+extern "builtin" unsigned int __cntlz8(unsigned long long);
+
+// Builtin functions for counting population
+#define __builtin_popcount(x) __popcnt4(x)
+#define __builtin_popcountll(x) __popcnt8(x)
+#if defined(__64BIT__)
+#define __builtin_popcountl(x) __builtin_popcountll(x)
+#else
+#define __builtin_popcountl(x) __builtin_popcount(x)
+#endif
+
+// Builtin functions for counting trailing zeros
+#define __builtin_ctz(x) __cnttz4(x)
+#define __builtin_ctzll(x) __cnttz8(x)
+#if defined(__64BIT__)
+#define __builtin_ctzl(x) __builtin_ctzll(x)
+#else
+#define __builtin_ctzl(x) __builtin_ctz(x)
+#endif
+
+// Builtin functions for counting leading zeros
+#define __builtin_clz(x) __cntlz4(x)
+#define __builtin_clzll(x) __cntlz8(x)
+#if defined(__64BIT__)
+#define __builtin_clzl(x) __builtin_clzll(x)
+#else
+#define __builtin_clzl(x) __builtin_clz(x)
+#endif
+
+#if defined(__64BIT__)
+#define __SIZE_WIDTH__ 64
+#else
+#define __SIZE_WIDTH__ 32
+#endif
+
+#endif // _LIBCPP_SUPPORT_IBM_SUPPORT_H
OpenPOWER on IntegriCloud