| 353 | } |
| 354 | |
| 355 | fastfloat_really_inline FASTFLOAT_CONSTEXPR14 |
| 356 | uint64_t umul128_generic(uint64_t ab, uint64_t cd, uint64_t *hi) { |
| 357 | uint64_t ad = emulu((uint32_t)(ab >> 32), (uint32_t)cd); |
| 358 | uint64_t bd = emulu((uint32_t)ab, (uint32_t)cd); |
| 359 | uint64_t adbc = ad + emulu((uint32_t)ab, (uint32_t)(cd >> 32)); |
| 360 | uint64_t adbc_carry = !!(adbc < ad); |
| 361 | uint64_t lo = bd + (adbc << 32); |
| 362 | *hi = emulu((uint32_t)(ab >> 32), (uint32_t)(cd >> 32)) + (adbc >> 32) + |
| 363 | (adbc_carry << 32) + !!(lo < bd); |
| 364 | return lo; |
| 365 | } |
| 366 | |
| 367 | #ifdef FASTFLOAT_32BIT |
| 368 |
no test coverage detected