1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
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
|