credit @aqrit
| 1814 | |
| 1815 | // credit @aqrit |
| 1816 | fastfloat_really_inline FASTFLOAT_CONSTEXPR14 uint32_t |
| 1817 | parse_eight_digits_unrolled(uint64_t val) { |
| 1818 | uint64_t const mask = 0x000000FF000000FF; |
| 1819 | uint64_t const mul1 = 0x000F424000000064; // 100 + (1000000ULL << 32) |
| 1820 | uint64_t const mul2 = 0x0000271000000001; // 1 + (10000ULL << 32) |
| 1821 | val -= 0x3030303030303030; |
| 1822 | val = (val * 10) + (val >> 8); // val = (val * 2561) >> 8; |
| 1823 | val = (((val & mask) * mul1) + (((val >> 16) & mask) * mul2)) >> 32; |
| 1824 | return uint32_t(val); |
| 1825 | } |
| 1826 | |
| 1827 | // Call this if chars are definitely 8 digits. |
| 1828 | template <typename UC> |
no test coverage detected