[BACK]Return to mul_1.asm CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / mpn / alpha / ev6

Annotation of OpenXM_contrib/gmp/mpn/alpha/ev6/mul_1.asm, Revision 1.1

1.1     ! ohara       1: dnl  Alpha ev6 mpn_mul_1 -- Multiply a limb vector with a limb and store the
        !             2: dnl  result in a second limb vector.
        !             3:
        !             4: dnl  Copyright 2000, 2001 Free Software Foundation, Inc.
        !             5:
        !             6: dnl  This file is part of the GNU MP Library.
        !             7:
        !             8: dnl  The GNU MP Library is free software; you can redistribute it and/or modify
        !             9: dnl  it under the terms of the GNU Lesser General Public License as published
        !            10: dnl  by the Free Software Foundation; either version 2.1 of the License, or (at
        !            11: dnl  your option) any later version.
        !            12:
        !            13: dnl  The GNU MP Library is distributed in the hope that it will be useful, but
        !            14: dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
        !            15: dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
        !            16: dnl  License for more details.
        !            17:
        !            18: dnl  You should have received a copy of the GNU Lesser General Public License
        !            19: dnl  along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
        !            20: dnl  the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
        !            21: dnl  MA 02111-1307, USA.
        !            22:
        !            23: include(`../config.m4')
        !            24:
        !            25: C INPUT PARAMETERS
        !            26: C res_ptr      r16
        !            27: C s1_ptr       r17
        !            28: C size         r18
        !            29: C s2_limb      r19
        !            30:
        !            31: C This code runs at 2.25 cycles/limb on EV6.
        !            32:
        !            33: C This code was written in close cooperation with ev6 pipeline expert
        !            34: C Steve Root.  Any errors are tege's fault, though.
        !            35:
        !            36: C Code structure:
        !            37:
        !            38: C  code for n < 8
        !            39: C  code for n > 8      code for (n mod 8)
        !            40: C                      code for (n div 8)      feed-in code
        !            41: C                                              8-way unrolled loop
        !            42: C                                              wind-down code
        !            43:
        !            44: C Some notes about unrolled loop:
        !            45: C
        !            46: C   r1-r8     multiplies and workup
        !            47: C   r21-r28   multiplies and workup
        !            48: C   r9-r12    loads
        !            49: C   r0       -1
        !            50: C   r20,r29,r13-r15  scramble
        !            51: C
        !            52: C   We're doing 7 of the 8 carry propagations with a br fixup code and 1 with a
        !            53: C   put-the-carry-into-hi.  The idea is that these branches are very rarely
        !            54: C   taken, and since a non-taken branch consumes no resurces, that is better
        !            55: C   than an addq.
        !            56: C
        !            57: C   Software pipeline: a load in cycle #09, feeds a mul in cycle #16, feeds an
        !            58: C   add NEXT cycle #09 which feeds a store in NEXT cycle #02
        !            59:
        !            60: C The code could use some further work:
        !            61: C   1. Speed up really small multiplies.  The default alpha/mul_1.asm code is
        !            62: C      faster than this for size < 3.
        !            63: C   2. Improve feed-in code, perhaps with the equivalent of switch(n%8) unless
        !            64: C      that is too costly.
        !            65: C   3. Consider using 4-way unrolling, even if that runs slower.
        !            66: C   4. Reduce register usage.  In particular, try to avoid using r29.
        !            67:
        !            68:
        !            69: ASM_START()
        !            70: PROLOGUE(mpn_mul_1)
        !            71:        cmpult  r18,    8,      r1
        !            72:        beq     r1,     $Large
        !            73: $Lsmall:
        !            74:        ldq     r2,0(r17)       C r2 = s1_limb
        !            75:        lda     r18,-1(r18)     C size--
        !            76:        mulq    r2,r19,r3       C r3 = prod_low
        !            77:        bic     r31,r31,r4      C clear cy_limb
        !            78:        umulh   r2,r19,r0       C r0 = prod_high
        !            79:        beq     r18,$Le1a       C jump if size was == 1
        !            80:        ldq     r2,8(r17)       C r2 = s1_limb
        !            81:        lda     r18,-1(r18)     C size--
        !            82:        stq     r3,0(r16)
        !            83:        beq     r18,$Le2a       C jump if size was == 2
        !            84:        ALIGN(8)
        !            85: $Lopa: mulq    r2,r19,r3       C r3 = prod_low
        !            86:        addq    r4,r0,r0        C cy_limb = cy_limb + 'cy'
        !            87:        lda     r18,-1(r18)     C size--
        !            88:        umulh   r2,r19,r4       C r4 = cy_limb
        !            89:        ldq     r2,16(r17)      C r2 = s1_limb
        !            90:        lda     r17,8(r17)      C s1_ptr++
        !            91:        addq    r3,r0,r3        C r3 = cy_limb + prod_low
        !            92:        stq     r3,8(r16)
        !            93:        cmpult  r3,r0,r0        C r0 = carry from (cy_limb + prod_low)
        !            94:        lda     r16,8(r16)      C res_ptr++
        !            95:        bne     r18,$Lopa
        !            96:
        !            97: $Le2a: mulq    r2,r19,r3       C r3 = prod_low
        !            98:        addq    r4,r0,r0        C cy_limb = cy_limb + 'cy'
        !            99:        umulh   r2,r19,r4       C r4 = cy_limb
        !           100:        addq    r3,r0,r3        C r3 = cy_limb + prod_low
        !           101:        cmpult  r3,r0,r0        C r0 = carry from (cy_limb + prod_low)
        !           102:        stq     r3,8(r16)
        !           103:        addq    r4,r0,r0        C cy_limb = prod_high + cy
        !           104:        ret     r31,(r26),1
        !           105: $Le1a: stq     r3,0(r16)
        !           106:        ret     r31,(r26),1
        !           107:
        !           108: $Large:
        !           109:        lda     r30,    -224(r30)
        !           110:        stq     r26,    0(r30)
        !           111:        stq     r9,     8(r30)
        !           112:        stq     r10,    16(r30)
        !           113:        stq     r11,    24(r30)
        !           114:        stq     r12,    32(r30)
        !           115:        stq     r13,    40(r30)
        !           116:        stq     r14,    48(r30)
        !           117:        stq     r15,    56(r30)
        !           118:        stq     r29,    64(r30)
        !           119:
        !           120:        and     r18,    7,      r20     C count for the first loop, 0-7
        !           121:        srl     r18,    3,      r18     C count for unrolled loop
        !           122:        bis     r31,    r31,    r21
        !           123:        beq     r20,    $L_8_or_more    C skip first loop
        !           124:
        !           125: $L_9_or_more:
        !           126:        ldq     r2,0(r17)       C r2 = s1_limb
        !           127:        lda     r17,8(r17)      C s1_ptr++
        !           128:        lda     r20,-1(r20)     C size--
        !           129:        mulq    r2,r19,r3       C r3 = prod_low
        !           130:        umulh   r2,r19,r21      C r21 = prod_high
        !           131:        beq     r20,$Le1b       C jump if size was == 1
        !           132:        bis     r31,    r31,    r0      C FIXME: shouldtn't need this
        !           133:        ldq     r2,0(r17)       C r2 = s1_limb
        !           134:        lda     r17,8(r17)      C s1_ptr++
        !           135:        lda     r20,-1(r20)     C size--
        !           136:        stq     r3,0(r16)
        !           137:        lda     r16,8(r16)      C res_ptr++
        !           138:        beq     r20,$Le2b       C jump if size was == 2
        !           139:        ALIGN(8)
        !           140: $Lopb: mulq    r2,r19,r3       C r3 = prod_low
        !           141:        addq    r21,r0,r0       C cy_limb = cy_limb + 'cy'
        !           142:        lda     r20,-1(r20)     C size--
        !           143:        umulh   r2,r19,r21      C r21 = prod_high
        !           144:        ldq     r2,0(r17)       C r2 = s1_limb
        !           145:        lda     r17,8(r17)      C s1_ptr++
        !           146:        addq    r3,r0,r3        C r3 = cy_limb + prod_low
        !           147:        stq     r3,0(r16)
        !           148:        cmpult  r3,r0,r0        C r0 = carry from (cy_limb + prod_low)
        !           149:        lda     r16,8(r16)      C res_ptr++
        !           150:        bne     r20,$Lopb
        !           151:
        !           152: $Le2b: mulq    r2,r19,r3       C r3 = prod_low
        !           153:        addq    r21,r0,r0       C cy_limb = cy_limb + 'cy'
        !           154:        umulh   r2,r19,r21      C r21 = prod_high
        !           155:        addq    r3,r0,r3        C r3 = cy_limb + prod_low
        !           156:        cmpult  r3,r0,r0        C r0 = carry from (cy_limb + prod_low)
        !           157:        stq     r3,0(r16)
        !           158:        lda     r16,8(r16)      C res_ptr++
        !           159:        addq    r21,r0,r21      C cy_limb = prod_high + cy
        !           160:        br      r31,    $L_8_or_more
        !           161: $Le1b: stq     r3,0(r16)
        !           162:        lda     r16,8(r16)      C res_ptr++
        !           163:
        !           164: $L_8_or_more:
        !           165:        lda     r0,     -1(r31)         C put -1 in r0, for tricky loop control
        !           166:        lda     r17,    -32(r17)        C L1 bookkeeping
        !           167:        lda     r18,    -1(r18)         C decrement count
        !           168:
        !           169:        ldq     r9,     32(r17)         C L1
        !           170:        ldq     r10,    40(r17)         C L1
        !           171:        mulq    r9,     r19,    r22     C U1 #07
        !           172:        ldq     r11,    48(r17)         C L1
        !           173:        umulh   r9,     r19,    r23     C U1 #08
        !           174:        ldq     r12,    56(r17)         C L1
        !           175:        mulq    r10,    r19,    r24     C U1 #09
        !           176:        ldq     r9,     64(r17)         C L1
        !           177:
        !           178:        lda     r17,    64(r17)         C L1 bookkeeping
        !           179:
        !           180:        umulh   r10,    r19,    r25     C U1 #11
        !           181:        mulq    r11,    r19,    r26     C U1 #12
        !           182:        umulh   r11,    r19,    r27     C U1 #13
        !           183:        mulq    r12,    r19,    r28     C U1 #14
        !           184:        ldq     r10,    8(r17)          C L1
        !           185:        umulh   r12,    r19,    r1      C U1 #15
        !           186:        ldq     r11,    16(r17)         C L1
        !           187:        mulq    r9,     r19,    r2      C U1 #16
        !           188:        ldq     r12,    24(r17)         C L1
        !           189:        umulh   r9,     r19,    r3      C U1 #17
        !           190:        addq    r21,    r22,    r13     C L1 mov
        !           191:        mulq    r10,    r19,    r4      C U1 #18
        !           192:        addq    r23,    r24,    r22     C L0 sum 2 mul's
        !           193:        cmpult  r13,    r21,    r14     C L1 carry from sum
        !           194:        bgt     r18,    $L_16_or_more
        !           195:
        !           196:        cmpult  r22,    r24,    r24     C U0 carry from sum
        !           197:        umulh   r10,    r19,    r5      C U1 #02
        !           198:        addq    r25,    r26,    r23     C U0 sum 2 mul's
        !           199:        mulq    r11,    r19,    r6      C U1 #03
        !           200:        cmpult  r23,    r26,    r25     C U0 carry from sum
        !           201:        umulh   r11,    r19,    r7      C U1 #04
        !           202:        addq    r27,    r28,    r28     C U0 sum 2 mul's
        !           203:        mulq    r12,    r19,    r8      C U1 #05
        !           204:        cmpult  r28,    r27,    r15     C L0 carry from sum
        !           205:        lda     r16,    32(r16)         C L1 bookkeeping
        !           206:        addq    r13,    r31,    r13     C U0 start carry cascade
        !           207:        umulh   r12,    r19,    r21     C U1 #06
        !           208:        br      r31,    ret0c
        !           209:
        !           210: $L_16_or_more:
        !           211: C ---------------------------------------------------------------
        !           212:        subq    r18,1,r18
        !           213:        cmpult  r22,    r24,    r24     C U0 carry from sum
        !           214:        ldq     r9,     32(r17)         C L1
        !           215:
        !           216:        umulh   r10,    r19,    r5      C U1 #02
        !           217:        addq    r25,    r26,    r23     C U0 sum 2 mul's
        !           218:        mulq    r11,    r19,    r6      C U1 #03
        !           219:        cmpult  r23,    r26,    r25     C U0 carry from sum
        !           220:        umulh   r11,    r19,    r7      C U1 #04
        !           221:        addq    r27,    r28,    r28     C U0 sum 2 mul's
        !           222:        mulq    r12,    r19,    r8      C U1 #05
        !           223:        cmpult  r28,    r27,    r15     C L0 carry from sum
        !           224:        lda     r16,    32(r16)         C L1 bookkeeping
        !           225:        addq    r13,    r31,    r13     C U0 start carry cascade
        !           226:
        !           227:        umulh   r12,    r19,    r21     C U1 #06
        !           228: C      beq     r13,    fix0w           C U0
        !           229: ret0w: addq    r22,    r14,    r26     C L0
        !           230:        ldq     r10,    40(r17)         C L1
        !           231:
        !           232:        mulq    r9,     r19,    r22     C U1 #07
        !           233:        beq     r26,    fix1w           C U0
        !           234: ret1w: addq    r23,    r24,    r27     C L0
        !           235:        ldq     r11,    48(r17)         C L1
        !           236:
        !           237:        umulh   r9,     r19,    r23     C U1 #08
        !           238:        beq     r27,    fix2w           C U0
        !           239: ret2w: addq    r28,    r25,    r28     C L0
        !           240:        ldq     r12,    56(r17)         C L1
        !           241:
        !           242:        mulq    r10,    r19,    r24     C U1 #09
        !           243:        beq     r28,    fix3w           C U0
        !           244: ret3w: addq    r1,     r2,     r20     C L0 sum 2 mul's
        !           245:        ldq     r9,     64(r17)         C L1
        !           246:
        !           247:        addq    r3,     r4,     r2      C L0 #10 2 mul's
        !           248:        lda     r17,    64(r17)         C L1 bookkeeping
        !           249:        cmpult  r20,    r1,     r29     C U0 carry from sum
        !           250:
        !           251:        umulh   r10,    r19,    r25     C U1 #11
        !           252:        cmpult  r2,     r4,     r4      C U0 carry from sum
        !           253:        stq     r13,    -32(r16)        C L0
        !           254:        stq     r26,    -24(r16)        C L1
        !           255:
        !           256:        mulq    r11,    r19,    r26     C U1 #12
        !           257:        addq    r5,     r6,     r14     C U0 sum 2 mul's
        !           258:        stq     r27,    -16(r16)        C L0
        !           259:        stq     r28,    -8(r16)         C L1
        !           260:
        !           261:        umulh   r11,    r19,    r27     C U1 #13
        !           262:        cmpult  r14,    r6,     r3      C U0 carry from sum
        !           263: C could do cross-jumping here:
        !           264: C      bra     $L_middle_of_unrolled_loop
        !           265:        mulq    r12,    r19,    r28     C U1 #14
        !           266:        addq    r7,     r3,     r5      C L0 eat carry
        !           267:        addq    r20,    r15,    r20     C U0 carry cascade
        !           268:        ldq     r10,    8(r17)          C L1
        !           269:
        !           270:        umulh   r12,    r19,    r1      C U1 #15
        !           271:        beq     r20,    fix4            C U0
        !           272: ret4w: addq    r2,     r29,    r6      C L0
        !           273:        ldq     r11,    16(r17)         C L1
        !           274:
        !           275:        mulq    r9,     r19,    r2      C U1 #16
        !           276:        beq     r6,     fix5            C U0
        !           277: ret5w: addq    r14,    r4,     r7      C L0
        !           278:        ldq     r12,    24(r17)         C L1
        !           279:
        !           280:        umulh   r9,     r19,    r3      C U1 #17
        !           281:        beq     r7,     fix6            C U0
        !           282: ret6w: addq    r5,     r8,     r8      C L0 sum 2
        !           283:        addq    r21,    r22,    r13     C L1 sum 2 mul's
        !           284:
        !           285:        mulq    r10,    r19,    r4      C U1 #18
        !           286:        addq    r23,    r24,    r22     C L0 sum 2 mul's
        !           287:        cmpult  r13,    r21,    r14     C L1 carry from sum
        !           288:        ble     r18,    $Lend           C U0
        !           289: C ---------------------------------------------------------------
        !           290:        ALIGN(16)
        !           291: $Loop:
        !           292:        umulh   r0,     r18,    r18     C U1 #01 decrement r18!
        !           293:        cmpult  r8,     r5,     r29     C L0 carry from last bunch
        !           294:        cmpult  r22,    r24,    r24     C U0 carry from sum
        !           295:        ldq     r9,     32(r17)         C L1
        !           296:
        !           297:        umulh   r10,    r19,    r5      C U1 #02
        !           298:        addq    r25,    r26,    r23     C U0 sum 2 mul's
        !           299:        stq     r20,    0(r16)          C L0
        !           300:        stq     r6,     8(r16)          C L1
        !           301:
        !           302:        mulq    r11,    r19,    r6      C U1 #03
        !           303:        cmpult  r23,    r26,    r25     C U0 carry from sum
        !           304:        stq     r7,     16(r16)         C L0
        !           305:        stq     r8,     24(r16)         C L1
        !           306:
        !           307:        umulh   r11,    r19,    r7      C U1 #04
        !           308:        bis     r31,    r31,    r31     C L0 st slosh
        !           309:        bis     r31,    r31,    r31     C L1 st slosh
        !           310:        addq    r27,    r28,    r28     C U0 sum 2 mul's
        !           311:
        !           312:        mulq    r12,    r19,    r8      C U1 #05
        !           313:        cmpult  r28,    r27,    r15     C L0 carry from sum
        !           314:        lda     r16,    64(r16)         C L1 bookkeeping
        !           315:        addq    r13,    r29,    r13     C U0 start carry cascade
        !           316:
        !           317:        umulh   r12,    r19,    r21     C U1 #06
        !           318:        beq     r13,    fix0            C U0
        !           319: ret0:  addq    r22,    r14,    r26     C L0
        !           320:        ldq     r10,    40(r17)         C L1
        !           321:
        !           322:        mulq    r9,     r19,    r22     C U1 #07
        !           323:        beq     r26,    fix1            C U0
        !           324: ret1:  addq    r23,    r24,    r27     C L0
        !           325:        ldq     r11,    48(r17)         C L1
        !           326:
        !           327:        umulh   r9,     r19,    r23     C U1 #08
        !           328:        beq     r27,    fix2            C U0
        !           329: ret2:  addq    r28,    r25,    r28     C L0
        !           330:        ldq     r12,    56(r17)         C L1
        !           331:
        !           332:        mulq    r10,    r19,    r24     C U1 #09
        !           333:        beq     r28,    fix3            C U0
        !           334: ret3:  addq    r1,     r2,     r20     C L0 sum 2 mul's
        !           335:        ldq     r9,     64(r17)         C L1
        !           336:
        !           337:        addq    r3,     r4,     r2      C L0 #10 2 mul's
        !           338:        bis     r31,    r31,    r31     C U1 mul hole
        !           339:        lda     r17,    64(r17)         C L1 bookkeeping
        !           340:        cmpult  r20,    r1,     r29     C U0 carry from sum
        !           341:
        !           342:        umulh   r10,    r19,    r25     C U1 #11
        !           343:        cmpult  r2,     r4,     r4      C U0 carry from sum
        !           344:        stq     r13,    -32(r16)        C L0
        !           345:        stq     r26,    -24(r16)        C L1
        !           346:
        !           347:        mulq    r11,    r19,    r26     C U1 #12
        !           348:        addq    r5,     r6,     r14     C U0 sum 2 mul's
        !           349:        stq     r27,    -16(r16)        C L0
        !           350:        stq     r28,    -8(r16)         C L1
        !           351:
        !           352:        umulh   r11,    r19,    r27     C U1 #13
        !           353:        bis     r31,    r31,    r31     C L0 st slosh
        !           354:        bis     r31,    r31,    r31     C L1 st slosh
        !           355:        cmpult  r14,    r6,     r3      C U0 carry from sum
        !           356: $L_middle_of_unrolled_loop:
        !           357:        mulq    r12,    r19,    r28     C U1 #14
        !           358:        addq    r7,     r3,     r5      C L0 eat carry
        !           359:        addq    r20,    r15,    r20     C U0 carry cascade
        !           360:        ldq     r10,    8(r17)          C L1
        !           361:
        !           362:        umulh   r12,    r19,    r1      C U1 #15
        !           363:        beq     r20,    fix4            C U0
        !           364: ret4:  addq    r2,     r29,    r6      C L0
        !           365:        ldq     r11,    16(r17)         C L1
        !           366:
        !           367:        mulq    r9,     r19,    r2      C U1 #16
        !           368:        beq     r6,     fix5            C U0
        !           369: ret5:  addq    r14,    r4,     r7      C L0
        !           370:        ldq     r12,    24(r17)         C L1
        !           371:
        !           372:        umulh   r9,     r19,    r3      C U1 #17
        !           373:        beq     r7,     fix6            C U0
        !           374: ret6:  addq    r5,     r8,     r8      C L0 sum 2
        !           375:        addq    r21,    r22,    r13     C L1 sum 2 mul's
        !           376:
        !           377:        mulq    r10,    r19,    r4      C U1 #18
        !           378:        addq    r23,    r24,    r22     C L0 sum 2 mul's
        !           379:        cmpult  r13,    r21,    r14     C L1 carry from sum
        !           380:        bgt     r18,    $Loop           C U0
        !           381: C ---------------------------------------------------------------
        !           382: $Lend:
        !           383:        cmpult  r8,     r5,     r29     C L0 carry from last bunch
        !           384:        cmpult  r22,    r24,    r24     C U0 carry from sum
        !           385:
        !           386:        umulh   r10,    r19,    r5      C U1 #02
        !           387:        addq    r25,    r26,    r23     C U0 sum 2 mul's
        !           388:        stq     r20,    0(r16)          C L0
        !           389:        stq     r6,     8(r16)          C L1
        !           390:
        !           391:        mulq    r11,    r19,    r6      C U1 #03
        !           392:        cmpult  r23,    r26,    r25     C U0 carry from sum
        !           393:        stq     r7,     16(r16)         C L0
        !           394:        stq     r8,     24(r16)         C L1
        !           395:
        !           396:        umulh   r11,    r19,    r7      C U1 #04
        !           397:        addq    r27,    r28,    r28     C U0 sum 2 mul's
        !           398:
        !           399:        mulq    r12,    r19,    r8      C U1 #05
        !           400:        cmpult  r28,    r27,    r15     C L0 carry from sum
        !           401:        lda     r16,    64(r16)         C L1 bookkeeping
        !           402:        addq    r13,    r29,    r13     C U0 start carry cascade
        !           403:
        !           404:        umulh   r12,    r19,    r21     C U1 #06
        !           405:        beq     r13,    fix0c           C U0
        !           406: ret0c: addq    r22,    r14,    r26     C L0
        !           407:        beq     r26,    fix1c           C U0
        !           408: ret1c: addq    r23,    r24,    r27     C L0
        !           409:        beq     r27,    fix2c           C U0
        !           410: ret2c: addq    r28,    r25,    r28     C L0
        !           411:        beq     r28,    fix3c           C U0
        !           412: ret3c: addq    r1,     r2,     r20     C L0 sum 2 mul's
        !           413:        addq    r3,     r4,     r2      C L0 #10 2 mul's
        !           414:        lda     r17,    64(r17)         C L1 bookkeeping
        !           415:        cmpult  r20,    r1,     r29     C U0 carry from sum
        !           416:        cmpult  r2,     r4,     r4      C U0 carry from sum
        !           417:        stq     r13,    -32(r16)        C L0
        !           418:        stq     r26,    -24(r16)        C L1
        !           419:        addq    r5,     r6,     r14     C U0 sum 2 mul's
        !           420:        stq     r27,    -16(r16)        C L0
        !           421:        stq     r28,    -8(r16)         C L1
        !           422:        cmpult  r14,    r6,     r3      C U0 carry from sum
        !           423:        addq    r7,     r3,     r5      C L0 eat carry
        !           424:        addq    r20,    r15,    r20     C U0 carry cascade
        !           425:        beq     r20,    fix4c           C U0
        !           426: ret4c: addq    r2,     r29,    r6      C L0
        !           427:        beq     r6,     fix5c           C U0
        !           428: ret5c: addq    r14,    r4,     r7      C L0
        !           429:        beq     r7,     fix6c           C U0
        !           430: ret6c: addq    r5,     r8,     r8      C L0 sum 2
        !           431:        cmpult  r8,     r5,     r29     C L0 carry from last bunch
        !           432:        stq     r20,    0(r16)          C L0
        !           433:        stq     r6,     8(r16)          C L1
        !           434:        stq     r7,     16(r16)         C L0
        !           435:        stq     r8,     24(r16)         C L1
        !           436:        addq    r29,    r21,    r0
        !           437:
        !           438:        ldq     r26,    0(r30)
        !           439:        ldq     r9,     8(r30)
        !           440:        ldq     r10,    16(r30)
        !           441:        ldq     r11,    24(r30)
        !           442:        ldq     r12,    32(r30)
        !           443:        ldq     r13,    40(r30)
        !           444:        ldq     r14,    48(r30)
        !           445:        ldq     r15,    56(r30)
        !           446:        ldq     r29,    64(r30)
        !           447:        lda     r30,    224(r30)
        !           448:        ret     r31,    (r26),  1
        !           449:
        !           450: C fix0w:       bis     r14,    r29,    r14     C join carries
        !           451: C      br      r31,    ret0w
        !           452: fix1w: bis     r24,    r14,    r24     C join carries
        !           453:        br      r31,    ret1w
        !           454: fix2w: bis     r25,    r24,    r25     C join carries
        !           455:        br      r31,    ret2w
        !           456: fix3w: bis     r15,    r25,    r15     C join carries
        !           457:        br      r31,    ret3w
        !           458: fix0:  bis     r14,    r29,    r14     C join carries
        !           459:        br      r31,    ret0
        !           460: fix1:  bis     r24,    r14,    r24     C join carries
        !           461:        br      r31,    ret1
        !           462: fix2:  bis     r25,    r24,    r25     C join carries
        !           463:        br      r31,    ret2
        !           464: fix3:  bis     r15,    r25,    r15     C join carries
        !           465:        br      r31,    ret3
        !           466: fix4:  bis     r29,    r15,    r29     C join carries
        !           467:        br      r31,    ret4
        !           468: fix5:  bis     r4,     r29,    r4      C join carries
        !           469:        br      r31,    ret5
        !           470: fix6:  addq    r5,     r4,     r5      C can't carry twice!
        !           471:        br      r31,    ret6
        !           472: fix0c: bis     r14,    r29,    r14     C join carries
        !           473:        br      r31,    ret0c
        !           474: fix1c: bis     r24,    r14,    r24     C join carries
        !           475:        br      r31,    ret1c
        !           476: fix2c: bis     r25,    r24,    r25     C join carries
        !           477:        br      r31,    ret2c
        !           478: fix3c: bis     r15,    r25,    r15     C join carries
        !           479:        br      r31,    ret3c
        !           480: fix4c: bis     r29,    r15,    r29     C join carries
        !           481:        br      r31,    ret4c
        !           482: fix5c: bis     r4,     r29,    r4      C join carries
        !           483:        br      r31,    ret5c
        !           484: fix6c: addq    r5,     r4,     r5      C can't carry twice!
        !           485:        br      r31,    ret6c
        !           486:
        !           487: EPILOGUE(mpn_mul_1)
        !           488: ASM_END()

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>