Update lang/erlang to version 17.3,3
[dports.git] / math / gsl / files / patch-ieee-utils-fp-freebsd.c
1 --- ieee-utils/fp-freebsd.c.orig        2014-02-03 11:46:44.000000000 -0600
2 +++ ieee-utils/fp-freebsd.c     2014-02-03 11:46:18.000000000 -0600
3 @@ -24,10 +24,28 @@
4  int
5  gsl_ieee_set_mode (int precision, int rounding, int exception_mask)
6  {
7 -  fp_prec_t prec = 0 ;
8    fp_except_t mode = 0 ;
9    fp_rnd_t    rnd  = 0 ;
10  
11 +#ifdef __powerpc__
12 +  switch (precision)
13 +    {
14 +    case GSL_IEEE_SINGLE_PRECISION:
15 +      GSL_ERROR ("powerpc only supports default precision rounding", GSL_EUNSUP)
16 +;
17 +      break ;
18 +    case GSL_IEEE_DOUBLE_PRECISION:
19 +      GSL_ERROR ("powerpc only supports default precision rounding", GSL_EUNSUP)
20 +;
21 +      break ;
22 +    case GSL_IEEE_EXTENDED_PRECISION:
23 +      GSL_ERROR ("powerpc only supports default precision rounding", GSL_EUNSUP)
24 +;
25 +      break ;
26 +    }
27 +#else
28 +  fp_prec_t prec = 0 ;
29 +
30    switch (precision)
31      {
32      case GSL_IEEE_SINGLE_PRECISION:
33 @@ -43,6 +61,7 @@
34        fpsetprec(prec);
35        break ;
36      }
37 +#endif
38  
39    switch (rounding)
40      {
41 @@ -69,13 +88,23 @@
42  
43    /* Turn on all the exceptions apart from 'inexact' */
44  
45 -  mode = FP_X_INV | FP_X_DNML | FP_X_DZ | FP_X_OFL | FP_X_UFL ;
46 +  mode = FP_X_INV | FP_X_DZ | FP_X_OFL | FP_X_UFL ;
47  
48    if (exception_mask & GSL_IEEE_MASK_INVALID)
49      mode &= ~ FP_X_INV ;
50  
51    if (exception_mask & GSL_IEEE_MASK_DENORMALIZED)
52 -    mode &= ~ FP_X_DNML ;
53 +    {
54 +      /* do nothing */
55 +    }
56 +  else
57 +    {
58 +#ifdef __powerpc__
59 +      GSL_ERROR ("powerpc does not support the denormalized operand exception. "                 "Use 'mask-denormalized' to work around this.", GSL_EUNSUP) ;
60 +#else
61 +      mode |= FP_X_DNML;
62 +#endif
63 +    }
64  
65    if (exception_mask & GSL_IEEE_MASK_DIVISION_BY_ZERO)
66      mode &= ~ FP_X_DZ ;