diff options
Diffstat (limited to 'absl/numeric')
-rw-r--r-- | absl/numeric/int128.cc | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/absl/numeric/int128.cc b/absl/numeric/int128.cc index f24b785c04c0..3688e5efef45 100644 --- a/absl/numeric/int128.cc +++ b/absl/numeric/int128.cc @@ -130,16 +130,26 @@ uint128::uint128(double v) : uint128(MakeUint128FromFloat(v)) {} uint128::uint128(long double v) : uint128(MakeUint128FromFloat(v)) {} uint128 operator/(uint128 lhs, uint128 rhs) { +#if defined(ABSL_HAVE_INTRINSIC_INT128) + return static_cast<unsigned __int128>(lhs) / + static_cast<unsigned __int128>(rhs); +#else // ABSL_HAVE_INTRINSIC_INT128 uint128 quotient = 0; uint128 remainder = 0; DivModImpl(lhs, rhs, "ient, &remainder); return quotient; +#endif // ABSL_HAVE_INTRINSIC_INT128 } uint128 operator%(uint128 lhs, uint128 rhs) { +#if defined(ABSL_HAVE_INTRINSIC_INT128) + return static_cast<unsigned __int128>(lhs) % + static_cast<unsigned __int128>(rhs); +#else // ABSL_HAVE_INTRINSIC_INT128 uint128 quotient = 0; uint128 remainder = 0; DivModImpl(lhs, rhs, "ient, &remainder); return remainder; +#endif // ABSL_HAVE_INTRINSIC_INT128 } namespace { |