asin.s 505 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. TEXT asin(SB), $0
  2. FMOVD a+0(FP), F0 /* a */
  3. FMOVD F0, F0 /* a,a */
  4. FMULD F0, F0 /* a*a,a */
  5. FLD1 /* 1,a*a,a */
  6. FSUBRDP F0, F1 /* 1-a*a,a */
  7. FTST
  8. WAIT
  9. FSTSW AX
  10. SAHF
  11. JLO bad
  12. FSQRT /* sqrt(1-a*a),a */
  13. FPATAN /* atan2(sqrt(1-a*a),a) */
  14. RET
  15. TEXT acos(SB), $0
  16. FMOVD a+0(FP), F0
  17. FMOVD F0, F0
  18. FMULD F0, F0
  19. FLD1
  20. FSUBRDP F0, F1
  21. FTST
  22. WAIT
  23. FSTSW AX
  24. SAHF
  25. JLO bad
  26. FSQRT
  27. FXCHD F0, F1 /* identical except this */
  28. FPATAN
  29. RET
  30. bad:
  31. FMOVDP F0, F0
  32. FMOVDP F0, F0
  33. CALL NaN(SB)
  34. RET