summaryrefslogtreecommitdiffstats
path: root/toolchain/gcc/patches/4.3.5/942-avr32_fix_32bit_div.patch
blob: af66a6d5005a3f5525d2e7b53655bf0e5b0e6a66 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
--- 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 */