From 500164d2363d678e4c44a45c8962ca4081e5b218 Mon Sep 17 00:00:00 2001
From: Marek Michalkiewicz <marekm@linux.org.pl>
Date: Wed, 28 Mar 2001 19:11:28 +0200
Subject: [PATCH] libgcc.S (__mulhi3): Correct tests to exit the loop when
 multiplier or multiplicand is zero.

	* config/avr/libgcc.S (__mulhi3): Correct tests to exit the loop
	when multiplier or multiplicand is zero.

From-SVN: r40933
---
 gcc/ChangeLog           | 5 +++++
 gcc/config/avr/libgcc.S | 4 +++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8c76b2e0c858..2b2ae64d548f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2001-03-28  Marek Michalkiewicz  <marekm@linux.org.pl>
+
+	* config/avr/libgcc.S (__mulhi3): Correct tests to exit the loop
+	when multiplier or multiplicand is zero.
+
 2001-03-28  Bernd Schmidt  <bernds@redhat.com>
 
 	* cselib.c (hash_rtx): Don't do tail recursion elimination by hand.
diff --git a/gcc/config/avr/libgcc.S b/gcc/config/avr/libgcc.S
index cdf2c3f4ee1f..b438954b757f 100644
--- a/gcc/config/avr/libgcc.S
+++ b/gcc/config/avr/libgcc.S
@@ -137,11 +137,13 @@ __mulhi3_skip1:
 	add	r_arg2L,r_arg2L	; shift multiplicand
 	adc	r_arg2H,r_arg2H
 
-	cpc	r_arg2L,__zero_reg__
+	cp	r_arg2L,__zero_reg__
+	cpc	r_arg2H,__zero_reg__
 	breq	__mulhi3_exit	; while multiplicand != 0
 
 	lsr	r_arg1H		; gets LSB of multiplier
 	ror	r_arg1L
+	cp	r_arg1L,__zero_reg__
 	cpc	r_arg1H,__zero_reg__
 	brne	__mulhi3_loop	; exit if multiplier = 0
 __mulhi3_exit:
-- 
GitLab