On Tuesday, 20 June 2017 at 01:58:22 UTC, Era Scarecrow wrote:
   long t;    //temporary, doubles as carry
   <snip>
        t >>= uint.sizeof*8;


To note, looking in compiler explorer (GDC 5.2.0), the following output is present (for the above line):

        mov     rax, QWORD PTR [rbp-24]
        shr     rax, 32
        mov     QWORD PTR [rbp-24], rax

'shr' is unsigned right shift, when it should be 'sar' signed right shift. That is my guess where the bug is.

Reply via email to