9fbb827a439113cf7bbd3fba02bb86360482b095
[oota-llvm.git] / include / llvm / Support / MathExtras.h
1 // $Id$ -*-c++-*-
2 //***************************************************************************
3 // File:
4 //      MathExtras.h
5 // 
6 // Purpose:
7 //      
8 // History:
9 //      8/25/01  -  Vikram Adve  -  Created
10 //**************************************************************************/
11
12 #ifndef LLVM_SUPPORT_MATH_EXTRAS_H
13 #define LLVM_SUPPORT_MATH_EXTRAS_H
14
15 #include <Support/DataTypes.h>
16
17 inline unsigned
18 log2(uint64_t C)
19 {
20   unsigned getPow;
21   for (getPow = 0; C > 1; getPow++)
22     C = C >> 1;
23   return getPow;
24 }
25
26 inline bool
27 IsPowerOf2(int64_t C, unsigned& getPow)
28 {
29   if (C < 0)
30     C = -C;
31   bool isPowerOf2 = C > 0 && (C == (C & ~(C - 1)));
32   if (isPowerOf2)
33     getPow = log2(C);
34   
35   return isPowerOf2;
36 }
37
38 #endif /*LLVM_SUPPORT_MATH_EXTRAS_H*/