1*4724848cSchristos#if !(defined (__mips_isa_rev) && (__mips_isa_rev >= 6)) 2*4724848cSchristos.set mips2 3*4724848cSchristos#endif 4*4724848cSchristos#include "mips_arch.h" 5*4724848cSchristos 6*4724848cSchristos#if defined(_MIPS_ARCH_MIPS64R6) 7*4724848cSchristos# define ddivu(rs,rt) 8*4724848cSchristos# define mfqt(rd,rs,rt) ddivu rd,rs,rt 9*4724848cSchristos# define mfrm(rd,rs,rt) dmodu rd,rs,rt 10*4724848cSchristos#elif defined(_MIPS_ARCH_MIPS32R6) 11*4724848cSchristos# define divu(rs,rt) 12*4724848cSchristos# define mfqt(rd,rs,rt) divu rd,rs,rt 13*4724848cSchristos# define mfrm(rd,rs,rt) modu rd,rs,rt 14*4724848cSchristos#else 15*4724848cSchristos# define divu(rs,rt) divu $0,rs,rt 16*4724848cSchristos# define mfqt(rd,rs,rt) mflo rd 17*4724848cSchristos# define mfrm(rd,rs,rt) mfhi rd 18*4724848cSchristos#endif 19*4724848cSchristos 20*4724848cSchristos.rdata 21*4724848cSchristos.asciiz "mips3.s, Version 1.2" 22*4724848cSchristos.asciiz "MIPS II/III/IV ISA artwork by Andy Polyakov <appro@fy.chalmers.se>" 23*4724848cSchristos 24*4724848cSchristos.text 25*4724848cSchristos.set noat 26*4724848cSchristos 27*4724848cSchristos.align 5 28*4724848cSchristos.globl bn_mul_add_words 29*4724848cSchristos.ent bn_mul_add_words 30*4724848cSchristosbn_mul_add_words: 31*4724848cSchristos .set noreorder 32*4724848cSchristos bgtz $6,bn_mul_add_words_internal 33*4724848cSchristos move $2,$0 34*4724848cSchristos jr $31 35*4724848cSchristos move $4,$2 36*4724848cSchristos.end bn_mul_add_words 37*4724848cSchristos 38*4724848cSchristos.align 5 39*4724848cSchristos.ent bn_mul_add_words_internal 40*4724848cSchristosbn_mul_add_words_internal: 41*4724848cSchristos .set reorder 42*4724848cSchristos li $3,-4 43*4724848cSchristos and $8,$6,$3 44*4724848cSchristos beqz $8,.L_bn_mul_add_words_tail 45*4724848cSchristos 46*4724848cSchristos.L_bn_mul_add_words_loop: 47*4724848cSchristos lw $12,0($5) 48*4724848cSchristos multu ($12,$7) 49*4724848cSchristos lw $13,0($4) 50*4724848cSchristos lw $14,4($5) 51*4724848cSchristos lw $15,4($4) 52*4724848cSchristos lw $8,2*4($5) 53*4724848cSchristos lw $9,2*4($4) 54*4724848cSchristos addu $13,$2 55*4724848cSchristos sltu $2,$13,$2 # All manuals say it "compares 32-bit 56*4724848cSchristos # values", but it seems to work fine 57*4724848cSchristos # even on 64-bit registers. 58*4724848cSchristos mflo ($1,$12,$7) 59*4724848cSchristos mfhi ($12,$12,$7) 60*4724848cSchristos addu $13,$1 61*4724848cSchristos addu $2,$12 62*4724848cSchristos multu ($14,$7) 63*4724848cSchristos sltu $1,$13,$1 64*4724848cSchristos sw $13,0($4) 65*4724848cSchristos addu $2,$1 66*4724848cSchristos 67*4724848cSchristos lw $10,3*4($5) 68*4724848cSchristos lw $11,3*4($4) 69*4724848cSchristos addu $15,$2 70*4724848cSchristos sltu $2,$15,$2 71*4724848cSchristos mflo ($1,$14,$7) 72*4724848cSchristos mfhi ($14,$14,$7) 73*4724848cSchristos addu $15,$1 74*4724848cSchristos addu $2,$14 75*4724848cSchristos multu ($8,$7) 76*4724848cSchristos sltu $1,$15,$1 77*4724848cSchristos sw $15,4($4) 78*4724848cSchristos addu $2,$1 79*4724848cSchristos 80*4724848cSchristos subu $6,4 81*4724848cSchristos addu $4,4*4 82*4724848cSchristos addu $5,4*4 83*4724848cSchristos addu $9,$2 84*4724848cSchristos sltu $2,$9,$2 85*4724848cSchristos mflo ($1,$8,$7) 86*4724848cSchristos mfhi ($8,$8,$7) 87*4724848cSchristos addu $9,$1 88*4724848cSchristos addu $2,$8 89*4724848cSchristos multu ($10,$7) 90*4724848cSchristos sltu $1,$9,$1 91*4724848cSchristos sw $9,-2*4($4) 92*4724848cSchristos addu $2,$1 93*4724848cSchristos 94*4724848cSchristos 95*4724848cSchristos and $8,$6,$3 96*4724848cSchristos addu $11,$2 97*4724848cSchristos sltu $2,$11,$2 98*4724848cSchristos mflo ($1,$10,$7) 99*4724848cSchristos mfhi ($10,$10,$7) 100*4724848cSchristos addu $11,$1 101*4724848cSchristos addu $2,$10 102*4724848cSchristos sltu $1,$11,$1 103*4724848cSchristos sw $11,-4($4) 104*4724848cSchristos .set noreorder 105*4724848cSchristos bgtz $8,.L_bn_mul_add_words_loop 106*4724848cSchristos addu $2,$1 107*4724848cSchristos 108*4724848cSchristos beqz $6,.L_bn_mul_add_words_return 109*4724848cSchristos nop 110*4724848cSchristos 111*4724848cSchristos.L_bn_mul_add_words_tail: 112*4724848cSchristos .set reorder 113*4724848cSchristos lw $12,0($5) 114*4724848cSchristos multu ($12,$7) 115*4724848cSchristos lw $13,0($4) 116*4724848cSchristos subu $6,1 117*4724848cSchristos addu $13,$2 118*4724848cSchristos sltu $2,$13,$2 119*4724848cSchristos mflo ($1,$12,$7) 120*4724848cSchristos mfhi ($12,$12,$7) 121*4724848cSchristos addu $13,$1 122*4724848cSchristos addu $2,$12 123*4724848cSchristos sltu $1,$13,$1 124*4724848cSchristos sw $13,0($4) 125*4724848cSchristos addu $2,$1 126*4724848cSchristos beqz $6,.L_bn_mul_add_words_return 127*4724848cSchristos 128*4724848cSchristos lw $12,4($5) 129*4724848cSchristos multu ($12,$7) 130*4724848cSchristos lw $13,4($4) 131*4724848cSchristos subu $6,1 132*4724848cSchristos addu $13,$2 133*4724848cSchristos sltu $2,$13,$2 134*4724848cSchristos mflo ($1,$12,$7) 135*4724848cSchristos mfhi ($12,$12,$7) 136*4724848cSchristos addu $13,$1 137*4724848cSchristos addu $2,$12 138*4724848cSchristos sltu $1,$13,$1 139*4724848cSchristos sw $13,4($4) 140*4724848cSchristos addu $2,$1 141*4724848cSchristos beqz $6,.L_bn_mul_add_words_return 142*4724848cSchristos 143*4724848cSchristos lw $12,2*4($5) 144*4724848cSchristos multu ($12,$7) 145*4724848cSchristos lw $13,2*4($4) 146*4724848cSchristos addu $13,$2 147*4724848cSchristos sltu $2,$13,$2 148*4724848cSchristos mflo ($1,$12,$7) 149*4724848cSchristos mfhi ($12,$12,$7) 150*4724848cSchristos addu $13,$1 151*4724848cSchristos addu $2,$12 152*4724848cSchristos sltu $1,$13,$1 153*4724848cSchristos sw $13,2*4($4) 154*4724848cSchristos addu $2,$1 155*4724848cSchristos 156*4724848cSchristos.L_bn_mul_add_words_return: 157*4724848cSchristos .set noreorder 158*4724848cSchristos jr $31 159*4724848cSchristos move $4,$2 160*4724848cSchristos.end bn_mul_add_words_internal 161*4724848cSchristos 162*4724848cSchristos.align 5 163*4724848cSchristos.globl bn_mul_words 164*4724848cSchristos.ent bn_mul_words 165*4724848cSchristosbn_mul_words: 166*4724848cSchristos .set noreorder 167*4724848cSchristos bgtz $6,bn_mul_words_internal 168*4724848cSchristos move $2,$0 169*4724848cSchristos jr $31 170*4724848cSchristos move $4,$2 171*4724848cSchristos.end bn_mul_words 172*4724848cSchristos 173*4724848cSchristos.align 5 174*4724848cSchristos.ent bn_mul_words_internal 175*4724848cSchristosbn_mul_words_internal: 176*4724848cSchristos .set reorder 177*4724848cSchristos li $3,-4 178*4724848cSchristos and $8,$6,$3 179*4724848cSchristos beqz $8,.L_bn_mul_words_tail 180*4724848cSchristos 181*4724848cSchristos.L_bn_mul_words_loop: 182*4724848cSchristos lw $12,0($5) 183*4724848cSchristos multu ($12,$7) 184*4724848cSchristos lw $14,4($5) 185*4724848cSchristos lw $8,2*4($5) 186*4724848cSchristos lw $10,3*4($5) 187*4724848cSchristos mflo ($1,$12,$7) 188*4724848cSchristos mfhi ($12,$12,$7) 189*4724848cSchristos addu $2,$1 190*4724848cSchristos sltu $13,$2,$1 191*4724848cSchristos multu ($14,$7) 192*4724848cSchristos sw $2,0($4) 193*4724848cSchristos addu $2,$13,$12 194*4724848cSchristos 195*4724848cSchristos subu $6,4 196*4724848cSchristos addu $4,4*4 197*4724848cSchristos addu $5,4*4 198*4724848cSchristos mflo ($1,$14,$7) 199*4724848cSchristos mfhi ($14,$14,$7) 200*4724848cSchristos addu $2,$1 201*4724848cSchristos sltu $15,$2,$1 202*4724848cSchristos multu ($8,$7) 203*4724848cSchristos sw $2,-3*4($4) 204*4724848cSchristos addu $2,$15,$14 205*4724848cSchristos 206*4724848cSchristos mflo ($1,$8,$7) 207*4724848cSchristos mfhi ($8,$8,$7) 208*4724848cSchristos addu $2,$1 209*4724848cSchristos sltu $9,$2,$1 210*4724848cSchristos multu ($10,$7) 211*4724848cSchristos sw $2,-2*4($4) 212*4724848cSchristos addu $2,$9,$8 213*4724848cSchristos 214*4724848cSchristos and $8,$6,$3 215*4724848cSchristos mflo ($1,$10,$7) 216*4724848cSchristos mfhi ($10,$10,$7) 217*4724848cSchristos addu $2,$1 218*4724848cSchristos sltu $11,$2,$1 219*4724848cSchristos sw $2,-4($4) 220*4724848cSchristos .set noreorder 221*4724848cSchristos bgtz $8,.L_bn_mul_words_loop 222*4724848cSchristos addu $2,$11,$10 223*4724848cSchristos 224*4724848cSchristos beqz $6,.L_bn_mul_words_return 225*4724848cSchristos nop 226*4724848cSchristos 227*4724848cSchristos.L_bn_mul_words_tail: 228*4724848cSchristos .set reorder 229*4724848cSchristos lw $12,0($5) 230*4724848cSchristos multu ($12,$7) 231*4724848cSchristos subu $6,1 232*4724848cSchristos mflo ($1,$12,$7) 233*4724848cSchristos mfhi ($12,$12,$7) 234*4724848cSchristos addu $2,$1 235*4724848cSchristos sltu $13,$2,$1 236*4724848cSchristos sw $2,0($4) 237*4724848cSchristos addu $2,$13,$12 238*4724848cSchristos beqz $6,.L_bn_mul_words_return 239*4724848cSchristos 240*4724848cSchristos lw $12,4($5) 241*4724848cSchristos multu ($12,$7) 242*4724848cSchristos subu $6,1 243*4724848cSchristos mflo ($1,$12,$7) 244*4724848cSchristos mfhi ($12,$12,$7) 245*4724848cSchristos addu $2,$1 246*4724848cSchristos sltu $13,$2,$1 247*4724848cSchristos sw $2,4($4) 248*4724848cSchristos addu $2,$13,$12 249*4724848cSchristos beqz $6,.L_bn_mul_words_return 250*4724848cSchristos 251*4724848cSchristos lw $12,2*4($5) 252*4724848cSchristos multu ($12,$7) 253*4724848cSchristos mflo ($1,$12,$7) 254*4724848cSchristos mfhi ($12,$12,$7) 255*4724848cSchristos addu $2,$1 256*4724848cSchristos sltu $13,$2,$1 257*4724848cSchristos sw $2,2*4($4) 258*4724848cSchristos addu $2,$13,$12 259*4724848cSchristos 260*4724848cSchristos.L_bn_mul_words_return: 261*4724848cSchristos .set noreorder 262*4724848cSchristos jr $31 263*4724848cSchristos move $4,$2 264*4724848cSchristos.end bn_mul_words_internal 265*4724848cSchristos 266*4724848cSchristos.align 5 267*4724848cSchristos.globl bn_sqr_words 268*4724848cSchristos.ent bn_sqr_words 269*4724848cSchristosbn_sqr_words: 270*4724848cSchristos .set noreorder 271*4724848cSchristos bgtz $6,bn_sqr_words_internal 272*4724848cSchristos move $2,$0 273*4724848cSchristos jr $31 274*4724848cSchristos move $4,$2 275*4724848cSchristos.end bn_sqr_words 276*4724848cSchristos 277*4724848cSchristos.align 5 278*4724848cSchristos.ent bn_sqr_words_internal 279*4724848cSchristosbn_sqr_words_internal: 280*4724848cSchristos .set reorder 281*4724848cSchristos li $3,-4 282*4724848cSchristos and $8,$6,$3 283*4724848cSchristos beqz $8,.L_bn_sqr_words_tail 284*4724848cSchristos 285*4724848cSchristos.L_bn_sqr_words_loop: 286*4724848cSchristos lw $12,0($5) 287*4724848cSchristos multu ($12,$12) 288*4724848cSchristos lw $14,4($5) 289*4724848cSchristos lw $8,2*4($5) 290*4724848cSchristos lw $10,3*4($5) 291*4724848cSchristos mflo ($13,$12,$12) 292*4724848cSchristos mfhi ($12,$12,$12) 293*4724848cSchristos sw $13,0($4) 294*4724848cSchristos sw $12,4($4) 295*4724848cSchristos 296*4724848cSchristos multu ($14,$14) 297*4724848cSchristos subu $6,4 298*4724848cSchristos addu $4,8*4 299*4724848cSchristos addu $5,4*4 300*4724848cSchristos mflo ($15,$14,$14) 301*4724848cSchristos mfhi ($14,$14,$14) 302*4724848cSchristos sw $15,-6*4($4) 303*4724848cSchristos sw $14,-5*4($4) 304*4724848cSchristos 305*4724848cSchristos multu ($8,$8) 306*4724848cSchristos mflo ($9,$8,$8) 307*4724848cSchristos mfhi ($8,$8,$8) 308*4724848cSchristos sw $9,-4*4($4) 309*4724848cSchristos sw $8,-3*4($4) 310*4724848cSchristos 311*4724848cSchristos 312*4724848cSchristos multu ($10,$10) 313*4724848cSchristos and $8,$6,$3 314*4724848cSchristos mflo ($11,$10,$10) 315*4724848cSchristos mfhi ($10,$10,$10) 316*4724848cSchristos sw $11,-2*4($4) 317*4724848cSchristos 318*4724848cSchristos .set noreorder 319*4724848cSchristos bgtz $8,.L_bn_sqr_words_loop 320*4724848cSchristos sw $10,-4($4) 321*4724848cSchristos 322*4724848cSchristos beqz $6,.L_bn_sqr_words_return 323*4724848cSchristos nop 324*4724848cSchristos 325*4724848cSchristos.L_bn_sqr_words_tail: 326*4724848cSchristos .set reorder 327*4724848cSchristos lw $12,0($5) 328*4724848cSchristos multu ($12,$12) 329*4724848cSchristos subu $6,1 330*4724848cSchristos mflo ($13,$12,$12) 331*4724848cSchristos mfhi ($12,$12,$12) 332*4724848cSchristos sw $13,0($4) 333*4724848cSchristos sw $12,4($4) 334*4724848cSchristos beqz $6,.L_bn_sqr_words_return 335*4724848cSchristos 336*4724848cSchristos lw $12,4($5) 337*4724848cSchristos multu ($12,$12) 338*4724848cSchristos subu $6,1 339*4724848cSchristos mflo ($13,$12,$12) 340*4724848cSchristos mfhi ($12,$12,$12) 341*4724848cSchristos sw $13,2*4($4) 342*4724848cSchristos sw $12,3*4($4) 343*4724848cSchristos beqz $6,.L_bn_sqr_words_return 344*4724848cSchristos 345*4724848cSchristos lw $12,2*4($5) 346*4724848cSchristos multu ($12,$12) 347*4724848cSchristos mflo ($13,$12,$12) 348*4724848cSchristos mfhi ($12,$12,$12) 349*4724848cSchristos sw $13,4*4($4) 350*4724848cSchristos sw $12,5*4($4) 351*4724848cSchristos 352*4724848cSchristos.L_bn_sqr_words_return: 353*4724848cSchristos .set noreorder 354*4724848cSchristos jr $31 355*4724848cSchristos move $4,$2 356*4724848cSchristos 357*4724848cSchristos.end bn_sqr_words_internal 358*4724848cSchristos 359*4724848cSchristos.align 5 360*4724848cSchristos.globl bn_add_words 361*4724848cSchristos.ent bn_add_words 362*4724848cSchristosbn_add_words: 363*4724848cSchristos .set noreorder 364*4724848cSchristos bgtz $7,bn_add_words_internal 365*4724848cSchristos move $2,$0 366*4724848cSchristos jr $31 367*4724848cSchristos move $4,$2 368*4724848cSchristos.end bn_add_words 369*4724848cSchristos 370*4724848cSchristos.align 5 371*4724848cSchristos.ent bn_add_words_internal 372*4724848cSchristosbn_add_words_internal: 373*4724848cSchristos .set reorder 374*4724848cSchristos li $3,-4 375*4724848cSchristos and $1,$7,$3 376*4724848cSchristos beqz $1,.L_bn_add_words_tail 377*4724848cSchristos 378*4724848cSchristos.L_bn_add_words_loop: 379*4724848cSchristos lw $12,0($5) 380*4724848cSchristos lw $8,0($6) 381*4724848cSchristos subu $7,4 382*4724848cSchristos lw $13,4($5) 383*4724848cSchristos and $1,$7,$3 384*4724848cSchristos lw $14,2*4($5) 385*4724848cSchristos addu $6,4*4 386*4724848cSchristos lw $15,3*4($5) 387*4724848cSchristos addu $4,4*4 388*4724848cSchristos lw $9,-3*4($6) 389*4724848cSchristos addu $5,4*4 390*4724848cSchristos lw $10,-2*4($6) 391*4724848cSchristos lw $11,-4($6) 392*4724848cSchristos addu $8,$12 393*4724848cSchristos sltu $24,$8,$12 394*4724848cSchristos addu $12,$8,$2 395*4724848cSchristos sltu $2,$12,$8 396*4724848cSchristos sw $12,-4*4($4) 397*4724848cSchristos addu $2,$24 398*4724848cSchristos 399*4724848cSchristos addu $9,$13 400*4724848cSchristos sltu $25,$9,$13 401*4724848cSchristos addu $13,$9,$2 402*4724848cSchristos sltu $2,$13,$9 403*4724848cSchristos sw $13,-3*4($4) 404*4724848cSchristos addu $2,$25 405*4724848cSchristos 406*4724848cSchristos addu $10,$14 407*4724848cSchristos sltu $24,$10,$14 408*4724848cSchristos addu $14,$10,$2 409*4724848cSchristos sltu $2,$14,$10 410*4724848cSchristos sw $14,-2*4($4) 411*4724848cSchristos addu $2,$24 412*4724848cSchristos 413*4724848cSchristos addu $11,$15 414*4724848cSchristos sltu $25,$11,$15 415*4724848cSchristos addu $15,$11,$2 416*4724848cSchristos sltu $2,$15,$11 417*4724848cSchristos sw $15,-4($4) 418*4724848cSchristos 419*4724848cSchristos .set noreorder 420*4724848cSchristos bgtz $1,.L_bn_add_words_loop 421*4724848cSchristos addu $2,$25 422*4724848cSchristos 423*4724848cSchristos beqz $7,.L_bn_add_words_return 424*4724848cSchristos nop 425*4724848cSchristos 426*4724848cSchristos.L_bn_add_words_tail: 427*4724848cSchristos .set reorder 428*4724848cSchristos lw $12,0($5) 429*4724848cSchristos lw $8,0($6) 430*4724848cSchristos addu $8,$12 431*4724848cSchristos subu $7,1 432*4724848cSchristos sltu $24,$8,$12 433*4724848cSchristos addu $12,$8,$2 434*4724848cSchristos sltu $2,$12,$8 435*4724848cSchristos sw $12,0($4) 436*4724848cSchristos addu $2,$24 437*4724848cSchristos beqz $7,.L_bn_add_words_return 438*4724848cSchristos 439*4724848cSchristos lw $13,4($5) 440*4724848cSchristos lw $9,4($6) 441*4724848cSchristos addu $9,$13 442*4724848cSchristos subu $7,1 443*4724848cSchristos sltu $25,$9,$13 444*4724848cSchristos addu $13,$9,$2 445*4724848cSchristos sltu $2,$13,$9 446*4724848cSchristos sw $13,4($4) 447*4724848cSchristos addu $2,$25 448*4724848cSchristos beqz $7,.L_bn_add_words_return 449*4724848cSchristos 450*4724848cSchristos lw $14,2*4($5) 451*4724848cSchristos lw $10,2*4($6) 452*4724848cSchristos addu $10,$14 453*4724848cSchristos sltu $24,$10,$14 454*4724848cSchristos addu $14,$10,$2 455*4724848cSchristos sltu $2,$14,$10 456*4724848cSchristos sw $14,2*4($4) 457*4724848cSchristos addu $2,$24 458*4724848cSchristos 459*4724848cSchristos.L_bn_add_words_return: 460*4724848cSchristos .set noreorder 461*4724848cSchristos jr $31 462*4724848cSchristos move $4,$2 463*4724848cSchristos 464*4724848cSchristos.end bn_add_words_internal 465*4724848cSchristos 466*4724848cSchristos.align 5 467*4724848cSchristos.globl bn_sub_words 468*4724848cSchristos.ent bn_sub_words 469*4724848cSchristosbn_sub_words: 470*4724848cSchristos .set noreorder 471*4724848cSchristos bgtz $7,bn_sub_words_internal 472*4724848cSchristos move $2,$0 473*4724848cSchristos jr $31 474*4724848cSchristos move $4,$0 475*4724848cSchristos.end bn_sub_words 476*4724848cSchristos 477*4724848cSchristos.align 5 478*4724848cSchristos.ent bn_sub_words_internal 479*4724848cSchristosbn_sub_words_internal: 480*4724848cSchristos .set reorder 481*4724848cSchristos li $3,-4 482*4724848cSchristos and $1,$7,$3 483*4724848cSchristos beqz $1,.L_bn_sub_words_tail 484*4724848cSchristos 485*4724848cSchristos.L_bn_sub_words_loop: 486*4724848cSchristos lw $12,0($5) 487*4724848cSchristos lw $8,0($6) 488*4724848cSchristos subu $7,4 489*4724848cSchristos lw $13,4($5) 490*4724848cSchristos and $1,$7,$3 491*4724848cSchristos lw $14,2*4($5) 492*4724848cSchristos addu $6,4*4 493*4724848cSchristos lw $15,3*4($5) 494*4724848cSchristos addu $4,4*4 495*4724848cSchristos lw $9,-3*4($6) 496*4724848cSchristos addu $5,4*4 497*4724848cSchristos lw $10,-2*4($6) 498*4724848cSchristos lw $11,-4($6) 499*4724848cSchristos sltu $24,$12,$8 500*4724848cSchristos subu $8,$12,$8 501*4724848cSchristos subu $12,$8,$2 502*4724848cSchristos sgtu $2,$12,$8 503*4724848cSchristos sw $12,-4*4($4) 504*4724848cSchristos addu $2,$24 505*4724848cSchristos 506*4724848cSchristos sltu $25,$13,$9 507*4724848cSchristos subu $9,$13,$9 508*4724848cSchristos subu $13,$9,$2 509*4724848cSchristos sgtu $2,$13,$9 510*4724848cSchristos sw $13,-3*4($4) 511*4724848cSchristos addu $2,$25 512*4724848cSchristos 513*4724848cSchristos 514*4724848cSchristos sltu $24,$14,$10 515*4724848cSchristos subu $10,$14,$10 516*4724848cSchristos subu $14,$10,$2 517*4724848cSchristos sgtu $2,$14,$10 518*4724848cSchristos sw $14,-2*4($4) 519*4724848cSchristos addu $2,$24 520*4724848cSchristos 521*4724848cSchristos sltu $25,$15,$11 522*4724848cSchristos subu $11,$15,$11 523*4724848cSchristos subu $15,$11,$2 524*4724848cSchristos sgtu $2,$15,$11 525*4724848cSchristos sw $15,-4($4) 526*4724848cSchristos 527*4724848cSchristos .set noreorder 528*4724848cSchristos bgtz $1,.L_bn_sub_words_loop 529*4724848cSchristos addu $2,$25 530*4724848cSchristos 531*4724848cSchristos beqz $7,.L_bn_sub_words_return 532*4724848cSchristos nop 533*4724848cSchristos 534*4724848cSchristos.L_bn_sub_words_tail: 535*4724848cSchristos .set reorder 536*4724848cSchristos lw $12,0($5) 537*4724848cSchristos lw $8,0($6) 538*4724848cSchristos subu $7,1 539*4724848cSchristos sltu $24,$12,$8 540*4724848cSchristos subu $8,$12,$8 541*4724848cSchristos subu $12,$8,$2 542*4724848cSchristos sgtu $2,$12,$8 543*4724848cSchristos sw $12,0($4) 544*4724848cSchristos addu $2,$24 545*4724848cSchristos beqz $7,.L_bn_sub_words_return 546*4724848cSchristos 547*4724848cSchristos lw $13,4($5) 548*4724848cSchristos subu $7,1 549*4724848cSchristos lw $9,4($6) 550*4724848cSchristos sltu $25,$13,$9 551*4724848cSchristos subu $9,$13,$9 552*4724848cSchristos subu $13,$9,$2 553*4724848cSchristos sgtu $2,$13,$9 554*4724848cSchristos sw $13,4($4) 555*4724848cSchristos addu $2,$25 556*4724848cSchristos beqz $7,.L_bn_sub_words_return 557*4724848cSchristos 558*4724848cSchristos lw $14,2*4($5) 559*4724848cSchristos lw $10,2*4($6) 560*4724848cSchristos sltu $24,$14,$10 561*4724848cSchristos subu $10,$14,$10 562*4724848cSchristos subu $14,$10,$2 563*4724848cSchristos sgtu $2,$14,$10 564*4724848cSchristos sw $14,2*4($4) 565*4724848cSchristos addu $2,$24 566*4724848cSchristos 567*4724848cSchristos.L_bn_sub_words_return: 568*4724848cSchristos .set noreorder 569*4724848cSchristos jr $31 570*4724848cSchristos move $4,$2 571*4724848cSchristos.end bn_sub_words_internal 572*4724848cSchristos 573*4724848cSchristos#if 0 574*4724848cSchristos/* 575*4724848cSchristos * The bn_div_3_words entry point is re-used for constant-time interface. 576*4724848cSchristos * Implementation is retained as historical reference. 577*4724848cSchristos */ 578*4724848cSchristos.align 5 579*4724848cSchristos.globl bn_div_3_words 580*4724848cSchristos.ent bn_div_3_words 581*4724848cSchristosbn_div_3_words: 582*4724848cSchristos .set noreorder 583*4724848cSchristos move $7,$4 # we know that bn_div_words does not 584*4724848cSchristos # touch $7, $10, $11 and preserves $6 585*4724848cSchristos # so that we can save two arguments 586*4724848cSchristos # and return address in registers 587*4724848cSchristos # instead of stack:-) 588*4724848cSchristos 589*4724848cSchristos lw $4,($7) 590*4724848cSchristos move $10,$5 591*4724848cSchristos bne $4,$6,bn_div_3_words_internal 592*4724848cSchristos lw $5,-4($7) 593*4724848cSchristos li $2,-1 594*4724848cSchristos jr $31 595*4724848cSchristos move $4,$2 596*4724848cSchristos.end bn_div_3_words 597*4724848cSchristos 598*4724848cSchristos.align 5 599*4724848cSchristos.ent bn_div_3_words_internal 600*4724848cSchristosbn_div_3_words_internal: 601*4724848cSchristos .set reorder 602*4724848cSchristos move $11,$31 603*4724848cSchristos bal bn_div_words_internal 604*4724848cSchristos move $31,$11 605*4724848cSchristos multu ($10,$2) 606*4724848cSchristos lw $14,-2*4($7) 607*4724848cSchristos move $8,$0 608*4724848cSchristos mfhi ($13,$10,$2) 609*4724848cSchristos mflo ($12,$10,$2) 610*4724848cSchristos sltu $24,$13,$5 611*4724848cSchristos.L_bn_div_3_words_inner_loop: 612*4724848cSchristos bnez $24,.L_bn_div_3_words_inner_loop_done 613*4724848cSchristos sgeu $1,$14,$12 614*4724848cSchristos seq $25,$13,$5 615*4724848cSchristos and $1,$25 616*4724848cSchristos sltu $15,$12,$10 617*4724848cSchristos addu $5,$6 618*4724848cSchristos subu $13,$15 619*4724848cSchristos subu $12,$10 620*4724848cSchristos sltu $24,$13,$5 621*4724848cSchristos sltu $8,$5,$6 622*4724848cSchristos or $24,$8 623*4724848cSchristos .set noreorder 624*4724848cSchristos beqz $1,.L_bn_div_3_words_inner_loop 625*4724848cSchristos subu $2,1 626*4724848cSchristos addu $2,1 627*4724848cSchristos .set reorder 628*4724848cSchristos.L_bn_div_3_words_inner_loop_done: 629*4724848cSchristos .set noreorder 630*4724848cSchristos jr $31 631*4724848cSchristos move $4,$2 632*4724848cSchristos.end bn_div_3_words_internal 633*4724848cSchristos#endif 634*4724848cSchristos 635*4724848cSchristos.align 5 636*4724848cSchristos.globl bn_div_words 637*4724848cSchristos.ent bn_div_words 638*4724848cSchristosbn_div_words: 639*4724848cSchristos .set noreorder 640*4724848cSchristos bnez $6,bn_div_words_internal 641*4724848cSchristos li $2,-1 # I would rather signal div-by-zero 642*4724848cSchristos # which can be done with 'break 7' 643*4724848cSchristos jr $31 644*4724848cSchristos move $4,$2 645*4724848cSchristos.end bn_div_words 646*4724848cSchristos 647*4724848cSchristos.align 5 648*4724848cSchristos.ent bn_div_words_internal 649*4724848cSchristosbn_div_words_internal: 650*4724848cSchristos move $3,$0 651*4724848cSchristos bltz $6,.L_bn_div_words_body 652*4724848cSchristos move $25,$3 653*4724848cSchristos sll $6,1 654*4724848cSchristos bgtz $6,.-4 655*4724848cSchristos addu $25,1 656*4724848cSchristos 657*4724848cSchristos .set reorder 658*4724848cSchristos negu $13,$25 659*4724848cSchristos li $14,-1 660*4724848cSchristos sll $14,$13 661*4724848cSchristos and $14,$4 662*4724848cSchristos srl $1,$5,$13 663*4724848cSchristos .set noreorder 664*4724848cSchristos beqz $14,.+12 665*4724848cSchristos nop 666*4724848cSchristos break 6 # signal overflow 667*4724848cSchristos .set reorder 668*4724848cSchristos sll $4,$25 669*4724848cSchristos sll $5,$25 670*4724848cSchristos or $4,$1 671*4724848cSchristos.L_bn_div_words_body: 672*4724848cSchristos srl $3,$6,4*4 # bits 673*4724848cSchristos sgeu $1,$4,$6 674*4724848cSchristos .set noreorder 675*4724848cSchristos beqz $1,.+12 676*4724848cSchristos nop 677*4724848cSchristos subu $4,$6 678*4724848cSchristos .set reorder 679*4724848cSchristos 680*4724848cSchristos li $8,-1 681*4724848cSchristos srl $9,$4,4*4 # bits 682*4724848cSchristos srl $8,4*4 # q=0xffffffff 683*4724848cSchristos beq $3,$9,.L_bn_div_words_skip_div1 684*4724848cSchristos divu ($4,$3) 685*4724848cSchristos mfqt ($8,$4,$3) 686*4724848cSchristos.L_bn_div_words_skip_div1: 687*4724848cSchristos multu ($6,$8) 688*4724848cSchristos sll $15,$4,4*4 # bits 689*4724848cSchristos srl $1,$5,4*4 # bits 690*4724848cSchristos or $15,$1 691*4724848cSchristos mflo ($12,$6,$8) 692*4724848cSchristos mfhi ($13,$6,$8) 693*4724848cSchristos.L_bn_div_words_inner_loop1: 694*4724848cSchristos sltu $14,$15,$12 695*4724848cSchristos seq $24,$9,$13 696*4724848cSchristos sltu $1,$9,$13 697*4724848cSchristos and $14,$24 698*4724848cSchristos sltu $2,$12,$6 699*4724848cSchristos or $1,$14 700*4724848cSchristos .set noreorder 701*4724848cSchristos beqz $1,.L_bn_div_words_inner_loop1_done 702*4724848cSchristos subu $13,$2 703*4724848cSchristos subu $12,$6 704*4724848cSchristos b .L_bn_div_words_inner_loop1 705*4724848cSchristos subu $8,1 706*4724848cSchristos .set reorder 707*4724848cSchristos.L_bn_div_words_inner_loop1_done: 708*4724848cSchristos 709*4724848cSchristos sll $5,4*4 # bits 710*4724848cSchristos subu $4,$15,$12 711*4724848cSchristos sll $2,$8,4*4 # bits 712*4724848cSchristos 713*4724848cSchristos li $8,-1 714*4724848cSchristos srl $9,$4,4*4 # bits 715*4724848cSchristos srl $8,4*4 # q=0xffffffff 716*4724848cSchristos beq $3,$9,.L_bn_div_words_skip_div2 717*4724848cSchristos divu ($4,$3) 718*4724848cSchristos mfqt ($8,$4,$3) 719*4724848cSchristos.L_bn_div_words_skip_div2: 720*4724848cSchristos multu ($6,$8) 721*4724848cSchristos sll $15,$4,4*4 # bits 722*4724848cSchristos srl $1,$5,4*4 # bits 723*4724848cSchristos or $15,$1 724*4724848cSchristos mflo ($12,$6,$8) 725*4724848cSchristos mfhi ($13,$6,$8) 726*4724848cSchristos.L_bn_div_words_inner_loop2: 727*4724848cSchristos sltu $14,$15,$12 728*4724848cSchristos seq $24,$9,$13 729*4724848cSchristos sltu $1,$9,$13 730*4724848cSchristos and $14,$24 731*4724848cSchristos sltu $3,$12,$6 732*4724848cSchristos or $1,$14 733*4724848cSchristos .set noreorder 734*4724848cSchristos beqz $1,.L_bn_div_words_inner_loop2_done 735*4724848cSchristos subu $13,$3 736*4724848cSchristos subu $12,$6 737*4724848cSchristos b .L_bn_div_words_inner_loop2 738*4724848cSchristos subu $8,1 739*4724848cSchristos .set reorder 740*4724848cSchristos.L_bn_div_words_inner_loop2_done: 741*4724848cSchristos 742*4724848cSchristos subu $4,$15,$12 743*4724848cSchristos or $2,$8 744*4724848cSchristos srl $3,$4,$25 # $3 contains remainder if anybody wants it 745*4724848cSchristos srl $6,$25 # restore $6 746*4724848cSchristos 747*4724848cSchristos .set noreorder 748*4724848cSchristos move $5,$3 749*4724848cSchristos jr $31 750*4724848cSchristos move $4,$2 751*4724848cSchristos.end bn_div_words_internal 752*4724848cSchristos 753*4724848cSchristos.align 5 754*4724848cSchristos.globl bn_mul_comba8 755*4724848cSchristos.ent bn_mul_comba8 756*4724848cSchristosbn_mul_comba8: 757*4724848cSchristos .set noreorder 758*4724848cSchristos .frame $29,6*4,$31 759*4724848cSchristos .mask 0x003f0000,-4 760*4724848cSchristos subu $29,6*4 761*4724848cSchristos sw $21,5*4($29) 762*4724848cSchristos sw $20,4*4($29) 763*4724848cSchristos sw $19,3*4($29) 764*4724848cSchristos sw $18,2*4($29) 765*4724848cSchristos sw $17,1*4($29) 766*4724848cSchristos sw $16,0*4($29) 767*4724848cSchristos 768*4724848cSchristos .set reorder 769*4724848cSchristos lw $12,0($5) # If compiled with -mips3 option on 770*4724848cSchristos # R5000 box assembler barks on this 771*4724848cSchristos # 1ine with "should not have mult/div 772*4724848cSchristos # as last instruction in bb (R10K 773*4724848cSchristos # bug)" warning. If anybody out there 774*4724848cSchristos # has a clue about how to circumvent 775*4724848cSchristos # this do send me a note. 776*4724848cSchristos # <appro@fy.chalmers.se> 777*4724848cSchristos 778*4724848cSchristos lw $8,0($6) 779*4724848cSchristos lw $13,4($5) 780*4724848cSchristos lw $14,2*4($5) 781*4724848cSchristos multu ($12,$8) # mul_add_c(a[0],b[0],c1,c2,c3); 782*4724848cSchristos lw $15,3*4($5) 783*4724848cSchristos lw $9,4($6) 784*4724848cSchristos lw $10,2*4($6) 785*4724848cSchristos lw $11,3*4($6) 786*4724848cSchristos mflo ($2,$12,$8) 787*4724848cSchristos mfhi ($3,$12,$8) 788*4724848cSchristos 789*4724848cSchristos lw $16,4*4($5) 790*4724848cSchristos lw $18,5*4($5) 791*4724848cSchristos multu ($12,$9) # mul_add_c(a[0],b[1],c2,c3,c1); 792*4724848cSchristos lw $20,6*4($5) 793*4724848cSchristos lw $5,7*4($5) 794*4724848cSchristos lw $17,4*4($6) 795*4724848cSchristos lw $19,5*4($6) 796*4724848cSchristos mflo ($24,$12,$9) 797*4724848cSchristos mfhi ($25,$12,$9) 798*4724848cSchristos addu $3,$24 799*4724848cSchristos sltu $1,$3,$24 800*4724848cSchristos multu ($13,$8) # mul_add_c(a[1],b[0],c2,c3,c1); 801*4724848cSchristos addu $7,$25,$1 802*4724848cSchristos lw $21,6*4($6) 803*4724848cSchristos lw $6,7*4($6) 804*4724848cSchristos sw $2,0($4) # r[0]=c1; 805*4724848cSchristos mflo ($24,$13,$8) 806*4724848cSchristos mfhi ($25,$13,$8) 807*4724848cSchristos addu $3,$24 808*4724848cSchristos sltu $1,$3,$24 809*4724848cSchristos multu ($14,$8) # mul_add_c(a[2],b[0],c3,c1,c2); 810*4724848cSchristos addu $25,$1 811*4724848cSchristos addu $7,$25 812*4724848cSchristos sltu $2,$7,$25 813*4724848cSchristos sw $3,4($4) # r[1]=c2; 814*4724848cSchristos 815*4724848cSchristos mflo ($24,$14,$8) 816*4724848cSchristos mfhi ($25,$14,$8) 817*4724848cSchristos addu $7,$24 818*4724848cSchristos sltu $1,$7,$24 819*4724848cSchristos multu ($13,$9) # mul_add_c(a[1],b[1],c3,c1,c2); 820*4724848cSchristos addu $25,$1 821*4724848cSchristos addu $2,$25 822*4724848cSchristos mflo ($24,$13,$9) 823*4724848cSchristos mfhi ($25,$13,$9) 824*4724848cSchristos addu $7,$24 825*4724848cSchristos sltu $1,$7,$24 826*4724848cSchristos multu ($12,$10) # mul_add_c(a[0],b[2],c3,c1,c2); 827*4724848cSchristos addu $25,$1 828*4724848cSchristos addu $2,$25 829*4724848cSchristos sltu $3,$2,$25 830*4724848cSchristos mflo ($24,$12,$10) 831*4724848cSchristos mfhi ($25,$12,$10) 832*4724848cSchristos addu $7,$24 833*4724848cSchristos sltu $1,$7,$24 834*4724848cSchristos multu ($12,$11) # mul_add_c(a[0],b[3],c1,c2,c3); 835*4724848cSchristos addu $25,$1 836*4724848cSchristos addu $2,$25 837*4724848cSchristos sltu $1,$2,$25 838*4724848cSchristos addu $3,$1 839*4724848cSchristos sw $7,2*4($4) # r[2]=c3; 840*4724848cSchristos 841*4724848cSchristos mflo ($24,$12,$11) 842*4724848cSchristos mfhi ($25,$12,$11) 843*4724848cSchristos addu $2,$24 844*4724848cSchristos sltu $1,$2,$24 845*4724848cSchristos multu ($13,$10) # mul_add_c(a[1],b[2],c1,c2,c3); 846*4724848cSchristos addu $25,$1 847*4724848cSchristos addu $3,$25 848*4724848cSchristos sltu $7,$3,$25 849*4724848cSchristos mflo ($24,$13,$10) 850*4724848cSchristos mfhi ($25,$13,$10) 851*4724848cSchristos addu $2,$24 852*4724848cSchristos sltu $1,$2,$24 853*4724848cSchristos multu ($14,$9) # mul_add_c(a[2],b[1],c1,c2,c3); 854*4724848cSchristos addu $25,$1 855*4724848cSchristos addu $3,$25 856*4724848cSchristos sltu $1,$3,$25 857*4724848cSchristos addu $7,$1 858*4724848cSchristos mflo ($24,$14,$9) 859*4724848cSchristos mfhi ($25,$14,$9) 860*4724848cSchristos addu $2,$24 861*4724848cSchristos sltu $1,$2,$24 862*4724848cSchristos multu ($15,$8) # mul_add_c(a[3],b[0],c1,c2,c3); 863*4724848cSchristos addu $25,$1 864*4724848cSchristos addu $3,$25 865*4724848cSchristos sltu $1,$3,$25 866*4724848cSchristos addu $7,$1 867*4724848cSchristos mflo ($24,$15,$8) 868*4724848cSchristos mfhi ($25,$15,$8) 869*4724848cSchristos addu $2,$24 870*4724848cSchristos sltu $1,$2,$24 871*4724848cSchristos multu ($16,$8) # mul_add_c(a[4],b[0],c2,c3,c1); 872*4724848cSchristos addu $25,$1 873*4724848cSchristos addu $3,$25 874*4724848cSchristos sltu $1,$3,$25 875*4724848cSchristos addu $7,$1 876*4724848cSchristos sw $2,3*4($4) # r[3]=c1; 877*4724848cSchristos 878*4724848cSchristos mflo ($24,$16,$8) 879*4724848cSchristos mfhi ($25,$16,$8) 880*4724848cSchristos addu $3,$24 881*4724848cSchristos sltu $1,$3,$24 882*4724848cSchristos multu ($15,$9) # mul_add_c(a[3],b[1],c2,c3,c1); 883*4724848cSchristos addu $25,$1 884*4724848cSchristos addu $7,$25 885*4724848cSchristos sltu $2,$7,$25 886*4724848cSchristos mflo ($24,$15,$9) 887*4724848cSchristos mfhi ($25,$15,$9) 888*4724848cSchristos addu $3,$24 889*4724848cSchristos sltu $1,$3,$24 890*4724848cSchristos multu ($14,$10) # mul_add_c(a[2],b[2],c2,c3,c1); 891*4724848cSchristos addu $25,$1 892*4724848cSchristos addu $7,$25 893*4724848cSchristos sltu $1,$7,$25 894*4724848cSchristos addu $2,$1 895*4724848cSchristos mflo ($24,$14,$10) 896*4724848cSchristos mfhi ($25,$14,$10) 897*4724848cSchristos addu $3,$24 898*4724848cSchristos sltu $1,$3,$24 899*4724848cSchristos multu ($13,$11) # mul_add_c(a[1],b[3],c2,c3,c1); 900*4724848cSchristos addu $25,$1 901*4724848cSchristos addu $7,$25 902*4724848cSchristos sltu $1,$7,$25 903*4724848cSchristos addu $2,$1 904*4724848cSchristos mflo ($24,$13,$11) 905*4724848cSchristos mfhi ($25,$13,$11) 906*4724848cSchristos addu $3,$24 907*4724848cSchristos sltu $1,$3,$24 908*4724848cSchristos multu ($12,$17) # mul_add_c(a[0],b[4],c2,c3,c1); 909*4724848cSchristos addu $25,$1 910*4724848cSchristos addu $7,$25 911*4724848cSchristos sltu $1,$7,$25 912*4724848cSchristos addu $2,$1 913*4724848cSchristos mflo ($24,$12,$17) 914*4724848cSchristos mfhi ($25,$12,$17) 915*4724848cSchristos addu $3,$24 916*4724848cSchristos sltu $1,$3,$24 917*4724848cSchristos multu ($12,$19) # mul_add_c(a[0],b[5],c3,c1,c2); 918*4724848cSchristos addu $25,$1 919*4724848cSchristos addu $7,$25 920*4724848cSchristos sltu $1,$7,$25 921*4724848cSchristos addu $2,$1 922*4724848cSchristos sw $3,4*4($4) # r[4]=c2; 923*4724848cSchristos 924*4724848cSchristos mflo ($24,$12,$19) 925*4724848cSchristos mfhi ($25,$12,$19) 926*4724848cSchristos addu $7,$24 927*4724848cSchristos sltu $1,$7,$24 928*4724848cSchristos multu ($13,$17) # mul_add_c(a[1],b[4],c3,c1,c2); 929*4724848cSchristos addu $25,$1 930*4724848cSchristos addu $2,$25 931*4724848cSchristos sltu $3,$2,$25 932*4724848cSchristos mflo ($24,$13,$17) 933*4724848cSchristos mfhi ($25,$13,$17) 934*4724848cSchristos addu $7,$24 935*4724848cSchristos sltu $1,$7,$24 936*4724848cSchristos multu ($14,$11) # mul_add_c(a[2],b[3],c3,c1,c2); 937*4724848cSchristos addu $25,$1 938*4724848cSchristos addu $2,$25 939*4724848cSchristos sltu $1,$2,$25 940*4724848cSchristos addu $3,$1 941*4724848cSchristos mflo ($24,$14,$11) 942*4724848cSchristos mfhi ($25,$14,$11) 943*4724848cSchristos addu $7,$24 944*4724848cSchristos sltu $1,$7,$24 945*4724848cSchristos multu ($15,$10) # mul_add_c(a[3],b[2],c3,c1,c2); 946*4724848cSchristos addu $25,$1 947*4724848cSchristos addu $2,$25 948*4724848cSchristos sltu $1,$2,$25 949*4724848cSchristos addu $3,$1 950*4724848cSchristos mflo ($24,$15,$10) 951*4724848cSchristos mfhi ($25,$15,$10) 952*4724848cSchristos addu $7,$24 953*4724848cSchristos sltu $1,$7,$24 954*4724848cSchristos multu ($16,$9) # mul_add_c(a[4],b[1],c3,c1,c2); 955*4724848cSchristos addu $25,$1 956*4724848cSchristos addu $2,$25 957*4724848cSchristos sltu $1,$2,$25 958*4724848cSchristos addu $3,$1 959*4724848cSchristos mflo ($24,$16,$9) 960*4724848cSchristos mfhi ($25,$16,$9) 961*4724848cSchristos addu $7,$24 962*4724848cSchristos sltu $1,$7,$24 963*4724848cSchristos multu ($18,$8) # mul_add_c(a[5],b[0],c3,c1,c2); 964*4724848cSchristos addu $25,$1 965*4724848cSchristos addu $2,$25 966*4724848cSchristos sltu $1,$2,$25 967*4724848cSchristos addu $3,$1 968*4724848cSchristos mflo ($24,$18,$8) 969*4724848cSchristos mfhi ($25,$18,$8) 970*4724848cSchristos addu $7,$24 971*4724848cSchristos sltu $1,$7,$24 972*4724848cSchristos multu ($20,$8) # mul_add_c(a[6],b[0],c1,c2,c3); 973*4724848cSchristos addu $25,$1 974*4724848cSchristos addu $2,$25 975*4724848cSchristos sltu $1,$2,$25 976*4724848cSchristos addu $3,$1 977*4724848cSchristos sw $7,5*4($4) # r[5]=c3; 978*4724848cSchristos 979*4724848cSchristos mflo ($24,$20,$8) 980*4724848cSchristos mfhi ($25,$20,$8) 981*4724848cSchristos addu $2,$24 982*4724848cSchristos sltu $1,$2,$24 983*4724848cSchristos multu ($18,$9) # mul_add_c(a[5],b[1],c1,c2,c3); 984*4724848cSchristos addu $25,$1 985*4724848cSchristos addu $3,$25 986*4724848cSchristos sltu $7,$3,$25 987*4724848cSchristos mflo ($24,$18,$9) 988*4724848cSchristos mfhi ($25,$18,$9) 989*4724848cSchristos addu $2,$24 990*4724848cSchristos sltu $1,$2,$24 991*4724848cSchristos multu ($16,$10) # mul_add_c(a[4],b[2],c1,c2,c3); 992*4724848cSchristos addu $25,$1 993*4724848cSchristos addu $3,$25 994*4724848cSchristos sltu $1,$3,$25 995*4724848cSchristos addu $7,$1 996*4724848cSchristos mflo ($24,$16,$10) 997*4724848cSchristos mfhi ($25,$16,$10) 998*4724848cSchristos addu $2,$24 999*4724848cSchristos sltu $1,$2,$24 1000*4724848cSchristos multu ($15,$11) # mul_add_c(a[3],b[3],c1,c2,c3); 1001*4724848cSchristos addu $25,$1 1002*4724848cSchristos addu $3,$25 1003*4724848cSchristos sltu $1,$3,$25 1004*4724848cSchristos addu $7,$1 1005*4724848cSchristos mflo ($24,$15,$11) 1006*4724848cSchristos mfhi ($25,$15,$11) 1007*4724848cSchristos addu $2,$24 1008*4724848cSchristos sltu $1,$2,$24 1009*4724848cSchristos multu ($14,$17) # mul_add_c(a[2],b[4],c1,c2,c3); 1010*4724848cSchristos addu $25,$1 1011*4724848cSchristos addu $3,$25 1012*4724848cSchristos sltu $1,$3,$25 1013*4724848cSchristos addu $7,$1 1014*4724848cSchristos mflo ($24,$14,$17) 1015*4724848cSchristos mfhi ($25,$14,$17) 1016*4724848cSchristos addu $2,$24 1017*4724848cSchristos sltu $1,$2,$24 1018*4724848cSchristos multu ($13,$19) # mul_add_c(a[1],b[5],c1,c2,c3); 1019*4724848cSchristos addu $25,$1 1020*4724848cSchristos addu $3,$25 1021*4724848cSchristos sltu $1,$3,$25 1022*4724848cSchristos addu $7,$1 1023*4724848cSchristos mflo ($24,$13,$19) 1024*4724848cSchristos mfhi ($25,$13,$19) 1025*4724848cSchristos addu $2,$24 1026*4724848cSchristos sltu $1,$2,$24 1027*4724848cSchristos multu ($12,$21) # mul_add_c(a[0],b[6],c1,c2,c3); 1028*4724848cSchristos addu $25,$1 1029*4724848cSchristos addu $3,$25 1030*4724848cSchristos sltu $1,$3,$25 1031*4724848cSchristos addu $7,$1 1032*4724848cSchristos mflo ($24,$12,$21) 1033*4724848cSchristos mfhi ($25,$12,$21) 1034*4724848cSchristos addu $2,$24 1035*4724848cSchristos sltu $1,$2,$24 1036*4724848cSchristos multu ($12,$6) # mul_add_c(a[0],b[7],c2,c3,c1); 1037*4724848cSchristos addu $25,$1 1038*4724848cSchristos addu $3,$25 1039*4724848cSchristos sltu $1,$3,$25 1040*4724848cSchristos addu $7,$1 1041*4724848cSchristos sw $2,6*4($4) # r[6]=c1; 1042*4724848cSchristos 1043*4724848cSchristos mflo ($24,$12,$6) 1044*4724848cSchristos mfhi ($25,$12,$6) 1045*4724848cSchristos addu $3,$24 1046*4724848cSchristos sltu $1,$3,$24 1047*4724848cSchristos multu ($13,$21) # mul_add_c(a[1],b[6],c2,c3,c1); 1048*4724848cSchristos addu $25,$1 1049*4724848cSchristos addu $7,$25 1050*4724848cSchristos sltu $2,$7,$25 1051*4724848cSchristos mflo ($24,$13,$21) 1052*4724848cSchristos mfhi ($25,$13,$21) 1053*4724848cSchristos addu $3,$24 1054*4724848cSchristos sltu $1,$3,$24 1055*4724848cSchristos multu ($14,$19) # mul_add_c(a[2],b[5],c2,c3,c1); 1056*4724848cSchristos addu $25,$1 1057*4724848cSchristos addu $7,$25 1058*4724848cSchristos sltu $1,$7,$25 1059*4724848cSchristos addu $2,$1 1060*4724848cSchristos mflo ($24,$14,$19) 1061*4724848cSchristos mfhi ($25,$14,$19) 1062*4724848cSchristos addu $3,$24 1063*4724848cSchristos sltu $1,$3,$24 1064*4724848cSchristos multu ($15,$17) # mul_add_c(a[3],b[4],c2,c3,c1); 1065*4724848cSchristos addu $25,$1 1066*4724848cSchristos addu $7,$25 1067*4724848cSchristos sltu $1,$7,$25 1068*4724848cSchristos addu $2,$1 1069*4724848cSchristos mflo ($24,$15,$17) 1070*4724848cSchristos mfhi ($25,$15,$17) 1071*4724848cSchristos addu $3,$24 1072*4724848cSchristos sltu $1,$3,$24 1073*4724848cSchristos multu ($16,$11) # mul_add_c(a[4],b[3],c2,c3,c1); 1074*4724848cSchristos addu $25,$1 1075*4724848cSchristos addu $7,$25 1076*4724848cSchristos sltu $1,$7,$25 1077*4724848cSchristos addu $2,$1 1078*4724848cSchristos mflo ($24,$16,$11) 1079*4724848cSchristos mfhi ($25,$16,$11) 1080*4724848cSchristos addu $3,$24 1081*4724848cSchristos sltu $1,$3,$24 1082*4724848cSchristos multu ($18,$10) # mul_add_c(a[5],b[2],c2,c3,c1); 1083*4724848cSchristos addu $25,$1 1084*4724848cSchristos addu $7,$25 1085*4724848cSchristos sltu $1,$7,$25 1086*4724848cSchristos addu $2,$1 1087*4724848cSchristos mflo ($24,$18,$10) 1088*4724848cSchristos mfhi ($25,$18,$10) 1089*4724848cSchristos addu $3,$24 1090*4724848cSchristos sltu $1,$3,$24 1091*4724848cSchristos multu ($20,$9) # mul_add_c(a[6],b[1],c2,c3,c1); 1092*4724848cSchristos addu $25,$1 1093*4724848cSchristos addu $7,$25 1094*4724848cSchristos sltu $1,$7,$25 1095*4724848cSchristos addu $2,$1 1096*4724848cSchristos mflo ($24,$20,$9) 1097*4724848cSchristos mfhi ($25,$20,$9) 1098*4724848cSchristos addu $3,$24 1099*4724848cSchristos sltu $1,$3,$24 1100*4724848cSchristos multu ($5,$8) # mul_add_c(a[7],b[0],c2,c3,c1); 1101*4724848cSchristos addu $25,$1 1102*4724848cSchristos addu $7,$25 1103*4724848cSchristos sltu $1,$7,$25 1104*4724848cSchristos addu $2,$1 1105*4724848cSchristos mflo ($24,$5,$8) 1106*4724848cSchristos mfhi ($25,$5,$8) 1107*4724848cSchristos addu $3,$24 1108*4724848cSchristos sltu $1,$3,$24 1109*4724848cSchristos multu ($5,$9) # mul_add_c(a[7],b[1],c3,c1,c2); 1110*4724848cSchristos addu $25,$1 1111*4724848cSchristos addu $7,$25 1112*4724848cSchristos sltu $1,$7,$25 1113*4724848cSchristos addu $2,$1 1114*4724848cSchristos sw $3,7*4($4) # r[7]=c2; 1115*4724848cSchristos 1116*4724848cSchristos mflo ($24,$5,$9) 1117*4724848cSchristos mfhi ($25,$5,$9) 1118*4724848cSchristos addu $7,$24 1119*4724848cSchristos sltu $1,$7,$24 1120*4724848cSchristos multu ($20,$10) # mul_add_c(a[6],b[2],c3,c1,c2); 1121*4724848cSchristos addu $25,$1 1122*4724848cSchristos addu $2,$25 1123*4724848cSchristos sltu $3,$2,$25 1124*4724848cSchristos mflo ($24,$20,$10) 1125*4724848cSchristos mfhi ($25,$20,$10) 1126*4724848cSchristos addu $7,$24 1127*4724848cSchristos sltu $1,$7,$24 1128*4724848cSchristos multu ($18,$11) # mul_add_c(a[5],b[3],c3,c1,c2); 1129*4724848cSchristos addu $25,$1 1130*4724848cSchristos addu $2,$25 1131*4724848cSchristos sltu $1,$2,$25 1132*4724848cSchristos addu $3,$1 1133*4724848cSchristos mflo ($24,$18,$11) 1134*4724848cSchristos mfhi ($25,$18,$11) 1135*4724848cSchristos addu $7,$24 1136*4724848cSchristos sltu $1,$7,$24 1137*4724848cSchristos multu ($16,$17) # mul_add_c(a[4],b[4],c3,c1,c2); 1138*4724848cSchristos addu $25,$1 1139*4724848cSchristos addu $2,$25 1140*4724848cSchristos sltu $1,$2,$25 1141*4724848cSchristos addu $3,$1 1142*4724848cSchristos mflo ($24,$16,$17) 1143*4724848cSchristos mfhi ($25,$16,$17) 1144*4724848cSchristos addu $7,$24 1145*4724848cSchristos sltu $1,$7,$24 1146*4724848cSchristos multu ($15,$19) # mul_add_c(a[3],b[5],c3,c1,c2); 1147*4724848cSchristos addu $25,$1 1148*4724848cSchristos addu $2,$25 1149*4724848cSchristos sltu $1,$2,$25 1150*4724848cSchristos addu $3,$1 1151*4724848cSchristos mflo ($24,$15,$19) 1152*4724848cSchristos mfhi ($25,$15,$19) 1153*4724848cSchristos addu $7,$24 1154*4724848cSchristos sltu $1,$7,$24 1155*4724848cSchristos multu ($14,$21) # mul_add_c(a[2],b[6],c3,c1,c2); 1156*4724848cSchristos addu $25,$1 1157*4724848cSchristos addu $2,$25 1158*4724848cSchristos sltu $1,$2,$25 1159*4724848cSchristos addu $3,$1 1160*4724848cSchristos mflo ($24,$14,$21) 1161*4724848cSchristos mfhi ($25,$14,$21) 1162*4724848cSchristos addu $7,$24 1163*4724848cSchristos sltu $1,$7,$24 1164*4724848cSchristos multu ($13,$6) # mul_add_c(a[1],b[7],c3,c1,c2); 1165*4724848cSchristos addu $25,$1 1166*4724848cSchristos addu $2,$25 1167*4724848cSchristos sltu $1,$2,$25 1168*4724848cSchristos addu $3,$1 1169*4724848cSchristos mflo ($24,$13,$6) 1170*4724848cSchristos mfhi ($25,$13,$6) 1171*4724848cSchristos addu $7,$24 1172*4724848cSchristos sltu $1,$7,$24 1173*4724848cSchristos multu ($14,$6) # mul_add_c(a[2],b[7],c1,c2,c3); 1174*4724848cSchristos addu $25,$1 1175*4724848cSchristos addu $2,$25 1176*4724848cSchristos sltu $1,$2,$25 1177*4724848cSchristos addu $3,$1 1178*4724848cSchristos sw $7,8*4($4) # r[8]=c3; 1179*4724848cSchristos 1180*4724848cSchristos mflo ($24,$14,$6) 1181*4724848cSchristos mfhi ($25,$14,$6) 1182*4724848cSchristos addu $2,$24 1183*4724848cSchristos sltu $1,$2,$24 1184*4724848cSchristos multu ($15,$21) # mul_add_c(a[3],b[6],c1,c2,c3); 1185*4724848cSchristos addu $25,$1 1186*4724848cSchristos addu $3,$25 1187*4724848cSchristos sltu $7,$3,$25 1188*4724848cSchristos mflo ($24,$15,$21) 1189*4724848cSchristos mfhi ($25,$15,$21) 1190*4724848cSchristos addu $2,$24 1191*4724848cSchristos sltu $1,$2,$24 1192*4724848cSchristos multu ($16,$19) # mul_add_c(a[4],b[5],c1,c2,c3); 1193*4724848cSchristos addu $25,$1 1194*4724848cSchristos addu $3,$25 1195*4724848cSchristos sltu $1,$3,$25 1196*4724848cSchristos addu $7,$1 1197*4724848cSchristos mflo ($24,$16,$19) 1198*4724848cSchristos mfhi ($25,$16,$19) 1199*4724848cSchristos addu $2,$24 1200*4724848cSchristos sltu $1,$2,$24 1201*4724848cSchristos multu ($18,$17) # mul_add_c(a[5],b[4],c1,c2,c3); 1202*4724848cSchristos addu $25,$1 1203*4724848cSchristos addu $3,$25 1204*4724848cSchristos sltu $1,$3,$25 1205*4724848cSchristos addu $7,$1 1206*4724848cSchristos mflo ($24,$18,$17) 1207*4724848cSchristos mfhi ($25,$18,$17) 1208*4724848cSchristos addu $2,$24 1209*4724848cSchristos sltu $1,$2,$24 1210*4724848cSchristos multu ($20,$11) # mul_add_c(a[6],b[3],c1,c2,c3); 1211*4724848cSchristos addu $25,$1 1212*4724848cSchristos addu $3,$25 1213*4724848cSchristos sltu $1,$3,$25 1214*4724848cSchristos addu $7,$1 1215*4724848cSchristos mflo ($24,$20,$11) 1216*4724848cSchristos mfhi ($25,$20,$11) 1217*4724848cSchristos addu $2,$24 1218*4724848cSchristos sltu $1,$2,$24 1219*4724848cSchristos multu ($5,$10) # mul_add_c(a[7],b[2],c1,c2,c3); 1220*4724848cSchristos addu $25,$1 1221*4724848cSchristos addu $3,$25 1222*4724848cSchristos sltu $1,$3,$25 1223*4724848cSchristos addu $7,$1 1224*4724848cSchristos mflo ($24,$5,$10) 1225*4724848cSchristos mfhi ($25,$5,$10) 1226*4724848cSchristos addu $2,$24 1227*4724848cSchristos sltu $1,$2,$24 1228*4724848cSchristos multu ($5,$11) # mul_add_c(a[7],b[3],c2,c3,c1); 1229*4724848cSchristos addu $25,$1 1230*4724848cSchristos addu $3,$25 1231*4724848cSchristos sltu $1,$3,$25 1232*4724848cSchristos addu $7,$1 1233*4724848cSchristos sw $2,9*4($4) # r[9]=c1; 1234*4724848cSchristos 1235*4724848cSchristos mflo ($24,$5,$11) 1236*4724848cSchristos mfhi ($25,$5,$11) 1237*4724848cSchristos addu $3,$24 1238*4724848cSchristos sltu $1,$3,$24 1239*4724848cSchristos multu ($20,$17) # mul_add_c(a[6],b[4],c2,c3,c1); 1240*4724848cSchristos addu $25,$1 1241*4724848cSchristos addu $7,$25 1242*4724848cSchristos sltu $2,$7,$25 1243*4724848cSchristos mflo ($24,$20,$17) 1244*4724848cSchristos mfhi ($25,$20,$17) 1245*4724848cSchristos addu $3,$24 1246*4724848cSchristos sltu $1,$3,$24 1247*4724848cSchristos multu ($18,$19) # mul_add_c(a[5],b[5],c2,c3,c1); 1248*4724848cSchristos addu $25,$1 1249*4724848cSchristos addu $7,$25 1250*4724848cSchristos sltu $1,$7,$25 1251*4724848cSchristos addu $2,$1 1252*4724848cSchristos mflo ($24,$18,$19) 1253*4724848cSchristos mfhi ($25,$18,$19) 1254*4724848cSchristos addu $3,$24 1255*4724848cSchristos sltu $1,$3,$24 1256*4724848cSchristos multu ($16,$21) # mul_add_c(a[4],b[6],c2,c3,c1); 1257*4724848cSchristos addu $25,$1 1258*4724848cSchristos addu $7,$25 1259*4724848cSchristos sltu $1,$7,$25 1260*4724848cSchristos addu $2,$1 1261*4724848cSchristos mflo ($24,$16,$21) 1262*4724848cSchristos mfhi ($25,$16,$21) 1263*4724848cSchristos addu $3,$24 1264*4724848cSchristos sltu $1,$3,$24 1265*4724848cSchristos multu ($15,$6) # mul_add_c(a[3],b[7],c2,c3,c1); 1266*4724848cSchristos addu $25,$1 1267*4724848cSchristos addu $7,$25 1268*4724848cSchristos sltu $1,$7,$25 1269*4724848cSchristos addu $2,$1 1270*4724848cSchristos mflo ($24,$15,$6) 1271*4724848cSchristos mfhi ($25,$15,$6) 1272*4724848cSchristos addu $3,$24 1273*4724848cSchristos sltu $1,$3,$24 1274*4724848cSchristos multu ($16,$6) # mul_add_c(a[4],b[7],c3,c1,c2); 1275*4724848cSchristos addu $25,$1 1276*4724848cSchristos addu $7,$25 1277*4724848cSchristos sltu $1,$7,$25 1278*4724848cSchristos addu $2,$1 1279*4724848cSchristos sw $3,10*4($4) # r[10]=c2; 1280*4724848cSchristos 1281*4724848cSchristos mflo ($24,$16,$6) 1282*4724848cSchristos mfhi ($25,$16,$6) 1283*4724848cSchristos addu $7,$24 1284*4724848cSchristos sltu $1,$7,$24 1285*4724848cSchristos multu ($18,$21) # mul_add_c(a[5],b[6],c3,c1,c2); 1286*4724848cSchristos addu $25,$1 1287*4724848cSchristos addu $2,$25 1288*4724848cSchristos sltu $3,$2,$25 1289*4724848cSchristos mflo ($24,$18,$21) 1290*4724848cSchristos mfhi ($25,$18,$21) 1291*4724848cSchristos addu $7,$24 1292*4724848cSchristos sltu $1,$7,$24 1293*4724848cSchristos multu ($20,$19) # mul_add_c(a[6],b[5],c3,c1,c2); 1294*4724848cSchristos addu $25,$1 1295*4724848cSchristos addu $2,$25 1296*4724848cSchristos sltu $1,$2,$25 1297*4724848cSchristos addu $3,$1 1298*4724848cSchristos mflo ($24,$20,$19) 1299*4724848cSchristos mfhi ($25,$20,$19) 1300*4724848cSchristos addu $7,$24 1301*4724848cSchristos sltu $1,$7,$24 1302*4724848cSchristos multu ($5,$17) # mul_add_c(a[7],b[4],c3,c1,c2); 1303*4724848cSchristos addu $25,$1 1304*4724848cSchristos addu $2,$25 1305*4724848cSchristos sltu $1,$2,$25 1306*4724848cSchristos addu $3,$1 1307*4724848cSchristos mflo ($24,$5,$17) 1308*4724848cSchristos mfhi ($25,$5,$17) 1309*4724848cSchristos addu $7,$24 1310*4724848cSchristos sltu $1,$7,$24 1311*4724848cSchristos multu ($5,$19) # mul_add_c(a[7],b[5],c1,c2,c3); 1312*4724848cSchristos addu $25,$1 1313*4724848cSchristos addu $2,$25 1314*4724848cSchristos sltu $1,$2,$25 1315*4724848cSchristos addu $3,$1 1316*4724848cSchristos sw $7,11*4($4) # r[11]=c3; 1317*4724848cSchristos 1318*4724848cSchristos mflo ($24,$5,$19) 1319*4724848cSchristos mfhi ($25,$5,$19) 1320*4724848cSchristos addu $2,$24 1321*4724848cSchristos sltu $1,$2,$24 1322*4724848cSchristos multu ($20,$21) # mul_add_c(a[6],b[6],c1,c2,c3); 1323*4724848cSchristos addu $25,$1 1324*4724848cSchristos addu $3,$25 1325*4724848cSchristos sltu $7,$3,$25 1326*4724848cSchristos mflo ($24,$20,$21) 1327*4724848cSchristos mfhi ($25,$20,$21) 1328*4724848cSchristos addu $2,$24 1329*4724848cSchristos sltu $1,$2,$24 1330*4724848cSchristos multu ($18,$6) # mul_add_c(a[5],b[7],c1,c2,c3); 1331*4724848cSchristos addu $25,$1 1332*4724848cSchristos addu $3,$25 1333*4724848cSchristos sltu $1,$3,$25 1334*4724848cSchristos addu $7,$1 1335*4724848cSchristos mflo ($24,$18,$6) 1336*4724848cSchristos mfhi ($25,$18,$6) 1337*4724848cSchristos addu $2,$24 1338*4724848cSchristos sltu $1,$2,$24 1339*4724848cSchristos multu ($20,$6) # mul_add_c(a[6],b[7],c2,c3,c1); 1340*4724848cSchristos addu $25,$1 1341*4724848cSchristos addu $3,$25 1342*4724848cSchristos sltu $1,$3,$25 1343*4724848cSchristos addu $7,$1 1344*4724848cSchristos sw $2,12*4($4) # r[12]=c1; 1345*4724848cSchristos 1346*4724848cSchristos mflo ($24,$20,$6) 1347*4724848cSchristos mfhi ($25,$20,$6) 1348*4724848cSchristos addu $3,$24 1349*4724848cSchristos sltu $1,$3,$24 1350*4724848cSchristos multu ($5,$21) # mul_add_c(a[7],b[6],c2,c3,c1); 1351*4724848cSchristos addu $25,$1 1352*4724848cSchristos addu $7,$25 1353*4724848cSchristos sltu $2,$7,$25 1354*4724848cSchristos mflo ($24,$5,$21) 1355*4724848cSchristos mfhi ($25,$5,$21) 1356*4724848cSchristos addu $3,$24 1357*4724848cSchristos sltu $1,$3,$24 1358*4724848cSchristos multu ($5,$6) # mul_add_c(a[7],b[7],c3,c1,c2); 1359*4724848cSchristos addu $25,$1 1360*4724848cSchristos addu $7,$25 1361*4724848cSchristos sltu $1,$7,$25 1362*4724848cSchristos addu $2,$1 1363*4724848cSchristos sw $3,13*4($4) # r[13]=c2; 1364*4724848cSchristos 1365*4724848cSchristos mflo ($24,$5,$6) 1366*4724848cSchristos mfhi ($25,$5,$6) 1367*4724848cSchristos addu $7,$24 1368*4724848cSchristos sltu $1,$7,$24 1369*4724848cSchristos addu $25,$1 1370*4724848cSchristos addu $2,$25 1371*4724848cSchristos sw $7,14*4($4) # r[14]=c3; 1372*4724848cSchristos sw $2,15*4($4) # r[15]=c1; 1373*4724848cSchristos 1374*4724848cSchristos .set noreorder 1375*4724848cSchristos lw $21,5*4($29) 1376*4724848cSchristos lw $20,4*4($29) 1377*4724848cSchristos lw $19,3*4($29) 1378*4724848cSchristos lw $18,2*4($29) 1379*4724848cSchristos lw $17,1*4($29) 1380*4724848cSchristos lw $16,0*4($29) 1381*4724848cSchristos jr $31 1382*4724848cSchristos addu $29,6*4 1383*4724848cSchristos.end bn_mul_comba8 1384*4724848cSchristos 1385*4724848cSchristos.align 5 1386*4724848cSchristos.globl bn_mul_comba4 1387*4724848cSchristos.ent bn_mul_comba4 1388*4724848cSchristosbn_mul_comba4: 1389*4724848cSchristos .set reorder 1390*4724848cSchristos lw $12,0($5) 1391*4724848cSchristos lw $8,0($6) 1392*4724848cSchristos lw $13,4($5) 1393*4724848cSchristos lw $14,2*4($5) 1394*4724848cSchristos multu ($12,$8) # mul_add_c(a[0],b[0],c1,c2,c3); 1395*4724848cSchristos lw $15,3*4($5) 1396*4724848cSchristos lw $9,4($6) 1397*4724848cSchristos lw $10,2*4($6) 1398*4724848cSchristos lw $11,3*4($6) 1399*4724848cSchristos mflo ($2,$12,$8) 1400*4724848cSchristos mfhi ($3,$12,$8) 1401*4724848cSchristos sw $2,0($4) 1402*4724848cSchristos 1403*4724848cSchristos multu ($12,$9) # mul_add_c(a[0],b[1],c2,c3,c1); 1404*4724848cSchristos mflo ($24,$12,$9) 1405*4724848cSchristos mfhi ($25,$12,$9) 1406*4724848cSchristos addu $3,$24 1407*4724848cSchristos sltu $1,$3,$24 1408*4724848cSchristos multu ($13,$8) # mul_add_c(a[1],b[0],c2,c3,c1); 1409*4724848cSchristos addu $7,$25,$1 1410*4724848cSchristos mflo ($24,$13,$8) 1411*4724848cSchristos mfhi ($25,$13,$8) 1412*4724848cSchristos addu $3,$24 1413*4724848cSchristos sltu $1,$3,$24 1414*4724848cSchristos multu ($14,$8) # mul_add_c(a[2],b[0],c3,c1,c2); 1415*4724848cSchristos addu $25,$1 1416*4724848cSchristos addu $7,$25 1417*4724848cSchristos sltu $2,$7,$25 1418*4724848cSchristos sw $3,4($4) 1419*4724848cSchristos 1420*4724848cSchristos mflo ($24,$14,$8) 1421*4724848cSchristos mfhi ($25,$14,$8) 1422*4724848cSchristos addu $7,$24 1423*4724848cSchristos sltu $1,$7,$24 1424*4724848cSchristos multu ($13,$9) # mul_add_c(a[1],b[1],c3,c1,c2); 1425*4724848cSchristos addu $25,$1 1426*4724848cSchristos addu $2,$25 1427*4724848cSchristos mflo ($24,$13,$9) 1428*4724848cSchristos mfhi ($25,$13,$9) 1429*4724848cSchristos addu $7,$24 1430*4724848cSchristos sltu $1,$7,$24 1431*4724848cSchristos multu ($12,$10) # mul_add_c(a[0],b[2],c3,c1,c2); 1432*4724848cSchristos addu $25,$1 1433*4724848cSchristos addu $2,$25 1434*4724848cSchristos sltu $3,$2,$25 1435*4724848cSchristos mflo ($24,$12,$10) 1436*4724848cSchristos mfhi ($25,$12,$10) 1437*4724848cSchristos addu $7,$24 1438*4724848cSchristos sltu $1,$7,$24 1439*4724848cSchristos multu ($12,$11) # mul_add_c(a[0],b[3],c1,c2,c3); 1440*4724848cSchristos addu $25,$1 1441*4724848cSchristos addu $2,$25 1442*4724848cSchristos sltu $1,$2,$25 1443*4724848cSchristos addu $3,$1 1444*4724848cSchristos sw $7,2*4($4) 1445*4724848cSchristos 1446*4724848cSchristos mflo ($24,$12,$11) 1447*4724848cSchristos mfhi ($25,$12,$11) 1448*4724848cSchristos addu $2,$24 1449*4724848cSchristos sltu $1,$2,$24 1450*4724848cSchristos multu ($13,$10) # mul_add_c(a[1],b[2],c1,c2,c3); 1451*4724848cSchristos addu $25,$1 1452*4724848cSchristos addu $3,$25 1453*4724848cSchristos sltu $7,$3,$25 1454*4724848cSchristos mflo ($24,$13,$10) 1455*4724848cSchristos mfhi ($25,$13,$10) 1456*4724848cSchristos addu $2,$24 1457*4724848cSchristos sltu $1,$2,$24 1458*4724848cSchristos multu ($14,$9) # mul_add_c(a[2],b[1],c1,c2,c3); 1459*4724848cSchristos addu $25,$1 1460*4724848cSchristos addu $3,$25 1461*4724848cSchristos sltu $1,$3,$25 1462*4724848cSchristos addu $7,$1 1463*4724848cSchristos mflo ($24,$14,$9) 1464*4724848cSchristos mfhi ($25,$14,$9) 1465*4724848cSchristos addu $2,$24 1466*4724848cSchristos sltu $1,$2,$24 1467*4724848cSchristos multu ($15,$8) # mul_add_c(a[3],b[0],c1,c2,c3); 1468*4724848cSchristos addu $25,$1 1469*4724848cSchristos addu $3,$25 1470*4724848cSchristos sltu $1,$3,$25 1471*4724848cSchristos addu $7,$1 1472*4724848cSchristos mflo ($24,$15,$8) 1473*4724848cSchristos mfhi ($25,$15,$8) 1474*4724848cSchristos addu $2,$24 1475*4724848cSchristos sltu $1,$2,$24 1476*4724848cSchristos multu ($15,$9) # mul_add_c(a[3],b[1],c2,c3,c1); 1477*4724848cSchristos addu $25,$1 1478*4724848cSchristos addu $3,$25 1479*4724848cSchristos sltu $1,$3,$25 1480*4724848cSchristos addu $7,$1 1481*4724848cSchristos sw $2,3*4($4) 1482*4724848cSchristos 1483*4724848cSchristos mflo ($24,$15,$9) 1484*4724848cSchristos mfhi ($25,$15,$9) 1485*4724848cSchristos addu $3,$24 1486*4724848cSchristos sltu $1,$3,$24 1487*4724848cSchristos multu ($14,$10) # mul_add_c(a[2],b[2],c2,c3,c1); 1488*4724848cSchristos addu $25,$1 1489*4724848cSchristos addu $7,$25 1490*4724848cSchristos sltu $2,$7,$25 1491*4724848cSchristos mflo ($24,$14,$10) 1492*4724848cSchristos mfhi ($25,$14,$10) 1493*4724848cSchristos addu $3,$24 1494*4724848cSchristos sltu $1,$3,$24 1495*4724848cSchristos multu ($13,$11) # mul_add_c(a[1],b[3],c2,c3,c1); 1496*4724848cSchristos addu $25,$1 1497*4724848cSchristos addu $7,$25 1498*4724848cSchristos sltu $1,$7,$25 1499*4724848cSchristos addu $2,$1 1500*4724848cSchristos mflo ($24,$13,$11) 1501*4724848cSchristos mfhi ($25,$13,$11) 1502*4724848cSchristos addu $3,$24 1503*4724848cSchristos sltu $1,$3,$24 1504*4724848cSchristos multu ($14,$11) # mul_add_c(a[2],b[3],c3,c1,c2); 1505*4724848cSchristos addu $25,$1 1506*4724848cSchristos addu $7,$25 1507*4724848cSchristos sltu $1,$7,$25 1508*4724848cSchristos addu $2,$1 1509*4724848cSchristos sw $3,4*4($4) 1510*4724848cSchristos 1511*4724848cSchristos mflo ($24,$14,$11) 1512*4724848cSchristos mfhi ($25,$14,$11) 1513*4724848cSchristos addu $7,$24 1514*4724848cSchristos sltu $1,$7,$24 1515*4724848cSchristos multu ($15,$10) # mul_add_c(a[3],b[2],c3,c1,c2); 1516*4724848cSchristos addu $25,$1 1517*4724848cSchristos addu $2,$25 1518*4724848cSchristos sltu $3,$2,$25 1519*4724848cSchristos mflo ($24,$15,$10) 1520*4724848cSchristos mfhi ($25,$15,$10) 1521*4724848cSchristos addu $7,$24 1522*4724848cSchristos sltu $1,$7,$24 1523*4724848cSchristos multu ($15,$11) # mul_add_c(a[3],b[3],c1,c2,c3); 1524*4724848cSchristos addu $25,$1 1525*4724848cSchristos addu $2,$25 1526*4724848cSchristos sltu $1,$2,$25 1527*4724848cSchristos addu $3,$1 1528*4724848cSchristos sw $7,5*4($4) 1529*4724848cSchristos 1530*4724848cSchristos mflo ($24,$15,$11) 1531*4724848cSchristos mfhi ($25,$15,$11) 1532*4724848cSchristos addu $2,$24 1533*4724848cSchristos sltu $1,$2,$24 1534*4724848cSchristos addu $25,$1 1535*4724848cSchristos addu $3,$25 1536*4724848cSchristos sw $2,6*4($4) 1537*4724848cSchristos sw $3,7*4($4) 1538*4724848cSchristos 1539*4724848cSchristos .set noreorder 1540*4724848cSchristos jr $31 1541*4724848cSchristos nop 1542*4724848cSchristos.end bn_mul_comba4 1543*4724848cSchristos 1544*4724848cSchristos.align 5 1545*4724848cSchristos.globl bn_sqr_comba8 1546*4724848cSchristos.ent bn_sqr_comba8 1547*4724848cSchristosbn_sqr_comba8: 1548*4724848cSchristos .set reorder 1549*4724848cSchristos lw $12,0($5) 1550*4724848cSchristos lw $13,4($5) 1551*4724848cSchristos lw $14,2*4($5) 1552*4724848cSchristos lw $15,3*4($5) 1553*4724848cSchristos 1554*4724848cSchristos multu ($12,$12) # mul_add_c(a[0],b[0],c1,c2,c3); 1555*4724848cSchristos lw $8,4*4($5) 1556*4724848cSchristos lw $9,5*4($5) 1557*4724848cSchristos lw $10,6*4($5) 1558*4724848cSchristos lw $11,7*4($5) 1559*4724848cSchristos mflo ($2,$12,$12) 1560*4724848cSchristos mfhi ($3,$12,$12) 1561*4724848cSchristos sw $2,0($4) 1562*4724848cSchristos 1563*4724848cSchristos multu ($12,$13) # mul_add_c2(a[0],b[1],c2,c3,c1); 1564*4724848cSchristos mflo ($24,$12,$13) 1565*4724848cSchristos mfhi ($25,$12,$13) 1566*4724848cSchristos slt $2,$25,$0 1567*4724848cSchristos sll $25,1 1568*4724848cSchristos multu ($14,$12) # mul_add_c2(a[2],b[0],c3,c1,c2); 1569*4724848cSchristos slt $6,$24,$0 1570*4724848cSchristos addu $25,$6 1571*4724848cSchristos sll $24,1 1572*4724848cSchristos addu $3,$24 1573*4724848cSchristos sltu $1,$3,$24 1574*4724848cSchristos addu $7,$25,$1 1575*4724848cSchristos sw $3,4($4) 1576*4724848cSchristos mflo ($24,$14,$12) 1577*4724848cSchristos mfhi ($25,$14,$12) 1578*4724848cSchristos addu $7,$24 1579*4724848cSchristos sltu $1,$7,$24 1580*4724848cSchristos multu ($13,$13) # forward multiplication 1581*4724848cSchristos addu $7,$24 1582*4724848cSchristos addu $1,$25 1583*4724848cSchristos sltu $24,$7,$24 1584*4724848cSchristos addu $2,$1 1585*4724848cSchristos addu $25,$24 1586*4724848cSchristos sltu $3,$2,$1 1587*4724848cSchristos addu $2,$25 1588*4724848cSchristos sltu $25,$2,$25 1589*4724848cSchristos addu $3,$25 1590*4724848cSchristos mflo ($24,$13,$13) 1591*4724848cSchristos mfhi ($25,$13,$13) 1592*4724848cSchristos addu $7,$24 1593*4724848cSchristos sltu $1,$7,$24 1594*4724848cSchristos multu ($12,$15) # mul_add_c2(a[0],b[3],c1,c2,c3); 1595*4724848cSchristos addu $25,$1 1596*4724848cSchristos addu $2,$25 1597*4724848cSchristos sltu $1,$2,$25 1598*4724848cSchristos addu $3,$1 1599*4724848cSchristos sw $7,2*4($4) 1600*4724848cSchristos mflo ($24,$12,$15) 1601*4724848cSchristos mfhi ($25,$12,$15) 1602*4724848cSchristos addu $2,$24 1603*4724848cSchristos sltu $1,$2,$24 1604*4724848cSchristos multu ($13,$14) # forward multiplication 1605*4724848cSchristos addu $2,$24 1606*4724848cSchristos addu $1,$25 1607*4724848cSchristos sltu $24,$2,$24 1608*4724848cSchristos addu $3,$1 1609*4724848cSchristos addu $25,$24 1610*4724848cSchristos sltu $7,$3,$1 1611*4724848cSchristos addu $3,$25 1612*4724848cSchristos sltu $25,$3,$25 1613*4724848cSchristos addu $7,$25 1614*4724848cSchristos mflo ($24,$13,$14) 1615*4724848cSchristos mfhi ($25,$13,$14) 1616*4724848cSchristos addu $2,$24 1617*4724848cSchristos sltu $1,$2,$24 1618*4724848cSchristos multu ($8,$12) # forward multiplication 1619*4724848cSchristos addu $2,$24 1620*4724848cSchristos addu $1,$25 1621*4724848cSchristos sltu $24,$2,$24 1622*4724848cSchristos addu $3,$1 1623*4724848cSchristos addu $25,$24 1624*4724848cSchristos sltu $1,$3,$1 1625*4724848cSchristos addu $3,$25 1626*4724848cSchristos addu $7,$1 1627*4724848cSchristos sltu $25,$3,$25 1628*4724848cSchristos addu $7,$25 1629*4724848cSchristos mflo ($24,$8,$12) 1630*4724848cSchristos mfhi ($25,$8,$12) 1631*4724848cSchristos sw $2,3*4($4) 1632*4724848cSchristos addu $3,$24 1633*4724848cSchristos sltu $1,$3,$24 1634*4724848cSchristos multu ($15,$13) # forward multiplication 1635*4724848cSchristos addu $3,$24 1636*4724848cSchristos addu $1,$25 1637*4724848cSchristos sltu $24,$3,$24 1638*4724848cSchristos addu $7,$1 1639*4724848cSchristos addu $25,$24 1640*4724848cSchristos sltu $2,$7,$1 1641*4724848cSchristos addu $7,$25 1642*4724848cSchristos sltu $25,$7,$25 1643*4724848cSchristos addu $2,$25 1644*4724848cSchristos mflo ($24,$15,$13) 1645*4724848cSchristos mfhi ($25,$15,$13) 1646*4724848cSchristos addu $3,$24 1647*4724848cSchristos sltu $1,$3,$24 1648*4724848cSchristos multu ($14,$14) # forward multiplication 1649*4724848cSchristos addu $3,$24 1650*4724848cSchristos addu $1,$25 1651*4724848cSchristos sltu $24,$3,$24 1652*4724848cSchristos addu $7,$1 1653*4724848cSchristos addu $25,$24 1654*4724848cSchristos sltu $1,$7,$1 1655*4724848cSchristos addu $7,$25 1656*4724848cSchristos addu $2,$1 1657*4724848cSchristos sltu $25,$7,$25 1658*4724848cSchristos addu $2,$25 1659*4724848cSchristos mflo ($24,$14,$14) 1660*4724848cSchristos mfhi ($25,$14,$14) 1661*4724848cSchristos addu $3,$24 1662*4724848cSchristos sltu $1,$3,$24 1663*4724848cSchristos multu ($12,$9) # mul_add_c2(a[0],b[5],c3,c1,c2); 1664*4724848cSchristos addu $25,$1 1665*4724848cSchristos addu $7,$25 1666*4724848cSchristos sltu $1,$7,$25 1667*4724848cSchristos addu $2,$1 1668*4724848cSchristos sw $3,4*4($4) 1669*4724848cSchristos mflo ($24,$12,$9) 1670*4724848cSchristos mfhi ($25,$12,$9) 1671*4724848cSchristos addu $7,$24 1672*4724848cSchristos sltu $1,$7,$24 1673*4724848cSchristos multu ($13,$8) # forward multiplication 1674*4724848cSchristos addu $7,$24 1675*4724848cSchristos addu $1,$25 1676*4724848cSchristos sltu $24,$7,$24 1677*4724848cSchristos addu $2,$1 1678*4724848cSchristos addu $25,$24 1679*4724848cSchristos sltu $3,$2,$1 1680*4724848cSchristos addu $2,$25 1681*4724848cSchristos sltu $25,$2,$25 1682*4724848cSchristos addu $3,$25 1683*4724848cSchristos mflo ($24,$13,$8) 1684*4724848cSchristos mfhi ($25,$13,$8) 1685*4724848cSchristos addu $7,$24 1686*4724848cSchristos sltu $1,$7,$24 1687*4724848cSchristos multu ($14,$15) # forward multiplication 1688*4724848cSchristos addu $7,$24 1689*4724848cSchristos addu $1,$25 1690*4724848cSchristos sltu $24,$7,$24 1691*4724848cSchristos addu $2,$1 1692*4724848cSchristos addu $25,$24 1693*4724848cSchristos sltu $1,$2,$1 1694*4724848cSchristos addu $2,$25 1695*4724848cSchristos addu $3,$1 1696*4724848cSchristos sltu $25,$2,$25 1697*4724848cSchristos addu $3,$25 1698*4724848cSchristos mflo ($24,$14,$15) 1699*4724848cSchristos mfhi ($25,$14,$15) 1700*4724848cSchristos addu $7,$24 1701*4724848cSchristos sltu $1,$7,$24 1702*4724848cSchristos multu ($10,$12) # forward multiplication 1703*4724848cSchristos addu $7,$24 1704*4724848cSchristos addu $1,$25 1705*4724848cSchristos sltu $24,$7,$24 1706*4724848cSchristos addu $2,$1 1707*4724848cSchristos addu $25,$24 1708*4724848cSchristos sltu $1,$2,$1 1709*4724848cSchristos addu $2,$25 1710*4724848cSchristos addu $3,$1 1711*4724848cSchristos sltu $25,$2,$25 1712*4724848cSchristos addu $3,$25 1713*4724848cSchristos mflo ($24,$10,$12) 1714*4724848cSchristos mfhi ($25,$10,$12) 1715*4724848cSchristos sw $7,5*4($4) 1716*4724848cSchristos addu $2,$24 1717*4724848cSchristos sltu $1,$2,$24 1718*4724848cSchristos multu ($9,$13) # forward multiplication 1719*4724848cSchristos addu $2,$24 1720*4724848cSchristos addu $1,$25 1721*4724848cSchristos sltu $24,$2,$24 1722*4724848cSchristos addu $3,$1 1723*4724848cSchristos addu $25,$24 1724*4724848cSchristos sltu $7,$3,$1 1725*4724848cSchristos addu $3,$25 1726*4724848cSchristos sltu $25,$3,$25 1727*4724848cSchristos addu $7,$25 1728*4724848cSchristos mflo ($24,$9,$13) 1729*4724848cSchristos mfhi ($25,$9,$13) 1730*4724848cSchristos addu $2,$24 1731*4724848cSchristos sltu $1,$2,$24 1732*4724848cSchristos multu ($8,$14) # forward multiplication 1733*4724848cSchristos addu $2,$24 1734*4724848cSchristos addu $1,$25 1735*4724848cSchristos sltu $24,$2,$24 1736*4724848cSchristos addu $3,$1 1737*4724848cSchristos addu $25,$24 1738*4724848cSchristos sltu $1,$3,$1 1739*4724848cSchristos addu $3,$25 1740*4724848cSchristos addu $7,$1 1741*4724848cSchristos sltu $25,$3,$25 1742*4724848cSchristos addu $7,$25 1743*4724848cSchristos mflo ($24,$8,$14) 1744*4724848cSchristos mfhi ($25,$8,$14) 1745*4724848cSchristos addu $2,$24 1746*4724848cSchristos sltu $1,$2,$24 1747*4724848cSchristos multu ($15,$15) # forward multiplication 1748*4724848cSchristos addu $2,$24 1749*4724848cSchristos addu $1,$25 1750*4724848cSchristos sltu $24,$2,$24 1751*4724848cSchristos addu $3,$1 1752*4724848cSchristos addu $25,$24 1753*4724848cSchristos sltu $1,$3,$1 1754*4724848cSchristos addu $3,$25 1755*4724848cSchristos addu $7,$1 1756*4724848cSchristos sltu $25,$3,$25 1757*4724848cSchristos addu $7,$25 1758*4724848cSchristos mflo ($24,$15,$15) 1759*4724848cSchristos mfhi ($25,$15,$15) 1760*4724848cSchristos addu $2,$24 1761*4724848cSchristos sltu $1,$2,$24 1762*4724848cSchristos multu ($12,$11) # mul_add_c2(a[0],b[7],c2,c3,c1); 1763*4724848cSchristos addu $25,$1 1764*4724848cSchristos addu $3,$25 1765*4724848cSchristos sltu $1,$3,$25 1766*4724848cSchristos addu $7,$1 1767*4724848cSchristos sw $2,6*4($4) 1768*4724848cSchristos mflo ($24,$12,$11) 1769*4724848cSchristos mfhi ($25,$12,$11) 1770*4724848cSchristos addu $3,$24 1771*4724848cSchristos sltu $1,$3,$24 1772*4724848cSchristos multu ($13,$10) # forward multiplication 1773*4724848cSchristos addu $3,$24 1774*4724848cSchristos addu $1,$25 1775*4724848cSchristos sltu $24,$3,$24 1776*4724848cSchristos addu $7,$1 1777*4724848cSchristos addu $25,$24 1778*4724848cSchristos sltu $2,$7,$1 1779*4724848cSchristos addu $7,$25 1780*4724848cSchristos sltu $25,$7,$25 1781*4724848cSchristos addu $2,$25 1782*4724848cSchristos mflo ($24,$13,$10) 1783*4724848cSchristos mfhi ($25,$13,$10) 1784*4724848cSchristos addu $3,$24 1785*4724848cSchristos sltu $1,$3,$24 1786*4724848cSchristos multu ($14,$9) # forward multiplication 1787*4724848cSchristos addu $3,$24 1788*4724848cSchristos addu $1,$25 1789*4724848cSchristos sltu $24,$3,$24 1790*4724848cSchristos addu $7,$1 1791*4724848cSchristos addu $25,$24 1792*4724848cSchristos sltu $1,$7,$1 1793*4724848cSchristos addu $7,$25 1794*4724848cSchristos addu $2,$1 1795*4724848cSchristos sltu $25,$7,$25 1796*4724848cSchristos addu $2,$25 1797*4724848cSchristos mflo ($24,$14,$9) 1798*4724848cSchristos mfhi ($25,$14,$9) 1799*4724848cSchristos addu $3,$24 1800*4724848cSchristos sltu $1,$3,$24 1801*4724848cSchristos multu ($15,$8) # forward multiplication 1802*4724848cSchristos addu $3,$24 1803*4724848cSchristos addu $1,$25 1804*4724848cSchristos sltu $24,$3,$24 1805*4724848cSchristos addu $7,$1 1806*4724848cSchristos addu $25,$24 1807*4724848cSchristos sltu $1,$7,$1 1808*4724848cSchristos addu $7,$25 1809*4724848cSchristos addu $2,$1 1810*4724848cSchristos sltu $25,$7,$25 1811*4724848cSchristos addu $2,$25 1812*4724848cSchristos mflo ($24,$15,$8) 1813*4724848cSchristos mfhi ($25,$15,$8) 1814*4724848cSchristos addu $3,$24 1815*4724848cSchristos sltu $1,$3,$24 1816*4724848cSchristos multu ($11,$13) # forward multiplication 1817*4724848cSchristos addu $3,$24 1818*4724848cSchristos addu $1,$25 1819*4724848cSchristos sltu $24,$3,$24 1820*4724848cSchristos addu $7,$1 1821*4724848cSchristos addu $25,$24 1822*4724848cSchristos sltu $1,$7,$1 1823*4724848cSchristos addu $7,$25 1824*4724848cSchristos addu $2,$1 1825*4724848cSchristos sltu $25,$7,$25 1826*4724848cSchristos addu $2,$25 1827*4724848cSchristos mflo ($24,$11,$13) 1828*4724848cSchristos mfhi ($25,$11,$13) 1829*4724848cSchristos sw $3,7*4($4) 1830*4724848cSchristos addu $7,$24 1831*4724848cSchristos sltu $1,$7,$24 1832*4724848cSchristos multu ($10,$14) # forward multiplication 1833*4724848cSchristos addu $7,$24 1834*4724848cSchristos addu $1,$25 1835*4724848cSchristos sltu $24,$7,$24 1836*4724848cSchristos addu $2,$1 1837*4724848cSchristos addu $25,$24 1838*4724848cSchristos sltu $3,$2,$1 1839*4724848cSchristos addu $2,$25 1840*4724848cSchristos sltu $25,$2,$25 1841*4724848cSchristos addu $3,$25 1842*4724848cSchristos mflo ($24,$10,$14) 1843*4724848cSchristos mfhi ($25,$10,$14) 1844*4724848cSchristos addu $7,$24 1845*4724848cSchristos sltu $1,$7,$24 1846*4724848cSchristos multu ($9,$15) # forward multiplication 1847*4724848cSchristos addu $7,$24 1848*4724848cSchristos addu $1,$25 1849*4724848cSchristos sltu $24,$7,$24 1850*4724848cSchristos addu $2,$1 1851*4724848cSchristos addu $25,$24 1852*4724848cSchristos sltu $1,$2,$1 1853*4724848cSchristos addu $2,$25 1854*4724848cSchristos addu $3,$1 1855*4724848cSchristos sltu $25,$2,$25 1856*4724848cSchristos addu $3,$25 1857*4724848cSchristos mflo ($24,$9,$15) 1858*4724848cSchristos mfhi ($25,$9,$15) 1859*4724848cSchristos addu $7,$24 1860*4724848cSchristos sltu $1,$7,$24 1861*4724848cSchristos multu ($8,$8) # forward multiplication 1862*4724848cSchristos addu $7,$24 1863*4724848cSchristos addu $1,$25 1864*4724848cSchristos sltu $24,$7,$24 1865*4724848cSchristos addu $2,$1 1866*4724848cSchristos addu $25,$24 1867*4724848cSchristos sltu $1,$2,$1 1868*4724848cSchristos addu $2,$25 1869*4724848cSchristos addu $3,$1 1870*4724848cSchristos sltu $25,$2,$25 1871*4724848cSchristos addu $3,$25 1872*4724848cSchristos mflo ($24,$8,$8) 1873*4724848cSchristos mfhi ($25,$8,$8) 1874*4724848cSchristos addu $7,$24 1875*4724848cSchristos sltu $1,$7,$24 1876*4724848cSchristos multu ($14,$11) # mul_add_c2(a[2],b[7],c1,c2,c3); 1877*4724848cSchristos addu $25,$1 1878*4724848cSchristos addu $2,$25 1879*4724848cSchristos sltu $1,$2,$25 1880*4724848cSchristos addu $3,$1 1881*4724848cSchristos sw $7,8*4($4) 1882*4724848cSchristos mflo ($24,$14,$11) 1883*4724848cSchristos mfhi ($25,$14,$11) 1884*4724848cSchristos addu $2,$24 1885*4724848cSchristos sltu $1,$2,$24 1886*4724848cSchristos multu ($15,$10) # forward multiplication 1887*4724848cSchristos addu $2,$24 1888*4724848cSchristos addu $1,$25 1889*4724848cSchristos sltu $24,$2,$24 1890*4724848cSchristos addu $3,$1 1891*4724848cSchristos addu $25,$24 1892*4724848cSchristos sltu $7,$3,$1 1893*4724848cSchristos addu $3,$25 1894*4724848cSchristos sltu $25,$3,$25 1895*4724848cSchristos addu $7,$25 1896*4724848cSchristos mflo ($24,$15,$10) 1897*4724848cSchristos mfhi ($25,$15,$10) 1898*4724848cSchristos addu $2,$24 1899*4724848cSchristos sltu $1,$2,$24 1900*4724848cSchristos multu ($8,$9) # forward multiplication 1901*4724848cSchristos addu $2,$24 1902*4724848cSchristos addu $1,$25 1903*4724848cSchristos sltu $24,$2,$24 1904*4724848cSchristos addu $3,$1 1905*4724848cSchristos addu $25,$24 1906*4724848cSchristos sltu $1,$3,$1 1907*4724848cSchristos addu $3,$25 1908*4724848cSchristos addu $7,$1 1909*4724848cSchristos sltu $25,$3,$25 1910*4724848cSchristos addu $7,$25 1911*4724848cSchristos mflo ($24,$8,$9) 1912*4724848cSchristos mfhi ($25,$8,$9) 1913*4724848cSchristos addu $2,$24 1914*4724848cSchristos sltu $1,$2,$24 1915*4724848cSchristos multu ($11,$15) # forward multiplication 1916*4724848cSchristos addu $2,$24 1917*4724848cSchristos addu $1,$25 1918*4724848cSchristos sltu $24,$2,$24 1919*4724848cSchristos addu $3,$1 1920*4724848cSchristos addu $25,$24 1921*4724848cSchristos sltu $1,$3,$1 1922*4724848cSchristos addu $3,$25 1923*4724848cSchristos addu $7,$1 1924*4724848cSchristos sltu $25,$3,$25 1925*4724848cSchristos addu $7,$25 1926*4724848cSchristos mflo ($24,$11,$15) 1927*4724848cSchristos mfhi ($25,$11,$15) 1928*4724848cSchristos sw $2,9*4($4) 1929*4724848cSchristos addu $3,$24 1930*4724848cSchristos sltu $1,$3,$24 1931*4724848cSchristos multu ($10,$8) # forward multiplication 1932*4724848cSchristos addu $3,$24 1933*4724848cSchristos addu $1,$25 1934*4724848cSchristos sltu $24,$3,$24 1935*4724848cSchristos addu $7,$1 1936*4724848cSchristos addu $25,$24 1937*4724848cSchristos sltu $2,$7,$1 1938*4724848cSchristos addu $7,$25 1939*4724848cSchristos sltu $25,$7,$25 1940*4724848cSchristos addu $2,$25 1941*4724848cSchristos mflo ($24,$10,$8) 1942*4724848cSchristos mfhi ($25,$10,$8) 1943*4724848cSchristos addu $3,$24 1944*4724848cSchristos sltu $1,$3,$24 1945*4724848cSchristos multu ($9,$9) # forward multiplication 1946*4724848cSchristos addu $3,$24 1947*4724848cSchristos addu $1,$25 1948*4724848cSchristos sltu $24,$3,$24 1949*4724848cSchristos addu $7,$1 1950*4724848cSchristos addu $25,$24 1951*4724848cSchristos sltu $1,$7,$1 1952*4724848cSchristos addu $7,$25 1953*4724848cSchristos addu $2,$1 1954*4724848cSchristos sltu $25,$7,$25 1955*4724848cSchristos addu $2,$25 1956*4724848cSchristos mflo ($24,$9,$9) 1957*4724848cSchristos mfhi ($25,$9,$9) 1958*4724848cSchristos addu $3,$24 1959*4724848cSchristos sltu $1,$3,$24 1960*4724848cSchristos multu ($8,$11) # mul_add_c2(a[4],b[7],c3,c1,c2); 1961*4724848cSchristos addu $25,$1 1962*4724848cSchristos addu $7,$25 1963*4724848cSchristos sltu $1,$7,$25 1964*4724848cSchristos addu $2,$1 1965*4724848cSchristos sw $3,10*4($4) 1966*4724848cSchristos mflo ($24,$8,$11) 1967*4724848cSchristos mfhi ($25,$8,$11) 1968*4724848cSchristos addu $7,$24 1969*4724848cSchristos sltu $1,$7,$24 1970*4724848cSchristos multu ($9,$10) # forward multiplication 1971*4724848cSchristos addu $7,$24 1972*4724848cSchristos addu $1,$25 1973*4724848cSchristos sltu $24,$7,$24 1974*4724848cSchristos addu $2,$1 1975*4724848cSchristos addu $25,$24 1976*4724848cSchristos sltu $3,$2,$1 1977*4724848cSchristos addu $2,$25 1978*4724848cSchristos sltu $25,$2,$25 1979*4724848cSchristos addu $3,$25 1980*4724848cSchristos mflo ($24,$9,$10) 1981*4724848cSchristos mfhi ($25,$9,$10) 1982*4724848cSchristos addu $7,$24 1983*4724848cSchristos sltu $1,$7,$24 1984*4724848cSchristos multu ($11,$9) # forward multiplication 1985*4724848cSchristos addu $7,$24 1986*4724848cSchristos addu $1,$25 1987*4724848cSchristos sltu $24,$7,$24 1988*4724848cSchristos addu $2,$1 1989*4724848cSchristos addu $25,$24 1990*4724848cSchristos sltu $1,$2,$1 1991*4724848cSchristos addu $2,$25 1992*4724848cSchristos addu $3,$1 1993*4724848cSchristos sltu $25,$2,$25 1994*4724848cSchristos addu $3,$25 1995*4724848cSchristos mflo ($24,$11,$9) 1996*4724848cSchristos mfhi ($25,$11,$9) 1997*4724848cSchristos sw $7,11*4($4) 1998*4724848cSchristos addu $2,$24 1999*4724848cSchristos sltu $1,$2,$24 2000*4724848cSchristos multu ($10,$10) # forward multiplication 2001*4724848cSchristos addu $2,$24 2002*4724848cSchristos addu $1,$25 2003*4724848cSchristos sltu $24,$2,$24 2004*4724848cSchristos addu $3,$1 2005*4724848cSchristos addu $25,$24 2006*4724848cSchristos sltu $7,$3,$1 2007*4724848cSchristos addu $3,$25 2008*4724848cSchristos sltu $25,$3,$25 2009*4724848cSchristos addu $7,$25 2010*4724848cSchristos mflo ($24,$10,$10) 2011*4724848cSchristos mfhi ($25,$10,$10) 2012*4724848cSchristos addu $2,$24 2013*4724848cSchristos sltu $1,$2,$24 2014*4724848cSchristos multu ($10,$11) # mul_add_c2(a[6],b[7],c2,c3,c1); 2015*4724848cSchristos addu $25,$1 2016*4724848cSchristos addu $3,$25 2017*4724848cSchristos sltu $1,$3,$25 2018*4724848cSchristos addu $7,$1 2019*4724848cSchristos sw $2,12*4($4) 2020*4724848cSchristos mflo ($24,$10,$11) 2021*4724848cSchristos mfhi ($25,$10,$11) 2022*4724848cSchristos addu $3,$24 2023*4724848cSchristos sltu $1,$3,$24 2024*4724848cSchristos multu ($11,$11) # forward multiplication 2025*4724848cSchristos addu $3,$24 2026*4724848cSchristos addu $1,$25 2027*4724848cSchristos sltu $24,$3,$24 2028*4724848cSchristos addu $7,$1 2029*4724848cSchristos addu $25,$24 2030*4724848cSchristos sltu $2,$7,$1 2031*4724848cSchristos addu $7,$25 2032*4724848cSchristos sltu $25,$7,$25 2033*4724848cSchristos addu $2,$25 2034*4724848cSchristos mflo ($24,$11,$11) 2035*4724848cSchristos mfhi ($25,$11,$11) 2036*4724848cSchristos sw $3,13*4($4) 2037*4724848cSchristos 2038*4724848cSchristos addu $7,$24 2039*4724848cSchristos sltu $1,$7,$24 2040*4724848cSchristos addu $25,$1 2041*4724848cSchristos addu $2,$25 2042*4724848cSchristos sw $7,14*4($4) 2043*4724848cSchristos sw $2,15*4($4) 2044*4724848cSchristos 2045*4724848cSchristos .set noreorder 2046*4724848cSchristos jr $31 2047*4724848cSchristos nop 2048*4724848cSchristos.end bn_sqr_comba8 2049*4724848cSchristos 2050*4724848cSchristos.align 5 2051*4724848cSchristos.globl bn_sqr_comba4 2052*4724848cSchristos.ent bn_sqr_comba4 2053*4724848cSchristosbn_sqr_comba4: 2054*4724848cSchristos .set reorder 2055*4724848cSchristos lw $12,0($5) 2056*4724848cSchristos lw $13,4($5) 2057*4724848cSchristos multu ($12,$12) # mul_add_c(a[0],b[0],c1,c2,c3); 2058*4724848cSchristos lw $14,2*4($5) 2059*4724848cSchristos lw $15,3*4($5) 2060*4724848cSchristos mflo ($2,$12,$12) 2061*4724848cSchristos mfhi ($3,$12,$12) 2062*4724848cSchristos sw $2,0($4) 2063*4724848cSchristos 2064*4724848cSchristos multu ($12,$13) # mul_add_c2(a[0],b[1],c2,c3,c1); 2065*4724848cSchristos mflo ($24,$12,$13) 2066*4724848cSchristos mfhi ($25,$12,$13) 2067*4724848cSchristos slt $2,$25,$0 2068*4724848cSchristos sll $25,1 2069*4724848cSchristos multu ($14,$12) # mul_add_c2(a[2],b[0],c3,c1,c2); 2070*4724848cSchristos slt $6,$24,$0 2071*4724848cSchristos addu $25,$6 2072*4724848cSchristos sll $24,1 2073*4724848cSchristos addu $3,$24 2074*4724848cSchristos sltu $1,$3,$24 2075*4724848cSchristos addu $7,$25,$1 2076*4724848cSchristos sw $3,4($4) 2077*4724848cSchristos mflo ($24,$14,$12) 2078*4724848cSchristos mfhi ($25,$14,$12) 2079*4724848cSchristos addu $7,$24 2080*4724848cSchristos sltu $1,$7,$24 2081*4724848cSchristos multu ($13,$13) # forward multiplication 2082*4724848cSchristos addu $7,$24 2083*4724848cSchristos addu $1,$25 2084*4724848cSchristos sltu $24,$7,$24 2085*4724848cSchristos addu $2,$1 2086*4724848cSchristos addu $25,$24 2087*4724848cSchristos sltu $3,$2,$1 2088*4724848cSchristos addu $2,$25 2089*4724848cSchristos sltu $25,$2,$25 2090*4724848cSchristos addu $3,$25 2091*4724848cSchristos mflo ($24,$13,$13) 2092*4724848cSchristos mfhi ($25,$13,$13) 2093*4724848cSchristos addu $7,$24 2094*4724848cSchristos sltu $1,$7,$24 2095*4724848cSchristos multu ($12,$15) # mul_add_c2(a[0],b[3],c1,c2,c3); 2096*4724848cSchristos addu $25,$1 2097*4724848cSchristos addu $2,$25 2098*4724848cSchristos sltu $1,$2,$25 2099*4724848cSchristos addu $3,$1 2100*4724848cSchristos sw $7,2*4($4) 2101*4724848cSchristos mflo ($24,$12,$15) 2102*4724848cSchristos mfhi ($25,$12,$15) 2103*4724848cSchristos addu $2,$24 2104*4724848cSchristos sltu $1,$2,$24 2105*4724848cSchristos multu ($13,$14) # forward multiplication 2106*4724848cSchristos addu $2,$24 2107*4724848cSchristos addu $1,$25 2108*4724848cSchristos sltu $24,$2,$24 2109*4724848cSchristos addu $3,$1 2110*4724848cSchristos addu $25,$24 2111*4724848cSchristos sltu $7,$3,$1 2112*4724848cSchristos addu $3,$25 2113*4724848cSchristos sltu $25,$3,$25 2114*4724848cSchristos addu $7,$25 2115*4724848cSchristos mflo ($24,$13,$14) 2116*4724848cSchristos mfhi ($25,$13,$14) 2117*4724848cSchristos addu $2,$24 2118*4724848cSchristos sltu $1,$2,$24 2119*4724848cSchristos multu ($15,$13) # forward multiplication 2120*4724848cSchristos addu $2,$24 2121*4724848cSchristos addu $1,$25 2122*4724848cSchristos sltu $24,$2,$24 2123*4724848cSchristos addu $3,$1 2124*4724848cSchristos addu $25,$24 2125*4724848cSchristos sltu $1,$3,$1 2126*4724848cSchristos addu $3,$25 2127*4724848cSchristos addu $7,$1 2128*4724848cSchristos sltu $25,$3,$25 2129*4724848cSchristos addu $7,$25 2130*4724848cSchristos mflo ($24,$15,$13) 2131*4724848cSchristos mfhi ($25,$15,$13) 2132*4724848cSchristos sw $2,3*4($4) 2133*4724848cSchristos addu $3,$24 2134*4724848cSchristos sltu $1,$3,$24 2135*4724848cSchristos multu ($14,$14) # forward multiplication 2136*4724848cSchristos addu $3,$24 2137*4724848cSchristos addu $1,$25 2138*4724848cSchristos sltu $24,$3,$24 2139*4724848cSchristos addu $7,$1 2140*4724848cSchristos addu $25,$24 2141*4724848cSchristos sltu $2,$7,$1 2142*4724848cSchristos addu $7,$25 2143*4724848cSchristos sltu $25,$7,$25 2144*4724848cSchristos addu $2,$25 2145*4724848cSchristos mflo ($24,$14,$14) 2146*4724848cSchristos mfhi ($25,$14,$14) 2147*4724848cSchristos addu $3,$24 2148*4724848cSchristos sltu $1,$3,$24 2149*4724848cSchristos multu ($14,$15) # mul_add_c2(a[2],b[3],c3,c1,c2); 2150*4724848cSchristos addu $25,$1 2151*4724848cSchristos addu $7,$25 2152*4724848cSchristos sltu $1,$7,$25 2153*4724848cSchristos addu $2,$1 2154*4724848cSchristos sw $3,4*4($4) 2155*4724848cSchristos mflo ($24,$14,$15) 2156*4724848cSchristos mfhi ($25,$14,$15) 2157*4724848cSchristos addu $7,$24 2158*4724848cSchristos sltu $1,$7,$24 2159*4724848cSchristos multu ($15,$15) # forward multiplication 2160*4724848cSchristos addu $7,$24 2161*4724848cSchristos addu $1,$25 2162*4724848cSchristos sltu $24,$7,$24 2163*4724848cSchristos addu $2,$1 2164*4724848cSchristos addu $25,$24 2165*4724848cSchristos sltu $3,$2,$1 2166*4724848cSchristos addu $2,$25 2167*4724848cSchristos sltu $25,$2,$25 2168*4724848cSchristos addu $3,$25 2169*4724848cSchristos mflo ($24,$15,$15) 2170*4724848cSchristos mfhi ($25,$15,$15) 2171*4724848cSchristos sw $7,5*4($4) 2172*4724848cSchristos 2173*4724848cSchristos addu $2,$24 2174*4724848cSchristos sltu $1,$2,$24 2175*4724848cSchristos addu $25,$1 2176*4724848cSchristos addu $3,$25 2177*4724848cSchristos sw $2,6*4($4) 2178*4724848cSchristos sw $3,7*4($4) 2179*4724848cSchristos 2180*4724848cSchristos .set noreorder 2181*4724848cSchristos jr $31 2182*4724848cSchristos nop 2183*4724848cSchristos.end bn_sqr_comba4 2184