|
|
1.1 root 1: //////////
2: / libm 8087
3: / acos(d)
4: //////////
5:
6: #include "larges.h"
7: #include "ifno8087.h"
8:
9: .globl acos_
10: .globl asin
11: .globl cfcc87
12: .globl edomain
13:
14: //////////
15: / double
16: / acos(d)
17: / double d;
18: //////////
19:
20: d = RASIZE / arg offset
21:
22: acos_:
23: ifno8087(_acos_)
24: mov bx, sp
25: fdld Pss d(bx) / Load argument d.
26:
27: fld st / d, d
28: fabs / abs(d), d
29: fld1 / 1, abs(d), d
30: fcompp / Compare 1 to abs(d) and pop twice.
31: Gcall cfcc87
32: jae 0f
33: Gjmp edomain / d < -1 or 1 < d, issue EDOM error.
34: 0:
35: Gcall asin / asin(d)
36: fild cs:minus1 / -1, asin(d)
37: fldpi / pi, -1, asin(d)
38: fscale / pi/2, -1, asin(d)
39: fstp st1 / pi/2, asin(d)
40: fsubr / acos(d) = pi/2 - asin(d)
41: Gret
42:
43: / Data.
44: minus1: .word -1
45:
46: / end of acos87.m
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.