Message ID | 20220330202515.66554-2-lucas.araujo@eldorado.org.br (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | VDIV/VMOD Implementation | expand |
On Wed, 30 Mar 2022 at 21:26, Lucas Mateus Castro(alqotel) <lucas.araujo@eldorado.org.br> wrote: > > From: Matheus Ferst <matheus.ferst@eldorado.org.br> > > Avoid the left shift of negative values in int128_lshift by casting > a/a.hi to unsigned. We compile with -fwrapv, so left shift of negative integers should always be well-defined for us. thanks -- PMM
diff --git a/include/qemu/int128.h b/include/qemu/int128.h index 2c4064256c..2a19558ac6 100644 --- a/include/qemu/int128.h +++ b/include/qemu/int128.h @@ -85,7 +85,7 @@ static inline Int128 int128_rshift(Int128 a, int n) static inline Int128 int128_lshift(Int128 a, int n) { - return a << n; + return (__uint128_t)a << n; } static inline Int128 int128_add(Int128 a, Int128 b) @@ -305,7 +305,7 @@ static inline Int128 int128_lshift(Int128 a, int n) if (n >= 64) { return int128_make128(0, l); } else if (n > 0) { - return int128_make128(l, (a.hi << n) | (a.lo >> (64 - n))); + return int128_make128(l, ((uint64_t)a.hi << n) | (a.lo >> (64 - n))); } return a; }