intrin.hpp 757 B

1234567891011121314151617181920212223242526
  1. #ifndef INTRIN_HPP
  2. #define INTRIN_HPP
  3. #include <cstdint>
  4. #if defined(__GNUC__) || defined(__clang__)
  5. inline int _leading_zeros(unsigned long long x){
  6. return __builtin_clzll(x);
  7. }
  8. inline int _trailing_zeros(unsigned long long x){
  9. return __builtin_ctzll(x);
  10. }
  11. bool _adc_u64(unsigned long long a,unsigned long long b,unsigned long long* c){
  12. return __builtin_uaddll_overflow(a, b, c);
  13. }
  14. bool _sbc_u64(unsigned long long a,unsigned long long b,unsigned long long* c){
  15. return __builtin_usubll_overflow(a, b, c);
  16. }
  17. inline unsigned long long _mulx_u64(unsigned long long a, unsigned long long b, unsigned long long* hi){
  18. __uint128_t r = ((__uint128_t)a) * b;
  19. *hi = (unsigned long long)(r >> 64);
  20. return r;
  21. }
  22. #endif
  23. #ifdef _WIN64
  24. #endif
  25. #endif //INTRIN_HPP