Home | History | Annotate | Download | only in src
      1 //-----------------------------------------------------------------------------
      2 // Platform-specific functions and macros
      3 
      4 #pragma once
      5 
      6 void SetAffinity ( int cpu );
      7 
      8 //-----------------------------------------------------------------------------
      9 // Microsoft Visual Studio
     10 
     11 #if defined(_MSC_VER)
     12 
     13 #define FORCE_INLINE	__forceinline
     14 #define	NEVER_INLINE  __declspec(noinline)
     15 
     16 #include <stdlib.h>
     17 #include <math.h>   // Has to be included before intrin.h or VC complains about 'ceil'
     18 #include <intrin.h> // for __rdtsc
     19 #include "pstdint.h"
     20 
     21 #define ROTL32(x,y)	_rotl(x,y)
     22 #define ROTL64(x,y)	_rotl64(x,y)
     23 #define ROTR32(x,y)	_rotr(x,y)
     24 #define ROTR64(x,y)	_rotr64(x,y)
     25 
     26 #pragma warning(disable : 4127) // "conditional expression is constant" in the if()s for avalanchetest
     27 #pragma warning(disable : 4100)
     28 #pragma warning(disable : 4702)
     29 
     30 #define BIG_CONSTANT(x) (x)
     31 
     32 // RDTSC == Read Time Stamp Counter
     33 
     34 #define rdtsc() __rdtsc()
     35 
     36 //-----------------------------------------------------------------------------
     37 // Other compilers
     38 
     39 #else	//	defined(_MSC_VER)
     40 
     41 #include <stdint.h>
     42 
     43 #define	FORCE_INLINE inline __attribute__((always_inline))
     44 #define	NEVER_INLINE __attribute__((noinline))
     45 
     46 inline uint32_t rotl32 ( uint32_t x, int8_t r )
     47 {
     48   return (x << r) | (x >> (32 - r));
     49 }
     50 
     51 inline uint64_t rotl64 ( uint64_t x, int8_t r )
     52 {
     53   return (x << r) | (x >> (64 - r));
     54 }
     55 
     56 inline uint32_t rotr32 ( uint32_t x, int8_t r )
     57 {
     58   return (x >> r) | (x << (32 - r));
     59 }
     60 
     61 inline uint64_t rotr64 ( uint64_t x, int8_t r )
     62 {
     63   return (x >> r) | (x << (64 - r));
     64 }
     65 
     66 #define	ROTL32(x,y)	rotl32(x,y)
     67 #define ROTL64(x,y)	rotl64(x,y)
     68 #define	ROTR32(x,y)	rotr32(x,y)
     69 #define ROTR64(x,y)	rotr64(x,y)
     70 
     71 #define BIG_CONSTANT(x) (x##LLU)
     72 
     73 __inline__ unsigned long long int rdtsc()
     74 {
     75 #ifdef __x86_64__
     76     unsigned int a, d;
     77     __asm__ volatile ("rdtsc" : "=a" (a), "=d" (d));
     78     return (unsigned long)a | ((unsigned long)d << 32);
     79 #elif defined(__i386__)
     80     unsigned long long int x;
     81     __asm__ volatile ("rdtsc" : "=A" (x));
     82     return x;
     83 #else
     84 #define NO_CYCLE_COUNTER
     85     return 0;
     86 #endif
     87 }
     88 
     89 #include <strings.h>
     90 #define _stricmp strcasecmp
     91 
     92 #endif	//	!defined(_MSC_VER)
     93 
     94 //-----------------------------------------------------------------------------
     95