Fix division and modulo for very large negative numbers (#1790)

This commit is contained in:
Rangi
2025-08-11 20:46:47 -04:00
committed by GitHub
parent 30a8503dcd
commit 7df9c12a6c
5 changed files with 91 additions and 10 deletions

30
test/asm/div-negative.out Normal file
View File

@@ -0,0 +1,30 @@
-2147483648 ($80000000) / -2147483648 ($80000000) = 1 ($00000001) R 0 ($00000000)
-2147483648 ($80000000) / -1073741824 ($c0000000) = 2 ($00000002) R 0 ($00000000)
-2147483648 ($80000000) / -268435456 ($f0000000) = 8 ($00000008) R 0 ($00000000)
-2147483648 ($80000000) / -134217728 ($f8000000) = 16 ($00000010) R 0 ($00000000)
-2147483648 ($80000000) / -16777216 ($ff000000) = 128 ($00000080) R 0 ($00000000)
-1073741824 ($c0000000) / -2147483648 ($80000000) = 0 ($00000000) R -1073741824 ($c0000000)
-1073741824 ($c0000000) / -1073741824 ($c0000000) = 1 ($00000001) R 0 ($00000000)
-1073741824 ($c0000000) / -268435456 ($f0000000) = 4 ($00000004) R 0 ($00000000)
-1073741824 ($c0000000) / -134217728 ($f8000000) = 8 ($00000008) R 0 ($00000000)
-1073741824 ($c0000000) / -16777216 ($ff000000) = 64 ($00000040) R 0 ($00000000)
-134217728 ($f8000000) / -2147483648 ($80000000) = 0 ($00000000) R -134217728 ($f8000000)
-134217728 ($f8000000) / -1073741824 ($c0000000) = 0 ($00000000) R -134217728 ($f8000000)
-134217728 ($f8000000) / -268435456 ($f0000000) = 0 ($00000000) R -134217728 ($f8000000)
-134217728 ($f8000000) / -134217728 ($f8000000) = 1 ($00000001) R 0 ($00000000)
-134217728 ($f8000000) / -16777216 ($ff000000) = 8 ($00000008) R 0 ($00000000)
0 ($00000000) / -2147483648 ($80000000) = 0 ($00000000) R 0 ($00000000)
0 ($00000000) / -1073741824 ($c0000000) = 0 ($00000000) R 0 ($00000000)
0 ($00000000) / -268435456 ($f0000000) = 0 ($00000000) R 0 ($00000000)
0 ($00000000) / -134217728 ($f8000000) = 0 ($00000000) R 0 ($00000000)
0 ($00000000) / -16777216 ($ff000000) = 0 ($00000000) R 0 ($00000000)
8388608 ($00800000) / -8388608 ($ff800000) = -1 ($ffffffff) R 0 ($00000000)
50331648 ($03000000) / -50331648 ($fd000000) = -1 ($ffffffff) R 0 ($00000000)
50331648 ($03000000) / -16777216 ($ff000000) = -3 ($fffffffd) R 0 ($00000000)
50331648 ($03000000) / -8388608 ($ff800000) = -6 ($fffffffa) R 0 ($00000000)
1610612736 ($60000000) / -50331648 ($fd000000) = -32 ($ffffffe0) R 0 ($00000000)
1610612736 ($60000000) / -16777216 ($ff000000) = -96 ($ffffffa0) R 0 ($00000000)
1610612736 ($60000000) / -8388608 ($ff800000) = -192 ($ffffff40) R 0 ($00000000)
2130706432 ($7f000000) / -50331648 ($fd000000) = -43 ($ffffffd5) R -33554432 ($fe000000)
2130706432 ($7f000000) / -16777216 ($ff000000) = -127 ($ffffff81) R 0 ($00000000)
2130706432 ($7f000000) / -8388608 ($ff800000) = -254 ($ffffff02) R 0 ($00000000)