Annotation of researchv9/libc/sun/Fdtos.s, revision 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.