home *** CD-ROM | disk | FTP | other *** search
/ PC Extra Super CD 1998 January / PCPLUS131.iso / DJGPP / V2 / DJLSR201.ZIP / src / libc / ansi / math / pow.s < prev    next >
Encoding:
Text File  |  1994-11-23  |  935 b   |  87 lines

  1. /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
  2.     .data
  3. yint: 
  4.     .word   0,0
  5. LCW1:
  6.     .word    0
  7. LCW2:
  8.     .word    0
  9.  
  10.     .text
  11. LC0:
  12.     .double    0d1.0e+00
  13.  
  14. frac:
  15.     fstcww    LCW1
  16.     fstcww    LCW2
  17.     fwait
  18.     andw    $0xf3ff,LCW2
  19.     orw    $0x0400,LCW2
  20.     fldcww    LCW2
  21.     fldl    %st(0)
  22.     frndint
  23.     fldcww    LCW1
  24.     fxch    %st(1)
  25.     fsub    %st(1),%st
  26.     ret
  27.  
  28. Lpow2:
  29.     call    frac
  30.     f2xm1
  31.     faddl    LC0
  32.     fscale
  33.     fstp    %st(1)
  34.     ret
  35.  
  36.     .globl    _pow
  37. _pow:
  38.     fldl    12(%esp)
  39.     fldl    4(%esp)
  40.     ftst    
  41.     fnstsww    %ax
  42.     sahf
  43.     jbe    xltez
  44.     fyl2x
  45.     jmp    Lpow2
  46. xltez:
  47.     jb    xltz
  48.     fstp    %st(0)
  49.     ftst
  50.     fnstsww    %ax
  51.     sahf
  52.     ja    ygtz
  53.     jb    error
  54.     fstp    %st(0) 
  55.     fld1l
  56.     fchs
  57. error:
  58.     fsqrt
  59.     ret
  60. ygtz:
  61.     fstp    %st(0)
  62.     fldzl
  63.     ret
  64. xltz:
  65.     fabs
  66.     fxch    %st(1)
  67.     call    frac
  68.     ftst
  69.     fnstsww    %ax
  70.     fstp    %st(0)
  71.     sahf
  72.     je    yisint
  73.     fstp    %st(0)
  74.     fchs
  75.     jmp    error
  76. yisint:
  77.     fistl    yint
  78.     fxch    %st(1)
  79.     fyl2x
  80.     call    Lpow2
  81.     andl    $1,yint
  82.     jz    yeven
  83.     fchs
  84. yeven:
  85.     ret
  86.  
  87.