mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-26 21:33:59 +08:00
AVR: target/114835 - Tweak popcountqi2
libgcc/ PR target/114835 * config/avr/lib1funcs.S (__popcountqi2): Use code that is one instruction shorter / faster.
This commit is contained in:
parent
3f04f3939e
commit
8d2c93fcfe
@ -3050,21 +3050,21 @@ ENDF __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) */
|
||||
|
Loading…
Reference in New Issue
Block a user