[llvm-dev] compiler-rt incorrect for this udivmodti4 case?

Andrew Kelley via llvm-dev llvm-dev at lists.llvm.org
Tue Apr 24 21:33:28 PDT 2018


Here is my test case:

#include <stdio.h>

int main(int argc, char **argv) {
    tu_int a = (tu_int)0x1ec273014 << 64 | 0xff7377ffffffffffuLL;
    tu_int b = (tu_int)0x8ac7230489e80000uLL;
    tu_int r;
    tu_int q = __udivmodti4(a, b, &r);

    utwords qt;
    qt.all = q;
    utwords rt;
    rt.all = r;
    fprintf(stderr, "q=0x%.16llX%.16llX\nr=0x%.16llX%.16llX\n",
            qt.s.high, qt.s.low, rt.s.high, rt.s.low);

    return 0;
}

This corresponds to the inputs
a=152313999999999991610955792383
b=10000000000000000000

The correct result of division is
r=15231400000
q=9999991610955792383

However compiler-rt gives:
r=15231399999
q=9999991610955792383


Is this a bug?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180425/f7788ed8/attachment.html>


More information about the llvm-dev mailing list