17f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant// -*- C++ -*-
27f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant//===----------------------- support/ibm/support.h ----------------------===//
37f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant//
47f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant//                     The LLVM Compiler Infrastructure
57f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant//
67f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
77f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
87f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant//
97f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant//===----------------------------------------------------------------------===//
107f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant
117f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#ifndef _LIBCPP_SUPPORT_IBM_SUPPORT_H
127f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#define _LIBCPP_SUPPORT_IBM_SUPPORT_H
137f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant
147f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnantextern "builtin" int __popcnt4(unsigned int);
157f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnantextern "builtin" int __popcnt8(unsigned long long);
167f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnantextern "builtin" unsigned int __cnttz4(unsigned int);
177f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnantextern "builtin" unsigned int __cnttz8(unsigned long long);
18016d4e847a53d310dfac6b0d93782f4221e7700aMarshall Clowextern "builtin" unsigned int __cntlz4(unsigned int);
197f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnantextern "builtin" unsigned int __cntlz8(unsigned long long);
207f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant
217f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant// Builtin functions for counting population
227f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#define __builtin_popcount(x) __popcnt4(x)
237f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#define __builtin_popcountll(x) __popcnt8(x)
247f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#if defined(__64BIT__)
257f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#define __builtin_popcountl(x) __builtin_popcountll(x)
267f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#else
277f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#define __builtin_popcountl(x) __builtin_popcount(x)
287f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#endif
297f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant
307f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant// Builtin functions for counting trailing zeros
317f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#define __builtin_ctz(x) __cnttz4(x)
327f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#define __builtin_ctzll(x) __cnttz8(x)
337f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#if defined(__64BIT__)
347f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#define __builtin_ctzl(x) __builtin_ctzll(x)
357f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#else
367f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#define __builtin_ctzl(x) __builtin_ctz(x)
377f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#endif
387f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant
397f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant// Builtin functions for counting leading zeros
407f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#define __builtin_clz(x) __cntlz4(x)
417f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#define __builtin_clzll(x) __cntlz8(x)
427f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#if defined(__64BIT__)
437f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#define __builtin_clzl(x) __builtin_clzll(x)
447f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#else
457f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#define __builtin_clzl(x) __builtin_clz(x)
467f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#endif
477f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant
487f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#if defined(__64BIT__)
497f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#define __SIZE_WIDTH__ 64
507f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#else
517f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#define __SIZE_WIDTH__ 32
527f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#endif
537f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant
547f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant#endif // _LIBCPP_SUPPORT_IBM_SUPPORT_H
55