Annotation of coherent/b/lib/libm/i8087/asin87.m, revision 1.1.1.1

1.1       root        1: //////////
                      2: / libm 8087
                      3: / asin(d)
                      4: //////////
                      5: 
                      6: #include "larges.h"
                      7: #include "ifno8087.h"
                      8: 
                      9:        .globl  asin_
                     10:        .globl  asin
                     11:        .globl  atan
                     12:        .globl  cfcc87
                     13:        .globl  edomain
                     14: 
                     15: //////////
                     16: / double
                     17: / asin(d)
                     18: / double d;
                     19: //////////
                     20: 
                     21: d      =       RASIZE          / arg offset
                     22: 
                     23: asin_:
                     24:        ifno8087(_asin_)
                     25:        mov     bx, sp
                     26:        fdld    Pss d(bx)       / Load argument d.
                     27: 
                     28: asin:                          / d
                     29:        fld     st              / d, d
                     30:        fabs                    / abs(d), d
                     31:        fld1                    / 1, abs(d), d
                     32:        fcompp                  / Compare 1 to abs(d) and pop twice.
                     33:        Gcall   cfcc87
                     34:        ja      1f              / -1 < d < 1, use atan.
                     35:        je      0f              / d = 1 or d = -1
                     36:        Gjmp    edomain         / d < -1 or 1 < d, issue EDOM error and return.
                     37: 
                     38: 0:
                     39:        fild    cs:minus1       / -1, d
                     40:        fldpi                   / pi, -1, d
                     41:        fscale                  / pi/2, -1, d
                     42:        fstp    st1             / pi/2, d
                     43:        fmul                    / For d = 1 or d = -1, asin(d) = d * pi/2.
                     44:        Gret
                     45: 
                     46: 1:     fld     st              / d, d
                     47:        fmul    st, st          / d*d, d
                     48:        fld1                    / 1, d*d, d
                     49:        fsubr                   / 1 - d*d, d
                     50:        fsqrt                   / sqrt(1-d*d), d
                     51:        fdiv                    / d / sqrt(1-d*d)
                     52:        Gjmp    atan            / asin(d) = atan(d/sqrt(1-d*d))
                     53: 
                     54: / Data.
                     55: minus1:        .word   -1
                     56: 
                     57: / end of asin87.m

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.