ctzti2.c revision b3a6901e66f55b35aa9e01bcb24134e6a65ea004
1//===-- ctzti2.c - Implement __ctzti2 -------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file implements __ctzti2 for the compiler_rt library. 11// 12//===----------------------------------------------------------------------===// 13 14#if __x86_64 15 16#include "int_lib.h" 17 18// Returns: the number of trailing 0-bits 19 20// Precondition: a != 0 21 22si_int 23__ctzti2(ti_int a) 24{ 25 twords x; 26 x.all = a; 27 const di_int f = -(x.low == 0); 28 return __builtin_ctzll((x.high & f) | (x.low & ~f)) + 29 ((si_int)f & ((si_int)(sizeof(di_int) * CHAR_BIT))); 30} 31 32#endif 33