home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / OTL-MC6.DMS / in.adf / libsrc.lha / LIBSRC / math_fpu.asm < prev    next >
Encoding:
Assembly Source File  |  1994-10-23  |  2.2 KB  |  169 lines

  1.  
  2. *    Maxon C++ Library:
  3. *    Modul "math_fpu"
  4. *    Transzendete Math-Funktionen für FPU
  5. *    Jens Gelhar 22.10.94
  6.  
  7.     xdef    _sin__r,_cos__r,_tan__r,_sinh__r,_cosh__r,_tanh__r
  8.     xdef    _asin__r,_acos__r,_atan__r,_exp__r,_log__r,_log10__r
  9.     xdef    _sqrt__r,_pow__r,_atan2__r,_modf__r,_frexp__r,_ldexp__r,_fmod__r
  10.     xdef    _fabs__r,_floor__r,_ceil__r
  11.  
  12.     mc68881
  13.  
  14.     SECTION "Transcen",CODE
  15.  
  16. _sin__r:
  17.     fsin.d    4(a7),fp0
  18.     rts
  19.  
  20. _cos__r:
  21.     fcos.d    4(a7),fp0
  22.     rts
  23.  
  24. _tan__r:
  25.     ftan.d    4(a7),fp0
  26.     rts
  27.  
  28. _asin__r:
  29.     fasin.d    4(a7),fp0
  30.     rts
  31.  
  32. _acos__r:
  33.     facos.d    4(a7),fp0
  34.     rts
  35.  
  36. _atan__r:
  37.     fatan.d    4(a7),fp0
  38.     rts
  39.  
  40. _sinh__r:
  41.     fsinh.d    4(a7),fp0
  42.     rts
  43.  
  44. _cosh__r:
  45.     fcosh.d    4(a7),fp0
  46.     rts
  47.  
  48. _tanh__r:
  49.     ftanh.d    4(a7),fp0
  50.     rts
  51.  
  52. _exp__r:
  53.     fetox.d    4(a7),fp0
  54.     rts
  55.  
  56. _log__r:
  57.     flogn.d    4(a7),fp0
  58.     rts
  59.  
  60. _log10__r:
  61.     flog10.d 4(a7),fp0
  62.     rts
  63.  
  64. _sqrt__r:
  65.     fsqrt.d    4(a7),fp0
  66.     rts
  67.  
  68. _pow__r:
  69.     flogn.d    4(a7),fp0
  70.     fmul.d    12(a7),fp0
  71.     fetox.x    fp0
  72.     rts
  73.  
  74.     SECTION "Misc",CODE
  75.  
  76. _modf__r:
  77.     ; Stack-Parameter: double, double*
  78.     fmove.d    4(a7),fp1
  79.     fintrz.x fp1,fp0    ; Vorkommateil nach fp0
  80.     fsub.x    fp0,fp1        ; Nachkommateil...
  81.     move.l    12(a7),a0
  82.     cmp.w    #0,a0
  83.     beq.b    .0
  84.     fmove.d    fp1,(a0)
  85. .0    rts
  86.  
  87.  
  88. _atan2__r:
  89.     fmove.d    4(a7),fp0
  90.     fmove.d    12(a7),fp1
  91.     ftst.x    fp1
  92.     fbne    .0
  93.     ; Division durch Null umgehen:
  94.     fmove.d #1.570796327,fp0        ; = pi/2
  95.     bra.b    .1
  96. .0    fdiv.x    fp1,fp0
  97. .1    ftst.d    4(a7)                ; x < 0 ?
  98.     fboge    .3                ; dann Korrektur-Rechnung
  99.     fmove.d    #3.14159265435897932384626433827950288,fp1
  100.     ftst.x    fp0
  101.     fbolt    .2
  102.     fsub.x    fp1,fp0                ; x = x'-pi
  103.     bra.b    .3
  104. .2    fadd.x    fp1,fp0                ; x = x'+pi
  105. .3    fatan.x    fp0
  106.     rts
  107.  
  108.  
  109. _frexp__r:
  110.     ; Parameter: double, int*
  111.     fmove.d    4(a7),fp0
  112.     fgetexp.x fp0,fp1
  113.     fgetman.x fp0
  114.     move.l    12(a7),a0
  115.     cmp.w    #0,a0
  116.     beq.b    .0
  117.     fmove.d    fp1,(a0)
  118. .0    rts
  119.  
  120.  
  121. _ldexp__r:
  122.     ; Parameter: double, int
  123.     move.w    4(a7),d0
  124.     beq.b    .zero
  125.     move.l    12(a7),d1
  126.     bclr    #15,d0
  127.     lsr.w    #4,d0
  128.     ext.l    d0
  129.     add.l    d1,d0
  130.     cmp.l    #$7FF,d0
  131.     bhi.b    .overflow
  132.     swap    d0
  133.     asl.l    #4,d0
  134.     and.l    #$800FFFFF,4(a7)
  135.     or.l    4(a7),d0
  136.     fmove.d    4(a7),fp0
  137.     rts
  138. .overflow:
  139. .zero:    fmove.x    #0.0,fp0
  140.     rts
  141.  
  142.     SECTION "Round",CODE
  143.  
  144. _fmod__r:
  145.     fmove.d    4(a7),fp0
  146.     frem.d    12(a7),fp0
  147.     rts
  148.  
  149. _fabs__r:
  150.     fabs.d    4(a7),fp0
  151.     rts
  152.  
  153. _floor__r:
  154.     fmove.l    FPCR,d0
  155.     fmove.l #%10100000,FPCR
  156.     fint.d    4(a7),fp0
  157.     fmove.l    d0,FPCR
  158.     rts
  159.  
  160. _ceil__r:
  161.     fmove.l    FPCR,d0
  162.     fmove.l #%10110000,FPCR
  163.     fint.d    4(a7),fp0
  164.     fmove.l    d0,FPCR
  165.     rts
  166.  
  167.     end
  168.  
  169.