Raymond Toy pushed to branch issue-435-add-core-math-lisp-support at cmucl / cmucl

Commits:

1 changed file:

Changes:

  • src/lisp/irrat.c
    ... ... @@ -73,6 +73,16 @@ extern float cr_log2f(float);
    73 73
     	return fdlibm_setexception(x, FDLIBM_OVERFLOW); \
    
    74 74
         }
    
    75 75
     
    
    76
    +#ifdef DARWIN
    
    77
    +#define DARWIN_SINGLE_FLOAT_OVERFLOW(y) \
    
    78
    +    do {				\
    
    79
    +        if (fabs(y) >= 0x1.0p128) {				\
    
    80
    +	    return fdlibm_setexception(y, FDLIBM_OVERFLOW);	\
    
    81
    +	}							\
    
    82
    +    } while (0)
    
    83
    +    
    
    84
    +#endif
    
    85
    +    
    
    76 86
     double
    
    77 87
     lisp_sin(double x)
    
    78 88
     {
    
    ... ... @@ -483,9 +493,17 @@ lisp_expf(float x)
    483 493
     {
    
    484 494
     #ifdef FEATURE_CORE_MATH
    
    485 495
         return cr_expf(x);
    
    486
    -#else    
    
    496
    +#else
    
    497
    +#if defined(DARWIN)
    
    498
    +    double y = __ieee754_exp((double) x);
    
    499
    +
    
    500
    +    DARWIN_SINGLE_FLOAT_OVERFLOW(y);
    
    501
    +
    
    502
    +    return (float) y;
    
    503
    +#else
    
    487 504
         return (float) __ieee754_exp((double) x);
    
    488 505
     #endif
    
    506
    +#endif
    
    489 507
     }
    
    490 508
     
    
    491 509
     float