Annotation of pgp/src/r3kd.s, revision 1.1.1.2

1.1.1.2 ! root        1: /* Multiprecision multiply routine. . .  This assumes the ability to
        !             2:  * do a 32x32->64 multiply.  I have put in dummy code for the multiplies
        !             3:  * which should be easily identifiable in the resulting source.
        !             4:  * This code was designed for the MIPS series processors, however
        !             5:  * should work pretty well on any machine with hardware multiply.
        !             6:  * The lack of a carry bit in the R3000 resulted in some of the
        !             7:  * machinations which take place.  
        !             8:  *
        !             9:  * See code in dmul_proto.c for the prototype, and appropriate
        !            10:  * documentation.
        !            11:  *
        !            12:  *  Note that this has hooks for both byte orderings of MIPS processors,
        !            13:  *  and that if you have the wrong flags being set in your cpp,
        !            14:  *  you may wind up with no code at all.  (DEC's version will, when
        !            15:  *  compiling for the other byte ordering, leave BOTH things defined,
        !            16:  *  which is bad. . . )
        !            17:  *
        !            18:  *     - Castor Fu Wed Sep 30 11:48:38 PDT 1992
        !            19:  */
        !            20: 
        !            21: #if    defined(MIPSEL) && !defined(MIPSEB)
        !            22:        .verstamp       2 10
        !            23:        .extern global_precision 2
        !            24:        .text   
        !            25:        .align  2
        !            26:        .file   2 "ndmulprotoEL.c"
        !            27:        .globl  p_dmul
        !            28:        .loc    2 69
        !            29:  #  69 {
        !            30:        .ent    p_dmul 2
        !            31: p_dmul:
        !            32:        .option O2
        !            33:        subu    $sp, 168
        !            34:        sd      $30, 32($sp)
        !            35:        sd      $22, 24($sp)
        !            36:        sd      $20, 16($sp)
        !            37:        sd      $18, 8($sp)
        !            38:        sd      $16, 0($sp)
        !            39:        .mask   0xC0FF0000, -132
        !            40:        .frame  $sp, 168, $31
        !            41:        sw      $5, 172($sp)
        !            42:        sw      $6, 176($sp)
        !            43:        .loc    2 76
        !            44:  #  76         preca = global_precision;
        !            45:        lh      $14, global_precision
        !            46:        sw      $14, 164($sp)
        !            47:        .loc    2 77
        !            48:  #  77         pp=msbptr(multiplicand,preca);
        !            49:        .loc    2 78
        !            50:  #  78         while(*post_lowerunit(pp) == 0 && preca > 0) preca--;
        !            51:        mul     $2, $14, 4
        !            52:        lw      $15, 172($sp)
        !            53:        addu    $3, $15, $2
        !            54:        lw      $11, -4($3)
        !            55:        addu    $20, $3, -8
        !            56:        bne     $11, 0, $33
        !            57:        ble     $14, 0, $33
        !            58: $32:
        !            59:        lw      $24, 164($sp)
        !            60:        addu    $25, $24, -1
        !            61:        sw      $25, 164($sp)
        !            62:        lw      $11, 0($20)
        !            63:        addu    $20, $20, -4
        !            64:        bne     $11, 0, $33
        !            65:        bgt     $25, 0, $32
        !            66: $33:
        !            67:        .loc    2 80
        !            68:  #  79 
        !            69:  #  80         precb = global_precision;
        !            70:        lh      $15, global_precision
        !            71:        sw      $15, 160($sp)
        !            72:        .loc    2 81
        !            73:  #  81         pp = msbptr(multiplier,precb);
        !            74:        .loc    2 82
        !            75:  #  82         while(*post_lowerunit(pp) == 0 && precb > 0) precb--;
        !            76:        lw      $14, 176($sp)
        !            77:        addu    $3, $14, $2
        !            78:        lw      $11, -4($3)
        !            79:        addu    $20, $3, -8
        !            80:        bne     $11, 0, $35
        !            81:        ble     $15, 0, $35
        !            82: $34:
        !            83:        lw      $24, 160($sp)
        !            84:        addu    $25, $24, -1
        !            85:        sw      $25, 160($sp)
        !            86:        lw      $11, 0($20)
        !            87:        addu    $20, $20, -4
        !            88:        bne     $11, 0, $35
        !            89:        bgt     $25, 0, $34
        !            90: $35:
        !            91:        .loc    2 84
        !            92:  #  83 
        !            93:  #  84         prec2 = global_precision<<1;
        !            94:        lh      $3, global_precision
        !            95:        sll     $3, $3, 1
        !            96:        move    $2, $3
        !            97:        .loc    2 86
        !            98:  #  85 
        !            99:  #  86         pp = msbptr(prod,prec2);
        !           100:        mul     $14, $3, 4
        !           101:        addu    $20, $4, $14
        !           102:        addu    $20, $20, -4
        !           103:        .loc    2 87
        !           104:  #  87         for (i= preca+precb; i < prec2 ; i++) {
        !           105:        lw      $15, 164($sp)
        !           106:        lw      $24, 160($sp)
        !           107:        addu    $25, $15, $24
        !           108:        sw      $25, 72($sp)
        !           109:        move    $21, $25
        !           110:        bge     $25, $3, $37
        !           111: $36:
        !           112:        .loc    2 88
        !           113:  #  88                 *post_lowerunit(pp) = 0;
        !           114:        sw      $0, 0($20)
        !           115:        addu    $20, $20, -4
        !           116:        .loc    2 89
        !           117:  #  89         }
        !           118:        .loc    2 89
        !           119:        addu    $21, $21, 1
        !           120:        blt     $21, $2, $36
        !           121: $37:
        !           122:        .loc    2 90
        !           123:  #  90         if (preca == 0 || precb == 0) {
        !           124:        lw      $14, 164($sp)
        !           125:        beq     $14, 0, $38
        !           126:        lw      $15, 160($sp)
        !           127:        bne     $15, 0, $41
        !           128: $38:
        !           129:        .loc    2 91
        !           130:  #  91           pp = lsbptr(prod,prec2);
        !           131:        move    $20, $4
        !           132:        .loc    2 92
        !           133:  #  92           for (i=0; i < preca + precb; i++)
        !           134:        move    $21, $0
        !           135:        lw      $24, 72($sp)
        !           136:        ble     $24, 0, $61
        !           137:        and     $2, $24, 3
        !           138:        beq     $2, 0, $40
        !           139: $39:
        !           140:        sw      $0, 0($20)
        !           141:        addu    $20, $20, 4
        !           142:        addu    $21, $21, 1
        !           143:        bne     $2, $21, $39
        !           144:        lw      $25, 72($sp)
        !           145:        beq     $21, $25, $61
        !           146: $40:
        !           147:        .loc    2 93
        !           148:  #  93             *(post_higherunit(pp)) = 0;
        !           149:        sw      $0, 0($20)
        !           150:        addu    $20, $20, 4
        !           151:        sw      $0, 0($20)
        !           152:        addu    $20, $20, 4
        !           153:        sw      $0, 0($20)
        !           154:        addu    $20, $20, 4
        !           155:        sw      $0, 0($20)
        !           156:        addu    $20, $20, 4
        !           157:        addu    $21, $21, 4
        !           158:        lw      $14, 72($sp)
        !           159:        bne     $21, $14, $40
        !           160:        .loc    2 94
        !           161:  #  94           return;
        !           162:        b       $61
        !           163: $41:
        !           164:        .loc    2 97
        !           165:  #  95         }
        !           166:  #  96         /* Canonicalize length(a) >= length(b) */
        !           167:  #  97         if (preca < precb) {
        !           168:        lw      $15, 164($sp)
        !           169:        lw      $24, 160($sp)
        !           170:        bge     $15, $24, $42
        !           171:        .loc    2 98
        !           172:  #  98           pp = multiplicand;
        !           173:        lw      $20, 172($sp)
        !           174:        .loc    2 99
        !           175:  #  99           multiplicand = multiplier;
        !           176:        lw      $25, 176($sp)
        !           177:        sw      $25, 172($sp)
        !           178:        .loc    2 100
        !           179:  # 100           multiplier = pp;
        !           180:        sw      $20, 176($sp)
        !           181:        .loc    2 101
        !           182:  # 101           i = preca;
        !           183:        move    $21, $15
        !           184:        .loc    2 102
        !           185:  # 102           preca = precb;
        !           186:        sw      $24, 164($sp)
        !           187:        .loc    2 103
        !           188:  # 103           precb = i;
        !           189:        sw      $21, 160($sp)
        !           190:        .loc    2 104
        !           191:  # 104         }
        !           192:        lw      $14, 164($sp)
        !           193:        lw      $25, 160($sp)
        !           194:        addu    $15, $14, $25
        !           195:        sw      $15, 72($sp)
        !           196: $42:
        !           197:        .loc    2 107
        !           198:  # 105         make_lsbptr(multiplicand, global_precision);
        !           199:  # 106         make_lsbptr(multiplier, global_precision);
        !           200:  # 107         pp = lsbptr(prod,prec2);
        !           201:        move    $20, $4
        !           202:        .loc    2 108
        !           203:  # 108         ah = 0;
        !           204:        move    $12, $0
        !           205:        .loc    2 109
        !           206:  # 109         carryl = 0;
        !           207:        move    $19, $0
        !           208:        .loc    2 110
        !           209:  # 110         carryh =0;
        !           210:        move    $18, $0
        !           211:        .loc    2 111
        !           212:  # 111         al = 0;
        !           213:        .loc    2 114
        !           214:  # 112 
        !           215:  # 113 
        !           216:  # 114         amin = 0;
        !           217:        .loc    2 115
        !           218:  # 115         for (i=0; i < precb; i++) {
        !           219:        move    $21, $0
        !           220:        lw      $24, 160($sp)
        !           221:        ble     $24, 0, $48
        !           222:        lw      $23, 172($sp)
        !           223:        addu    $30, $23, -4
        !           224:        lw      $14, 176($sp)
        !           225:        addu    $25, $14, 4
        !           226:        sw      $25, 56($sp)
        !           227: $43:
        !           228:        .loc    2 116
        !           229:  # 116                 amax = i;
        !           230:        .loc    2 117
        !           231:  # 117                 ma = word_index(multiplicand,i -1);
        !           232:        move    $13, $30
        !           233:        .loc    2 118
        !           234:  # 118                 mb = word_index(multiplier,1);
        !           235:        lw      $16, 56($sp)
        !           236:        .loc    2 119
        !           237:  # 119                         lmul(word_v(ma,1),word_v(mb,-1),ml, mh);
        !           238:        lw      $2, 0($23)
        !           239:        lw      $15, 176($sp)
        !           240:        lw      $3, 0($15)
        !           241:        multu   $2, $3
        !           242:        mflo    $9
        !           243:        mfhi    $10
        !           244:        .loc    2 120
        !           245:  # 120                         al = ah+ carryl;
        !           246:        addu    $4, $12, $19
        !           247:        move    $8, $4
        !           248:        .loc    2 121
        !           249:  # 121                         carryl = carryh + (al < ah);
        !           250:        sltu    $24, $4, $12
        !           251:        addu    $19, $18, $24
        !           252:        .loc    2 122
        !           253:  # 122                         ah = 0;
        !           254:        move    $12, $0
        !           255:        .loc    2 123
        !           256:  # 123                         carryh = 0;
        !           257:        move    $18, $0
        !           258:        .loc    2 124
        !           259:  # 124                 j = amax - amin;
        !           260:        move    $5, $21
        !           261:        move    $31, $5
        !           262:        .loc    2 125
        !           263:  # 125                 k = j & 3;
        !           264:        .loc    2 126
        !           265:  # 126                 while (k--) {
        !           266:        and     $6, $5, 3
        !           267:        addu    $17, $6, -1
        !           268:        beq     $6, $0, $45
        !           269: $44:
        !           270:        .loc    2 127
        !           271:  # 127                         lmul( *ma, *mb, nml, nmh);
        !           272:        lw      $2, 0($13)
        !           273:        lw      $3, 0($16)
        !           274:        multu   $2, $3
        !           275:        .loc    2 128
        !           276:  # 128                         al += ml;
        !           277:        addu    $8, $8, $9
        !           278:        .loc    2 129
        !           279:  # 129                         carryl += (al < ml);
        !           280:        sltu    $14, $8, $9
        !           281:        addu    $19, $19, $14
        !           282:        .loc    2 130
        !           283:  # 130                         ah += mh;
        !           284:        addu    $12, $12, $10
        !           285:        .loc    2 131
        !           286:  # 131                         carryh += (ah < mh);
        !           287:        sltu    $25, $12, $10
        !           288:        addu    $18, $18, $25
        !           289:        .loc    2 132
        !           290:  # 132                         post_lowerunit(ma);
        !           291:        addu    $13, $13, -4
        !           292:        .loc    2 133
        !           293:  # 133                         post_higherunit(mb);
        !           294:        addu    $16, $16, 4
        !           295:        .loc    2 134
        !           296:  # 134                         ml = nml;
        !           297:        mflo    $9
        !           298:        .loc    2 135
        !           299:  # 135                         mh = nmh;
        !           300:        mfhi    $10
        !           301:        .loc    2 136
        !           302:  # 136                 }
        !           303:        .loc    2 136
        !           304:        move    $11, $17
        !           305:        addu    $17, $17, -1
        !           306:        bne     $11, 0, $44
        !           307: $45:
        !           308:        .loc    2 137
        !           309:  # 137                 k = j >> 2;
        !           310:        .loc    2 138
        !           311:  # 138                 while (k--) {
        !           312:        sra     $2, $31, 2
        !           313:        addu    $17, $2, -1
        !           314:        beq     $2, $0, $47
        !           315: $46:
        !           316:        .loc    2 139
        !           317:  # 139                         lmul( word_v(ma,0), word_v(mb,0), nml, nmh);
        !           318:        lw      $2, 0($13)
        !           319:        lw      $3, 0($16)
        !           320:        multu   $2, $3
        !           321:        .loc    2 140
        !           322:  # 140                         al += ml;
        !           323:        addu    $8, $8, $9
        !           324:        .loc    2 141
        !           325:  # 141                         carryl += (al < ml);
        !           326:        sltu    $15, $8, $9
        !           327:        addu    $19, $19, $15
        !           328:        .loc    2 142
        !           329:  # 142                         ah += mh;
        !           330:        addu    $12, $12, $10
        !           331:        .loc    2 143
        !           332:  # 143                         carryh += (ah < mh);
        !           333:        sltu    $24, $12, $10
        !           334:        addu    $18, $18, $24
        !           335:        .loc    2 144
        !           336:  # 144                         ml = nml;
        !           337:        mflo    $9
        !           338:        .loc    2 145
        !           339:  # 145                         mh = nmh;
        !           340:        mfhi    $10
        !           341:        .loc    2 147
        !           342:  # 146 
        !           343:  # 147                         lmul( word_v(ma,-1), word_v(mb,1), nml, nmh);
        !           344:        lw      $4, -4($13)
        !           345:        lw      $5, 4($16)
        !           346:        multu   $4, $5
        !           347:        .loc    2 148
        !           348:  # 148                         al += ml;
        !           349:        addu    $8, $8, $9
        !           350:        .loc    2 149
        !           351:  # 149                         carryl += (al < ml);
        !           352:        sltu    $14, $8, $9
        !           353:        addu    $19, $19, $14
        !           354:        .loc    2 150
        !           355:  # 150                         ah += mh;
        !           356:        addu    $12, $12, $10
        !           357:        .loc    2 151
        !           358:  # 151                         carryh += (ah < mh);
        !           359:        sltu    $25, $12, $10
        !           360:        addu    $18, $18, $25
        !           361:        .loc    2 152
        !           362:  # 152                         ml = nml;
        !           363:        mflo    $9
        !           364:        .loc    2 153
        !           365:  # 153                         mh = nmh;
        !           366:        mfhi    $10
        !           367:        .loc    2 155
        !           368:  # 154 
        !           369:  # 155                         lmul( word_v(ma,-2), word_v(mb,2), nml, nmh);
        !           370:        lw      $2, -8($13)
        !           371:        lw      $3, 8($16)
        !           372:        multu   $2, $3
        !           373:        .loc    2 156
        !           374:  # 156                         al += ml;
        !           375:        addu    $8, $8, $9
        !           376:        .loc    2 157
        !           377:  # 157                         carryl += (al < ml);
        !           378:        sltu    $15, $8, $9
        !           379:        addu    $19, $19, $15
        !           380:        .loc    2 158
        !           381:  # 158                         ah += mh;
        !           382:        addu    $12, $12, $10
        !           383:        .loc    2 159
        !           384:  # 159                         carryh += (ah < mh);
        !           385:        sltu    $24, $12, $10
        !           386:        addu    $18, $18, $24
        !           387:        .loc    2 160
        !           388:  # 160                         ml = nml;
        !           389:        mflo    $9
        !           390:        .loc    2 161
        !           391:  # 161                         mh = nmh;
        !           392:        mfhi    $10
        !           393:        .loc    2 163
        !           394:  # 162 
        !           395:  # 163                         lmul( word_v(ma,-3), word_v(mb,3), nml, nmh);
        !           396:        lw      $4, -12($13)
        !           397:        lw      $5, 12($16)
        !           398:        multu   $4, $5
        !           399:        .loc    2 164
        !           400:  # 164                         al += ml;
        !           401:        addu    $8, $8, $9
        !           402:        .loc    2 165
        !           403:  # 165                         carryl += (al < ml);
        !           404:        sltu    $14, $8, $9
        !           405:        addu    $19, $19, $14
        !           406:        .loc    2 166
        !           407:  # 166                         ah += mh;
        !           408:        addu    $12, $12, $10
        !           409:        .loc    2 167
        !           410:  # 167                         carryh += (ah < mh);
        !           411:        sltu    $25, $12, $10
        !           412:        addu    $18, $18, $25
        !           413:        .loc    2 168
        !           414:  # 168                         ml = nml;
        !           415:        mflo    $9
        !           416:        .loc    2 169
        !           417:  # 169                         mh = nmh;
        !           418:        mfhi    $10
        !           419:        .loc    2 171
        !           420:  # 170 
        !           421:  # 171                         nlowerunit(ma,4); nhigherunit(mb,4);
        !           422:        addu    $13, $13, -16
        !           423:        addu    $16, $16, 16
        !           424:        .loc    2 173
        !           425:  # 172 
        !           426:  # 173                 }
        !           427:        .loc    2 173
        !           428:        move    $11, $17
        !           429:        addu    $17, $17, -1
        !           430:        bne     $11, 0, $46
        !           431: $47:
        !           432:        .loc    2 175
        !           433:  # 174 
        !           434:  # 175                 al += ml;
        !           435:        addu    $8, $8, $9
        !           436:        .loc    2 176
        !           437:  # 176                 carryl += (al < ml);
        !           438:        sltu    $15, $8, $9
        !           439:        addu    $19, $19, $15
        !           440:        .loc    2 177
        !           441:  # 177                 *pp = al;
        !           442:        sw      $8, 0($20)
        !           443:        .loc    2 178
        !           444:  # 178                 ah += mh;
        !           445:        addu    $12, $12, $10
        !           446:        .loc    2 179
        !           447:  # 179                 carryh += (ah < mh);
        !           448:        sltu    $24, $12, $10
        !           449:        addu    $18, $18, $24
        !           450:        .loc    2 180
        !           451:  # 180                 post_higherunit(pp);
        !           452:        addu    $20, $20, 4
        !           453:        .loc    2 181
        !           454:  # 181         }
        !           455:        .loc    2 181
        !           456:        addu    $21, $21, 1
        !           457:        addu    $23, $23, 4
        !           458:        addu    $30, $30, 4
        !           459:        lw      $14, 160($sp)
        !           460:        bne     $21, $14, $43
        !           461: $48:
        !           462:        .loc    2 182
        !           463:  # 182         amax = precb-1;
        !           464:        .loc    2 183
        !           465:  # 183         for (i=precb; i < preca; i++) {
        !           466:        lw      $25, 160($sp)
        !           467:        move    $21, $25
        !           468:        lw      $15, 164($sp)
        !           469:        bge     $25, $15, $54
        !           470:        mul     $22, $21, 4
        !           471:        lw      $24, 172($sp)
        !           472:        addu    $23, $24, $22
        !           473:        addu    $30, $23, -4
        !           474:        lw      $14, 176($sp)
        !           475:        addu    $24, $14, 4
        !           476:        sw      $24, 56($sp)
        !           477:        mul     $14, $15, 4
        !           478:        sw      $14, 52($sp)
        !           479:        addu    $2, $25, -1
        !           480:        move    $31, $2
        !           481:        and     $24, $2, 3
        !           482:        sw      $24, 44($sp)
        !           483:        addu    $15, $24, -1
        !           484:        sw      $15, 40($sp)
        !           485: $49:
        !           486:        .loc    2 184
        !           487:  # 184                 ma = word_index( multiplicand,i-1);
        !           488:        move    $13, $30
        !           489:        .loc    2 185
        !           490:  # 185                 mb = word_index(multiplier,1);
        !           491:        lw      $16, 56($sp)
        !           492:        .loc    2 186
        !           493:  # 186                         lmul(word_v(ma,1),word_v(mb,-1),ml, mh);
        !           494:        lw      $2, 0($23)
        !           495:        lw      $14, 176($sp)
        !           496:        lw      $3, 0($14)
        !           497:        multu   $2, $3
        !           498:        mflo    $9
        !           499:        mfhi    $10
        !           500:        .loc    2 187
        !           501:  # 187                         al = ah+ carryl;
        !           502:        addu    $4, $12, $19
        !           503:        move    $8, $4
        !           504:        .loc    2 188
        !           505:  # 188                         carryl = carryh + (al < ah);
        !           506:        sltu    $25, $4, $12
        !           507:        addu    $19, $18, $25
        !           508:        .loc    2 189
        !           509:  # 189                         ah = 0;
        !           510:        move    $12, $0
        !           511:        .loc    2 190
        !           512:  # 190                         carryh = 0;
        !           513:        move    $18, $0
        !           514:        .loc    2 191
        !           515:  # 191                 j = amax - amin;
        !           516:        .loc    2 192
        !           517:  # 192                 k = j & 3;
        !           518:        .loc    2 193
        !           519:  # 193                 while (k--) {
        !           520:        lw      $17, 40($sp)
        !           521:        lw      $24, 44($sp)
        !           522:        beq     $24, $0, $51
        !           523: $50:
        !           524:        .loc    2 194
        !           525:  # 194                         lmul( *ma, *mb, nml, nmh);
        !           526:        lw      $2, 0($13)
        !           527:        lw      $3, 0($16)
        !           528:        multu   $2, $3
        !           529:        .loc    2 195
        !           530:  # 195                         al += ml;
        !           531:        addu    $8, $8, $9
        !           532:        .loc    2 196
        !           533:  # 196                         carryl += (al < ml);
        !           534:        sltu    $15, $8, $9
        !           535:        addu    $19, $19, $15
        !           536:        .loc    2 197
        !           537:  # 197                         ah += mh;
        !           538:        addu    $12, $12, $10
        !           539:        .loc    2 198
        !           540:  # 198                         carryh += (ah < mh);
        !           541:        sltu    $14, $12, $10
        !           542:        addu    $18, $18, $14
        !           543:        .loc    2 199
        !           544:  # 199                         post_lowerunit(ma);
        !           545:        addu    $13, $13, -4
        !           546:        .loc    2 200
        !           547:  # 200                         post_higherunit(mb);
        !           548:        addu    $16, $16, 4
        !           549:        .loc    2 201
        !           550:  # 201                         ml = nml;
        !           551:        mflo    $9
        !           552:        .loc    2 202
        !           553:  # 202                         mh = nmh;
        !           554:        mfhi    $10
        !           555:        .loc    2 203
        !           556:  # 203                 }
        !           557:        .loc    2 203
        !           558:        move    $11, $17
        !           559:        addu    $17, $17, -1
        !           560:        bne     $11, 0, $50
        !           561: $51:
        !           562:        .loc    2 204
        !           563:  # 204                 k = j >> 2;
        !           564:        .loc    2 205
        !           565:  # 205                 while (k--) {
        !           566:        sra     $2, $31, 2
        !           567:        addu    $17, $2, -1
        !           568:        beq     $2, $0, $53
        !           569: $52:
        !           570:        .loc    2 206
        !           571:  # 206                         lmul( word_v(ma,0), word_v(mb,0), nml, nmh);
        !           572:        lw      $2, 0($13)
        !           573:        lw      $3, 0($16)
        !           574:        multu   $2, $3
        !           575:        .loc    2 207
        !           576:  # 207                         al += ml;
        !           577:        addu    $8, $8, $9
        !           578:        .loc    2 208
        !           579:  # 208                         carryl += (al < ml);
        !           580:        sltu    $25, $8, $9
        !           581:        addu    $19, $19, $25
        !           582:        .loc    2 209
        !           583:  # 209                         ah += mh;
        !           584:        addu    $12, $12, $10
        !           585:        .loc    2 210
        !           586:  # 210                         carryh += (ah < mh);
        !           587:        sltu    $24, $12, $10
        !           588:        addu    $18, $18, $24
        !           589:        .loc    2 211
        !           590:  # 211                         ml = nml;
        !           591:        mflo    $9
        !           592:        .loc    2 212
        !           593:  # 212                         mh = nmh;
        !           594:        mfhi    $10
        !           595:        .loc    2 214
        !           596:  # 213 
        !           597:  # 214                         lmul( word_v(ma,-1), word_v(mb,1), nml, nmh);
        !           598:        lw      $4, -4($13)
        !           599:        lw      $5, 4($16)
        !           600:        multu   $4, $5
        !           601:        .loc    2 215
        !           602:  # 215                         al += ml;
        !           603:        addu    $8, $8, $9
        !           604:        .loc    2 216
        !           605:  # 216                         carryl += (al < ml);
        !           606:        sltu    $15, $8, $9
        !           607:        addu    $19, $19, $15
        !           608:        .loc    2 217
        !           609:  # 217                         ah += mh;
        !           610:        addu    $12, $12, $10
        !           611:        .loc    2 218
        !           612:  # 218                         carryh += (ah < mh);
        !           613:        sltu    $14, $12, $10
        !           614:        addu    $18, $18, $14
        !           615:        .loc    2 219
        !           616:  # 219                         ml = nml;
        !           617:        mflo    $9
        !           618:        .loc    2 220
        !           619:  # 220                         mh = nmh;
        !           620:        mfhi    $10
        !           621:        .loc    2 222
        !           622:  # 221 
        !           623:  # 222                         lmul( word_v(ma,-2), word_v(mb,2), nml, nmh);
        !           624:        lw      $2, -8($13)
        !           625:        lw      $3, 8($16)
        !           626:        multu   $2, $3
        !           627:        .loc    2 223
        !           628:  # 223                         al += ml;
        !           629:        addu    $8, $8, $9
        !           630:        .loc    2 224
        !           631:  # 224                         carryl += (al < ml);
        !           632:        sltu    $25, $8, $9
        !           633:        addu    $19, $19, $25
        !           634:        .loc    2 225
        !           635:  # 225                         ah += mh;
        !           636:        addu    $12, $12, $10
        !           637:        .loc    2 226
        !           638:  # 226                         carryh += (ah < mh);
        !           639:        sltu    $24, $12, $10
        !           640:        addu    $18, $18, $24
        !           641:        .loc    2 227
        !           642:  # 227                         ml = nml;
        !           643:        mflo    $9
        !           644:        .loc    2 228
        !           645:  # 228                         mh = nmh;
        !           646:        mfhi    $10
        !           647:        .loc    2 230
        !           648:  # 229 
        !           649:  # 230                         lmul( word_v(ma,-3), word_v(mb,3), nml, nmh);
        !           650:        lw      $4, -12($13)
        !           651:        lw      $5, 12($16)
        !           652:        multu   $4, $5
        !           653:        .loc    2 231
        !           654:  # 231                         al += ml;
        !           655:        addu    $8, $8, $9
        !           656:        .loc    2 232
        !           657:  # 232                         carryl += (al < ml);
        !           658:        sltu    $15, $8, $9
        !           659:        addu    $19, $19, $15
        !           660:        .loc    2 233
        !           661:  # 233                         ah += mh;
        !           662:        addu    $12, $12, $10
        !           663:        .loc    2 234
        !           664:  # 234                         carryh += (ah < mh);
        !           665:        sltu    $14, $12, $10
        !           666:        addu    $18, $18, $14
        !           667:        .loc    2 235
        !           668:  # 235                         ml = nml;
        !           669:        mflo    $9
        !           670:        .loc    2 236
        !           671:  # 236                         mh = nmh;
        !           672:        mfhi    $10
        !           673:        .loc    2 238
        !           674:  # 237 
        !           675:  # 238                         nlowerunit(ma,4);
        !           676:        addu    $13, $13, -16
        !           677:        .loc    2 239
        !           678:  # 239                         nhigherunit(mb,4);
        !           679:        addu    $16, $16, 16
        !           680:        .loc    2 240
        !           681:  # 240                 }
        !           682:        .loc    2 240
        !           683:        move    $11, $17
        !           684:        addu    $17, $17, -1
        !           685:        bne     $11, 0, $52
        !           686: $53:
        !           687:        .loc    2 242
        !           688:  # 241 
        !           689:  # 242                 al += ml;
        !           690:        addu    $8, $8, $9
        !           691:        .loc    2 243
        !           692:  # 243                 carryl += (al < ml);
        !           693:        sltu    $25, $8, $9
        !           694:        addu    $19, $19, $25
        !           695:        .loc    2 244
        !           696:  # 244                 *pp = al;
        !           697:        sw      $8, 0($20)
        !           698:        .loc    2 245
        !           699:  # 245                 ah += mh;
        !           700:        addu    $12, $12, $10
        !           701:        .loc    2 246
        !           702:  # 246                 carryh += (ah < mh);
        !           703:        sltu    $24, $12, $10
        !           704:        addu    $18, $18, $24
        !           705:        .loc    2 247
        !           706:  # 247                 post_higherunit(pp);
        !           707:        addu    $20, $20, 4
        !           708:        .loc    2 248
        !           709:  # 248         }
        !           710:        .loc    2 248
        !           711:        addu    $22, $22, 4
        !           712:        addu    $23, $23, 4
        !           713:        addu    $30, $30, 4
        !           714:        lw      $15, 52($sp)
        !           715:        blt     $22, $15, $49
        !           716: $54:
        !           717:        .loc    2 249
        !           718:  # 249         amax = precb-1;
        !           719:        .loc    2 250
        !           720:  # 250         for (i=preca; i < preca + precb -1; i++) {
        !           721:        lw      $14, 164($sp)
        !           722:        move    $21, $14
        !           723:        lw      $25, 72($sp)
        !           724:        addu    $24, $25, -1
        !           725:        sw      $24, 68($sp)
        !           726:        bge     $14, $24, $60
        !           727:        lw      $15, 160($sp)
        !           728:        addu    $25, $15, -1
        !           729:        sw      $25, 72($sp)
        !           730:        lw      $24, 172($sp)
        !           731:        mul     $15, $14, 4
        !           732:        addu    $30, $24, $15
        !           733:        addu    $25, $30, -8
        !           734:        sw      $25, 60($sp)
        !           735:        lw      $24, 176($sp)
        !           736:        subu    $15, $21, $14
        !           737:        mul     $25, $15, 4
        !           738:        addu    $22, $24, $25
        !           739:        addu    $23, $22, 8
        !           740: $55:
        !           741:        .loc    2 251
        !           742:  # 251                 amin = i-preca + 1;
        !           743:        .loc    2 252
        !           744:  # 252                 ma = word_index(multiplicand,preca-2);
        !           745:        lw      $13, 60($sp)
        !           746:        .loc    2 253
        !           747:  # 253                 mb = word_index(multiplier, - preca + 2 +i) ;
        !           748:        move    $16, $23
        !           749:        .loc    2 254
        !           750:  # 254                         lmul(word_v(ma,1),word_v(mb,-1),ml, mh);
        !           751:        lw      $2, -4($30)
        !           752:        lw      $3, 4($22)
        !           753:        multu   $2, $3
        !           754:        mflo    $9
        !           755:        mfhi    $10
        !           756:        .loc    2 255
        !           757:  # 255                         al = ah+ carryl;
        !           758:        addu    $4, $12, $19
        !           759:        move    $8, $4
        !           760:        .loc    2 256
        !           761:  # 256                         carryl = carryh + (al < ah);
        !           762:        sltu    $14, $4, $12
        !           763:        addu    $19, $18, $14
        !           764:        .loc    2 257
        !           765:  # 257                         ah = 0;
        !           766:        move    $12, $0
        !           767:        .loc    2 258
        !           768:  # 258                         carryh = 0;
        !           769:        move    $18, $0
        !           770:        .loc    2 259
        !           771:  # 259                 j = amax - amin;
        !           772:        lw      $15, 72($sp)
        !           773:        lw      $24, 164($sp)
        !           774:        subu    $25, $21, $24
        !           775:        subu    $5, $15, $25
        !           776:        addu    $5, $5, -1
        !           777:        move    $31, $5
        !           778:        .loc    2 260
        !           779:  # 260                 k = j & 3;
        !           780:        .loc    2 261
        !           781:  # 261                 while (k--) {
        !           782:        and     $6, $5, 3
        !           783:        addu    $17, $6, -1
        !           784:        beq     $6, $0, $57
        !           785: $56:
        !           786:        .loc    2 262
        !           787:  # 262                         lmul( *ma, *mb, nml, nmh);
        !           788:        lw      $2, 0($13)
        !           789:        lw      $3, 0($16)
        !           790:        multu   $2, $3
        !           791:        .loc    2 263
        !           792:  # 263                         al += ml;
        !           793:        addu    $8, $8, $9
        !           794:        .loc    2 264
        !           795:  # 264                         carryl += (al < ml);
        !           796:        sltu    $14, $8, $9
        !           797:        addu    $19, $19, $14
        !           798:        .loc    2 265
        !           799:  # 265                         ah += mh;
        !           800:        addu    $12, $12, $10
        !           801:        .loc    2 266
        !           802:  # 266                         carryh += (ah < mh);
        !           803:        sltu    $24, $12, $10
        !           804:        addu    $18, $18, $24
        !           805:        .loc    2 267
        !           806:  # 267                         post_lowerunit(ma);
        !           807:        addu    $13, $13, -4
        !           808:        .loc    2 268
        !           809:  # 268                         post_higherunit(mb);
        !           810:        addu    $16, $16, 4
        !           811:        .loc    2 269
        !           812:  # 269                         ml = nml;
        !           813:        mflo    $9
        !           814:        .loc    2 270
        !           815:  # 270                         mh = nmh;
        !           816:        mfhi    $10
        !           817:        .loc    2 271
        !           818:  # 271                 }
        !           819:        .loc    2 271
        !           820:        move    $11, $17
        !           821:        addu    $17, $17, -1
        !           822:        bne     $11, 0, $56
        !           823: $57:
        !           824:        .loc    2 272
        !           825:  # 272                 k = j >> 2;
        !           826:        .loc    2 273
        !           827:  # 273                 while (k--) {
        !           828:        sra     $2, $31, 2
        !           829:        addu    $17, $2, -1
        !           830:        beq     $2, $0, $59
        !           831: $58:
        !           832:        .loc    2 274
        !           833:  # 274                         lmul( word_v(ma,0), word_v(mb,0), nml, nmh);
        !           834:        lw      $2, 0($13)
        !           835:        lw      $3, 0($16)
        !           836:        multu   $2, $3
        !           837:        .loc    2 275
        !           838:  # 275                         al += ml;
        !           839:        addu    $8, $8, $9
        !           840:        .loc    2 276
        !           841:  # 276                         carryl += (al < ml);
        !           842:        sltu    $15, $8, $9
        !           843:        addu    $19, $19, $15
        !           844:        .loc    2 277
        !           845:  # 277                         ah += mh;
        !           846:        addu    $12, $12, $10
        !           847:        .loc    2 278
        !           848:  # 278                         carryh += (ah < mh);
        !           849:        sltu    $25, $12, $10
        !           850:        addu    $18, $18, $25
        !           851:        .loc    2 279
        !           852:  # 279                         ml = nml;
        !           853:        mflo    $9
        !           854:        .loc    2 280
        !           855:  # 280                         mh = nmh;
        !           856:        mfhi    $10
        !           857:        .loc    2 282
        !           858:  # 281 
        !           859:  # 282                         lmul( word_v(ma,-1), word_v(mb,1), nml, nmh);
        !           860:        lw      $4, -4($13)
        !           861:        lw      $5, 4($16)
        !           862:        multu   $4, $5
        !           863:        .loc    2 283
        !           864:  # 283                         al += ml;
        !           865:        addu    $8, $8, $9
        !           866:        .loc    2 284
        !           867:  # 284                         carryl += (al < ml);
        !           868:        sltu    $14, $8, $9
        !           869:        addu    $19, $19, $14
        !           870:        .loc    2 285
        !           871:  # 285                         ah += mh;
        !           872:        addu    $12, $12, $10
        !           873:        .loc    2 286
        !           874:  # 286                         carryh += (ah < mh);
        !           875:        sltu    $24, $12, $10
        !           876:        addu    $18, $18, $24
        !           877:        .loc    2 287
        !           878:  # 287                         ml = nml;
        !           879:        mflo    $9
        !           880:        .loc    2 288
        !           881:  # 288                         mh = nmh;
        !           882:        mfhi    $10
        !           883:        .loc    2 290
        !           884:  # 289 
        !           885:  # 290                         lmul( word_v(ma,-2), word_v(mb,2), nml, nmh);
        !           886:        lw      $2, -8($13)
        !           887:        lw      $3, 8($16)
        !           888:        multu   $2, $3
        !           889:        .loc    2 291
        !           890:  # 291                         al += ml;
        !           891:        addu    $8, $8, $9
        !           892:        .loc    2 292
        !           893:  # 292                         carryl += (al < ml);
        !           894:        sltu    $15, $8, $9
        !           895:        addu    $19, $19, $15
        !           896:        .loc    2 293
        !           897:  # 293                         ah += mh;
        !           898:        addu    $12, $12, $10
        !           899:        .loc    2 294
        !           900:  # 294                         carryh += (ah < mh);
        !           901:        sltu    $25, $12, $10
        !           902:        addu    $18, $18, $25
        !           903:        .loc    2 295
        !           904:  # 295                         ml = nml;
        !           905:        mflo    $9
        !           906:        .loc    2 296
        !           907:  # 296                         mh = nmh;
        !           908:        mfhi    $10
        !           909:        .loc    2 298
        !           910:  # 297 
        !           911:  # 298                         lmul( word_v(ma,-3), word_v(mb,3), nml, nmh);
        !           912:        lw      $4, -12($13)
        !           913:        lw      $5, 12($16)
        !           914:        multu   $4, $5
        !           915:        .loc    2 299
        !           916:  # 299                         al += ml;
        !           917:        addu    $8, $8, $9
        !           918:        .loc    2 300
        !           919:  # 300                         carryl += (al < ml);
        !           920:        sltu    $14, $8, $9
        !           921:        addu    $19, $19, $14
        !           922:        .loc    2 301
        !           923:  # 301                         ah += mh;
        !           924:        addu    $12, $12, $10
        !           925:        .loc    2 302
        !           926:  # 302                         carryh += (ah < mh);
        !           927:        sltu    $24, $12, $10
        !           928:        addu    $18, $18, $24
        !           929:        .loc    2 303
        !           930:  # 303                         ml = nml;
        !           931:        mflo    $9
        !           932:        .loc    2 304
        !           933:  # 304                         mh = nmh;
        !           934:        mfhi    $10
        !           935:        .loc    2 306
        !           936:  # 305 
        !           937:  # 306                         nlowerunit(ma,4);
        !           938:        addu    $13, $13, -16
        !           939:        .loc    2 307
        !           940:  # 307                         nhigherunit(mb,4);
        !           941:        addu    $16, $16, 16
        !           942:        .loc    2 308
        !           943:  # 308                 }
        !           944:        .loc    2 308
        !           945:        move    $11, $17
        !           946:        addu    $17, $17, -1
        !           947:        bne     $11, 0, $58
        !           948: $59:
        !           949:        .loc    2 310
        !           950:  # 309 
        !           951:  # 310                 al += ml;
        !           952:        addu    $8, $8, $9
        !           953:        .loc    2 311
        !           954:  # 311                 carryl += (al < ml);
        !           955:        sltu    $15, $8, $9
        !           956:        addu    $19, $19, $15
        !           957:        .loc    2 312
        !           958:  # 312                 *pp = al;
        !           959:        sw      $8, 0($20)
        !           960:        .loc    2 313
        !           961:  # 313                 ah += mh;
        !           962:        addu    $12, $12, $10
        !           963:        .loc    2 314
        !           964:  # 314                 carryh += (ah < mh);
        !           965:        sltu    $25, $12, $10
        !           966:        addu    $18, $18, $25
        !           967:        .loc    2 315
        !           968:  # 315                 post_higherunit(pp);
        !           969:        addu    $20, $20, 4
        !           970:        .loc    2 316
        !           971:  # 316         }
        !           972:        .loc    2 316
        !           973:        addu    $21, $21, 1
        !           974:        addu    $22, $22, 4
        !           975:        addu    $23, $23, 4
        !           976:        lw      $14, 68($sp)
        !           977:        blt     $21, $14, $55
        !           978: $60:
        !           979:        .loc    2 317
        !           980:  # 317         al = ah + carryl;
        !           981:        .loc    2 318
        !           982:  # 318         carryh += (al < ah);
        !           983:        .loc    2 319
        !           984:  # 319         *pp  = al;
        !           985:        addu    $24, $12, $19
        !           986:        sw      $24, 0($20)
        !           987:        .loc    2 320
        !           988:  # 320 }
        !           989: $61:
        !           990:        ld      $16, 0($sp)
        !           991:        ld      $18, 8($sp)
        !           992:        ld      $20, 16($sp)
        !           993:        ld      $22, 24($sp)
        !           994:        ld      $30, 32($sp)
        !           995:        addu    $sp, 168
        !           996:        j       $31
        !           997:        .end    p_dmul
        !           998: #endif
        !           999: 
        !          1000: #if    defined(MIPSEB) && !defined(MIPSEL)
        !          1001:        .verstamp       2 10
        !          1002:        .extern global_precision 2
        !          1003:        .text   
        !          1004:        .align  2
        !          1005:        .file   2 "ndmulprotoEB.c"
        !          1006:        .globl  p_dmul
        !          1007:        .loc    2 69
        !          1008:  #  69 {
        !          1009:        .ent    p_dmul 2
        !          1010: p_dmul:
        !          1011:        .option O2
        !          1012:        subu    $sp, 168
        !          1013:        sd      $30, 32($sp)
        !          1014:        sd      $22, 24($sp)
        !          1015:        sd      $20, 16($sp)
        !          1016:        sd      $18, 8($sp)
        !          1017:        sd      $16, 0($sp)
        !          1018:        .mask   0xC0FF0000, -132
        !          1019:        .frame  $sp, 168, $31
        !          1020:        sw      $5, 172($sp)
        !          1021:        sw      $6, 176($sp)
        !          1022:        .loc    2 76
        !          1023:  #  76         preca = global_precision;
        !          1024:        lh      $14, global_precision
        !          1025:        sw      $14, 164($sp)
        !          1026:        .loc    2 77
        !          1027:  #  77         pp=msbptr(multiplicand,preca);
        !          1028:        .loc    2 78
        !          1029:  #  78         while(*post_lowerunit(pp) == 0 && preca > 0) preca--;
        !          1030:        lw      $15, 172($sp)
        !          1031:        lw      $11, 0($15)
        !          1032:        addu    $20, $15, 4
        !          1033:        bne     $11, 0, $33
        !          1034:        ble     $14, 0, $33
        !          1035: $32:
        !          1036:        lw      $24, 164($sp)
        !          1037:        addu    $25, $24, -1
        !          1038:        sw      $25, 164($sp)
        !          1039:        lw      $11, 0($20)
        !          1040:        addu    $20, $20, 4
        !          1041:        bne     $11, 0, $33
        !          1042:        bgt     $25, 0, $32
        !          1043: $33:
        !          1044:        .loc    2 80
        !          1045:  #  79 
        !          1046:  #  80         precb = global_precision;
        !          1047:        lh      $15, global_precision
        !          1048:        sw      $15, 160($sp)
        !          1049:        .loc    2 81
        !          1050:  #  81         pp = msbptr(multiplier,precb);
        !          1051:        .loc    2 82
        !          1052:  #  82         while(*post_lowerunit(pp) == 0 && precb > 0) precb--;
        !          1053:        lw      $14, 176($sp)
        !          1054:        lw      $11, 0($14)
        !          1055:        addu    $20, $14, 4
        !          1056:        bne     $11, 0, $35
        !          1057:        ble     $15, 0, $35
        !          1058: $34:
        !          1059:        lw      $24, 160($sp)
        !          1060:        addu    $25, $24, -1
        !          1061:        sw      $25, 160($sp)
        !          1062:        lw      $11, 0($20)
        !          1063:        addu    $20, $20, 4
        !          1064:        bne     $11, 0, $35
        !          1065:        bgt     $25, 0, $34
        !          1066: $35:
        !          1067:        .loc    2 84
        !          1068:  #  83 
        !          1069:  #  84         prec2 = global_precision<<1;
        !          1070:        lh      $3, global_precision
        !          1071:        sll     $3, $3, 1
        !          1072:        move    $2, $3
        !          1073:        .loc    2 86
        !          1074:  #  85 
        !          1075:  #  86         pp = msbptr(prod,prec2);
        !          1076:        move    $20, $4
        !          1077:        .loc    2 87
        !          1078:  #  87         for (i= preca+precb; i < prec2 ; i++) {
        !          1079:        lw      $14, 164($sp)
        !          1080:        lw      $15, 160($sp)
        !          1081:        addu    $24, $14, $15
        !          1082:        sw      $24, 72($sp)
        !          1083:        move    $21, $24
        !          1084:        bge     $24, $3, $37
        !          1085: $36:
        !          1086:        .loc    2 88
        !          1087:  #  88                 *post_lowerunit(pp) = 0;
        !          1088:        sw      $0, 0($20)
        !          1089:        addu    $20, $20, 4
        !          1090:        .loc    2 89
        !          1091:  #  89         }
        !          1092:        .loc    2 89
        !          1093:        addu    $21, $21, 1
        !          1094:        blt     $21, $2, $36
        !          1095: $37:
        !          1096:        .loc    2 90
        !          1097:  #  90         if (preca == 0 || precb == 0) {
        !          1098:        lw      $25, 164($sp)
        !          1099:        beq     $25, 0, $38
        !          1100:        lw      $14, 160($sp)
        !          1101:        bne     $14, 0, $41
        !          1102: $38:
        !          1103:        .loc    2 91
        !          1104:  #  91           pp = lsbptr(prod,prec2);
        !          1105:        mul     $15, $2, 4
        !          1106:        addu    $20, $4, $15
        !          1107:        addu    $20, $20, -4
        !          1108:        .loc    2 92
        !          1109:  #  92           for (i=0; i < preca + precb; i++)
        !          1110:        move    $21, $0
        !          1111:        lw      $24, 72($sp)
        !          1112:        ble     $24, 0, $61
        !          1113:        and     $2, $24, 3
        !          1114:        beq     $2, 0, $40
        !          1115: $39:
        !          1116:        sw      $0, 0($20)
        !          1117:        addu    $20, $20, -4
        !          1118:        addu    $21, $21, 1
        !          1119:        bne     $2, $21, $39
        !          1120:        lw      $25, 72($sp)
        !          1121:        beq     $21, $25, $61
        !          1122: $40:
        !          1123:        .loc    2 93
        !          1124:  #  93             *(post_higherunit(pp)) = 0;
        !          1125:        sw      $0, 0($20)
        !          1126:        addu    $20, $20, -4
        !          1127:        sw      $0, 0($20)
        !          1128:        addu    $20, $20, -4
        !          1129:        sw      $0, 0($20)
        !          1130:        addu    $20, $20, -4
        !          1131:        sw      $0, 0($20)
        !          1132:        addu    $20, $20, -4
        !          1133:        addu    $21, $21, 4
        !          1134:        lw      $14, 72($sp)
        !          1135:        bne     $21, $14, $40
        !          1136:        .loc    2 94
        !          1137:  #  94           return;
        !          1138:        b       $61
        !          1139: $41:
        !          1140:        .loc    2 97
        !          1141:  #  95         }
        !          1142:  #  96         /* Canonicalize length(a) >= length(b) */
        !          1143:  #  97         if (preca < precb) {
        !          1144:        lw      $15, 164($sp)
        !          1145:        lw      $24, 160($sp)
        !          1146:        bge     $15, $24, $42
        !          1147:        .loc    2 98
        !          1148:  #  98           pp = multiplicand;
        !          1149:        lw      $20, 172($sp)
        !          1150:        .loc    2 99
        !          1151:  #  99           multiplicand = multiplier;
        !          1152:        lw      $25, 176($sp)
        !          1153:        sw      $25, 172($sp)
        !          1154:        .loc    2 100
        !          1155:  # 100           multiplier = pp;
        !          1156:        sw      $20, 176($sp)
        !          1157:        .loc    2 101
        !          1158:  # 101           i = preca;
        !          1159:        move    $21, $15
        !          1160:        .loc    2 102
        !          1161:  # 102           preca = precb;
        !          1162:        sw      $24, 164($sp)
        !          1163:        .loc    2 103
        !          1164:  # 103           precb = i;
        !          1165:        sw      $21, 160($sp)
        !          1166:        .loc    2 104
        !          1167:  # 104         }
        !          1168:        lw      $14, 164($sp)
        !          1169:        lw      $25, 160($sp)
        !          1170:        addu    $15, $14, $25
        !          1171:        sw      $15, 72($sp)
        !          1172: $42:
        !          1173:        .loc    2 105
        !          1174:  # 105         make_lsbptr(multiplicand, global_precision);
        !          1175:        lh      $3, global_precision
        !          1176:        mul     $3, $3, 4
        !          1177:        lw      $24, 172($sp)
        !          1178:        addu    $14, $24, $3
        !          1179:        addu    $25, $14, -4
        !          1180:        sw      $25, 172($sp)
        !          1181:        .loc    2 106
        !          1182:  # 106         make_lsbptr(multiplier, global_precision);
        !          1183:        lw      $15, 176($sp)
        !          1184:        addu    $24, $15, $3
        !          1185:        addu    $14, $24, -4
        !          1186:        sw      $14, 176($sp)
        !          1187:        .loc    2 107
        !          1188:  # 107         pp = lsbptr(prod,prec2);
        !          1189:        mul     $15, $2, 4
        !          1190:        addu    $20, $4, $15
        !          1191:        addu    $20, $20, -4
        !          1192:        .loc    2 108
        !          1193:  # 108         ah = 0;
        !          1194:        move    $12, $0
        !          1195:        .loc    2 109
        !          1196:  # 109         carryl = 0;
        !          1197:        move    $19, $0
        !          1198:        .loc    2 110
        !          1199:  # 110         carryh =0;
        !          1200:        move    $18, $0
        !          1201:        .loc    2 111
        !          1202:  # 111         al = 0;
        !          1203:        .loc    2 114
        !          1204:  # 112 
        !          1205:  # 113 
        !          1206:  # 114         amin = 0;
        !          1207:        .loc    2 115
        !          1208:  # 115         for (i=0; i < precb; i++) {
        !          1209:        move    $21, $0
        !          1210:        lw      $24, 160($sp)
        !          1211:        ble     $24, 0, $48
        !          1212:        move    $23, $25
        !          1213:        addu    $30, $23, 4
        !          1214:        addu    $15, $14, -4
        !          1215:        sw      $15, 56($sp)
        !          1216: $43:
        !          1217:        .loc    2 116
        !          1218:  # 116                 amax = i;
        !          1219:        .loc    2 117
        !          1220:  # 117                 ma = word_index(multiplicand,i -1);
        !          1221:        move    $13, $30
        !          1222:        .loc    2 118
        !          1223:  # 118                 mb = word_index(multiplier,1);
        !          1224:        lw      $16, 56($sp)
        !          1225:        .loc    2 119
        !          1226:  # 119                         lmul(word_v(ma,1),word_v(mb,-1),ml, mh);
        !          1227:        lw      $3, 0($23)
        !          1228:        lw      $24, 176($sp)
        !          1229:        lw      $2, 0($24)
        !          1230:        multu   $3,$2
        !          1231:        mflo    $9
        !          1232:        mfhi    $10
        !          1233:        .loc    2 120
        !          1234:  # 120                         al = ah+ carryl;
        !          1235:        addu    $4, $12, $19
        !          1236:        move    $8, $4
        !          1237:        .loc    2 121
        !          1238:  # 121                         carryl = carryh + (al < ah);
        !          1239:        sltu    $25, $4, $12
        !          1240:        addu    $19, $18, $25
        !          1241:        .loc    2 122
        !          1242:  # 122                         ah = 0;
        !          1243:        move    $12, $0
        !          1244:        .loc    2 123
        !          1245:  # 123                         carryh = 0;
        !          1246:        move    $18, $0
        !          1247:        .loc    2 124
        !          1248:  # 124                 j = amax - amin;
        !          1249:        move    $5, $21
        !          1250:        move    $31, $5
        !          1251:        .loc    2 125
        !          1252:  # 125                 k = j & 3;
        !          1253:        .loc    2 126
        !          1254:  # 126                 while (k--) {
        !          1255:        and     $6, $5, 3
        !          1256:        addu    $17, $6, -1
        !          1257:        beq     $6, $0, $45
        !          1258: $44:
        !          1259:        .loc    2 127
        !          1260:  # 127                         lmul( *ma, *mb, nml, nmh);
        !          1261:        lw      $2, 0($13)
        !          1262:        lw      $3, 0($16)
        !          1263:        multu   $2, $3
        !          1264:        .loc    2 128
        !          1265:  # 128                         al += ml;
        !          1266:        addu    $8, $8, $9
        !          1267:        .loc    2 129
        !          1268:  # 129                         carryl += (al < ml);
        !          1269:        sltu    $14, $8, $9
        !          1270:        addu    $19, $19, $14
        !          1271:        .loc    2 130
        !          1272:  # 130                         ah += mh;
        !          1273:        addu    $12, $12, $10
        !          1274:        .loc    2 131
        !          1275:  # 131                         carryh += (ah < mh);
        !          1276:        sltu    $15, $12, $10
        !          1277:        addu    $18, $18, $15
        !          1278:        .loc    2 132
        !          1279:  # 132                         post_lowerunit(ma);
        !          1280:        addu    $13, $13, 4
        !          1281:        .loc    2 133
        !          1282:  # 133                         post_higherunit(mb);
        !          1283:        addu    $16, $16, -4
        !          1284:        .loc    2 134
        !          1285:  # 134                         ml = nml;
        !          1286:        mflo    $9
        !          1287:        .loc    2 135
        !          1288:  # 135                         mh = nmh;
        !          1289:        mfhi    $10
        !          1290:        .loc    2 136
        !          1291:  # 136                 }
        !          1292:        .loc    2 136
        !          1293:        move    $11, $17
        !          1294:        addu    $17, $17, -1
        !          1295:        bne     $11, 0, $44
        !          1296: $45:
        !          1297:        .loc    2 137
        !          1298:  # 137                 k = j >> 2;
        !          1299:        .loc    2 138
        !          1300:  # 138                 while (k--) {
        !          1301:        sra     $2, $31, 2
        !          1302:        addu    $17, $2, -1
        !          1303:        beq     $2, $0, $47
        !          1304: $46:
        !          1305:        .loc    2 139
        !          1306:  # 139                         lmul( word_v(ma,0), word_v(mb,0), nml, nmh);
        !          1307:        lw      $2, 0($13)
        !          1308:        lw      $3, 0($16)
        !          1309:        multu   $2, $3
        !          1310:        .loc    2 140
        !          1311:  # 140                         al += ml;
        !          1312:        addu    $8, $8, $9
        !          1313:        .loc    2 141
        !          1314:  # 141                         carryl += (al < ml);
        !          1315:        sltu    $24, $8, $9
        !          1316:        addu    $19, $19, $24
        !          1317:        .loc    2 142
        !          1318:  # 142                         ah += mh;
        !          1319:        addu    $12, $12, $10
        !          1320:        .loc    2 143
        !          1321:  # 143                         carryh += (ah < mh);
        !          1322:        sltu    $25, $12, $10
        !          1323:        addu    $18, $18, $25
        !          1324:        .loc    2 144
        !          1325:  # 144                         ml = nml;
        !          1326:        mflo    $9
        !          1327:        .loc    2 145
        !          1328:  # 145                         mh = nmh;
        !          1329:        mfhi    $10
        !          1330:        .loc    2 147
        !          1331:  # 146 
        !          1332:  # 147                         lmul( word_v(ma,-1), word_v(mb,1), nml, nmh);
        !          1333:        lw      $4, 4($13)
        !          1334:        lw      $5, -4($16)
        !          1335:        multu   $4, $5
        !          1336:        .loc    2 148
        !          1337:  # 148                         al += ml;
        !          1338:        addu    $8, $8, $9
        !          1339:        .loc    2 149
        !          1340:  # 149                         carryl += (al < ml);
        !          1341:        sltu    $14, $8, $9
        !          1342:        addu    $19, $19, $14
        !          1343:        .loc    2 150
        !          1344:  # 150                         ah += mh;
        !          1345:        addu    $12, $12, $10
        !          1346:        .loc    2 151
        !          1347:  # 151                         carryh += (ah < mh);
        !          1348:        sltu    $15, $12, $10
        !          1349:        addu    $18, $18, $15
        !          1350:        .loc    2 152
        !          1351:  # 152                         ml = nml;
        !          1352:        mflo    $9
        !          1353:        .loc    2 153
        !          1354:  # 153                         mh = nmh;
        !          1355:        mfhi    $10
        !          1356:        .loc    2 155
        !          1357:  # 154 
        !          1358:  # 155                         lmul( word_v(ma,-2), word_v(mb,2), nml, nmh);
        !          1359:        lw      $2, 8($13)
        !          1360:        lw      $3, -8($16)
        !          1361:        multu   $2, $3
        !          1362:        .loc    2 156
        !          1363:  # 156                         al += ml;
        !          1364:        addu    $8, $8, $9
        !          1365:        .loc    2 157
        !          1366:  # 157                         carryl += (al < ml);
        !          1367:        sltu    $24, $8, $9
        !          1368:        addu    $19, $19, $24
        !          1369:        .loc    2 158
        !          1370:  # 158                         ah += mh;
        !          1371:        addu    $12, $12, $10
        !          1372:        .loc    2 159
        !          1373:  # 159                         carryh += (ah < mh);
        !          1374:        sltu    $25, $12, $10
        !          1375:        addu    $18, $18, $25
        !          1376:        .loc    2 160
        !          1377:  # 160                         ml = nml;
        !          1378:        mflo    $9
        !          1379:        .loc    2 161
        !          1380:  # 161                         mh = nmh;
        !          1381:        mfhi    $10
        !          1382:        .loc    2 163
        !          1383:  # 162 
        !          1384:  # 163                         lmul( word_v(ma,-3), word_v(mb,3), nml, nmh);
        !          1385:        lw      $4, 12($13)
        !          1386:        lw      $5, -12($16)
        !          1387:        multu   $4, $5
        !          1388:        .loc    2 164
        !          1389:  # 164                         al += ml;
        !          1390:        addu    $8, $8, $9
        !          1391:        .loc    2 165
        !          1392:  # 165                         carryl += (al < ml);
        !          1393:        sltu    $14, $8, $9
        !          1394:        addu    $19, $19, $14
        !          1395:        .loc    2 166
        !          1396:  # 166                         ah += mh;
        !          1397:        addu    $12, $12, $10
        !          1398:        .loc    2 167
        !          1399:  # 167                         carryh += (ah < mh);
        !          1400:        sltu    $15, $12, $10
        !          1401:        addu    $18, $18, $15
        !          1402:        .loc    2 168
        !          1403:  # 168                         ml = nml;
        !          1404:        mflo    $9
        !          1405:        .loc    2 169
        !          1406:  # 169                         mh = nmh;
        !          1407:        mfhi    $10
        !          1408:        .loc    2 171
        !          1409:  # 170 
        !          1410:  # 171                         nlowerunit(ma,4); nhigherunit(mb,4);
        !          1411:        addu    $13, $13, 16
        !          1412:        addu    $16, $16, -16
        !          1413:        .loc    2 173
        !          1414:  # 172 
        !          1415:  # 173                 }
        !          1416:        .loc    2 173
        !          1417:        move    $11, $17
        !          1418:        addu    $17, $17, -1
        !          1419:        bne     $11, 0, $46
        !          1420: $47:
        !          1421:        .loc    2 175
        !          1422:  # 174 
        !          1423:  # 175                 al += ml;
        !          1424:        addu    $8, $8, $9
        !          1425:        .loc    2 176
        !          1426:  # 176                 carryl += (al < ml);
        !          1427:        sltu    $24, $8, $9
        !          1428:        addu    $19, $19, $24
        !          1429:        .loc    2 177
        !          1430:  # 177                 *pp = al;
        !          1431:        sw      $8, 0($20)
        !          1432:        .loc    2 178
        !          1433:  # 178                 ah += mh;
        !          1434:        addu    $12, $12, $10
        !          1435:        .loc    2 179
        !          1436:  # 179                 carryh += (ah < mh);
        !          1437:        sltu    $25, $12, $10
        !          1438:        addu    $18, $18, $25
        !          1439:        .loc    2 180
        !          1440:  # 180                 post_higherunit(pp);
        !          1441:        addu    $20, $20, -4
        !          1442:        .loc    2 181
        !          1443:  # 181         }
        !          1444:        .loc    2 181
        !          1445:        addu    $21, $21, 1
        !          1446:        addu    $23, $23, -4
        !          1447:        addu    $30, $30, -4
        !          1448:        lw      $14, 160($sp)
        !          1449:        bne     $21, $14, $43
        !          1450: $48:
        !          1451:        .loc    2 182
        !          1452:  # 182         amax = precb-1;
        !          1453:        .loc    2 183
        !          1454:  # 183         for (i=precb; i < preca; i++) {
        !          1455:        lw      $15, 160($sp)
        !          1456:        move    $21, $15
        !          1457:        lw      $24, 164($sp)
        !          1458:        bge     $15, $24, $54
        !          1459:        negu    $22, $21
        !          1460:        mul     $22, $22, 4
        !          1461:        lw      $25, 172($sp)
        !          1462:        addu    $23, $25, $22
        !          1463:        addu    $30, $23, 4
        !          1464:        lw      $14, 176($sp)
        !          1465:        addu    $25, $14, -4
        !          1466:        sw      $25, 56($sp)
        !          1467:        mul     $14, $24, -4
        !          1468:        sw      $14, 52($sp)
        !          1469:        addu    $2, $15, -1
        !          1470:        move    $31, $2
        !          1471:        and     $25, $2, 3
        !          1472:        sw      $25, 44($sp)
        !          1473:        addu    $24, $25, -1
        !          1474:        sw      $24, 40($sp)
        !          1475: $49:
        !          1476:        .loc    2 184
        !          1477:  # 184                 ma = word_index( multiplicand,i-1);
        !          1478:        move    $13, $30
        !          1479:        .loc    2 185
        !          1480:  # 185                 mb = word_index(multiplier,1);
        !          1481:        lw      $16, 56($sp)
        !          1482:        .loc    2 186
        !          1483:  # 186                         lmul(word_v(ma,1),word_v(mb,-1),ml, mh);
        !          1484:        lw      $3, 0($23)
        !          1485:        lw      $14, 176($sp)
        !          1486:        lw      $2, 0($14)
        !          1487:        multu   $3,$2
        !          1488:        mflo    $9
        !          1489:        mfhi    $10
        !          1490:        .loc    2 187
        !          1491:  # 187                         al = ah+ carryl;
        !          1492:        addu    $4, $12, $19
        !          1493:        move    $8, $4
        !          1494:        .loc    2 188
        !          1495:  # 188                         carryl = carryh + (al < ah);
        !          1496:        sltu    $15, $4, $12
        !          1497:        addu    $19, $18, $15
        !          1498:        .loc    2 189
        !          1499:  # 189                         ah = 0;
        !          1500:        move    $12, $0
        !          1501:        .loc    2 190
        !          1502:  # 190                         carryh = 0;
        !          1503:        move    $18, $0
        !          1504:        .loc    2 191
        !          1505:  # 191                 j = amax - amin;
        !          1506:        .loc    2 192
        !          1507:  # 192                 k = j & 3;
        !          1508:        .loc    2 193
        !          1509:  # 193                 while (k--) {
        !          1510:        lw      $17, 40($sp)
        !          1511:        lw      $25, 44($sp)
        !          1512:        beq     $25, $0, $51
        !          1513: $50:
        !          1514:        .loc    2 194
        !          1515:  # 194                         lmul( *ma, *mb, nml, nmh);
        !          1516:        lw      $2, 0($13)
        !          1517:        lw      $3, 0($16)
        !          1518:        multu   $2, $3
        !          1519:        .loc    2 195
        !          1520:  # 195                         al += ml;
        !          1521:        addu    $8, $8, $9
        !          1522:        .loc    2 196
        !          1523:  # 196                         carryl += (al < ml);
        !          1524:        sltu    $24, $8, $9
        !          1525:        addu    $19, $19, $24
        !          1526:        .loc    2 197
        !          1527:  # 197                         ah += mh;
        !          1528:        addu    $12, $12, $10
        !          1529:        .loc    2 198
        !          1530:  # 198                         carryh += (ah < mh);
        !          1531:        sltu    $14, $12, $10
        !          1532:        addu    $18, $18, $14
        !          1533:        .loc    2 199
        !          1534:  # 199                         post_lowerunit(ma);
        !          1535:        addu    $13, $13, 4
        !          1536:        .loc    2 200
        !          1537:  # 200                         post_higherunit(mb);
        !          1538:        addu    $16, $16, -4
        !          1539:        .loc    2 201
        !          1540:  # 201                         ml = nml;
        !          1541:        mflo    $9
        !          1542:        .loc    2 202
        !          1543:  # 202                         mh = nmh;
        !          1544:        mfhi    $10
        !          1545:        .loc    2 203
        !          1546:  # 203                 }
        !          1547:        .loc    2 203
        !          1548:        move    $11, $17
        !          1549:        addu    $17, $17, -1
        !          1550:        bne     $11, 0, $50
        !          1551: $51:
        !          1552:        .loc    2 204
        !          1553:  # 204                 k = j >> 2;
        !          1554:        .loc    2 205
        !          1555:  # 205                 while (k--) {
        !          1556:        sra     $2, $31, 2
        !          1557:        addu    $17, $2, -1
        !          1558:        beq     $2, $0, $53
        !          1559: $52:
        !          1560:        .loc    2 206
        !          1561:  # 206                         lmul( word_v(ma,0), word_v(mb,0), nml, nmh);
        !          1562:        lw      $2, 0($13)
        !          1563:        lw      $3, 0($16)
        !          1564:        multu   $2, $3
        !          1565:        .loc    2 207
        !          1566:  # 207                         al += ml;
        !          1567:        addu    $8, $8, $9
        !          1568:        .loc    2 208
        !          1569:  # 208                         carryl += (al < ml);
        !          1570:        sltu    $15, $8, $9
        !          1571:        addu    $19, $19, $15
        !          1572:        .loc    2 209
        !          1573:  # 209                         ah += mh;
        !          1574:        addu    $12, $12, $10
        !          1575:        .loc    2 210
        !          1576:  # 210                         carryh += (ah < mh);
        !          1577:        sltu    $25, $12, $10
        !          1578:        addu    $18, $18, $25
        !          1579:        .loc    2 211
        !          1580:  # 211                         ml = nml;
        !          1581:        mflo    $9
        !          1582:        .loc    2 212
        !          1583:  # 212                         mh = nmh;
        !          1584:        mfhi    $10
        !          1585:        .loc    2 214
        !          1586:  # 213 
        !          1587:  # 214                         lmul( word_v(ma,-1), word_v(mb,1), nml, nmh);
        !          1588:        lw      $4, 4($13)
        !          1589:        lw      $5, -4($16)
        !          1590:        multu   $4, $5
        !          1591:        .loc    2 215
        !          1592:  # 215                         al += ml;
        !          1593:        addu    $8, $8, $9
        !          1594:        .loc    2 216
        !          1595:  # 216                         carryl += (al < ml);
        !          1596:        sltu    $24, $8, $9
        !          1597:        addu    $19, $19, $24
        !          1598:        .loc    2 217
        !          1599:  # 217                         ah += mh;
        !          1600:        addu    $12, $12, $10
        !          1601:        .loc    2 218
        !          1602:  # 218                         carryh += (ah < mh);
        !          1603:        sltu    $14, $12, $10
        !          1604:        addu    $18, $18, $14
        !          1605:        .loc    2 219
        !          1606:  # 219                         ml = nml;
        !          1607:        mflo    $9
        !          1608:        .loc    2 220
        !          1609:  # 220                         mh = nmh;
        !          1610:        mfhi    $10
        !          1611:        .loc    2 222
        !          1612:  # 221 
        !          1613:  # 222                         lmul( word_v(ma,-2), word_v(mb,2), nml, nmh);
        !          1614:        lw      $2, 8($13)
        !          1615:        lw      $3, -8($16)
        !          1616:        multu   $2, $3
        !          1617:        .loc    2 223
        !          1618:  # 223                         al += ml;
        !          1619:        addu    $8, $8, $9
        !          1620:        .loc    2 224
        !          1621:  # 224                         carryl += (al < ml);
        !          1622:        sltu    $15, $8, $9
        !          1623:        addu    $19, $19, $15
        !          1624:        .loc    2 225
        !          1625:  # 225                         ah += mh;
        !          1626:        addu    $12, $12, $10
        !          1627:        .loc    2 226
        !          1628:  # 226                         carryh += (ah < mh);
        !          1629:        sltu    $25, $12, $10
        !          1630:        addu    $18, $18, $25
        !          1631:        .loc    2 227
        !          1632:  # 227                         ml = nml;
        !          1633:        mflo    $9
        !          1634:        .loc    2 228
        !          1635:  # 228                         mh = nmh;
        !          1636:        mfhi    $10
        !          1637:        .loc    2 230
        !          1638:  # 229 
        !          1639:  # 230                         lmul( word_v(ma,-3), word_v(mb,3), nml, nmh);
        !          1640:        lw      $4, 12($13)
        !          1641:        lw      $5, -12($16)
        !          1642:        multu   $4, $5
        !          1643:        .loc    2 231
        !          1644:  # 231                         al += ml;
        !          1645:        addu    $8, $8, $9
        !          1646:        .loc    2 232
        !          1647:  # 232                         carryl += (al < ml);
        !          1648:        sltu    $24, $8, $9
        !          1649:        addu    $19, $19, $24
        !          1650:        .loc    2 233
        !          1651:  # 233                         ah += mh;
        !          1652:        addu    $12, $12, $10
        !          1653:        .loc    2 234
        !          1654:  # 234                         carryh += (ah < mh);
        !          1655:        sltu    $14, $12, $10
        !          1656:        addu    $18, $18, $14
        !          1657:        .loc    2 235
        !          1658:  # 235                         ml = nml;
        !          1659:        mflo    $9
        !          1660:        .loc    2 236
        !          1661:  # 236                         mh = nmh;
        !          1662:        mfhi    $10
        !          1663:        .loc    2 238
        !          1664:  # 237 
        !          1665:  # 238                         nlowerunit(ma,4);
        !          1666:        addu    $13, $13, 16
        !          1667:        .loc    2 239
        !          1668:  # 239                         nhigherunit(mb,4);
        !          1669:        addu    $16, $16, -16
        !          1670:        .loc    2 240
        !          1671:  # 240                 }
        !          1672:        .loc    2 240
        !          1673:        move    $11, $17
        !          1674:        addu    $17, $17, -1
        !          1675:        bne     $11, 0, $52
        !          1676: $53:
        !          1677:        .loc    2 242
        !          1678:  # 241 
        !          1679:  # 242                 al += ml;
        !          1680:        addu    $8, $8, $9
        !          1681:        .loc    2 243
        !          1682:  # 243                 carryl += (al < ml);
        !          1683:        sltu    $15, $8, $9
        !          1684:        addu    $19, $19, $15
        !          1685:        .loc    2 244
        !          1686:  # 244                 *pp = al;
        !          1687:        sw      $8, 0($20)
        !          1688:        .loc    2 245
        !          1689:  # 245                 ah += mh;
        !          1690:        addu    $12, $12, $10
        !          1691:        .loc    2 246
        !          1692:  # 246                 carryh += (ah < mh);
        !          1693:        sltu    $25, $12, $10
        !          1694:        addu    $18, $18, $25
        !          1695:        .loc    2 247
        !          1696:  # 247                 post_higherunit(pp);
        !          1697:        addu    $20, $20, -4
        !          1698:        .loc    2 248
        !          1699:  # 248         }
        !          1700:        .loc    2 248
        !          1701:        addu    $22, $22, -4
        !          1702:        addu    $23, $23, -4
        !          1703:        addu    $30, $30, -4
        !          1704:        lw      $24, 52($sp)
        !          1705:        blt     $24, $22, $49
        !          1706: $54:
        !          1707:        .loc    2 249
        !          1708:  # 249         amax = precb-1;
        !          1709:        .loc    2 250
        !          1710:  # 250         for (i=preca; i < preca + precb -1; i++) {
        !          1711:        lw      $14, 164($sp)
        !          1712:        move    $21, $14
        !          1713:        lw      $15, 72($sp)
        !          1714:        addu    $25, $15, -1
        !          1715:        sw      $25, 68($sp)
        !          1716:        bge     $14, $25, $60
        !          1717:        lw      $24, 160($sp)
        !          1718:        addu    $15, $24, -1
        !          1719:        sw      $15, 72($sp)
        !          1720:        negu    $2, $14
        !          1721:        lw      $25, 172($sp)
        !          1722:        mul     $24, $2, 4
        !          1723:        addu    $30, $25, $24
        !          1724:        addu    $15, $30, 8
        !          1725:        sw      $15, 56($sp)
        !          1726:        lw      $14, 176($sp)
        !          1727:        addu    $25, $2, $21
        !          1728:        negu    $24, $25
        !          1729:        mul     $15, $24, 4
        !          1730:        addu    $22, $14, $15
        !          1731:        addu    $23, $22, -8
        !          1732: $55:
        !          1733:        .loc    2 251
        !          1734:  # 251                 amin = i-preca + 1;
        !          1735:        .loc    2 252
        !          1736:  # 252                 ma = word_index(multiplicand,preca-2);
        !          1737:        lw      $13, 56($sp)
        !          1738:        .loc    2 253
        !          1739:  # 253                 mb = word_index(multiplier, - preca + 2 +i) ;
        !          1740:        move    $16, $23
        !          1741:        .loc    2 254
        !          1742:  # 254                         lmul(word_v(ma,1),word_v(mb,-1),ml, mh);
        !          1743:        lw      $2, 4($30)
        !          1744:        lw      $3, -4($22)
        !          1745:        multu   $3,$2
        !          1746:        mflo    $9
        !          1747:        mfhi    $10
        !          1748:        .loc    2 255
        !          1749:  # 255                         al = ah+ carryl;
        !          1750:        addu    $4, $12, $19
        !          1751:        move    $8, $4
        !          1752:        .loc    2 256
        !          1753:  # 256                         carryl = carryh + (al < ah);
        !          1754:        sltu    $25, $4, $12
        !          1755:        addu    $19, $18, $25
        !          1756:        .loc    2 257
        !          1757:  # 257                         ah = 0;
        !          1758:        move    $12, $0
        !          1759:        .loc    2 258
        !          1760:  # 258                         carryh = 0;
        !          1761:        move    $18, $0
        !          1762:        .loc    2 259
        !          1763:  # 259                 j = amax - amin;
        !          1764:        lw      $24, 72($sp)
        !          1765:        lw      $14, 164($sp)
        !          1766:        subu    $15, $21, $14
        !          1767:        subu    $5, $24, $15
        !          1768:        addu    $5, $5, -1
        !          1769:        move    $31, $5
        !          1770:        .loc    2 260
        !          1771:  # 260                 k = j & 3;
        !          1772:        .loc    2 261
        !          1773:  # 261                 while (k--) {
        !          1774:        and     $6, $5, 3
        !          1775:        addu    $17, $6, -1
        !          1776:        beq     $6, $0, $57
        !          1777: $56:
        !          1778:        .loc    2 262
        !          1779:  # 262                         lmul( *ma, *mb, nml, nmh);
        !          1780:        lw      $2, 0($13)
        !          1781:        lw      $3, 0($16)
        !          1782:        multu   $2, $3
        !          1783:        .loc    2 263
        !          1784:  # 263                         al += ml;
        !          1785:        addu    $8, $8, $9
        !          1786:        .loc    2 264
        !          1787:  # 264                         carryl += (al < ml);
        !          1788:        sltu    $25, $8, $9
        !          1789:        addu    $19, $19, $25
        !          1790:        .loc    2 265
        !          1791:  # 265                         ah += mh;
        !          1792:        addu    $12, $12, $10
        !          1793:        .loc    2 266
        !          1794:  # 266                         carryh += (ah < mh);
        !          1795:        sltu    $14, $12, $10
        !          1796:        addu    $18, $18, $14
        !          1797:        .loc    2 267
        !          1798:  # 267                         post_lowerunit(ma);
        !          1799:        addu    $13, $13, 4
        !          1800:        .loc    2 268
        !          1801:  # 268                         post_higherunit(mb);
        !          1802:        addu    $16, $16, -4
        !          1803:        .loc    2 269
        !          1804:  # 269                         ml = nml;
        !          1805:        mflo    $9
        !          1806:        .loc    2 270
        !          1807:  # 270                         mh = nmh;
        !          1808:        mfhi    $10
        !          1809:        .loc    2 271
        !          1810:  # 271                 }
        !          1811:        .loc    2 271
        !          1812:        move    $11, $17
        !          1813:        addu    $17, $17, -1
        !          1814:        bne     $11, 0, $56
        !          1815: $57:
        !          1816:        .loc    2 272
        !          1817:  # 272                 k = j >> 2;
        !          1818:        .loc    2 273
        !          1819:  # 273                 while (k--) {
        !          1820:        sra     $2, $31, 2
        !          1821:        addu    $17, $2, -1
        !          1822:        beq     $2, $0, $59
        !          1823: $58:
        !          1824:        .loc    2 274
        !          1825:  # 274                         lmul( word_v(ma,0), word_v(mb,0), nml, nmh);
        !          1826:        lw      $2, 0($13)
        !          1827:        lw      $3, 0($16)
        !          1828:        multu   $2, $3
        !          1829:        .loc    2 275
        !          1830:  # 275                         al += ml;
        !          1831:        addu    $8, $8, $9
        !          1832:        .loc    2 276
        !          1833:  # 276                         carryl += (al < ml);
        !          1834:        sltu    $24, $8, $9
        !          1835:        addu    $19, $19, $24
        !          1836:        .loc    2 277
        !          1837:  # 277                         ah += mh;
        !          1838:        addu    $12, $12, $10
        !          1839:        .loc    2 278
        !          1840:  # 278                         carryh += (ah < mh);
        !          1841:        sltu    $15, $12, $10
        !          1842:        addu    $18, $18, $15
        !          1843:        .loc    2 279
        !          1844:  # 279                         ml = nml;
        !          1845:        mflo    $9
        !          1846:        .loc    2 280
        !          1847:  # 280                         mh = nmh;
        !          1848:        mfhi    $10
        !          1849:        .loc    2 282
        !          1850:  # 281 
        !          1851:  # 282                         lmul( word_v(ma,-1), word_v(mb,1), nml, nmh);
        !          1852:        lw      $4, 4($13)
        !          1853:        lw      $5, -4($16)
        !          1854:        multu   $4, $5
        !          1855:        .loc    2 283
        !          1856:  # 283                         al += ml;
        !          1857:        addu    $8, $8, $9
        !          1858:        .loc    2 284
        !          1859:  # 284                         carryl += (al < ml);
        !          1860:        sltu    $25, $8, $9
        !          1861:        addu    $19, $19, $25
        !          1862:        .loc    2 285
        !          1863:  # 285                         ah += mh;
        !          1864:        addu    $12, $12, $10
        !          1865:        .loc    2 286
        !          1866:  # 286                         carryh += (ah < mh);
        !          1867:        sltu    $14, $12, $10
        !          1868:        addu    $18, $18, $14
        !          1869:        .loc    2 287
        !          1870:  # 287                         ml = nml;
        !          1871:        mflo    $9
        !          1872:        .loc    2 288
        !          1873:  # 288                         mh = nmh;
        !          1874:        mfhi    $10
        !          1875:        .loc    2 290
        !          1876:  # 289 
        !          1877:  # 290                         lmul( word_v(ma,-2), word_v(mb,2), nml, nmh);
        !          1878:        lw      $2, 8($13)
        !          1879:        lw      $3, -8($16)
        !          1880:        multu   $2, $3
        !          1881:        .loc    2 291
        !          1882:  # 291                         al += ml;
        !          1883:        addu    $8, $8, $9
        !          1884:        .loc    2 292
        !          1885:  # 292                         carryl += (al < ml);
        !          1886:        sltu    $24, $8, $9
        !          1887:        addu    $19, $19, $24
        !          1888:        .loc    2 293
        !          1889:  # 293                         ah += mh;
        !          1890:        addu    $12, $12, $10
        !          1891:        .loc    2 294
        !          1892:  # 294                         carryh += (ah < mh);
        !          1893:        sltu    $15, $12, $10
        !          1894:        addu    $18, $18, $15
        !          1895:        .loc    2 295
        !          1896:  # 295                         ml = nml;
        !          1897:        mflo    $9
        !          1898:        .loc    2 296
        !          1899:  # 296                         mh = nmh;
        !          1900:        mfhi    $10
        !          1901:        .loc    2 298
        !          1902:  # 297 
        !          1903:  # 298                         lmul( word_v(ma,-3), word_v(mb,3), nml, nmh);
        !          1904:        lw      $4, 12($13)
        !          1905:        lw      $5, -12($16)
        !          1906:        multu   $4, $5
        !          1907:        .loc    2 299
        !          1908:  # 299                         al += ml;
        !          1909:        addu    $8, $8, $9
        !          1910:        .loc    2 300
        !          1911:  # 300                         carryl += (al < ml);
        !          1912:        sltu    $25, $8, $9
        !          1913:        addu    $19, $19, $25
        !          1914:        .loc    2 301
        !          1915:  # 301                         ah += mh;
        !          1916:        addu    $12, $12, $10
        !          1917:        .loc    2 302
        !          1918:  # 302                         carryh += (ah < mh);
        !          1919:        sltu    $14, $12, $10
        !          1920:        addu    $18, $18, $14
        !          1921:        .loc    2 303
        !          1922:  # 303                         ml = nml;
        !          1923:        mflo    $9
        !          1924:        .loc    2 304
        !          1925:  # 304                         mh = nmh;
        !          1926:        mfhi    $10
        !          1927:        .loc    2 306
        !          1928:  # 305 
        !          1929:  # 306                         nlowerunit(ma,4);
        !          1930:        addu    $13, $13, 16
        !          1931:        .loc    2 307
        !          1932:  # 307                         nhigherunit(mb,4);
        !          1933:        addu    $16, $16, -16
        !          1934:        .loc    2 308
        !          1935:  # 308                 }
        !          1936:        .loc    2 308
        !          1937:        move    $11, $17
        !          1938:        addu    $17, $17, -1
        !          1939:        bne     $11, 0, $58
        !          1940: $59:
        !          1941:        .loc    2 310
        !          1942:  # 309 
        !          1943:  # 310                 al += ml;
        !          1944:        addu    $8, $8, $9
        !          1945:        .loc    2 311
        !          1946:  # 311                 carryl += (al < ml);
        !          1947:        sltu    $24, $8, $9
        !          1948:        addu    $19, $19, $24
        !          1949:        .loc    2 312
        !          1950:  # 312                 *pp = al;
        !          1951:        sw      $8, 0($20)
        !          1952:        .loc    2 313
        !          1953:  # 313                 ah += mh;
        !          1954:        addu    $12, $12, $10
        !          1955:        .loc    2 314
        !          1956:  # 314                 carryh += (ah < mh);
        !          1957:        sltu    $15, $12, $10
        !          1958:        addu    $18, $18, $15
        !          1959:        .loc    2 315
        !          1960:  # 315                 post_higherunit(pp);
        !          1961:        addu    $20, $20, -4
        !          1962:        .loc    2 316
        !          1963:  # 316         }
        !          1964:        .loc    2 316
        !          1965:        addu    $21, $21, 1
        !          1966:        addu    $22, $22, -4
        !          1967:        addu    $23, $23, -4
        !          1968:        lw      $25, 68($sp)
        !          1969:        blt     $21, $25, $55
        !          1970: $60:
        !          1971:        .loc    2 317
        !          1972:  # 317         al = ah + carryl;
        !          1973:        .loc    2 318
        !          1974:  # 318         carryh += (al < ah);
        !          1975:        .loc    2 319
        !          1976:  # 319         *pp  = al;
        !          1977:        addu    $14, $12, $19
        !          1978:        sw      $14, 0($20)
        !          1979:        .loc    2 320
        !          1980:  # 320 }
        !          1981: $61:
        !          1982:        ld      $16, 0($sp)
        !          1983:        ld      $18, 8($sp)
        !          1984:        ld      $20, 16($sp)
        !          1985:        ld      $22, 24($sp)
        !          1986:        ld      $30, 32($sp)
        !          1987:        addu    $sp, 168
        !          1988:        j       $31
        !          1989:        .end    p_dmul
        !          1990: #endif /* MIPSEB */

unix.superglobalmegacorp.com

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