--- a/gcc/config/avr32/lib1funcs.S
+++ b/gcc/config/avr32/lib1funcs.S
@@ -2257,10 +2257,13 @@ __avr32_f32_div:
  
         /* Unpack */
         lsl     r12,1
-        reteq   0                       /* Return zero if op1 is zero */
         lsl     r11,1
         breq    4f                      /* Check op2 for zero */
-        
+
+        tst     r12, r12
+        moveq   r9, 0
+        breq    12
+
         /* Unpack op1*/ 
         /* exp: r9 */
         /* sf:  r12 */
@@ -2279,9 +2282,14 @@ __avr32_f32_div:
         breq    13f /*If number is subnormal*/
         cp      r10, 0xff
         brhs    3f  /* Check op2 for NaN or Inf */      
-        
         lsl     r11,7
         sbr     r11, 31 /*Implicit bit*/
+
+        cp.w    r9, 0
+        subfeq  r12, 0
+        reteq   0                       /* op1 is zero and op2 is not zero */
+                                        /* or NaN so return zero */
+
 14:     
  
         /* For UC3, store with predecrement is faster than stm */
