diff --git a/include/fast_float/digit_comparison.h b/include/fast_float/digit_comparison.h index 435a2c8..6984837 100644 --- a/include/fast_float/digit_comparison.h +++ b/include/fast_float/digit_comparison.h @@ -347,6 +347,15 @@ parse_mantissa(bigint &result, const parsed_number_string_t &num) noexcept { } // process all digits, in increments of step per loop while (p != pend) { +#if defined(FASTFLOAT_64BIT_LIMB) && defined(FASTFLOAT_X86_SIMD) && \ + FASTFLOAT_X86_SIMD >= 31 + if FASTFLOAT_CONSTEXPR17 (sizeof(UC) == 1) { + if (!is_constant_evaluated() && (std::distance(p, pend) >= 16) && + (step - counter >= 16) && (max_digits - digits >= 16)) { + parse_sixteen_digits(p, value, counter, digits); + } + } +#endif while ((std::distance(p, pend) >= 8) && (step - counter >= 8) && (max_digits - digits >= 8)) { parse_eight_digits(p, value, counter, digits);