X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fmisc.cpp;h=aa2b23310da53ffd558bc41c4d62ece3c3dd8d33;hp=f09694cc043607a6cd17d0409baf1e96c9537229;hb=856a5f3aaaf8b9d53599963decacd4476b55c034;hpb=6fa6da3ee13d2b7bdbec3cd24ff8ca43233c74fb diff --git a/src/misc.cpp b/src/misc.cpp index f09694cc..aa2b2331 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -146,7 +146,7 @@ void dbg_print() { std::ostream& operator<<(std::ostream& os, SyncCout sc) { - static std::mutex m; + static Mutex m; if (sc == IO_LOCK) m.lock(); @@ -162,16 +162,35 @@ std::ostream& operator<<(std::ostream& os, SyncCout sc) { void start_logger(bool b) { Logger::start(b); } +/// timed_wait() waits for msec milliseconds. It is mainly a helper to wrap +/// the conversion from milliseconds to struct timespec, as used by pthreads. + +void timed_wait(WaitCondition& sleepCond, Lock& sleepLock, int msec) { + +#ifdef _WIN32 + int tm = msec; +#else + timespec ts, *tm = &ts; + uint64_t ms = Time::now() + msec; + + ts.tv_sec = ms / 1000; + ts.tv_nsec = (ms % 1000) * 1000000LL; +#endif + + cond_timedwait(sleepCond, sleepLock, tm); +} + + /// prefetch() preloads the given address in L1/L2 cache. This is a non-blocking /// function that doesn't stall the CPU waiting for data to be loaded from memory, /// which can be quite slow. #ifdef NO_PREFETCH -void prefetch(void*) {} +void prefetch(char*) {} #else -void prefetch(void* addr) { +void prefetch(char* addr) { # if defined(__INTEL_COMPILER) // This hack prevents prefetches from being optimized away by @@ -180,7 +199,7 @@ void prefetch(void* addr) { # endif # if defined(__INTEL_COMPILER) || defined(_MSC_VER) - _mm_prefetch((char*)addr, _MM_HINT_T0); + _mm_prefetch(addr, _MM_HINT_T0); # else __builtin_prefetch(addr); # endif