Annotation of Net2/arch/tahoe/math/ksqrtf.s, revision 1.1.1.1

1.1       root        1: /*-
                      2:  * Copyright (c) 1985 The Regents of the University of California.
                      3:  * All rights reserved.
                      4:  *
                      5:  * This code is derived from software contributed to Berkeley by
                      6:  * Computer Consoles Inc.
                      7:  *
                      8:  * Redistribution and use in source and binary forms, with or without
                      9:  * modification, are permitted provided that the following conditions
                     10:  * are met:
                     11:  * 1. Redistributions of source code must retain the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer.
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  * 3. All advertising materials mentioning features or use of this software
                     17:  *    must display the following acknowledgement:
                     18:  *     This product includes software developed by the University of
                     19:  *     California, Berkeley and its contributors.
                     20:  * 4. Neither the name of the University nor the names of its contributors
                     21:  *    may be used to endorse or promote products derived from this software
                     22:  *    without specific prior written permission.
                     23:  *
                     24:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     25:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     26:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     27:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     28:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     29:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     30:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     31:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     32:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     33:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     34:  * SUCH DAMAGE.
                     35:  *
                     36:  *     @(#)Ksqrtf.s    7.1 (Berkeley) 12/6/90
                     37:  */
                     38: 
                     39: #include "../tahoe/SYS.h"
                     40: 
                     41:        .text
                     42: ENTRY(Ksqrtf, 0)
                     43:        subl3   $76,fp,sp
                     44:        tstl    4(fp)                   # if (arg <= 0.) {
                     45:        jgtr    L18
                     46:        jgeq    L19                     # if (arg < 0.)
                     47: L19:   clrl    r1
                     48:        clrl    r0
                     49:        ret                             # return(0.);}
                     50: L18:   
                     51:        pushl   20(fp)                  # hfs
                     52:        subl3   $72,fp,-(sp)
                     53:        pushl   8(fp)
                     54:        pushl   4(fp)
                     55:        callf   $20,_Kfrexpf
                     56:        clrl    -60+4(fp)
                     57:        movl    r0,-60(fp)              # x = frexp(arg,&exp);
                     58:        jbr     L20
                     59: L2000001:
                     60:        pushl   20(fp)                  # hfs
                     61:        ldd     two
                     62:        pushd
                     63:        ldd     -60(fp)
                     64:        pushd
                     65:        callf   $24,_Kmuld              # x * 2
                     66:        ldd     r0
                     67:        std     -60(fp)                 # x *= 2;
                     68:        decl    -72(fp)                 # exp--;}
                     69: L20:   cmpd2   -60(fp),half            # while(x < 0.5){
                     70:        jlss    L2000001
                     71:        bitl    $1,-72(fp)              # if(exp & 1) {
                     72:        jeql    L24
                     73:        pushl   20(fp)                  # hfs
                     74:        ldd     two
                     75:        pushd
                     76:        ldd     -60(fp)
                     77:        pushd
                     78:        callf   $24,_Kmuld              # x * 2
                     79:        ldd     r0
                     80:        std     -60(fp)                 # x *= 2;
                     81:        decl    -72(fp)                 # exp--;}
                     82: L24:   pushl   20(fp)                  # hfs
                     83:        ldd     -60(fp)
                     84:        pushd
                     85:        ldd     one
                     86:        pushd
                     87:        callf   $24,_Kaddd              # (1.0+x)
                     88:        pushl   20(fp)                  # hfs
                     89:        ldd     r0
                     90:        pushd
                     91:        ldd     half
                     92:        pushd
                     93:        callf   $24,_Kmuld
                     94:        ldd     r0
                     95:        std     -68(fp)                  # temp=0.5*(1.0+x);
                     96:        jbr     L28
                     97: L2000003:
                     98:        pushl   20(fp)                  # hfs
                     99:        ldd     big
                    100:        pushd
                    101:        ldd     -68(fp)
                    102:        pushd
                    103:        callf   $24,_Kmuld              # temp*(1L<<30)
                    104:        ldd     r0
                    105:        std     -68(fp)                 # temp *=(1L<<30);
                    106:        subl2   $60,-72(fp)             # exp -= 60;}
                    107: L28:   cmpl    -72(fp),$60             # while(exp > 60){
                    108:        jleq    L31
                    109:        jbr     L2000003
                    110: L2000005:
                    111:        pushl   20(fp)                  # hfs
                    112:        ldd     big
                    113:        pushd
                    114:        ldd     -68(fp)
                    115:        pushd
                    116:        callf   $24,_Kdivd
                    117:        ldd     r0
                    118:        std     -68(fp)                 # temp /= (1L<<30);
                    119:        addl2   $60,-72(fp)             # exp +=60;}
                    120: L31:   cmpl    -72(fp),$-60            # while(exp < -60) {
                    121:        jlss    L2000005
                    122:        tstl    -72(fp)                 # if(exp >=0)
                    123:        jlss    L34
                    124:        divl3   $2,-72(fp),r0
                    125:        shll    r0,$1,r0
                    126:        pushl   20(fp)                  # hfs
                    127:        pushl   $0
                    128:        pushl   r0
                    129:        pushl   $0
                    130:        pushl   $0
                    131:        callf   $24,_Kcvtld
                    132:        pushl   20(fp)                  # hfs
                    133:        ldd     r0
                    134:        pushd
                    135:        ldd     -68(fp)
                    136:        pushd
                    137:        callf   $24,_Kmuld              # temp * (1L <<(exp/2))
                    138:        jbr     L2000006                # temp *= 1L << (exp/2));
                    139: L34:   mnegl   -72(fp),r0              # -exp
                    140:        divl2   $2,r0                   # -exp/2
                    141:        shll    r0,$1,r0
                    142:        pushl   20(fp)                  # hfs
                    143:        pushl   $0
                    144:        pushl   r0
                    145:        pushl   $0
                    146:        pushl   $0
                    147:        callf   $24,_Kcvtld
                    148:        pushl   20(fp)                  # hfs
                    149:        ldd     r0
                    150:        pushd
                    151:        ldd     -68(fp)
                    152:        pushd
                    153:        callf   $24,_Kdivd              # temp / (1L <<(-exp/2))
                    154: L2000006:
                    155:        ldd     r0
                    156:        std     -68(fp)                 # temp (*/)= 1L << (exp/2));
                    157:        clrl    -76(fp)
                    158: L2000008:
                    159:        pushl   20(fp)                  # hfs
                    160:        ldd     -68(fp)
                    161:        pushd
                    162:        ldd     4(fp)
                    163:        pushd
                    164:        callf   $24,_Kdivd
                    165:        pushl   20(fp)                  # hfs
                    166:        ldd     r0
                    167:        pushd
                    168:        ldd     -68(fp)
                    169:        pushd
                    170:        callf   $24,_Kaddd
                    171:        pushl   20(fp)                  # hfs
                    172:        ldd     r0      
                    173:        pushd
                    174:        ldd     half
                    175:        pushd
                    176:        callf   $24,_Kmuld
                    177:        ldd     r0
                    178:        std     -68(fp)                 # temp=0.5*(temp+arg/temp);
                    179:        aobleq  $3,-76(fp),L2000008
                    180:        ldd     -68(fp)
                    181:        cvdf
                    182:        stf     r0
                    183:        ret
                    184: 
                    185:        .data
                    186:        .align  2
                    187: half:  .long   0x40000000, 0x00000000 # .double .5
                    188: two:   .long   0x41000000, 0x00000000 # .double 2
                    189: one:   .long   0x40800000, 0x00000000 # .double 1
                    190: big:   .long   0x4F800000, 0x00000000 # .double (1<<30)

unix.superglobalmegacorp.com

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