On Fri, Dec 7, 2012 at 8:18 PM, Peter Gavin <[email protected]> wrote: > On Fri, Dec 7, 2012 at 3:47 AM, Julius Baxter <[email protected]> > wrote: >> >> I thought that unsigned 32-bit x 32-bit going to a 64-bit result >> register can't overflow. I guess signed can, though. 64-bit x 64-bit >> -> 64-bit result register can overflow, of course, so that's in there. > > > These are all 32x32-bit to 64-bit products. Whether signed or unsigned, the > result always fits in 64 bits. > > Unsigned clearly cannot overflow: > > (2^32 - 1)*(2^32 - 1) = (2^64 - 2*2^32 - 1) <= 2^64-1 > > The maximum signed positive 32-bit number is 2^31-1, and the maximum > negative is -2^31. The maximum positive 64-bit number is 2^63-1, and the > maximum negative is -2^63. > > So neither can signed: > > Max positive * max positive: (2^31 - 1)*(2^31 - 1) = (2^62 - 2*2^31 + 1) <= > 2^63-1 > > Max positive * max negative: (2^31 - 1)*(-2^31) = (-2^62 + 2^31) >= -2^63 > > Max negative * max negative: (-2^31)*(-2^31) = (2^62) <= 2^63-1 >
OK, I think that all looks good. So then the current draft should be OK, right? The overflow exceptions I've put in are for 64-bit mode (where SPRs are still only 32-bits wide, so you're back to the standard 64-bit multiplication situation.) Julius _______________________________________________ OpenRISC mailing list [email protected] http://lists.openrisc.net/listinfo/openrisc
