Annotation of researchv9/libc/sun/Fdtos.s, revision 1.1.1.1

1.1       root        1:        .data
                      2:        .asciz  "@(#)Fdtos.s 1.1 86/02/03 Copyr 1985 Sun Micro"
                      3:        .even
                      4:        .text
                      5: 
                      6: |      Copyright (c) 1985 by Sun Microsystems, Inc.
                      7: 
                      8: #include "fpcrtdefs.h"
                      9: 
                     10: RTENTRY(Fdtos)
                     11:        movel   d0,a0                   | a0 saves x.
                     12:        andl    #0x7fffffff,d0          | Clear sign bit.
                     13:        cmpl    #0x38100000,d0
                     14:        blts    small                   | Branch if small exponent.
                     15:        cmpl    #0x47f00000,d0
                     16:        bges    big                     | Branch if big exponent.
                     17:        subl    #0x38000000,d0
                     18:        lsll    #1,d1                   | Shift left three places.
                     19:        roxll   #1,d0
                     20:        lsll    #1,d1
                     21:        roxll   #1,d0
                     22:        lsll    #1,d1
                     23:        roxll   #1,d0
                     24:        addl    #0x80000000,d1          | Add round bit.
                     25:        bccs    1f
                     26:        addql   #1,d0                   | Propagate carry.
                     27: 1:
                     28:        tstl    d1
                     29:        bnes    sign                    | Branch if not ambiguous.
                     30:        andl    #0xfffffffe,d0          | Force round to even.
                     31: sign:
                     32:        cmpl    #0,a0
                     33:        bges    1f                      | Branch if sign of x is positive.
                     34:        orl     #0x80000000,d0          | Set negative.
                     35: 1:
                     36:        RET
                     37: 
                     38: big:
                     39:        cmpl    #0x7ff00000,d0
                     40:        bgts    nan                     | Branch if nan.
                     41:        blts    inf                     | Branch if overflow.
                     42:        tstl    d1
                     43:        bnes    nan                     | Branch if nan.
                     44: inf:
                     45:        movel   #0x7f800000,d0          | Make inf.
                     46:        clrl    d1
                     47:        bras    sign
                     48: nan:
                     49:        lsll    #1,d1                   | Shift left three places.
                     50:        roxll   #1,d0
                     51:        lsll    #1,d1
                     52:        roxll   #1,d0
                     53:        lsll    #1,d1
                     54:        roxll   #1,d0
                     55:        orl     #0x7fc00000,d0          | Force quiet nan.
                     56:        bras    sign
                     57: small:
                     58:        cmpl    #0x36900000,d0
                     59:        bges    subnorm                 | Branch if possible subnorm.
                     60:        clrl    d0
                     61:        bras    sign                    | Branch if zero.
                     62: subnorm:
                     63:        lsll    #1,d1                   | Shift left three places.
                     64:        roxll   #1,d0
                     65:        lsll    #1,d1
                     66:        roxll   #1,d0
                     67:        lsll    #1,d1
                     68:        roxll   #1,d0
                     69:        tstl    d1
                     70:        beqs    1f                      | Branch if no lower bits.
                     71:        orl     #0x80000000,d1          | Set sticky bit.
                     72:        bras    2f
                     73: 1:
                     74:        clrl    d1                      | Clear sticky bit.
                     75: 2:
                     76:        swap    d0
                     77:        movew   d0,d1
                     78:        swap    d0
                     79:        lsrw    #7,d1
                     80:        andl    #0x007fffff,d0          | Clear exponent.
                     81:        orl     #0x00800000,d0          | Set I bit.
                     82:        subw    #0x0180,d1              | Convert to shift count.
                     83:        bges    2f
                     84: 
                     85: norm:
                     86:        lsrl    #1,d0
                     87:        bcc     1f
                     88:        orl     #0x80000000,d1          | Force sticky bit.
                     89: 1:
                     90:        addqw   #1,d1
                     91:        blts    norm
                     92: 
                     93: 2:
                     94:        addql   #1,d0                   | Round bit.
                     95:        btst    #0,d0
                     96:        bnes    2f                      | Branch not ambiguous.
                     97:        btst    #31,d1
                     98:        bnes    2f                      | Branch not ambiguous.
                     99:        andl    #0x01fffffc,d0          | Force round to even.
                    100: 2:
                    101:        lsrl    #1,d0                   | Remove round bit.
                    102:        jra     sign
                    103: 

unix.superglobalmegacorp.com

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