]> git.ipfire.org Git - thirdparty/gcc.git/commit
AVR: Adding +/-1 to a lower reg doesn't need a scratch.
authorGeorg-Johann Lay <avr@gjlay.de>
Fri, 3 Jul 2026 15:30:04 +0000 (17:30 +0200)
committerGeorg-Johann Lay <avr@gjlay.de>
Fri, 3 Jul 2026 17:24:53 +0000 (19:24 +0200)
commitf84dfd8305963f124c624570bb6eb0c84149f67a
treee97f4122e3db0bd57e6df3fa38cfcafe60695bfd
parent0b9e5f95108c44a57b3713329af35fdd04a5e744
AVR: Adding +/-1 to a lower reg doesn't need a scratch.

Adding +/-1 to a lower register can be performed by sequences like
   sec
   adc r14, __zero_reg__
   adc r15, __zero_reg__
resp.
   sec
   sbc r14, __zero_reg__
   sbc r15, __zero_reg__
that don't need a scratch reg.  The code size is unchanged but
the register pressure goes down.

gcc/
* config/avr/avr.cc (avr_out_plus_1): Handle +/-1 on the
lower regs without needing a scratch.
* config/avr/avr.md (add<mode>3_clobber, *add<mode>3_clobber)
(add<mode>3, *add<mode>3, addpsi3, *addpsi3): Add constraint
alternative "Y01 Ym1" for +/-1 without scratch.
gcc/config/avr/avr.cc
gcc/config/avr/avr.md