Raymond Toy pushed to branch issue-435-add-core-math-lisp-support at cmucl / cmucl
Commits:
-
2ce06664
by Raymond Toy at 2026-02-28T07:42:43-08:00
1 changed file:
Changes:
| ... | ... | @@ -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
|