Skip to content
Permalink
Browse files

Retire FORCE_INLINE

No speed regression on my machine (i7-3770k, gcc 4.9.1, linux 3.16):

        stat        test     master   diff
        mean   2,482,415  2,474,987  7,906
        stdev      4,603      5,644  2,497

        speedup        0.32%
        P(speedup>0)  100.0%

Fishtest 9+0.03:

ELO: 0.26 +-1.8 (95%) LOS: 61.2%
Total: 60000 W: 12437 L: 12392 D: 35171

No functional change.

Resolves official-stockfish#334
  • Loading branch information...
lucasart authored and zamar committed Apr 15, 2015
1 parent 20e9289 commit 6c040c821a50475840607ef5f11c270ee21d61da
Showing with 20 additions and 28 deletions.
  1. +1 −1 src/bitbase.cpp
  2. +1 −1 src/bitboard.cpp
  3. +9 −9 src/bitboard.h
  4. +3 −3 src/movegen.cpp
  5. +1 −1 src/movepick.cpp
  6. +2 −2 src/position.cpp
  7. +3 −3 src/search.cpp
  8. +0 −8 src/types.h
@@ -53,7 +53,7 @@ namespace {
WIN = 4
};

inline Result& operator|=(Result& r, Result v) { return r = Result(r | v); }
Result& operator|=(Result& r, Result v) { return r = Result(r | v); }

