From: ths Date: Tue, 23 Oct 2007 23:22:54 +0000 (+0000) Subject: Fix overflow when multiplying two large positive numbers. X-Git-Tag: xen-3.3.0-rc1~930 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=67fc07d3fba681f3362f7644a69b7a581a2670e8;p=qemu-xen-4.1-testing.git Fix overflow when multiplying two large positive numbers. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3429 c046a42c-6fe2-441c-8c8c-71466251a162 --- diff --git a/host-utils.c b/host-utils.c index 10341063f..cf2c6f8f1 100644 --- a/host-utils.c +++ b/host-utils.c @@ -43,7 +43,8 @@ void muls64(int64_t *phigh, int64_t *plow, int64_t a, int64_t b) ph = (a >> 32) * (b >> 32); ph += (int64_t)pm1 >> 32; - pm1 = (uint64_t)((uint32_t)pm1) + pm2 + (pl >> 32); + ph += (int64_t)pm2 >> 32; + pm1 = (uint64_t)((uint32_t)pm1) + (uint64_t)((uint32_t)pm2) + (pl >> 32); *phigh = ph + ((int64_t)pm1 >> 32); *plow = (pm1 << 32) + (uint32_t)pl; @@ -67,7 +68,8 @@ void mulu64(uint64_t *phigh, uint64_t *plow, uint64_t a, uint64_t b) ph = (a >> 32) * (b >> 32); ph += pm1 >> 32; - pm1 = (uint64_t)((uint32_t)pm1) + pm2 + (pl >> 32); + ph += pm2 >> 32; + pm1 = (uint64_t)((uint32_t)pm1) + (uint64_t)((uint32_t)pm2) + (pl >> 32); *phigh = ph + (pm1 >> 32); *plow = (pm1 << 32) + (uint32_t)pl;