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