]> git.ipfire.org Git - thirdparty/gcc.git/commit
[xstormy16] Improved SImode shifts by two bits.
authorRoger Sayle <roger@nextmovesoftware.com>
Sun, 23 Apr 2023 09:25:04 +0000 (10:25 +0100)
committerRoger Sayle <roger@nextmovesoftware.com>
Sun, 23 Apr 2023 09:25:04 +0000 (10:25 +0100)
commit987caaae343ec8277391c875549859f8a288fd81
treea4530fccf777a79bb3725bf2acac988c6016c0b5
parent5830953a446959c5d8d9b569ffcd3e3bb16a06dc
[xstormy16] Improved SImode shifts by two bits.

Currently on xstormy16 SImode shifts by a single bit require two
instructions, and shifts by other non-zero integer immediate constants
require five instructions.  This patch implements the obvious optimization
that shifts by two bits can be done in four instructions, by using two
single-bit sequences.

Hence, ashift_2 was previously generated as:
        mov r7,r2 | shl r2,#2 | shl r3,#2 | shr r7,#14 | or r3,r7
        ret
and with this patch we now generate:
        shl r2,#1 | rlc r3,#1 | shl r2,#1 | rlc r3,#1
        ret

2023-04-23  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
* config/stormy16/stormy16.cc (xstormy16_output_shift): Implement
SImode shifts by two by performing a single bit SImode shift twice.

gcc/testsuite/ChangeLog
* gcc.target/xstormy16/shiftsi.c: New test case.
gcc/config/stormy16/stormy16.cc
gcc/testsuite/gcc.target/xstormy16/shiftsi.c [new file with mode: 0644]