home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_progs / libs / smalmath.lha / source / SPow.a < prev   
Encoding:
Text File  |  1992-08-19  |  2.5 KB  |  149 lines

  1.     XDEF _IEEESPPow
  2.  
  3.     SECTION code
  4.  
  5. _IEEESPPow:
  6.     fmove.s     d1,fp1
  7.     fmove.s     d0,fp0
  8.     ftst.x        fp0
  9.     fbogt.w     ArgPositive
  10.     fbeq.w        ArgEQZero
  11.  
  12. ArgNegative:
  13.     fmove.x     fp2,-(sp)
  14.     fint.x        fp1,fp2
  15.     fcmp.x        fp1,fp2
  16.     fbne.w        ReturnNotANumber
  17. NegativeToInteger:
  18.     ftst.x        fp1
  19.     fmovem.l    fpsr,d0
  20.     btst.l        #25,d0
  21.     bne.w        ReturnNotANumber
  22.     fmove.x     fp3,-(sp)
  23.     fscale.w    #-1,fp2
  24.     fint.x        fp2,fp3
  25.     fcmp.x        fp2,fp3
  26.     fbeq.w        NegativeToEven
  27. NegativeToOdd:
  28.     fmove.x     (sp)+,fp3
  29.     fmove.x     (sp)+,fp2
  30.     fabs.x        fp0
  31.     flogn.x     fp0
  32.     fmul.x        fp0,fp1
  33.     fetox.x     fp1
  34.     fneg.x        fp1
  35.     fmove.s     fp1,d0
  36.     rts
  37. NegativeToEven:
  38.     fmove.x     (sp)+,fp3
  39.     fmove.x     (sp)+,fp2
  40.     fabs.x        fp0
  41.     flogn.x     fp0
  42.     fmul.x        fp0,fp1
  43.     fetox.x     fp1
  44.     fmove.s     fp1,d0
  45.     rts
  46.  
  47. ArgPositive:
  48.     flogn.x     fp0
  49.     fmul.x        fp0,fp1
  50.     fetox.x     fp1
  51.     fmove.s     fp1,d0
  52.     rts
  53.  
  54. ArgEQZero:
  55.     ftst.x        fp1
  56. ZeroToZero:
  57.     fbeq.w        ReturnNotANumberNoFP2
  58. ZeroToNonZero:
  59.     fmovem.l    fpsr,d0
  60.     btst.l        #25,d0
  61.     bne.w        ZeroToInfinity
  62. ZeroToReal:
  63.     ftst.x        fp0
  64.     fmovem.l    fpsr,d0
  65.     btst.l        #27,d0
  66.     beq.w        PositiveZeroToReal
  67. NegativeZeroToReal:
  68.     fmove.x     fp2,-(sp)
  69.     fint.x        fp1,fp2
  70.     fcmp.x        fp1,fp2
  71.     fbne.w        ReturnNotANumber
  72. NegativeZeroToInteger:
  73.     ftst.x        fp1
  74.     fmovem.l    fpsr,d0
  75.     btst.l        #25,d0
  76.     bne.w        ReturnNotANumber
  77.     fmove.x     fp3,-(sp)
  78.     fscale.w    #-1,fp2
  79.     fint.x        fp2,fp3
  80.     fcmp.x        fp2,fp3
  81.     fbeq.w        NegativeZeroToEven
  82. NegativeZeroToOdd:
  83.     fmove.x     (sp)+,fp3
  84.     ftst.x        fp1
  85.     fbogt.w     NegativeZeroToPositiveOdd
  86. NegativeZeroToNegativeOdd:
  87.     move.l        #$FF800000,d0
  88.     fmove.x     (sp)+,fp2
  89.     rts
  90. NegativeZeroToPositiveOdd:
  91.     move.l        #$80000000,d0
  92.     fmove.x     (sp)+,fp2
  93.     rts
  94. NegativeZeroToEven:
  95.     fmove.x     (sp)+,fp3
  96.     ftst.x        fp1
  97.     fbogt.w     NegativeZeroToPositiveEven
  98. NegativeZeroToNegativeEven:
  99.     move.l        #$7F800000,d0
  100.     fmove.x     (sp)+,fp2
  101.     rts
  102. NegativeZeroToPositiveEven:
  103.     clr.l        d0
  104.     fmove.x     (sp)+,fp2
  105.     rts
  106. PositiveZeroToReal:
  107.     ftst.x        fp1
  108.     fbogt.w     PositiveZeroToPositiveReal
  109. PositiveZeroToNegativeReal:
  110.     move.l        #$7F800000,d0
  111.     rts
  112. PositiveZeroToPositiveReal:
  113.     clr.l        d0
  114.     rts
  115. ZeroToInfinity:
  116.     btst.l        #27,d0
  117.     beq.w        ZeroToPositiveInfinity
  118. ZeroToNegativeInfinity:
  119.     ftst.x        fp0
  120.     fmovem.l    fpsr,d0
  121.     btst.l        #27,d0
  122.     beq.w        PositiveZeroToNegativeInfinity
  123. NegativeZeroToNegativeInfinity:
  124.     bra.w        ReturnNotANumberNoFP2
  125. PositiveZeroToNegativeInfinity:
  126.     move.l        #$7F800000,d0
  127.     rts
  128. ZeroToPositiveInfinity:
  129.     ftst.x        fp0
  130.     fmovem.l    fpsr,d0
  131.     btst.l        #27,d0
  132.     beq.w        PositiveZeroToPositiveInfinity
  133. NegativeZeroToPositiveInfinity:
  134.     bra.w        ReturnNotANumberNoFP2
  135. PositiveZeroToPositiveInfinity:
  136.     clr.l        d0
  137.     rts
  138.  
  139.  
  140.  
  141. ReturnNotANumber:
  142.     fmove.x     (sp)+,fp2
  143. ReturnNotANumberNoFP2:
  144.     move.l        #$7FFFFFFF,d0
  145.     rts
  146.  
  147.     END
  148.  
  149.