Annotation of researchv9/libc/sun/Fstod.s, revision 1.1

1.1     ! root        1:        .data
        !             2:        .asciz  "@(#)Fstod.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(Fstod)
        !            11:        movel   d0,a0                   | a0 saves x.
        !            12: rotate3:
        !            13:        rorl    #3,d0                   | d0 gets 3|1|8|20
        !            14:        movel   d0,d1                   | d1 gets 3|1|8|20
        !            15:        andl    #0xe0000000,d1          | d1 gets 3 low order significand bits.
        !            16:        andl    #0x0fffffff,d0          | d0 gets exponent and 20 high order significand.
        !            17:        addl    #(0x3ff00000-0x7f00000),d0 | Adjust exponent from single to double.
        !            18:        cmpl    #0x38100000,d0
        !            19:        blts    minexp                  | Branch if zero or subnormal.
        !            20:        cmpl    #0x47f00000,d0
        !            21:        bges    maxexp                  | Branch if inf or nan.
        !            22: sign:
        !            23:        cmpl    #0,a0
        !            24:        bges    1f                      | Branch if sign of x is positive.
        !            25:        orl     #0x80000000,d0          | Set negative.
        !            26: 1:
        !            27:        RET
        !            28: 
        !            29: maxexp:
        !            30:        orl     #0x7ff00000,d0          | d0 gets max double exponent.
        !            31:        cmpl    #0x7ff00000,d0
        !            32:        bgts    nan                     | Branch if nan.
        !            33:        tstl    d1
        !            34:        beqs    sign                    | Branch if inf.
        !            35: nan:
        !            36:        orl     #0x00400000,d0          | Force quiet nan.
        !            37:        bras    sign
        !            38: minexp:
        !            39:        movel   a0,d0                   | d0 gets x.
        !            40:        andl    #0x007fffff,d0          | d0 gets x significand.
        !            41:        beqs    sign                    | Branch if x is true zero.
        !            42:        movel   #0x4000,d1              | d1 gets single format exponent +1.
        !            43:        bras    2f
        !            44: norm:
        !            45:        subw    #0x0080,d1              | Decrement exponent by 1.
        !            46: 2:
        !            47:        lsll    #1,d0
        !            48:        btst    #23,d0
        !            49:        beqs    norm                    | Branch if not yet normalized.
        !            50:        andl    #0x007fffff,d0          | Clear exponent.
        !            51:        swap    d1
        !            52:        orl     d1,d0                   | Insert single exponent.
        !            53:        bsrs    rotate3                 | Try again with biased exponent.
        !            54:        subl    #0x08000000,d0          | Unbias exponent.
        !            55:        rts 

unix.superglobalmegacorp.com

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