bug in longlong.h for aarch64 sub_ddmmss

Torbjörn Granlund tg at gmplib.org
Wed Jun 17 20:56:49 UTC 2020

nisse at lysator.liu.se (Niels Möller) writes:

  Do you agree?

I agree.

  The excluded case,

    sub_ddmmss(ah, al, bh, /*compile time constant*/0) 

  could clearly be optimized, in a different way, but I'd guess it's rare
  enough in real code to not be worth the effort?

Clearly, longlong.h was too complicated to get right already, so let's
not add an even deeper if-else tree.  (Look at the 64-bit PPC add_ssaaaa
to see what I'm talking about.)

Here is a better patch for 6.2.0.  It actually improves generated code.

* For Arm32/64, we use ADDS in sub_ddmmss whenever the rhs immediate
  value is negative.  We let gcc decide which operands fit and which
  need to go through a temp register.  (This improves code as ADDS
  allows constants 0,1,2,..,4095 and also 0,4096,8192..,4096*4095.  That
  latter interval was not handled before.)

* We improve add_ssaaaa analogously.

* For PPC, we explicitly exclude 0.  Also, we fixed a repeated typo
  causing invalid ADDIC forms to be use.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: diff
Type: application/octet-stream
Size: 7076 bytes
Desc: not available
URL: <https://gmplib.org/list-archives/gmp-bugs/attachments/20200617/addddb1b/attachment.obj>
-------------- next part --------------

Please encrypt, key id 0xC8601622

More information about the gmp-bugs mailing list