* [patch,avr,applied] PR target/114835 - Tweak __popcountqi2
@ 2024-05-07 14:31 Georg-Johann Lay
0 siblings, 0 replies; only message in thread
From: Georg-Johann Lay @ 2024-05-07 14:31 UTC (permalink / raw)
To: gcc-patches
Applied this tweak as proposed in the PR.
Johann
--
commit 6b73a9879a4503ebee2cb1a3ad243f60c922ca31
Author: Wolfgang Hospital <Wolfgang.Hospital@arcor.de>
Date: Tue May 7 16:24:39 2024 +0200
AVR: target/114835 - Tweak popcountqi2
libgcc/
PR target/114835
* config/avr/lib1funcs.S (__popcountqi2): Use code that
is one instruction shorter / faster.
diff --git a/libgcc/config/avr/lib1funcs.S b/libgcc/config/avr/lib1funcs.S
index af4d7d97016..4ac31fa104e 100644
--- a/libgcc/config/avr/lib1funcs.S
+++ b/libgcc/config/avr/lib1funcs.S
@@ -3050,21 +3050,21 @@ DEFUN __popcountdi2
;; r24 = popcount8 (r24)
;; clobbers: __tmp_reg__
DEFUN __popcountqi2
- mov __tmp_reg__, r24
- andi r24, 1
- lsr __tmp_reg__
- lsr __tmp_reg__
- adc r24, __zero_reg__
- lsr __tmp_reg__
- adc r24, __zero_reg__
- lsr __tmp_reg__
- adc r24, __zero_reg__
- lsr __tmp_reg__
- adc r24, __zero_reg__
- lsr __tmp_reg__
- adc r24, __zero_reg__
- lsr __tmp_reg__
- adc r24, __tmp_reg__
+ mov __tmp_reg__, r24 ; oeoeoeoe
+ andi r24, 0xAA ; o0o0o0o0
+ lsr r24 ; 0o0o0o0o
+ ;; Four values 0, 1 or 2: # bits set o+e
+ sub __tmp_reg__, r24 ; 44332211
+ mov r24, __tmp_reg__ ; 44332211
+ andi r24, 0x33 ; 00330011
+ eor __tmp_reg__, r24 ; 44002200
+ lsr __tmp_reg__ ; 04400220
+ lsr __tmp_reg__ ; 00440022
+ add r24, __tmp_reg__ ; 04210421
+ mov __tmp_reg__, r24 ; h421l421
+ swap __tmp_reg__ ; l421h421
+ add r24, __tmp_reg__ ; 84218421
+ andi r24, 0xf ; 00008421 /17
ret
ENDF __popcountqi2
#endif /* defined (L_popcountqi2) */
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-05-07 14:31 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-07 14:31 [patch,avr,applied] PR target/114835 - Tweak __popcountqi2 Georg-Johann Lay
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).