aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorWolfgang Hospital <Wolfgang.Hospital@arcor.de>2024-05-18 15:02:51 +0200
committerGeorg-Johann Lay <avr@gjlay.de>2024-05-18 15:14:58 +0200
commit3b88dade7ff8a07fd0843ac1281e095cfd94453e (patch)
treeb5bee7efefef3d884e3c2c0f0b4a23bc910a577f /libgcc
parentc887341432bb71cf5540d54955ad7265b0aaca77 (diff)
downloadgcc-3b88dade7ff8a07fd0843ac1281e095cfd94453e.zip
gcc-3b88dade7ff8a07fd0843ac1281e095cfd94453e.tar.gz
gcc-3b88dade7ff8a07fd0843ac1281e095cfd94453e.tar.bz2
AVR: target/115065 - Tweak __clzhi2.
The libgcc implementation of __clzhi2 can be tweaked by one cycle in some situations by re-arranging the instructions. It also reduces the WCET by 1 cycle. libgcc/ PR target/115065 * config/avr/lib1funcs.S (__clzhi2): Tweak. (cherry picked from commit 988838da722dea09bd81ee9d49800a6f24980372)
Diffstat (limited to 'libgcc')
-rw-r--r--libgcc/config/avr/lib1funcs.S8
1 files changed, 4 insertions, 4 deletions
diff --git a/libgcc/config/avr/lib1funcs.S b/libgcc/config/avr/lib1funcs.S
index a085413..1d04fed 100644
--- a/libgcc/config/avr/lib1funcs.S
+++ b/libgcc/config/avr/lib1funcs.S
@@ -2921,11 +2921,9 @@ DEFUN __clzhi2
clr r26
tst r25
brne 1f
- subi r26, -8
or r25, r24
- brne 1f
- ldi r24, 16
- ret
+ breq 0f
+ subi r26, -8
1: cpi r25, 16
brsh 3f
subi r26, -3
@@ -2936,6 +2934,8 @@ DEFUN __clzhi2
mov r24, r26
clr r25
ret
+0: ldi r24, 16
+ ret
ENDF __clzhi2
#endif /* defined (L_clzhi2) */