1e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper/*===---- popcntintrin.h - POPCNT intrinsics -------------------------------=== 2e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * 3e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * Permission is hereby granted, free of charge, to any person obtaining a copy 4e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * of this software and associated documentation files (the "Software"), to deal 5e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * in the Software without restriction, including without limitation the rights 6e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * copies of the Software, and to permit persons to whom the Software is 8e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * furnished to do so, subject to the following conditions: 9e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * 10e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * The above copyright notice and this permission notice shall be included in 11e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * all copies or substantial portions of the Software. 12e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * 13e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * THE SOFTWARE. 20e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper * 21e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper *===-----------------------------------------------------------------------=== 22e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper */ 23e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper 24e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper#ifndef _POPCNTINTRIN_H 25e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper#define _POPCNTINTRIN_H 26e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper 27a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar/* Define the default attributes for the functions in this file. */ 28a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("popcnt"))) 29a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar 30a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainarstatic __inline__ int __DEFAULT_FN_ATTRS 31e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper_mm_popcnt_u32(unsigned int __A) 32e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper{ 33e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper return __builtin_popcount(__A); 34e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper} 35e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper 36a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainarstatic __inline__ int __DEFAULT_FN_ATTRS 37a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar_popcnt32(int __A) 38a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar{ 39a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar return __builtin_popcount(__A); 40a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar} 41a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar 42e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper#ifdef __x86_64__ 43a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainarstatic __inline__ long long __DEFAULT_FN_ATTRS 44e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper_mm_popcnt_u64(unsigned long long __A) 45e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper{ 46e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper return __builtin_popcountll(__A); 47e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper} 48a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar 49a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainarstatic __inline__ long long __DEFAULT_FN_ATTRS 50a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar_popcnt64(long long __A) 51a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar{ 52a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar return __builtin_popcountll(__A); 53a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar} 54e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper#endif /* __x86_64__ */ 55e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper 56a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#undef __DEFAULT_FN_ATTRS 57a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar 58e14e08b2552b43d81a295401ddf9b8da2c499233Craig Topper#endif /* _POPCNTINTRIN_H */ 59