gcc/libgcc
Jakub Jelinek 59b6cece54 libgcc: Fix up bitint division [PR114397]
The Knuth's division algorithm relies on the number of dividend limbs
to be greater ore equal to number of divisor limbs, which is why
I've added a special case for un < vn at the start of __divmodbitint4.
Unfortunately, my assumption that it then implies abs(v) > abs(u) and
so quotient must be 0 and remainder same as dividend is incorrect.
This is because this check is done before negation of the operands.
While bitint_reduce_prec reduces precision from clearly useless limbs,
the problematic case is when the dividend is unsigned or non-negative
and divisor is negative.  We can have limbs (from MS to LS):
dividend:       0       M       ?...
divisor:        -1      -N      ?...
where M has most significant bit set and M >= N (if M == N then it
also the following limbs matter) and the most significant limbs can
be even partial.  In this case, the quotient should be -1 rather than
0.  bitint_reduce_prec will reduce the precision of the dividend so
that M is the most significant limb, but can't reduce precision of the
divisor to more than having the -1 as most significant limb, because
-N doesn't have the most significant bit set.

The following patch fixes it by detecting this problematic case in the
un < vn handling, and instead of assuming q is 0 and r is u will
decrease vn by 1 because it knows the later code will negate the divisor
and it can be then expressed after negation in one fewer limbs.

2024-03-21  Jakub Jelinek  <jakub@redhat.com>

	PR libgcc/114397
	* libgcc2.c (__divmodbitint4): Don't assume un < vn always means
	abs(v) > abs(u), check for a special case of un + 1 == vn where
	u is non-negative and v negative and after v's negation vn could
	be reduced by 1.

	* gcc.dg/torture/bitint-65.c: New test.