struct KPKPosition {
KPKPosition() = default;
@@ -69,7 +69,7 @@ namespace {
// bsf_index() returns the index into BSFTable[] to look up the bitscan. Uses
// Matt Taylor's folding for 32 bit case, extended to 64 bit by Kim Walisch.

FORCE_INLINE unsigned bsf_index(Bitboard b) {
unsigned bsf_index(Bitboard b) {
b ^= b - 1;
return Is64Bit ? (b * DeBruijn64) >> 58
: ((unsigned(b) ^ unsigned(b >> 32)) * DeBruijn32) >> 26;
@@ -231,7 +231,7 @@ template<> inline int distance<Rank>(Square x, Square y) { return distance(rank_
/// piece of type Pt (bishop or rook) placed on 's'. The helper magic_index()
/// looks up the index using the 'magic bitboards' approach.
template<PieceType Pt>
FORCE_INLINE unsigned magic_index(Square s, Bitboard occupied) {
inline unsigned magic_index(Square s, Bitboard occupied) {

Bitboard* const Masks = Pt == ROOK ? RookMasks : BishopMasks;
Bitboard* const Magics = Pt == ROOK ? RookMagics : BishopMagics;
@@ -271,42 +271,42 @@ inline Bitboard attacks_bb(Piece pc, Square s, Bitboard occupied) {

# if defined(_MSC_VER) && !defined(__INTEL_COMPILER)

FORCE_INLINE Square lsb(Bitboard b) {
inline Square lsb(Bitboard b) {
unsigned long idx;
_BitScanForward64(&idx, b);
return (Square) idx;
}

FORCE_INLINE Square msb(Bitboard b) {
inline Square msb(Bitboard b) {
unsigned long idx;
_BitScanReverse64(&idx, b);
return (Square) idx;
}

# elif defined(__arm__)

FORCE_INLINE int lsb32(uint32_t v) {
inline int lsb32(uint32_t v) {
__asm__("rbit %0, %1" : "=r"(v) : "r"(v));
return __builtin_clz(v);
}

FORCE_INLINE Square msb(Bitboard b) {
inline Square msb(Bitboard b) {
return (Square) (63 - __builtin_clzll(b));
}

FORCE_INLINE Square lsb(Bitboard b) {
inline Square lsb(Bitboard b) {
return (Square) (uint32_t(b) ? lsb32(uint32_t(b)) : 32 + lsb32(uint32_t(b >> 32)));
}

# else // Assumed gcc or compatible compiler

FORCE_INLINE Square lsb(Bitboard b) { // Assembly code by Heinz van Saanen
inline Square lsb(Bitboard b) { // Assembly code by Heinz van Saanen
Bitboard idx;
__asm__("bsfq %1, %0": "=r"(idx): "rm"(b) );
return (Square) idx;
}

FORCE_INLINE Square msb(Bitboard b) {
inline Square msb(Bitboard b) {
Bitboard idx;
__asm__("bsrq %1, %0": "=r"(idx): "rm"(b) );
return (Square) idx;
@@ -324,7 +324,7 @@ Square msb(Bitboard b);

/// pop_lsb() finds and clears the least significant bit in a non-zero bitboard

FORCE_INLINE Square pop_lsb(Bitboard* b) {
inline Square pop_lsb(Bitboard* b) {
const Square s = lsb(*b);
*b &= *b - 1;
return s;
@@ -66,7 +66,7 @@ namespace {


template<GenType Type, Square Delta>
inline ExtMove* make_promotions(ExtMove* moveList, Square to, const CheckInfo* ci) {
ExtMove* make_promotions(ExtMove* moveList, Square to, const CheckInfo* ci) {

if (Type == CAPTURES || Type == EVASIONS || Type == NON_EVASIONS)
*moveList++ = make<PROMOTION>(to - Delta, to, QUEEN);
@@ -219,7 +219,7 @@ namespace {
}


template<PieceType Pt, bool Checks> FORCE_INLINE
template<PieceType Pt, bool Checks>
ExtMove* generate_moves(const Position& pos, ExtMove* moveList, Color us,
Bitboard target, const CheckInfo* ci) {

@@ -252,7 +252,7 @@ namespace {
}


template<Color Us, GenType Type> FORCE_INLINE
template<Color Us, GenType Type>
ExtMove* generate_all(const Position& pos, ExtMove* moveList, Bitboard target,
const CheckInfo* ci = nullptr) {

@@ -52,7 +52,7 @@ namespace {
// pick_best() finds the best move in the range (begin, end) and moves it to
// the front. It's faster than sorting all the moves in advance when there
// are few moves e.g. the possible captures.
inline Move pick_best(ExtMove* begin, ExtMove* end)
Move pick_best(ExtMove* begin, ExtMove* end)
{
std::swap(*begin, *std::max_element(begin, end));
return *begin;
@@ -58,7 +58,7 @@ Score psq[COLOR_NB][PIECE_TYPE_NB][SQUARE_NB];
// valuable attacker for the side to move, remove the attacker we just found
// from the bitboards and scan for new X-ray attacks behind it.

template<int Pt> FORCE_INLINE
template<int Pt>
PieceType min_attacker(const Bitboard* bb, const Square& to, const Bitboard& stmAttackers,
Bitboard& occupied, Bitboard& attackers) {

@@ -78,7 +78,7 @@ PieceType min_attacker(const Bitboard* bb, const Square& to, const Bitboard& stm
return (PieceType)Pt;
}

template<> FORCE_INLINE
template<>
PieceType min_attacker<KING>(const Bitboard*, const Square&, const Bitboard&, Bitboard&, Bitboard&) {
return KING; // No need to update bitboards: it is the last cycle
}
@@ -66,14 +66,14 @@ namespace {
enum NodeType { Root, PV, NonPV };

// Razoring and futility margin based on depth
inline Value razor_margin(Depth d) { return Value(512 + 32 * d); }
inline Value futility_margin(Depth d) { return Value(200 * d); }
Value razor_margin(Depth d) { return Value(512 + 32 * d); }
Value futility_margin(Depth d) { return Value(200 * d); }

// Futility and reductions lookup tables, initialized at startup
int FutilityMoveCounts[2][16]; // [improving][depth]
Depth Reductions[2][2][64][64]; // [pv][improving][depth][moveNumber]

template <bool PvNode> inline Depth reduction(bool i, Depth d, int mn) {
template <bool PvNode> Depth reduction(bool i, Depth d, int mn) {
return Reductions[PvNode][i][std::min(d, 63 * ONE_PLY)][std::min(mn, 63)];
}

@@ -79,14 +79,6 @@
# define pext(b, m) (0)
#endif

#ifdef _MSC_VER
# define FORCE_INLINE __forceinline
#elif defined(__GNUC__)
# define FORCE_INLINE inline __attribute__((always_inline))
#else
# define FORCE_INLINE inline
#endif

#ifdef USE_POPCNT
const bool HasPopCnt = true;
#else

0 comments on commit 6c040c8

Please sign in to comment.
You can’t perform that action at this time.