------- Comment #8 from magnus dot christensson at acm dot org 2009-10-05 12:36 ------- (In reply to comment #7) > A fix is to write > > uint32 res = ((uint32)(uint16)(cpu->gprs[12] >> 16) > * (uint32)(uint16)(cpu->gprs[16] >> 16)); > > instead to force the multiplication in an unsigned type. >
Thanks. It wasn't obvious to me that a multiply on two unsigned variables would be promoted to signed. The uint32 trick will work here, but won't work if your target machine has 64-bit integers. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41577