35 lines
1005 B
Diff
35 lines
1005 B
Diff
|
--- 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 */
|