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

1.1     ! root        1:         .data
        !             2:         .asciz  "@(#)Faintd.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(Farintd)
        !            11:        moveml  d2-d4,sp@-
        !            12:        movel   d0,d2           | d2 gets top(x).
        !            13:        bclr    #31,d2          | d2 gets top(abs(x)).
        !            14:        cmpl    #0x3ff00000,d2
        !            15:        bges    2f              | Branch if abs(x) >= 1.0.
        !            16:        andl    #0x80000000,d0  | Isolate sign of x.
        !            17:        cmpl    #0x3fe00000,d2
        !            18:        blts    6f              | Branch if abs(x) < 0.5.
        !            19:        tstl    d1
        !            20:        beqs    7f              | Branch if abs(x) = 0.5 exactly.
        !            21:        orl     #0x3ff00000,d0  | Make signed 1.0.
        !            22: 6:
        !            23:        clrl    d1              | Clear lower part in any case.
        !            24: 7:
        !            25:        jra     Farintddone
        !            26: 2:
        !            27:        cmpl    #0x43300000,d2
        !            28:        blts    3f              | Branch if 1 <= |x| < 2**52.
        !            29: Farintdbig:
        !            30:        cmpl    #0x7ff00000,d2
        !            31:        blts    Farintddone     | Branch if x is finite.
        !            32:        bgts    1f              | Branch if x is nan.
        !            33:        tstl    d1
        !            34:        beqs    Farintddone     | Branch if x is infinity.
        !            35: 1:
        !            36:        bset    #19,d0          | Convert quiet to signalling.
        !            37:        bras    Farintddone
        !            38: 3:
        !            39:        roll    #8,d2
        !            40:        roll    #4,d2
        !            41:        andw    #0xfff,d2       | d2 gets biased exponent.
        !            42:        cmpw    #0x3ff+20,d2
        !            43:        bges    4f              | Branch if exp >= 20.
        !            44:        subw    #0x3ff+19,d2    | d2 gets unbiased exponent - 19.
        !            45:        negw    d2              | d2 gets 19-exp = bit number.
        !            46:        clrl    d3
        !            47:        bset    d2,d3           | Set round bit.
        !            48:        addl    d3,d0           | Add round bit.
        !            49:        lsll    #1,d3           | Make 2**0 bit.
        !            50:        subql   #1,d3           | Fraction bit mask.
        !            51:        tstl    d1
        !            52:        bnes    2f              | Branch if not ambiguous case.
        !            53:        movel   d0,d4
        !            54:        andl    d3,d4           | d4 gets rounded fraction field.
        !            55:        bnes    2f              | Branch if not ambiguous case.
        !            56:        addqw   #1,d2           | Make bit number for 2**0.
        !            57:        bclr    d2,d0           | Force round to even.
        !            58: 2:
        !            59:        notl    d3
        !            60:        andl    d3,d0           | Clear fraction field.
        !            61: 1:
        !            62:        clrl    d1              | Lower half is all fraction bits.
        !            63:        bras    Farintddone
        !            64: 4:
        !            65:        bnes    7f              | Branch if exponent > 20.
        !            66:        addl    #0x80000000,d1  | Add round bit.
        !            67:        bccs    8f              | Branch if no carry out.
        !            68:        addql   #1,d0           | Propagate carry.
        !            69: 8:
        !            70:        tstl    d1
        !            71:        bnes    1b              | Branch if not ambiguous.
        !            72:        bclr    #0,d0           | Force round to even.
        !            73:        bras    Farintddone
        !            74: 7:
        !            75:        subw    #0x3ff+51,d2    | d2 gets exp-51.
        !            76:        negw    d2              | d2 gets bit number 51-exp.
        !            77:        clrl    d3
        !            78:        bset    d2,d3           | Set round bit.
        !            79:        addl    d3,d1           | Add round.
        !            80:        bccs    9f
        !            81:        addql   #1,d0           | Propagate carry.
        !            82: 9:
        !            83:        movel   d3,d4
        !            84:        subql   #1,d4
        !            85:        orl     d4,d3           | d3 gets fraction bit mask.
        !            86:        movel   d3,d4
        !            87:        andl    d1,d4
        !            88:        bnes    1f              | Branch if not ambiguous.
        !            89:        addqw   #1,d2
        !            90:        bclr    d2,d1           | Force round to even.
        !            91: 1:
        !            92:        notl    d3
        !            93:        andl    d3,d1           | Clear fraction bits.
        !            94: Farintddone:
        !            95:        moveml  sp@+,d2-d4
        !            96:        RET
        !            97: 
        !            98: RTENTRY(Fanintd)
        !            99:        moveml  d2-d4,sp@-
        !           100:        movel   d0,d2           | d2 gets top(x).
        !           101:        bclr    #31,d2          | d2 gets top(abs(x)).
        !           102:        cmpl    #0x3ff00000,d2
        !           103:        bges    2f              | Branch if abs(x) >= 1.0.
        !           104:        andl    #0x80000000,d0  | Isolate sign of x.
        !           105:        cmpl    #0x3fe00000,d2
        !           106:        blts    6f              | Branch if abs(x) < 0.5.
        !           107:        orl     #0x3ff00000,d0  | Make signed 1.0.
        !           108: 6:
        !           109:        clrl    d1              | Clear lower part in any case.
        !           110:        jra     Farintddone
        !           111: 2:
        !           112:        cmpl    #0x43300000,d2
        !           113:        jge     Farintdbig      | Branch if not 1 <= |x| < 2**52.
        !           114:        roll    #8,d2
        !           115:        roll    #4,d2
        !           116:        andw    #0xfff,d2       | d2 gets biased exponent.
        !           117:        cmpw    #0x3ff+20,d2
        !           118:        bges    4f              | Branch if exp >= 20.
        !           119:        subw    #0x3ff+19,d2    | d2 gets unbiased exponent - 19.
        !           120:        negw    d2              | d2 gets 19-exp = bit number.
        !           121:        clrl    d3
        !           122:        bset    d2,d3           | Set round bit.
        !           123:        addl    d3,d0           | Add round bit.
        !           124:        lsll    #1,d3           | Make 2**0 bit.
        !           125:        subql   #1,d3           | Fraction bit mask.
        !           126:        notl    d3
        !           127:        andl    d3,d0           | Clear fraction field.
        !           128: 1:
        !           129:        clrl    d1              | Lower half is all fraction bits.
        !           130:        bras    Farintddone
        !           131: 4:
        !           132:        bnes    7f              | Branch if exponent > 20.
        !           133:        addl    #0x80000000,d1  | Add round bit.
        !           134:        bccs    1b              | Branch if no carry out.
        !           135:        addql   #1,d0           | Propagate carry.
        !           136:        bras    1b
        !           137: 7:
        !           138:        subw    #0x3ff+51,d2    | d2 gets exp-51.
        !           139:        negw    d2              | d2 gets bit number 51-exp.
        !           140:        clrl    d3
        !           141:        bset    d2,d3           | Set round bit.
        !           142:        addl    d3,d1           | Add round.
        !           143:        bccs    9f
        !           144:        addql   #1,d0           | Propagate carry.
        !           145: 9:
        !           146:        lsll    #1,d3
        !           147:        subql   #1,d3
        !           148:        notl    d3
        !           149:        andl    d3,d1           | Clear fraction bits.
        !           150:        jra     Farintddone
        !           151: 
        !           152: RTENTRY(Faintd)
        !           153:        moveml  d2-d4,sp@-
        !           154:        movel   d0,d2           | d2 gets top(x).
        !           155:        bclr    #31,d2          | d2 gets top(abs(x)).
        !           156:        cmpl    #0x3ff00000,d2
        !           157:        bges    2f              | Branch if abs(x) >= 1.0.
        !           158:        andl    #0x80000000,d0  | Isolate sign of x.
        !           159:        clrl    d1              | Clear lower part in any case.
        !           160:        jra     Farintddone
        !           161: 2:
        !           162:        cmpl    #0x43300000,d2
        !           163:        jge     Farintdbig      | Branch if not 1 <= |x| < 2**52.
        !           164:        roll    #8,d2
        !           165:        roll    #4,d2
        !           166:        andw    #0xfff,d2       | d2 gets biased exponent.
        !           167:        cmpw    #0x3ff+20,d2
        !           168:        bges    4f              | Branch if exp >= 20.
        !           169:        subw    #0x3ff+20,d2    | d2 gets unbiased exponent - 20.
        !           170:        negw    d2              | d2 gets 20-exp = bit number.
        !           171:        clrl    d3
        !           172:        bset    d2,d3           | Set round bit.
        !           173:        subql   #1,d3           | Fraction bit mask.
        !           174:        notl    d3
        !           175:        andl    d3,d0           | Clear fraction field.
        !           176: 1:
        !           177:        clrl    d1              | Lower half is all fraction bits.
        !           178:        jra     Farintddone
        !           179: 4:
        !           180:        beqs    1b              | Branch if exponent not > 20.
        !           181: 7:
        !           182:        subw    #0x3ff+52,d2    | d2 gets exp-52.
        !           183:        negw    d2              | d2 gets bit number 52-exp.
        !           184:        clrl    d3
        !           185:        bset    d2,d3           | Set round bit.
        !           186:        subql   #1,d3
        !           187:        notl    d3
        !           188:        andl    d3,d1           | Clear fraction bits.
        !           189:        jra     Farintddone
        !           190: 
        !           191: RTENTRY(Ffloord)
        !           192:        moveml  d0-d3,sp@-      | Save x and d2/d3.
        !           193:        jbsr    Faintd          | d0 gets aint(x).
        !           194:        moveml  sp@+,d2-d3      | d2/d3 gets x.
        !           195:        tstl    d2
        !           196:        bpls    Ffloorddone     | Branch if x is positive.
        !           197:        cmpl    d0,d2
        !           198:        bnes    1f
        !           199:        cmpl    d1,d3
        !           200:        beqs    Ffloorddone     | Return x if x = aint(x).
        !           201: 1:
        !           202:        lea     one,a0
        !           203:        jsr     Fsubd           | d0 gets aint(x)-1.
        !           204: Ffloorddone:
        !           205:        moveml  sp@+,d2-d3
        !           206:        RET
        !           207: 
        !           208: one:   .double 0r1.0
        !           209: 
        !           210: RTENTRY(Fceild)
        !           211:        moveml  d0-d3,sp@-      | Save x and d2/d3.
        !           212:        jbsr    Faintd          | d0 gets aint(x).
        !           213:        moveml  sp@+,d2-d3      | d2/d3 gets x.
        !           214:        tstl    d2
        !           215:        bmis    Fceilddone      | Branch if x is negative.
        !           216:        cmpl    d0,d2
        !           217:        bnes    1f
        !           218:        cmpl    d1,d3
        !           219:        beqs    Fceilddone      | Return x if x = aint(x).
        !           220: 1:
        !           221:        lea     one,a0
        !           222:        jsr     Faddd           | d0 gets aint(x)+1.
        !           223: Fceilddone:
        !           224:        moveml  sp@+,d2-d3
        !           225:        RET

unix.superglobalmegacorp.com

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