https://gcc.gnu.org/g:3b88dade7ff8a07fd0843ac1281e095cfd94453e

commit r14-10217-g3b88dade7ff8a07fd0843ac1281e095cfd94453e
Author: Wolfgang Hospital <wolfgang.hospi...@arcor.de>
Date:   Sat May 18 15:02:51 2024 +0200

    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)

Diff:
---
 libgcc/config/avr/lib1funcs.S | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/libgcc/config/avr/lib1funcs.S b/libgcc/config/avr/lib1funcs.S
index a0854139a0a3..1d04fed72644 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) */

Reply via email to