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