1*4724848cSchristos#include "mips_arch.h" 2*4724848cSchristos 3*4724848cSchristos.text 4*4724848cSchristos.set noat 5*4724848cSchristos#if !defined(__mips_eabi) && (!defined(__vxworks) || defined(__pic__)) 6*4724848cSchristos.option pic2 7*4724848cSchristos#endif 8*4724848cSchristos 9*4724848cSchristos.align 5 10*4724848cSchristos.globl sha256_block_data_order 11*4724848cSchristos.ent sha256_block_data_order 12*4724848cSchristossha256_block_data_order: 13*4724848cSchristos .frame $29,128,$31 14*4724848cSchristos .mask 0xc0ff0000,-4 15*4724848cSchristos .set noreorder 16*4724848cSchristos .cpload $25 17*4724848cSchristos subu $29,128 18*4724848cSchristos sw $31,128-1*4($29) 19*4724848cSchristos sw $30,128-2*4($29) 20*4724848cSchristos sw $23,128-3*4($29) 21*4724848cSchristos sw $22,128-4*4($29) 22*4724848cSchristos sw $21,128-5*4($29) 23*4724848cSchristos sw $20,128-6*4($29) 24*4724848cSchristos sw $19,128-7*4($29) 25*4724848cSchristos sw $18,128-8*4($29) 26*4724848cSchristos sw $17,128-9*4($29) 27*4724848cSchristos sw $16,128-10*4($29) 28*4724848cSchristos sll $23,$6,6 29*4724848cSchristos .set reorder 30*4724848cSchristos la $6,K256 # PIC-ified 'load address' 31*4724848cSchristos 32*4724848cSchristos lw $1,0*4($4) # load context 33*4724848cSchristos lw $2,1*4($4) 34*4724848cSchristos lw $3,2*4($4) 35*4724848cSchristos lw $7,3*4($4) 36*4724848cSchristos lw $24,4*4($4) 37*4724848cSchristos lw $25,5*4($4) 38*4724848cSchristos lw $30,6*4($4) 39*4724848cSchristos lw $31,7*4($4) 40*4724848cSchristos 41*4724848cSchristos addu $23,$5 # pointer to the end of input 42*4724848cSchristos sw $23,16*4($29) 43*4724848cSchristos b .Loop 44*4724848cSchristos 45*4724848cSchristos.align 5 46*4724848cSchristos.Loop: 47*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 48*4724848cSchristos lw $8,($5) 49*4724848cSchristos#else 50*4724848cSchristos lwl $8,3($5) 51*4724848cSchristos lwr $8,0($5) 52*4724848cSchristos#endif 53*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 54*4724848cSchristos lw $9,4($5) 55*4724848cSchristos#else 56*4724848cSchristos lwl $9,7($5) 57*4724848cSchristos lwr $9,4($5) 58*4724848cSchristos#endif 59*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 60*4724848cSchristos wsbh $8,$8 # byte swap(0) 61*4724848cSchristos rotr $8,$8,16 62*4724848cSchristos#else 63*4724848cSchristos srl $13,$8,24 # byte swap(0) 64*4724848cSchristos srl $14,$8,8 65*4724848cSchristos andi $15,$8,0xFF00 66*4724848cSchristos sll $8,$8,24 67*4724848cSchristos andi $14,0xFF00 68*4724848cSchristos sll $15,$15,8 69*4724848cSchristos or $8,$13 70*4724848cSchristos or $14,$15 71*4724848cSchristos or $8,$14 72*4724848cSchristos#endif 73*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 74*4724848cSchristos xor $15,$25,$30 # 0 75*4724848cSchristos rotr $13,$24,6 76*4724848cSchristos addu $12,$8,$31 77*4724848cSchristos rotr $14,$24,11 78*4724848cSchristos and $15,$24 79*4724848cSchristos rotr $31,$24,25 80*4724848cSchristos xor $13,$14 81*4724848cSchristos rotr $14,$1,2 82*4724848cSchristos xor $15,$30 # Ch(e,f,g) 83*4724848cSchristos xor $13,$31 # Sigma1(e) 84*4724848cSchristos 85*4724848cSchristos rotr $31,$1,13 86*4724848cSchristos addu $12,$15 87*4724848cSchristos lw $15,0($6) # K[0] 88*4724848cSchristos xor $31,$14 89*4724848cSchristos rotr $14,$1,22 90*4724848cSchristos addu $12,$13 91*4724848cSchristos and $13,$2,$3 92*4724848cSchristos xor $31,$14 # Sigma0(a) 93*4724848cSchristos xor $14,$2,$3 94*4724848cSchristos#else 95*4724848cSchristos addu $12,$8,$31 # 0 96*4724848cSchristos srl $31,$24,6 97*4724848cSchristos xor $15,$25,$30 98*4724848cSchristos sll $14,$24,7 99*4724848cSchristos and $15,$24 100*4724848cSchristos srl $13,$24,11 101*4724848cSchristos xor $31,$14 102*4724848cSchristos sll $14,$24,21 103*4724848cSchristos xor $31,$13 104*4724848cSchristos srl $13,$24,25 105*4724848cSchristos xor $31,$14 106*4724848cSchristos sll $14,$24,26 107*4724848cSchristos xor $31,$13 108*4724848cSchristos xor $15,$30 # Ch(e,f,g) 109*4724848cSchristos xor $13,$14,$31 # Sigma1(e) 110*4724848cSchristos 111*4724848cSchristos srl $31,$1,2 112*4724848cSchristos addu $12,$15 113*4724848cSchristos lw $15,0($6) # K[0] 114*4724848cSchristos sll $14,$1,10 115*4724848cSchristos addu $12,$13 116*4724848cSchristos srl $13,$1,13 117*4724848cSchristos xor $31,$14 118*4724848cSchristos sll $14,$1,19 119*4724848cSchristos xor $31,$13 120*4724848cSchristos srl $13,$1,22 121*4724848cSchristos xor $31,$14 122*4724848cSchristos sll $14,$1,30 123*4724848cSchristos xor $31,$13 124*4724848cSchristos and $13,$2,$3 125*4724848cSchristos xor $31,$14 # Sigma0(a) 126*4724848cSchristos xor $14,$2,$3 127*4724848cSchristos#endif 128*4724848cSchristos sw $8,0($29) # offload to ring buffer 129*4724848cSchristos addu $31,$13 130*4724848cSchristos and $14,$1 131*4724848cSchristos addu $12,$15 # +=K[0] 132*4724848cSchristos addu $31,$14 # +=Maj(a,b,c) 133*4724848cSchristos addu $7,$12 134*4724848cSchristos addu $31,$12 135*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 136*4724848cSchristos lw $10,8($5) 137*4724848cSchristos#else 138*4724848cSchristos lwl $10,11($5) 139*4724848cSchristos lwr $10,8($5) 140*4724848cSchristos#endif 141*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 142*4724848cSchristos wsbh $9,$9 # byte swap(1) 143*4724848cSchristos rotr $9,$9,16 144*4724848cSchristos#else 145*4724848cSchristos srl $14,$9,24 # byte swap(1) 146*4724848cSchristos srl $15,$9,8 147*4724848cSchristos andi $16,$9,0xFF00 148*4724848cSchristos sll $9,$9,24 149*4724848cSchristos andi $15,0xFF00 150*4724848cSchristos sll $16,$16,8 151*4724848cSchristos or $9,$14 152*4724848cSchristos or $15,$16 153*4724848cSchristos or $9,$15 154*4724848cSchristos#endif 155*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 156*4724848cSchristos xor $16,$24,$25 # 1 157*4724848cSchristos rotr $14,$7,6 158*4724848cSchristos addu $13,$9,$30 159*4724848cSchristos rotr $15,$7,11 160*4724848cSchristos and $16,$7 161*4724848cSchristos rotr $30,$7,25 162*4724848cSchristos xor $14,$15 163*4724848cSchristos rotr $15,$31,2 164*4724848cSchristos xor $16,$25 # Ch(e,f,g) 165*4724848cSchristos xor $14,$30 # Sigma1(e) 166*4724848cSchristos 167*4724848cSchristos rotr $30,$31,13 168*4724848cSchristos addu $13,$16 169*4724848cSchristos lw $16,4($6) # K[1] 170*4724848cSchristos xor $30,$15 171*4724848cSchristos rotr $15,$31,22 172*4724848cSchristos addu $13,$14 173*4724848cSchristos and $14,$1,$2 174*4724848cSchristos xor $30,$15 # Sigma0(a) 175*4724848cSchristos xor $15,$1,$2 176*4724848cSchristos#else 177*4724848cSchristos addu $13,$9,$30 # 1 178*4724848cSchristos srl $30,$7,6 179*4724848cSchristos xor $16,$24,$25 180*4724848cSchristos sll $15,$7,7 181*4724848cSchristos and $16,$7 182*4724848cSchristos srl $14,$7,11 183*4724848cSchristos xor $30,$15 184*4724848cSchristos sll $15,$7,21 185*4724848cSchristos xor $30,$14 186*4724848cSchristos srl $14,$7,25 187*4724848cSchristos xor $30,$15 188*4724848cSchristos sll $15,$7,26 189*4724848cSchristos xor $30,$14 190*4724848cSchristos xor $16,$25 # Ch(e,f,g) 191*4724848cSchristos xor $14,$15,$30 # Sigma1(e) 192*4724848cSchristos 193*4724848cSchristos srl $30,$31,2 194*4724848cSchristos addu $13,$16 195*4724848cSchristos lw $16,4($6) # K[1] 196*4724848cSchristos sll $15,$31,10 197*4724848cSchristos addu $13,$14 198*4724848cSchristos srl $14,$31,13 199*4724848cSchristos xor $30,$15 200*4724848cSchristos sll $15,$31,19 201*4724848cSchristos xor $30,$14 202*4724848cSchristos srl $14,$31,22 203*4724848cSchristos xor $30,$15 204*4724848cSchristos sll $15,$31,30 205*4724848cSchristos xor $30,$14 206*4724848cSchristos and $14,$1,$2 207*4724848cSchristos xor $30,$15 # Sigma0(a) 208*4724848cSchristos xor $15,$1,$2 209*4724848cSchristos#endif 210*4724848cSchristos sw $9,4($29) # offload to ring buffer 211*4724848cSchristos addu $30,$14 212*4724848cSchristos and $15,$31 213*4724848cSchristos addu $13,$16 # +=K[1] 214*4724848cSchristos addu $30,$15 # +=Maj(a,b,c) 215*4724848cSchristos addu $3,$13 216*4724848cSchristos addu $30,$13 217*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 218*4724848cSchristos lw $11,12($5) 219*4724848cSchristos#else 220*4724848cSchristos lwl $11,15($5) 221*4724848cSchristos lwr $11,12($5) 222*4724848cSchristos#endif 223*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 224*4724848cSchristos wsbh $10,$10 # byte swap(2) 225*4724848cSchristos rotr $10,$10,16 226*4724848cSchristos#else 227*4724848cSchristos srl $15,$10,24 # byte swap(2) 228*4724848cSchristos srl $16,$10,8 229*4724848cSchristos andi $17,$10,0xFF00 230*4724848cSchristos sll $10,$10,24 231*4724848cSchristos andi $16,0xFF00 232*4724848cSchristos sll $17,$17,8 233*4724848cSchristos or $10,$15 234*4724848cSchristos or $16,$17 235*4724848cSchristos or $10,$16 236*4724848cSchristos#endif 237*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 238*4724848cSchristos xor $17,$7,$24 # 2 239*4724848cSchristos rotr $15,$3,6 240*4724848cSchristos addu $14,$10,$25 241*4724848cSchristos rotr $16,$3,11 242*4724848cSchristos and $17,$3 243*4724848cSchristos rotr $25,$3,25 244*4724848cSchristos xor $15,$16 245*4724848cSchristos rotr $16,$30,2 246*4724848cSchristos xor $17,$24 # Ch(e,f,g) 247*4724848cSchristos xor $15,$25 # Sigma1(e) 248*4724848cSchristos 249*4724848cSchristos rotr $25,$30,13 250*4724848cSchristos addu $14,$17 251*4724848cSchristos lw $17,8($6) # K[2] 252*4724848cSchristos xor $25,$16 253*4724848cSchristos rotr $16,$30,22 254*4724848cSchristos addu $14,$15 255*4724848cSchristos and $15,$31,$1 256*4724848cSchristos xor $25,$16 # Sigma0(a) 257*4724848cSchristos xor $16,$31,$1 258*4724848cSchristos#else 259*4724848cSchristos addu $14,$10,$25 # 2 260*4724848cSchristos srl $25,$3,6 261*4724848cSchristos xor $17,$7,$24 262*4724848cSchristos sll $16,$3,7 263*4724848cSchristos and $17,$3 264*4724848cSchristos srl $15,$3,11 265*4724848cSchristos xor $25,$16 266*4724848cSchristos sll $16,$3,21 267*4724848cSchristos xor $25,$15 268*4724848cSchristos srl $15,$3,25 269*4724848cSchristos xor $25,$16 270*4724848cSchristos sll $16,$3,26 271*4724848cSchristos xor $25,$15 272*4724848cSchristos xor $17,$24 # Ch(e,f,g) 273*4724848cSchristos xor $15,$16,$25 # Sigma1(e) 274*4724848cSchristos 275*4724848cSchristos srl $25,$30,2 276*4724848cSchristos addu $14,$17 277*4724848cSchristos lw $17,8($6) # K[2] 278*4724848cSchristos sll $16,$30,10 279*4724848cSchristos addu $14,$15 280*4724848cSchristos srl $15,$30,13 281*4724848cSchristos xor $25,$16 282*4724848cSchristos sll $16,$30,19 283*4724848cSchristos xor $25,$15 284*4724848cSchristos srl $15,$30,22 285*4724848cSchristos xor $25,$16 286*4724848cSchristos sll $16,$30,30 287*4724848cSchristos xor $25,$15 288*4724848cSchristos and $15,$31,$1 289*4724848cSchristos xor $25,$16 # Sigma0(a) 290*4724848cSchristos xor $16,$31,$1 291*4724848cSchristos#endif 292*4724848cSchristos sw $10,8($29) # offload to ring buffer 293*4724848cSchristos addu $25,$15 294*4724848cSchristos and $16,$30 295*4724848cSchristos addu $14,$17 # +=K[2] 296*4724848cSchristos addu $25,$16 # +=Maj(a,b,c) 297*4724848cSchristos addu $2,$14 298*4724848cSchristos addu $25,$14 299*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 300*4724848cSchristos lw $12,16($5) 301*4724848cSchristos#else 302*4724848cSchristos lwl $12,19($5) 303*4724848cSchristos lwr $12,16($5) 304*4724848cSchristos#endif 305*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 306*4724848cSchristos wsbh $11,$11 # byte swap(3) 307*4724848cSchristos rotr $11,$11,16 308*4724848cSchristos#else 309*4724848cSchristos srl $16,$11,24 # byte swap(3) 310*4724848cSchristos srl $17,$11,8 311*4724848cSchristos andi $18,$11,0xFF00 312*4724848cSchristos sll $11,$11,24 313*4724848cSchristos andi $17,0xFF00 314*4724848cSchristos sll $18,$18,8 315*4724848cSchristos or $11,$16 316*4724848cSchristos or $17,$18 317*4724848cSchristos or $11,$17 318*4724848cSchristos#endif 319*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 320*4724848cSchristos xor $18,$3,$7 # 3 321*4724848cSchristos rotr $16,$2,6 322*4724848cSchristos addu $15,$11,$24 323*4724848cSchristos rotr $17,$2,11 324*4724848cSchristos and $18,$2 325*4724848cSchristos rotr $24,$2,25 326*4724848cSchristos xor $16,$17 327*4724848cSchristos rotr $17,$25,2 328*4724848cSchristos xor $18,$7 # Ch(e,f,g) 329*4724848cSchristos xor $16,$24 # Sigma1(e) 330*4724848cSchristos 331*4724848cSchristos rotr $24,$25,13 332*4724848cSchristos addu $15,$18 333*4724848cSchristos lw $18,12($6) # K[3] 334*4724848cSchristos xor $24,$17 335*4724848cSchristos rotr $17,$25,22 336*4724848cSchristos addu $15,$16 337*4724848cSchristos and $16,$30,$31 338*4724848cSchristos xor $24,$17 # Sigma0(a) 339*4724848cSchristos xor $17,$30,$31 340*4724848cSchristos#else 341*4724848cSchristos addu $15,$11,$24 # 3 342*4724848cSchristos srl $24,$2,6 343*4724848cSchristos xor $18,$3,$7 344*4724848cSchristos sll $17,$2,7 345*4724848cSchristos and $18,$2 346*4724848cSchristos srl $16,$2,11 347*4724848cSchristos xor $24,$17 348*4724848cSchristos sll $17,$2,21 349*4724848cSchristos xor $24,$16 350*4724848cSchristos srl $16,$2,25 351*4724848cSchristos xor $24,$17 352*4724848cSchristos sll $17,$2,26 353*4724848cSchristos xor $24,$16 354*4724848cSchristos xor $18,$7 # Ch(e,f,g) 355*4724848cSchristos xor $16,$17,$24 # Sigma1(e) 356*4724848cSchristos 357*4724848cSchristos srl $24,$25,2 358*4724848cSchristos addu $15,$18 359*4724848cSchristos lw $18,12($6) # K[3] 360*4724848cSchristos sll $17,$25,10 361*4724848cSchristos addu $15,$16 362*4724848cSchristos srl $16,$25,13 363*4724848cSchristos xor $24,$17 364*4724848cSchristos sll $17,$25,19 365*4724848cSchristos xor $24,$16 366*4724848cSchristos srl $16,$25,22 367*4724848cSchristos xor $24,$17 368*4724848cSchristos sll $17,$25,30 369*4724848cSchristos xor $24,$16 370*4724848cSchristos and $16,$30,$31 371*4724848cSchristos xor $24,$17 # Sigma0(a) 372*4724848cSchristos xor $17,$30,$31 373*4724848cSchristos#endif 374*4724848cSchristos sw $11,12($29) # offload to ring buffer 375*4724848cSchristos addu $24,$16 376*4724848cSchristos and $17,$25 377*4724848cSchristos addu $15,$18 # +=K[3] 378*4724848cSchristos addu $24,$17 # +=Maj(a,b,c) 379*4724848cSchristos addu $1,$15 380*4724848cSchristos addu $24,$15 381*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 382*4724848cSchristos lw $13,20($5) 383*4724848cSchristos#else 384*4724848cSchristos lwl $13,23($5) 385*4724848cSchristos lwr $13,20($5) 386*4724848cSchristos#endif 387*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 388*4724848cSchristos wsbh $12,$12 # byte swap(4) 389*4724848cSchristos rotr $12,$12,16 390*4724848cSchristos#else 391*4724848cSchristos srl $17,$12,24 # byte swap(4) 392*4724848cSchristos srl $18,$12,8 393*4724848cSchristos andi $19,$12,0xFF00 394*4724848cSchristos sll $12,$12,24 395*4724848cSchristos andi $18,0xFF00 396*4724848cSchristos sll $19,$19,8 397*4724848cSchristos or $12,$17 398*4724848cSchristos or $18,$19 399*4724848cSchristos or $12,$18 400*4724848cSchristos#endif 401*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 402*4724848cSchristos xor $19,$2,$3 # 4 403*4724848cSchristos rotr $17,$1,6 404*4724848cSchristos addu $16,$12,$7 405*4724848cSchristos rotr $18,$1,11 406*4724848cSchristos and $19,$1 407*4724848cSchristos rotr $7,$1,25 408*4724848cSchristos xor $17,$18 409*4724848cSchristos rotr $18,$24,2 410*4724848cSchristos xor $19,$3 # Ch(e,f,g) 411*4724848cSchristos xor $17,$7 # Sigma1(e) 412*4724848cSchristos 413*4724848cSchristos rotr $7,$24,13 414*4724848cSchristos addu $16,$19 415*4724848cSchristos lw $19,16($6) # K[4] 416*4724848cSchristos xor $7,$18 417*4724848cSchristos rotr $18,$24,22 418*4724848cSchristos addu $16,$17 419*4724848cSchristos and $17,$25,$30 420*4724848cSchristos xor $7,$18 # Sigma0(a) 421*4724848cSchristos xor $18,$25,$30 422*4724848cSchristos#else 423*4724848cSchristos addu $16,$12,$7 # 4 424*4724848cSchristos srl $7,$1,6 425*4724848cSchristos xor $19,$2,$3 426*4724848cSchristos sll $18,$1,7 427*4724848cSchristos and $19,$1 428*4724848cSchristos srl $17,$1,11 429*4724848cSchristos xor $7,$18 430*4724848cSchristos sll $18,$1,21 431*4724848cSchristos xor $7,$17 432*4724848cSchristos srl $17,$1,25 433*4724848cSchristos xor $7,$18 434*4724848cSchristos sll $18,$1,26 435*4724848cSchristos xor $7,$17 436*4724848cSchristos xor $19,$3 # Ch(e,f,g) 437*4724848cSchristos xor $17,$18,$7 # Sigma1(e) 438*4724848cSchristos 439*4724848cSchristos srl $7,$24,2 440*4724848cSchristos addu $16,$19 441*4724848cSchristos lw $19,16($6) # K[4] 442*4724848cSchristos sll $18,$24,10 443*4724848cSchristos addu $16,$17 444*4724848cSchristos srl $17,$24,13 445*4724848cSchristos xor $7,$18 446*4724848cSchristos sll $18,$24,19 447*4724848cSchristos xor $7,$17 448*4724848cSchristos srl $17,$24,22 449*4724848cSchristos xor $7,$18 450*4724848cSchristos sll $18,$24,30 451*4724848cSchristos xor $7,$17 452*4724848cSchristos and $17,$25,$30 453*4724848cSchristos xor $7,$18 # Sigma0(a) 454*4724848cSchristos xor $18,$25,$30 455*4724848cSchristos#endif 456*4724848cSchristos sw $12,16($29) # offload to ring buffer 457*4724848cSchristos addu $7,$17 458*4724848cSchristos and $18,$24 459*4724848cSchristos addu $16,$19 # +=K[4] 460*4724848cSchristos addu $7,$18 # +=Maj(a,b,c) 461*4724848cSchristos addu $31,$16 462*4724848cSchristos addu $7,$16 463*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 464*4724848cSchristos lw $14,24($5) 465*4724848cSchristos#else 466*4724848cSchristos lwl $14,27($5) 467*4724848cSchristos lwr $14,24($5) 468*4724848cSchristos#endif 469*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 470*4724848cSchristos wsbh $13,$13 # byte swap(5) 471*4724848cSchristos rotr $13,$13,16 472*4724848cSchristos#else 473*4724848cSchristos srl $18,$13,24 # byte swap(5) 474*4724848cSchristos srl $19,$13,8 475*4724848cSchristos andi $20,$13,0xFF00 476*4724848cSchristos sll $13,$13,24 477*4724848cSchristos andi $19,0xFF00 478*4724848cSchristos sll $20,$20,8 479*4724848cSchristos or $13,$18 480*4724848cSchristos or $19,$20 481*4724848cSchristos or $13,$19 482*4724848cSchristos#endif 483*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 484*4724848cSchristos xor $20,$1,$2 # 5 485*4724848cSchristos rotr $18,$31,6 486*4724848cSchristos addu $17,$13,$3 487*4724848cSchristos rotr $19,$31,11 488*4724848cSchristos and $20,$31 489*4724848cSchristos rotr $3,$31,25 490*4724848cSchristos xor $18,$19 491*4724848cSchristos rotr $19,$7,2 492*4724848cSchristos xor $20,$2 # Ch(e,f,g) 493*4724848cSchristos xor $18,$3 # Sigma1(e) 494*4724848cSchristos 495*4724848cSchristos rotr $3,$7,13 496*4724848cSchristos addu $17,$20 497*4724848cSchristos lw $20,20($6) # K[5] 498*4724848cSchristos xor $3,$19 499*4724848cSchristos rotr $19,$7,22 500*4724848cSchristos addu $17,$18 501*4724848cSchristos and $18,$24,$25 502*4724848cSchristos xor $3,$19 # Sigma0(a) 503*4724848cSchristos xor $19,$24,$25 504*4724848cSchristos#else 505*4724848cSchristos addu $17,$13,$3 # 5 506*4724848cSchristos srl $3,$31,6 507*4724848cSchristos xor $20,$1,$2 508*4724848cSchristos sll $19,$31,7 509*4724848cSchristos and $20,$31 510*4724848cSchristos srl $18,$31,11 511*4724848cSchristos xor $3,$19 512*4724848cSchristos sll $19,$31,21 513*4724848cSchristos xor $3,$18 514*4724848cSchristos srl $18,$31,25 515*4724848cSchristos xor $3,$19 516*4724848cSchristos sll $19,$31,26 517*4724848cSchristos xor $3,$18 518*4724848cSchristos xor $20,$2 # Ch(e,f,g) 519*4724848cSchristos xor $18,$19,$3 # Sigma1(e) 520*4724848cSchristos 521*4724848cSchristos srl $3,$7,2 522*4724848cSchristos addu $17,$20 523*4724848cSchristos lw $20,20($6) # K[5] 524*4724848cSchristos sll $19,$7,10 525*4724848cSchristos addu $17,$18 526*4724848cSchristos srl $18,$7,13 527*4724848cSchristos xor $3,$19 528*4724848cSchristos sll $19,$7,19 529*4724848cSchristos xor $3,$18 530*4724848cSchristos srl $18,$7,22 531*4724848cSchristos xor $3,$19 532*4724848cSchristos sll $19,$7,30 533*4724848cSchristos xor $3,$18 534*4724848cSchristos and $18,$24,$25 535*4724848cSchristos xor $3,$19 # Sigma0(a) 536*4724848cSchristos xor $19,$24,$25 537*4724848cSchristos#endif 538*4724848cSchristos sw $13,20($29) # offload to ring buffer 539*4724848cSchristos addu $3,$18 540*4724848cSchristos and $19,$7 541*4724848cSchristos addu $17,$20 # +=K[5] 542*4724848cSchristos addu $3,$19 # +=Maj(a,b,c) 543*4724848cSchristos addu $30,$17 544*4724848cSchristos addu $3,$17 545*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 546*4724848cSchristos lw $15,28($5) 547*4724848cSchristos#else 548*4724848cSchristos lwl $15,31($5) 549*4724848cSchristos lwr $15,28($5) 550*4724848cSchristos#endif 551*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 552*4724848cSchristos wsbh $14,$14 # byte swap(6) 553*4724848cSchristos rotr $14,$14,16 554*4724848cSchristos#else 555*4724848cSchristos srl $19,$14,24 # byte swap(6) 556*4724848cSchristos srl $20,$14,8 557*4724848cSchristos andi $21,$14,0xFF00 558*4724848cSchristos sll $14,$14,24 559*4724848cSchristos andi $20,0xFF00 560*4724848cSchristos sll $21,$21,8 561*4724848cSchristos or $14,$19 562*4724848cSchristos or $20,$21 563*4724848cSchristos or $14,$20 564*4724848cSchristos#endif 565*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 566*4724848cSchristos xor $21,$31,$1 # 6 567*4724848cSchristos rotr $19,$30,6 568*4724848cSchristos addu $18,$14,$2 569*4724848cSchristos rotr $20,$30,11 570*4724848cSchristos and $21,$30 571*4724848cSchristos rotr $2,$30,25 572*4724848cSchristos xor $19,$20 573*4724848cSchristos rotr $20,$3,2 574*4724848cSchristos xor $21,$1 # Ch(e,f,g) 575*4724848cSchristos xor $19,$2 # Sigma1(e) 576*4724848cSchristos 577*4724848cSchristos rotr $2,$3,13 578*4724848cSchristos addu $18,$21 579*4724848cSchristos lw $21,24($6) # K[6] 580*4724848cSchristos xor $2,$20 581*4724848cSchristos rotr $20,$3,22 582*4724848cSchristos addu $18,$19 583*4724848cSchristos and $19,$7,$24 584*4724848cSchristos xor $2,$20 # Sigma0(a) 585*4724848cSchristos xor $20,$7,$24 586*4724848cSchristos#else 587*4724848cSchristos addu $18,$14,$2 # 6 588*4724848cSchristos srl $2,$30,6 589*4724848cSchristos xor $21,$31,$1 590*4724848cSchristos sll $20,$30,7 591*4724848cSchristos and $21,$30 592*4724848cSchristos srl $19,$30,11 593*4724848cSchristos xor $2,$20 594*4724848cSchristos sll $20,$30,21 595*4724848cSchristos xor $2,$19 596*4724848cSchristos srl $19,$30,25 597*4724848cSchristos xor $2,$20 598*4724848cSchristos sll $20,$30,26 599*4724848cSchristos xor $2,$19 600*4724848cSchristos xor $21,$1 # Ch(e,f,g) 601*4724848cSchristos xor $19,$20,$2 # Sigma1(e) 602*4724848cSchristos 603*4724848cSchristos srl $2,$3,2 604*4724848cSchristos addu $18,$21 605*4724848cSchristos lw $21,24($6) # K[6] 606*4724848cSchristos sll $20,$3,10 607*4724848cSchristos addu $18,$19 608*4724848cSchristos srl $19,$3,13 609*4724848cSchristos xor $2,$20 610*4724848cSchristos sll $20,$3,19 611*4724848cSchristos xor $2,$19 612*4724848cSchristos srl $19,$3,22 613*4724848cSchristos xor $2,$20 614*4724848cSchristos sll $20,$3,30 615*4724848cSchristos xor $2,$19 616*4724848cSchristos and $19,$7,$24 617*4724848cSchristos xor $2,$20 # Sigma0(a) 618*4724848cSchristos xor $20,$7,$24 619*4724848cSchristos#endif 620*4724848cSchristos sw $14,24($29) # offload to ring buffer 621*4724848cSchristos addu $2,$19 622*4724848cSchristos and $20,$3 623*4724848cSchristos addu $18,$21 # +=K[6] 624*4724848cSchristos addu $2,$20 # +=Maj(a,b,c) 625*4724848cSchristos addu $25,$18 626*4724848cSchristos addu $2,$18 627*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 628*4724848cSchristos lw $16,32($5) 629*4724848cSchristos#else 630*4724848cSchristos lwl $16,35($5) 631*4724848cSchristos lwr $16,32($5) 632*4724848cSchristos#endif 633*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 634*4724848cSchristos wsbh $15,$15 # byte swap(7) 635*4724848cSchristos rotr $15,$15,16 636*4724848cSchristos#else 637*4724848cSchristos srl $20,$15,24 # byte swap(7) 638*4724848cSchristos srl $21,$15,8 639*4724848cSchristos andi $22,$15,0xFF00 640*4724848cSchristos sll $15,$15,24 641*4724848cSchristos andi $21,0xFF00 642*4724848cSchristos sll $22,$22,8 643*4724848cSchristos or $15,$20 644*4724848cSchristos or $21,$22 645*4724848cSchristos or $15,$21 646*4724848cSchristos#endif 647*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 648*4724848cSchristos xor $22,$30,$31 # 7 649*4724848cSchristos rotr $20,$25,6 650*4724848cSchristos addu $19,$15,$1 651*4724848cSchristos rotr $21,$25,11 652*4724848cSchristos and $22,$25 653*4724848cSchristos rotr $1,$25,25 654*4724848cSchristos xor $20,$21 655*4724848cSchristos rotr $21,$2,2 656*4724848cSchristos xor $22,$31 # Ch(e,f,g) 657*4724848cSchristos xor $20,$1 # Sigma1(e) 658*4724848cSchristos 659*4724848cSchristos rotr $1,$2,13 660*4724848cSchristos addu $19,$22 661*4724848cSchristos lw $22,28($6) # K[7] 662*4724848cSchristos xor $1,$21 663*4724848cSchristos rotr $21,$2,22 664*4724848cSchristos addu $19,$20 665*4724848cSchristos and $20,$3,$7 666*4724848cSchristos xor $1,$21 # Sigma0(a) 667*4724848cSchristos xor $21,$3,$7 668*4724848cSchristos#else 669*4724848cSchristos addu $19,$15,$1 # 7 670*4724848cSchristos srl $1,$25,6 671*4724848cSchristos xor $22,$30,$31 672*4724848cSchristos sll $21,$25,7 673*4724848cSchristos and $22,$25 674*4724848cSchristos srl $20,$25,11 675*4724848cSchristos xor $1,$21 676*4724848cSchristos sll $21,$25,21 677*4724848cSchristos xor $1,$20 678*4724848cSchristos srl $20,$25,25 679*4724848cSchristos xor $1,$21 680*4724848cSchristos sll $21,$25,26 681*4724848cSchristos xor $1,$20 682*4724848cSchristos xor $22,$31 # Ch(e,f,g) 683*4724848cSchristos xor $20,$21,$1 # Sigma1(e) 684*4724848cSchristos 685*4724848cSchristos srl $1,$2,2 686*4724848cSchristos addu $19,$22 687*4724848cSchristos lw $22,28($6) # K[7] 688*4724848cSchristos sll $21,$2,10 689*4724848cSchristos addu $19,$20 690*4724848cSchristos srl $20,$2,13 691*4724848cSchristos xor $1,$21 692*4724848cSchristos sll $21,$2,19 693*4724848cSchristos xor $1,$20 694*4724848cSchristos srl $20,$2,22 695*4724848cSchristos xor $1,$21 696*4724848cSchristos sll $21,$2,30 697*4724848cSchristos xor $1,$20 698*4724848cSchristos and $20,$3,$7 699*4724848cSchristos xor $1,$21 # Sigma0(a) 700*4724848cSchristos xor $21,$3,$7 701*4724848cSchristos#endif 702*4724848cSchristos sw $15,28($29) # offload to ring buffer 703*4724848cSchristos addu $1,$20 704*4724848cSchristos and $21,$2 705*4724848cSchristos addu $19,$22 # +=K[7] 706*4724848cSchristos addu $1,$21 # +=Maj(a,b,c) 707*4724848cSchristos addu $24,$19 708*4724848cSchristos addu $1,$19 709*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 710*4724848cSchristos lw $17,36($5) 711*4724848cSchristos#else 712*4724848cSchristos lwl $17,39($5) 713*4724848cSchristos lwr $17,36($5) 714*4724848cSchristos#endif 715*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 716*4724848cSchristos wsbh $16,$16 # byte swap(8) 717*4724848cSchristos rotr $16,$16,16 718*4724848cSchristos#else 719*4724848cSchristos srl $21,$16,24 # byte swap(8) 720*4724848cSchristos srl $22,$16,8 721*4724848cSchristos andi $23,$16,0xFF00 722*4724848cSchristos sll $16,$16,24 723*4724848cSchristos andi $22,0xFF00 724*4724848cSchristos sll $23,$23,8 725*4724848cSchristos or $16,$21 726*4724848cSchristos or $22,$23 727*4724848cSchristos or $16,$22 728*4724848cSchristos#endif 729*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 730*4724848cSchristos xor $23,$25,$30 # 8 731*4724848cSchristos rotr $21,$24,6 732*4724848cSchristos addu $20,$16,$31 733*4724848cSchristos rotr $22,$24,11 734*4724848cSchristos and $23,$24 735*4724848cSchristos rotr $31,$24,25 736*4724848cSchristos xor $21,$22 737*4724848cSchristos rotr $22,$1,2 738*4724848cSchristos xor $23,$30 # Ch(e,f,g) 739*4724848cSchristos xor $21,$31 # Sigma1(e) 740*4724848cSchristos 741*4724848cSchristos rotr $31,$1,13 742*4724848cSchristos addu $20,$23 743*4724848cSchristos lw $23,32($6) # K[8] 744*4724848cSchristos xor $31,$22 745*4724848cSchristos rotr $22,$1,22 746*4724848cSchristos addu $20,$21 747*4724848cSchristos and $21,$2,$3 748*4724848cSchristos xor $31,$22 # Sigma0(a) 749*4724848cSchristos xor $22,$2,$3 750*4724848cSchristos#else 751*4724848cSchristos addu $20,$16,$31 # 8 752*4724848cSchristos srl $31,$24,6 753*4724848cSchristos xor $23,$25,$30 754*4724848cSchristos sll $22,$24,7 755*4724848cSchristos and $23,$24 756*4724848cSchristos srl $21,$24,11 757*4724848cSchristos xor $31,$22 758*4724848cSchristos sll $22,$24,21 759*4724848cSchristos xor $31,$21 760*4724848cSchristos srl $21,$24,25 761*4724848cSchristos xor $31,$22 762*4724848cSchristos sll $22,$24,26 763*4724848cSchristos xor $31,$21 764*4724848cSchristos xor $23,$30 # Ch(e,f,g) 765*4724848cSchristos xor $21,$22,$31 # Sigma1(e) 766*4724848cSchristos 767*4724848cSchristos srl $31,$1,2 768*4724848cSchristos addu $20,$23 769*4724848cSchristos lw $23,32($6) # K[8] 770*4724848cSchristos sll $22,$1,10 771*4724848cSchristos addu $20,$21 772*4724848cSchristos srl $21,$1,13 773*4724848cSchristos xor $31,$22 774*4724848cSchristos sll $22,$1,19 775*4724848cSchristos xor $31,$21 776*4724848cSchristos srl $21,$1,22 777*4724848cSchristos xor $31,$22 778*4724848cSchristos sll $22,$1,30 779*4724848cSchristos xor $31,$21 780*4724848cSchristos and $21,$2,$3 781*4724848cSchristos xor $31,$22 # Sigma0(a) 782*4724848cSchristos xor $22,$2,$3 783*4724848cSchristos#endif 784*4724848cSchristos sw $16,32($29) # offload to ring buffer 785*4724848cSchristos addu $31,$21 786*4724848cSchristos and $22,$1 787*4724848cSchristos addu $20,$23 # +=K[8] 788*4724848cSchristos addu $31,$22 # +=Maj(a,b,c) 789*4724848cSchristos addu $7,$20 790*4724848cSchristos addu $31,$20 791*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 792*4724848cSchristos lw $18,40($5) 793*4724848cSchristos#else 794*4724848cSchristos lwl $18,43($5) 795*4724848cSchristos lwr $18,40($5) 796*4724848cSchristos#endif 797*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 798*4724848cSchristos wsbh $17,$17 # byte swap(9) 799*4724848cSchristos rotr $17,$17,16 800*4724848cSchristos#else 801*4724848cSchristos srl $22,$17,24 # byte swap(9) 802*4724848cSchristos srl $23,$17,8 803*4724848cSchristos andi $8,$17,0xFF00 804*4724848cSchristos sll $17,$17,24 805*4724848cSchristos andi $23,0xFF00 806*4724848cSchristos sll $8,$8,8 807*4724848cSchristos or $17,$22 808*4724848cSchristos or $23,$8 809*4724848cSchristos or $17,$23 810*4724848cSchristos#endif 811*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 812*4724848cSchristos xor $8,$24,$25 # 9 813*4724848cSchristos rotr $22,$7,6 814*4724848cSchristos addu $21,$17,$30 815*4724848cSchristos rotr $23,$7,11 816*4724848cSchristos and $8,$7 817*4724848cSchristos rotr $30,$7,25 818*4724848cSchristos xor $22,$23 819*4724848cSchristos rotr $23,$31,2 820*4724848cSchristos xor $8,$25 # Ch(e,f,g) 821*4724848cSchristos xor $22,$30 # Sigma1(e) 822*4724848cSchristos 823*4724848cSchristos rotr $30,$31,13 824*4724848cSchristos addu $21,$8 825*4724848cSchristos lw $8,36($6) # K[9] 826*4724848cSchristos xor $30,$23 827*4724848cSchristos rotr $23,$31,22 828*4724848cSchristos addu $21,$22 829*4724848cSchristos and $22,$1,$2 830*4724848cSchristos xor $30,$23 # Sigma0(a) 831*4724848cSchristos xor $23,$1,$2 832*4724848cSchristos#else 833*4724848cSchristos addu $21,$17,$30 # 9 834*4724848cSchristos srl $30,$7,6 835*4724848cSchristos xor $8,$24,$25 836*4724848cSchristos sll $23,$7,7 837*4724848cSchristos and $8,$7 838*4724848cSchristos srl $22,$7,11 839*4724848cSchristos xor $30,$23 840*4724848cSchristos sll $23,$7,21 841*4724848cSchristos xor $30,$22 842*4724848cSchristos srl $22,$7,25 843*4724848cSchristos xor $30,$23 844*4724848cSchristos sll $23,$7,26 845*4724848cSchristos xor $30,$22 846*4724848cSchristos xor $8,$25 # Ch(e,f,g) 847*4724848cSchristos xor $22,$23,$30 # Sigma1(e) 848*4724848cSchristos 849*4724848cSchristos srl $30,$31,2 850*4724848cSchristos addu $21,$8 851*4724848cSchristos lw $8,36($6) # K[9] 852*4724848cSchristos sll $23,$31,10 853*4724848cSchristos addu $21,$22 854*4724848cSchristos srl $22,$31,13 855*4724848cSchristos xor $30,$23 856*4724848cSchristos sll $23,$31,19 857*4724848cSchristos xor $30,$22 858*4724848cSchristos srl $22,$31,22 859*4724848cSchristos xor $30,$23 860*4724848cSchristos sll $23,$31,30 861*4724848cSchristos xor $30,$22 862*4724848cSchristos and $22,$1,$2 863*4724848cSchristos xor $30,$23 # Sigma0(a) 864*4724848cSchristos xor $23,$1,$2 865*4724848cSchristos#endif 866*4724848cSchristos sw $17,36($29) # offload to ring buffer 867*4724848cSchristos addu $30,$22 868*4724848cSchristos and $23,$31 869*4724848cSchristos addu $21,$8 # +=K[9] 870*4724848cSchristos addu $30,$23 # +=Maj(a,b,c) 871*4724848cSchristos addu $3,$21 872*4724848cSchristos addu $30,$21 873*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 874*4724848cSchristos lw $19,44($5) 875*4724848cSchristos#else 876*4724848cSchristos lwl $19,47($5) 877*4724848cSchristos lwr $19,44($5) 878*4724848cSchristos#endif 879*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 880*4724848cSchristos wsbh $18,$18 # byte swap(10) 881*4724848cSchristos rotr $18,$18,16 882*4724848cSchristos#else 883*4724848cSchristos srl $23,$18,24 # byte swap(10) 884*4724848cSchristos srl $8,$18,8 885*4724848cSchristos andi $9,$18,0xFF00 886*4724848cSchristos sll $18,$18,24 887*4724848cSchristos andi $8,0xFF00 888*4724848cSchristos sll $9,$9,8 889*4724848cSchristos or $18,$23 890*4724848cSchristos or $8,$9 891*4724848cSchristos or $18,$8 892*4724848cSchristos#endif 893*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 894*4724848cSchristos xor $9,$7,$24 # 10 895*4724848cSchristos rotr $23,$3,6 896*4724848cSchristos addu $22,$18,$25 897*4724848cSchristos rotr $8,$3,11 898*4724848cSchristos and $9,$3 899*4724848cSchristos rotr $25,$3,25 900*4724848cSchristos xor $23,$8 901*4724848cSchristos rotr $8,$30,2 902*4724848cSchristos xor $9,$24 # Ch(e,f,g) 903*4724848cSchristos xor $23,$25 # Sigma1(e) 904*4724848cSchristos 905*4724848cSchristos rotr $25,$30,13 906*4724848cSchristos addu $22,$9 907*4724848cSchristos lw $9,40($6) # K[10] 908*4724848cSchristos xor $25,$8 909*4724848cSchristos rotr $8,$30,22 910*4724848cSchristos addu $22,$23 911*4724848cSchristos and $23,$31,$1 912*4724848cSchristos xor $25,$8 # Sigma0(a) 913*4724848cSchristos xor $8,$31,$1 914*4724848cSchristos#else 915*4724848cSchristos addu $22,$18,$25 # 10 916*4724848cSchristos srl $25,$3,6 917*4724848cSchristos xor $9,$7,$24 918*4724848cSchristos sll $8,$3,7 919*4724848cSchristos and $9,$3 920*4724848cSchristos srl $23,$3,11 921*4724848cSchristos xor $25,$8 922*4724848cSchristos sll $8,$3,21 923*4724848cSchristos xor $25,$23 924*4724848cSchristos srl $23,$3,25 925*4724848cSchristos xor $25,$8 926*4724848cSchristos sll $8,$3,26 927*4724848cSchristos xor $25,$23 928*4724848cSchristos xor $9,$24 # Ch(e,f,g) 929*4724848cSchristos xor $23,$8,$25 # Sigma1(e) 930*4724848cSchristos 931*4724848cSchristos srl $25,$30,2 932*4724848cSchristos addu $22,$9 933*4724848cSchristos lw $9,40($6) # K[10] 934*4724848cSchristos sll $8,$30,10 935*4724848cSchristos addu $22,$23 936*4724848cSchristos srl $23,$30,13 937*4724848cSchristos xor $25,$8 938*4724848cSchristos sll $8,$30,19 939*4724848cSchristos xor $25,$23 940*4724848cSchristos srl $23,$30,22 941*4724848cSchristos xor $25,$8 942*4724848cSchristos sll $8,$30,30 943*4724848cSchristos xor $25,$23 944*4724848cSchristos and $23,$31,$1 945*4724848cSchristos xor $25,$8 # Sigma0(a) 946*4724848cSchristos xor $8,$31,$1 947*4724848cSchristos#endif 948*4724848cSchristos sw $18,40($29) # offload to ring buffer 949*4724848cSchristos addu $25,$23 950*4724848cSchristos and $8,$30 951*4724848cSchristos addu $22,$9 # +=K[10] 952*4724848cSchristos addu $25,$8 # +=Maj(a,b,c) 953*4724848cSchristos addu $2,$22 954*4724848cSchristos addu $25,$22 955*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 956*4724848cSchristos lw $20,48($5) 957*4724848cSchristos#else 958*4724848cSchristos lwl $20,51($5) 959*4724848cSchristos lwr $20,48($5) 960*4724848cSchristos#endif 961*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 962*4724848cSchristos wsbh $19,$19 # byte swap(11) 963*4724848cSchristos rotr $19,$19,16 964*4724848cSchristos#else 965*4724848cSchristos srl $8,$19,24 # byte swap(11) 966*4724848cSchristos srl $9,$19,8 967*4724848cSchristos andi $10,$19,0xFF00 968*4724848cSchristos sll $19,$19,24 969*4724848cSchristos andi $9,0xFF00 970*4724848cSchristos sll $10,$10,8 971*4724848cSchristos or $19,$8 972*4724848cSchristos or $9,$10 973*4724848cSchristos or $19,$9 974*4724848cSchristos#endif 975*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 976*4724848cSchristos xor $10,$3,$7 # 11 977*4724848cSchristos rotr $8,$2,6 978*4724848cSchristos addu $23,$19,$24 979*4724848cSchristos rotr $9,$2,11 980*4724848cSchristos and $10,$2 981*4724848cSchristos rotr $24,$2,25 982*4724848cSchristos xor $8,$9 983*4724848cSchristos rotr $9,$25,2 984*4724848cSchristos xor $10,$7 # Ch(e,f,g) 985*4724848cSchristos xor $8,$24 # Sigma1(e) 986*4724848cSchristos 987*4724848cSchristos rotr $24,$25,13 988*4724848cSchristos addu $23,$10 989*4724848cSchristos lw $10,44($6) # K[11] 990*4724848cSchristos xor $24,$9 991*4724848cSchristos rotr $9,$25,22 992*4724848cSchristos addu $23,$8 993*4724848cSchristos and $8,$30,$31 994*4724848cSchristos xor $24,$9 # Sigma0(a) 995*4724848cSchristos xor $9,$30,$31 996*4724848cSchristos#else 997*4724848cSchristos addu $23,$19,$24 # 11 998*4724848cSchristos srl $24,$2,6 999*4724848cSchristos xor $10,$3,$7 1000*4724848cSchristos sll $9,$2,7 1001*4724848cSchristos and $10,$2 1002*4724848cSchristos srl $8,$2,11 1003*4724848cSchristos xor $24,$9 1004*4724848cSchristos sll $9,$2,21 1005*4724848cSchristos xor $24,$8 1006*4724848cSchristos srl $8,$2,25 1007*4724848cSchristos xor $24,$9 1008*4724848cSchristos sll $9,$2,26 1009*4724848cSchristos xor $24,$8 1010*4724848cSchristos xor $10,$7 # Ch(e,f,g) 1011*4724848cSchristos xor $8,$9,$24 # Sigma1(e) 1012*4724848cSchristos 1013*4724848cSchristos srl $24,$25,2 1014*4724848cSchristos addu $23,$10 1015*4724848cSchristos lw $10,44($6) # K[11] 1016*4724848cSchristos sll $9,$25,10 1017*4724848cSchristos addu $23,$8 1018*4724848cSchristos srl $8,$25,13 1019*4724848cSchristos xor $24,$9 1020*4724848cSchristos sll $9,$25,19 1021*4724848cSchristos xor $24,$8 1022*4724848cSchristos srl $8,$25,22 1023*4724848cSchristos xor $24,$9 1024*4724848cSchristos sll $9,$25,30 1025*4724848cSchristos xor $24,$8 1026*4724848cSchristos and $8,$30,$31 1027*4724848cSchristos xor $24,$9 # Sigma0(a) 1028*4724848cSchristos xor $9,$30,$31 1029*4724848cSchristos#endif 1030*4724848cSchristos sw $19,44($29) # offload to ring buffer 1031*4724848cSchristos addu $24,$8 1032*4724848cSchristos and $9,$25 1033*4724848cSchristos addu $23,$10 # +=K[11] 1034*4724848cSchristos addu $24,$9 # +=Maj(a,b,c) 1035*4724848cSchristos addu $1,$23 1036*4724848cSchristos addu $24,$23 1037*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 1038*4724848cSchristos lw $21,52($5) 1039*4724848cSchristos#else 1040*4724848cSchristos lwl $21,55($5) 1041*4724848cSchristos lwr $21,52($5) 1042*4724848cSchristos#endif 1043*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1044*4724848cSchristos wsbh $20,$20 # byte swap(12) 1045*4724848cSchristos rotr $20,$20,16 1046*4724848cSchristos#else 1047*4724848cSchristos srl $9,$20,24 # byte swap(12) 1048*4724848cSchristos srl $10,$20,8 1049*4724848cSchristos andi $11,$20,0xFF00 1050*4724848cSchristos sll $20,$20,24 1051*4724848cSchristos andi $10,0xFF00 1052*4724848cSchristos sll $11,$11,8 1053*4724848cSchristos or $20,$9 1054*4724848cSchristos or $10,$11 1055*4724848cSchristos or $20,$10 1056*4724848cSchristos#endif 1057*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1058*4724848cSchristos xor $11,$2,$3 # 12 1059*4724848cSchristos rotr $9,$1,6 1060*4724848cSchristos addu $8,$20,$7 1061*4724848cSchristos rotr $10,$1,11 1062*4724848cSchristos and $11,$1 1063*4724848cSchristos rotr $7,$1,25 1064*4724848cSchristos xor $9,$10 1065*4724848cSchristos rotr $10,$24,2 1066*4724848cSchristos xor $11,$3 # Ch(e,f,g) 1067*4724848cSchristos xor $9,$7 # Sigma1(e) 1068*4724848cSchristos 1069*4724848cSchristos rotr $7,$24,13 1070*4724848cSchristos addu $8,$11 1071*4724848cSchristos lw $11,48($6) # K[12] 1072*4724848cSchristos xor $7,$10 1073*4724848cSchristos rotr $10,$24,22 1074*4724848cSchristos addu $8,$9 1075*4724848cSchristos and $9,$25,$30 1076*4724848cSchristos xor $7,$10 # Sigma0(a) 1077*4724848cSchristos xor $10,$25,$30 1078*4724848cSchristos#else 1079*4724848cSchristos addu $8,$20,$7 # 12 1080*4724848cSchristos srl $7,$1,6 1081*4724848cSchristos xor $11,$2,$3 1082*4724848cSchristos sll $10,$1,7 1083*4724848cSchristos and $11,$1 1084*4724848cSchristos srl $9,$1,11 1085*4724848cSchristos xor $7,$10 1086*4724848cSchristos sll $10,$1,21 1087*4724848cSchristos xor $7,$9 1088*4724848cSchristos srl $9,$1,25 1089*4724848cSchristos xor $7,$10 1090*4724848cSchristos sll $10,$1,26 1091*4724848cSchristos xor $7,$9 1092*4724848cSchristos xor $11,$3 # Ch(e,f,g) 1093*4724848cSchristos xor $9,$10,$7 # Sigma1(e) 1094*4724848cSchristos 1095*4724848cSchristos srl $7,$24,2 1096*4724848cSchristos addu $8,$11 1097*4724848cSchristos lw $11,48($6) # K[12] 1098*4724848cSchristos sll $10,$24,10 1099*4724848cSchristos addu $8,$9 1100*4724848cSchristos srl $9,$24,13 1101*4724848cSchristos xor $7,$10 1102*4724848cSchristos sll $10,$24,19 1103*4724848cSchristos xor $7,$9 1104*4724848cSchristos srl $9,$24,22 1105*4724848cSchristos xor $7,$10 1106*4724848cSchristos sll $10,$24,30 1107*4724848cSchristos xor $7,$9 1108*4724848cSchristos and $9,$25,$30 1109*4724848cSchristos xor $7,$10 # Sigma0(a) 1110*4724848cSchristos xor $10,$25,$30 1111*4724848cSchristos#endif 1112*4724848cSchristos sw $20,48($29) # offload to ring buffer 1113*4724848cSchristos addu $7,$9 1114*4724848cSchristos and $10,$24 1115*4724848cSchristos addu $8,$11 # +=K[12] 1116*4724848cSchristos addu $7,$10 # +=Maj(a,b,c) 1117*4724848cSchristos addu $31,$8 1118*4724848cSchristos addu $7,$8 1119*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 1120*4724848cSchristos lw $22,56($5) 1121*4724848cSchristos#else 1122*4724848cSchristos lwl $22,59($5) 1123*4724848cSchristos lwr $22,56($5) 1124*4724848cSchristos#endif 1125*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1126*4724848cSchristos wsbh $21,$21 # byte swap(13) 1127*4724848cSchristos rotr $21,$21,16 1128*4724848cSchristos#else 1129*4724848cSchristos srl $10,$21,24 # byte swap(13) 1130*4724848cSchristos srl $11,$21,8 1131*4724848cSchristos andi $12,$21,0xFF00 1132*4724848cSchristos sll $21,$21,24 1133*4724848cSchristos andi $11,0xFF00 1134*4724848cSchristos sll $12,$12,8 1135*4724848cSchristos or $21,$10 1136*4724848cSchristos or $11,$12 1137*4724848cSchristos or $21,$11 1138*4724848cSchristos#endif 1139*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1140*4724848cSchristos xor $12,$1,$2 # 13 1141*4724848cSchristos rotr $10,$31,6 1142*4724848cSchristos addu $9,$21,$3 1143*4724848cSchristos rotr $11,$31,11 1144*4724848cSchristos and $12,$31 1145*4724848cSchristos rotr $3,$31,25 1146*4724848cSchristos xor $10,$11 1147*4724848cSchristos rotr $11,$7,2 1148*4724848cSchristos xor $12,$2 # Ch(e,f,g) 1149*4724848cSchristos xor $10,$3 # Sigma1(e) 1150*4724848cSchristos 1151*4724848cSchristos rotr $3,$7,13 1152*4724848cSchristos addu $9,$12 1153*4724848cSchristos lw $12,52($6) # K[13] 1154*4724848cSchristos xor $3,$11 1155*4724848cSchristos rotr $11,$7,22 1156*4724848cSchristos addu $9,$10 1157*4724848cSchristos and $10,$24,$25 1158*4724848cSchristos xor $3,$11 # Sigma0(a) 1159*4724848cSchristos xor $11,$24,$25 1160*4724848cSchristos#else 1161*4724848cSchristos addu $9,$21,$3 # 13 1162*4724848cSchristos srl $3,$31,6 1163*4724848cSchristos xor $12,$1,$2 1164*4724848cSchristos sll $11,$31,7 1165*4724848cSchristos and $12,$31 1166*4724848cSchristos srl $10,$31,11 1167*4724848cSchristos xor $3,$11 1168*4724848cSchristos sll $11,$31,21 1169*4724848cSchristos xor $3,$10 1170*4724848cSchristos srl $10,$31,25 1171*4724848cSchristos xor $3,$11 1172*4724848cSchristos sll $11,$31,26 1173*4724848cSchristos xor $3,$10 1174*4724848cSchristos xor $12,$2 # Ch(e,f,g) 1175*4724848cSchristos xor $10,$11,$3 # Sigma1(e) 1176*4724848cSchristos 1177*4724848cSchristos srl $3,$7,2 1178*4724848cSchristos addu $9,$12 1179*4724848cSchristos lw $12,52($6) # K[13] 1180*4724848cSchristos sll $11,$7,10 1181*4724848cSchristos addu $9,$10 1182*4724848cSchristos srl $10,$7,13 1183*4724848cSchristos xor $3,$11 1184*4724848cSchristos sll $11,$7,19 1185*4724848cSchristos xor $3,$10 1186*4724848cSchristos srl $10,$7,22 1187*4724848cSchristos xor $3,$11 1188*4724848cSchristos sll $11,$7,30 1189*4724848cSchristos xor $3,$10 1190*4724848cSchristos and $10,$24,$25 1191*4724848cSchristos xor $3,$11 # Sigma0(a) 1192*4724848cSchristos xor $11,$24,$25 1193*4724848cSchristos#endif 1194*4724848cSchristos sw $21,52($29) # offload to ring buffer 1195*4724848cSchristos addu $3,$10 1196*4724848cSchristos and $11,$7 1197*4724848cSchristos addu $9,$12 # +=K[13] 1198*4724848cSchristos addu $3,$11 # +=Maj(a,b,c) 1199*4724848cSchristos addu $30,$9 1200*4724848cSchristos addu $3,$9 1201*4724848cSchristos lw $8,0($29) # prefetch from ring buffer 1202*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 1203*4724848cSchristos lw $23,60($5) 1204*4724848cSchristos#else 1205*4724848cSchristos lwl $23,63($5) 1206*4724848cSchristos lwr $23,60($5) 1207*4724848cSchristos#endif 1208*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1209*4724848cSchristos wsbh $22,$22 # byte swap(14) 1210*4724848cSchristos rotr $22,$22,16 1211*4724848cSchristos#else 1212*4724848cSchristos srl $11,$22,24 # byte swap(14) 1213*4724848cSchristos srl $12,$22,8 1214*4724848cSchristos andi $13,$22,0xFF00 1215*4724848cSchristos sll $22,$22,24 1216*4724848cSchristos andi $12,0xFF00 1217*4724848cSchristos sll $13,$13,8 1218*4724848cSchristos or $22,$11 1219*4724848cSchristos or $12,$13 1220*4724848cSchristos or $22,$12 1221*4724848cSchristos#endif 1222*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1223*4724848cSchristos xor $13,$31,$1 # 14 1224*4724848cSchristos rotr $11,$30,6 1225*4724848cSchristos addu $10,$22,$2 1226*4724848cSchristos rotr $12,$30,11 1227*4724848cSchristos and $13,$30 1228*4724848cSchristos rotr $2,$30,25 1229*4724848cSchristos xor $11,$12 1230*4724848cSchristos rotr $12,$3,2 1231*4724848cSchristos xor $13,$1 # Ch(e,f,g) 1232*4724848cSchristos xor $11,$2 # Sigma1(e) 1233*4724848cSchristos 1234*4724848cSchristos rotr $2,$3,13 1235*4724848cSchristos addu $10,$13 1236*4724848cSchristos lw $13,56($6) # K[14] 1237*4724848cSchristos xor $2,$12 1238*4724848cSchristos rotr $12,$3,22 1239*4724848cSchristos addu $10,$11 1240*4724848cSchristos and $11,$7,$24 1241*4724848cSchristos xor $2,$12 # Sigma0(a) 1242*4724848cSchristos xor $12,$7,$24 1243*4724848cSchristos#else 1244*4724848cSchristos addu $10,$22,$2 # 14 1245*4724848cSchristos srl $2,$30,6 1246*4724848cSchristos xor $13,$31,$1 1247*4724848cSchristos sll $12,$30,7 1248*4724848cSchristos and $13,$30 1249*4724848cSchristos srl $11,$30,11 1250*4724848cSchristos xor $2,$12 1251*4724848cSchristos sll $12,$30,21 1252*4724848cSchristos xor $2,$11 1253*4724848cSchristos srl $11,$30,25 1254*4724848cSchristos xor $2,$12 1255*4724848cSchristos sll $12,$30,26 1256*4724848cSchristos xor $2,$11 1257*4724848cSchristos xor $13,$1 # Ch(e,f,g) 1258*4724848cSchristos xor $11,$12,$2 # Sigma1(e) 1259*4724848cSchristos 1260*4724848cSchristos srl $2,$3,2 1261*4724848cSchristos addu $10,$13 1262*4724848cSchristos lw $13,56($6) # K[14] 1263*4724848cSchristos sll $12,$3,10 1264*4724848cSchristos addu $10,$11 1265*4724848cSchristos srl $11,$3,13 1266*4724848cSchristos xor $2,$12 1267*4724848cSchristos sll $12,$3,19 1268*4724848cSchristos xor $2,$11 1269*4724848cSchristos srl $11,$3,22 1270*4724848cSchristos xor $2,$12 1271*4724848cSchristos sll $12,$3,30 1272*4724848cSchristos xor $2,$11 1273*4724848cSchristos and $11,$7,$24 1274*4724848cSchristos xor $2,$12 # Sigma0(a) 1275*4724848cSchristos xor $12,$7,$24 1276*4724848cSchristos#endif 1277*4724848cSchristos sw $22,56($29) # offload to ring buffer 1278*4724848cSchristos addu $2,$11 1279*4724848cSchristos and $12,$3 1280*4724848cSchristos addu $10,$13 # +=K[14] 1281*4724848cSchristos addu $2,$12 # +=Maj(a,b,c) 1282*4724848cSchristos addu $25,$10 1283*4724848cSchristos addu $2,$10 1284*4724848cSchristos lw $9,4($29) # prefetch from ring buffer 1285*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1286*4724848cSchristos wsbh $23,$23 # byte swap(15) 1287*4724848cSchristos rotr $23,$23,16 1288*4724848cSchristos#else 1289*4724848cSchristos srl $12,$23,24 # byte swap(15) 1290*4724848cSchristos srl $13,$23,8 1291*4724848cSchristos andi $14,$23,0xFF00 1292*4724848cSchristos sll $23,$23,24 1293*4724848cSchristos andi $13,0xFF00 1294*4724848cSchristos sll $14,$14,8 1295*4724848cSchristos or $23,$12 1296*4724848cSchristos or $13,$14 1297*4724848cSchristos or $23,$13 1298*4724848cSchristos#endif 1299*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1300*4724848cSchristos xor $14,$30,$31 # 15 1301*4724848cSchristos rotr $12,$25,6 1302*4724848cSchristos addu $11,$23,$1 1303*4724848cSchristos rotr $13,$25,11 1304*4724848cSchristos and $14,$25 1305*4724848cSchristos rotr $1,$25,25 1306*4724848cSchristos xor $12,$13 1307*4724848cSchristos rotr $13,$2,2 1308*4724848cSchristos xor $14,$31 # Ch(e,f,g) 1309*4724848cSchristos xor $12,$1 # Sigma1(e) 1310*4724848cSchristos 1311*4724848cSchristos rotr $1,$2,13 1312*4724848cSchristos addu $11,$14 1313*4724848cSchristos lw $14,60($6) # K[15] 1314*4724848cSchristos xor $1,$13 1315*4724848cSchristos rotr $13,$2,22 1316*4724848cSchristos addu $11,$12 1317*4724848cSchristos and $12,$3,$7 1318*4724848cSchristos xor $1,$13 # Sigma0(a) 1319*4724848cSchristos xor $13,$3,$7 1320*4724848cSchristos#else 1321*4724848cSchristos addu $11,$23,$1 # 15 1322*4724848cSchristos srl $1,$25,6 1323*4724848cSchristos xor $14,$30,$31 1324*4724848cSchristos sll $13,$25,7 1325*4724848cSchristos and $14,$25 1326*4724848cSchristos srl $12,$25,11 1327*4724848cSchristos xor $1,$13 1328*4724848cSchristos sll $13,$25,21 1329*4724848cSchristos xor $1,$12 1330*4724848cSchristos srl $12,$25,25 1331*4724848cSchristos xor $1,$13 1332*4724848cSchristos sll $13,$25,26 1333*4724848cSchristos xor $1,$12 1334*4724848cSchristos xor $14,$31 # Ch(e,f,g) 1335*4724848cSchristos xor $12,$13,$1 # Sigma1(e) 1336*4724848cSchristos 1337*4724848cSchristos srl $1,$2,2 1338*4724848cSchristos addu $11,$14 1339*4724848cSchristos lw $14,60($6) # K[15] 1340*4724848cSchristos sll $13,$2,10 1341*4724848cSchristos addu $11,$12 1342*4724848cSchristos srl $12,$2,13 1343*4724848cSchristos xor $1,$13 1344*4724848cSchristos sll $13,$2,19 1345*4724848cSchristos xor $1,$12 1346*4724848cSchristos srl $12,$2,22 1347*4724848cSchristos xor $1,$13 1348*4724848cSchristos sll $13,$2,30 1349*4724848cSchristos xor $1,$12 1350*4724848cSchristos and $12,$3,$7 1351*4724848cSchristos xor $1,$13 # Sigma0(a) 1352*4724848cSchristos xor $13,$3,$7 1353*4724848cSchristos#endif 1354*4724848cSchristos sw $23,60($29) # offload to ring buffer 1355*4724848cSchristos addu $1,$12 1356*4724848cSchristos and $13,$2 1357*4724848cSchristos addu $11,$14 # +=K[15] 1358*4724848cSchristos addu $1,$13 # +=Maj(a,b,c) 1359*4724848cSchristos addu $24,$11 1360*4724848cSchristos addu $1,$11 1361*4724848cSchristos lw $10,8($29) # prefetch from ring buffer 1362*4724848cSchristos b .L16_xx 1363*4724848cSchristos.align 4 1364*4724848cSchristos.L16_xx: 1365*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1366*4724848cSchristos srl $14,$9,3 # Xupdate(16) 1367*4724848cSchristos rotr $12,$9,7 1368*4724848cSchristos addu $8,$17 # +=X[i+9] 1369*4724848cSchristos xor $14,$12 1370*4724848cSchristos rotr $12,$9,18 1371*4724848cSchristos 1372*4724848cSchristos srl $15,$22,10 1373*4724848cSchristos rotr $13,$22,17 1374*4724848cSchristos xor $14,$12 # sigma0(X[i+1]) 1375*4724848cSchristos rotr $12,$22,19 1376*4724848cSchristos xor $15,$13 1377*4724848cSchristos addu $8,$14 1378*4724848cSchristos#else 1379*4724848cSchristos srl $14,$9,3 # Xupdate(16) 1380*4724848cSchristos addu $8,$17 # +=X[i+9] 1381*4724848cSchristos sll $13,$9,14 1382*4724848cSchristos srl $12,$9,7 1383*4724848cSchristos xor $14,$13 1384*4724848cSchristos sll $13,11 1385*4724848cSchristos xor $14,$12 1386*4724848cSchristos srl $12,$9,18 1387*4724848cSchristos xor $14,$13 1388*4724848cSchristos 1389*4724848cSchristos srl $15,$22,10 1390*4724848cSchristos xor $14,$12 # sigma0(X[i+1]) 1391*4724848cSchristos sll $13,$22,13 1392*4724848cSchristos addu $8,$14 1393*4724848cSchristos srl $12,$22,17 1394*4724848cSchristos xor $15,$13 1395*4724848cSchristos sll $13,2 1396*4724848cSchristos xor $15,$12 1397*4724848cSchristos srl $12,$22,19 1398*4724848cSchristos xor $15,$13 1399*4724848cSchristos#endif 1400*4724848cSchristos xor $15,$12 # sigma1(X[i+14]) 1401*4724848cSchristos addu $8,$15 1402*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1403*4724848cSchristos xor $15,$25,$30 # 16 1404*4724848cSchristos rotr $13,$24,6 1405*4724848cSchristos addu $12,$8,$31 1406*4724848cSchristos rotr $14,$24,11 1407*4724848cSchristos and $15,$24 1408*4724848cSchristos rotr $31,$24,25 1409*4724848cSchristos xor $13,$14 1410*4724848cSchristos rotr $14,$1,2 1411*4724848cSchristos xor $15,$30 # Ch(e,f,g) 1412*4724848cSchristos xor $13,$31 # Sigma1(e) 1413*4724848cSchristos 1414*4724848cSchristos rotr $31,$1,13 1415*4724848cSchristos addu $12,$15 1416*4724848cSchristos lw $15,64($6) # K[16] 1417*4724848cSchristos xor $31,$14 1418*4724848cSchristos rotr $14,$1,22 1419*4724848cSchristos addu $12,$13 1420*4724848cSchristos and $13,$2,$3 1421*4724848cSchristos xor $31,$14 # Sigma0(a) 1422*4724848cSchristos xor $14,$2,$3 1423*4724848cSchristos#else 1424*4724848cSchristos addu $12,$8,$31 # 16 1425*4724848cSchristos srl $31,$24,6 1426*4724848cSchristos xor $15,$25,$30 1427*4724848cSchristos sll $14,$24,7 1428*4724848cSchristos and $15,$24 1429*4724848cSchristos srl $13,$24,11 1430*4724848cSchristos xor $31,$14 1431*4724848cSchristos sll $14,$24,21 1432*4724848cSchristos xor $31,$13 1433*4724848cSchristos srl $13,$24,25 1434*4724848cSchristos xor $31,$14 1435*4724848cSchristos sll $14,$24,26 1436*4724848cSchristos xor $31,$13 1437*4724848cSchristos xor $15,$30 # Ch(e,f,g) 1438*4724848cSchristos xor $13,$14,$31 # Sigma1(e) 1439*4724848cSchristos 1440*4724848cSchristos srl $31,$1,2 1441*4724848cSchristos addu $12,$15 1442*4724848cSchristos lw $15,64($6) # K[16] 1443*4724848cSchristos sll $14,$1,10 1444*4724848cSchristos addu $12,$13 1445*4724848cSchristos srl $13,$1,13 1446*4724848cSchristos xor $31,$14 1447*4724848cSchristos sll $14,$1,19 1448*4724848cSchristos xor $31,$13 1449*4724848cSchristos srl $13,$1,22 1450*4724848cSchristos xor $31,$14 1451*4724848cSchristos sll $14,$1,30 1452*4724848cSchristos xor $31,$13 1453*4724848cSchristos and $13,$2,$3 1454*4724848cSchristos xor $31,$14 # Sigma0(a) 1455*4724848cSchristos xor $14,$2,$3 1456*4724848cSchristos#endif 1457*4724848cSchristos sw $8,0($29) # offload to ring buffer 1458*4724848cSchristos addu $31,$13 1459*4724848cSchristos and $14,$1 1460*4724848cSchristos addu $12,$15 # +=K[16] 1461*4724848cSchristos addu $31,$14 # +=Maj(a,b,c) 1462*4724848cSchristos addu $7,$12 1463*4724848cSchristos addu $31,$12 1464*4724848cSchristos lw $11,12($29) # prefetch from ring buffer 1465*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1466*4724848cSchristos srl $15,$10,3 # Xupdate(17) 1467*4724848cSchristos rotr $13,$10,7 1468*4724848cSchristos addu $9,$18 # +=X[i+9] 1469*4724848cSchristos xor $15,$13 1470*4724848cSchristos rotr $13,$10,18 1471*4724848cSchristos 1472*4724848cSchristos srl $16,$23,10 1473*4724848cSchristos rotr $14,$23,17 1474*4724848cSchristos xor $15,$13 # sigma0(X[i+1]) 1475*4724848cSchristos rotr $13,$23,19 1476*4724848cSchristos xor $16,$14 1477*4724848cSchristos addu $9,$15 1478*4724848cSchristos#else 1479*4724848cSchristos srl $15,$10,3 # Xupdate(17) 1480*4724848cSchristos addu $9,$18 # +=X[i+9] 1481*4724848cSchristos sll $14,$10,14 1482*4724848cSchristos srl $13,$10,7 1483*4724848cSchristos xor $15,$14 1484*4724848cSchristos sll $14,11 1485*4724848cSchristos xor $15,$13 1486*4724848cSchristos srl $13,$10,18 1487*4724848cSchristos xor $15,$14 1488*4724848cSchristos 1489*4724848cSchristos srl $16,$23,10 1490*4724848cSchristos xor $15,$13 # sigma0(X[i+1]) 1491*4724848cSchristos sll $14,$23,13 1492*4724848cSchristos addu $9,$15 1493*4724848cSchristos srl $13,$23,17 1494*4724848cSchristos xor $16,$14 1495*4724848cSchristos sll $14,2 1496*4724848cSchristos xor $16,$13 1497*4724848cSchristos srl $13,$23,19 1498*4724848cSchristos xor $16,$14 1499*4724848cSchristos#endif 1500*4724848cSchristos xor $16,$13 # sigma1(X[i+14]) 1501*4724848cSchristos addu $9,$16 1502*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1503*4724848cSchristos xor $16,$24,$25 # 17 1504*4724848cSchristos rotr $14,$7,6 1505*4724848cSchristos addu $13,$9,$30 1506*4724848cSchristos rotr $15,$7,11 1507*4724848cSchristos and $16,$7 1508*4724848cSchristos rotr $30,$7,25 1509*4724848cSchristos xor $14,$15 1510*4724848cSchristos rotr $15,$31,2 1511*4724848cSchristos xor $16,$25 # Ch(e,f,g) 1512*4724848cSchristos xor $14,$30 # Sigma1(e) 1513*4724848cSchristos 1514*4724848cSchristos rotr $30,$31,13 1515*4724848cSchristos addu $13,$16 1516*4724848cSchristos lw $16,68($6) # K[17] 1517*4724848cSchristos xor $30,$15 1518*4724848cSchristos rotr $15,$31,22 1519*4724848cSchristos addu $13,$14 1520*4724848cSchristos and $14,$1,$2 1521*4724848cSchristos xor $30,$15 # Sigma0(a) 1522*4724848cSchristos xor $15,$1,$2 1523*4724848cSchristos#else 1524*4724848cSchristos addu $13,$9,$30 # 17 1525*4724848cSchristos srl $30,$7,6 1526*4724848cSchristos xor $16,$24,$25 1527*4724848cSchristos sll $15,$7,7 1528*4724848cSchristos and $16,$7 1529*4724848cSchristos srl $14,$7,11 1530*4724848cSchristos xor $30,$15 1531*4724848cSchristos sll $15,$7,21 1532*4724848cSchristos xor $30,$14 1533*4724848cSchristos srl $14,$7,25 1534*4724848cSchristos xor $30,$15 1535*4724848cSchristos sll $15,$7,26 1536*4724848cSchristos xor $30,$14 1537*4724848cSchristos xor $16,$25 # Ch(e,f,g) 1538*4724848cSchristos xor $14,$15,$30 # Sigma1(e) 1539*4724848cSchristos 1540*4724848cSchristos srl $30,$31,2 1541*4724848cSchristos addu $13,$16 1542*4724848cSchristos lw $16,68($6) # K[17] 1543*4724848cSchristos sll $15,$31,10 1544*4724848cSchristos addu $13,$14 1545*4724848cSchristos srl $14,$31,13 1546*4724848cSchristos xor $30,$15 1547*4724848cSchristos sll $15,$31,19 1548*4724848cSchristos xor $30,$14 1549*4724848cSchristos srl $14,$31,22 1550*4724848cSchristos xor $30,$15 1551*4724848cSchristos sll $15,$31,30 1552*4724848cSchristos xor $30,$14 1553*4724848cSchristos and $14,$1,$2 1554*4724848cSchristos xor $30,$15 # Sigma0(a) 1555*4724848cSchristos xor $15,$1,$2 1556*4724848cSchristos#endif 1557*4724848cSchristos sw $9,4($29) # offload to ring buffer 1558*4724848cSchristos addu $30,$14 1559*4724848cSchristos and $15,$31 1560*4724848cSchristos addu $13,$16 # +=K[17] 1561*4724848cSchristos addu $30,$15 # +=Maj(a,b,c) 1562*4724848cSchristos addu $3,$13 1563*4724848cSchristos addu $30,$13 1564*4724848cSchristos lw $12,16($29) # prefetch from ring buffer 1565*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1566*4724848cSchristos srl $16,$11,3 # Xupdate(18) 1567*4724848cSchristos rotr $14,$11,7 1568*4724848cSchristos addu $10,$19 # +=X[i+9] 1569*4724848cSchristos xor $16,$14 1570*4724848cSchristos rotr $14,$11,18 1571*4724848cSchristos 1572*4724848cSchristos srl $17,$8,10 1573*4724848cSchristos rotr $15,$8,17 1574*4724848cSchristos xor $16,$14 # sigma0(X[i+1]) 1575*4724848cSchristos rotr $14,$8,19 1576*4724848cSchristos xor $17,$15 1577*4724848cSchristos addu $10,$16 1578*4724848cSchristos#else 1579*4724848cSchristos srl $16,$11,3 # Xupdate(18) 1580*4724848cSchristos addu $10,$19 # +=X[i+9] 1581*4724848cSchristos sll $15,$11,14 1582*4724848cSchristos srl $14,$11,7 1583*4724848cSchristos xor $16,$15 1584*4724848cSchristos sll $15,11 1585*4724848cSchristos xor $16,$14 1586*4724848cSchristos srl $14,$11,18 1587*4724848cSchristos xor $16,$15 1588*4724848cSchristos 1589*4724848cSchristos srl $17,$8,10 1590*4724848cSchristos xor $16,$14 # sigma0(X[i+1]) 1591*4724848cSchristos sll $15,$8,13 1592*4724848cSchristos addu $10,$16 1593*4724848cSchristos srl $14,$8,17 1594*4724848cSchristos xor $17,$15 1595*4724848cSchristos sll $15,2 1596*4724848cSchristos xor $17,$14 1597*4724848cSchristos srl $14,$8,19 1598*4724848cSchristos xor $17,$15 1599*4724848cSchristos#endif 1600*4724848cSchristos xor $17,$14 # sigma1(X[i+14]) 1601*4724848cSchristos addu $10,$17 1602*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1603*4724848cSchristos xor $17,$7,$24 # 18 1604*4724848cSchristos rotr $15,$3,6 1605*4724848cSchristos addu $14,$10,$25 1606*4724848cSchristos rotr $16,$3,11 1607*4724848cSchristos and $17,$3 1608*4724848cSchristos rotr $25,$3,25 1609*4724848cSchristos xor $15,$16 1610*4724848cSchristos rotr $16,$30,2 1611*4724848cSchristos xor $17,$24 # Ch(e,f,g) 1612*4724848cSchristos xor $15,$25 # Sigma1(e) 1613*4724848cSchristos 1614*4724848cSchristos rotr $25,$30,13 1615*4724848cSchristos addu $14,$17 1616*4724848cSchristos lw $17,72($6) # K[18] 1617*4724848cSchristos xor $25,$16 1618*4724848cSchristos rotr $16,$30,22 1619*4724848cSchristos addu $14,$15 1620*4724848cSchristos and $15,$31,$1 1621*4724848cSchristos xor $25,$16 # Sigma0(a) 1622*4724848cSchristos xor $16,$31,$1 1623*4724848cSchristos#else 1624*4724848cSchristos addu $14,$10,$25 # 18 1625*4724848cSchristos srl $25,$3,6 1626*4724848cSchristos xor $17,$7,$24 1627*4724848cSchristos sll $16,$3,7 1628*4724848cSchristos and $17,$3 1629*4724848cSchristos srl $15,$3,11 1630*4724848cSchristos xor $25,$16 1631*4724848cSchristos sll $16,$3,21 1632*4724848cSchristos xor $25,$15 1633*4724848cSchristos srl $15,$3,25 1634*4724848cSchristos xor $25,$16 1635*4724848cSchristos sll $16,$3,26 1636*4724848cSchristos xor $25,$15 1637*4724848cSchristos xor $17,$24 # Ch(e,f,g) 1638*4724848cSchristos xor $15,$16,$25 # Sigma1(e) 1639*4724848cSchristos 1640*4724848cSchristos srl $25,$30,2 1641*4724848cSchristos addu $14,$17 1642*4724848cSchristos lw $17,72($6) # K[18] 1643*4724848cSchristos sll $16,$30,10 1644*4724848cSchristos addu $14,$15 1645*4724848cSchristos srl $15,$30,13 1646*4724848cSchristos xor $25,$16 1647*4724848cSchristos sll $16,$30,19 1648*4724848cSchristos xor $25,$15 1649*4724848cSchristos srl $15,$30,22 1650*4724848cSchristos xor $25,$16 1651*4724848cSchristos sll $16,$30,30 1652*4724848cSchristos xor $25,$15 1653*4724848cSchristos and $15,$31,$1 1654*4724848cSchristos xor $25,$16 # Sigma0(a) 1655*4724848cSchristos xor $16,$31,$1 1656*4724848cSchristos#endif 1657*4724848cSchristos sw $10,8($29) # offload to ring buffer 1658*4724848cSchristos addu $25,$15 1659*4724848cSchristos and $16,$30 1660*4724848cSchristos addu $14,$17 # +=K[18] 1661*4724848cSchristos addu $25,$16 # +=Maj(a,b,c) 1662*4724848cSchristos addu $2,$14 1663*4724848cSchristos addu $25,$14 1664*4724848cSchristos lw $13,20($29) # prefetch from ring buffer 1665*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1666*4724848cSchristos srl $17,$12,3 # Xupdate(19) 1667*4724848cSchristos rotr $15,$12,7 1668*4724848cSchristos addu $11,$20 # +=X[i+9] 1669*4724848cSchristos xor $17,$15 1670*4724848cSchristos rotr $15,$12,18 1671*4724848cSchristos 1672*4724848cSchristos srl $18,$9,10 1673*4724848cSchristos rotr $16,$9,17 1674*4724848cSchristos xor $17,$15 # sigma0(X[i+1]) 1675*4724848cSchristos rotr $15,$9,19 1676*4724848cSchristos xor $18,$16 1677*4724848cSchristos addu $11,$17 1678*4724848cSchristos#else 1679*4724848cSchristos srl $17,$12,3 # Xupdate(19) 1680*4724848cSchristos addu $11,$20 # +=X[i+9] 1681*4724848cSchristos sll $16,$12,14 1682*4724848cSchristos srl $15,$12,7 1683*4724848cSchristos xor $17,$16 1684*4724848cSchristos sll $16,11 1685*4724848cSchristos xor $17,$15 1686*4724848cSchristos srl $15,$12,18 1687*4724848cSchristos xor $17,$16 1688*4724848cSchristos 1689*4724848cSchristos srl $18,$9,10 1690*4724848cSchristos xor $17,$15 # sigma0(X[i+1]) 1691*4724848cSchristos sll $16,$9,13 1692*4724848cSchristos addu $11,$17 1693*4724848cSchristos srl $15,$9,17 1694*4724848cSchristos xor $18,$16 1695*4724848cSchristos sll $16,2 1696*4724848cSchristos xor $18,$15 1697*4724848cSchristos srl $15,$9,19 1698*4724848cSchristos xor $18,$16 1699*4724848cSchristos#endif 1700*4724848cSchristos xor $18,$15 # sigma1(X[i+14]) 1701*4724848cSchristos addu $11,$18 1702*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1703*4724848cSchristos xor $18,$3,$7 # 19 1704*4724848cSchristos rotr $16,$2,6 1705*4724848cSchristos addu $15,$11,$24 1706*4724848cSchristos rotr $17,$2,11 1707*4724848cSchristos and $18,$2 1708*4724848cSchristos rotr $24,$2,25 1709*4724848cSchristos xor $16,$17 1710*4724848cSchristos rotr $17,$25,2 1711*4724848cSchristos xor $18,$7 # Ch(e,f,g) 1712*4724848cSchristos xor $16,$24 # Sigma1(e) 1713*4724848cSchristos 1714*4724848cSchristos rotr $24,$25,13 1715*4724848cSchristos addu $15,$18 1716*4724848cSchristos lw $18,76($6) # K[19] 1717*4724848cSchristos xor $24,$17 1718*4724848cSchristos rotr $17,$25,22 1719*4724848cSchristos addu $15,$16 1720*4724848cSchristos and $16,$30,$31 1721*4724848cSchristos xor $24,$17 # Sigma0(a) 1722*4724848cSchristos xor $17,$30,$31 1723*4724848cSchristos#else 1724*4724848cSchristos addu $15,$11,$24 # 19 1725*4724848cSchristos srl $24,$2,6 1726*4724848cSchristos xor $18,$3,$7 1727*4724848cSchristos sll $17,$2,7 1728*4724848cSchristos and $18,$2 1729*4724848cSchristos srl $16,$2,11 1730*4724848cSchristos xor $24,$17 1731*4724848cSchristos sll $17,$2,21 1732*4724848cSchristos xor $24,$16 1733*4724848cSchristos srl $16,$2,25 1734*4724848cSchristos xor $24,$17 1735*4724848cSchristos sll $17,$2,26 1736*4724848cSchristos xor $24,$16 1737*4724848cSchristos xor $18,$7 # Ch(e,f,g) 1738*4724848cSchristos xor $16,$17,$24 # Sigma1(e) 1739*4724848cSchristos 1740*4724848cSchristos srl $24,$25,2 1741*4724848cSchristos addu $15,$18 1742*4724848cSchristos lw $18,76($6) # K[19] 1743*4724848cSchristos sll $17,$25,10 1744*4724848cSchristos addu $15,$16 1745*4724848cSchristos srl $16,$25,13 1746*4724848cSchristos xor $24,$17 1747*4724848cSchristos sll $17,$25,19 1748*4724848cSchristos xor $24,$16 1749*4724848cSchristos srl $16,$25,22 1750*4724848cSchristos xor $24,$17 1751*4724848cSchristos sll $17,$25,30 1752*4724848cSchristos xor $24,$16 1753*4724848cSchristos and $16,$30,$31 1754*4724848cSchristos xor $24,$17 # Sigma0(a) 1755*4724848cSchristos xor $17,$30,$31 1756*4724848cSchristos#endif 1757*4724848cSchristos sw $11,12($29) # offload to ring buffer 1758*4724848cSchristos addu $24,$16 1759*4724848cSchristos and $17,$25 1760*4724848cSchristos addu $15,$18 # +=K[19] 1761*4724848cSchristos addu $24,$17 # +=Maj(a,b,c) 1762*4724848cSchristos addu $1,$15 1763*4724848cSchristos addu $24,$15 1764*4724848cSchristos lw $14,24($29) # prefetch from ring buffer 1765*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1766*4724848cSchristos srl $18,$13,3 # Xupdate(20) 1767*4724848cSchristos rotr $16,$13,7 1768*4724848cSchristos addu $12,$21 # +=X[i+9] 1769*4724848cSchristos xor $18,$16 1770*4724848cSchristos rotr $16,$13,18 1771*4724848cSchristos 1772*4724848cSchristos srl $19,$10,10 1773*4724848cSchristos rotr $17,$10,17 1774*4724848cSchristos xor $18,$16 # sigma0(X[i+1]) 1775*4724848cSchristos rotr $16,$10,19 1776*4724848cSchristos xor $19,$17 1777*4724848cSchristos addu $12,$18 1778*4724848cSchristos#else 1779*4724848cSchristos srl $18,$13,3 # Xupdate(20) 1780*4724848cSchristos addu $12,$21 # +=X[i+9] 1781*4724848cSchristos sll $17,$13,14 1782*4724848cSchristos srl $16,$13,7 1783*4724848cSchristos xor $18,$17 1784*4724848cSchristos sll $17,11 1785*4724848cSchristos xor $18,$16 1786*4724848cSchristos srl $16,$13,18 1787*4724848cSchristos xor $18,$17 1788*4724848cSchristos 1789*4724848cSchristos srl $19,$10,10 1790*4724848cSchristos xor $18,$16 # sigma0(X[i+1]) 1791*4724848cSchristos sll $17,$10,13 1792*4724848cSchristos addu $12,$18 1793*4724848cSchristos srl $16,$10,17 1794*4724848cSchristos xor $19,$17 1795*4724848cSchristos sll $17,2 1796*4724848cSchristos xor $19,$16 1797*4724848cSchristos srl $16,$10,19 1798*4724848cSchristos xor $19,$17 1799*4724848cSchristos#endif 1800*4724848cSchristos xor $19,$16 # sigma1(X[i+14]) 1801*4724848cSchristos addu $12,$19 1802*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1803*4724848cSchristos xor $19,$2,$3 # 20 1804*4724848cSchristos rotr $17,$1,6 1805*4724848cSchristos addu $16,$12,$7 1806*4724848cSchristos rotr $18,$1,11 1807*4724848cSchristos and $19,$1 1808*4724848cSchristos rotr $7,$1,25 1809*4724848cSchristos xor $17,$18 1810*4724848cSchristos rotr $18,$24,2 1811*4724848cSchristos xor $19,$3 # Ch(e,f,g) 1812*4724848cSchristos xor $17,$7 # Sigma1(e) 1813*4724848cSchristos 1814*4724848cSchristos rotr $7,$24,13 1815*4724848cSchristos addu $16,$19 1816*4724848cSchristos lw $19,80($6) # K[20] 1817*4724848cSchristos xor $7,$18 1818*4724848cSchristos rotr $18,$24,22 1819*4724848cSchristos addu $16,$17 1820*4724848cSchristos and $17,$25,$30 1821*4724848cSchristos xor $7,$18 # Sigma0(a) 1822*4724848cSchristos xor $18,$25,$30 1823*4724848cSchristos#else 1824*4724848cSchristos addu $16,$12,$7 # 20 1825*4724848cSchristos srl $7,$1,6 1826*4724848cSchristos xor $19,$2,$3 1827*4724848cSchristos sll $18,$1,7 1828*4724848cSchristos and $19,$1 1829*4724848cSchristos srl $17,$1,11 1830*4724848cSchristos xor $7,$18 1831*4724848cSchristos sll $18,$1,21 1832*4724848cSchristos xor $7,$17 1833*4724848cSchristos srl $17,$1,25 1834*4724848cSchristos xor $7,$18 1835*4724848cSchristos sll $18,$1,26 1836*4724848cSchristos xor $7,$17 1837*4724848cSchristos xor $19,$3 # Ch(e,f,g) 1838*4724848cSchristos xor $17,$18,$7 # Sigma1(e) 1839*4724848cSchristos 1840*4724848cSchristos srl $7,$24,2 1841*4724848cSchristos addu $16,$19 1842*4724848cSchristos lw $19,80($6) # K[20] 1843*4724848cSchristos sll $18,$24,10 1844*4724848cSchristos addu $16,$17 1845*4724848cSchristos srl $17,$24,13 1846*4724848cSchristos xor $7,$18 1847*4724848cSchristos sll $18,$24,19 1848*4724848cSchristos xor $7,$17 1849*4724848cSchristos srl $17,$24,22 1850*4724848cSchristos xor $7,$18 1851*4724848cSchristos sll $18,$24,30 1852*4724848cSchristos xor $7,$17 1853*4724848cSchristos and $17,$25,$30 1854*4724848cSchristos xor $7,$18 # Sigma0(a) 1855*4724848cSchristos xor $18,$25,$30 1856*4724848cSchristos#endif 1857*4724848cSchristos sw $12,16($29) # offload to ring buffer 1858*4724848cSchristos addu $7,$17 1859*4724848cSchristos and $18,$24 1860*4724848cSchristos addu $16,$19 # +=K[20] 1861*4724848cSchristos addu $7,$18 # +=Maj(a,b,c) 1862*4724848cSchristos addu $31,$16 1863*4724848cSchristos addu $7,$16 1864*4724848cSchristos lw $15,28($29) # prefetch from ring buffer 1865*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1866*4724848cSchristos srl $19,$14,3 # Xupdate(21) 1867*4724848cSchristos rotr $17,$14,7 1868*4724848cSchristos addu $13,$22 # +=X[i+9] 1869*4724848cSchristos xor $19,$17 1870*4724848cSchristos rotr $17,$14,18 1871*4724848cSchristos 1872*4724848cSchristos srl $20,$11,10 1873*4724848cSchristos rotr $18,$11,17 1874*4724848cSchristos xor $19,$17 # sigma0(X[i+1]) 1875*4724848cSchristos rotr $17,$11,19 1876*4724848cSchristos xor $20,$18 1877*4724848cSchristos addu $13,$19 1878*4724848cSchristos#else 1879*4724848cSchristos srl $19,$14,3 # Xupdate(21) 1880*4724848cSchristos addu $13,$22 # +=X[i+9] 1881*4724848cSchristos sll $18,$14,14 1882*4724848cSchristos srl $17,$14,7 1883*4724848cSchristos xor $19,$18 1884*4724848cSchristos sll $18,11 1885*4724848cSchristos xor $19,$17 1886*4724848cSchristos srl $17,$14,18 1887*4724848cSchristos xor $19,$18 1888*4724848cSchristos 1889*4724848cSchristos srl $20,$11,10 1890*4724848cSchristos xor $19,$17 # sigma0(X[i+1]) 1891*4724848cSchristos sll $18,$11,13 1892*4724848cSchristos addu $13,$19 1893*4724848cSchristos srl $17,$11,17 1894*4724848cSchristos xor $20,$18 1895*4724848cSchristos sll $18,2 1896*4724848cSchristos xor $20,$17 1897*4724848cSchristos srl $17,$11,19 1898*4724848cSchristos xor $20,$18 1899*4724848cSchristos#endif 1900*4724848cSchristos xor $20,$17 # sigma1(X[i+14]) 1901*4724848cSchristos addu $13,$20 1902*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1903*4724848cSchristos xor $20,$1,$2 # 21 1904*4724848cSchristos rotr $18,$31,6 1905*4724848cSchristos addu $17,$13,$3 1906*4724848cSchristos rotr $19,$31,11 1907*4724848cSchristos and $20,$31 1908*4724848cSchristos rotr $3,$31,25 1909*4724848cSchristos xor $18,$19 1910*4724848cSchristos rotr $19,$7,2 1911*4724848cSchristos xor $20,$2 # Ch(e,f,g) 1912*4724848cSchristos xor $18,$3 # Sigma1(e) 1913*4724848cSchristos 1914*4724848cSchristos rotr $3,$7,13 1915*4724848cSchristos addu $17,$20 1916*4724848cSchristos lw $20,84($6) # K[21] 1917*4724848cSchristos xor $3,$19 1918*4724848cSchristos rotr $19,$7,22 1919*4724848cSchristos addu $17,$18 1920*4724848cSchristos and $18,$24,$25 1921*4724848cSchristos xor $3,$19 # Sigma0(a) 1922*4724848cSchristos xor $19,$24,$25 1923*4724848cSchristos#else 1924*4724848cSchristos addu $17,$13,$3 # 21 1925*4724848cSchristos srl $3,$31,6 1926*4724848cSchristos xor $20,$1,$2 1927*4724848cSchristos sll $19,$31,7 1928*4724848cSchristos and $20,$31 1929*4724848cSchristos srl $18,$31,11 1930*4724848cSchristos xor $3,$19 1931*4724848cSchristos sll $19,$31,21 1932*4724848cSchristos xor $3,$18 1933*4724848cSchristos srl $18,$31,25 1934*4724848cSchristos xor $3,$19 1935*4724848cSchristos sll $19,$31,26 1936*4724848cSchristos xor $3,$18 1937*4724848cSchristos xor $20,$2 # Ch(e,f,g) 1938*4724848cSchristos xor $18,$19,$3 # Sigma1(e) 1939*4724848cSchristos 1940*4724848cSchristos srl $3,$7,2 1941*4724848cSchristos addu $17,$20 1942*4724848cSchristos lw $20,84($6) # K[21] 1943*4724848cSchristos sll $19,$7,10 1944*4724848cSchristos addu $17,$18 1945*4724848cSchristos srl $18,$7,13 1946*4724848cSchristos xor $3,$19 1947*4724848cSchristos sll $19,$7,19 1948*4724848cSchristos xor $3,$18 1949*4724848cSchristos srl $18,$7,22 1950*4724848cSchristos xor $3,$19 1951*4724848cSchristos sll $19,$7,30 1952*4724848cSchristos xor $3,$18 1953*4724848cSchristos and $18,$24,$25 1954*4724848cSchristos xor $3,$19 # Sigma0(a) 1955*4724848cSchristos xor $19,$24,$25 1956*4724848cSchristos#endif 1957*4724848cSchristos sw $13,20($29) # offload to ring buffer 1958*4724848cSchristos addu $3,$18 1959*4724848cSchristos and $19,$7 1960*4724848cSchristos addu $17,$20 # +=K[21] 1961*4724848cSchristos addu $3,$19 # +=Maj(a,b,c) 1962*4724848cSchristos addu $30,$17 1963*4724848cSchristos addu $3,$17 1964*4724848cSchristos lw $16,32($29) # prefetch from ring buffer 1965*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1966*4724848cSchristos srl $20,$15,3 # Xupdate(22) 1967*4724848cSchristos rotr $18,$15,7 1968*4724848cSchristos addu $14,$23 # +=X[i+9] 1969*4724848cSchristos xor $20,$18 1970*4724848cSchristos rotr $18,$15,18 1971*4724848cSchristos 1972*4724848cSchristos srl $21,$12,10 1973*4724848cSchristos rotr $19,$12,17 1974*4724848cSchristos xor $20,$18 # sigma0(X[i+1]) 1975*4724848cSchristos rotr $18,$12,19 1976*4724848cSchristos xor $21,$19 1977*4724848cSchristos addu $14,$20 1978*4724848cSchristos#else 1979*4724848cSchristos srl $20,$15,3 # Xupdate(22) 1980*4724848cSchristos addu $14,$23 # +=X[i+9] 1981*4724848cSchristos sll $19,$15,14 1982*4724848cSchristos srl $18,$15,7 1983*4724848cSchristos xor $20,$19 1984*4724848cSchristos sll $19,11 1985*4724848cSchristos xor $20,$18 1986*4724848cSchristos srl $18,$15,18 1987*4724848cSchristos xor $20,$19 1988*4724848cSchristos 1989*4724848cSchristos srl $21,$12,10 1990*4724848cSchristos xor $20,$18 # sigma0(X[i+1]) 1991*4724848cSchristos sll $19,$12,13 1992*4724848cSchristos addu $14,$20 1993*4724848cSchristos srl $18,$12,17 1994*4724848cSchristos xor $21,$19 1995*4724848cSchristos sll $19,2 1996*4724848cSchristos xor $21,$18 1997*4724848cSchristos srl $18,$12,19 1998*4724848cSchristos xor $21,$19 1999*4724848cSchristos#endif 2000*4724848cSchristos xor $21,$18 # sigma1(X[i+14]) 2001*4724848cSchristos addu $14,$21 2002*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2003*4724848cSchristos xor $21,$31,$1 # 22 2004*4724848cSchristos rotr $19,$30,6 2005*4724848cSchristos addu $18,$14,$2 2006*4724848cSchristos rotr $20,$30,11 2007*4724848cSchristos and $21,$30 2008*4724848cSchristos rotr $2,$30,25 2009*4724848cSchristos xor $19,$20 2010*4724848cSchristos rotr $20,$3,2 2011*4724848cSchristos xor $21,$1 # Ch(e,f,g) 2012*4724848cSchristos xor $19,$2 # Sigma1(e) 2013*4724848cSchristos 2014*4724848cSchristos rotr $2,$3,13 2015*4724848cSchristos addu $18,$21 2016*4724848cSchristos lw $21,88($6) # K[22] 2017*4724848cSchristos xor $2,$20 2018*4724848cSchristos rotr $20,$3,22 2019*4724848cSchristos addu $18,$19 2020*4724848cSchristos and $19,$7,$24 2021*4724848cSchristos xor $2,$20 # Sigma0(a) 2022*4724848cSchristos xor $20,$7,$24 2023*4724848cSchristos#else 2024*4724848cSchristos addu $18,$14,$2 # 22 2025*4724848cSchristos srl $2,$30,6 2026*4724848cSchristos xor $21,$31,$1 2027*4724848cSchristos sll $20,$30,7 2028*4724848cSchristos and $21,$30 2029*4724848cSchristos srl $19,$30,11 2030*4724848cSchristos xor $2,$20 2031*4724848cSchristos sll $20,$30,21 2032*4724848cSchristos xor $2,$19 2033*4724848cSchristos srl $19,$30,25 2034*4724848cSchristos xor $2,$20 2035*4724848cSchristos sll $20,$30,26 2036*4724848cSchristos xor $2,$19 2037*4724848cSchristos xor $21,$1 # Ch(e,f,g) 2038*4724848cSchristos xor $19,$20,$2 # Sigma1(e) 2039*4724848cSchristos 2040*4724848cSchristos srl $2,$3,2 2041*4724848cSchristos addu $18,$21 2042*4724848cSchristos lw $21,88($6) # K[22] 2043*4724848cSchristos sll $20,$3,10 2044*4724848cSchristos addu $18,$19 2045*4724848cSchristos srl $19,$3,13 2046*4724848cSchristos xor $2,$20 2047*4724848cSchristos sll $20,$3,19 2048*4724848cSchristos xor $2,$19 2049*4724848cSchristos srl $19,$3,22 2050*4724848cSchristos xor $2,$20 2051*4724848cSchristos sll $20,$3,30 2052*4724848cSchristos xor $2,$19 2053*4724848cSchristos and $19,$7,$24 2054*4724848cSchristos xor $2,$20 # Sigma0(a) 2055*4724848cSchristos xor $20,$7,$24 2056*4724848cSchristos#endif 2057*4724848cSchristos sw $14,24($29) # offload to ring buffer 2058*4724848cSchristos addu $2,$19 2059*4724848cSchristos and $20,$3 2060*4724848cSchristos addu $18,$21 # +=K[22] 2061*4724848cSchristos addu $2,$20 # +=Maj(a,b,c) 2062*4724848cSchristos addu $25,$18 2063*4724848cSchristos addu $2,$18 2064*4724848cSchristos lw $17,36($29) # prefetch from ring buffer 2065*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2066*4724848cSchristos srl $21,$16,3 # Xupdate(23) 2067*4724848cSchristos rotr $19,$16,7 2068*4724848cSchristos addu $15,$8 # +=X[i+9] 2069*4724848cSchristos xor $21,$19 2070*4724848cSchristos rotr $19,$16,18 2071*4724848cSchristos 2072*4724848cSchristos srl $22,$13,10 2073*4724848cSchristos rotr $20,$13,17 2074*4724848cSchristos xor $21,$19 # sigma0(X[i+1]) 2075*4724848cSchristos rotr $19,$13,19 2076*4724848cSchristos xor $22,$20 2077*4724848cSchristos addu $15,$21 2078*4724848cSchristos#else 2079*4724848cSchristos srl $21,$16,3 # Xupdate(23) 2080*4724848cSchristos addu $15,$8 # +=X[i+9] 2081*4724848cSchristos sll $20,$16,14 2082*4724848cSchristos srl $19,$16,7 2083*4724848cSchristos xor $21,$20 2084*4724848cSchristos sll $20,11 2085*4724848cSchristos xor $21,$19 2086*4724848cSchristos srl $19,$16,18 2087*4724848cSchristos xor $21,$20 2088*4724848cSchristos 2089*4724848cSchristos srl $22,$13,10 2090*4724848cSchristos xor $21,$19 # sigma0(X[i+1]) 2091*4724848cSchristos sll $20,$13,13 2092*4724848cSchristos addu $15,$21 2093*4724848cSchristos srl $19,$13,17 2094*4724848cSchristos xor $22,$20 2095*4724848cSchristos sll $20,2 2096*4724848cSchristos xor $22,$19 2097*4724848cSchristos srl $19,$13,19 2098*4724848cSchristos xor $22,$20 2099*4724848cSchristos#endif 2100*4724848cSchristos xor $22,$19 # sigma1(X[i+14]) 2101*4724848cSchristos addu $15,$22 2102*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2103*4724848cSchristos xor $22,$30,$31 # 23 2104*4724848cSchristos rotr $20,$25,6 2105*4724848cSchristos addu $19,$15,$1 2106*4724848cSchristos rotr $21,$25,11 2107*4724848cSchristos and $22,$25 2108*4724848cSchristos rotr $1,$25,25 2109*4724848cSchristos xor $20,$21 2110*4724848cSchristos rotr $21,$2,2 2111*4724848cSchristos xor $22,$31 # Ch(e,f,g) 2112*4724848cSchristos xor $20,$1 # Sigma1(e) 2113*4724848cSchristos 2114*4724848cSchristos rotr $1,$2,13 2115*4724848cSchristos addu $19,$22 2116*4724848cSchristos lw $22,92($6) # K[23] 2117*4724848cSchristos xor $1,$21 2118*4724848cSchristos rotr $21,$2,22 2119*4724848cSchristos addu $19,$20 2120*4724848cSchristos and $20,$3,$7 2121*4724848cSchristos xor $1,$21 # Sigma0(a) 2122*4724848cSchristos xor $21,$3,$7 2123*4724848cSchristos#else 2124*4724848cSchristos addu $19,$15,$1 # 23 2125*4724848cSchristos srl $1,$25,6 2126*4724848cSchristos xor $22,$30,$31 2127*4724848cSchristos sll $21,$25,7 2128*4724848cSchristos and $22,$25 2129*4724848cSchristos srl $20,$25,11 2130*4724848cSchristos xor $1,$21 2131*4724848cSchristos sll $21,$25,21 2132*4724848cSchristos xor $1,$20 2133*4724848cSchristos srl $20,$25,25 2134*4724848cSchristos xor $1,$21 2135*4724848cSchristos sll $21,$25,26 2136*4724848cSchristos xor $1,$20 2137*4724848cSchristos xor $22,$31 # Ch(e,f,g) 2138*4724848cSchristos xor $20,$21,$1 # Sigma1(e) 2139*4724848cSchristos 2140*4724848cSchristos srl $1,$2,2 2141*4724848cSchristos addu $19,$22 2142*4724848cSchristos lw $22,92($6) # K[23] 2143*4724848cSchristos sll $21,$2,10 2144*4724848cSchristos addu $19,$20 2145*4724848cSchristos srl $20,$2,13 2146*4724848cSchristos xor $1,$21 2147*4724848cSchristos sll $21,$2,19 2148*4724848cSchristos xor $1,$20 2149*4724848cSchristos srl $20,$2,22 2150*4724848cSchristos xor $1,$21 2151*4724848cSchristos sll $21,$2,30 2152*4724848cSchristos xor $1,$20 2153*4724848cSchristos and $20,$3,$7 2154*4724848cSchristos xor $1,$21 # Sigma0(a) 2155*4724848cSchristos xor $21,$3,$7 2156*4724848cSchristos#endif 2157*4724848cSchristos sw $15,28($29) # offload to ring buffer 2158*4724848cSchristos addu $1,$20 2159*4724848cSchristos and $21,$2 2160*4724848cSchristos addu $19,$22 # +=K[23] 2161*4724848cSchristos addu $1,$21 # +=Maj(a,b,c) 2162*4724848cSchristos addu $24,$19 2163*4724848cSchristos addu $1,$19 2164*4724848cSchristos lw $18,40($29) # prefetch from ring buffer 2165*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2166*4724848cSchristos srl $22,$17,3 # Xupdate(24) 2167*4724848cSchristos rotr $20,$17,7 2168*4724848cSchristos addu $16,$9 # +=X[i+9] 2169*4724848cSchristos xor $22,$20 2170*4724848cSchristos rotr $20,$17,18 2171*4724848cSchristos 2172*4724848cSchristos srl $23,$14,10 2173*4724848cSchristos rotr $21,$14,17 2174*4724848cSchristos xor $22,$20 # sigma0(X[i+1]) 2175*4724848cSchristos rotr $20,$14,19 2176*4724848cSchristos xor $23,$21 2177*4724848cSchristos addu $16,$22 2178*4724848cSchristos#else 2179*4724848cSchristos srl $22,$17,3 # Xupdate(24) 2180*4724848cSchristos addu $16,$9 # +=X[i+9] 2181*4724848cSchristos sll $21,$17,14 2182*4724848cSchristos srl $20,$17,7 2183*4724848cSchristos xor $22,$21 2184*4724848cSchristos sll $21,11 2185*4724848cSchristos xor $22,$20 2186*4724848cSchristos srl $20,$17,18 2187*4724848cSchristos xor $22,$21 2188*4724848cSchristos 2189*4724848cSchristos srl $23,$14,10 2190*4724848cSchristos xor $22,$20 # sigma0(X[i+1]) 2191*4724848cSchristos sll $21,$14,13 2192*4724848cSchristos addu $16,$22 2193*4724848cSchristos srl $20,$14,17 2194*4724848cSchristos xor $23,$21 2195*4724848cSchristos sll $21,2 2196*4724848cSchristos xor $23,$20 2197*4724848cSchristos srl $20,$14,19 2198*4724848cSchristos xor $23,$21 2199*4724848cSchristos#endif 2200*4724848cSchristos xor $23,$20 # sigma1(X[i+14]) 2201*4724848cSchristos addu $16,$23 2202*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2203*4724848cSchristos xor $23,$25,$30 # 24 2204*4724848cSchristos rotr $21,$24,6 2205*4724848cSchristos addu $20,$16,$31 2206*4724848cSchristos rotr $22,$24,11 2207*4724848cSchristos and $23,$24 2208*4724848cSchristos rotr $31,$24,25 2209*4724848cSchristos xor $21,$22 2210*4724848cSchristos rotr $22,$1,2 2211*4724848cSchristos xor $23,$30 # Ch(e,f,g) 2212*4724848cSchristos xor $21,$31 # Sigma1(e) 2213*4724848cSchristos 2214*4724848cSchristos rotr $31,$1,13 2215*4724848cSchristos addu $20,$23 2216*4724848cSchristos lw $23,96($6) # K[24] 2217*4724848cSchristos xor $31,$22 2218*4724848cSchristos rotr $22,$1,22 2219*4724848cSchristos addu $20,$21 2220*4724848cSchristos and $21,$2,$3 2221*4724848cSchristos xor $31,$22 # Sigma0(a) 2222*4724848cSchristos xor $22,$2,$3 2223*4724848cSchristos#else 2224*4724848cSchristos addu $20,$16,$31 # 24 2225*4724848cSchristos srl $31,$24,6 2226*4724848cSchristos xor $23,$25,$30 2227*4724848cSchristos sll $22,$24,7 2228*4724848cSchristos and $23,$24 2229*4724848cSchristos srl $21,$24,11 2230*4724848cSchristos xor $31,$22 2231*4724848cSchristos sll $22,$24,21 2232*4724848cSchristos xor $31,$21 2233*4724848cSchristos srl $21,$24,25 2234*4724848cSchristos xor $31,$22 2235*4724848cSchristos sll $22,$24,26 2236*4724848cSchristos xor $31,$21 2237*4724848cSchristos xor $23,$30 # Ch(e,f,g) 2238*4724848cSchristos xor $21,$22,$31 # Sigma1(e) 2239*4724848cSchristos 2240*4724848cSchristos srl $31,$1,2 2241*4724848cSchristos addu $20,$23 2242*4724848cSchristos lw $23,96($6) # K[24] 2243*4724848cSchristos sll $22,$1,10 2244*4724848cSchristos addu $20,$21 2245*4724848cSchristos srl $21,$1,13 2246*4724848cSchristos xor $31,$22 2247*4724848cSchristos sll $22,$1,19 2248*4724848cSchristos xor $31,$21 2249*4724848cSchristos srl $21,$1,22 2250*4724848cSchristos xor $31,$22 2251*4724848cSchristos sll $22,$1,30 2252*4724848cSchristos xor $31,$21 2253*4724848cSchristos and $21,$2,$3 2254*4724848cSchristos xor $31,$22 # Sigma0(a) 2255*4724848cSchristos xor $22,$2,$3 2256*4724848cSchristos#endif 2257*4724848cSchristos sw $16,32($29) # offload to ring buffer 2258*4724848cSchristos addu $31,$21 2259*4724848cSchristos and $22,$1 2260*4724848cSchristos addu $20,$23 # +=K[24] 2261*4724848cSchristos addu $31,$22 # +=Maj(a,b,c) 2262*4724848cSchristos addu $7,$20 2263*4724848cSchristos addu $31,$20 2264*4724848cSchristos lw $19,44($29) # prefetch from ring buffer 2265*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2266*4724848cSchristos srl $23,$18,3 # Xupdate(25) 2267*4724848cSchristos rotr $21,$18,7 2268*4724848cSchristos addu $17,$10 # +=X[i+9] 2269*4724848cSchristos xor $23,$21 2270*4724848cSchristos rotr $21,$18,18 2271*4724848cSchristos 2272*4724848cSchristos srl $8,$15,10 2273*4724848cSchristos rotr $22,$15,17 2274*4724848cSchristos xor $23,$21 # sigma0(X[i+1]) 2275*4724848cSchristos rotr $21,$15,19 2276*4724848cSchristos xor $8,$22 2277*4724848cSchristos addu $17,$23 2278*4724848cSchristos#else 2279*4724848cSchristos srl $23,$18,3 # Xupdate(25) 2280*4724848cSchristos addu $17,$10 # +=X[i+9] 2281*4724848cSchristos sll $22,$18,14 2282*4724848cSchristos srl $21,$18,7 2283*4724848cSchristos xor $23,$22 2284*4724848cSchristos sll $22,11 2285*4724848cSchristos xor $23,$21 2286*4724848cSchristos srl $21,$18,18 2287*4724848cSchristos xor $23,$22 2288*4724848cSchristos 2289*4724848cSchristos srl $8,$15,10 2290*4724848cSchristos xor $23,$21 # sigma0(X[i+1]) 2291*4724848cSchristos sll $22,$15,13 2292*4724848cSchristos addu $17,$23 2293*4724848cSchristos srl $21,$15,17 2294*4724848cSchristos xor $8,$22 2295*4724848cSchristos sll $22,2 2296*4724848cSchristos xor $8,$21 2297*4724848cSchristos srl $21,$15,19 2298*4724848cSchristos xor $8,$22 2299*4724848cSchristos#endif 2300*4724848cSchristos xor $8,$21 # sigma1(X[i+14]) 2301*4724848cSchristos addu $17,$8 2302*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2303*4724848cSchristos xor $8,$24,$25 # 25 2304*4724848cSchristos rotr $22,$7,6 2305*4724848cSchristos addu $21,$17,$30 2306*4724848cSchristos rotr $23,$7,11 2307*4724848cSchristos and $8,$7 2308*4724848cSchristos rotr $30,$7,25 2309*4724848cSchristos xor $22,$23 2310*4724848cSchristos rotr $23,$31,2 2311*4724848cSchristos xor $8,$25 # Ch(e,f,g) 2312*4724848cSchristos xor $22,$30 # Sigma1(e) 2313*4724848cSchristos 2314*4724848cSchristos rotr $30,$31,13 2315*4724848cSchristos addu $21,$8 2316*4724848cSchristos lw $8,100($6) # K[25] 2317*4724848cSchristos xor $30,$23 2318*4724848cSchristos rotr $23,$31,22 2319*4724848cSchristos addu $21,$22 2320*4724848cSchristos and $22,$1,$2 2321*4724848cSchristos xor $30,$23 # Sigma0(a) 2322*4724848cSchristos xor $23,$1,$2 2323*4724848cSchristos#else 2324*4724848cSchristos addu $21,$17,$30 # 25 2325*4724848cSchristos srl $30,$7,6 2326*4724848cSchristos xor $8,$24,$25 2327*4724848cSchristos sll $23,$7,7 2328*4724848cSchristos and $8,$7 2329*4724848cSchristos srl $22,$7,11 2330*4724848cSchristos xor $30,$23 2331*4724848cSchristos sll $23,$7,21 2332*4724848cSchristos xor $30,$22 2333*4724848cSchristos srl $22,$7,25 2334*4724848cSchristos xor $30,$23 2335*4724848cSchristos sll $23,$7,26 2336*4724848cSchristos xor $30,$22 2337*4724848cSchristos xor $8,$25 # Ch(e,f,g) 2338*4724848cSchristos xor $22,$23,$30 # Sigma1(e) 2339*4724848cSchristos 2340*4724848cSchristos srl $30,$31,2 2341*4724848cSchristos addu $21,$8 2342*4724848cSchristos lw $8,100($6) # K[25] 2343*4724848cSchristos sll $23,$31,10 2344*4724848cSchristos addu $21,$22 2345*4724848cSchristos srl $22,$31,13 2346*4724848cSchristos xor $30,$23 2347*4724848cSchristos sll $23,$31,19 2348*4724848cSchristos xor $30,$22 2349*4724848cSchristos srl $22,$31,22 2350*4724848cSchristos xor $30,$23 2351*4724848cSchristos sll $23,$31,30 2352*4724848cSchristos xor $30,$22 2353*4724848cSchristos and $22,$1,$2 2354*4724848cSchristos xor $30,$23 # Sigma0(a) 2355*4724848cSchristos xor $23,$1,$2 2356*4724848cSchristos#endif 2357*4724848cSchristos sw $17,36($29) # offload to ring buffer 2358*4724848cSchristos addu $30,$22 2359*4724848cSchristos and $23,$31 2360*4724848cSchristos addu $21,$8 # +=K[25] 2361*4724848cSchristos addu $30,$23 # +=Maj(a,b,c) 2362*4724848cSchristos addu $3,$21 2363*4724848cSchristos addu $30,$21 2364*4724848cSchristos lw $20,48($29) # prefetch from ring buffer 2365*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2366*4724848cSchristos srl $8,$19,3 # Xupdate(26) 2367*4724848cSchristos rotr $22,$19,7 2368*4724848cSchristos addu $18,$11 # +=X[i+9] 2369*4724848cSchristos xor $8,$22 2370*4724848cSchristos rotr $22,$19,18 2371*4724848cSchristos 2372*4724848cSchristos srl $9,$16,10 2373*4724848cSchristos rotr $23,$16,17 2374*4724848cSchristos xor $8,$22 # sigma0(X[i+1]) 2375*4724848cSchristos rotr $22,$16,19 2376*4724848cSchristos xor $9,$23 2377*4724848cSchristos addu $18,$8 2378*4724848cSchristos#else 2379*4724848cSchristos srl $8,$19,3 # Xupdate(26) 2380*4724848cSchristos addu $18,$11 # +=X[i+9] 2381*4724848cSchristos sll $23,$19,14 2382*4724848cSchristos srl $22,$19,7 2383*4724848cSchristos xor $8,$23 2384*4724848cSchristos sll $23,11 2385*4724848cSchristos xor $8,$22 2386*4724848cSchristos srl $22,$19,18 2387*4724848cSchristos xor $8,$23 2388*4724848cSchristos 2389*4724848cSchristos srl $9,$16,10 2390*4724848cSchristos xor $8,$22 # sigma0(X[i+1]) 2391*4724848cSchristos sll $23,$16,13 2392*4724848cSchristos addu $18,$8 2393*4724848cSchristos srl $22,$16,17 2394*4724848cSchristos xor $9,$23 2395*4724848cSchristos sll $23,2 2396*4724848cSchristos xor $9,$22 2397*4724848cSchristos srl $22,$16,19 2398*4724848cSchristos xor $9,$23 2399*4724848cSchristos#endif 2400*4724848cSchristos xor $9,$22 # sigma1(X[i+14]) 2401*4724848cSchristos addu $18,$9 2402*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2403*4724848cSchristos xor $9,$7,$24 # 26 2404*4724848cSchristos rotr $23,$3,6 2405*4724848cSchristos addu $22,$18,$25 2406*4724848cSchristos rotr $8,$3,11 2407*4724848cSchristos and $9,$3 2408*4724848cSchristos rotr $25,$3,25 2409*4724848cSchristos xor $23,$8 2410*4724848cSchristos rotr $8,$30,2 2411*4724848cSchristos xor $9,$24 # Ch(e,f,g) 2412*4724848cSchristos xor $23,$25 # Sigma1(e) 2413*4724848cSchristos 2414*4724848cSchristos rotr $25,$30,13 2415*4724848cSchristos addu $22,$9 2416*4724848cSchristos lw $9,104($6) # K[26] 2417*4724848cSchristos xor $25,$8 2418*4724848cSchristos rotr $8,$30,22 2419*4724848cSchristos addu $22,$23 2420*4724848cSchristos and $23,$31,$1 2421*4724848cSchristos xor $25,$8 # Sigma0(a) 2422*4724848cSchristos xor $8,$31,$1 2423*4724848cSchristos#else 2424*4724848cSchristos addu $22,$18,$25 # 26 2425*4724848cSchristos srl $25,$3,6 2426*4724848cSchristos xor $9,$7,$24 2427*4724848cSchristos sll $8,$3,7 2428*4724848cSchristos and $9,$3 2429*4724848cSchristos srl $23,$3,11 2430*4724848cSchristos xor $25,$8 2431*4724848cSchristos sll $8,$3,21 2432*4724848cSchristos xor $25,$23 2433*4724848cSchristos srl $23,$3,25 2434*4724848cSchristos xor $25,$8 2435*4724848cSchristos sll $8,$3,26 2436*4724848cSchristos xor $25,$23 2437*4724848cSchristos xor $9,$24 # Ch(e,f,g) 2438*4724848cSchristos xor $23,$8,$25 # Sigma1(e) 2439*4724848cSchristos 2440*4724848cSchristos srl $25,$30,2 2441*4724848cSchristos addu $22,$9 2442*4724848cSchristos lw $9,104($6) # K[26] 2443*4724848cSchristos sll $8,$30,10 2444*4724848cSchristos addu $22,$23 2445*4724848cSchristos srl $23,$30,13 2446*4724848cSchristos xor $25,$8 2447*4724848cSchristos sll $8,$30,19 2448*4724848cSchristos xor $25,$23 2449*4724848cSchristos srl $23,$30,22 2450*4724848cSchristos xor $25,$8 2451*4724848cSchristos sll $8,$30,30 2452*4724848cSchristos xor $25,$23 2453*4724848cSchristos and $23,$31,$1 2454*4724848cSchristos xor $25,$8 # Sigma0(a) 2455*4724848cSchristos xor $8,$31,$1 2456*4724848cSchristos#endif 2457*4724848cSchristos sw $18,40($29) # offload to ring buffer 2458*4724848cSchristos addu $25,$23 2459*4724848cSchristos and $8,$30 2460*4724848cSchristos addu $22,$9 # +=K[26] 2461*4724848cSchristos addu $25,$8 # +=Maj(a,b,c) 2462*4724848cSchristos addu $2,$22 2463*4724848cSchristos addu $25,$22 2464*4724848cSchristos lw $21,52($29) # prefetch from ring buffer 2465*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2466*4724848cSchristos srl $9,$20,3 # Xupdate(27) 2467*4724848cSchristos rotr $23,$20,7 2468*4724848cSchristos addu $19,$12 # +=X[i+9] 2469*4724848cSchristos xor $9,$23 2470*4724848cSchristos rotr $23,$20,18 2471*4724848cSchristos 2472*4724848cSchristos srl $10,$17,10 2473*4724848cSchristos rotr $8,$17,17 2474*4724848cSchristos xor $9,$23 # sigma0(X[i+1]) 2475*4724848cSchristos rotr $23,$17,19 2476*4724848cSchristos xor $10,$8 2477*4724848cSchristos addu $19,$9 2478*4724848cSchristos#else 2479*4724848cSchristos srl $9,$20,3 # Xupdate(27) 2480*4724848cSchristos addu $19,$12 # +=X[i+9] 2481*4724848cSchristos sll $8,$20,14 2482*4724848cSchristos srl $23,$20,7 2483*4724848cSchristos xor $9,$8 2484*4724848cSchristos sll $8,11 2485*4724848cSchristos xor $9,$23 2486*4724848cSchristos srl $23,$20,18 2487*4724848cSchristos xor $9,$8 2488*4724848cSchristos 2489*4724848cSchristos srl $10,$17,10 2490*4724848cSchristos xor $9,$23 # sigma0(X[i+1]) 2491*4724848cSchristos sll $8,$17,13 2492*4724848cSchristos addu $19,$9 2493*4724848cSchristos srl $23,$17,17 2494*4724848cSchristos xor $10,$8 2495*4724848cSchristos sll $8,2 2496*4724848cSchristos xor $10,$23 2497*4724848cSchristos srl $23,$17,19 2498*4724848cSchristos xor $10,$8 2499*4724848cSchristos#endif 2500*4724848cSchristos xor $10,$23 # sigma1(X[i+14]) 2501*4724848cSchristos addu $19,$10 2502*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2503*4724848cSchristos xor $10,$3,$7 # 27 2504*4724848cSchristos rotr $8,$2,6 2505*4724848cSchristos addu $23,$19,$24 2506*4724848cSchristos rotr $9,$2,11 2507*4724848cSchristos and $10,$2 2508*4724848cSchristos rotr $24,$2,25 2509*4724848cSchristos xor $8,$9 2510*4724848cSchristos rotr $9,$25,2 2511*4724848cSchristos xor $10,$7 # Ch(e,f,g) 2512*4724848cSchristos xor $8,$24 # Sigma1(e) 2513*4724848cSchristos 2514*4724848cSchristos rotr $24,$25,13 2515*4724848cSchristos addu $23,$10 2516*4724848cSchristos lw $10,108($6) # K[27] 2517*4724848cSchristos xor $24,$9 2518*4724848cSchristos rotr $9,$25,22 2519*4724848cSchristos addu $23,$8 2520*4724848cSchristos and $8,$30,$31 2521*4724848cSchristos xor $24,$9 # Sigma0(a) 2522*4724848cSchristos xor $9,$30,$31 2523*4724848cSchristos#else 2524*4724848cSchristos addu $23,$19,$24 # 27 2525*4724848cSchristos srl $24,$2,6 2526*4724848cSchristos xor $10,$3,$7 2527*4724848cSchristos sll $9,$2,7 2528*4724848cSchristos and $10,$2 2529*4724848cSchristos srl $8,$2,11 2530*4724848cSchristos xor $24,$9 2531*4724848cSchristos sll $9,$2,21 2532*4724848cSchristos xor $24,$8 2533*4724848cSchristos srl $8,$2,25 2534*4724848cSchristos xor $24,$9 2535*4724848cSchristos sll $9,$2,26 2536*4724848cSchristos xor $24,$8 2537*4724848cSchristos xor $10,$7 # Ch(e,f,g) 2538*4724848cSchristos xor $8,$9,$24 # Sigma1(e) 2539*4724848cSchristos 2540*4724848cSchristos srl $24,$25,2 2541*4724848cSchristos addu $23,$10 2542*4724848cSchristos lw $10,108($6) # K[27] 2543*4724848cSchristos sll $9,$25,10 2544*4724848cSchristos addu $23,$8 2545*4724848cSchristos srl $8,$25,13 2546*4724848cSchristos xor $24,$9 2547*4724848cSchristos sll $9,$25,19 2548*4724848cSchristos xor $24,$8 2549*4724848cSchristos srl $8,$25,22 2550*4724848cSchristos xor $24,$9 2551*4724848cSchristos sll $9,$25,30 2552*4724848cSchristos xor $24,$8 2553*4724848cSchristos and $8,$30,$31 2554*4724848cSchristos xor $24,$9 # Sigma0(a) 2555*4724848cSchristos xor $9,$30,$31 2556*4724848cSchristos#endif 2557*4724848cSchristos sw $19,44($29) # offload to ring buffer 2558*4724848cSchristos addu $24,$8 2559*4724848cSchristos and $9,$25 2560*4724848cSchristos addu $23,$10 # +=K[27] 2561*4724848cSchristos addu $24,$9 # +=Maj(a,b,c) 2562*4724848cSchristos addu $1,$23 2563*4724848cSchristos addu $24,$23 2564*4724848cSchristos lw $22,56($29) # prefetch from ring buffer 2565*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2566*4724848cSchristos srl $10,$21,3 # Xupdate(28) 2567*4724848cSchristos rotr $8,$21,7 2568*4724848cSchristos addu $20,$13 # +=X[i+9] 2569*4724848cSchristos xor $10,$8 2570*4724848cSchristos rotr $8,$21,18 2571*4724848cSchristos 2572*4724848cSchristos srl $11,$18,10 2573*4724848cSchristos rotr $9,$18,17 2574*4724848cSchristos xor $10,$8 # sigma0(X[i+1]) 2575*4724848cSchristos rotr $8,$18,19 2576*4724848cSchristos xor $11,$9 2577*4724848cSchristos addu $20,$10 2578*4724848cSchristos#else 2579*4724848cSchristos srl $10,$21,3 # Xupdate(28) 2580*4724848cSchristos addu $20,$13 # +=X[i+9] 2581*4724848cSchristos sll $9,$21,14 2582*4724848cSchristos srl $8,$21,7 2583*4724848cSchristos xor $10,$9 2584*4724848cSchristos sll $9,11 2585*4724848cSchristos xor $10,$8 2586*4724848cSchristos srl $8,$21,18 2587*4724848cSchristos xor $10,$9 2588*4724848cSchristos 2589*4724848cSchristos srl $11,$18,10 2590*4724848cSchristos xor $10,$8 # sigma0(X[i+1]) 2591*4724848cSchristos sll $9,$18,13 2592*4724848cSchristos addu $20,$10 2593*4724848cSchristos srl $8,$18,17 2594*4724848cSchristos xor $11,$9 2595*4724848cSchristos sll $9,2 2596*4724848cSchristos xor $11,$8 2597*4724848cSchristos srl $8,$18,19 2598*4724848cSchristos xor $11,$9 2599*4724848cSchristos#endif 2600*4724848cSchristos xor $11,$8 # sigma1(X[i+14]) 2601*4724848cSchristos addu $20,$11 2602*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2603*4724848cSchristos xor $11,$2,$3 # 28 2604*4724848cSchristos rotr $9,$1,6 2605*4724848cSchristos addu $8,$20,$7 2606*4724848cSchristos rotr $10,$1,11 2607*4724848cSchristos and $11,$1 2608*4724848cSchristos rotr $7,$1,25 2609*4724848cSchristos xor $9,$10 2610*4724848cSchristos rotr $10,$24,2 2611*4724848cSchristos xor $11,$3 # Ch(e,f,g) 2612*4724848cSchristos xor $9,$7 # Sigma1(e) 2613*4724848cSchristos 2614*4724848cSchristos rotr $7,$24,13 2615*4724848cSchristos addu $8,$11 2616*4724848cSchristos lw $11,112($6) # K[28] 2617*4724848cSchristos xor $7,$10 2618*4724848cSchristos rotr $10,$24,22 2619*4724848cSchristos addu $8,$9 2620*4724848cSchristos and $9,$25,$30 2621*4724848cSchristos xor $7,$10 # Sigma0(a) 2622*4724848cSchristos xor $10,$25,$30 2623*4724848cSchristos#else 2624*4724848cSchristos addu $8,$20,$7 # 28 2625*4724848cSchristos srl $7,$1,6 2626*4724848cSchristos xor $11,$2,$3 2627*4724848cSchristos sll $10,$1,7 2628*4724848cSchristos and $11,$1 2629*4724848cSchristos srl $9,$1,11 2630*4724848cSchristos xor $7,$10 2631*4724848cSchristos sll $10,$1,21 2632*4724848cSchristos xor $7,$9 2633*4724848cSchristos srl $9,$1,25 2634*4724848cSchristos xor $7,$10 2635*4724848cSchristos sll $10,$1,26 2636*4724848cSchristos xor $7,$9 2637*4724848cSchristos xor $11,$3 # Ch(e,f,g) 2638*4724848cSchristos xor $9,$10,$7 # Sigma1(e) 2639*4724848cSchristos 2640*4724848cSchristos srl $7,$24,2 2641*4724848cSchristos addu $8,$11 2642*4724848cSchristos lw $11,112($6) # K[28] 2643*4724848cSchristos sll $10,$24,10 2644*4724848cSchristos addu $8,$9 2645*4724848cSchristos srl $9,$24,13 2646*4724848cSchristos xor $7,$10 2647*4724848cSchristos sll $10,$24,19 2648*4724848cSchristos xor $7,$9 2649*4724848cSchristos srl $9,$24,22 2650*4724848cSchristos xor $7,$10 2651*4724848cSchristos sll $10,$24,30 2652*4724848cSchristos xor $7,$9 2653*4724848cSchristos and $9,$25,$30 2654*4724848cSchristos xor $7,$10 # Sigma0(a) 2655*4724848cSchristos xor $10,$25,$30 2656*4724848cSchristos#endif 2657*4724848cSchristos sw $20,48($29) # offload to ring buffer 2658*4724848cSchristos addu $7,$9 2659*4724848cSchristos and $10,$24 2660*4724848cSchristos addu $8,$11 # +=K[28] 2661*4724848cSchristos addu $7,$10 # +=Maj(a,b,c) 2662*4724848cSchristos addu $31,$8 2663*4724848cSchristos addu $7,$8 2664*4724848cSchristos lw $23,60($29) # prefetch from ring buffer 2665*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2666*4724848cSchristos srl $11,$22,3 # Xupdate(29) 2667*4724848cSchristos rotr $9,$22,7 2668*4724848cSchristos addu $21,$14 # +=X[i+9] 2669*4724848cSchristos xor $11,$9 2670*4724848cSchristos rotr $9,$22,18 2671*4724848cSchristos 2672*4724848cSchristos srl $12,$19,10 2673*4724848cSchristos rotr $10,$19,17 2674*4724848cSchristos xor $11,$9 # sigma0(X[i+1]) 2675*4724848cSchristos rotr $9,$19,19 2676*4724848cSchristos xor $12,$10 2677*4724848cSchristos addu $21,$11 2678*4724848cSchristos#else 2679*4724848cSchristos srl $11,$22,3 # Xupdate(29) 2680*4724848cSchristos addu $21,$14 # +=X[i+9] 2681*4724848cSchristos sll $10,$22,14 2682*4724848cSchristos srl $9,$22,7 2683*4724848cSchristos xor $11,$10 2684*4724848cSchristos sll $10,11 2685*4724848cSchristos xor $11,$9 2686*4724848cSchristos srl $9,$22,18 2687*4724848cSchristos xor $11,$10 2688*4724848cSchristos 2689*4724848cSchristos srl $12,$19,10 2690*4724848cSchristos xor $11,$9 # sigma0(X[i+1]) 2691*4724848cSchristos sll $10,$19,13 2692*4724848cSchristos addu $21,$11 2693*4724848cSchristos srl $9,$19,17 2694*4724848cSchristos xor $12,$10 2695*4724848cSchristos sll $10,2 2696*4724848cSchristos xor $12,$9 2697*4724848cSchristos srl $9,$19,19 2698*4724848cSchristos xor $12,$10 2699*4724848cSchristos#endif 2700*4724848cSchristos xor $12,$9 # sigma1(X[i+14]) 2701*4724848cSchristos addu $21,$12 2702*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2703*4724848cSchristos xor $12,$1,$2 # 29 2704*4724848cSchristos rotr $10,$31,6 2705*4724848cSchristos addu $9,$21,$3 2706*4724848cSchristos rotr $11,$31,11 2707*4724848cSchristos and $12,$31 2708*4724848cSchristos rotr $3,$31,25 2709*4724848cSchristos xor $10,$11 2710*4724848cSchristos rotr $11,$7,2 2711*4724848cSchristos xor $12,$2 # Ch(e,f,g) 2712*4724848cSchristos xor $10,$3 # Sigma1(e) 2713*4724848cSchristos 2714*4724848cSchristos rotr $3,$7,13 2715*4724848cSchristos addu $9,$12 2716*4724848cSchristos lw $12,116($6) # K[29] 2717*4724848cSchristos xor $3,$11 2718*4724848cSchristos rotr $11,$7,22 2719*4724848cSchristos addu $9,$10 2720*4724848cSchristos and $10,$24,$25 2721*4724848cSchristos xor $3,$11 # Sigma0(a) 2722*4724848cSchristos xor $11,$24,$25 2723*4724848cSchristos#else 2724*4724848cSchristos addu $9,$21,$3 # 29 2725*4724848cSchristos srl $3,$31,6 2726*4724848cSchristos xor $12,$1,$2 2727*4724848cSchristos sll $11,$31,7 2728*4724848cSchristos and $12,$31 2729*4724848cSchristos srl $10,$31,11 2730*4724848cSchristos xor $3,$11 2731*4724848cSchristos sll $11,$31,21 2732*4724848cSchristos xor $3,$10 2733*4724848cSchristos srl $10,$31,25 2734*4724848cSchristos xor $3,$11 2735*4724848cSchristos sll $11,$31,26 2736*4724848cSchristos xor $3,$10 2737*4724848cSchristos xor $12,$2 # Ch(e,f,g) 2738*4724848cSchristos xor $10,$11,$3 # Sigma1(e) 2739*4724848cSchristos 2740*4724848cSchristos srl $3,$7,2 2741*4724848cSchristos addu $9,$12 2742*4724848cSchristos lw $12,116($6) # K[29] 2743*4724848cSchristos sll $11,$7,10 2744*4724848cSchristos addu $9,$10 2745*4724848cSchristos srl $10,$7,13 2746*4724848cSchristos xor $3,$11 2747*4724848cSchristos sll $11,$7,19 2748*4724848cSchristos xor $3,$10 2749*4724848cSchristos srl $10,$7,22 2750*4724848cSchristos xor $3,$11 2751*4724848cSchristos sll $11,$7,30 2752*4724848cSchristos xor $3,$10 2753*4724848cSchristos and $10,$24,$25 2754*4724848cSchristos xor $3,$11 # Sigma0(a) 2755*4724848cSchristos xor $11,$24,$25 2756*4724848cSchristos#endif 2757*4724848cSchristos sw $21,52($29) # offload to ring buffer 2758*4724848cSchristos addu $3,$10 2759*4724848cSchristos and $11,$7 2760*4724848cSchristos addu $9,$12 # +=K[29] 2761*4724848cSchristos addu $3,$11 # +=Maj(a,b,c) 2762*4724848cSchristos addu $30,$9 2763*4724848cSchristos addu $3,$9 2764*4724848cSchristos lw $8,0($29) # prefetch from ring buffer 2765*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2766*4724848cSchristos srl $12,$23,3 # Xupdate(30) 2767*4724848cSchristos rotr $10,$23,7 2768*4724848cSchristos addu $22,$15 # +=X[i+9] 2769*4724848cSchristos xor $12,$10 2770*4724848cSchristos rotr $10,$23,18 2771*4724848cSchristos 2772*4724848cSchristos srl $13,$20,10 2773*4724848cSchristos rotr $11,$20,17 2774*4724848cSchristos xor $12,$10 # sigma0(X[i+1]) 2775*4724848cSchristos rotr $10,$20,19 2776*4724848cSchristos xor $13,$11 2777*4724848cSchristos addu $22,$12 2778*4724848cSchristos#else 2779*4724848cSchristos srl $12,$23,3 # Xupdate(30) 2780*4724848cSchristos addu $22,$15 # +=X[i+9] 2781*4724848cSchristos sll $11,$23,14 2782*4724848cSchristos srl $10,$23,7 2783*4724848cSchristos xor $12,$11 2784*4724848cSchristos sll $11,11 2785*4724848cSchristos xor $12,$10 2786*4724848cSchristos srl $10,$23,18 2787*4724848cSchristos xor $12,$11 2788*4724848cSchristos 2789*4724848cSchristos srl $13,$20,10 2790*4724848cSchristos xor $12,$10 # sigma0(X[i+1]) 2791*4724848cSchristos sll $11,$20,13 2792*4724848cSchristos addu $22,$12 2793*4724848cSchristos srl $10,$20,17 2794*4724848cSchristos xor $13,$11 2795*4724848cSchristos sll $11,2 2796*4724848cSchristos xor $13,$10 2797*4724848cSchristos srl $10,$20,19 2798*4724848cSchristos xor $13,$11 2799*4724848cSchristos#endif 2800*4724848cSchristos xor $13,$10 # sigma1(X[i+14]) 2801*4724848cSchristos addu $22,$13 2802*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2803*4724848cSchristos xor $13,$31,$1 # 30 2804*4724848cSchristos rotr $11,$30,6 2805*4724848cSchristos addu $10,$22,$2 2806*4724848cSchristos rotr $12,$30,11 2807*4724848cSchristos and $13,$30 2808*4724848cSchristos rotr $2,$30,25 2809*4724848cSchristos xor $11,$12 2810*4724848cSchristos rotr $12,$3,2 2811*4724848cSchristos xor $13,$1 # Ch(e,f,g) 2812*4724848cSchristos xor $11,$2 # Sigma1(e) 2813*4724848cSchristos 2814*4724848cSchristos rotr $2,$3,13 2815*4724848cSchristos addu $10,$13 2816*4724848cSchristos lw $13,120($6) # K[30] 2817*4724848cSchristos xor $2,$12 2818*4724848cSchristos rotr $12,$3,22 2819*4724848cSchristos addu $10,$11 2820*4724848cSchristos and $11,$7,$24 2821*4724848cSchristos xor $2,$12 # Sigma0(a) 2822*4724848cSchristos xor $12,$7,$24 2823*4724848cSchristos#else 2824*4724848cSchristos addu $10,$22,$2 # 30 2825*4724848cSchristos srl $2,$30,6 2826*4724848cSchristos xor $13,$31,$1 2827*4724848cSchristos sll $12,$30,7 2828*4724848cSchristos and $13,$30 2829*4724848cSchristos srl $11,$30,11 2830*4724848cSchristos xor $2,$12 2831*4724848cSchristos sll $12,$30,21 2832*4724848cSchristos xor $2,$11 2833*4724848cSchristos srl $11,$30,25 2834*4724848cSchristos xor $2,$12 2835*4724848cSchristos sll $12,$30,26 2836*4724848cSchristos xor $2,$11 2837*4724848cSchristos xor $13,$1 # Ch(e,f,g) 2838*4724848cSchristos xor $11,$12,$2 # Sigma1(e) 2839*4724848cSchristos 2840*4724848cSchristos srl $2,$3,2 2841*4724848cSchristos addu $10,$13 2842*4724848cSchristos lw $13,120($6) # K[30] 2843*4724848cSchristos sll $12,$3,10 2844*4724848cSchristos addu $10,$11 2845*4724848cSchristos srl $11,$3,13 2846*4724848cSchristos xor $2,$12 2847*4724848cSchristos sll $12,$3,19 2848*4724848cSchristos xor $2,$11 2849*4724848cSchristos srl $11,$3,22 2850*4724848cSchristos xor $2,$12 2851*4724848cSchristos sll $12,$3,30 2852*4724848cSchristos xor $2,$11 2853*4724848cSchristos and $11,$7,$24 2854*4724848cSchristos xor $2,$12 # Sigma0(a) 2855*4724848cSchristos xor $12,$7,$24 2856*4724848cSchristos#endif 2857*4724848cSchristos sw $22,56($29) # offload to ring buffer 2858*4724848cSchristos addu $2,$11 2859*4724848cSchristos and $12,$3 2860*4724848cSchristos addu $10,$13 # +=K[30] 2861*4724848cSchristos addu $2,$12 # +=Maj(a,b,c) 2862*4724848cSchristos addu $25,$10 2863*4724848cSchristos addu $2,$10 2864*4724848cSchristos lw $9,4($29) # prefetch from ring buffer 2865*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2866*4724848cSchristos srl $13,$8,3 # Xupdate(31) 2867*4724848cSchristos rotr $11,$8,7 2868*4724848cSchristos addu $23,$16 # +=X[i+9] 2869*4724848cSchristos xor $13,$11 2870*4724848cSchristos rotr $11,$8,18 2871*4724848cSchristos 2872*4724848cSchristos srl $14,$21,10 2873*4724848cSchristos rotr $12,$21,17 2874*4724848cSchristos xor $13,$11 # sigma0(X[i+1]) 2875*4724848cSchristos rotr $11,$21,19 2876*4724848cSchristos xor $14,$12 2877*4724848cSchristos addu $23,$13 2878*4724848cSchristos#else 2879*4724848cSchristos srl $13,$8,3 # Xupdate(31) 2880*4724848cSchristos addu $23,$16 # +=X[i+9] 2881*4724848cSchristos sll $12,$8,14 2882*4724848cSchristos srl $11,$8,7 2883*4724848cSchristos xor $13,$12 2884*4724848cSchristos sll $12,11 2885*4724848cSchristos xor $13,$11 2886*4724848cSchristos srl $11,$8,18 2887*4724848cSchristos xor $13,$12 2888*4724848cSchristos 2889*4724848cSchristos srl $14,$21,10 2890*4724848cSchristos xor $13,$11 # sigma0(X[i+1]) 2891*4724848cSchristos sll $12,$21,13 2892*4724848cSchristos addu $23,$13 2893*4724848cSchristos srl $11,$21,17 2894*4724848cSchristos xor $14,$12 2895*4724848cSchristos sll $12,2 2896*4724848cSchristos xor $14,$11 2897*4724848cSchristos srl $11,$21,19 2898*4724848cSchristos xor $14,$12 2899*4724848cSchristos#endif 2900*4724848cSchristos xor $14,$11 # sigma1(X[i+14]) 2901*4724848cSchristos addu $23,$14 2902*4724848cSchristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2903*4724848cSchristos xor $14,$30,$31 # 31 2904*4724848cSchristos rotr $12,$25,6 2905*4724848cSchristos addu $11,$23,$1 2906*4724848cSchristos rotr $13,$25,11 2907*4724848cSchristos and $14,$25 2908*4724848cSchristos rotr $1,$25,25 2909*4724848cSchristos xor $12,$13 2910*4724848cSchristos rotr $13,$2,2 2911*4724848cSchristos xor $14,$31 # Ch(e,f,g) 2912*4724848cSchristos xor $12,$1 # Sigma1(e) 2913*4724848cSchristos 2914*4724848cSchristos rotr $1,$2,13 2915*4724848cSchristos addu $11,$14 2916*4724848cSchristos lw $14,124($6) # K[31] 2917*4724848cSchristos xor $1,$13 2918*4724848cSchristos rotr $13,$2,22 2919*4724848cSchristos addu $11,$12 2920*4724848cSchristos and $12,$3,$7 2921*4724848cSchristos xor $1,$13 # Sigma0(a) 2922*4724848cSchristos xor $13,$3,$7 2923*4724848cSchristos#else 2924*4724848cSchristos addu $11,$23,$1 # 31 2925*4724848cSchristos srl $1,$25,6 2926*4724848cSchristos xor $14,$30,$31 2927*4724848cSchristos sll $13,$25,7 2928*4724848cSchristos and $14,$25 2929*4724848cSchristos srl $12,$25,11 2930*4724848cSchristos xor $1,$13 2931*4724848cSchristos sll $13,$25,21 2932*4724848cSchristos xor $1,$12 2933*4724848cSchristos srl $12,$25,25 2934*4724848cSchristos xor $1,$13 2935*4724848cSchristos sll $13,$25,26 2936*4724848cSchristos xor $1,$12 2937*4724848cSchristos xor $14,$31 # Ch(e,f,g) 2938*4724848cSchristos xor $12,$13,$1 # Sigma1(e) 2939*4724848cSchristos 2940*4724848cSchristos srl $1,$2,2 2941*4724848cSchristos addu $11,$14 2942*4724848cSchristos lw $14,124($6) # K[31] 2943*4724848cSchristos sll $13,$2,10 2944*4724848cSchristos addu $11,$12 2945*4724848cSchristos srl $12,$2,13 2946*4724848cSchristos xor $1,$13 2947*4724848cSchristos sll $13,$2,19 2948*4724848cSchristos xor $1,$12 2949*4724848cSchristos srl $12,$2,22 2950*4724848cSchristos xor $1,$13 2951*4724848cSchristos sll $13,$2,30 2952*4724848cSchristos xor $1,$12 2953*4724848cSchristos and $12,$3,$7 2954*4724848cSchristos xor $1,$13 # Sigma0(a) 2955*4724848cSchristos xor $13,$3,$7 2956*4724848cSchristos#endif 2957*4724848cSchristos sw $23,60($29) # offload to ring buffer 2958*4724848cSchristos addu $1,$12 2959*4724848cSchristos and $13,$2 2960*4724848cSchristos addu $11,$14 # +=K[31] 2961*4724848cSchristos addu $1,$13 # +=Maj(a,b,c) 2962*4724848cSchristos addu $24,$11 2963*4724848cSchristos addu $1,$11 2964*4724848cSchristos lw $10,8($29) # prefetch from ring buffer 2965*4724848cSchristos and $14,0xfff 2966*4724848cSchristos li $15,2290 2967*4724848cSchristos .set noreorder 2968*4724848cSchristos bne $14,$15,.L16_xx 2969*4724848cSchristos addu $6,16*4 # Ktbl+=16 2970*4724848cSchristos 2971*4724848cSchristos lw $23,16*4($29) # restore pointer to the end of input 2972*4724848cSchristos lw $8,0*4($4) 2973*4724848cSchristos lw $9,1*4($4) 2974*4724848cSchristos lw $10,2*4($4) 2975*4724848cSchristos addu $5,16*4 2976*4724848cSchristos lw $11,3*4($4) 2977*4724848cSchristos addu $1,$8 2978*4724848cSchristos lw $12,4*4($4) 2979*4724848cSchristos addu $2,$9 2980*4724848cSchristos lw $13,5*4($4) 2981*4724848cSchristos addu $3,$10 2982*4724848cSchristos lw $14,6*4($4) 2983*4724848cSchristos addu $7,$11 2984*4724848cSchristos lw $15,7*4($4) 2985*4724848cSchristos addu $24,$12 2986*4724848cSchristos sw $1,0*4($4) 2987*4724848cSchristos addu $25,$13 2988*4724848cSchristos sw $2,1*4($4) 2989*4724848cSchristos addu $30,$14 2990*4724848cSchristos sw $3,2*4($4) 2991*4724848cSchristos addu $31,$15 2992*4724848cSchristos sw $7,3*4($4) 2993*4724848cSchristos sw $24,4*4($4) 2994*4724848cSchristos sw $25,5*4($4) 2995*4724848cSchristos sw $30,6*4($4) 2996*4724848cSchristos sw $31,7*4($4) 2997*4724848cSchristos 2998*4724848cSchristos bne $5,$23,.Loop 2999*4724848cSchristos subu $6,192 # rewind $6 3000*4724848cSchristos 3001*4724848cSchristos lw $31,128-1*4($29) 3002*4724848cSchristos lw $30,128-2*4($29) 3003*4724848cSchristos lw $23,128-3*4($29) 3004*4724848cSchristos lw $22,128-4*4($29) 3005*4724848cSchristos lw $21,128-5*4($29) 3006*4724848cSchristos lw $20,128-6*4($29) 3007*4724848cSchristos lw $19,128-7*4($29) 3008*4724848cSchristos lw $18,128-8*4($29) 3009*4724848cSchristos lw $17,128-9*4($29) 3010*4724848cSchristos lw $16,128-10*4($29) 3011*4724848cSchristos jr $31 3012*4724848cSchristos addu $29,128 3013*4724848cSchristos.end sha256_block_data_order 3014*4724848cSchristos 3015*4724848cSchristos.rdata 3016*4724848cSchristos.align 5 3017*4724848cSchristosK256: 3018*4724848cSchristos .word 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5 3019*4724848cSchristos .word 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5 3020*4724848cSchristos .word 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3 3021*4724848cSchristos .word 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174 3022*4724848cSchristos .word 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc 3023*4724848cSchristos .word 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da 3024*4724848cSchristos .word 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7 3025*4724848cSchristos .word 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967 3026*4724848cSchristos .word 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13 3027*4724848cSchristos .word 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85 3028*4724848cSchristos .word 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3 3029*4724848cSchristos .word 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070 3030*4724848cSchristos .word 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5 3031*4724848cSchristos .word 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3 3032*4724848cSchristos .word 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208 3033*4724848cSchristos .word 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 3034*4724848cSchristos.asciiz "SHA256 for MIPS, CRYPTOGAMS by <appro@openssl.org>" 3035*4724848cSchristos.align 5 3036*4724848cSchristos 3037