2024-03-21 13:07:50 +01:00
..
c++-minimal Update copyright years. 2024-01-03 12:19:35 +01:00
config Hurd x86_64: add unwind support for signal trampoline code 2024-03-20 20:25:09 +01:00
soft-fp libgcc: Fix UB in FP_FROM_BITINT 2024-02-13 10:33:08 +01:00
ChangeLog Daily bump. 2024-03-21 00:18:14 +00:00
config.host x86, libgcc: Implement ia32 basic heap trampoline [PR113855]. 2024-02-12 15:03:12 +00:00
config.in libgcc: Fix config.in 2023-12-08 12:35:40 +00:00
configure rs6000: Neuter option -mpower{8,9}-vector [PR109987] 2024-02-21 20:41:18 -06:00
configure.ac rs6000: Neuter option -mpower{8,9}-vector [PR109987] 2024-02-21 20:41:18 -06:00
crtstuff.c Update copyright years. 2024-01-03 12:19:35 +01:00
dfp-bit.c Update copyright years. 2024-01-03 12:19:35 +01:00
dfp-bit.h Update copyright years. 2024-01-03 12:19:35 +01:00
divmod.c Update copyright years. 2024-01-03 12:19:35 +01:00
emutls.c Update copyright years. 2024-01-03 12:19:35 +01:00
enable-execute-stack-empty.c
enable-execute-stack-mprotect.c Update copyright years. 2024-01-03 12:19:35 +01:00
find-symver.awk Update copyright years. 2024-01-03 12:19:35 +01:00
fixed-bit.c Update copyright years. 2024-01-03 12:19:35 +01:00
fixed-bit.h Update copyright years. 2024-01-03 12:19:35 +01:00
fixed-obj.mk
floatunsidf.c
floatunsisf.c
floatunsitf.c
floatunsixf.c
fp-bit.c Update copyright years. 2024-01-03 12:19:35 +01:00
fp-bit.h Update copyright years. 2024-01-03 12:19:35 +01:00
gbl-ctors.h Update copyright years. 2024-01-03 12:19:35 +01:00
gcov.h Update copyright years. 2024-01-03 12:19:35 +01:00
gen-fixed.sh
generic-morestack-thread.c Update copyright years. 2024-01-03 12:19:35 +01:00
generic-morestack.c Update copyright years. 2024-01-03 12:19:35 +01:00
generic-morestack.h Update copyright years. 2024-01-03 12:19:35 +01:00
gstdint.h
gthr-posix.h Update copyright years. 2024-01-03 12:19:35 +01:00
gthr-single.h Update copyright years. 2024-01-03 12:19:35 +01:00
gthr.h Update copyright years. 2024-01-03 12:19:35 +01:00
hardcfr.c Update copyright years. 2024-01-03 12:19:35 +01:00
libgcc2.c libgcc: Fix up bitint division [PR114397] 2024-03-21 13:07:50 +01:00
libgcc2.h libgcc: Avoid warnings on __gcc_nested_func_ptr_created [PR113402] 2024-02-01 21:10:10 +01:00
libgcc-std.ver.in Fix __builtin_nested_func_ptr_{created,deleted} symbol versions [PR113402] 2024-01-28 10:59:34 +00:00
libgcov-driver-system.c Update copyright years. 2024-01-03 12:19:35 +01:00
libgcov-driver.c Update copyright years. 2024-01-03 12:19:35 +01:00
libgcov-interface.c Update copyright years. 2024-01-03 12:19:35 +01:00
libgcov-merge.c Update copyright years. 2024-01-03 12:19:35 +01:00
libgcov-profiler.c Update copyright years. 2024-01-03 12:19:35 +01:00
libgcov-util.c Update copyright years. 2024-01-03 12:19:35 +01:00
libgcov.h Update copyright years. 2024-01-03 12:19:35 +01:00
Makefile.in Update copyright years. 2024-01-03 12:19:35 +01:00
memcmp.c
memcpy.c
memmove.c
memset.c
mkheader.sh Update copyright years. 2024-01-03 12:19:35 +01:00
mkmap-flat.awk Update copyright years. 2024-01-03 12:19:35 +01:00
mkmap-symver.awk Update copyright years. 2024-01-03 12:19:35 +01:00
offloadstuff.c Update copyright years. 2024-01-03 12:19:35 +01:00
shared-object.mk
siditi-object.mk
static-object.mk
strub.c Update copyright years. 2024-01-03 12:19:35 +01:00
sync.c Update copyright years. 2024-01-03 12:19:35 +01:00
udivhi3.c Update copyright years. 2024-01-03 12:19:35 +01:00
udivmod.c Update copyright years. 2024-01-03 12:19:35 +01:00
udivmodhi4.c Update copyright years. 2024-01-03 12:19:35 +01:00
udivmodsi4.c Update copyright years. 2024-01-03 12:19:35 +01:00
unwind-arm-common.inc Update copyright years. 2024-01-03 12:19:35 +01:00
unwind-c.c Update copyright years. 2024-01-03 12:19:35 +01:00
unwind-compat.c Update copyright years. 2024-01-03 12:19:35 +01:00
unwind-compat.h Update copyright years. 2024-01-03 12:19:35 +01:00
unwind-dw2-btree.h Update copyright years. 2024-01-03 12:19:35 +01:00
unwind-dw2-execute_cfa.h Update copyright years. 2024-01-03 12:19:35 +01:00
unwind-dw2-fde-compat.c Update copyright years. 2024-01-03 12:19:35 +01:00
unwind-dw2-fde-dip.c libgcc, nios2: Fix exception handling on nios2 with -fpic 2024-01-12 04:50:22 +00:00
unwind-dw2-fde.c Update copyright years. 2024-01-03 12:19:35 +01:00
unwind-dw2-fde.h Update copyright years. 2024-01-03 12:19:35 +01:00
unwind-dw2.c Update copyright years. 2024-01-03 12:19:35 +01:00
unwind-dw2.h Update copyright years. 2024-01-03 12:19:35 +01:00
unwind-generic.h Update copyright years. 2024-01-03 12:19:35 +01:00
unwind-pe.h Update copyright years. 2024-01-03 12:19:35 +01:00
unwind-seh.c libgcc: fix SEH C++ rethrow semantics [PR113337] 2024-02-06 08:23:26 +00:00
unwind-sjlj.c Update copyright years. 2024-01-03 12:19:35 +01:00
unwind.inc Update copyright years. 2024-01-03 12:19:35 +01:00
vtv_end_preinit.c Update copyright years. 2024-01-03 12:19:35 +01:00
vtv_end.c Update copyright years. 2024-01-03 12:19:35 +01:00
vtv_start_preinit.c Update copyright years. 2024-01-03 12:19:35 +01:00
vtv_start.c Update copyright years. 2024-01-03 12:19:35 +01:00