Annotation of coherent/b/lib/libm/i387/ceil87.s, revision 1.1.1.1

1.1       root        1: //////////
                      2: / /usr/src/libm/i387/ceil87.s
                      3: / i387 mathematics library
                      4: / ceil(d), floor(d)
                      5: //////////
                      6: 
                      7: RASIZE =       4
                      8: 
                      9:        .globl  ceil
                     10:        .globl  floor
                     11:        .globl  _floor
                     12: 
                     13: cwup   =       0xBFF           / round up NDP control word
                     14: cwdown =       0x7FF           / round down NDP control word
                     15: 
                     16: d      =       RASIZE          / arg offset
                     17: 
                     18: //////////
                     19: / double
                     20: / ceil(d)
                     21: / double d;
                     22: //////////
                     23: 
                     24: 
                     25: ceil:
                     26:        fldl    d(%esp)         / Load argument d.
                     27:        movw    %ax, $cwup      / New control word to AX.
                     28:        jmp     .L0
                     29: 
                     30: //////////
                     31: / double
                     32: / floor(d)
                     33: / double d;
                     34: /
                     35: / _floor() rounds the NDP stacktop %st down to the int below.
                     36: / It saves and restores the current NDP control word.
                     37: //////////
                     38: 
                     39: oldcw  =       0               / old NDP control word offset off %esp
                     40: newcw  =       2               / new NDP control word offset off %esp
                     41: 
                     42: floor:
                     43:        fldl    d(%esp)         / Load argument d.
                     44: 
                     45: _floor:                                / d
                     46:        movw    %ax, $cwdown    / New control word to AX.
                     47: 
                     48: .L0:                           / d in %st, new control word in AX.
                     49:        push    %eax            / Claim two words.
                     50:        movw    newcw(%esp),%ax / Save new control word.
                     51:        fstcw   oldcw(%esp)     / Save old control word.
                     52:        fldcw   newcw(%esp)     / Load new control word.
                     53:        frndint                 / int(d)
                     54:        fldcw   oldcw(%esp)     / Restore saved control word.
                     55:        pop     %eax            / Clean stack.
                     56:        ret
                     57: 
                     58: / end of ceil87.s

unix.superglobalmegacorp.com

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