+/*
+ * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved.
+ *
+ * This file is part of libFirm.
+ *
+ * This file may be distributed and/or modified under the terms of the
+ * GNU General Public License version 2 as published by the Free Software
+ * Foundation and appearing in the file LICENSE.GPL included in the
+ * packaging of this file.
+ *
+ * Licensees holding valid libFirm Professional Edition licenses may use
+ * this file in accordance with the libFirm Commercial License.
+ * Agreement provided with the Software.
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE.
+ */
+
/**
* @file
* @date 28.9.2004
* @author Sebastian Hack, Matthias Braun
* @version $Id$
*/
-#ifndef _FIRM_BITFIDDLE_H_
-#define _FIRM_BITFIDDLE_H_
+#ifndef FIRM_ADT_BITFIDDLE_H
+#define FIRM_ADT_BITFIDDLE_H
#include <limits.h>
#include <assert.h>
*
* @note See hacker's delight, page 27.
*/
-static inline __attribute__((const))
+static INLINE __attribute__((const))
int add_saturated(int x, int y)
{
int sum = x + y;
* @param x A 32-bit word.
* @return The number of bits set in x.
*/
-static inline __attribute__((const))
+static INLINE __attribute__((const))
unsigned popcnt(unsigned x) {
x -= ((x >> 1) & 0x55555555);
x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
* @param x The word.
* @return The number of leading (from the most significant bit) zeros.
*/
-static inline __attribute__((const))
+static INLINE __attribute__((const))
unsigned nlz(unsigned x) {
#ifdef USE_X86_ASSEMBLY
unsigned res;
* @param x The word.
* @return The number of trailing zeros.
*/
-static inline __attribute__((const))
+static INLINE __attribute__((const))
unsigned ntz(unsigned x) {
#ifdef USE_X86_ASSEMBLY
unsigned res;
* Returns the biggest power of 2 that is equal or smaller than @p x
* (see hackers delight power-of-2 boundaries, page 48)
*/
-static inline __attribute__((const))
+static INLINE __attribute__((const))
unsigned floor_po2(unsigned x)
{
#ifdef USE_X86_ASSEMBLY // in this case nlz is fast
* @remark x has to be <= 0x8000000 of course
* @note see hackers delight power-of-2 boundaries, page 48
*/
-static inline __attribute__((const))
+static INLINE __attribute__((const))
unsigned ceil_po2(unsigned x)
{
if(x == 0)
/**
* Tests whether @p x is a power of 2
*/
-static inline __attribute__((const))
+static INLINE __attribute__((const))
int is_po2(unsigned x)
{
return (x & (x-1)) == 0;