diff options
Diffstat (limited to 'libgcc/libgcc2.c')
-rw-r--r-- | libgcc/libgcc2.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/libgcc/libgcc2.c b/libgcc/libgcc2.c index 120d071..3fcb85c 100644 --- a/libgcc/libgcc2.c +++ b/libgcc/libgcc2.c @@ -1715,11 +1715,18 @@ __divmodbitint4 (UBILtype *q, SItype qprec, && vn > 1 && (Wtype) v[BITINT_END (1, vn - 2)] >= 0) { - vp = 0; - --vn; + /* Unless all bits below the most significant limb are zero. */ + SItype vn2; + for (vn2 = vn - 2; vn2 >= 0; --vn2) + if (v[BITINT_END (vn - 1 - vn2, vn2)]) + { + vp = 0; + --vn; #if __LIBGCC_BITINT_ORDER__ == __ORDER_BIG_ENDIAN__ - ++v; + ++v; #endif + break; + } } if (__builtin_expect (un < vn, 0)) { |