ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/uae_cpu/fpu/mathlib.h
(Generate patch)

Comparing BasiliskII/src/uae_cpu/fpu/mathlib.h (file contents):
Revision 1.3 by gbeauche, 2002-09-16T12:01:38Z vs.
Revision 1.9 by gbeauche, 2005-01-30T21:42:16Z

# Line 1 | Line 1
1   /*
2   *  fpu/mathlib.h - Floating-point math support library
3   *
4 < *  Basilisk II (C) 1997-2001 Christian Bauer
4 > *  Basilisk II (C) 1997-2005 Christian Bauer
5   *
6   *  MC68881/68040 fpu emulation
7   *  
# Line 395 | Line 395 | PRIVATE inline bool FFPU fp_do_isnan(fpu
395          return (int)(((uae_u32)(se)) >> 16);
396   #endif
397   #else
398 < #ifndef USE_LONG_DOUBLE
399 <        fp_declare_init_shape(sxp, r, double);
400 <        return  (sxp->ieee_nan.exponent == FP_DOUBLE_EXP_MAX)
401 < #else
398 > #if USE_LONG_DOUBLE || USE_QUAD_DOUBLE
399          fp_declare_init_shape(sxp, r, extended);
400          return  (sxp->ieee_nan.exponent == FP_EXTENDED_EXP_MAX)
401 + #else
402 +        fp_declare_init_shape(sxp, r, double);
403 +        return  (sxp->ieee_nan.exponent == FP_DOUBLE_EXP_MAX)
404   #endif
405                  &&      (sxp->ieee_nan.mantissa0 != 0)
406                  &&      (sxp->ieee_nan.mantissa1 != 0)
# Line 454 | Line 454 | PRIVATE inline bool FFPU fp_do_isinf(fpu
454          return ~(lx >> 31) & (1 - (se >> 14));
455   #endif
456   #else
457 < #ifndef USE_LONG_DOUBLE
458 <        fp_declare_init_shape(sxp, r, double);
459 <        return  (sxp->ieee_nan.exponent == FP_DOUBLE_EXP_MAX)
460 < #else
457 > #if USE_LONG_DOUBLE || USE_QUAD_DOUBLE
458          fp_declare_init_shape(sxp, r, extended);
459          return  (sxp->ieee_nan.exponent == FP_EXTENDED_EXP_MAX)
460 + #else
461 +        fp_declare_init_shape(sxp, r, double);
462 +        return  (sxp->ieee_nan.exponent == FP_DOUBLE_EXP_MAX)
463   #endif
464                  &&      (sxp->ieee_nan.mantissa0 == 0)
465                  &&      (sxp->ieee_nan.mantissa1 == 0)
# Line 476 | Line 476 | PRIVATE inline bool FFPU fp_do_isinf(fpu
476  
477   PRIVATE inline bool FFPU fp_do_isneg(fpu_register const & r)
478   {
479 < #ifndef USE_LONG_DOUBLE
480 <        fp_declare_init_shape(sxp, r, double);
481 < #else
479 > #if USE_LONG_DOUBLE || USE_QUAD_DOUBLE
480          fp_declare_init_shape(sxp, r, extended);
481 + #else
482 +        fp_declare_init_shape(sxp, r, double);
483   #endif
484          return sxp->ieee.negative;
485   }
# Line 490 | Line 490 | PRIVATE inline bool FFPU fp_do_isneg(fpu
490   PRIVATE inline bool FFPU fp_do_iszero(fpu_register const & r)
491   {
492          // TODO: BRANCHES_ARE_EXPENSIVE
493 < #ifndef USE_LONG_DOUBLE
494 <        fp_declare_init_shape(sxp, r, double);
495 < #else
493 > #if USE_LONG_DOUBLE || USE_QUAD_DOUBLE
494          fp_declare_init_shape(sxp, r, extended);
495 + #else
496 +        fp_declare_init_shape(sxp, r, double);
497   #endif
498          return  (sxp->ieee.exponent == 0)
499                  &&      (sxp->ieee.mantissa0 == 0)
# Line 526 | Line 526 | PRIVATE inline void FFPU get_source_flag
526   PRIVATE inline void FFPU make_nan(fpu_register & r)
527   {
528          // FIXME: is that correct ?
529 < #ifndef USE_LONG_DOUBLE
530 <        fp_declare_init_shape(sxp, r, double);
531 <        sxp->ieee.exponent      = FP_DOUBLE_EXP_MAX;
532 <        sxp->ieee.mantissa0     = 0xfffff;
533 < #else
529 > #if USE_LONG_DOUBLE || USE_QUAD_DOUBLE
530          fp_declare_init_shape(sxp, r, extended);
531          sxp->ieee.exponent      = FP_EXTENDED_EXP_MAX;
532          sxp->ieee.mantissa0     = 0xffffffff;
533 + #else
534 +        fp_declare_init_shape(sxp, r, double);
535 +        sxp->ieee.exponent      = FP_DOUBLE_EXP_MAX;
536 +        sxp->ieee.mantissa0     = 0xfffff;
537   #endif
538          sxp->ieee.mantissa1     = 0xffffffff;
539   #ifdef USE_QUAD_DOUBLE
# Line 547 | Line 547 | PRIVATE inline void FFPU make_zero_posit
547   #if 1
548          r = +0.0;
549   #else
550 < #ifndef USE_LONG_DOUBLE
551 <        fp_declare_init_shape(sxp, r, double);
552 < #else
550 > #if USE_LONG_DOUBLE || USE_QUAD_DOUBLE
551          fp_declare_init_shape(sxp, r, extended);
552 + #else
553 +        fp_declare_init_shape(sxp, r, double);
554   #endif
555          sxp->ieee.negative      = 0;
556          sxp->ieee.exponent      = 0;
# Line 568 | Line 568 | PRIVATE inline void FFPU make_zero_negat
568   #if 1
569          r = -0.0;
570   #else
571 < #ifndef USE_LONG_DOUBLE
572 <        fp_declare_init_shape(sxp, r, double);
573 < #else
571 > #if USE_LONG_DOUBLE || USE_QUAD_DOUBLE
572          fp_declare_init_shape(sxp, r, extended);
573 + #else
574 +        fp_declare_init_shape(sxp, r, double);
575   #endif
576          sxp->ieee.negative      = 1;
577          sxp->ieee.exponent      = 0;
# Line 586 | Line 586 | PRIVATE inline void FFPU make_zero_negat
586  
587   PRIVATE inline void FFPU make_inf_positive(fpu_register & r)
588   {
589 < #ifndef USE_LONG_DOUBLE
590 <        fp_declare_init_shape(sxp, r, double);
591 <        sxp->ieee_nan.exponent  = FP_DOUBLE_EXP_MAX;
592 < #else
589 > #if USE_LONG_DOUBLE || USE_QUAD_DOUBLE
590          fp_declare_init_shape(sxp, r, extended);
591          sxp->ieee_nan.exponent  = FP_EXTENDED_EXP_MAX;
592 + #else
593 +        fp_declare_init_shape(sxp, r, double);
594 +        sxp->ieee_nan.exponent  = FP_DOUBLE_EXP_MAX;
595   #endif
596          sxp->ieee_nan.negative  = 0;
597          sxp->ieee_nan.mantissa0 = 0;
# Line 604 | Line 604 | PRIVATE inline void FFPU make_inf_positi
604  
605   PRIVATE inline void FFPU make_inf_negative(fpu_register & r)
606   {
607 < #ifndef USE_LONG_DOUBLE
608 <        fp_declare_init_shape(sxp, r, double);
609 <        sxp->ieee_nan.exponent  = FP_DOUBLE_EXP_MAX;
610 < #else
607 > #if USE_LONG_DOUBLE || USE_QUAD_DOUBLE
608          fp_declare_init_shape(sxp, r, extended);
609          sxp->ieee_nan.exponent  = FP_EXTENDED_EXP_MAX;
610 + #else
611 +        fp_declare_init_shape(sxp, r, double);
612 +        sxp->ieee_nan.exponent  = FP_DOUBLE_EXP_MAX;
613   #endif
614          sxp->ieee_nan.negative  = 1;
615          sxp->ieee_nan.mantissa0 = 0;
# Line 622 | Line 622 | PRIVATE inline void FFPU make_inf_negati
622  
623   PRIVATE inline fpu_register FFPU fast_fgetexp(fpu_register const & r)
624   {
625 < #ifndef USE_LONG_DOUBLE
626 <        fp_declare_init_shape(sxp, r, double);
627 <        return (sxp->ieee.exponent - FP_DOUBLE_EXP_BIAS);
628 < #else
625 > #if USE_LONG_DOUBLE || USE_QUAD_DOUBLE
626          fp_declare_init_shape(sxp, r, extended);
627          return (sxp->ieee.exponent - FP_EXTENDED_EXP_BIAS);
628 + #else
629 +        fp_declare_init_shape(sxp, r, double);
630 +        return (sxp->ieee.exponent - FP_DOUBLE_EXP_BIAS);
631   #endif
632   }
633  
634   // Normalize to range 1..2
635   PRIVATE inline void FFPU fast_remove_exponent(fpu_register & r)
636   {
637 < #ifndef USE_LONG_DOUBLE
638 <        fp_declare_init_shape(sxp, r, double);
639 <        sxp->ieee.exponent = FP_DOUBLE_EXP_BIAS;
640 < #else
637 > #if USE_LONG_DOUBLE || USE_QUAD_DOUBLE
638          fp_declare_init_shape(sxp, r, extended);
639          sxp->ieee.exponent = FP_EXTENDED_EXP_BIAS;
640 + #else
641 +        fp_declare_init_shape(sxp, r, double);
642 +        sxp->ieee.exponent = FP_DOUBLE_EXP_BIAS;
643   #endif
644   }
645  
# Line 647 | Line 647 | PRIVATE inline void FFPU fast_remove_exp
647   // of the source and destination operands.
648   PRIVATE inline uae_u32 FFPU get_quotient_sign(fpu_register const & ra, fpu_register const & rb)
649   {
650 < #ifndef USE_LONG_DOUBLE
651 <        fp_declare_init_shape(sap, ra, double);
652 <        fp_declare_init_shape(sbp, rb, double);
653 < #else
650 > #if USE_LONG_DOUBLE || USE_QUAD_DOUBLE
651          fp_declare_init_shape(sap, ra, extended);
652          fp_declare_init_shape(sbp, rb, extended);
653 + #else
654 +        fp_declare_init_shape(sap, ra, double);
655 +        fp_declare_init_shape(sbp, rb, double);
656   #endif
657          return ((sap->ieee.negative ^ sbp->ieee.negative) ? FPSR_QUOTIENT_SIGN : 0);
658   }
# Line 661 | Line 661 | PRIVATE inline uae_u32 FFPU get_quotient
661   /* --- Math functions                                                     --- */
662   /* -------------------------------------------------------------------------- */
663  
664 < #if FPU_USE_ISO_C99 && USE_LONG_DOUBLE
665 < # define fp_log         logl
666 < # define fp_log10       log10l
667 < # define fp_exp         expl
668 < # define fp_pow         powl
669 < # define fp_fabs        fabsl
670 < # define fp_sqrt        sqrtl
671 < # define fp_sin         sinl
672 < # define fp_cos         cosl
673 < # define fp_tan         tanl
674 < # define fp_sinh        sinhl
675 < # define fp_cosh        coshl
676 < # define fp_tanh        tanhl
677 < # define fp_asin        asinl
678 < # define fp_acos        acosl
679 < # define fp_atan        atanl
680 < # define fp_asinh       asinhl
681 < # define fp_acosh       acoshl
682 < # define fp_atanh       atanhl
683 < # define fp_floor       floorl
684 < # define fp_ceil        ceill
685 < #else
664 > #if FPU_USE_ISO_C99 && (USE_LONG_DOUBLE || USE_QUAD_DOUBLE)
665 > # ifdef HAVE_LOGL
666 > #  define fp_log        logl
667 > # endif
668 > # ifdef HAVE_LOG10L
669 > #  define fp_log10      log10l
670 > # endif
671 > # ifdef HAVE_EXPL
672 > #  define fp_exp        expl
673 > # endif
674 > # ifdef HAVE_POWL
675 > #  define fp_pow        powl
676 > # endif
677 > # ifdef HAVE_FABSL
678 > #  define fp_fabs       fabsl
679 > # endif
680 > # ifdef HAVE_SQRTL
681 > #  define fp_sqrt       sqrtl
682 > # endif
683 > # ifdef HAVE_SINL
684 > #  define fp_sin        sinl
685 > # endif
686 > # ifdef HAVE_COSL
687 > #  define fp_cos        cosl
688 > # endif
689 > # ifdef HAVE_TANL
690 > #  define fp_tan        tanl
691 > # endif
692 > # ifdef HAVE_SINHL
693 > #  define fp_sinh       sinhl
694 > # endif
695 > # ifdef HAVE_COSHL
696 > #  define fp_cosh       coshl
697 > # endif
698 > # ifdef HAVE_TANHL
699 > #  define fp_tanh       tanhl
700 > # endif
701 > # ifdef HAVE_ASINL
702 > #  define fp_asin       asinl
703 > # endif
704 > # ifdef HAVE_ACOSL
705 > #  define fp_acos       acosl
706 > # endif
707 > # ifdef HAVE_ATANL
708 > #  define fp_atan       atanl
709 > # endif
710 > # ifdef HAVE_ASINHL
711 > #  define fp_asinh      asinhl
712 > # endif
713 > # ifdef HAVE_ACOSHL
714 > #  define fp_acosh      acoshl
715 > # endif
716 > # ifdef HAVE_ATANHL
717 > #  define fp_atanh      atanhl
718 > # endif
719 > # ifdef HAVE_FLOORL
720 > #  define fp_floor      floorl
721 > # endif
722 > # ifdef HAVE_CEILL
723 > #  define fp_ceil       ceill
724 > # endif
725 > #endif
726 >
727 > #ifndef fp_log
728   # define fp_log         log
729 + #endif
730 + #ifndef fp_log10
731   # define fp_log10       log10
732 + #endif
733 + #ifndef fp_exp
734   # define fp_exp         exp
735 + #endif
736 + #ifndef fp_pow
737   # define fp_pow         pow
738 + #endif
739 + #ifndef fp_fabs
740   # define fp_fabs        fabs
741 + #endif
742 + #ifndef fp_sqrt
743   # define fp_sqrt        sqrt
744 + #endif
745 + #ifndef fp_sin
746   # define fp_sin         sin
747 + #endif
748 + #ifndef fp_cos
749   # define fp_cos         cos
750 + #endif
751 + #ifndef fp_tan
752   # define fp_tan         tan
753 + #endif
754 + #ifndef fp_sinh
755   # define fp_sinh        sinh
756 + #endif
757 + #ifndef fp_cosh
758   # define fp_cosh        cosh
759 + #endif
760 + #ifndef fp_tanh
761   # define fp_tanh        tanh
762 + #endif
763 + #ifndef fp_asin
764   # define fp_asin        asin
765 + #endif
766 + #ifndef fp_acos
767   # define fp_acos        acos
768 + #endif
769 + #ifndef fp_atan
770   # define fp_atan        atan
771 + #endif
772 + #ifndef fp_asinh
773   # define fp_asinh       asinh
774 + #endif
775 + #ifndef fp_acosh
776   # define fp_acosh       acosh
777 + #endif
778 + #ifndef fp_atanh
779   # define fp_atanh       atanh
780 + #endif
781 + #ifndef fp_floor
782   # define fp_floor       floor
783 + #endif
784 + #ifndef fp_ceil
785   # define fp_ceil        ceil
786   #endif
787  
788 < #if defined(FPU_IEEE) && defined(X86_ASSEMBLY)
788 > #if defined(FPU_IEEE) && defined(USE_X87_ASSEMBLY)
789   // Assembly optimized support functions. Taken from glibc 2.2.2
790  
791   #undef fp_log
# Line 843 | Line 923 | PRIVATE inline fpu_extended fp_do_expm1(
923  
924   PRIVATE inline fpu_extended fp_do_sgn1(fpu_extended x)
925   {
926 + #if USE_LONG_DOUBLE || USE_QUAD_DOUBLE
927          fp_declare_init_shape(sxp, x, extended);
928          sxp->ieee_nan.exponent  = FP_EXTENDED_EXP_MAX;
929          sxp->ieee_nan.one               = 1;
930 + #else
931 +        fp_declare_init_shape(sxp, x, double);
932 +        sxp->ieee_nan.exponent  = FP_DOUBLE_EXP_MAX;
933 + #endif
934          sxp->ieee_nan.quiet_nan = 0;
935          sxp->ieee_nan.mantissa0 = 0;
936          sxp->ieee_nan.mantissa1 = 0;
# Line 1025 | Line 1110 | DEFINE_ROUND_FUNC(zero, 0xc00)
1110  
1111   DEFINE_ROUND_FUNC(nearest, 0x000)
1112  
1113 < #endif /* X86_ASSEMBLY */
1113 > #endif /* USE_X87_ASSEMBLY */
1114  
1115   #ifndef fp_round_to_minus_infinity
1116   #define fp_round_to_minus_infinity(x) fp_floor(x)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines