summaryrefslogtreecommitdiffstats
path: root/toolchain/gcc/patches/4.3.5/946-avr32_fix_32bit_div_2.patch
blob: 3f2bfb35c3bcbea9158bd5fbb09f0dcb9dca97d7 (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
--- a/gcc/config/avr32/lib1funcs.S
+++ b/gcc/config/avr32/lib1funcs.S
@@ -2271,7 +2271,7 @@ __avr32_f32_div:
 
         tst     r12, r12
         moveq   r9, 0
-        breq    12
+        breq    12f
 
         /* Unpack op1*/ 
         /* exp: r9 */
@@ -2467,9 +2467,14 @@ __divsf_return_op1:
         reteq   0       /* Return zero if number/inf*/
         ret     -1      /* Return NaN*/
 4:
-        /* Op2 is zero ? */
+        /* Op1 is zero ? */
         tst     r12,r12
         reteq   -1      /* 0.0/0.0 is NaN */
+        /* Op1 is Nan? */
+        lsr     r9, r12, 24
+        breq    11f /*If number is subnormal*/
+        cp      r9, 0xff
+        brhs    2b  /* Check op1 for NaN or Inf */
         /* Nonzero/0.0 is Inf. Sign bit will be shifted in before returning*/
 	mov_imm	r12, 0xff000000
         rjmp    __divsf_return_op1