<div dir="ltr"><div><div><div><div><div><div><div><div><div>Here is my test case:<br><br>#include <stdio.h><br><br>int main(int argc, char **argv) {<br>    tu_int a = (tu_int)0x1ec273014 << 64 | 0xff7377ffffffffffuLL;<br>    tu_int b = (tu_int)0x8ac7230489e80000uLL;<br>    tu_int r;<br>    tu_int q = __udivmodti4(a, b, &r);<br><br>    utwords qt;<br>    qt.all = q;<br>    utwords rt;<br>    rt.all = r;<br>    fprintf(stderr, "q=0x%.16llX%.16llX\nr=0x%.16llX%.16llX\n",<br>            qt.s.high, qt.s.low, rt.s.high, rt.s.low);<br><br>    return 0;<br>}<br><br></div>This corresponds to the inputs <br></div>a=152313999999999991610955792383<br></div>b=10000000000000000000<br><br></div>The correct result of division is<br></div>r=15231400000<br></div>q=9999991610955792383<br><br></div>However compiler-rt gives:<br></div>r=15231399999<br>q=9999991610955792383<br><br><br></div><div>Is this a bug?<br></div><div><div><div><div><div><div><br><br></div></div></div></div></div></div></div>