1234567891011121314151617181920212223242526 |
- #ifndef INTRIN_HPP
- #define INTRIN_HPP
- #include <cstdint>
- #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
|