diff --git a/libgcc/config/avr/lib1funcs.S b/libgcc/config/avr/lib1funcs.S
index 535510ab8672092e115ff49bb193386bbe3e8e42..af4d7d970169b289004835ed3a791a71c09df95a 100644
--- a/libgcc/config/avr/lib1funcs.S
+++ b/libgcc/config/avr/lib1funcs.S
@@ -1339,9 +1339,9 @@ ENDF __umulsidi3
 
 #if defined (L_udivmodqi4)
 DEFUN __udivmodqi4
-	sub	r_rem,r_rem	; clear remainder and carry
-	ldi	r_cnt,9		; init loop counter
-	rjmp	__udivmodqi4_ep	; jump to entry point
+	clr	r_rem		; clear remainder
+	ldi	r_cnt,8		; init loop counter
+	lsl	r_arg1		; shift dividend
 __udivmodqi4_loop:
 	rol	r_rem		; shift dividend into remainder
 	cp	r_rem,r_arg2	; compare remainder & divisor