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