aboutsummaryrefslogtreecommitdiff
path: root/include/Support/MathExtras.h
blob: 9fbb827a439113cf7bbd3fba02bb86360482b095 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// $Id$ -*-c++-*-
//***************************************************************************
// File:
//	MathExtras.h
// 
// Purpose:
//	
// History:
//	8/25/01	 -  Vikram Adve  -  Created
//**************************************************************************/

#ifndef LLVM_SUPPORT_MATH_EXTRAS_H
#define LLVM_SUPPORT_MATH_EXTRAS_H

#include <Support/DataTypes.h>

inline unsigned
log2(uint64_t C)
{
  unsigned getPow;
  for (getPow = 0; C > 1; getPow++)
    C = C >> 1;
  return getPow;
}

inline bool
IsPowerOf2(int64_t C, unsigned& getPow)
{
  if (C < 0)
    C = -C;
  bool isPowerOf2 = C > 0 && (C == (C & ~(C - 1)));
  if (isPowerOf2)
    getPow = log2(C);
  
  return isPowerOf2;
}

#endif /*LLVM_SUPPORT_MATH_EXTRAS_H*/