1*e0ea3921Schristos#include "mips_arch.h" 26410c867Schristos 36410c867Schristos.text 46410c867Schristos.set noat 56410c867Schristos#if !defined(__mips_eabi) && (!defined(__vxworks) || defined(__pic__)) 66410c867Schristos.option pic2 76410c867Schristos#endif 86410c867Schristos 96410c867Schristos.align 5 106410c867Schristos.globl sha256_block_data_order 116410c867Schristos.ent sha256_block_data_order 126410c867Schristossha256_block_data_order: 136410c867Schristos .frame $29,192,$31 146410c867Schristos .mask 0xc0ff0000,-8 156410c867Schristos .set noreorder 16*e0ea3921Schristos dsubu $29,192 176410c867Schristos sd $31,192-1*8($29) 186410c867Schristos sd $30,192-2*8($29) 196410c867Schristos sd $23,192-3*8($29) 206410c867Schristos sd $22,192-4*8($29) 216410c867Schristos sd $21,192-5*8($29) 226410c867Schristos sd $20,192-6*8($29) 236410c867Schristos sd $19,192-7*8($29) 246410c867Schristos sd $18,192-8*8($29) 256410c867Schristos sd $17,192-9*8($29) 266410c867Schristos sd $16,192-10*8($29) 276410c867Schristos dsll $23,$6,6 286410c867Schristos .cplocal $6 296410c867Schristos .cpsetup $25,$0,sha256_block_data_order 306410c867Schristos .set reorder 316410c867Schristos dla $6,K256 # PIC-ified 'load address' 326410c867Schristos 336410c867Schristos lw $1,0*4($4) # load context 346410c867Schristos lw $2,1*4($4) 356410c867Schristos lw $3,2*4($4) 366410c867Schristos lw $7,3*4($4) 376410c867Schristos lw $24,4*4($4) 386410c867Schristos lw $25,5*4($4) 396410c867Schristos lw $30,6*4($4) 406410c867Schristos lw $31,7*4($4) 416410c867Schristos 42*e0ea3921Schristos daddu $23,$5 # pointer to the end of input 436410c867Schristos sd $23,16*4($29) 446410c867Schristos b .Loop 456410c867Schristos 466410c867Schristos.align 5 476410c867Schristos.Loop: 48*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 49*e0ea3921Schristos lw $8,($5) 50*e0ea3921Schristos#else 516410c867Schristos lwl $8,3($5) 526410c867Schristos lwr $8,0($5) 53*e0ea3921Schristos#endif 54*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 55*e0ea3921Schristos lw $9,4($5) 56*e0ea3921Schristos#else 576410c867Schristos lwl $9,7($5) 586410c867Schristos lwr $9,4($5) 59*e0ea3921Schristos#endif 606410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 616410c867Schristos wsbh $8,$8 # byte swap(0) 626410c867Schristos rotr $8,$8,16 636410c867Schristos#else 646410c867Schristos srl $13,$8,24 # byte swap(0) 656410c867Schristos srl $14,$8,8 666410c867Schristos andi $15,$8,0xFF00 676410c867Schristos sll $8,$8,24 686410c867Schristos andi $14,0xFF00 696410c867Schristos sll $15,$15,8 706410c867Schristos or $8,$13 716410c867Schristos or $14,$15 726410c867Schristos or $8,$14 736410c867Schristos#endif 746410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 756410c867Schristos xor $15,$25,$30 # 0 766410c867Schristos rotr $13,$24,6 776410c867Schristos addu $12,$8,$31 786410c867Schristos rotr $14,$24,11 796410c867Schristos and $15,$24 806410c867Schristos rotr $31,$24,25 816410c867Schristos xor $13,$14 826410c867Schristos rotr $14,$1,2 836410c867Schristos xor $15,$30 # Ch(e,f,g) 846410c867Schristos xor $13,$31 # Sigma1(e) 856410c867Schristos 866410c867Schristos rotr $31,$1,13 876410c867Schristos addu $12,$15 886410c867Schristos lw $15,0($6) # K[0] 896410c867Schristos xor $31,$14 906410c867Schristos rotr $14,$1,22 916410c867Schristos addu $12,$13 926410c867Schristos and $13,$2,$3 936410c867Schristos xor $31,$14 # Sigma0(a) 946410c867Schristos xor $14,$2,$3 956410c867Schristos#else 966410c867Schristos addu $12,$8,$31 # 0 976410c867Schristos srl $31,$24,6 986410c867Schristos xor $15,$25,$30 996410c867Schristos sll $14,$24,7 1006410c867Schristos and $15,$24 1016410c867Schristos srl $13,$24,11 1026410c867Schristos xor $31,$14 1036410c867Schristos sll $14,$24,21 1046410c867Schristos xor $31,$13 1056410c867Schristos srl $13,$24,25 1066410c867Schristos xor $31,$14 1076410c867Schristos sll $14,$24,26 1086410c867Schristos xor $31,$13 1096410c867Schristos xor $15,$30 # Ch(e,f,g) 1106410c867Schristos xor $13,$14,$31 # Sigma1(e) 1116410c867Schristos 1126410c867Schristos srl $31,$1,2 1136410c867Schristos addu $12,$15 1146410c867Schristos lw $15,0($6) # K[0] 1156410c867Schristos sll $14,$1,10 1166410c867Schristos addu $12,$13 1176410c867Schristos srl $13,$1,13 1186410c867Schristos xor $31,$14 1196410c867Schristos sll $14,$1,19 1206410c867Schristos xor $31,$13 1216410c867Schristos srl $13,$1,22 1226410c867Schristos xor $31,$14 1236410c867Schristos sll $14,$1,30 1246410c867Schristos xor $31,$13 1256410c867Schristos and $13,$2,$3 1266410c867Schristos xor $31,$14 # Sigma0(a) 1276410c867Schristos xor $14,$2,$3 1286410c867Schristos#endif 1296410c867Schristos sw $8,0($29) # offload to ring buffer 1306410c867Schristos addu $31,$13 1316410c867Schristos and $14,$1 1326410c867Schristos addu $12,$15 # +=K[0] 1336410c867Schristos addu $31,$14 # +=Maj(a,b,c) 1346410c867Schristos addu $7,$12 1356410c867Schristos addu $31,$12 136*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 137*e0ea3921Schristos lw $10,8($5) 138*e0ea3921Schristos#else 1396410c867Schristos lwl $10,11($5) 1406410c867Schristos lwr $10,8($5) 141*e0ea3921Schristos#endif 1426410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1436410c867Schristos wsbh $9,$9 # byte swap(1) 1446410c867Schristos rotr $9,$9,16 1456410c867Schristos#else 1466410c867Schristos srl $14,$9,24 # byte swap(1) 1476410c867Schristos srl $15,$9,8 1486410c867Schristos andi $16,$9,0xFF00 1496410c867Schristos sll $9,$9,24 1506410c867Schristos andi $15,0xFF00 1516410c867Schristos sll $16,$16,8 1526410c867Schristos or $9,$14 1536410c867Schristos or $15,$16 1546410c867Schristos or $9,$15 1556410c867Schristos#endif 1566410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1576410c867Schristos xor $16,$24,$25 # 1 1586410c867Schristos rotr $14,$7,6 1596410c867Schristos addu $13,$9,$30 1606410c867Schristos rotr $15,$7,11 1616410c867Schristos and $16,$7 1626410c867Schristos rotr $30,$7,25 1636410c867Schristos xor $14,$15 1646410c867Schristos rotr $15,$31,2 1656410c867Schristos xor $16,$25 # Ch(e,f,g) 1666410c867Schristos xor $14,$30 # Sigma1(e) 1676410c867Schristos 1686410c867Schristos rotr $30,$31,13 1696410c867Schristos addu $13,$16 1706410c867Schristos lw $16,4($6) # K[1] 1716410c867Schristos xor $30,$15 1726410c867Schristos rotr $15,$31,22 1736410c867Schristos addu $13,$14 1746410c867Schristos and $14,$1,$2 1756410c867Schristos xor $30,$15 # Sigma0(a) 1766410c867Schristos xor $15,$1,$2 1776410c867Schristos#else 1786410c867Schristos addu $13,$9,$30 # 1 1796410c867Schristos srl $30,$7,6 1806410c867Schristos xor $16,$24,$25 1816410c867Schristos sll $15,$7,7 1826410c867Schristos and $16,$7 1836410c867Schristos srl $14,$7,11 1846410c867Schristos xor $30,$15 1856410c867Schristos sll $15,$7,21 1866410c867Schristos xor $30,$14 1876410c867Schristos srl $14,$7,25 1886410c867Schristos xor $30,$15 1896410c867Schristos sll $15,$7,26 1906410c867Schristos xor $30,$14 1916410c867Schristos xor $16,$25 # Ch(e,f,g) 1926410c867Schristos xor $14,$15,$30 # Sigma1(e) 1936410c867Schristos 1946410c867Schristos srl $30,$31,2 1956410c867Schristos addu $13,$16 1966410c867Schristos lw $16,4($6) # K[1] 1976410c867Schristos sll $15,$31,10 1986410c867Schristos addu $13,$14 1996410c867Schristos srl $14,$31,13 2006410c867Schristos xor $30,$15 2016410c867Schristos sll $15,$31,19 2026410c867Schristos xor $30,$14 2036410c867Schristos srl $14,$31,22 2046410c867Schristos xor $30,$15 2056410c867Schristos sll $15,$31,30 2066410c867Schristos xor $30,$14 2076410c867Schristos and $14,$1,$2 2086410c867Schristos xor $30,$15 # Sigma0(a) 2096410c867Schristos xor $15,$1,$2 2106410c867Schristos#endif 2116410c867Schristos sw $9,4($29) # offload to ring buffer 2126410c867Schristos addu $30,$14 2136410c867Schristos and $15,$31 2146410c867Schristos addu $13,$16 # +=K[1] 2156410c867Schristos addu $30,$15 # +=Maj(a,b,c) 2166410c867Schristos addu $3,$13 2176410c867Schristos addu $30,$13 218*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 219*e0ea3921Schristos lw $11,12($5) 220*e0ea3921Schristos#else 2216410c867Schristos lwl $11,15($5) 2226410c867Schristos lwr $11,12($5) 223*e0ea3921Schristos#endif 2246410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2256410c867Schristos wsbh $10,$10 # byte swap(2) 2266410c867Schristos rotr $10,$10,16 2276410c867Schristos#else 2286410c867Schristos srl $15,$10,24 # byte swap(2) 2296410c867Schristos srl $16,$10,8 2306410c867Schristos andi $17,$10,0xFF00 2316410c867Schristos sll $10,$10,24 2326410c867Schristos andi $16,0xFF00 2336410c867Schristos sll $17,$17,8 2346410c867Schristos or $10,$15 2356410c867Schristos or $16,$17 2366410c867Schristos or $10,$16 2376410c867Schristos#endif 2386410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2396410c867Schristos xor $17,$7,$24 # 2 2406410c867Schristos rotr $15,$3,6 2416410c867Schristos addu $14,$10,$25 2426410c867Schristos rotr $16,$3,11 2436410c867Schristos and $17,$3 2446410c867Schristos rotr $25,$3,25 2456410c867Schristos xor $15,$16 2466410c867Schristos rotr $16,$30,2 2476410c867Schristos xor $17,$24 # Ch(e,f,g) 2486410c867Schristos xor $15,$25 # Sigma1(e) 2496410c867Schristos 2506410c867Schristos rotr $25,$30,13 2516410c867Schristos addu $14,$17 2526410c867Schristos lw $17,8($6) # K[2] 2536410c867Schristos xor $25,$16 2546410c867Schristos rotr $16,$30,22 2556410c867Schristos addu $14,$15 2566410c867Schristos and $15,$31,$1 2576410c867Schristos xor $25,$16 # Sigma0(a) 2586410c867Schristos xor $16,$31,$1 2596410c867Schristos#else 2606410c867Schristos addu $14,$10,$25 # 2 2616410c867Schristos srl $25,$3,6 2626410c867Schristos xor $17,$7,$24 2636410c867Schristos sll $16,$3,7 2646410c867Schristos and $17,$3 2656410c867Schristos srl $15,$3,11 2666410c867Schristos xor $25,$16 2676410c867Schristos sll $16,$3,21 2686410c867Schristos xor $25,$15 2696410c867Schristos srl $15,$3,25 2706410c867Schristos xor $25,$16 2716410c867Schristos sll $16,$3,26 2726410c867Schristos xor $25,$15 2736410c867Schristos xor $17,$24 # Ch(e,f,g) 2746410c867Schristos xor $15,$16,$25 # Sigma1(e) 2756410c867Schristos 2766410c867Schristos srl $25,$30,2 2776410c867Schristos addu $14,$17 2786410c867Schristos lw $17,8($6) # K[2] 2796410c867Schristos sll $16,$30,10 2806410c867Schristos addu $14,$15 2816410c867Schristos srl $15,$30,13 2826410c867Schristos xor $25,$16 2836410c867Schristos sll $16,$30,19 2846410c867Schristos xor $25,$15 2856410c867Schristos srl $15,$30,22 2866410c867Schristos xor $25,$16 2876410c867Schristos sll $16,$30,30 2886410c867Schristos xor $25,$15 2896410c867Schristos and $15,$31,$1 2906410c867Schristos xor $25,$16 # Sigma0(a) 2916410c867Schristos xor $16,$31,$1 2926410c867Schristos#endif 2936410c867Schristos sw $10,8($29) # offload to ring buffer 2946410c867Schristos addu $25,$15 2956410c867Schristos and $16,$30 2966410c867Schristos addu $14,$17 # +=K[2] 2976410c867Schristos addu $25,$16 # +=Maj(a,b,c) 2986410c867Schristos addu $2,$14 2996410c867Schristos addu $25,$14 300*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 301*e0ea3921Schristos lw $12,16($5) 302*e0ea3921Schristos#else 3036410c867Schristos lwl $12,19($5) 3046410c867Schristos lwr $12,16($5) 305*e0ea3921Schristos#endif 3066410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 3076410c867Schristos wsbh $11,$11 # byte swap(3) 3086410c867Schristos rotr $11,$11,16 3096410c867Schristos#else 3106410c867Schristos srl $16,$11,24 # byte swap(3) 3116410c867Schristos srl $17,$11,8 3126410c867Schristos andi $18,$11,0xFF00 3136410c867Schristos sll $11,$11,24 3146410c867Schristos andi $17,0xFF00 3156410c867Schristos sll $18,$18,8 3166410c867Schristos or $11,$16 3176410c867Schristos or $17,$18 3186410c867Schristos or $11,$17 3196410c867Schristos#endif 3206410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 3216410c867Schristos xor $18,$3,$7 # 3 3226410c867Schristos rotr $16,$2,6 3236410c867Schristos addu $15,$11,$24 3246410c867Schristos rotr $17,$2,11 3256410c867Schristos and $18,$2 3266410c867Schristos rotr $24,$2,25 3276410c867Schristos xor $16,$17 3286410c867Schristos rotr $17,$25,2 3296410c867Schristos xor $18,$7 # Ch(e,f,g) 3306410c867Schristos xor $16,$24 # Sigma1(e) 3316410c867Schristos 3326410c867Schristos rotr $24,$25,13 3336410c867Schristos addu $15,$18 3346410c867Schristos lw $18,12($6) # K[3] 3356410c867Schristos xor $24,$17 3366410c867Schristos rotr $17,$25,22 3376410c867Schristos addu $15,$16 3386410c867Schristos and $16,$30,$31 3396410c867Schristos xor $24,$17 # Sigma0(a) 3406410c867Schristos xor $17,$30,$31 3416410c867Schristos#else 3426410c867Schristos addu $15,$11,$24 # 3 3436410c867Schristos srl $24,$2,6 3446410c867Schristos xor $18,$3,$7 3456410c867Schristos sll $17,$2,7 3466410c867Schristos and $18,$2 3476410c867Schristos srl $16,$2,11 3486410c867Schristos xor $24,$17 3496410c867Schristos sll $17,$2,21 3506410c867Schristos xor $24,$16 3516410c867Schristos srl $16,$2,25 3526410c867Schristos xor $24,$17 3536410c867Schristos sll $17,$2,26 3546410c867Schristos xor $24,$16 3556410c867Schristos xor $18,$7 # Ch(e,f,g) 3566410c867Schristos xor $16,$17,$24 # Sigma1(e) 3576410c867Schristos 3586410c867Schristos srl $24,$25,2 3596410c867Schristos addu $15,$18 3606410c867Schristos lw $18,12($6) # K[3] 3616410c867Schristos sll $17,$25,10 3626410c867Schristos addu $15,$16 3636410c867Schristos srl $16,$25,13 3646410c867Schristos xor $24,$17 3656410c867Schristos sll $17,$25,19 3666410c867Schristos xor $24,$16 3676410c867Schristos srl $16,$25,22 3686410c867Schristos xor $24,$17 3696410c867Schristos sll $17,$25,30 3706410c867Schristos xor $24,$16 3716410c867Schristos and $16,$30,$31 3726410c867Schristos xor $24,$17 # Sigma0(a) 3736410c867Schristos xor $17,$30,$31 3746410c867Schristos#endif 3756410c867Schristos sw $11,12($29) # offload to ring buffer 3766410c867Schristos addu $24,$16 3776410c867Schristos and $17,$25 3786410c867Schristos addu $15,$18 # +=K[3] 3796410c867Schristos addu $24,$17 # +=Maj(a,b,c) 3806410c867Schristos addu $1,$15 3816410c867Schristos addu $24,$15 382*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 383*e0ea3921Schristos lw $13,20($5) 384*e0ea3921Schristos#else 3856410c867Schristos lwl $13,23($5) 3866410c867Schristos lwr $13,20($5) 387*e0ea3921Schristos#endif 3886410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 3896410c867Schristos wsbh $12,$12 # byte swap(4) 3906410c867Schristos rotr $12,$12,16 3916410c867Schristos#else 3926410c867Schristos srl $17,$12,24 # byte swap(4) 3936410c867Schristos srl $18,$12,8 3946410c867Schristos andi $19,$12,0xFF00 3956410c867Schristos sll $12,$12,24 3966410c867Schristos andi $18,0xFF00 3976410c867Schristos sll $19,$19,8 3986410c867Schristos or $12,$17 3996410c867Schristos or $18,$19 4006410c867Schristos or $12,$18 4016410c867Schristos#endif 4026410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 4036410c867Schristos xor $19,$2,$3 # 4 4046410c867Schristos rotr $17,$1,6 4056410c867Schristos addu $16,$12,$7 4066410c867Schristos rotr $18,$1,11 4076410c867Schristos and $19,$1 4086410c867Schristos rotr $7,$1,25 4096410c867Schristos xor $17,$18 4106410c867Schristos rotr $18,$24,2 4116410c867Schristos xor $19,$3 # Ch(e,f,g) 4126410c867Schristos xor $17,$7 # Sigma1(e) 4136410c867Schristos 4146410c867Schristos rotr $7,$24,13 4156410c867Schristos addu $16,$19 4166410c867Schristos lw $19,16($6) # K[4] 4176410c867Schristos xor $7,$18 4186410c867Schristos rotr $18,$24,22 4196410c867Schristos addu $16,$17 4206410c867Schristos and $17,$25,$30 4216410c867Schristos xor $7,$18 # Sigma0(a) 4226410c867Schristos xor $18,$25,$30 4236410c867Schristos#else 4246410c867Schristos addu $16,$12,$7 # 4 4256410c867Schristos srl $7,$1,6 4266410c867Schristos xor $19,$2,$3 4276410c867Schristos sll $18,$1,7 4286410c867Schristos and $19,$1 4296410c867Schristos srl $17,$1,11 4306410c867Schristos xor $7,$18 4316410c867Schristos sll $18,$1,21 4326410c867Schristos xor $7,$17 4336410c867Schristos srl $17,$1,25 4346410c867Schristos xor $7,$18 4356410c867Schristos sll $18,$1,26 4366410c867Schristos xor $7,$17 4376410c867Schristos xor $19,$3 # Ch(e,f,g) 4386410c867Schristos xor $17,$18,$7 # Sigma1(e) 4396410c867Schristos 4406410c867Schristos srl $7,$24,2 4416410c867Schristos addu $16,$19 4426410c867Schristos lw $19,16($6) # K[4] 4436410c867Schristos sll $18,$24,10 4446410c867Schristos addu $16,$17 4456410c867Schristos srl $17,$24,13 4466410c867Schristos xor $7,$18 4476410c867Schristos sll $18,$24,19 4486410c867Schristos xor $7,$17 4496410c867Schristos srl $17,$24,22 4506410c867Schristos xor $7,$18 4516410c867Schristos sll $18,$24,30 4526410c867Schristos xor $7,$17 4536410c867Schristos and $17,$25,$30 4546410c867Schristos xor $7,$18 # Sigma0(a) 4556410c867Schristos xor $18,$25,$30 4566410c867Schristos#endif 4576410c867Schristos sw $12,16($29) # offload to ring buffer 4586410c867Schristos addu $7,$17 4596410c867Schristos and $18,$24 4606410c867Schristos addu $16,$19 # +=K[4] 4616410c867Schristos addu $7,$18 # +=Maj(a,b,c) 4626410c867Schristos addu $31,$16 4636410c867Schristos addu $7,$16 464*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 465*e0ea3921Schristos lw $14,24($5) 466*e0ea3921Schristos#else 4676410c867Schristos lwl $14,27($5) 4686410c867Schristos lwr $14,24($5) 469*e0ea3921Schristos#endif 4706410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 4716410c867Schristos wsbh $13,$13 # byte swap(5) 4726410c867Schristos rotr $13,$13,16 4736410c867Schristos#else 4746410c867Schristos srl $18,$13,24 # byte swap(5) 4756410c867Schristos srl $19,$13,8 4766410c867Schristos andi $20,$13,0xFF00 4776410c867Schristos sll $13,$13,24 4786410c867Schristos andi $19,0xFF00 4796410c867Schristos sll $20,$20,8 4806410c867Schristos or $13,$18 4816410c867Schristos or $19,$20 4826410c867Schristos or $13,$19 4836410c867Schristos#endif 4846410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 4856410c867Schristos xor $20,$1,$2 # 5 4866410c867Schristos rotr $18,$31,6 4876410c867Schristos addu $17,$13,$3 4886410c867Schristos rotr $19,$31,11 4896410c867Schristos and $20,$31 4906410c867Schristos rotr $3,$31,25 4916410c867Schristos xor $18,$19 4926410c867Schristos rotr $19,$7,2 4936410c867Schristos xor $20,$2 # Ch(e,f,g) 4946410c867Schristos xor $18,$3 # Sigma1(e) 4956410c867Schristos 4966410c867Schristos rotr $3,$7,13 4976410c867Schristos addu $17,$20 4986410c867Schristos lw $20,20($6) # K[5] 4996410c867Schristos xor $3,$19 5006410c867Schristos rotr $19,$7,22 5016410c867Schristos addu $17,$18 5026410c867Schristos and $18,$24,$25 5036410c867Schristos xor $3,$19 # Sigma0(a) 5046410c867Schristos xor $19,$24,$25 5056410c867Schristos#else 5066410c867Schristos addu $17,$13,$3 # 5 5076410c867Schristos srl $3,$31,6 5086410c867Schristos xor $20,$1,$2 5096410c867Schristos sll $19,$31,7 5106410c867Schristos and $20,$31 5116410c867Schristos srl $18,$31,11 5126410c867Schristos xor $3,$19 5136410c867Schristos sll $19,$31,21 5146410c867Schristos xor $3,$18 5156410c867Schristos srl $18,$31,25 5166410c867Schristos xor $3,$19 5176410c867Schristos sll $19,$31,26 5186410c867Schristos xor $3,$18 5196410c867Schristos xor $20,$2 # Ch(e,f,g) 5206410c867Schristos xor $18,$19,$3 # Sigma1(e) 5216410c867Schristos 5226410c867Schristos srl $3,$7,2 5236410c867Schristos addu $17,$20 5246410c867Schristos lw $20,20($6) # K[5] 5256410c867Schristos sll $19,$7,10 5266410c867Schristos addu $17,$18 5276410c867Schristos srl $18,$7,13 5286410c867Schristos xor $3,$19 5296410c867Schristos sll $19,$7,19 5306410c867Schristos xor $3,$18 5316410c867Schristos srl $18,$7,22 5326410c867Schristos xor $3,$19 5336410c867Schristos sll $19,$7,30 5346410c867Schristos xor $3,$18 5356410c867Schristos and $18,$24,$25 5366410c867Schristos xor $3,$19 # Sigma0(a) 5376410c867Schristos xor $19,$24,$25 5386410c867Schristos#endif 5396410c867Schristos sw $13,20($29) # offload to ring buffer 5406410c867Schristos addu $3,$18 5416410c867Schristos and $19,$7 5426410c867Schristos addu $17,$20 # +=K[5] 5436410c867Schristos addu $3,$19 # +=Maj(a,b,c) 5446410c867Schristos addu $30,$17 5456410c867Schristos addu $3,$17 546*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 547*e0ea3921Schristos lw $15,28($5) 548*e0ea3921Schristos#else 5496410c867Schristos lwl $15,31($5) 5506410c867Schristos lwr $15,28($5) 551*e0ea3921Schristos#endif 5526410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 5536410c867Schristos wsbh $14,$14 # byte swap(6) 5546410c867Schristos rotr $14,$14,16 5556410c867Schristos#else 5566410c867Schristos srl $19,$14,24 # byte swap(6) 5576410c867Schristos srl $20,$14,8 5586410c867Schristos andi $21,$14,0xFF00 5596410c867Schristos sll $14,$14,24 5606410c867Schristos andi $20,0xFF00 5616410c867Schristos sll $21,$21,8 5626410c867Schristos or $14,$19 5636410c867Schristos or $20,$21 5646410c867Schristos or $14,$20 5656410c867Schristos#endif 5666410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 5676410c867Schristos xor $21,$31,$1 # 6 5686410c867Schristos rotr $19,$30,6 5696410c867Schristos addu $18,$14,$2 5706410c867Schristos rotr $20,$30,11 5716410c867Schristos and $21,$30 5726410c867Schristos rotr $2,$30,25 5736410c867Schristos xor $19,$20 5746410c867Schristos rotr $20,$3,2 5756410c867Schristos xor $21,$1 # Ch(e,f,g) 5766410c867Schristos xor $19,$2 # Sigma1(e) 5776410c867Schristos 5786410c867Schristos rotr $2,$3,13 5796410c867Schristos addu $18,$21 5806410c867Schristos lw $21,24($6) # K[6] 5816410c867Schristos xor $2,$20 5826410c867Schristos rotr $20,$3,22 5836410c867Schristos addu $18,$19 5846410c867Schristos and $19,$7,$24 5856410c867Schristos xor $2,$20 # Sigma0(a) 5866410c867Schristos xor $20,$7,$24 5876410c867Schristos#else 5886410c867Schristos addu $18,$14,$2 # 6 5896410c867Schristos srl $2,$30,6 5906410c867Schristos xor $21,$31,$1 5916410c867Schristos sll $20,$30,7 5926410c867Schristos and $21,$30 5936410c867Schristos srl $19,$30,11 5946410c867Schristos xor $2,$20 5956410c867Schristos sll $20,$30,21 5966410c867Schristos xor $2,$19 5976410c867Schristos srl $19,$30,25 5986410c867Schristos xor $2,$20 5996410c867Schristos sll $20,$30,26 6006410c867Schristos xor $2,$19 6016410c867Schristos xor $21,$1 # Ch(e,f,g) 6026410c867Schristos xor $19,$20,$2 # Sigma1(e) 6036410c867Schristos 6046410c867Schristos srl $2,$3,2 6056410c867Schristos addu $18,$21 6066410c867Schristos lw $21,24($6) # K[6] 6076410c867Schristos sll $20,$3,10 6086410c867Schristos addu $18,$19 6096410c867Schristos srl $19,$3,13 6106410c867Schristos xor $2,$20 6116410c867Schristos sll $20,$3,19 6126410c867Schristos xor $2,$19 6136410c867Schristos srl $19,$3,22 6146410c867Schristos xor $2,$20 6156410c867Schristos sll $20,$3,30 6166410c867Schristos xor $2,$19 6176410c867Schristos and $19,$7,$24 6186410c867Schristos xor $2,$20 # Sigma0(a) 6196410c867Schristos xor $20,$7,$24 6206410c867Schristos#endif 6216410c867Schristos sw $14,24($29) # offload to ring buffer 6226410c867Schristos addu $2,$19 6236410c867Schristos and $20,$3 6246410c867Schristos addu $18,$21 # +=K[6] 6256410c867Schristos addu $2,$20 # +=Maj(a,b,c) 6266410c867Schristos addu $25,$18 6276410c867Schristos addu $2,$18 628*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 629*e0ea3921Schristos lw $16,32($5) 630*e0ea3921Schristos#else 6316410c867Schristos lwl $16,35($5) 6326410c867Schristos lwr $16,32($5) 633*e0ea3921Schristos#endif 6346410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 6356410c867Schristos wsbh $15,$15 # byte swap(7) 6366410c867Schristos rotr $15,$15,16 6376410c867Schristos#else 6386410c867Schristos srl $20,$15,24 # byte swap(7) 6396410c867Schristos srl $21,$15,8 6406410c867Schristos andi $22,$15,0xFF00 6416410c867Schristos sll $15,$15,24 6426410c867Schristos andi $21,0xFF00 6436410c867Schristos sll $22,$22,8 6446410c867Schristos or $15,$20 6456410c867Schristos or $21,$22 6466410c867Schristos or $15,$21 6476410c867Schristos#endif 6486410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 6496410c867Schristos xor $22,$30,$31 # 7 6506410c867Schristos rotr $20,$25,6 6516410c867Schristos addu $19,$15,$1 6526410c867Schristos rotr $21,$25,11 6536410c867Schristos and $22,$25 6546410c867Schristos rotr $1,$25,25 6556410c867Schristos xor $20,$21 6566410c867Schristos rotr $21,$2,2 6576410c867Schristos xor $22,$31 # Ch(e,f,g) 6586410c867Schristos xor $20,$1 # Sigma1(e) 6596410c867Schristos 6606410c867Schristos rotr $1,$2,13 6616410c867Schristos addu $19,$22 6626410c867Schristos lw $22,28($6) # K[7] 6636410c867Schristos xor $1,$21 6646410c867Schristos rotr $21,$2,22 6656410c867Schristos addu $19,$20 6666410c867Schristos and $20,$3,$7 6676410c867Schristos xor $1,$21 # Sigma0(a) 6686410c867Schristos xor $21,$3,$7 6696410c867Schristos#else 6706410c867Schristos addu $19,$15,$1 # 7 6716410c867Schristos srl $1,$25,6 6726410c867Schristos xor $22,$30,$31 6736410c867Schristos sll $21,$25,7 6746410c867Schristos and $22,$25 6756410c867Schristos srl $20,$25,11 6766410c867Schristos xor $1,$21 6776410c867Schristos sll $21,$25,21 6786410c867Schristos xor $1,$20 6796410c867Schristos srl $20,$25,25 6806410c867Schristos xor $1,$21 6816410c867Schristos sll $21,$25,26 6826410c867Schristos xor $1,$20 6836410c867Schristos xor $22,$31 # Ch(e,f,g) 6846410c867Schristos xor $20,$21,$1 # Sigma1(e) 6856410c867Schristos 6866410c867Schristos srl $1,$2,2 6876410c867Schristos addu $19,$22 6886410c867Schristos lw $22,28($6) # K[7] 6896410c867Schristos sll $21,$2,10 6906410c867Schristos addu $19,$20 6916410c867Schristos srl $20,$2,13 6926410c867Schristos xor $1,$21 6936410c867Schristos sll $21,$2,19 6946410c867Schristos xor $1,$20 6956410c867Schristos srl $20,$2,22 6966410c867Schristos xor $1,$21 6976410c867Schristos sll $21,$2,30 6986410c867Schristos xor $1,$20 6996410c867Schristos and $20,$3,$7 7006410c867Schristos xor $1,$21 # Sigma0(a) 7016410c867Schristos xor $21,$3,$7 7026410c867Schristos#endif 7036410c867Schristos sw $15,28($29) # offload to ring buffer 7046410c867Schristos addu $1,$20 7056410c867Schristos and $21,$2 7066410c867Schristos addu $19,$22 # +=K[7] 7076410c867Schristos addu $1,$21 # +=Maj(a,b,c) 7086410c867Schristos addu $24,$19 7096410c867Schristos addu $1,$19 710*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 711*e0ea3921Schristos lw $17,36($5) 712*e0ea3921Schristos#else 7136410c867Schristos lwl $17,39($5) 7146410c867Schristos lwr $17,36($5) 715*e0ea3921Schristos#endif 7166410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 7176410c867Schristos wsbh $16,$16 # byte swap(8) 7186410c867Schristos rotr $16,$16,16 7196410c867Schristos#else 7206410c867Schristos srl $21,$16,24 # byte swap(8) 7216410c867Schristos srl $22,$16,8 7226410c867Schristos andi $23,$16,0xFF00 7236410c867Schristos sll $16,$16,24 7246410c867Schristos andi $22,0xFF00 7256410c867Schristos sll $23,$23,8 7266410c867Schristos or $16,$21 7276410c867Schristos or $22,$23 7286410c867Schristos or $16,$22 7296410c867Schristos#endif 7306410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 7316410c867Schristos xor $23,$25,$30 # 8 7326410c867Schristos rotr $21,$24,6 7336410c867Schristos addu $20,$16,$31 7346410c867Schristos rotr $22,$24,11 7356410c867Schristos and $23,$24 7366410c867Schristos rotr $31,$24,25 7376410c867Schristos xor $21,$22 7386410c867Schristos rotr $22,$1,2 7396410c867Schristos xor $23,$30 # Ch(e,f,g) 7406410c867Schristos xor $21,$31 # Sigma1(e) 7416410c867Schristos 7426410c867Schristos rotr $31,$1,13 7436410c867Schristos addu $20,$23 7446410c867Schristos lw $23,32($6) # K[8] 7456410c867Schristos xor $31,$22 7466410c867Schristos rotr $22,$1,22 7476410c867Schristos addu $20,$21 7486410c867Schristos and $21,$2,$3 7496410c867Schristos xor $31,$22 # Sigma0(a) 7506410c867Schristos xor $22,$2,$3 7516410c867Schristos#else 7526410c867Schristos addu $20,$16,$31 # 8 7536410c867Schristos srl $31,$24,6 7546410c867Schristos xor $23,$25,$30 7556410c867Schristos sll $22,$24,7 7566410c867Schristos and $23,$24 7576410c867Schristos srl $21,$24,11 7586410c867Schristos xor $31,$22 7596410c867Schristos sll $22,$24,21 7606410c867Schristos xor $31,$21 7616410c867Schristos srl $21,$24,25 7626410c867Schristos xor $31,$22 7636410c867Schristos sll $22,$24,26 7646410c867Schristos xor $31,$21 7656410c867Schristos xor $23,$30 # Ch(e,f,g) 7666410c867Schristos xor $21,$22,$31 # Sigma1(e) 7676410c867Schristos 7686410c867Schristos srl $31,$1,2 7696410c867Schristos addu $20,$23 7706410c867Schristos lw $23,32($6) # K[8] 7716410c867Schristos sll $22,$1,10 7726410c867Schristos addu $20,$21 7736410c867Schristos srl $21,$1,13 7746410c867Schristos xor $31,$22 7756410c867Schristos sll $22,$1,19 7766410c867Schristos xor $31,$21 7776410c867Schristos srl $21,$1,22 7786410c867Schristos xor $31,$22 7796410c867Schristos sll $22,$1,30 7806410c867Schristos xor $31,$21 7816410c867Schristos and $21,$2,$3 7826410c867Schristos xor $31,$22 # Sigma0(a) 7836410c867Schristos xor $22,$2,$3 7846410c867Schristos#endif 7856410c867Schristos sw $16,32($29) # offload to ring buffer 7866410c867Schristos addu $31,$21 7876410c867Schristos and $22,$1 7886410c867Schristos addu $20,$23 # +=K[8] 7896410c867Schristos addu $31,$22 # +=Maj(a,b,c) 7906410c867Schristos addu $7,$20 7916410c867Schristos addu $31,$20 792*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 793*e0ea3921Schristos lw $18,40($5) 794*e0ea3921Schristos#else 7956410c867Schristos lwl $18,43($5) 7966410c867Schristos lwr $18,40($5) 797*e0ea3921Schristos#endif 7986410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 7996410c867Schristos wsbh $17,$17 # byte swap(9) 8006410c867Schristos rotr $17,$17,16 8016410c867Schristos#else 8026410c867Schristos srl $22,$17,24 # byte swap(9) 8036410c867Schristos srl $23,$17,8 8046410c867Schristos andi $8,$17,0xFF00 8056410c867Schristos sll $17,$17,24 8066410c867Schristos andi $23,0xFF00 8076410c867Schristos sll $8,$8,8 8086410c867Schristos or $17,$22 8096410c867Schristos or $23,$8 8106410c867Schristos or $17,$23 8116410c867Schristos#endif 8126410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 8136410c867Schristos xor $8,$24,$25 # 9 8146410c867Schristos rotr $22,$7,6 8156410c867Schristos addu $21,$17,$30 8166410c867Schristos rotr $23,$7,11 8176410c867Schristos and $8,$7 8186410c867Schristos rotr $30,$7,25 8196410c867Schristos xor $22,$23 8206410c867Schristos rotr $23,$31,2 8216410c867Schristos xor $8,$25 # Ch(e,f,g) 8226410c867Schristos xor $22,$30 # Sigma1(e) 8236410c867Schristos 8246410c867Schristos rotr $30,$31,13 8256410c867Schristos addu $21,$8 8266410c867Schristos lw $8,36($6) # K[9] 8276410c867Schristos xor $30,$23 8286410c867Schristos rotr $23,$31,22 8296410c867Schristos addu $21,$22 8306410c867Schristos and $22,$1,$2 8316410c867Schristos xor $30,$23 # Sigma0(a) 8326410c867Schristos xor $23,$1,$2 8336410c867Schristos#else 8346410c867Schristos addu $21,$17,$30 # 9 8356410c867Schristos srl $30,$7,6 8366410c867Schristos xor $8,$24,$25 8376410c867Schristos sll $23,$7,7 8386410c867Schristos and $8,$7 8396410c867Schristos srl $22,$7,11 8406410c867Schristos xor $30,$23 8416410c867Schristos sll $23,$7,21 8426410c867Schristos xor $30,$22 8436410c867Schristos srl $22,$7,25 8446410c867Schristos xor $30,$23 8456410c867Schristos sll $23,$7,26 8466410c867Schristos xor $30,$22 8476410c867Schristos xor $8,$25 # Ch(e,f,g) 8486410c867Schristos xor $22,$23,$30 # Sigma1(e) 8496410c867Schristos 8506410c867Schristos srl $30,$31,2 8516410c867Schristos addu $21,$8 8526410c867Schristos lw $8,36($6) # K[9] 8536410c867Schristos sll $23,$31,10 8546410c867Schristos addu $21,$22 8556410c867Schristos srl $22,$31,13 8566410c867Schristos xor $30,$23 8576410c867Schristos sll $23,$31,19 8586410c867Schristos xor $30,$22 8596410c867Schristos srl $22,$31,22 8606410c867Schristos xor $30,$23 8616410c867Schristos sll $23,$31,30 8626410c867Schristos xor $30,$22 8636410c867Schristos and $22,$1,$2 8646410c867Schristos xor $30,$23 # Sigma0(a) 8656410c867Schristos xor $23,$1,$2 8666410c867Schristos#endif 8676410c867Schristos sw $17,36($29) # offload to ring buffer 8686410c867Schristos addu $30,$22 8696410c867Schristos and $23,$31 8706410c867Schristos addu $21,$8 # +=K[9] 8716410c867Schristos addu $30,$23 # +=Maj(a,b,c) 8726410c867Schristos addu $3,$21 8736410c867Schristos addu $30,$21 874*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 875*e0ea3921Schristos lw $19,44($5) 876*e0ea3921Schristos#else 8776410c867Schristos lwl $19,47($5) 8786410c867Schristos lwr $19,44($5) 879*e0ea3921Schristos#endif 8806410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 8816410c867Schristos wsbh $18,$18 # byte swap(10) 8826410c867Schristos rotr $18,$18,16 8836410c867Schristos#else 8846410c867Schristos srl $23,$18,24 # byte swap(10) 8856410c867Schristos srl $8,$18,8 8866410c867Schristos andi $9,$18,0xFF00 8876410c867Schristos sll $18,$18,24 8886410c867Schristos andi $8,0xFF00 8896410c867Schristos sll $9,$9,8 8906410c867Schristos or $18,$23 8916410c867Schristos or $8,$9 8926410c867Schristos or $18,$8 8936410c867Schristos#endif 8946410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 8956410c867Schristos xor $9,$7,$24 # 10 8966410c867Schristos rotr $23,$3,6 8976410c867Schristos addu $22,$18,$25 8986410c867Schristos rotr $8,$3,11 8996410c867Schristos and $9,$3 9006410c867Schristos rotr $25,$3,25 9016410c867Schristos xor $23,$8 9026410c867Schristos rotr $8,$30,2 9036410c867Schristos xor $9,$24 # Ch(e,f,g) 9046410c867Schristos xor $23,$25 # Sigma1(e) 9056410c867Schristos 9066410c867Schristos rotr $25,$30,13 9076410c867Schristos addu $22,$9 9086410c867Schristos lw $9,40($6) # K[10] 9096410c867Schristos xor $25,$8 9106410c867Schristos rotr $8,$30,22 9116410c867Schristos addu $22,$23 9126410c867Schristos and $23,$31,$1 9136410c867Schristos xor $25,$8 # Sigma0(a) 9146410c867Schristos xor $8,$31,$1 9156410c867Schristos#else 9166410c867Schristos addu $22,$18,$25 # 10 9176410c867Schristos srl $25,$3,6 9186410c867Schristos xor $9,$7,$24 9196410c867Schristos sll $8,$3,7 9206410c867Schristos and $9,$3 9216410c867Schristos srl $23,$3,11 9226410c867Schristos xor $25,$8 9236410c867Schristos sll $8,$3,21 9246410c867Schristos xor $25,$23 9256410c867Schristos srl $23,$3,25 9266410c867Schristos xor $25,$8 9276410c867Schristos sll $8,$3,26 9286410c867Schristos xor $25,$23 9296410c867Schristos xor $9,$24 # Ch(e,f,g) 9306410c867Schristos xor $23,$8,$25 # Sigma1(e) 9316410c867Schristos 9326410c867Schristos srl $25,$30,2 9336410c867Schristos addu $22,$9 9346410c867Schristos lw $9,40($6) # K[10] 9356410c867Schristos sll $8,$30,10 9366410c867Schristos addu $22,$23 9376410c867Schristos srl $23,$30,13 9386410c867Schristos xor $25,$8 9396410c867Schristos sll $8,$30,19 9406410c867Schristos xor $25,$23 9416410c867Schristos srl $23,$30,22 9426410c867Schristos xor $25,$8 9436410c867Schristos sll $8,$30,30 9446410c867Schristos xor $25,$23 9456410c867Schristos and $23,$31,$1 9466410c867Schristos xor $25,$8 # Sigma0(a) 9476410c867Schristos xor $8,$31,$1 9486410c867Schristos#endif 9496410c867Schristos sw $18,40($29) # offload to ring buffer 9506410c867Schristos addu $25,$23 9516410c867Schristos and $8,$30 9526410c867Schristos addu $22,$9 # +=K[10] 9536410c867Schristos addu $25,$8 # +=Maj(a,b,c) 9546410c867Schristos addu $2,$22 9556410c867Schristos addu $25,$22 956*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 957*e0ea3921Schristos lw $20,48($5) 958*e0ea3921Schristos#else 9596410c867Schristos lwl $20,51($5) 9606410c867Schristos lwr $20,48($5) 961*e0ea3921Schristos#endif 9626410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 9636410c867Schristos wsbh $19,$19 # byte swap(11) 9646410c867Schristos rotr $19,$19,16 9656410c867Schristos#else 9666410c867Schristos srl $8,$19,24 # byte swap(11) 9676410c867Schristos srl $9,$19,8 9686410c867Schristos andi $10,$19,0xFF00 9696410c867Schristos sll $19,$19,24 9706410c867Schristos andi $9,0xFF00 9716410c867Schristos sll $10,$10,8 9726410c867Schristos or $19,$8 9736410c867Schristos or $9,$10 9746410c867Schristos or $19,$9 9756410c867Schristos#endif 9766410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 9776410c867Schristos xor $10,$3,$7 # 11 9786410c867Schristos rotr $8,$2,6 9796410c867Schristos addu $23,$19,$24 9806410c867Schristos rotr $9,$2,11 9816410c867Schristos and $10,$2 9826410c867Schristos rotr $24,$2,25 9836410c867Schristos xor $8,$9 9846410c867Schristos rotr $9,$25,2 9856410c867Schristos xor $10,$7 # Ch(e,f,g) 9866410c867Schristos xor $8,$24 # Sigma1(e) 9876410c867Schristos 9886410c867Schristos rotr $24,$25,13 9896410c867Schristos addu $23,$10 9906410c867Schristos lw $10,44($6) # K[11] 9916410c867Schristos xor $24,$9 9926410c867Schristos rotr $9,$25,22 9936410c867Schristos addu $23,$8 9946410c867Schristos and $8,$30,$31 9956410c867Schristos xor $24,$9 # Sigma0(a) 9966410c867Schristos xor $9,$30,$31 9976410c867Schristos#else 9986410c867Schristos addu $23,$19,$24 # 11 9996410c867Schristos srl $24,$2,6 10006410c867Schristos xor $10,$3,$7 10016410c867Schristos sll $9,$2,7 10026410c867Schristos and $10,$2 10036410c867Schristos srl $8,$2,11 10046410c867Schristos xor $24,$9 10056410c867Schristos sll $9,$2,21 10066410c867Schristos xor $24,$8 10076410c867Schristos srl $8,$2,25 10086410c867Schristos xor $24,$9 10096410c867Schristos sll $9,$2,26 10106410c867Schristos xor $24,$8 10116410c867Schristos xor $10,$7 # Ch(e,f,g) 10126410c867Schristos xor $8,$9,$24 # Sigma1(e) 10136410c867Schristos 10146410c867Schristos srl $24,$25,2 10156410c867Schristos addu $23,$10 10166410c867Schristos lw $10,44($6) # K[11] 10176410c867Schristos sll $9,$25,10 10186410c867Schristos addu $23,$8 10196410c867Schristos srl $8,$25,13 10206410c867Schristos xor $24,$9 10216410c867Schristos sll $9,$25,19 10226410c867Schristos xor $24,$8 10236410c867Schristos srl $8,$25,22 10246410c867Schristos xor $24,$9 10256410c867Schristos sll $9,$25,30 10266410c867Schristos xor $24,$8 10276410c867Schristos and $8,$30,$31 10286410c867Schristos xor $24,$9 # Sigma0(a) 10296410c867Schristos xor $9,$30,$31 10306410c867Schristos#endif 10316410c867Schristos sw $19,44($29) # offload to ring buffer 10326410c867Schristos addu $24,$8 10336410c867Schristos and $9,$25 10346410c867Schristos addu $23,$10 # +=K[11] 10356410c867Schristos addu $24,$9 # +=Maj(a,b,c) 10366410c867Schristos addu $1,$23 10376410c867Schristos addu $24,$23 1038*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 1039*e0ea3921Schristos lw $21,52($5) 1040*e0ea3921Schristos#else 10416410c867Schristos lwl $21,55($5) 10426410c867Schristos lwr $21,52($5) 1043*e0ea3921Schristos#endif 10446410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 10456410c867Schristos wsbh $20,$20 # byte swap(12) 10466410c867Schristos rotr $20,$20,16 10476410c867Schristos#else 10486410c867Schristos srl $9,$20,24 # byte swap(12) 10496410c867Schristos srl $10,$20,8 10506410c867Schristos andi $11,$20,0xFF00 10516410c867Schristos sll $20,$20,24 10526410c867Schristos andi $10,0xFF00 10536410c867Schristos sll $11,$11,8 10546410c867Schristos or $20,$9 10556410c867Schristos or $10,$11 10566410c867Schristos or $20,$10 10576410c867Schristos#endif 10586410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 10596410c867Schristos xor $11,$2,$3 # 12 10606410c867Schristos rotr $9,$1,6 10616410c867Schristos addu $8,$20,$7 10626410c867Schristos rotr $10,$1,11 10636410c867Schristos and $11,$1 10646410c867Schristos rotr $7,$1,25 10656410c867Schristos xor $9,$10 10666410c867Schristos rotr $10,$24,2 10676410c867Schristos xor $11,$3 # Ch(e,f,g) 10686410c867Schristos xor $9,$7 # Sigma1(e) 10696410c867Schristos 10706410c867Schristos rotr $7,$24,13 10716410c867Schristos addu $8,$11 10726410c867Schristos lw $11,48($6) # K[12] 10736410c867Schristos xor $7,$10 10746410c867Schristos rotr $10,$24,22 10756410c867Schristos addu $8,$9 10766410c867Schristos and $9,$25,$30 10776410c867Schristos xor $7,$10 # Sigma0(a) 10786410c867Schristos xor $10,$25,$30 10796410c867Schristos#else 10806410c867Schristos addu $8,$20,$7 # 12 10816410c867Schristos srl $7,$1,6 10826410c867Schristos xor $11,$2,$3 10836410c867Schristos sll $10,$1,7 10846410c867Schristos and $11,$1 10856410c867Schristos srl $9,$1,11 10866410c867Schristos xor $7,$10 10876410c867Schristos sll $10,$1,21 10886410c867Schristos xor $7,$9 10896410c867Schristos srl $9,$1,25 10906410c867Schristos xor $7,$10 10916410c867Schristos sll $10,$1,26 10926410c867Schristos xor $7,$9 10936410c867Schristos xor $11,$3 # Ch(e,f,g) 10946410c867Schristos xor $9,$10,$7 # Sigma1(e) 10956410c867Schristos 10966410c867Schristos srl $7,$24,2 10976410c867Schristos addu $8,$11 10986410c867Schristos lw $11,48($6) # K[12] 10996410c867Schristos sll $10,$24,10 11006410c867Schristos addu $8,$9 11016410c867Schristos srl $9,$24,13 11026410c867Schristos xor $7,$10 11036410c867Schristos sll $10,$24,19 11046410c867Schristos xor $7,$9 11056410c867Schristos srl $9,$24,22 11066410c867Schristos xor $7,$10 11076410c867Schristos sll $10,$24,30 11086410c867Schristos xor $7,$9 11096410c867Schristos and $9,$25,$30 11106410c867Schristos xor $7,$10 # Sigma0(a) 11116410c867Schristos xor $10,$25,$30 11126410c867Schristos#endif 11136410c867Schristos sw $20,48($29) # offload to ring buffer 11146410c867Schristos addu $7,$9 11156410c867Schristos and $10,$24 11166410c867Schristos addu $8,$11 # +=K[12] 11176410c867Schristos addu $7,$10 # +=Maj(a,b,c) 11186410c867Schristos addu $31,$8 11196410c867Schristos addu $7,$8 1120*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 1121*e0ea3921Schristos lw $22,56($5) 1122*e0ea3921Schristos#else 11236410c867Schristos lwl $22,59($5) 11246410c867Schristos lwr $22,56($5) 1125*e0ea3921Schristos#endif 11266410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 11276410c867Schristos wsbh $21,$21 # byte swap(13) 11286410c867Schristos rotr $21,$21,16 11296410c867Schristos#else 11306410c867Schristos srl $10,$21,24 # byte swap(13) 11316410c867Schristos srl $11,$21,8 11326410c867Schristos andi $12,$21,0xFF00 11336410c867Schristos sll $21,$21,24 11346410c867Schristos andi $11,0xFF00 11356410c867Schristos sll $12,$12,8 11366410c867Schristos or $21,$10 11376410c867Schristos or $11,$12 11386410c867Schristos or $21,$11 11396410c867Schristos#endif 11406410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 11416410c867Schristos xor $12,$1,$2 # 13 11426410c867Schristos rotr $10,$31,6 11436410c867Schristos addu $9,$21,$3 11446410c867Schristos rotr $11,$31,11 11456410c867Schristos and $12,$31 11466410c867Schristos rotr $3,$31,25 11476410c867Schristos xor $10,$11 11486410c867Schristos rotr $11,$7,2 11496410c867Schristos xor $12,$2 # Ch(e,f,g) 11506410c867Schristos xor $10,$3 # Sigma1(e) 11516410c867Schristos 11526410c867Schristos rotr $3,$7,13 11536410c867Schristos addu $9,$12 11546410c867Schristos lw $12,52($6) # K[13] 11556410c867Schristos xor $3,$11 11566410c867Schristos rotr $11,$7,22 11576410c867Schristos addu $9,$10 11586410c867Schristos and $10,$24,$25 11596410c867Schristos xor $3,$11 # Sigma0(a) 11606410c867Schristos xor $11,$24,$25 11616410c867Schristos#else 11626410c867Schristos addu $9,$21,$3 # 13 11636410c867Schristos srl $3,$31,6 11646410c867Schristos xor $12,$1,$2 11656410c867Schristos sll $11,$31,7 11666410c867Schristos and $12,$31 11676410c867Schristos srl $10,$31,11 11686410c867Schristos xor $3,$11 11696410c867Schristos sll $11,$31,21 11706410c867Schristos xor $3,$10 11716410c867Schristos srl $10,$31,25 11726410c867Schristos xor $3,$11 11736410c867Schristos sll $11,$31,26 11746410c867Schristos xor $3,$10 11756410c867Schristos xor $12,$2 # Ch(e,f,g) 11766410c867Schristos xor $10,$11,$3 # Sigma1(e) 11776410c867Schristos 11786410c867Schristos srl $3,$7,2 11796410c867Schristos addu $9,$12 11806410c867Schristos lw $12,52($6) # K[13] 11816410c867Schristos sll $11,$7,10 11826410c867Schristos addu $9,$10 11836410c867Schristos srl $10,$7,13 11846410c867Schristos xor $3,$11 11856410c867Schristos sll $11,$7,19 11866410c867Schristos xor $3,$10 11876410c867Schristos srl $10,$7,22 11886410c867Schristos xor $3,$11 11896410c867Schristos sll $11,$7,30 11906410c867Schristos xor $3,$10 11916410c867Schristos and $10,$24,$25 11926410c867Schristos xor $3,$11 # Sigma0(a) 11936410c867Schristos xor $11,$24,$25 11946410c867Schristos#endif 11956410c867Schristos sw $21,52($29) # offload to ring buffer 11966410c867Schristos addu $3,$10 11976410c867Schristos and $11,$7 11986410c867Schristos addu $9,$12 # +=K[13] 11996410c867Schristos addu $3,$11 # +=Maj(a,b,c) 12006410c867Schristos addu $30,$9 12016410c867Schristos addu $3,$9 12026410c867Schristos lw $8,0($29) # prefetch from ring buffer 1203*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 1204*e0ea3921Schristos lw $23,60($5) 1205*e0ea3921Schristos#else 12066410c867Schristos lwl $23,63($5) 12076410c867Schristos lwr $23,60($5) 1208*e0ea3921Schristos#endif 12096410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 12106410c867Schristos wsbh $22,$22 # byte swap(14) 12116410c867Schristos rotr $22,$22,16 12126410c867Schristos#else 12136410c867Schristos srl $11,$22,24 # byte swap(14) 12146410c867Schristos srl $12,$22,8 12156410c867Schristos andi $13,$22,0xFF00 12166410c867Schristos sll $22,$22,24 12176410c867Schristos andi $12,0xFF00 12186410c867Schristos sll $13,$13,8 12196410c867Schristos or $22,$11 12206410c867Schristos or $12,$13 12216410c867Schristos or $22,$12 12226410c867Schristos#endif 12236410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 12246410c867Schristos xor $13,$31,$1 # 14 12256410c867Schristos rotr $11,$30,6 12266410c867Schristos addu $10,$22,$2 12276410c867Schristos rotr $12,$30,11 12286410c867Schristos and $13,$30 12296410c867Schristos rotr $2,$30,25 12306410c867Schristos xor $11,$12 12316410c867Schristos rotr $12,$3,2 12326410c867Schristos xor $13,$1 # Ch(e,f,g) 12336410c867Schristos xor $11,$2 # Sigma1(e) 12346410c867Schristos 12356410c867Schristos rotr $2,$3,13 12366410c867Schristos addu $10,$13 12376410c867Schristos lw $13,56($6) # K[14] 12386410c867Schristos xor $2,$12 12396410c867Schristos rotr $12,$3,22 12406410c867Schristos addu $10,$11 12416410c867Schristos and $11,$7,$24 12426410c867Schristos xor $2,$12 # Sigma0(a) 12436410c867Schristos xor $12,$7,$24 12446410c867Schristos#else 12456410c867Schristos addu $10,$22,$2 # 14 12466410c867Schristos srl $2,$30,6 12476410c867Schristos xor $13,$31,$1 12486410c867Schristos sll $12,$30,7 12496410c867Schristos and $13,$30 12506410c867Schristos srl $11,$30,11 12516410c867Schristos xor $2,$12 12526410c867Schristos sll $12,$30,21 12536410c867Schristos xor $2,$11 12546410c867Schristos srl $11,$30,25 12556410c867Schristos xor $2,$12 12566410c867Schristos sll $12,$30,26 12576410c867Schristos xor $2,$11 12586410c867Schristos xor $13,$1 # Ch(e,f,g) 12596410c867Schristos xor $11,$12,$2 # Sigma1(e) 12606410c867Schristos 12616410c867Schristos srl $2,$3,2 12626410c867Schristos addu $10,$13 12636410c867Schristos lw $13,56($6) # K[14] 12646410c867Schristos sll $12,$3,10 12656410c867Schristos addu $10,$11 12666410c867Schristos srl $11,$3,13 12676410c867Schristos xor $2,$12 12686410c867Schristos sll $12,$3,19 12696410c867Schristos xor $2,$11 12706410c867Schristos srl $11,$3,22 12716410c867Schristos xor $2,$12 12726410c867Schristos sll $12,$3,30 12736410c867Schristos xor $2,$11 12746410c867Schristos and $11,$7,$24 12756410c867Schristos xor $2,$12 # Sigma0(a) 12766410c867Schristos xor $12,$7,$24 12776410c867Schristos#endif 12786410c867Schristos sw $22,56($29) # offload to ring buffer 12796410c867Schristos addu $2,$11 12806410c867Schristos and $12,$3 12816410c867Schristos addu $10,$13 # +=K[14] 12826410c867Schristos addu $2,$12 # +=Maj(a,b,c) 12836410c867Schristos addu $25,$10 12846410c867Schristos addu $2,$10 12856410c867Schristos lw $9,4($29) # prefetch from ring buffer 12866410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 12876410c867Schristos wsbh $23,$23 # byte swap(15) 12886410c867Schristos rotr $23,$23,16 12896410c867Schristos#else 12906410c867Schristos srl $12,$23,24 # byte swap(15) 12916410c867Schristos srl $13,$23,8 12926410c867Schristos andi $14,$23,0xFF00 12936410c867Schristos sll $23,$23,24 12946410c867Schristos andi $13,0xFF00 12956410c867Schristos sll $14,$14,8 12966410c867Schristos or $23,$12 12976410c867Schristos or $13,$14 12986410c867Schristos or $23,$13 12996410c867Schristos#endif 13006410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 13016410c867Schristos xor $14,$30,$31 # 15 13026410c867Schristos rotr $12,$25,6 13036410c867Schristos addu $11,$23,$1 13046410c867Schristos rotr $13,$25,11 13056410c867Schristos and $14,$25 13066410c867Schristos rotr $1,$25,25 13076410c867Schristos xor $12,$13 13086410c867Schristos rotr $13,$2,2 13096410c867Schristos xor $14,$31 # Ch(e,f,g) 13106410c867Schristos xor $12,$1 # Sigma1(e) 13116410c867Schristos 13126410c867Schristos rotr $1,$2,13 13136410c867Schristos addu $11,$14 13146410c867Schristos lw $14,60($6) # K[15] 13156410c867Schristos xor $1,$13 13166410c867Schristos rotr $13,$2,22 13176410c867Schristos addu $11,$12 13186410c867Schristos and $12,$3,$7 13196410c867Schristos xor $1,$13 # Sigma0(a) 13206410c867Schristos xor $13,$3,$7 13216410c867Schristos#else 13226410c867Schristos addu $11,$23,$1 # 15 13236410c867Schristos srl $1,$25,6 13246410c867Schristos xor $14,$30,$31 13256410c867Schristos sll $13,$25,7 13266410c867Schristos and $14,$25 13276410c867Schristos srl $12,$25,11 13286410c867Schristos xor $1,$13 13296410c867Schristos sll $13,$25,21 13306410c867Schristos xor $1,$12 13316410c867Schristos srl $12,$25,25 13326410c867Schristos xor $1,$13 13336410c867Schristos sll $13,$25,26 13346410c867Schristos xor $1,$12 13356410c867Schristos xor $14,$31 # Ch(e,f,g) 13366410c867Schristos xor $12,$13,$1 # Sigma1(e) 13376410c867Schristos 13386410c867Schristos srl $1,$2,2 13396410c867Schristos addu $11,$14 13406410c867Schristos lw $14,60($6) # K[15] 13416410c867Schristos sll $13,$2,10 13426410c867Schristos addu $11,$12 13436410c867Schristos srl $12,$2,13 13446410c867Schristos xor $1,$13 13456410c867Schristos sll $13,$2,19 13466410c867Schristos xor $1,$12 13476410c867Schristos srl $12,$2,22 13486410c867Schristos xor $1,$13 13496410c867Schristos sll $13,$2,30 13506410c867Schristos xor $1,$12 13516410c867Schristos and $12,$3,$7 13526410c867Schristos xor $1,$13 # Sigma0(a) 13536410c867Schristos xor $13,$3,$7 13546410c867Schristos#endif 13556410c867Schristos sw $23,60($29) # offload to ring buffer 13566410c867Schristos addu $1,$12 13576410c867Schristos and $13,$2 13586410c867Schristos addu $11,$14 # +=K[15] 13596410c867Schristos addu $1,$13 # +=Maj(a,b,c) 13606410c867Schristos addu $24,$11 13616410c867Schristos addu $1,$11 13626410c867Schristos lw $10,8($29) # prefetch from ring buffer 13636410c867Schristos b .L16_xx 13646410c867Schristos.align 4 13656410c867Schristos.L16_xx: 13666410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 13676410c867Schristos srl $14,$9,3 # Xupdate(16) 13686410c867Schristos rotr $12,$9,7 13696410c867Schristos addu $8,$17 # +=X[i+9] 13706410c867Schristos xor $14,$12 13716410c867Schristos rotr $12,$9,18 13726410c867Schristos 13736410c867Schristos srl $15,$22,10 13746410c867Schristos rotr $13,$22,17 13756410c867Schristos xor $14,$12 # sigma0(X[i+1]) 13766410c867Schristos rotr $12,$22,19 13776410c867Schristos xor $15,$13 13786410c867Schristos addu $8,$14 13796410c867Schristos#else 13806410c867Schristos srl $14,$9,3 # Xupdate(16) 13816410c867Schristos addu $8,$17 # +=X[i+9] 13826410c867Schristos sll $13,$9,14 13836410c867Schristos srl $12,$9,7 13846410c867Schristos xor $14,$13 13856410c867Schristos sll $13,11 13866410c867Schristos xor $14,$12 13876410c867Schristos srl $12,$9,18 13886410c867Schristos xor $14,$13 13896410c867Schristos 13906410c867Schristos srl $15,$22,10 13916410c867Schristos xor $14,$12 # sigma0(X[i+1]) 13926410c867Schristos sll $13,$22,13 13936410c867Schristos addu $8,$14 13946410c867Schristos srl $12,$22,17 13956410c867Schristos xor $15,$13 13966410c867Schristos sll $13,2 13976410c867Schristos xor $15,$12 13986410c867Schristos srl $12,$22,19 13996410c867Schristos xor $15,$13 14006410c867Schristos#endif 14016410c867Schristos xor $15,$12 # sigma1(X[i+14]) 14026410c867Schristos addu $8,$15 14036410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 14046410c867Schristos xor $15,$25,$30 # 16 14056410c867Schristos rotr $13,$24,6 14066410c867Schristos addu $12,$8,$31 14076410c867Schristos rotr $14,$24,11 14086410c867Schristos and $15,$24 14096410c867Schristos rotr $31,$24,25 14106410c867Schristos xor $13,$14 14116410c867Schristos rotr $14,$1,2 14126410c867Schristos xor $15,$30 # Ch(e,f,g) 14136410c867Schristos xor $13,$31 # Sigma1(e) 14146410c867Schristos 14156410c867Schristos rotr $31,$1,13 14166410c867Schristos addu $12,$15 14176410c867Schristos lw $15,64($6) # K[16] 14186410c867Schristos xor $31,$14 14196410c867Schristos rotr $14,$1,22 14206410c867Schristos addu $12,$13 14216410c867Schristos and $13,$2,$3 14226410c867Schristos xor $31,$14 # Sigma0(a) 14236410c867Schristos xor $14,$2,$3 14246410c867Schristos#else 14256410c867Schristos addu $12,$8,$31 # 16 14266410c867Schristos srl $31,$24,6 14276410c867Schristos xor $15,$25,$30 14286410c867Schristos sll $14,$24,7 14296410c867Schristos and $15,$24 14306410c867Schristos srl $13,$24,11 14316410c867Schristos xor $31,$14 14326410c867Schristos sll $14,$24,21 14336410c867Schristos xor $31,$13 14346410c867Schristos srl $13,$24,25 14356410c867Schristos xor $31,$14 14366410c867Schristos sll $14,$24,26 14376410c867Schristos xor $31,$13 14386410c867Schristos xor $15,$30 # Ch(e,f,g) 14396410c867Schristos xor $13,$14,$31 # Sigma1(e) 14406410c867Schristos 14416410c867Schristos srl $31,$1,2 14426410c867Schristos addu $12,$15 14436410c867Schristos lw $15,64($6) # K[16] 14446410c867Schristos sll $14,$1,10 14456410c867Schristos addu $12,$13 14466410c867Schristos srl $13,$1,13 14476410c867Schristos xor $31,$14 14486410c867Schristos sll $14,$1,19 14496410c867Schristos xor $31,$13 14506410c867Schristos srl $13,$1,22 14516410c867Schristos xor $31,$14 14526410c867Schristos sll $14,$1,30 14536410c867Schristos xor $31,$13 14546410c867Schristos and $13,$2,$3 14556410c867Schristos xor $31,$14 # Sigma0(a) 14566410c867Schristos xor $14,$2,$3 14576410c867Schristos#endif 14586410c867Schristos sw $8,0($29) # offload to ring buffer 14596410c867Schristos addu $31,$13 14606410c867Schristos and $14,$1 14616410c867Schristos addu $12,$15 # +=K[16] 14626410c867Schristos addu $31,$14 # +=Maj(a,b,c) 14636410c867Schristos addu $7,$12 14646410c867Schristos addu $31,$12 14656410c867Schristos lw $11,12($29) # prefetch from ring buffer 14666410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 14676410c867Schristos srl $15,$10,3 # Xupdate(17) 14686410c867Schristos rotr $13,$10,7 14696410c867Schristos addu $9,$18 # +=X[i+9] 14706410c867Schristos xor $15,$13 14716410c867Schristos rotr $13,$10,18 14726410c867Schristos 14736410c867Schristos srl $16,$23,10 14746410c867Schristos rotr $14,$23,17 14756410c867Schristos xor $15,$13 # sigma0(X[i+1]) 14766410c867Schristos rotr $13,$23,19 14776410c867Schristos xor $16,$14 14786410c867Schristos addu $9,$15 14796410c867Schristos#else 14806410c867Schristos srl $15,$10,3 # Xupdate(17) 14816410c867Schristos addu $9,$18 # +=X[i+9] 14826410c867Schristos sll $14,$10,14 14836410c867Schristos srl $13,$10,7 14846410c867Schristos xor $15,$14 14856410c867Schristos sll $14,11 14866410c867Schristos xor $15,$13 14876410c867Schristos srl $13,$10,18 14886410c867Schristos xor $15,$14 14896410c867Schristos 14906410c867Schristos srl $16,$23,10 14916410c867Schristos xor $15,$13 # sigma0(X[i+1]) 14926410c867Schristos sll $14,$23,13 14936410c867Schristos addu $9,$15 14946410c867Schristos srl $13,$23,17 14956410c867Schristos xor $16,$14 14966410c867Schristos sll $14,2 14976410c867Schristos xor $16,$13 14986410c867Schristos srl $13,$23,19 14996410c867Schristos xor $16,$14 15006410c867Schristos#endif 15016410c867Schristos xor $16,$13 # sigma1(X[i+14]) 15026410c867Schristos addu $9,$16 15036410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 15046410c867Schristos xor $16,$24,$25 # 17 15056410c867Schristos rotr $14,$7,6 15066410c867Schristos addu $13,$9,$30 15076410c867Schristos rotr $15,$7,11 15086410c867Schristos and $16,$7 15096410c867Schristos rotr $30,$7,25 15106410c867Schristos xor $14,$15 15116410c867Schristos rotr $15,$31,2 15126410c867Schristos xor $16,$25 # Ch(e,f,g) 15136410c867Schristos xor $14,$30 # Sigma1(e) 15146410c867Schristos 15156410c867Schristos rotr $30,$31,13 15166410c867Schristos addu $13,$16 15176410c867Schristos lw $16,68($6) # K[17] 15186410c867Schristos xor $30,$15 15196410c867Schristos rotr $15,$31,22 15206410c867Schristos addu $13,$14 15216410c867Schristos and $14,$1,$2 15226410c867Schristos xor $30,$15 # Sigma0(a) 15236410c867Schristos xor $15,$1,$2 15246410c867Schristos#else 15256410c867Schristos addu $13,$9,$30 # 17 15266410c867Schristos srl $30,$7,6 15276410c867Schristos xor $16,$24,$25 15286410c867Schristos sll $15,$7,7 15296410c867Schristos and $16,$7 15306410c867Schristos srl $14,$7,11 15316410c867Schristos xor $30,$15 15326410c867Schristos sll $15,$7,21 15336410c867Schristos xor $30,$14 15346410c867Schristos srl $14,$7,25 15356410c867Schristos xor $30,$15 15366410c867Schristos sll $15,$7,26 15376410c867Schristos xor $30,$14 15386410c867Schristos xor $16,$25 # Ch(e,f,g) 15396410c867Schristos xor $14,$15,$30 # Sigma1(e) 15406410c867Schristos 15416410c867Schristos srl $30,$31,2 15426410c867Schristos addu $13,$16 15436410c867Schristos lw $16,68($6) # K[17] 15446410c867Schristos sll $15,$31,10 15456410c867Schristos addu $13,$14 15466410c867Schristos srl $14,$31,13 15476410c867Schristos xor $30,$15 15486410c867Schristos sll $15,$31,19 15496410c867Schristos xor $30,$14 15506410c867Schristos srl $14,$31,22 15516410c867Schristos xor $30,$15 15526410c867Schristos sll $15,$31,30 15536410c867Schristos xor $30,$14 15546410c867Schristos and $14,$1,$2 15556410c867Schristos xor $30,$15 # Sigma0(a) 15566410c867Schristos xor $15,$1,$2 15576410c867Schristos#endif 15586410c867Schristos sw $9,4($29) # offload to ring buffer 15596410c867Schristos addu $30,$14 15606410c867Schristos and $15,$31 15616410c867Schristos addu $13,$16 # +=K[17] 15626410c867Schristos addu $30,$15 # +=Maj(a,b,c) 15636410c867Schristos addu $3,$13 15646410c867Schristos addu $30,$13 15656410c867Schristos lw $12,16($29) # prefetch from ring buffer 15666410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 15676410c867Schristos srl $16,$11,3 # Xupdate(18) 15686410c867Schristos rotr $14,$11,7 15696410c867Schristos addu $10,$19 # +=X[i+9] 15706410c867Schristos xor $16,$14 15716410c867Schristos rotr $14,$11,18 15726410c867Schristos 15736410c867Schristos srl $17,$8,10 15746410c867Schristos rotr $15,$8,17 15756410c867Schristos xor $16,$14 # sigma0(X[i+1]) 15766410c867Schristos rotr $14,$8,19 15776410c867Schristos xor $17,$15 15786410c867Schristos addu $10,$16 15796410c867Schristos#else 15806410c867Schristos srl $16,$11,3 # Xupdate(18) 15816410c867Schristos addu $10,$19 # +=X[i+9] 15826410c867Schristos sll $15,$11,14 15836410c867Schristos srl $14,$11,7 15846410c867Schristos xor $16,$15 15856410c867Schristos sll $15,11 15866410c867Schristos xor $16,$14 15876410c867Schristos srl $14,$11,18 15886410c867Schristos xor $16,$15 15896410c867Schristos 15906410c867Schristos srl $17,$8,10 15916410c867Schristos xor $16,$14 # sigma0(X[i+1]) 15926410c867Schristos sll $15,$8,13 15936410c867Schristos addu $10,$16 15946410c867Schristos srl $14,$8,17 15956410c867Schristos xor $17,$15 15966410c867Schristos sll $15,2 15976410c867Schristos xor $17,$14 15986410c867Schristos srl $14,$8,19 15996410c867Schristos xor $17,$15 16006410c867Schristos#endif 16016410c867Schristos xor $17,$14 # sigma1(X[i+14]) 16026410c867Schristos addu $10,$17 16036410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 16046410c867Schristos xor $17,$7,$24 # 18 16056410c867Schristos rotr $15,$3,6 16066410c867Schristos addu $14,$10,$25 16076410c867Schristos rotr $16,$3,11 16086410c867Schristos and $17,$3 16096410c867Schristos rotr $25,$3,25 16106410c867Schristos xor $15,$16 16116410c867Schristos rotr $16,$30,2 16126410c867Schristos xor $17,$24 # Ch(e,f,g) 16136410c867Schristos xor $15,$25 # Sigma1(e) 16146410c867Schristos 16156410c867Schristos rotr $25,$30,13 16166410c867Schristos addu $14,$17 16176410c867Schristos lw $17,72($6) # K[18] 16186410c867Schristos xor $25,$16 16196410c867Schristos rotr $16,$30,22 16206410c867Schristos addu $14,$15 16216410c867Schristos and $15,$31,$1 16226410c867Schristos xor $25,$16 # Sigma0(a) 16236410c867Schristos xor $16,$31,$1 16246410c867Schristos#else 16256410c867Schristos addu $14,$10,$25 # 18 16266410c867Schristos srl $25,$3,6 16276410c867Schristos xor $17,$7,$24 16286410c867Schristos sll $16,$3,7 16296410c867Schristos and $17,$3 16306410c867Schristos srl $15,$3,11 16316410c867Schristos xor $25,$16 16326410c867Schristos sll $16,$3,21 16336410c867Schristos xor $25,$15 16346410c867Schristos srl $15,$3,25 16356410c867Schristos xor $25,$16 16366410c867Schristos sll $16,$3,26 16376410c867Schristos xor $25,$15 16386410c867Schristos xor $17,$24 # Ch(e,f,g) 16396410c867Schristos xor $15,$16,$25 # Sigma1(e) 16406410c867Schristos 16416410c867Schristos srl $25,$30,2 16426410c867Schristos addu $14,$17 16436410c867Schristos lw $17,72($6) # K[18] 16446410c867Schristos sll $16,$30,10 16456410c867Schristos addu $14,$15 16466410c867Schristos srl $15,$30,13 16476410c867Schristos xor $25,$16 16486410c867Schristos sll $16,$30,19 16496410c867Schristos xor $25,$15 16506410c867Schristos srl $15,$30,22 16516410c867Schristos xor $25,$16 16526410c867Schristos sll $16,$30,30 16536410c867Schristos xor $25,$15 16546410c867Schristos and $15,$31,$1 16556410c867Schristos xor $25,$16 # Sigma0(a) 16566410c867Schristos xor $16,$31,$1 16576410c867Schristos#endif 16586410c867Schristos sw $10,8($29) # offload to ring buffer 16596410c867Schristos addu $25,$15 16606410c867Schristos and $16,$30 16616410c867Schristos addu $14,$17 # +=K[18] 16626410c867Schristos addu $25,$16 # +=Maj(a,b,c) 16636410c867Schristos addu $2,$14 16646410c867Schristos addu $25,$14 16656410c867Schristos lw $13,20($29) # prefetch from ring buffer 16666410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 16676410c867Schristos srl $17,$12,3 # Xupdate(19) 16686410c867Schristos rotr $15,$12,7 16696410c867Schristos addu $11,$20 # +=X[i+9] 16706410c867Schristos xor $17,$15 16716410c867Schristos rotr $15,$12,18 16726410c867Schristos 16736410c867Schristos srl $18,$9,10 16746410c867Schristos rotr $16,$9,17 16756410c867Schristos xor $17,$15 # sigma0(X[i+1]) 16766410c867Schristos rotr $15,$9,19 16776410c867Schristos xor $18,$16 16786410c867Schristos addu $11,$17 16796410c867Schristos#else 16806410c867Schristos srl $17,$12,3 # Xupdate(19) 16816410c867Schristos addu $11,$20 # +=X[i+9] 16826410c867Schristos sll $16,$12,14 16836410c867Schristos srl $15,$12,7 16846410c867Schristos xor $17,$16 16856410c867Schristos sll $16,11 16866410c867Schristos xor $17,$15 16876410c867Schristos srl $15,$12,18 16886410c867Schristos xor $17,$16 16896410c867Schristos 16906410c867Schristos srl $18,$9,10 16916410c867Schristos xor $17,$15 # sigma0(X[i+1]) 16926410c867Schristos sll $16,$9,13 16936410c867Schristos addu $11,$17 16946410c867Schristos srl $15,$9,17 16956410c867Schristos xor $18,$16 16966410c867Schristos sll $16,2 16976410c867Schristos xor $18,$15 16986410c867Schristos srl $15,$9,19 16996410c867Schristos xor $18,$16 17006410c867Schristos#endif 17016410c867Schristos xor $18,$15 # sigma1(X[i+14]) 17026410c867Schristos addu $11,$18 17036410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 17046410c867Schristos xor $18,$3,$7 # 19 17056410c867Schristos rotr $16,$2,6 17066410c867Schristos addu $15,$11,$24 17076410c867Schristos rotr $17,$2,11 17086410c867Schristos and $18,$2 17096410c867Schristos rotr $24,$2,25 17106410c867Schristos xor $16,$17 17116410c867Schristos rotr $17,$25,2 17126410c867Schristos xor $18,$7 # Ch(e,f,g) 17136410c867Schristos xor $16,$24 # Sigma1(e) 17146410c867Schristos 17156410c867Schristos rotr $24,$25,13 17166410c867Schristos addu $15,$18 17176410c867Schristos lw $18,76($6) # K[19] 17186410c867Schristos xor $24,$17 17196410c867Schristos rotr $17,$25,22 17206410c867Schristos addu $15,$16 17216410c867Schristos and $16,$30,$31 17226410c867Schristos xor $24,$17 # Sigma0(a) 17236410c867Schristos xor $17,$30,$31 17246410c867Schristos#else 17256410c867Schristos addu $15,$11,$24 # 19 17266410c867Schristos srl $24,$2,6 17276410c867Schristos xor $18,$3,$7 17286410c867Schristos sll $17,$2,7 17296410c867Schristos and $18,$2 17306410c867Schristos srl $16,$2,11 17316410c867Schristos xor $24,$17 17326410c867Schristos sll $17,$2,21 17336410c867Schristos xor $24,$16 17346410c867Schristos srl $16,$2,25 17356410c867Schristos xor $24,$17 17366410c867Schristos sll $17,$2,26 17376410c867Schristos xor $24,$16 17386410c867Schristos xor $18,$7 # Ch(e,f,g) 17396410c867Schristos xor $16,$17,$24 # Sigma1(e) 17406410c867Schristos 17416410c867Schristos srl $24,$25,2 17426410c867Schristos addu $15,$18 17436410c867Schristos lw $18,76($6) # K[19] 17446410c867Schristos sll $17,$25,10 17456410c867Schristos addu $15,$16 17466410c867Schristos srl $16,$25,13 17476410c867Schristos xor $24,$17 17486410c867Schristos sll $17,$25,19 17496410c867Schristos xor $24,$16 17506410c867Schristos srl $16,$25,22 17516410c867Schristos xor $24,$17 17526410c867Schristos sll $17,$25,30 17536410c867Schristos xor $24,$16 17546410c867Schristos and $16,$30,$31 17556410c867Schristos xor $24,$17 # Sigma0(a) 17566410c867Schristos xor $17,$30,$31 17576410c867Schristos#endif 17586410c867Schristos sw $11,12($29) # offload to ring buffer 17596410c867Schristos addu $24,$16 17606410c867Schristos and $17,$25 17616410c867Schristos addu $15,$18 # +=K[19] 17626410c867Schristos addu $24,$17 # +=Maj(a,b,c) 17636410c867Schristos addu $1,$15 17646410c867Schristos addu $24,$15 17656410c867Schristos lw $14,24($29) # prefetch from ring buffer 17666410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 17676410c867Schristos srl $18,$13,3 # Xupdate(20) 17686410c867Schristos rotr $16,$13,7 17696410c867Schristos addu $12,$21 # +=X[i+9] 17706410c867Schristos xor $18,$16 17716410c867Schristos rotr $16,$13,18 17726410c867Schristos 17736410c867Schristos srl $19,$10,10 17746410c867Schristos rotr $17,$10,17 17756410c867Schristos xor $18,$16 # sigma0(X[i+1]) 17766410c867Schristos rotr $16,$10,19 17776410c867Schristos xor $19,$17 17786410c867Schristos addu $12,$18 17796410c867Schristos#else 17806410c867Schristos srl $18,$13,3 # Xupdate(20) 17816410c867Schristos addu $12,$21 # +=X[i+9] 17826410c867Schristos sll $17,$13,14 17836410c867Schristos srl $16,$13,7 17846410c867Schristos xor $18,$17 17856410c867Schristos sll $17,11 17866410c867Schristos xor $18,$16 17876410c867Schristos srl $16,$13,18 17886410c867Schristos xor $18,$17 17896410c867Schristos 17906410c867Schristos srl $19,$10,10 17916410c867Schristos xor $18,$16 # sigma0(X[i+1]) 17926410c867Schristos sll $17,$10,13 17936410c867Schristos addu $12,$18 17946410c867Schristos srl $16,$10,17 17956410c867Schristos xor $19,$17 17966410c867Schristos sll $17,2 17976410c867Schristos xor $19,$16 17986410c867Schristos srl $16,$10,19 17996410c867Schristos xor $19,$17 18006410c867Schristos#endif 18016410c867Schristos xor $19,$16 # sigma1(X[i+14]) 18026410c867Schristos addu $12,$19 18036410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 18046410c867Schristos xor $19,$2,$3 # 20 18056410c867Schristos rotr $17,$1,6 18066410c867Schristos addu $16,$12,$7 18076410c867Schristos rotr $18,$1,11 18086410c867Schristos and $19,$1 18096410c867Schristos rotr $7,$1,25 18106410c867Schristos xor $17,$18 18116410c867Schristos rotr $18,$24,2 18126410c867Schristos xor $19,$3 # Ch(e,f,g) 18136410c867Schristos xor $17,$7 # Sigma1(e) 18146410c867Schristos 18156410c867Schristos rotr $7,$24,13 18166410c867Schristos addu $16,$19 18176410c867Schristos lw $19,80($6) # K[20] 18186410c867Schristos xor $7,$18 18196410c867Schristos rotr $18,$24,22 18206410c867Schristos addu $16,$17 18216410c867Schristos and $17,$25,$30 18226410c867Schristos xor $7,$18 # Sigma0(a) 18236410c867Schristos xor $18,$25,$30 18246410c867Schristos#else 18256410c867Schristos addu $16,$12,$7 # 20 18266410c867Schristos srl $7,$1,6 18276410c867Schristos xor $19,$2,$3 18286410c867Schristos sll $18,$1,7 18296410c867Schristos and $19,$1 18306410c867Schristos srl $17,$1,11 18316410c867Schristos xor $7,$18 18326410c867Schristos sll $18,$1,21 18336410c867Schristos xor $7,$17 18346410c867Schristos srl $17,$1,25 18356410c867Schristos xor $7,$18 18366410c867Schristos sll $18,$1,26 18376410c867Schristos xor $7,$17 18386410c867Schristos xor $19,$3 # Ch(e,f,g) 18396410c867Schristos xor $17,$18,$7 # Sigma1(e) 18406410c867Schristos 18416410c867Schristos srl $7,$24,2 18426410c867Schristos addu $16,$19 18436410c867Schristos lw $19,80($6) # K[20] 18446410c867Schristos sll $18,$24,10 18456410c867Schristos addu $16,$17 18466410c867Schristos srl $17,$24,13 18476410c867Schristos xor $7,$18 18486410c867Schristos sll $18,$24,19 18496410c867Schristos xor $7,$17 18506410c867Schristos srl $17,$24,22 18516410c867Schristos xor $7,$18 18526410c867Schristos sll $18,$24,30 18536410c867Schristos xor $7,$17 18546410c867Schristos and $17,$25,$30 18556410c867Schristos xor $7,$18 # Sigma0(a) 18566410c867Schristos xor $18,$25,$30 18576410c867Schristos#endif 18586410c867Schristos sw $12,16($29) # offload to ring buffer 18596410c867Schristos addu $7,$17 18606410c867Schristos and $18,$24 18616410c867Schristos addu $16,$19 # +=K[20] 18626410c867Schristos addu $7,$18 # +=Maj(a,b,c) 18636410c867Schristos addu $31,$16 18646410c867Schristos addu $7,$16 18656410c867Schristos lw $15,28($29) # prefetch from ring buffer 18666410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 18676410c867Schristos srl $19,$14,3 # Xupdate(21) 18686410c867Schristos rotr $17,$14,7 18696410c867Schristos addu $13,$22 # +=X[i+9] 18706410c867Schristos xor $19,$17 18716410c867Schristos rotr $17,$14,18 18726410c867Schristos 18736410c867Schristos srl $20,$11,10 18746410c867Schristos rotr $18,$11,17 18756410c867Schristos xor $19,$17 # sigma0(X[i+1]) 18766410c867Schristos rotr $17,$11,19 18776410c867Schristos xor $20,$18 18786410c867Schristos addu $13,$19 18796410c867Schristos#else 18806410c867Schristos srl $19,$14,3 # Xupdate(21) 18816410c867Schristos addu $13,$22 # +=X[i+9] 18826410c867Schristos sll $18,$14,14 18836410c867Schristos srl $17,$14,7 18846410c867Schristos xor $19,$18 18856410c867Schristos sll $18,11 18866410c867Schristos xor $19,$17 18876410c867Schristos srl $17,$14,18 18886410c867Schristos xor $19,$18 18896410c867Schristos 18906410c867Schristos srl $20,$11,10 18916410c867Schristos xor $19,$17 # sigma0(X[i+1]) 18926410c867Schristos sll $18,$11,13 18936410c867Schristos addu $13,$19 18946410c867Schristos srl $17,$11,17 18956410c867Schristos xor $20,$18 18966410c867Schristos sll $18,2 18976410c867Schristos xor $20,$17 18986410c867Schristos srl $17,$11,19 18996410c867Schristos xor $20,$18 19006410c867Schristos#endif 19016410c867Schristos xor $20,$17 # sigma1(X[i+14]) 19026410c867Schristos addu $13,$20 19036410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 19046410c867Schristos xor $20,$1,$2 # 21 19056410c867Schristos rotr $18,$31,6 19066410c867Schristos addu $17,$13,$3 19076410c867Schristos rotr $19,$31,11 19086410c867Schristos and $20,$31 19096410c867Schristos rotr $3,$31,25 19106410c867Schristos xor $18,$19 19116410c867Schristos rotr $19,$7,2 19126410c867Schristos xor $20,$2 # Ch(e,f,g) 19136410c867Schristos xor $18,$3 # Sigma1(e) 19146410c867Schristos 19156410c867Schristos rotr $3,$7,13 19166410c867Schristos addu $17,$20 19176410c867Schristos lw $20,84($6) # K[21] 19186410c867Schristos xor $3,$19 19196410c867Schristos rotr $19,$7,22 19206410c867Schristos addu $17,$18 19216410c867Schristos and $18,$24,$25 19226410c867Schristos xor $3,$19 # Sigma0(a) 19236410c867Schristos xor $19,$24,$25 19246410c867Schristos#else 19256410c867Schristos addu $17,$13,$3 # 21 19266410c867Schristos srl $3,$31,6 19276410c867Schristos xor $20,$1,$2 19286410c867Schristos sll $19,$31,7 19296410c867Schristos and $20,$31 19306410c867Schristos srl $18,$31,11 19316410c867Schristos xor $3,$19 19326410c867Schristos sll $19,$31,21 19336410c867Schristos xor $3,$18 19346410c867Schristos srl $18,$31,25 19356410c867Schristos xor $3,$19 19366410c867Schristos sll $19,$31,26 19376410c867Schristos xor $3,$18 19386410c867Schristos xor $20,$2 # Ch(e,f,g) 19396410c867Schristos xor $18,$19,$3 # Sigma1(e) 19406410c867Schristos 19416410c867Schristos srl $3,$7,2 19426410c867Schristos addu $17,$20 19436410c867Schristos lw $20,84($6) # K[21] 19446410c867Schristos sll $19,$7,10 19456410c867Schristos addu $17,$18 19466410c867Schristos srl $18,$7,13 19476410c867Schristos xor $3,$19 19486410c867Schristos sll $19,$7,19 19496410c867Schristos xor $3,$18 19506410c867Schristos srl $18,$7,22 19516410c867Schristos xor $3,$19 19526410c867Schristos sll $19,$7,30 19536410c867Schristos xor $3,$18 19546410c867Schristos and $18,$24,$25 19556410c867Schristos xor $3,$19 # Sigma0(a) 19566410c867Schristos xor $19,$24,$25 19576410c867Schristos#endif 19586410c867Schristos sw $13,20($29) # offload to ring buffer 19596410c867Schristos addu $3,$18 19606410c867Schristos and $19,$7 19616410c867Schristos addu $17,$20 # +=K[21] 19626410c867Schristos addu $3,$19 # +=Maj(a,b,c) 19636410c867Schristos addu $30,$17 19646410c867Schristos addu $3,$17 19656410c867Schristos lw $16,32($29) # prefetch from ring buffer 19666410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 19676410c867Schristos srl $20,$15,3 # Xupdate(22) 19686410c867Schristos rotr $18,$15,7 19696410c867Schristos addu $14,$23 # +=X[i+9] 19706410c867Schristos xor $20,$18 19716410c867Schristos rotr $18,$15,18 19726410c867Schristos 19736410c867Schristos srl $21,$12,10 19746410c867Schristos rotr $19,$12,17 19756410c867Schristos xor $20,$18 # sigma0(X[i+1]) 19766410c867Schristos rotr $18,$12,19 19776410c867Schristos xor $21,$19 19786410c867Schristos addu $14,$20 19796410c867Schristos#else 19806410c867Schristos srl $20,$15,3 # Xupdate(22) 19816410c867Schristos addu $14,$23 # +=X[i+9] 19826410c867Schristos sll $19,$15,14 19836410c867Schristos srl $18,$15,7 19846410c867Schristos xor $20,$19 19856410c867Schristos sll $19,11 19866410c867Schristos xor $20,$18 19876410c867Schristos srl $18,$15,18 19886410c867Schristos xor $20,$19 19896410c867Schristos 19906410c867Schristos srl $21,$12,10 19916410c867Schristos xor $20,$18 # sigma0(X[i+1]) 19926410c867Schristos sll $19,$12,13 19936410c867Schristos addu $14,$20 19946410c867Schristos srl $18,$12,17 19956410c867Schristos xor $21,$19 19966410c867Schristos sll $19,2 19976410c867Schristos xor $21,$18 19986410c867Schristos srl $18,$12,19 19996410c867Schristos xor $21,$19 20006410c867Schristos#endif 20016410c867Schristos xor $21,$18 # sigma1(X[i+14]) 20026410c867Schristos addu $14,$21 20036410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 20046410c867Schristos xor $21,$31,$1 # 22 20056410c867Schristos rotr $19,$30,6 20066410c867Schristos addu $18,$14,$2 20076410c867Schristos rotr $20,$30,11 20086410c867Schristos and $21,$30 20096410c867Schristos rotr $2,$30,25 20106410c867Schristos xor $19,$20 20116410c867Schristos rotr $20,$3,2 20126410c867Schristos xor $21,$1 # Ch(e,f,g) 20136410c867Schristos xor $19,$2 # Sigma1(e) 20146410c867Schristos 20156410c867Schristos rotr $2,$3,13 20166410c867Schristos addu $18,$21 20176410c867Schristos lw $21,88($6) # K[22] 20186410c867Schristos xor $2,$20 20196410c867Schristos rotr $20,$3,22 20206410c867Schristos addu $18,$19 20216410c867Schristos and $19,$7,$24 20226410c867Schristos xor $2,$20 # Sigma0(a) 20236410c867Schristos xor $20,$7,$24 20246410c867Schristos#else 20256410c867Schristos addu $18,$14,$2 # 22 20266410c867Schristos srl $2,$30,6 20276410c867Schristos xor $21,$31,$1 20286410c867Schristos sll $20,$30,7 20296410c867Schristos and $21,$30 20306410c867Schristos srl $19,$30,11 20316410c867Schristos xor $2,$20 20326410c867Schristos sll $20,$30,21 20336410c867Schristos xor $2,$19 20346410c867Schristos srl $19,$30,25 20356410c867Schristos xor $2,$20 20366410c867Schristos sll $20,$30,26 20376410c867Schristos xor $2,$19 20386410c867Schristos xor $21,$1 # Ch(e,f,g) 20396410c867Schristos xor $19,$20,$2 # Sigma1(e) 20406410c867Schristos 20416410c867Schristos srl $2,$3,2 20426410c867Schristos addu $18,$21 20436410c867Schristos lw $21,88($6) # K[22] 20446410c867Schristos sll $20,$3,10 20456410c867Schristos addu $18,$19 20466410c867Schristos srl $19,$3,13 20476410c867Schristos xor $2,$20 20486410c867Schristos sll $20,$3,19 20496410c867Schristos xor $2,$19 20506410c867Schristos srl $19,$3,22 20516410c867Schristos xor $2,$20 20526410c867Schristos sll $20,$3,30 20536410c867Schristos xor $2,$19 20546410c867Schristos and $19,$7,$24 20556410c867Schristos xor $2,$20 # Sigma0(a) 20566410c867Schristos xor $20,$7,$24 20576410c867Schristos#endif 20586410c867Schristos sw $14,24($29) # offload to ring buffer 20596410c867Schristos addu $2,$19 20606410c867Schristos and $20,$3 20616410c867Schristos addu $18,$21 # +=K[22] 20626410c867Schristos addu $2,$20 # +=Maj(a,b,c) 20636410c867Schristos addu $25,$18 20646410c867Schristos addu $2,$18 20656410c867Schristos lw $17,36($29) # prefetch from ring buffer 20666410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 20676410c867Schristos srl $21,$16,3 # Xupdate(23) 20686410c867Schristos rotr $19,$16,7 20696410c867Schristos addu $15,$8 # +=X[i+9] 20706410c867Schristos xor $21,$19 20716410c867Schristos rotr $19,$16,18 20726410c867Schristos 20736410c867Schristos srl $22,$13,10 20746410c867Schristos rotr $20,$13,17 20756410c867Schristos xor $21,$19 # sigma0(X[i+1]) 20766410c867Schristos rotr $19,$13,19 20776410c867Schristos xor $22,$20 20786410c867Schristos addu $15,$21 20796410c867Schristos#else 20806410c867Schristos srl $21,$16,3 # Xupdate(23) 20816410c867Schristos addu $15,$8 # +=X[i+9] 20826410c867Schristos sll $20,$16,14 20836410c867Schristos srl $19,$16,7 20846410c867Schristos xor $21,$20 20856410c867Schristos sll $20,11 20866410c867Schristos xor $21,$19 20876410c867Schristos srl $19,$16,18 20886410c867Schristos xor $21,$20 20896410c867Schristos 20906410c867Schristos srl $22,$13,10 20916410c867Schristos xor $21,$19 # sigma0(X[i+1]) 20926410c867Schristos sll $20,$13,13 20936410c867Schristos addu $15,$21 20946410c867Schristos srl $19,$13,17 20956410c867Schristos xor $22,$20 20966410c867Schristos sll $20,2 20976410c867Schristos xor $22,$19 20986410c867Schristos srl $19,$13,19 20996410c867Schristos xor $22,$20 21006410c867Schristos#endif 21016410c867Schristos xor $22,$19 # sigma1(X[i+14]) 21026410c867Schristos addu $15,$22 21036410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 21046410c867Schristos xor $22,$30,$31 # 23 21056410c867Schristos rotr $20,$25,6 21066410c867Schristos addu $19,$15,$1 21076410c867Schristos rotr $21,$25,11 21086410c867Schristos and $22,$25 21096410c867Schristos rotr $1,$25,25 21106410c867Schristos xor $20,$21 21116410c867Schristos rotr $21,$2,2 21126410c867Schristos xor $22,$31 # Ch(e,f,g) 21136410c867Schristos xor $20,$1 # Sigma1(e) 21146410c867Schristos 21156410c867Schristos rotr $1,$2,13 21166410c867Schristos addu $19,$22 21176410c867Schristos lw $22,92($6) # K[23] 21186410c867Schristos xor $1,$21 21196410c867Schristos rotr $21,$2,22 21206410c867Schristos addu $19,$20 21216410c867Schristos and $20,$3,$7 21226410c867Schristos xor $1,$21 # Sigma0(a) 21236410c867Schristos xor $21,$3,$7 21246410c867Schristos#else 21256410c867Schristos addu $19,$15,$1 # 23 21266410c867Schristos srl $1,$25,6 21276410c867Schristos xor $22,$30,$31 21286410c867Schristos sll $21,$25,7 21296410c867Schristos and $22,$25 21306410c867Schristos srl $20,$25,11 21316410c867Schristos xor $1,$21 21326410c867Schristos sll $21,$25,21 21336410c867Schristos xor $1,$20 21346410c867Schristos srl $20,$25,25 21356410c867Schristos xor $1,$21 21366410c867Schristos sll $21,$25,26 21376410c867Schristos xor $1,$20 21386410c867Schristos xor $22,$31 # Ch(e,f,g) 21396410c867Schristos xor $20,$21,$1 # Sigma1(e) 21406410c867Schristos 21416410c867Schristos srl $1,$2,2 21426410c867Schristos addu $19,$22 21436410c867Schristos lw $22,92($6) # K[23] 21446410c867Schristos sll $21,$2,10 21456410c867Schristos addu $19,$20 21466410c867Schristos srl $20,$2,13 21476410c867Schristos xor $1,$21 21486410c867Schristos sll $21,$2,19 21496410c867Schristos xor $1,$20 21506410c867Schristos srl $20,$2,22 21516410c867Schristos xor $1,$21 21526410c867Schristos sll $21,$2,30 21536410c867Schristos xor $1,$20 21546410c867Schristos and $20,$3,$7 21556410c867Schristos xor $1,$21 # Sigma0(a) 21566410c867Schristos xor $21,$3,$7 21576410c867Schristos#endif 21586410c867Schristos sw $15,28($29) # offload to ring buffer 21596410c867Schristos addu $1,$20 21606410c867Schristos and $21,$2 21616410c867Schristos addu $19,$22 # +=K[23] 21626410c867Schristos addu $1,$21 # +=Maj(a,b,c) 21636410c867Schristos addu $24,$19 21646410c867Schristos addu $1,$19 21656410c867Schristos lw $18,40($29) # prefetch from ring buffer 21666410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 21676410c867Schristos srl $22,$17,3 # Xupdate(24) 21686410c867Schristos rotr $20,$17,7 21696410c867Schristos addu $16,$9 # +=X[i+9] 21706410c867Schristos xor $22,$20 21716410c867Schristos rotr $20,$17,18 21726410c867Schristos 21736410c867Schristos srl $23,$14,10 21746410c867Schristos rotr $21,$14,17 21756410c867Schristos xor $22,$20 # sigma0(X[i+1]) 21766410c867Schristos rotr $20,$14,19 21776410c867Schristos xor $23,$21 21786410c867Schristos addu $16,$22 21796410c867Schristos#else 21806410c867Schristos srl $22,$17,3 # Xupdate(24) 21816410c867Schristos addu $16,$9 # +=X[i+9] 21826410c867Schristos sll $21,$17,14 21836410c867Schristos srl $20,$17,7 21846410c867Schristos xor $22,$21 21856410c867Schristos sll $21,11 21866410c867Schristos xor $22,$20 21876410c867Schristos srl $20,$17,18 21886410c867Schristos xor $22,$21 21896410c867Schristos 21906410c867Schristos srl $23,$14,10 21916410c867Schristos xor $22,$20 # sigma0(X[i+1]) 21926410c867Schristos sll $21,$14,13 21936410c867Schristos addu $16,$22 21946410c867Schristos srl $20,$14,17 21956410c867Schristos xor $23,$21 21966410c867Schristos sll $21,2 21976410c867Schristos xor $23,$20 21986410c867Schristos srl $20,$14,19 21996410c867Schristos xor $23,$21 22006410c867Schristos#endif 22016410c867Schristos xor $23,$20 # sigma1(X[i+14]) 22026410c867Schristos addu $16,$23 22036410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 22046410c867Schristos xor $23,$25,$30 # 24 22056410c867Schristos rotr $21,$24,6 22066410c867Schristos addu $20,$16,$31 22076410c867Schristos rotr $22,$24,11 22086410c867Schristos and $23,$24 22096410c867Schristos rotr $31,$24,25 22106410c867Schristos xor $21,$22 22116410c867Schristos rotr $22,$1,2 22126410c867Schristos xor $23,$30 # Ch(e,f,g) 22136410c867Schristos xor $21,$31 # Sigma1(e) 22146410c867Schristos 22156410c867Schristos rotr $31,$1,13 22166410c867Schristos addu $20,$23 22176410c867Schristos lw $23,96($6) # K[24] 22186410c867Schristos xor $31,$22 22196410c867Schristos rotr $22,$1,22 22206410c867Schristos addu $20,$21 22216410c867Schristos and $21,$2,$3 22226410c867Schristos xor $31,$22 # Sigma0(a) 22236410c867Schristos xor $22,$2,$3 22246410c867Schristos#else 22256410c867Schristos addu $20,$16,$31 # 24 22266410c867Schristos srl $31,$24,6 22276410c867Schristos xor $23,$25,$30 22286410c867Schristos sll $22,$24,7 22296410c867Schristos and $23,$24 22306410c867Schristos srl $21,$24,11 22316410c867Schristos xor $31,$22 22326410c867Schristos sll $22,$24,21 22336410c867Schristos xor $31,$21 22346410c867Schristos srl $21,$24,25 22356410c867Schristos xor $31,$22 22366410c867Schristos sll $22,$24,26 22376410c867Schristos xor $31,$21 22386410c867Schristos xor $23,$30 # Ch(e,f,g) 22396410c867Schristos xor $21,$22,$31 # Sigma1(e) 22406410c867Schristos 22416410c867Schristos srl $31,$1,2 22426410c867Schristos addu $20,$23 22436410c867Schristos lw $23,96($6) # K[24] 22446410c867Schristos sll $22,$1,10 22456410c867Schristos addu $20,$21 22466410c867Schristos srl $21,$1,13 22476410c867Schristos xor $31,$22 22486410c867Schristos sll $22,$1,19 22496410c867Schristos xor $31,$21 22506410c867Schristos srl $21,$1,22 22516410c867Schristos xor $31,$22 22526410c867Schristos sll $22,$1,30 22536410c867Schristos xor $31,$21 22546410c867Schristos and $21,$2,$3 22556410c867Schristos xor $31,$22 # Sigma0(a) 22566410c867Schristos xor $22,$2,$3 22576410c867Schristos#endif 22586410c867Schristos sw $16,32($29) # offload to ring buffer 22596410c867Schristos addu $31,$21 22606410c867Schristos and $22,$1 22616410c867Schristos addu $20,$23 # +=K[24] 22626410c867Schristos addu $31,$22 # +=Maj(a,b,c) 22636410c867Schristos addu $7,$20 22646410c867Schristos addu $31,$20 22656410c867Schristos lw $19,44($29) # prefetch from ring buffer 22666410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 22676410c867Schristos srl $23,$18,3 # Xupdate(25) 22686410c867Schristos rotr $21,$18,7 22696410c867Schristos addu $17,$10 # +=X[i+9] 22706410c867Schristos xor $23,$21 22716410c867Schristos rotr $21,$18,18 22726410c867Schristos 22736410c867Schristos srl $8,$15,10 22746410c867Schristos rotr $22,$15,17 22756410c867Schristos xor $23,$21 # sigma0(X[i+1]) 22766410c867Schristos rotr $21,$15,19 22776410c867Schristos xor $8,$22 22786410c867Schristos addu $17,$23 22796410c867Schristos#else 22806410c867Schristos srl $23,$18,3 # Xupdate(25) 22816410c867Schristos addu $17,$10 # +=X[i+9] 22826410c867Schristos sll $22,$18,14 22836410c867Schristos srl $21,$18,7 22846410c867Schristos xor $23,$22 22856410c867Schristos sll $22,11 22866410c867Schristos xor $23,$21 22876410c867Schristos srl $21,$18,18 22886410c867Schristos xor $23,$22 22896410c867Schristos 22906410c867Schristos srl $8,$15,10 22916410c867Schristos xor $23,$21 # sigma0(X[i+1]) 22926410c867Schristos sll $22,$15,13 22936410c867Schristos addu $17,$23 22946410c867Schristos srl $21,$15,17 22956410c867Schristos xor $8,$22 22966410c867Schristos sll $22,2 22976410c867Schristos xor $8,$21 22986410c867Schristos srl $21,$15,19 22996410c867Schristos xor $8,$22 23006410c867Schristos#endif 23016410c867Schristos xor $8,$21 # sigma1(X[i+14]) 23026410c867Schristos addu $17,$8 23036410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 23046410c867Schristos xor $8,$24,$25 # 25 23056410c867Schristos rotr $22,$7,6 23066410c867Schristos addu $21,$17,$30 23076410c867Schristos rotr $23,$7,11 23086410c867Schristos and $8,$7 23096410c867Schristos rotr $30,$7,25 23106410c867Schristos xor $22,$23 23116410c867Schristos rotr $23,$31,2 23126410c867Schristos xor $8,$25 # Ch(e,f,g) 23136410c867Schristos xor $22,$30 # Sigma1(e) 23146410c867Schristos 23156410c867Schristos rotr $30,$31,13 23166410c867Schristos addu $21,$8 23176410c867Schristos lw $8,100($6) # K[25] 23186410c867Schristos xor $30,$23 23196410c867Schristos rotr $23,$31,22 23206410c867Schristos addu $21,$22 23216410c867Schristos and $22,$1,$2 23226410c867Schristos xor $30,$23 # Sigma0(a) 23236410c867Schristos xor $23,$1,$2 23246410c867Schristos#else 23256410c867Schristos addu $21,$17,$30 # 25 23266410c867Schristos srl $30,$7,6 23276410c867Schristos xor $8,$24,$25 23286410c867Schristos sll $23,$7,7 23296410c867Schristos and $8,$7 23306410c867Schristos srl $22,$7,11 23316410c867Schristos xor $30,$23 23326410c867Schristos sll $23,$7,21 23336410c867Schristos xor $30,$22 23346410c867Schristos srl $22,$7,25 23356410c867Schristos xor $30,$23 23366410c867Schristos sll $23,$7,26 23376410c867Schristos xor $30,$22 23386410c867Schristos xor $8,$25 # Ch(e,f,g) 23396410c867Schristos xor $22,$23,$30 # Sigma1(e) 23406410c867Schristos 23416410c867Schristos srl $30,$31,2 23426410c867Schristos addu $21,$8 23436410c867Schristos lw $8,100($6) # K[25] 23446410c867Schristos sll $23,$31,10 23456410c867Schristos addu $21,$22 23466410c867Schristos srl $22,$31,13 23476410c867Schristos xor $30,$23 23486410c867Schristos sll $23,$31,19 23496410c867Schristos xor $30,$22 23506410c867Schristos srl $22,$31,22 23516410c867Schristos xor $30,$23 23526410c867Schristos sll $23,$31,30 23536410c867Schristos xor $30,$22 23546410c867Schristos and $22,$1,$2 23556410c867Schristos xor $30,$23 # Sigma0(a) 23566410c867Schristos xor $23,$1,$2 23576410c867Schristos#endif 23586410c867Schristos sw $17,36($29) # offload to ring buffer 23596410c867Schristos addu $30,$22 23606410c867Schristos and $23,$31 23616410c867Schristos addu $21,$8 # +=K[25] 23626410c867Schristos addu $30,$23 # +=Maj(a,b,c) 23636410c867Schristos addu $3,$21 23646410c867Schristos addu $30,$21 23656410c867Schristos lw $20,48($29) # prefetch from ring buffer 23666410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 23676410c867Schristos srl $8,$19,3 # Xupdate(26) 23686410c867Schristos rotr $22,$19,7 23696410c867Schristos addu $18,$11 # +=X[i+9] 23706410c867Schristos xor $8,$22 23716410c867Schristos rotr $22,$19,18 23726410c867Schristos 23736410c867Schristos srl $9,$16,10 23746410c867Schristos rotr $23,$16,17 23756410c867Schristos xor $8,$22 # sigma0(X[i+1]) 23766410c867Schristos rotr $22,$16,19 23776410c867Schristos xor $9,$23 23786410c867Schristos addu $18,$8 23796410c867Schristos#else 23806410c867Schristos srl $8,$19,3 # Xupdate(26) 23816410c867Schristos addu $18,$11 # +=X[i+9] 23826410c867Schristos sll $23,$19,14 23836410c867Schristos srl $22,$19,7 23846410c867Schristos xor $8,$23 23856410c867Schristos sll $23,11 23866410c867Schristos xor $8,$22 23876410c867Schristos srl $22,$19,18 23886410c867Schristos xor $8,$23 23896410c867Schristos 23906410c867Schristos srl $9,$16,10 23916410c867Schristos xor $8,$22 # sigma0(X[i+1]) 23926410c867Schristos sll $23,$16,13 23936410c867Schristos addu $18,$8 23946410c867Schristos srl $22,$16,17 23956410c867Schristos xor $9,$23 23966410c867Schristos sll $23,2 23976410c867Schristos xor $9,$22 23986410c867Schristos srl $22,$16,19 23996410c867Schristos xor $9,$23 24006410c867Schristos#endif 24016410c867Schristos xor $9,$22 # sigma1(X[i+14]) 24026410c867Schristos addu $18,$9 24036410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 24046410c867Schristos xor $9,$7,$24 # 26 24056410c867Schristos rotr $23,$3,6 24066410c867Schristos addu $22,$18,$25 24076410c867Schristos rotr $8,$3,11 24086410c867Schristos and $9,$3 24096410c867Schristos rotr $25,$3,25 24106410c867Schristos xor $23,$8 24116410c867Schristos rotr $8,$30,2 24126410c867Schristos xor $9,$24 # Ch(e,f,g) 24136410c867Schristos xor $23,$25 # Sigma1(e) 24146410c867Schristos 24156410c867Schristos rotr $25,$30,13 24166410c867Schristos addu $22,$9 24176410c867Schristos lw $9,104($6) # K[26] 24186410c867Schristos xor $25,$8 24196410c867Schristos rotr $8,$30,22 24206410c867Schristos addu $22,$23 24216410c867Schristos and $23,$31,$1 24226410c867Schristos xor $25,$8 # Sigma0(a) 24236410c867Schristos xor $8,$31,$1 24246410c867Schristos#else 24256410c867Schristos addu $22,$18,$25 # 26 24266410c867Schristos srl $25,$3,6 24276410c867Schristos xor $9,$7,$24 24286410c867Schristos sll $8,$3,7 24296410c867Schristos and $9,$3 24306410c867Schristos srl $23,$3,11 24316410c867Schristos xor $25,$8 24326410c867Schristos sll $8,$3,21 24336410c867Schristos xor $25,$23 24346410c867Schristos srl $23,$3,25 24356410c867Schristos xor $25,$8 24366410c867Schristos sll $8,$3,26 24376410c867Schristos xor $25,$23 24386410c867Schristos xor $9,$24 # Ch(e,f,g) 24396410c867Schristos xor $23,$8,$25 # Sigma1(e) 24406410c867Schristos 24416410c867Schristos srl $25,$30,2 24426410c867Schristos addu $22,$9 24436410c867Schristos lw $9,104($6) # K[26] 24446410c867Schristos sll $8,$30,10 24456410c867Schristos addu $22,$23 24466410c867Schristos srl $23,$30,13 24476410c867Schristos xor $25,$8 24486410c867Schristos sll $8,$30,19 24496410c867Schristos xor $25,$23 24506410c867Schristos srl $23,$30,22 24516410c867Schristos xor $25,$8 24526410c867Schristos sll $8,$30,30 24536410c867Schristos xor $25,$23 24546410c867Schristos and $23,$31,$1 24556410c867Schristos xor $25,$8 # Sigma0(a) 24566410c867Schristos xor $8,$31,$1 24576410c867Schristos#endif 24586410c867Schristos sw $18,40($29) # offload to ring buffer 24596410c867Schristos addu $25,$23 24606410c867Schristos and $8,$30 24616410c867Schristos addu $22,$9 # +=K[26] 24626410c867Schristos addu $25,$8 # +=Maj(a,b,c) 24636410c867Schristos addu $2,$22 24646410c867Schristos addu $25,$22 24656410c867Schristos lw $21,52($29) # prefetch from ring buffer 24666410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 24676410c867Schristos srl $9,$20,3 # Xupdate(27) 24686410c867Schristos rotr $23,$20,7 24696410c867Schristos addu $19,$12 # +=X[i+9] 24706410c867Schristos xor $9,$23 24716410c867Schristos rotr $23,$20,18 24726410c867Schristos 24736410c867Schristos srl $10,$17,10 24746410c867Schristos rotr $8,$17,17 24756410c867Schristos xor $9,$23 # sigma0(X[i+1]) 24766410c867Schristos rotr $23,$17,19 24776410c867Schristos xor $10,$8 24786410c867Schristos addu $19,$9 24796410c867Schristos#else 24806410c867Schristos srl $9,$20,3 # Xupdate(27) 24816410c867Schristos addu $19,$12 # +=X[i+9] 24826410c867Schristos sll $8,$20,14 24836410c867Schristos srl $23,$20,7 24846410c867Schristos xor $9,$8 24856410c867Schristos sll $8,11 24866410c867Schristos xor $9,$23 24876410c867Schristos srl $23,$20,18 24886410c867Schristos xor $9,$8 24896410c867Schristos 24906410c867Schristos srl $10,$17,10 24916410c867Schristos xor $9,$23 # sigma0(X[i+1]) 24926410c867Schristos sll $8,$17,13 24936410c867Schristos addu $19,$9 24946410c867Schristos srl $23,$17,17 24956410c867Schristos xor $10,$8 24966410c867Schristos sll $8,2 24976410c867Schristos xor $10,$23 24986410c867Schristos srl $23,$17,19 24996410c867Schristos xor $10,$8 25006410c867Schristos#endif 25016410c867Schristos xor $10,$23 # sigma1(X[i+14]) 25026410c867Schristos addu $19,$10 25036410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 25046410c867Schristos xor $10,$3,$7 # 27 25056410c867Schristos rotr $8,$2,6 25066410c867Schristos addu $23,$19,$24 25076410c867Schristos rotr $9,$2,11 25086410c867Schristos and $10,$2 25096410c867Schristos rotr $24,$2,25 25106410c867Schristos xor $8,$9 25116410c867Schristos rotr $9,$25,2 25126410c867Schristos xor $10,$7 # Ch(e,f,g) 25136410c867Schristos xor $8,$24 # Sigma1(e) 25146410c867Schristos 25156410c867Schristos rotr $24,$25,13 25166410c867Schristos addu $23,$10 25176410c867Schristos lw $10,108($6) # K[27] 25186410c867Schristos xor $24,$9 25196410c867Schristos rotr $9,$25,22 25206410c867Schristos addu $23,$8 25216410c867Schristos and $8,$30,$31 25226410c867Schristos xor $24,$9 # Sigma0(a) 25236410c867Schristos xor $9,$30,$31 25246410c867Schristos#else 25256410c867Schristos addu $23,$19,$24 # 27 25266410c867Schristos srl $24,$2,6 25276410c867Schristos xor $10,$3,$7 25286410c867Schristos sll $9,$2,7 25296410c867Schristos and $10,$2 25306410c867Schristos srl $8,$2,11 25316410c867Schristos xor $24,$9 25326410c867Schristos sll $9,$2,21 25336410c867Schristos xor $24,$8 25346410c867Schristos srl $8,$2,25 25356410c867Schristos xor $24,$9 25366410c867Schristos sll $9,$2,26 25376410c867Schristos xor $24,$8 25386410c867Schristos xor $10,$7 # Ch(e,f,g) 25396410c867Schristos xor $8,$9,$24 # Sigma1(e) 25406410c867Schristos 25416410c867Schristos srl $24,$25,2 25426410c867Schristos addu $23,$10 25436410c867Schristos lw $10,108($6) # K[27] 25446410c867Schristos sll $9,$25,10 25456410c867Schristos addu $23,$8 25466410c867Schristos srl $8,$25,13 25476410c867Schristos xor $24,$9 25486410c867Schristos sll $9,$25,19 25496410c867Schristos xor $24,$8 25506410c867Schristos srl $8,$25,22 25516410c867Schristos xor $24,$9 25526410c867Schristos sll $9,$25,30 25536410c867Schristos xor $24,$8 25546410c867Schristos and $8,$30,$31 25556410c867Schristos xor $24,$9 # Sigma0(a) 25566410c867Schristos xor $9,$30,$31 25576410c867Schristos#endif 25586410c867Schristos sw $19,44($29) # offload to ring buffer 25596410c867Schristos addu $24,$8 25606410c867Schristos and $9,$25 25616410c867Schristos addu $23,$10 # +=K[27] 25626410c867Schristos addu $24,$9 # +=Maj(a,b,c) 25636410c867Schristos addu $1,$23 25646410c867Schristos addu $24,$23 25656410c867Schristos lw $22,56($29) # prefetch from ring buffer 25666410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 25676410c867Schristos srl $10,$21,3 # Xupdate(28) 25686410c867Schristos rotr $8,$21,7 25696410c867Schristos addu $20,$13 # +=X[i+9] 25706410c867Schristos xor $10,$8 25716410c867Schristos rotr $8,$21,18 25726410c867Schristos 25736410c867Schristos srl $11,$18,10 25746410c867Schristos rotr $9,$18,17 25756410c867Schristos xor $10,$8 # sigma0(X[i+1]) 25766410c867Schristos rotr $8,$18,19 25776410c867Schristos xor $11,$9 25786410c867Schristos addu $20,$10 25796410c867Schristos#else 25806410c867Schristos srl $10,$21,3 # Xupdate(28) 25816410c867Schristos addu $20,$13 # +=X[i+9] 25826410c867Schristos sll $9,$21,14 25836410c867Schristos srl $8,$21,7 25846410c867Schristos xor $10,$9 25856410c867Schristos sll $9,11 25866410c867Schristos xor $10,$8 25876410c867Schristos srl $8,$21,18 25886410c867Schristos xor $10,$9 25896410c867Schristos 25906410c867Schristos srl $11,$18,10 25916410c867Schristos xor $10,$8 # sigma0(X[i+1]) 25926410c867Schristos sll $9,$18,13 25936410c867Schristos addu $20,$10 25946410c867Schristos srl $8,$18,17 25956410c867Schristos xor $11,$9 25966410c867Schristos sll $9,2 25976410c867Schristos xor $11,$8 25986410c867Schristos srl $8,$18,19 25996410c867Schristos xor $11,$9 26006410c867Schristos#endif 26016410c867Schristos xor $11,$8 # sigma1(X[i+14]) 26026410c867Schristos addu $20,$11 26036410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 26046410c867Schristos xor $11,$2,$3 # 28 26056410c867Schristos rotr $9,$1,6 26066410c867Schristos addu $8,$20,$7 26076410c867Schristos rotr $10,$1,11 26086410c867Schristos and $11,$1 26096410c867Schristos rotr $7,$1,25 26106410c867Schristos xor $9,$10 26116410c867Schristos rotr $10,$24,2 26126410c867Schristos xor $11,$3 # Ch(e,f,g) 26136410c867Schristos xor $9,$7 # Sigma1(e) 26146410c867Schristos 26156410c867Schristos rotr $7,$24,13 26166410c867Schristos addu $8,$11 26176410c867Schristos lw $11,112($6) # K[28] 26186410c867Schristos xor $7,$10 26196410c867Schristos rotr $10,$24,22 26206410c867Schristos addu $8,$9 26216410c867Schristos and $9,$25,$30 26226410c867Schristos xor $7,$10 # Sigma0(a) 26236410c867Schristos xor $10,$25,$30 26246410c867Schristos#else 26256410c867Schristos addu $8,$20,$7 # 28 26266410c867Schristos srl $7,$1,6 26276410c867Schristos xor $11,$2,$3 26286410c867Schristos sll $10,$1,7 26296410c867Schristos and $11,$1 26306410c867Schristos srl $9,$1,11 26316410c867Schristos xor $7,$10 26326410c867Schristos sll $10,$1,21 26336410c867Schristos xor $7,$9 26346410c867Schristos srl $9,$1,25 26356410c867Schristos xor $7,$10 26366410c867Schristos sll $10,$1,26 26376410c867Schristos xor $7,$9 26386410c867Schristos xor $11,$3 # Ch(e,f,g) 26396410c867Schristos xor $9,$10,$7 # Sigma1(e) 26406410c867Schristos 26416410c867Schristos srl $7,$24,2 26426410c867Schristos addu $8,$11 26436410c867Schristos lw $11,112($6) # K[28] 26446410c867Schristos sll $10,$24,10 26456410c867Schristos addu $8,$9 26466410c867Schristos srl $9,$24,13 26476410c867Schristos xor $7,$10 26486410c867Schristos sll $10,$24,19 26496410c867Schristos xor $7,$9 26506410c867Schristos srl $9,$24,22 26516410c867Schristos xor $7,$10 26526410c867Schristos sll $10,$24,30 26536410c867Schristos xor $7,$9 26546410c867Schristos and $9,$25,$30 26556410c867Schristos xor $7,$10 # Sigma0(a) 26566410c867Schristos xor $10,$25,$30 26576410c867Schristos#endif 26586410c867Schristos sw $20,48($29) # offload to ring buffer 26596410c867Schristos addu $7,$9 26606410c867Schristos and $10,$24 26616410c867Schristos addu $8,$11 # +=K[28] 26626410c867Schristos addu $7,$10 # +=Maj(a,b,c) 26636410c867Schristos addu $31,$8 26646410c867Schristos addu $7,$8 26656410c867Schristos lw $23,60($29) # prefetch from ring buffer 26666410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 26676410c867Schristos srl $11,$22,3 # Xupdate(29) 26686410c867Schristos rotr $9,$22,7 26696410c867Schristos addu $21,$14 # +=X[i+9] 26706410c867Schristos xor $11,$9 26716410c867Schristos rotr $9,$22,18 26726410c867Schristos 26736410c867Schristos srl $12,$19,10 26746410c867Schristos rotr $10,$19,17 26756410c867Schristos xor $11,$9 # sigma0(X[i+1]) 26766410c867Schristos rotr $9,$19,19 26776410c867Schristos xor $12,$10 26786410c867Schristos addu $21,$11 26796410c867Schristos#else 26806410c867Schristos srl $11,$22,3 # Xupdate(29) 26816410c867Schristos addu $21,$14 # +=X[i+9] 26826410c867Schristos sll $10,$22,14 26836410c867Schristos srl $9,$22,7 26846410c867Schristos xor $11,$10 26856410c867Schristos sll $10,11 26866410c867Schristos xor $11,$9 26876410c867Schristos srl $9,$22,18 26886410c867Schristos xor $11,$10 26896410c867Schristos 26906410c867Schristos srl $12,$19,10 26916410c867Schristos xor $11,$9 # sigma0(X[i+1]) 26926410c867Schristos sll $10,$19,13 26936410c867Schristos addu $21,$11 26946410c867Schristos srl $9,$19,17 26956410c867Schristos xor $12,$10 26966410c867Schristos sll $10,2 26976410c867Schristos xor $12,$9 26986410c867Schristos srl $9,$19,19 26996410c867Schristos xor $12,$10 27006410c867Schristos#endif 27016410c867Schristos xor $12,$9 # sigma1(X[i+14]) 27026410c867Schristos addu $21,$12 27036410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 27046410c867Schristos xor $12,$1,$2 # 29 27056410c867Schristos rotr $10,$31,6 27066410c867Schristos addu $9,$21,$3 27076410c867Schristos rotr $11,$31,11 27086410c867Schristos and $12,$31 27096410c867Schristos rotr $3,$31,25 27106410c867Schristos xor $10,$11 27116410c867Schristos rotr $11,$7,2 27126410c867Schristos xor $12,$2 # Ch(e,f,g) 27136410c867Schristos xor $10,$3 # Sigma1(e) 27146410c867Schristos 27156410c867Schristos rotr $3,$7,13 27166410c867Schristos addu $9,$12 27176410c867Schristos lw $12,116($6) # K[29] 27186410c867Schristos xor $3,$11 27196410c867Schristos rotr $11,$7,22 27206410c867Schristos addu $9,$10 27216410c867Schristos and $10,$24,$25 27226410c867Schristos xor $3,$11 # Sigma0(a) 27236410c867Schristos xor $11,$24,$25 27246410c867Schristos#else 27256410c867Schristos addu $9,$21,$3 # 29 27266410c867Schristos srl $3,$31,6 27276410c867Schristos xor $12,$1,$2 27286410c867Schristos sll $11,$31,7 27296410c867Schristos and $12,$31 27306410c867Schristos srl $10,$31,11 27316410c867Schristos xor $3,$11 27326410c867Schristos sll $11,$31,21 27336410c867Schristos xor $3,$10 27346410c867Schristos srl $10,$31,25 27356410c867Schristos xor $3,$11 27366410c867Schristos sll $11,$31,26 27376410c867Schristos xor $3,$10 27386410c867Schristos xor $12,$2 # Ch(e,f,g) 27396410c867Schristos xor $10,$11,$3 # Sigma1(e) 27406410c867Schristos 27416410c867Schristos srl $3,$7,2 27426410c867Schristos addu $9,$12 27436410c867Schristos lw $12,116($6) # K[29] 27446410c867Schristos sll $11,$7,10 27456410c867Schristos addu $9,$10 27466410c867Schristos srl $10,$7,13 27476410c867Schristos xor $3,$11 27486410c867Schristos sll $11,$7,19 27496410c867Schristos xor $3,$10 27506410c867Schristos srl $10,$7,22 27516410c867Schristos xor $3,$11 27526410c867Schristos sll $11,$7,30 27536410c867Schristos xor $3,$10 27546410c867Schristos and $10,$24,$25 27556410c867Schristos xor $3,$11 # Sigma0(a) 27566410c867Schristos xor $11,$24,$25 27576410c867Schristos#endif 27586410c867Schristos sw $21,52($29) # offload to ring buffer 27596410c867Schristos addu $3,$10 27606410c867Schristos and $11,$7 27616410c867Schristos addu $9,$12 # +=K[29] 27626410c867Schristos addu $3,$11 # +=Maj(a,b,c) 27636410c867Schristos addu $30,$9 27646410c867Schristos addu $3,$9 27656410c867Schristos lw $8,0($29) # prefetch from ring buffer 27666410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 27676410c867Schristos srl $12,$23,3 # Xupdate(30) 27686410c867Schristos rotr $10,$23,7 27696410c867Schristos addu $22,$15 # +=X[i+9] 27706410c867Schristos xor $12,$10 27716410c867Schristos rotr $10,$23,18 27726410c867Schristos 27736410c867Schristos srl $13,$20,10 27746410c867Schristos rotr $11,$20,17 27756410c867Schristos xor $12,$10 # sigma0(X[i+1]) 27766410c867Schristos rotr $10,$20,19 27776410c867Schristos xor $13,$11 27786410c867Schristos addu $22,$12 27796410c867Schristos#else 27806410c867Schristos srl $12,$23,3 # Xupdate(30) 27816410c867Schristos addu $22,$15 # +=X[i+9] 27826410c867Schristos sll $11,$23,14 27836410c867Schristos srl $10,$23,7 27846410c867Schristos xor $12,$11 27856410c867Schristos sll $11,11 27866410c867Schristos xor $12,$10 27876410c867Schristos srl $10,$23,18 27886410c867Schristos xor $12,$11 27896410c867Schristos 27906410c867Schristos srl $13,$20,10 27916410c867Schristos xor $12,$10 # sigma0(X[i+1]) 27926410c867Schristos sll $11,$20,13 27936410c867Schristos addu $22,$12 27946410c867Schristos srl $10,$20,17 27956410c867Schristos xor $13,$11 27966410c867Schristos sll $11,2 27976410c867Schristos xor $13,$10 27986410c867Schristos srl $10,$20,19 27996410c867Schristos xor $13,$11 28006410c867Schristos#endif 28016410c867Schristos xor $13,$10 # sigma1(X[i+14]) 28026410c867Schristos addu $22,$13 28036410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 28046410c867Schristos xor $13,$31,$1 # 30 28056410c867Schristos rotr $11,$30,6 28066410c867Schristos addu $10,$22,$2 28076410c867Schristos rotr $12,$30,11 28086410c867Schristos and $13,$30 28096410c867Schristos rotr $2,$30,25 28106410c867Schristos xor $11,$12 28116410c867Schristos rotr $12,$3,2 28126410c867Schristos xor $13,$1 # Ch(e,f,g) 28136410c867Schristos xor $11,$2 # Sigma1(e) 28146410c867Schristos 28156410c867Schristos rotr $2,$3,13 28166410c867Schristos addu $10,$13 28176410c867Schristos lw $13,120($6) # K[30] 28186410c867Schristos xor $2,$12 28196410c867Schristos rotr $12,$3,22 28206410c867Schristos addu $10,$11 28216410c867Schristos and $11,$7,$24 28226410c867Schristos xor $2,$12 # Sigma0(a) 28236410c867Schristos xor $12,$7,$24 28246410c867Schristos#else 28256410c867Schristos addu $10,$22,$2 # 30 28266410c867Schristos srl $2,$30,6 28276410c867Schristos xor $13,$31,$1 28286410c867Schristos sll $12,$30,7 28296410c867Schristos and $13,$30 28306410c867Schristos srl $11,$30,11 28316410c867Schristos xor $2,$12 28326410c867Schristos sll $12,$30,21 28336410c867Schristos xor $2,$11 28346410c867Schristos srl $11,$30,25 28356410c867Schristos xor $2,$12 28366410c867Schristos sll $12,$30,26 28376410c867Schristos xor $2,$11 28386410c867Schristos xor $13,$1 # Ch(e,f,g) 28396410c867Schristos xor $11,$12,$2 # Sigma1(e) 28406410c867Schristos 28416410c867Schristos srl $2,$3,2 28426410c867Schristos addu $10,$13 28436410c867Schristos lw $13,120($6) # K[30] 28446410c867Schristos sll $12,$3,10 28456410c867Schristos addu $10,$11 28466410c867Schristos srl $11,$3,13 28476410c867Schristos xor $2,$12 28486410c867Schristos sll $12,$3,19 28496410c867Schristos xor $2,$11 28506410c867Schristos srl $11,$3,22 28516410c867Schristos xor $2,$12 28526410c867Schristos sll $12,$3,30 28536410c867Schristos xor $2,$11 28546410c867Schristos and $11,$7,$24 28556410c867Schristos xor $2,$12 # Sigma0(a) 28566410c867Schristos xor $12,$7,$24 28576410c867Schristos#endif 28586410c867Schristos sw $22,56($29) # offload to ring buffer 28596410c867Schristos addu $2,$11 28606410c867Schristos and $12,$3 28616410c867Schristos addu $10,$13 # +=K[30] 28626410c867Schristos addu $2,$12 # +=Maj(a,b,c) 28636410c867Schristos addu $25,$10 28646410c867Schristos addu $2,$10 28656410c867Schristos lw $9,4($29) # prefetch from ring buffer 28666410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 28676410c867Schristos srl $13,$8,3 # Xupdate(31) 28686410c867Schristos rotr $11,$8,7 28696410c867Schristos addu $23,$16 # +=X[i+9] 28706410c867Schristos xor $13,$11 28716410c867Schristos rotr $11,$8,18 28726410c867Schristos 28736410c867Schristos srl $14,$21,10 28746410c867Schristos rotr $12,$21,17 28756410c867Schristos xor $13,$11 # sigma0(X[i+1]) 28766410c867Schristos rotr $11,$21,19 28776410c867Schristos xor $14,$12 28786410c867Schristos addu $23,$13 28796410c867Schristos#else 28806410c867Schristos srl $13,$8,3 # Xupdate(31) 28816410c867Schristos addu $23,$16 # +=X[i+9] 28826410c867Schristos sll $12,$8,14 28836410c867Schristos srl $11,$8,7 28846410c867Schristos xor $13,$12 28856410c867Schristos sll $12,11 28866410c867Schristos xor $13,$11 28876410c867Schristos srl $11,$8,18 28886410c867Schristos xor $13,$12 28896410c867Schristos 28906410c867Schristos srl $14,$21,10 28916410c867Schristos xor $13,$11 # sigma0(X[i+1]) 28926410c867Schristos sll $12,$21,13 28936410c867Schristos addu $23,$13 28946410c867Schristos srl $11,$21,17 28956410c867Schristos xor $14,$12 28966410c867Schristos sll $12,2 28976410c867Schristos xor $14,$11 28986410c867Schristos srl $11,$21,19 28996410c867Schristos xor $14,$12 29006410c867Schristos#endif 29016410c867Schristos xor $14,$11 # sigma1(X[i+14]) 29026410c867Schristos addu $23,$14 29036410c867Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 29046410c867Schristos xor $14,$30,$31 # 31 29056410c867Schristos rotr $12,$25,6 29066410c867Schristos addu $11,$23,$1 29076410c867Schristos rotr $13,$25,11 29086410c867Schristos and $14,$25 29096410c867Schristos rotr $1,$25,25 29106410c867Schristos xor $12,$13 29116410c867Schristos rotr $13,$2,2 29126410c867Schristos xor $14,$31 # Ch(e,f,g) 29136410c867Schristos xor $12,$1 # Sigma1(e) 29146410c867Schristos 29156410c867Schristos rotr $1,$2,13 29166410c867Schristos addu $11,$14 29176410c867Schristos lw $14,124($6) # K[31] 29186410c867Schristos xor $1,$13 29196410c867Schristos rotr $13,$2,22 29206410c867Schristos addu $11,$12 29216410c867Schristos and $12,$3,$7 29226410c867Schristos xor $1,$13 # Sigma0(a) 29236410c867Schristos xor $13,$3,$7 29246410c867Schristos#else 29256410c867Schristos addu $11,$23,$1 # 31 29266410c867Schristos srl $1,$25,6 29276410c867Schristos xor $14,$30,$31 29286410c867Schristos sll $13,$25,7 29296410c867Schristos and $14,$25 29306410c867Schristos srl $12,$25,11 29316410c867Schristos xor $1,$13 29326410c867Schristos sll $13,$25,21 29336410c867Schristos xor $1,$12 29346410c867Schristos srl $12,$25,25 29356410c867Schristos xor $1,$13 29366410c867Schristos sll $13,$25,26 29376410c867Schristos xor $1,$12 29386410c867Schristos xor $14,$31 # Ch(e,f,g) 29396410c867Schristos xor $12,$13,$1 # Sigma1(e) 29406410c867Schristos 29416410c867Schristos srl $1,$2,2 29426410c867Schristos addu $11,$14 29436410c867Schristos lw $14,124($6) # K[31] 29446410c867Schristos sll $13,$2,10 29456410c867Schristos addu $11,$12 29466410c867Schristos srl $12,$2,13 29476410c867Schristos xor $1,$13 29486410c867Schristos sll $13,$2,19 29496410c867Schristos xor $1,$12 29506410c867Schristos srl $12,$2,22 29516410c867Schristos xor $1,$13 29526410c867Schristos sll $13,$2,30 29536410c867Schristos xor $1,$12 29546410c867Schristos and $12,$3,$7 29556410c867Schristos xor $1,$13 # Sigma0(a) 29566410c867Schristos xor $13,$3,$7 29576410c867Schristos#endif 29586410c867Schristos sw $23,60($29) # offload to ring buffer 29596410c867Schristos addu $1,$12 29606410c867Schristos and $13,$2 29616410c867Schristos addu $11,$14 # +=K[31] 29626410c867Schristos addu $1,$13 # +=Maj(a,b,c) 29636410c867Schristos addu $24,$11 29646410c867Schristos addu $1,$11 29656410c867Schristos lw $10,8($29) # prefetch from ring buffer 29666410c867Schristos and $14,0xfff 29676410c867Schristos li $15,2290 29686410c867Schristos .set noreorder 29696410c867Schristos bne $14,$15,.L16_xx 2970*e0ea3921Schristos daddu $6,16*4 # Ktbl+=16 29716410c867Schristos 29726410c867Schristos ld $23,16*4($29) # restore pointer to the end of input 29736410c867Schristos lw $8,0*4($4) 29746410c867Schristos lw $9,1*4($4) 29756410c867Schristos lw $10,2*4($4) 2976*e0ea3921Schristos daddu $5,16*4 29776410c867Schristos lw $11,3*4($4) 29786410c867Schristos addu $1,$8 29796410c867Schristos lw $12,4*4($4) 29806410c867Schristos addu $2,$9 29816410c867Schristos lw $13,5*4($4) 29826410c867Schristos addu $3,$10 29836410c867Schristos lw $14,6*4($4) 29846410c867Schristos addu $7,$11 29856410c867Schristos lw $15,7*4($4) 29866410c867Schristos addu $24,$12 29876410c867Schristos sw $1,0*4($4) 29886410c867Schristos addu $25,$13 29896410c867Schristos sw $2,1*4($4) 29906410c867Schristos addu $30,$14 29916410c867Schristos sw $3,2*4($4) 29926410c867Schristos addu $31,$15 29936410c867Schristos sw $7,3*4($4) 29946410c867Schristos sw $24,4*4($4) 29956410c867Schristos sw $25,5*4($4) 29966410c867Schristos sw $30,6*4($4) 29976410c867Schristos sw $31,7*4($4) 29986410c867Schristos 29996410c867Schristos bne $5,$23,.Loop 3000*e0ea3921Schristos dsubu $6,192 # rewind $6 30016410c867Schristos 30026410c867Schristos ld $31,192-1*8($29) 30036410c867Schristos ld $30,192-2*8($29) 30046410c867Schristos ld $23,192-3*8($29) 30056410c867Schristos ld $22,192-4*8($29) 30066410c867Schristos ld $21,192-5*8($29) 30076410c867Schristos ld $20,192-6*8($29) 30086410c867Schristos ld $19,192-7*8($29) 30096410c867Schristos ld $18,192-8*8($29) 30106410c867Schristos ld $17,192-9*8($29) 30116410c867Schristos ld $16,192-10*8($29) 30126410c867Schristos jr $31 3013*e0ea3921Schristos daddu $29,192 30146410c867Schristos.end sha256_block_data_order 30156410c867Schristos 30166410c867Schristos.rdata 30176410c867Schristos.align 5 30186410c867SchristosK256: 30196410c867Schristos .word 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5 30206410c867Schristos .word 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5 30216410c867Schristos .word 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3 30226410c867Schristos .word 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174 30236410c867Schristos .word 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc 30246410c867Schristos .word 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da 30256410c867Schristos .word 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7 30266410c867Schristos .word 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967 30276410c867Schristos .word 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13 30286410c867Schristos .word 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85 30296410c867Schristos .word 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3 30306410c867Schristos .word 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070 30316410c867Schristos .word 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5 30326410c867Schristos .word 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3 30336410c867Schristos .word 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208 30346410c867Schristos .word 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 30356410c867Schristos.asciiz "SHA256 for MIPS, CRYPTOGAMS by <appro@openssl.org>" 30366410c867Schristos.align 5 30376410c867Schristos 3038