Annotation of gcc/config/sh/lib1funcs.asm, revision 1.1.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.