TEXT asin(SB), $0
FMOVD a+0(FP), F0 /* a */
FMOVD F0, F0 /* a,a */
FMULD F0, F0 /* a*a,a */
FLD1 /* 1,a*a,a */
FSUBRDP F0, F1 /* 1-a*a,a */
FTST
WAIT
FSTSW AX
SAHF
JLO bad
FSQRT /* sqrt(1-a*a),a */
FPATAN /* atan2(sqrt(1-a*a),a) */
RET
TEXT acos(SB), $0
FMOVD a+0(FP), F0
FMOVD F0, F0
FMULD F0, F0
FLD1
FSUBRDP F0, F1
FTST
WAIT
FSTSW AX
SAHF
JLO bad
FSQRT
FXCHD F0, F1 /* identical except this */
FPATAN
RET
bad:
FMOVDP F0, F0
FMOVDP F0, F0
CALL NaN(SB)
RET
|