diff --git a/src/misc/common.hh b/src/misc/common.hh
index dd51dcba5..08b336cb3 100644
--- a/src/misc/common.hh
+++ b/src/misc/common.hh
@@ -23,6 +23,14 @@
#ifndef SPOT_MISC_COMMON_HH
# define SPOT_MISC_COMMON_HH
+#ifdef __GNUC__
+#define SPOT_LIKELY(expr) __builtin_expect(!!(expr), 1)
+#define SPOT_UNLIKELY(expr) __builtin_expect(!!(expr), 0)
+#else
+#define SPOT_LIKELY(expr) (expr)
+#define SPOT_UNLIKELY(expr) (expr)
+#endif
+
#ifdef __GNUC__
#define SPOT_DEPRECATED __attribute__ ((deprecated))
#elif defined(_MSC_VER)
diff --git a/src/misc/intvcmp2.cc b/src/misc/intvcmp2.cc
index b136599b7..726ec6a42 100644
--- a/src/misc/intvcmp2.cc
+++ b/src/misc/intvcmp2.cc
@@ -1,6 +1,6 @@
// -*- coding: utf-8 -*-
-// Copyright (C) 2011, 2013 Laboratoire de Recherche et Développement
-// de l'Epita (LRDE).
+// Copyright (C) 2011, 2013, 2014 Laboratoire de Recherche et
+// Développement de l'Epita (LRDE).
//
// This file is part of Spot, a model checking library.
//
@@ -18,18 +18,11 @@
// along with this program. If not, see .
#include "config.h"
+#include "common.hh"
#include
#include
#include "intvcmp2.hh"
-#if __GNUC__ >= 3
-# define likely(expr) __builtin_expect(!!(expr), 1)
-# define unlikely(expr) __builtin_expect(!!(expr), 0)
-#else
-# define likely(expr) (expr)
-# define unlikely(expr) (expr)
-#endif
-
namespace spot
{
namespace
@@ -109,7 +102,7 @@ namespace spot
if (compressable >= max_count[id])
goto fast_encode;
}
- while (likely(compressable < size_));
+ while (SPOT_LIKELY(compressable < size_));
assert(compressable < max_count[id]);
@@ -393,7 +386,7 @@ namespace spot
void run()
{
- while (likely(self().have_comp_data()))
+ while (SPOT_LIKELY(self().have_comp_data()))
{
unsigned val = self().next_comp_data();
diff --git a/src/misc/intvcomp.cc b/src/misc/intvcomp.cc
index 15af57dff..7b17a26e6 100644
--- a/src/misc/intvcomp.cc
+++ b/src/misc/intvcomp.cc
@@ -18,19 +18,11 @@
// along with this program. If not, see .
#include "config.h"
+#include "common.hh"
#include
#include
#include "intvcomp.hh"
-#if __GNUC__ >= 3
-# define likely(expr) __builtin_expect(!!(expr), 1)
-# define unlikely(expr) __builtin_expect(!!(expr), 0)
-#else
-# define likely(expr) (expr)
-# define unlikely(expr) (expr)
-#endif
-
-
namespace spot
{
@@ -99,7 +91,7 @@ namespace spot
{
unsigned int last_val = 0;
- while (likely(self().have_data()))
+ while (SPOT_LIKELY(self().have_data()))
{
unsigned int val = self().next_data();
// Repeated value? Try to find more.
@@ -144,7 +136,7 @@ namespace spot
{
cur_ <<= n;
cur_ |= (bits & mask);
- if (likely(bits_left_ -= n))
+ if (SPOT_LIKELY(bits_left_ -= n))
return;
self().push_data(cur_);
@@ -155,7 +147,7 @@ namespace spot
void
push_bits(unsigned int bits, unsigned int n, unsigned int mask)
{
- if (likely(n <= bits_left_))
+ if (SPOT_LIKELY(n <= bits_left_))
{
push_bits_unchecked(bits, n, mask);
return;
@@ -224,7 +216,7 @@ namespace spot
bool skip_if(unsigned int val)
{
- if (unlikely(!have_data()))
+ if (SPOT_UNLIKELY(!have_data()))
return false;
if (static_cast(array_[pos_]) != val)
@@ -268,7 +260,7 @@ namespace spot
bool skip_if(unsigned int val)
{
- if (unlikely(!have_data()))
+ if (SPOT_UNLIKELY(!have_data()))
return false;
if (static_cast(*pos_) != val)
@@ -316,7 +308,7 @@ namespace spot
bool skip_if(unsigned int val)
{
- if (unlikely(!have_data()))
+ if (SPOT_UNLIKELY(!have_data()))
return false;
if (static_cast(array_[pos_]) != val)
@@ -373,15 +365,15 @@ namespace spot
public:
void refill()
{
- if (unlikely(look_bits_ == 0))
+ if (SPOT_UNLIKELY(look_bits_ == 0))
{
look_bits_ = max_bits;
look_ = buffer_;
- if (likely(self().have_comp_data()))
+ if (SPOT_LIKELY(self().have_comp_data()))
buffer_ = self().next_comp_data();
- if (likely(buffer_bits_ != max_bits))
+ if (SPOT_LIKELY(buffer_bits_ != max_bits))
{
unsigned int fill_size = max_bits - buffer_bits_;
look_ <<= fill_size;
@@ -401,7 +393,7 @@ namespace spot
if (buffer_bits_ == 0)
{
- if (likely(self().have_comp_data()))
+ if (SPOT_LIKELY(self().have_comp_data()))
buffer_ = self().next_comp_data();
unsigned int left = max_bits - look_bits_;
@@ -422,7 +414,7 @@ namespace spot
unsigned int look_n_bits(unsigned int n)
{
- if (unlikely(look_bits_ < n))
+ if (SPOT_UNLIKELY(look_bits_ < n))
refill();
assert(n <= look_bits_);
return (look_ >> (look_bits_ - n)) & ((1 << n) - 1);
@@ -436,7 +428,7 @@ namespace spot
unsigned int get_n_bits(unsigned int n)
{
- if (unlikely(look_bits_ < n))
+ if (SPOT_UNLIKELY(look_bits_ < n))
refill();
look_bits_ -= n;
return (look_ >> look_bits_) & ((1 << n) - 1);
@@ -445,7 +437,7 @@ namespace spot
unsigned int get_32_bits()
{
// std::cerr << "get_32" << std::endl;
- if (likely(look_bits_ < 32))
+ if (SPOT_LIKELY(look_bits_ < 32))
refill();
unsigned int val = look_;
look_bits_ = 0;
@@ -455,12 +447,12 @@ namespace spot
void run()
{
- if (unlikely(!self().have_comp_data()))
+ if (SPOT_UNLIKELY(!self().have_comp_data()))
return;
look_ = self().next_comp_data();
look_bits_ = max_bits;
- if (likely(self().have_comp_data()))
+ if (SPOT_LIKELY(self().have_comp_data()))
{
buffer_ = self().next_comp_data();
buffer_bits_ = max_bits;
@@ -471,7 +463,7 @@ namespace spot
buffer_bits_ = 0;
}
- while (likely(!self().complete()))
+ while (SPOT_LIKELY(!self().complete()))
{
unsigned int token = look_n_bits(3);
switch (token)