Skip to content

Commit 5f540ba

Browse files
committed
Add 32-bit u64_mul10_gt version
1 parent 993d29a commit 5f540ba

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

firebird_utils.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,10 +251,18 @@ extern "C" int fbu_insert_field_info(void *master_ptr, ISC_STATUS* st, int is_ou
251251
#include <intrin.h>
252252
static int u64_mul10_gt(uint64_t r, uint64_t digit, uint64_t max, uint64_t *out)
253253
{
254+
#ifdef _WIN64
254255
uint64_t hi, lo = _umul128(r, 10, &hi);
255256
if (hi || lo > max - digit) return 1;
256257
*out = lo + digit;
257258
return 0;
259+
#else
260+
// TODO: needs testing
261+
/* x86: no _umul128; equivalent overflow check without 128-bit arithmetic */
262+
if (r > (max - digit) / 10) return 1;
263+
*out = r * 10 + digit;
264+
return 0;
265+
#endif
258266
}
259267
#else
260268
static int u64_mul10_gt(uint64_t r, uint64_t digit, uint64_t max, uint64_t *out)

0 commit comments

Comments
 (0)