On 06/20/2013 08:00 AM, Paolo Bonzini wrote: > static inline Int128 int128_sub(Int128 a, Int128 b) > { > - return int128_add(a, int128_neg(b)); > + uint64_t lo = a.lo - b.lo; > + return (Int128) { lo, (lo < a.lo) + a.hi - b.hi };
This one isn't right. Consider { 2, 0 } - { 2, 0 } lo = 2 - 2 = 0; = { 0, (0 < 2) + 0 - 0 } = { 0, 1 } I'd be happier with a more traditional (Int128){ a.lo - b.lo, a.hi - b.hi - (a.lo < b.lo) }; r~