Hi,

Does anyone know of a nice way to detect 64 x 64 -> 64 multiply overflow on 
aarch64?

On x86 you can just use the V flag, but aarch64 seems to have no option to set 
the flags after a MUL instruction which I find very odd.

The only solution I can think of is to do the equivalent of

  r = a * b;
  if (r/a != b) overflow();

There is some short circuiting you can do to avoid the div if you know there is 
no possibility it could have overflowed.

Eg.

  if (clz(labs(a)) + clz(labs(b)) < 32) {
    r = a * b;
    if (r/a != b) overflow();
  }

Then there is the special case of a = 0x8000000000000000 and b == -1.

All in all its a mess just to detect overflow.

Regards,
Ed.



_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to