… | |
… | |
587 | uint32_t r; |
587 | uint32_t r; |
588 | |
588 | |
589 | #if ECB_STDFP |
589 | #if ECB_STDFP |
590 | memcpy (&r, &x, 4); |
590 | memcpy (&r, &x, 4); |
591 | #else |
591 | #else |
592 | /* slow emulation, works for anything but nan's and -0 */ |
592 | /* slow emulation, works for anything but -0 */ |
593 | ECB_EXTERN_C float frexpf (float v, int *e); |
593 | ECB_EXTERN_C float frexpf (float v, int *e); |
594 | uint32_t m; |
594 | uint32_t m; |
595 | int e; |
595 | int e; |
596 | |
596 | |
597 | if (x == 0e0f ) return 0; |
597 | if (x == 0e0f ) return 0; |
598 | if (x > +3.40282346638528860e+38f) return 0x7f800000U; |
598 | if (x > +3.40282346638528860e+38f) return 0x7f800000U; |
599 | if (x < -3.40282346638528860e+38f) return 0xff800000U; |
599 | if (x < -3.40282346638528860e+38f) return 0xff800000U; |
|
|
600 | if (x != x ) return 0x7fbfffffU; |
600 | |
601 | |
601 | m = frexpf (x, &e) * 0x1000000U; |
602 | m = frexpf (x, &e) * 0x1000000U; |
602 | |
603 | |
603 | r = m & 0x80000000U; |
604 | r = m & 0x80000000U; |
604 | |
605 | |
… | |
… | |
659 | uint64_t r; |
660 | uint64_t r; |
660 | |
661 | |
661 | #if ECB_STDFP |
662 | #if ECB_STDFP |
662 | memcpy (&r, &x, 8); |
663 | memcpy (&r, &x, 8); |
663 | #else |
664 | #else |
664 | /* slow emulation, works for anything but nan's and -0 */ |
665 | /* slow emulation, works for anything but -0 */ |
665 | ECB_EXTERN_C double frexp (double v, int *e); |
666 | ECB_EXTERN_C double frexp (double v, int *e); |
666 | uint64_t m; |
667 | uint64_t m; |
667 | int e; |
668 | int e; |
668 | |
669 | |
669 | if (x == 0e0 ) return 0; |
670 | if (x == 0e0 ) return 0; |
670 | if (x > +1.79769313486231470e+308) return 0x7ff0000000000000U; |
671 | if (x > +1.79769313486231470e+308) return 0x7ff0000000000000U; |
671 | if (x < -1.79769313486231470e+308) return 0xfff0000000000000U; |
672 | if (x < -1.79769313486231470e+308) return 0xfff0000000000000U; |
|
|
673 | if (x != x ) return 0X7ff7ffffffffffffU; |
672 | |
674 | |
673 | m = frexpf (x, &e) * 0x1000000U; |
675 | m = frexpf (x, &e) * 0x1000000U; |
674 | m = frexp (x, &e) * 0x20000000000000U; |
676 | m = frexp (x, &e) * 0x20000000000000U; |
675 | |
677 | |
676 | r = m & 0x8000000000000000;; |
678 | r = m & 0x8000000000000000;; |