| Chris Lattner | 84dc863 | 2002-05-19 21:19:55 +0000 | [diff] [blame] | 1 | //===-- Support/MathExtras.h - Useful math functions -------------*- C++ -*--=// |
| 2 | // |
| 3 | // This file contains some functions that are useful for math stuff. |
| 4 | // |
| 5 | //===----------------------------------------------------------------------===// |
| Chris Lattner | 5de2204 | 2001-11-27 00:03:19 +0000 | [diff] [blame] | 6 | |
| Brian Gaeke | a7a5013 | 2003-06-17 00:35:55 +0000 | [diff] [blame] | 7 | #ifndef SUPPORT_MATHEXTRAS_H |
| 8 | #define SUPPORT_MATHEXTRAS_H |
| Chris Lattner | 5de2204 | 2001-11-27 00:03:19 +0000 | [diff] [blame] | 9 | |
| Chris Lattner | 94a4f22 | 2002-10-28 02:11:53 +0000 | [diff] [blame] | 10 | #include "Support/DataTypes.h" |
| Chris Lattner | 5de2204 | 2001-11-27 00:03:19 +0000 | [diff] [blame] | 11 | |
| Chris Lattner | 84dc863 | 2002-05-19 21:19:55 +0000 | [diff] [blame] | 12 | inline unsigned log2(uint64_t C) { |
| Vikram S. Adve | e363307 | 2002-05-19 15:46:52 +0000 | [diff] [blame] | 13 | unsigned getPow; |
| Chris Lattner | 84dc863 | 2002-05-19 21:19:55 +0000 | [diff] [blame] | 14 | for (getPow = 0; C > 1; ++getPow) |
| 15 | C >>= 1; |
| Vikram S. Adve | e363307 | 2002-05-19 15:46:52 +0000 | [diff] [blame] | 16 | return getPow; |
| 17 | } |
| Chris Lattner | 5de2204 | 2001-11-27 00:03:19 +0000 | [diff] [blame] | 18 | |
| Chris Lattner | 84dc863 | 2002-05-19 21:19:55 +0000 | [diff] [blame] | 19 | inline bool isPowerOf2(int64_t C, unsigned &getPow) { |
| 20 | if (C < 0) C = -C; |
| 21 | if (C > 0 && C == (C & ~(C - 1))) { |
| Chris Lattner | 3eeba80 | 2002-09-17 23:56:50 +0000 | [diff] [blame] | 22 | getPow = log2((uint64_t)C); |
| Chris Lattner | 84dc863 | 2002-05-19 21:19:55 +0000 | [diff] [blame] | 23 | return true; |
| 24 | } |
| 25 | |
| 26 | return false; |
| Chris Lattner | 5de2204 | 2001-11-27 00:03:19 +0000 | [diff] [blame] | 27 | } |
| 28 | |
| Chris Lattner | 84dc863 | 2002-05-19 21:19:55 +0000 | [diff] [blame] | 29 | #endif |