blob: 828db26621337e48911e81972eecc8fd7ad2b200 [file] [log] [blame]
Daniel Dunbarb3a69012009-06-26 16:47:03 +00001//===-- 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