diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 12c61b79200b6abaa037bfb14d6fc474ef89e9ce..6466bad462ce44b9121681580d68bbc5d73fbbdf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2006-11-17  Bob Wilson  <bob.wilson@acm.org>
+
+	* config/xtensa/lib1funcs.asm (__umulsidi3): Restore a0 on exit.
+
 2006-11-17  Zdenek Dvorak <dvorakz@suse.cz>
 
 	* tree-vrp.c (execute_vrp): Do not update current_loops.
diff --git a/gcc/config/xtensa/lib1funcs.asm b/gcc/config/xtensa/lib1funcs.asm
index 69d51a7551c0d2b557a0df2b3f224e8376729edb..9b9efa87be7ed4ded953559a62fb51184f16a2c0 100644
--- a/gcc/config/xtensa/lib1funcs.asm
+++ b/gcc/config/xtensa/lib1funcs.asm
@@ -323,6 +323,10 @@ __umulsidi3:
 
 #endif /* !MUL32_HIGH */
 
+#if !XCHAL_HAVE_MUL16 && !XCHAL_HAVE_MUL32 && !XCHAL_HAVE_MAC16
+	/* Restore the original return address.  */
+	l32i	a0, sp, 0
+#endif
 	leaf_return
 
 #if !XCHAL_HAVE_MUL16 && !XCHAL_HAVE_MUL32 && !XCHAL_HAVE_MAC16