<div dir="ltr"><div>This is a rather embarrassing mistake that I made - I simply misunderstood Python's output:<br><br></div>$ python3<br><div>>>> 152313999999999991610955792383 / 10000000000000000000<br>15231400000.0<br>>>> 152313999999999991610955792383 // 10000000000000000000<br>15231399999<br><br></div><div>Apologies for the noise.<br></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 25, 2018 at 10:34 AM, Stephen Canon <span dir="ltr"><<a href="mailto:scanon@apple.com" target="_blank">scanon@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail-"><br>
<br>
> On Apr 25, 2018, at 12:33 AM, Andrew Kelley via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br>
> <br>
> 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%.<wbr>16llX%.16llX\n",<br>
>             qt.s.high, qt.s.low, rt.s.high, rt.s.low);<br>
> <br>
>     return 0;<br>
> }<br>
> <br>
> This corresponds to the inputs <br>
> a=<wbr>152313999999999991610955792383<br>
> b=10000000000000000000<br>
> <br>
> The correct result of division is<br>
> r=15231400000<br>
> q=9999991610955792383<br>
> <br>
> However compiler-rt gives:<br>
> r=15231399999<br>
> q=9999991610955792383<br>
<br>
</span>Are your results mislabeled? Integer division rounds towards zero, so the correct division result is 15231399999, which you have as the compiler-rt result.<br>
<br>
– Steve</blockquote></div><br></div></div></div></div>