[LLVMbugs] [Bug 611] NEW: "rem double x, y" always returns 0.0
bugzilla-daemon at cs.uiuc.edu
bugzilla-daemon at cs.uiuc.edu
Wed Aug 3 08:24:43 PDT 2005
http://llvm.cs.uiuc.edu/bugs/show_bug.cgi?id=611
Summary: "rem double x, y" always returns 0.0
Product: libraries
Version: trunk
Platform: PC
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: Backend: X86
AssignedTo: unassignedbugs at nondot.org
ReportedBy: brukman+bugs at uiuc.edu
According to fmod(3), the remainder of dividing x by y (both FP) is "x - n * y"
where "n is the quotient of x / y, rounded towards zero to an integer.
In the x86 backend, we are not doing that rounding to an integer, but just
multiplying the result of x/y (as a floating-point value) back by y, and then
subtracing, leading to always returning 0.0 .
LLVM:
fastcc double %float_mod(double %x_2, double %y_3) {
block0:
;; ** v12 = float_mod(x_2, y_3) **
%v12 = rem double %x_2, %y_3
br label %block1
block1:
%v4 = phi double [%v12, %block0]
ret double %v4
}
X86 asm:
float_mod:
fldl 12(%esp)
fldl 4(%esp)
fld %st(0)
fdiv %st(2)
# MISSING rounding to integer!
fmulp %st(2)
fsubp %st(1)
Bug found by Eric van Riet Paap. Thanks!
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
More information about the llvm-bugs
mailing list