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

1.1       root        1: //////////
                      2: / libm 8087
                      3: / atan(d)
                      4: //////////
                      5: 
                      6: #include "larges.h"
                      7: #include "ifno8087.h"
                      8: 
                      9:        .globl  atan_
                     10:        .globl  atan
                     11:        .globl  cfcc87
                     12:        .globl  tstcc
                     13: 
                     14: //////////
                     15: / double
                     16: / atan(d)
                     17: / double d;
                     18: /
                     19: / Uses fpatan, which requires 0 < st1 < st.
                     20: //////////
                     21: 
                     22: d      =       RASIZE          / arg offset
                     23: 
                     24: atan_:
                     25:        ifno8087(_atan_)
                     26:        mov     bx, sp
                     27:        fdld    Pss d(bx)       / Load argument d.
                     28: 
                     29: atan:                          / d
                     30:        Gcall   tstcc
                     31:        je      3f              / d = 0, just return it.
                     32:        pushf                   / Save the flags.
                     33:        ja      0f              / d is positive.
                     34:        fchs                    / d is negative, negate it.
                     35: 
                     36: 0:     fld1                    / Load a 1.
                     37:        fcom
                     38:        Gcall   cfcc87          / Compare 1 to d.
                     39:        jae     1f              / 1 >= d, ok.
                     40:        fdivr   st1, st         / and set d = 1/d.
                     41: 
                     42: 1:     fpatan                  / Result = atan(d/1).
                     43:        jae     2f              / 1 >= d, OK as is.
                     44:        fild    cs:minus1       / -1, result
                     45:        fldpi                   / pi, -1, result
                     46:        fscale                  / pi/2, -1, result
                     47:        fstp    st1             / pi/2, result
                     48:        fsubr                   / Result = pi/2 - result.
                     49: 
                     50: 2:     popf                    / Restore the sign flag.
                     51:        jae     3f              / Positive, done.
                     52:        fchs                    / Result = -result.
                     53: 
                     54: 3:     Gret
                     55: 
                     56: / Data.
                     57: minus1:        .word   -1
                     58: 
                     59: / end of atan87.m

unix.superglobalmegacorp.com

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