aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorLuis Pires <luis.pires@eldorado.org.br>2021-09-10 08:26:04 -0300
committerDavid Gibson <david@gibson.dropbear.id.au>2021-09-29 19:37:38 +1000
commit4ff2a971f4dd533140c01607a0c776ba8d837bc7 (patch)
treee5d904ea4aed3805a8a878b915a29281da4efa17 /include
parent06c0259a086f0f4ddd57a14ba811bba0b9e45130 (diff)
downloadqemu-4ff2a971f4dd533140c01607a0c776ba8d837bc7.zip
qemu-4ff2a971f4dd533140c01607a0c776ba8d837bc7.tar.gz
qemu-4ff2a971f4dd533140c01607a0c776ba8d837bc7.tar.bz2
host-utils: fix missing zero-extension in divs128
*plow (lower 64 bits of the dividend) is passed into divs128() as a signed 64-bit integer. When building an __int128_t from it, it must be zero-extended, instead of sign-extended. Suggested-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Luis Pires <luis.pires@eldorado.org.br> Message-Id: <20210910112624.72748-3-luis.pires@eldorado.org.br> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'include')
-rw-r--r--include/qemu/host-utils.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/include/qemu/host-utils.h b/include/qemu/host-utils.h
index 711b221..753b9fb 100644
--- a/include/qemu/host-utils.h
+++ b/include/qemu/host-utils.h
@@ -70,7 +70,7 @@ static inline int divs128(int64_t *plow, int64_t *phigh, int64_t divisor)
if (divisor == 0) {
return 1;
} else {
- __int128_t dividend = ((__int128_t)*phigh << 64) | *plow;
+ __int128_t dividend = ((__int128_t)*phigh << 64) | (uint64_t)*plow;
__int128_t result = dividend / divisor;
*plow = result;
*phigh = dividend % divisor;