#ifndef __SYSDEFS_H_INCLUDED
 
#define __SYSDEFS_H_INCLUDED
 
 
 
#define forceinline __forceinline
 
#define fastcall __fastcall             // parameters in registers
 
 
 
typedef unsigned long long uint64_t;
 
 
 
typedef uint64_t QWORD;
 
 
 
typedef unsigned long long u64;
 
typedef long long i64;
 
typedef unsigned long u32;
 
typedef unsigned short u16;
 
typedef signed  short i16;
 
typedef signed char i8;
 
typedef unsigned char u8;
 
 
 
#ifdef _MSC_VER
 
#define ATTR_ALIGN(x) __declspec(align(x))
 
#define strtoull _strtoui64
 
#endif
 
 
 
#ifdef __ICL
 
#pragma warning(disable : 2259)
 
#endif
 
 
 
#if __ICL >= 1000 || defined(__GNUC__)
 
static inline u8 rol8(u8 val, u8 shift)
 
{
 
    __asm__ volatile ("rolb %1,%0" : "=r"(val) : "cI"(shift), "0"(val));
 
    return val;
 
}
 
 
 
static inline u8 ror8(u8 val, u8 shift)
 
{
 
    __asm__ volatile ("rorb %1,%0" : "=r"(val) : "cI"(shift), "0"(val));
 
    return val;
 
}
 
static inline void asm_pause() { __asm__("pause"); }
 
#else
 
extern "C" unsigned char __cdecl _rotr8(unsigned char value, unsigned char shift);
 
extern "C" unsigned char __cdecl _rotl8(unsigned char value, unsigned char shift);
 
#pragma intrinsic(_rotr8)
 
#pragma intrinsic(_rotl8)
 
static inline u8 rol8(u8 val, u8 shift) { return _rotl8(val, shift); }
 
static inline u8 ror8(u8 val, u8 shift) { return _rotr8(val, shift); }
 
extern "C" void __cdecl _mm_pause();
 
#pragma intrinsic(_mm_pause)
 
static inline void asm_pause() { _mm_pause();/* __asm {rep nop}*/ }
 
#endif
 
 
 
#if defined(_MSC_VER) && _MSC_VER < 1300
 
static inline u16 _byteswap_ushort(u16 i){return (i>>8)|(i<<8);}
 
static inline u32 _byteswap_ulong(u32 i){return _byteswap_ushort((u16)(i>>16))|(_byteswap_ushort((u16)i)<<16);};
 
#endif
 
 
 
#ifdef __GNUC__
 
#include <stdint.h>
 
#define HANDLE_PRAGMA_PACK_PUSH_POP
 
 
 
#define ATTR_ALIGN(x) __attribute__((aligned(x)))
 
 
 
#ifndef __clang__
 
    #ifndef __forceinline
 
    #define __forceinline __attribute__((always_inline))
 
    #endif // __forceinline
 
    #undef forceinline
 
    #define forceinline __forceinline
 
    #define _byteswap_ulong(x) _bswap(x) 
 
#endif // __clang__
 
 
 
static __inline__ void __debugbreak__(void)
 
{
 
  __asm__ __volatile__ ("int $3");
 
}
 
 
 
#define __debugbreak __debugbreak__
 
#ifndef _countof
 
#define _countof(x) (sizeof(x)/sizeof((x)[0]))
 
#endif
 
 
 
#define __assume(x)
 
 
 
#endif // __GNUC__
 
 
 
#endif // __SYSDEFS_H_INCLUDED