From a5b947fa660dddce05e02f23de61d77063c2573b Mon Sep 17 00:00:00 2001 From: George Spelvin Date: Mon, 12 Dec 2016 11:25:51 +0000 Subject: lib1funcs.S (__ashldi3): Use __tmp_reg__ to restore R16 instead of push + pop. libgcc/ 2016-12-12 George Spelvin * config/avr/lib1funcs.S (__ashldi3): Use __tmp_reg__ to restore R16 instead of push + pop. (__ashrdi3, __lshrdi3): Same. And use __zero_reg__ for signs. From-SVN: r243545 --- libgcc/config/avr/lib1funcs.S | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'libgcc/config/avr') diff --git a/libgcc/config/avr/lib1funcs.S b/libgcc/config/avr/lib1funcs.S index 82adfda..6ca2b82 100644 --- a/libgcc/config/avr/lib1funcs.S +++ b/libgcc/config/avr/lib1funcs.S @@ -3113,20 +3113,22 @@ ENDF __bswapdi2 **********************************/ #if defined (L_ashrdi3) + +#define SS __zero_reg__ + ;; Arithmetic shift right ;; r25:r18 = ashr64 (r25:r18, r17:r16) DEFUN __ashrdi3 - bst r25, 7 - bld __zero_reg__, 0 + sbrc r25, 7 + neg SS ;; FALLTHRU ENDF __ashrdi3 ;; Logic shift right ;; r25:r18 = lshr64 (r25:r18, r17:r16) DEFUN __lshrdi3 - lsr __zero_reg__ - sbc __tmp_reg__, __tmp_reg__ - push r16 + ;; Signs are in SS (zero_reg) + mov __tmp_reg__, r16 0: cpi r16, 8 brlo 2f subi r16, 8 @@ -3137,9 +3139,9 @@ DEFUN __lshrdi3 mov r22, r23 mov r23, r24 mov r24, r25 - mov r25, __tmp_reg__ + mov r25, SS rjmp 0b -1: asr __tmp_reg__ +1: asr SS ror r25 ror r24 ror r23 @@ -3150,16 +3152,21 @@ DEFUN __lshrdi3 ror r18 2: dec r16 brpl 1b - pop r16 + clr __zero_reg__ + mov r16, __tmp_reg__ ret ENDF __lshrdi3 + +#undef SS + #endif /* defined (L_ashrdi3) */ #if defined (L_ashldi3) ;; Shift left ;; r25:r18 = ashl64 (r25:r18, r17:r16) +;; This function does not clobber T. DEFUN __ashldi3 - push r16 + mov __tmp_reg__, r16 0: cpi r16, 8 brlo 2f mov r25, r24 @@ -3182,13 +3189,13 @@ DEFUN __ashldi3 rol r25 2: dec r16 brpl 1b - pop r16 + mov r16, __tmp_reg__ ret ENDF __ashldi3 #endif /* defined (L_ashldi3) */ #if defined (L_rotldi3) -;; Shift left +;; Rotate left ;; r25:r18 = rotl64 (r25:r18, r17:r16) DEFUN __rotldi3 push r16 -- cgit v1.1