MathExtras.h revision d0fde30ce850b78371fd1386338350591f9ff494
148486893f46d2e12e926682a3ecb908716bc66c4Chris Lattner//===-- Support/MathExtras.h - Useful math functions ------------*- C++ -*-===//
2b2109ce97881269a610fa4afbcbca350e975174dJohn Criswell//
3b2109ce97881269a610fa4afbcbca350e975174dJohn Criswell//                     The LLVM Compiler Infrastructure
4b2109ce97881269a610fa4afbcbca350e975174dJohn Criswell//
5b2109ce97881269a610fa4afbcbca350e975174dJohn Criswell// This file was developed by the LLVM research group and is distributed under
6b2109ce97881269a610fa4afbcbca350e975174dJohn Criswell// the University of Illinois Open Source License. See LICENSE.TXT for details.
7b2109ce97881269a610fa4afbcbca350e975174dJohn Criswell//
8b2109ce97881269a610fa4afbcbca350e975174dJohn Criswell//===----------------------------------------------------------------------===//
954ea60c69e69b8e5a464a1d7688ceec5c68bacd5Chris Lattner//
1054ea60c69e69b8e5a464a1d7688ceec5c68bacd5Chris Lattner// This file contains some functions that are useful for math stuff.
1154ea60c69e69b8e5a464a1d7688ceec5c68bacd5Chris Lattner//
1254ea60c69e69b8e5a464a1d7688ceec5c68bacd5Chris Lattner//===----------------------------------------------------------------------===//
13cee8f9ae67104576b2028125b56e9ba4856a1d66Chris Lattner
14a9f6e4ae0eaea69949755807b7207177f256eaceBrian Gaeke#ifndef SUPPORT_MATHEXTRAS_H
15a9f6e4ae0eaea69949755807b7207177f256eaceBrian Gaeke#define SUPPORT_MATHEXTRAS_H
16cee8f9ae67104576b2028125b56e9ba4856a1d66Chris Lattner
174a63b72df95b5c0d4af064cef19377f811ba6060Chris Lattner#include "Support/DataTypes.h"
18cee8f9ae67104576b2028125b56e9ba4856a1d66Chris Lattner
19d0fde30ce850b78371fd1386338350591f9ff494Brian Gaekenamespace llvm {
20d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke
2154ea60c69e69b8e5a464a1d7688ceec5c68bacd5Chris Lattnerinline unsigned log2(uint64_t C) {
22bcfa423e3d1a2a385b56e3ec0f03137f0c33efc7Vikram S. Adve  unsigned getPow;
2354ea60c69e69b8e5a464a1d7688ceec5c68bacd5Chris Lattner  for (getPow = 0; C > 1; ++getPow)
2454ea60c69e69b8e5a464a1d7688ceec5c68bacd5Chris Lattner    C >>= 1;
25bcfa423e3d1a2a385b56e3ec0f03137f0c33efc7Vikram S. Adve  return getPow;
26bcfa423e3d1a2a385b56e3ec0f03137f0c33efc7Vikram S. Adve}
27cee8f9ae67104576b2028125b56e9ba4856a1d66Chris Lattner
2854ea60c69e69b8e5a464a1d7688ceec5c68bacd5Chris Lattnerinline bool isPowerOf2(int64_t C, unsigned &getPow) {
2954ea60c69e69b8e5a464a1d7688ceec5c68bacd5Chris Lattner  if (C < 0) C = -C;
3054ea60c69e69b8e5a464a1d7688ceec5c68bacd5Chris Lattner  if (C > 0 && C == (C & ~(C - 1))) {
3116ca2b991b07c85237e53e8b0c97f30c4cbc6e3dChris Lattner    getPow = log2((uint64_t)C);
3254ea60c69e69b8e5a464a1d7688ceec5c68bacd5Chris Lattner    return true;
3354ea60c69e69b8e5a464a1d7688ceec5c68bacd5Chris Lattner  }
3454ea60c69e69b8e5a464a1d7688ceec5c68bacd5Chris Lattner
3554ea60c69e69b8e5a464a1d7688ceec5c68bacd5Chris Lattner  return false;
36cee8f9ae67104576b2028125b56e9ba4856a1d66Chris Lattner}
37cee8f9ae67104576b2028125b56e9ba4856a1d66Chris Lattner
38d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke} // End llvm namespace
39d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke
4054ea60c69e69b8e5a464a1d7688ceec5c68bacd5Chris Lattner#endif
41