From: lucasart Date: Wed, 15 Apr 2015 20:21:45 +0000 (+0100) Subject: Retire FORCE_INLINE X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=6c040c821a50475840607ef5f11c270ee21d61da 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 #334 --- diff --git a/src/bitbase.cpp b/src/bitbase.cpp index 510d305b..0eb3b983 100644 --- a/src/bitbase.cpp +++ b/src/bitbase.cpp @@ -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; diff --git a/src/bitboard.cpp b/src/bitboard.cpp index f6504aa9..f76ed31c 100644 --- a/src/bitboard.cpp +++ b/src/bitboard.cpp @@ -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; diff --git a/src/bitboard.h b/src/bitboard.h index aa4e1711..f6f1eba6 100644 --- a/src/bitboard.h +++ b/src/bitboard.h @@ -231,7 +231,7 @@ template<> inline int distance(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 -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,13 +271,13 @@ 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; @@ -285,28 +285,28 @@ FORCE_INLINE Square msb(Bitboard b) { # 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; diff --git a/src/movegen.cpp b/src/movegen.cpp index 1e14f59b..4a0a34ef 100644 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@ -66,7 +66,7 @@ namespace { template - 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(to - Delta, to, QUEEN); @@ -219,7 +219,7 @@ namespace { } - template FORCE_INLINE + template ExtMove* generate_moves(const Position& pos, ExtMove* moveList, Color us, Bitboard target, const CheckInfo* ci) { @@ -252,7 +252,7 @@ namespace { } - template FORCE_INLINE + template ExtMove* generate_all(const Position& pos, ExtMove* moveList, Bitboard target, const CheckInfo* ci = nullptr) { diff --git a/src/movepick.cpp b/src/movepick.cpp index face865a..190a30f8 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -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; diff --git a/src/position.cpp b/src/position.cpp index 5a98821d..573b5df5 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -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 FORCE_INLINE +template 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(const Bitboard*, const Square&, const Bitboard&, Bitboard&, Bitboard&) { return KING; // No need to update bitboards: it is the last cycle } diff --git a/src/search.cpp b/src/search.cpp index 9f42bab7..2149df2b 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -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 inline Depth reduction(bool i, Depth d, int mn) { + template Depth reduction(bool i, Depth d, int mn) { return Reductions[PvNode][i][std::min(d, 63 * ONE_PLY)][std::min(mn, 63)]; } diff --git a/src/types.h b/src/types.h index eebd69e5..5fe73397 100644 --- a/src/types.h +++ b/src/types.h @@ -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