Annotation of gcc/config/sh/lib1funcs.asm, revision 1.1

1.1     ! root        1: /* Copyright (C) 1994 Free Software Foundation, Inc.
        !             2: 
        !             3: This file is free software; you can redistribute it and/or modify it
        !             4: under the terms of the GNU General Public License as published by the
        !             5: Free Software Foundation; either version 2, or (at your option) any
        !             6: later version.
        !             7: 
        !             8: In addition to the permissions in the GNU General Public License, the
        !             9: Free Software Foundation gives you unlimited permission to link the
        !            10: compiled version of this file with other programs, and to distribute
        !            11: those programs without any restriction coming from the use of this
        !            12: file.  (The General Public License restrictions do apply in other
        !            13: respects; for example, they cover modification of the file, and
        !            14: distribution when not linked into another program.)
        !            15: 
        !            16: This file is distributed in the hope that it will be useful, but
        !            17: WITHOUT ANY WARRANTY; without even the implied warranty of
        !            18: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
        !            19: General Public License for more details.
        !            20: 
        !            21: You should have received a copy of the GNU General Public License
        !            22: along with this program; see the file COPYING.  If not, write to
        !            23: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
        !            24: 
        !            25: /* As a special exception, if you link this library with other files,
        !            26:    some of which are compiled with GCC, to produce an executable,
        !            27:    this library does not by itself cause the resulting executable
        !            28:    to be covered by the GNU General Public License.
        !            29:    This exception does not however invalidate any other reasons why
        !            30:    the executable file might be covered by the GNU General Public License.  */
        !            31: 
        !            32: 
        !            33: !! libgcc1 routines for the Hitachi SH cpu.
        !            34: !! Contributed by Steve Chamberlain.
        !            35: !! [email protected]
        !            36: 
        !            37: 
        !            38: #ifdef L_ashiftrt
        !            39:        .global ___ashiftrt_r4_0
        !            40:        .global ___ashiftrt_r4_1
        !            41:        .global ___ashiftrt_r4_2
        !            42:        .global ___ashiftrt_r4_3
        !            43:        .global ___ashiftrt_r4_4
        !            44:        .global ___ashiftrt_r4_5
        !            45:        .global ___ashiftrt_r4_6
        !            46:        .global ___ashiftrt_r4_7
        !            47:        .global ___ashiftrt_r4_8
        !            48:        .global ___ashiftrt_r4_9
        !            49:        .global ___ashiftrt_r4_10
        !            50:        .global ___ashiftrt_r4_11
        !            51:        .global ___ashiftrt_r4_12
        !            52:        .global ___ashiftrt_r4_13
        !            53:        .global ___ashiftrt_r4_14
        !            54:        .global ___ashiftrt_r4_15
        !            55:        .global ___ashiftrt_r4_16
        !            56:        .global ___ashiftrt_r4_17
        !            57:        .global ___ashiftrt_r4_18
        !            58:        .global ___ashiftrt_r4_19
        !            59:        .global ___ashiftrt_r4_20
        !            60:        .global ___ashiftrt_r4_21
        !            61:        .global ___ashiftrt_r4_22
        !            62:        .global ___ashiftrt_r4_23
        !            63:        .global ___ashiftrt_r4_24
        !            64:        .global ___ashiftrt_r4_25
        !            65:        .global ___ashiftrt_r4_26
        !            66:        .global ___ashiftrt_r4_27
        !            67:        .global ___ashiftrt_r4_28
        !            68:        .global ___ashiftrt_r4_29
        !            69:        .global ___ashiftrt_r4_30
        !            70:        .global ___ashiftrt_r4_31
        !            71:        .global ___ashiftrt_r4_32
        !            72: 
        !            73: ___ashiftrt_r4_32:
        !            74:        shar    r4
        !            75: ___ashiftrt_r4_31:
        !            76:        shar    r4
        !            77: ___ashiftrt_r4_30:
        !            78:        shar    r4
        !            79: ___ashiftrt_r4_29:
        !            80:        shar    r4
        !            81: ___ashiftrt_r4_28:
        !            82:        shar    r4
        !            83: ___ashiftrt_r4_27:
        !            84:        shar    r4
        !            85: ___ashiftrt_r4_26:
        !            86:        shar    r4
        !            87: ___ashiftrt_r4_25:
        !            88:        shar    r4
        !            89: ___ashiftrt_r4_24:
        !            90:        shar    r4
        !            91: ___ashiftrt_r4_23:
        !            92:        shar    r4
        !            93: ___ashiftrt_r4_22:
        !            94:        shar    r4
        !            95: ___ashiftrt_r4_21:
        !            96:        shar    r4
        !            97: ___ashiftrt_r4_20:
        !            98:        shar    r4
        !            99: ___ashiftrt_r4_19:
        !           100:        shar    r4
        !           101: ___ashiftrt_r4_18:
        !           102:        shar    r4
        !           103: ___ashiftrt_r4_17:
        !           104:        shar    r4
        !           105: ___ashiftrt_r4_16:
        !           106:        shar    r4
        !           107: ___ashiftrt_r4_15:
        !           108:        shar    r4
        !           109: ___ashiftrt_r4_14:
        !           110:        shar    r4
        !           111: ___ashiftrt_r4_13:
        !           112:        shar    r4
        !           113: ___ashiftrt_r4_12:
        !           114:        shar    r4
        !           115: ___ashiftrt_r4_11:
        !           116:        shar    r4
        !           117: ___ashiftrt_r4_10:
        !           118:        shar    r4
        !           119: ___ashiftrt_r4_9:
        !           120:        shar    r4
        !           121: ___ashiftrt_r4_8:
        !           122:        shar    r4
        !           123: ___ashiftrt_r4_7:
        !           124:        shar    r4
        !           125: ___ashiftrt_r4_6:
        !           126:        shar    r4
        !           127: ___ashiftrt_r4_5:
        !           128:        shar    r4
        !           129: ___ashiftrt_r4_4:
        !           130:        shar    r4
        !           131: ___ashiftrt_r4_3:
        !           132:        shar    r4
        !           133: ___ashiftrt_r4_2:
        !           134:        shar    r4
        !           135: ___ashiftrt_r4_1:
        !           136:        rts
        !           137:        shar    r4
        !           138: 
        !           139: ___ashiftrt_r4_0:
        !           140:        or      r0,r0
        !           141:        rts
        !           142: #endif
        !           143: 
        !           144: #ifdef L_movstr
        !           145:        .text
        !           146: ! done all the large groups, do the remainder
        !           147: 
        !           148: ! jump to movstr+
        !           149: done:
        !           150:        add     #64,r5
        !           151:        mova    ___movstrSI0,r0
        !           152:        shll2   r6
        !           153:        add     r6,r0
        !           154:        jmp     @r0
        !           155:        add     #64,r4  
        !           156:        .align  4
        !           157:        .global ___movstrSI64
        !           158: ___movstrSI64:
        !           159:        mov.l   @(60,r5),r0
        !           160:        mov.l   r0,@(60,r4)
        !           161:        .global ___movstrSI60
        !           162: ___movstrSI60:
        !           163:        mov.l   @(56,r5),r0
        !           164:        mov.l   r0,@(56,r4)
        !           165:        .global ___movstrSI56
        !           166: ___movstrSI56:
        !           167:        mov.l   @(52,r5),r0
        !           168:        mov.l   r0,@(52,r4)
        !           169:        .global ___movstrSI52
        !           170: ___movstrSI52:
        !           171:        mov.l   @(48,r5),r0
        !           172:        mov.l   r0,@(48,r4)
        !           173:        .global ___movstrSI48
        !           174: ___movstrSI48:
        !           175:        mov.l   @(44,r5),r0
        !           176:        mov.l   r0,@(44,r4)
        !           177:        .global ___movstrSI44
        !           178: ___movstrSI44:
        !           179:        mov.l   @(40,r5),r0
        !           180:        mov.l   r0,@(40,r4)
        !           181:        .global ___movstrSI40
        !           182: ___movstrSI40:
        !           183:        mov.l   @(36,r5),r0
        !           184:        mov.l   r0,@(36,r4)
        !           185:        .global ___movstrSI36
        !           186: ___movstrSI36:
        !           187:        mov.l   @(32,r5),r0
        !           188:        mov.l   r0,@(32,r4)
        !           189:        .global ___movstrSI32
        !           190: ___movstrSI32:
        !           191:        mov.l   @(28,r5),r0
        !           192:        mov.l   r0,@(28,r4)
        !           193:        .global ___movstrSI28
        !           194: ___movstrSI28:
        !           195:        mov.l   @(24,r5),r0
        !           196:        mov.l   r0,@(24,r4)
        !           197:        .global ___movstrSI24
        !           198: ___movstrSI24:
        !           199:        mov.l   @(20,r5),r0
        !           200:        mov.l   r0,@(20,r4)
        !           201:        .global ___movstrSI20
        !           202: ___movstrSI20:
        !           203:        mov.l   @(16,r5),r0
        !           204:        mov.l   r0,@(16,r4)
        !           205:        .global ___movstrSI16
        !           206: ___movstrSI16:
        !           207:        mov.l   @(12,r5),r0
        !           208:        mov.l   r0,@(12,r4)
        !           209:        .global ___movstrSI12
        !           210: ___movstrSI12:
        !           211:        mov.l   @(8,r5),r0
        !           212:        mov.l   r0,@(8,r4)
        !           213:        .global ___movstrSI8
        !           214: ___movstrSI8:
        !           215:        mov.l   @(4,r5),r0
        !           216:        mov.l   r0,@(4,r4)
        !           217:        .global ___movstrSI4
        !           218: ___movstrSI4:
        !           219:        mov.l   @(0,r5),r0
        !           220:        mov.l   r0,@(0,r4)
        !           221: ___movstrSI0:
        !           222:        rts
        !           223:        or      r0,r0,r0
        !           224: 
        !           225:        .align  4
        !           226: 
        !           227:        .global ___movstr
        !           228: ___movstr:
        !           229:        mov.l   @(60,r5),r0
        !           230:        mov.l   r0,@(60,r4)
        !           231: 
        !           232:        mov.l   @(56,r5),r0
        !           233:        mov.l   r0,@(56,r4)
        !           234: 
        !           235:        mov.l   @(52,r5),r0
        !           236:        mov.l   r0,@(52,r4)
        !           237: 
        !           238:        mov.l   @(48,r5),r0
        !           239:        mov.l   r0,@(48,r4)
        !           240: 
        !           241:        mov.l   @(44,r5),r0
        !           242:        mov.l   r0,@(44,r4)
        !           243: 
        !           244:        mov.l   @(40,r5),r0
        !           245:        mov.l   r0,@(40,r4)
        !           246: 
        !           247:        mov.l   @(36,r5),r0
        !           248:        mov.l   r0,@(36,r4)
        !           249: 
        !           250:        mov.l   @(32,r5),r0
        !           251:        mov.l   r0,@(32,r4)
        !           252: 
        !           253:        mov.l   @(28,r5),r0
        !           254:        mov.l   r0,@(28,r4)
        !           255: 
        !           256:        mov.l   @(24,r5),r0
        !           257:        mov.l   r0,@(24,r4)
        !           258: 
        !           259:        mov.l   @(20,r5),r0
        !           260:        mov.l   r0,@(20,r4)
        !           261: 
        !           262:        mov.l   @(16,r5),r0
        !           263:        mov.l   r0,@(16,r4)
        !           264: 
        !           265:        mov.l   @(12,r5),r0
        !           266:        mov.l   r0,@(12,r4)
        !           267: 
        !           268:        mov.l   @(8,r5),r0
        !           269:        mov.l   r0,@(8,r4)
        !           270: 
        !           271:        mov.l   @(4,r5),r0
        !           272:        mov.l   r0,@(4,r4)
        !           273: 
        !           274:        mov.l   @(0,r5),r0
        !           275:        mov.l   r0,@(0,r4)
        !           276: 
        !           277:        add     #-16,r6
        !           278:        cmp/pl  r6
        !           279:        bf      done
        !           280: 
        !           281:        add     #64,r5
        !           282:        bra     ___movstr
        !           283:        add     #64,r4
        !           284: #endif
        !           285: 
        !           286: #ifdef L_mulsi3
        !           287: 
        !           288: 
        !           289:        .global ___mulsi3
        !           290: 
        !           291: ! r4 =       aabb
        !           292: ! r5 =       ccdd
        !           293: ! r0 = aabb*ccdd  via partial products
        !           294: !
        !           295: ! if aa == 0 and cc = 0
        !           296: ! r0 = bb*dd
        !           297: !
        !           298: ! else
        !           299: ! aa = bb*dd + (aa*dd*65536) + (cc*bb*65536)
        !           300: !
        !           301: 
        !           302: ___mulsi3:
        !           303:        mulu    r4,r5           ! multiply the lsws  macl=bb*dd
        !           304:        mov     r5,r3           ! r3 = ccdd
        !           305:        swap.w  r4,r2           ! r2 = bbaa
        !           306:        xtrct   r2,r3           ! r3 = aacc
        !           307:        tst     r3,r3           ! msws zero ?
        !           308:        bf      hiset           
        !           309:        rts                     ! yes - then weve got the answer
        !           310:        sts     macl,r0
        !           311: 
        !           312: hiset: sts     macl,r0         ! r0 = bb*dd
        !           313:        mulu    r2,r5           | brewing macl = aa*dd
        !           314:        sts     macl,r1
        !           315:        mulu    r3,r4           | brewing macl = cc*bb
        !           316:        sts     macl,r2         
        !           317:        add     r1,r2
        !           318:        shll16  r2
        !           319:        rts
        !           320:        add     r2,r0
        !           321:        
        !           322:        
        !           323: #endif 
        !           324: #ifdef L_sdivsi3
        !           325:        .title "SH DIVIDE"
        !           326: !! 4 byte integer Divide code for the Hitachi SH
        !           327: !!
        !           328: !! Steve Chamberlain
        !           329: !! [email protected]
        !           330: !!
        !           331: !!
        !           332: 
        !           333: !! args in r4 and r5, result in r0 clobber r1,r2,r3
        !           334: 
        !           335:        .global ___sdivsi3
        !           336: ___sdivsi3:
        !           337:        mov     r4,r1
        !           338:        mov     r5,r0
        !           339:        
        !           340:        tst     r0,r0
        !           341:        bt      div0
        !           342:        mov     #0,r2
        !           343:        div0s   r2,r1
        !           344:        subc    r3,r3
        !           345:        subc    r2,r1
        !           346:        div0s   r0,r3
        !           347:        rotcl   r1
        !           348:        div1    r0,r3
        !           349:        rotcl   r1
        !           350:        div1    r0,r3
        !           351:        rotcl   r1
        !           352:        div1    r0,r3
        !           353:        rotcl   r1
        !           354:        div1    r0,r3
        !           355:        rotcl   r1
        !           356:        div1    r0,r3
        !           357:        rotcl   r1
        !           358:        div1    r0,r3
        !           359:        rotcl   r1
        !           360:        div1    r0,r3
        !           361:        rotcl   r1
        !           362:        div1    r0,r3
        !           363:        rotcl   r1
        !           364:        div1    r0,r3
        !           365:        rotcl   r1
        !           366:        div1    r0,r3
        !           367:        rotcl   r1
        !           368:        div1    r0,r3
        !           369:        rotcl   r1
        !           370:        div1    r0,r3
        !           371:        rotcl   r1
        !           372:        div1    r0,r3
        !           373:        rotcl   r1
        !           374:        div1    r0,r3
        !           375:        rotcl   r1
        !           376:        div1    r0,r3
        !           377:        rotcl   r1
        !           378:        div1    r0,r3
        !           379:        rotcl   r1
        !           380:        div1    r0,r3
        !           381:        rotcl   r1
        !           382:        div1    r0,r3
        !           383:        rotcl   r1
        !           384:        div1    r0,r3
        !           385:        rotcl   r1
        !           386:        div1    r0,r3
        !           387:        rotcl   r1
        !           388:        div1    r0,r3
        !           389:        rotcl   r1
        !           390:        div1    r0,r3
        !           391:        rotcl   r1
        !           392:        div1    r0,r3
        !           393:        rotcl   r1
        !           394:        div1    r0,r3
        !           395:        rotcl   r1
        !           396:        div1    r0,r3
        !           397:        rotcl   r1
        !           398:        div1    r0,r3
        !           399:        rotcl   r1
        !           400:        div1    r0,r3
        !           401:        rotcl   r1
        !           402:        div1    r0,r3
        !           403:        rotcl   r1
        !           404:        div1    r0,r3
        !           405:        rotcl   r1
        !           406:        div1    r0,r3
        !           407:        rotcl   r1
        !           408:        div1    r0,r3
        !           409:        rotcl   r1
        !           410:        div1    r0,r3
        !           411:        rotcl   r1
        !           412:        addc    r2,r1
        !           413:        rts     
        !           414:        mov     r1,r0
        !           415: 
        !           416:        
        !           417: div0:  rts
        !           418:        mov     #0,r0
        !           419: 
        !           420: #endif
        !           421: #ifdef L_udivsi3
        !           422: 
        !           423:        .title "SH DIVIDE"
        !           424: !! 4 byte integer Divide code for the Hitachi SH
        !           425: !!
        !           426: !! Steve Chamberlain
        !           427: !! [email protected]
        !           428: !!
        !           429: !! 
        !           430: 
        !           431: !! args in r4 and r5, result in r0, clobbers r4,r6, pr and t bit
        !           432:        .global ___udivsi3
        !           433: 
        !           434: ___udivsi3:
        !           435: longway:
        !           436:        mov     #0,r0
        !           437:        div0u           
        !           438:        ! get one bit from the msb of the numerator into the T 
        !           439:        ! bit and divide it by whats in r5.  Put the answer bit
        !           440:        ! into the T bit so it can come out again at the bottom
        !           441: 
        !           442:        rotcl   r4 ; div1 r5,r0 
        !           443:        rotcl   r4 ; div1 r5,r0
        !           444:        rotcl   r4 ; div1 r5,r0
        !           445:        rotcl   r4 ; div1 r5,r0
        !           446:        rotcl   r4 ; div1 r5,r0
        !           447:        rotcl   r4 ; div1 r5,r0
        !           448:        rotcl   r4 ; div1 r5,r0
        !           449:        rotcl   r4 ; div1 r5,r0
        !           450: 
        !           451:        rotcl   r4 ; div1 r5,r0
        !           452:        rotcl   r4 ; div1 r5,r0
        !           453:        rotcl   r4 ; div1 r5,r0
        !           454:        rotcl   r4 ; div1 r5,r0
        !           455:        rotcl   r4 ; div1 r5,r0
        !           456:        rotcl   r4 ; div1 r5,r0
        !           457:        rotcl   r4 ; div1 r5,r0
        !           458:        rotcl   r4 ; div1 r5,r0
        !           459: shortway:
        !           460:        rotcl   r4 ; div1 r5,r0
        !           461:        rotcl   r4 ; div1 r5,r0
        !           462:        rotcl   r4 ; div1 r5,r0
        !           463:        rotcl   r4 ; div1 r5,r0
        !           464:        rotcl   r4 ; div1 r5,r0
        !           465:        rotcl   r4 ; div1 r5,r0
        !           466:        rotcl   r4 ; div1 r5,r0
        !           467:        rotcl   r4 ; div1 r5,r0
        !           468: 
        !           469: vshortway:
        !           470:        rotcl   r4 ; div1 r5,r0
        !           471:        rotcl   r4 ; div1 r5,r0
        !           472:        rotcl   r4 ; div1 r5,r0
        !           473:        rotcl   r4 ; div1 r5,r0
        !           474:        rotcl   r4 ; div1 r5,r0
        !           475:        rotcl   r4 ; div1 r5,r0
        !           476:        rotcl   r4 ; div1 r5,r0
        !           477:        rotcl   r4 ; div1 r5,r0
        !           478:        rotcl   r4      
        !           479: ret:   rts
        !           480:        mov     r4,r0
        !           481: 
        !           482: #endif
        !           483: 

unix.superglobalmegacorp.com

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