#ifndef INTRIN_HPP #define INTRIN_HPP #include #if defined(__GNUC__) || defined(__clang__) inline int _leading_zeros(unsigned long long x){ return __builtin_clzll(x); } inline int _trailing_zeros(unsigned long long x){ return __builtin_ctzll(x); } bool _adc_u64(unsigned long long a,unsigned long long b,unsigned long long* c){ return __builtin_uaddll_overflow(a, b, c); } bool _sbc_u64(unsigned long long a,unsigned long long b,unsigned long long* c){ return __builtin_usubll_overflow(a, b, c); } inline unsigned long long _mulx_u64(unsigned long long a, unsigned long long b, unsigned long long* hi){ __uint128_t r = ((__uint128_t)a) * b; *hi = (unsigned long long)(r >> 64); return r; } #endif #ifdef _WIN64 #endif #endif //INTRIN_HPP