1*e0ea3921Schristos#include "mips_arch.h" 276c4f342Schristos 376c4f342Schristos.text 476c4f342Schristos.set noat 576c4f342Schristos#if !defined(__mips_eabi) && (!defined(__vxworks) || defined(__pic__)) 676c4f342Schristos.option pic2 776c4f342Schristos#endif 876c4f342Schristos 976c4f342Schristos.align 5 1076c4f342Schristos.globl sha256_block_data_order 1176c4f342Schristos.ent sha256_block_data_order 1276c4f342Schristossha256_block_data_order: 1376c4f342Schristos .frame $29,128,$31 1476c4f342Schristos .mask 0xc0ff0000,-4 1576c4f342Schristos .set noreorder 166410c867Schristos .cpload $25 17*e0ea3921Schristos subu $29,128 1876c4f342Schristos sw $31,128-1*4($29) 1976c4f342Schristos sw $30,128-2*4($29) 2076c4f342Schristos sw $23,128-3*4($29) 2176c4f342Schristos sw $22,128-4*4($29) 2276c4f342Schristos sw $21,128-5*4($29) 2376c4f342Schristos sw $20,128-6*4($29) 2476c4f342Schristos sw $19,128-7*4($29) 2576c4f342Schristos sw $18,128-8*4($29) 2676c4f342Schristos sw $17,128-9*4($29) 2776c4f342Schristos sw $16,128-10*4($29) 2876c4f342Schristos sll $23,$6,6 2976c4f342Schristos .set reorder 3076c4f342Schristos la $6,K256 # PIC-ified 'load address' 3176c4f342Schristos 3276c4f342Schristos lw $1,0*4($4) # load context 3376c4f342Schristos lw $2,1*4($4) 3476c4f342Schristos lw $3,2*4($4) 3576c4f342Schristos lw $7,3*4($4) 3676c4f342Schristos lw $24,4*4($4) 3776c4f342Schristos lw $25,5*4($4) 3876c4f342Schristos lw $30,6*4($4) 3976c4f342Schristos lw $31,7*4($4) 4076c4f342Schristos 41*e0ea3921Schristos addu $23,$5 # pointer to the end of input 4276c4f342Schristos sw $23,16*4($29) 4376c4f342Schristos b .Loop 4476c4f342Schristos 4576c4f342Schristos.align 5 4676c4f342Schristos.Loop: 47*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 48*e0ea3921Schristos lw $8,($5) 49*e0ea3921Schristos#else 5076c4f342Schristos lwl $8,3($5) 5176c4f342Schristos lwr $8,0($5) 52*e0ea3921Schristos#endif 53*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 54*e0ea3921Schristos lw $9,4($5) 55*e0ea3921Schristos#else 5676c4f342Schristos lwl $9,7($5) 5776c4f342Schristos lwr $9,4($5) 58*e0ea3921Schristos#endif 5976c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 6076c4f342Schristos wsbh $8,$8 # byte swap(0) 6176c4f342Schristos rotr $8,$8,16 6276c4f342Schristos#else 6376c4f342Schristos srl $13,$8,24 # byte swap(0) 6476c4f342Schristos srl $14,$8,8 6576c4f342Schristos andi $15,$8,0xFF00 6676c4f342Schristos sll $8,$8,24 6776c4f342Schristos andi $14,0xFF00 6876c4f342Schristos sll $15,$15,8 6976c4f342Schristos or $8,$13 7076c4f342Schristos or $14,$15 7176c4f342Schristos or $8,$14 7276c4f342Schristos#endif 7376c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 7476c4f342Schristos xor $15,$25,$30 # 0 7576c4f342Schristos rotr $13,$24,6 7676c4f342Schristos addu $12,$8,$31 7776c4f342Schristos rotr $14,$24,11 7876c4f342Schristos and $15,$24 7976c4f342Schristos rotr $31,$24,25 8076c4f342Schristos xor $13,$14 8176c4f342Schristos rotr $14,$1,2 8276c4f342Schristos xor $15,$30 # Ch(e,f,g) 8376c4f342Schristos xor $13,$31 # Sigma1(e) 8476c4f342Schristos 8576c4f342Schristos rotr $31,$1,13 8676c4f342Schristos addu $12,$15 8776c4f342Schristos lw $15,0($6) # K[0] 8876c4f342Schristos xor $31,$14 8976c4f342Schristos rotr $14,$1,22 9076c4f342Schristos addu $12,$13 9176c4f342Schristos and $13,$2,$3 9276c4f342Schristos xor $31,$14 # Sigma0(a) 9376c4f342Schristos xor $14,$2,$3 9476c4f342Schristos#else 9576c4f342Schristos addu $12,$8,$31 # 0 9676c4f342Schristos srl $31,$24,6 9776c4f342Schristos xor $15,$25,$30 9876c4f342Schristos sll $14,$24,7 9976c4f342Schristos and $15,$24 10076c4f342Schristos srl $13,$24,11 10176c4f342Schristos xor $31,$14 10276c4f342Schristos sll $14,$24,21 10376c4f342Schristos xor $31,$13 10476c4f342Schristos srl $13,$24,25 10576c4f342Schristos xor $31,$14 10676c4f342Schristos sll $14,$24,26 10776c4f342Schristos xor $31,$13 10876c4f342Schristos xor $15,$30 # Ch(e,f,g) 10976c4f342Schristos xor $13,$14,$31 # Sigma1(e) 11076c4f342Schristos 11176c4f342Schristos srl $31,$1,2 11276c4f342Schristos addu $12,$15 11376c4f342Schristos lw $15,0($6) # K[0] 11476c4f342Schristos sll $14,$1,10 11576c4f342Schristos addu $12,$13 11676c4f342Schristos srl $13,$1,13 11776c4f342Schristos xor $31,$14 11876c4f342Schristos sll $14,$1,19 11976c4f342Schristos xor $31,$13 12076c4f342Schristos srl $13,$1,22 12176c4f342Schristos xor $31,$14 12276c4f342Schristos sll $14,$1,30 12376c4f342Schristos xor $31,$13 12476c4f342Schristos and $13,$2,$3 12576c4f342Schristos xor $31,$14 # Sigma0(a) 12676c4f342Schristos xor $14,$2,$3 12776c4f342Schristos#endif 12876c4f342Schristos sw $8,0($29) # offload to ring buffer 12976c4f342Schristos addu $31,$13 13076c4f342Schristos and $14,$1 13176c4f342Schristos addu $12,$15 # +=K[0] 13276c4f342Schristos addu $31,$14 # +=Maj(a,b,c) 13376c4f342Schristos addu $7,$12 13476c4f342Schristos addu $31,$12 135*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 136*e0ea3921Schristos lw $10,8($5) 137*e0ea3921Schristos#else 13876c4f342Schristos lwl $10,11($5) 13976c4f342Schristos lwr $10,8($5) 140*e0ea3921Schristos#endif 14176c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 14276c4f342Schristos wsbh $9,$9 # byte swap(1) 14376c4f342Schristos rotr $9,$9,16 14476c4f342Schristos#else 14576c4f342Schristos srl $14,$9,24 # byte swap(1) 14676c4f342Schristos srl $15,$9,8 14776c4f342Schristos andi $16,$9,0xFF00 14876c4f342Schristos sll $9,$9,24 14976c4f342Schristos andi $15,0xFF00 15076c4f342Schristos sll $16,$16,8 15176c4f342Schristos or $9,$14 15276c4f342Schristos or $15,$16 15376c4f342Schristos or $9,$15 15476c4f342Schristos#endif 15576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 15676c4f342Schristos xor $16,$24,$25 # 1 15776c4f342Schristos rotr $14,$7,6 15876c4f342Schristos addu $13,$9,$30 15976c4f342Schristos rotr $15,$7,11 16076c4f342Schristos and $16,$7 16176c4f342Schristos rotr $30,$7,25 16276c4f342Schristos xor $14,$15 16376c4f342Schristos rotr $15,$31,2 16476c4f342Schristos xor $16,$25 # Ch(e,f,g) 16576c4f342Schristos xor $14,$30 # Sigma1(e) 16676c4f342Schristos 16776c4f342Schristos rotr $30,$31,13 16876c4f342Schristos addu $13,$16 16976c4f342Schristos lw $16,4($6) # K[1] 17076c4f342Schristos xor $30,$15 17176c4f342Schristos rotr $15,$31,22 17276c4f342Schristos addu $13,$14 17376c4f342Schristos and $14,$1,$2 17476c4f342Schristos xor $30,$15 # Sigma0(a) 17576c4f342Schristos xor $15,$1,$2 17676c4f342Schristos#else 17776c4f342Schristos addu $13,$9,$30 # 1 17876c4f342Schristos srl $30,$7,6 17976c4f342Schristos xor $16,$24,$25 18076c4f342Schristos sll $15,$7,7 18176c4f342Schristos and $16,$7 18276c4f342Schristos srl $14,$7,11 18376c4f342Schristos xor $30,$15 18476c4f342Schristos sll $15,$7,21 18576c4f342Schristos xor $30,$14 18676c4f342Schristos srl $14,$7,25 18776c4f342Schristos xor $30,$15 18876c4f342Schristos sll $15,$7,26 18976c4f342Schristos xor $30,$14 19076c4f342Schristos xor $16,$25 # Ch(e,f,g) 19176c4f342Schristos xor $14,$15,$30 # Sigma1(e) 19276c4f342Schristos 19376c4f342Schristos srl $30,$31,2 19476c4f342Schristos addu $13,$16 19576c4f342Schristos lw $16,4($6) # K[1] 19676c4f342Schristos sll $15,$31,10 19776c4f342Schristos addu $13,$14 19876c4f342Schristos srl $14,$31,13 19976c4f342Schristos xor $30,$15 20076c4f342Schristos sll $15,$31,19 20176c4f342Schristos xor $30,$14 20276c4f342Schristos srl $14,$31,22 20376c4f342Schristos xor $30,$15 20476c4f342Schristos sll $15,$31,30 20576c4f342Schristos xor $30,$14 20676c4f342Schristos and $14,$1,$2 20776c4f342Schristos xor $30,$15 # Sigma0(a) 20876c4f342Schristos xor $15,$1,$2 20976c4f342Schristos#endif 21076c4f342Schristos sw $9,4($29) # offload to ring buffer 21176c4f342Schristos addu $30,$14 21276c4f342Schristos and $15,$31 21376c4f342Schristos addu $13,$16 # +=K[1] 21476c4f342Schristos addu $30,$15 # +=Maj(a,b,c) 21576c4f342Schristos addu $3,$13 21676c4f342Schristos addu $30,$13 217*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 218*e0ea3921Schristos lw $11,12($5) 219*e0ea3921Schristos#else 22076c4f342Schristos lwl $11,15($5) 22176c4f342Schristos lwr $11,12($5) 222*e0ea3921Schristos#endif 22376c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 22476c4f342Schristos wsbh $10,$10 # byte swap(2) 22576c4f342Schristos rotr $10,$10,16 22676c4f342Schristos#else 22776c4f342Schristos srl $15,$10,24 # byte swap(2) 22876c4f342Schristos srl $16,$10,8 22976c4f342Schristos andi $17,$10,0xFF00 23076c4f342Schristos sll $10,$10,24 23176c4f342Schristos andi $16,0xFF00 23276c4f342Schristos sll $17,$17,8 23376c4f342Schristos or $10,$15 23476c4f342Schristos or $16,$17 23576c4f342Schristos or $10,$16 23676c4f342Schristos#endif 23776c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 23876c4f342Schristos xor $17,$7,$24 # 2 23976c4f342Schristos rotr $15,$3,6 24076c4f342Schristos addu $14,$10,$25 24176c4f342Schristos rotr $16,$3,11 24276c4f342Schristos and $17,$3 24376c4f342Schristos rotr $25,$3,25 24476c4f342Schristos xor $15,$16 24576c4f342Schristos rotr $16,$30,2 24676c4f342Schristos xor $17,$24 # Ch(e,f,g) 24776c4f342Schristos xor $15,$25 # Sigma1(e) 24876c4f342Schristos 24976c4f342Schristos rotr $25,$30,13 25076c4f342Schristos addu $14,$17 25176c4f342Schristos lw $17,8($6) # K[2] 25276c4f342Schristos xor $25,$16 25376c4f342Schristos rotr $16,$30,22 25476c4f342Schristos addu $14,$15 25576c4f342Schristos and $15,$31,$1 25676c4f342Schristos xor $25,$16 # Sigma0(a) 25776c4f342Schristos xor $16,$31,$1 25876c4f342Schristos#else 25976c4f342Schristos addu $14,$10,$25 # 2 26076c4f342Schristos srl $25,$3,6 26176c4f342Schristos xor $17,$7,$24 26276c4f342Schristos sll $16,$3,7 26376c4f342Schristos and $17,$3 26476c4f342Schristos srl $15,$3,11 26576c4f342Schristos xor $25,$16 26676c4f342Schristos sll $16,$3,21 26776c4f342Schristos xor $25,$15 26876c4f342Schristos srl $15,$3,25 26976c4f342Schristos xor $25,$16 27076c4f342Schristos sll $16,$3,26 27176c4f342Schristos xor $25,$15 27276c4f342Schristos xor $17,$24 # Ch(e,f,g) 27376c4f342Schristos xor $15,$16,$25 # Sigma1(e) 27476c4f342Schristos 27576c4f342Schristos srl $25,$30,2 27676c4f342Schristos addu $14,$17 27776c4f342Schristos lw $17,8($6) # K[2] 27876c4f342Schristos sll $16,$30,10 27976c4f342Schristos addu $14,$15 28076c4f342Schristos srl $15,$30,13 28176c4f342Schristos xor $25,$16 28276c4f342Schristos sll $16,$30,19 28376c4f342Schristos xor $25,$15 28476c4f342Schristos srl $15,$30,22 28576c4f342Schristos xor $25,$16 28676c4f342Schristos sll $16,$30,30 28776c4f342Schristos xor $25,$15 28876c4f342Schristos and $15,$31,$1 28976c4f342Schristos xor $25,$16 # Sigma0(a) 29076c4f342Schristos xor $16,$31,$1 29176c4f342Schristos#endif 29276c4f342Schristos sw $10,8($29) # offload to ring buffer 29376c4f342Schristos addu $25,$15 29476c4f342Schristos and $16,$30 29576c4f342Schristos addu $14,$17 # +=K[2] 29676c4f342Schristos addu $25,$16 # +=Maj(a,b,c) 29776c4f342Schristos addu $2,$14 29876c4f342Schristos addu $25,$14 299*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 300*e0ea3921Schristos lw $12,16($5) 301*e0ea3921Schristos#else 30276c4f342Schristos lwl $12,19($5) 30376c4f342Schristos lwr $12,16($5) 304*e0ea3921Schristos#endif 30576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 30676c4f342Schristos wsbh $11,$11 # byte swap(3) 30776c4f342Schristos rotr $11,$11,16 30876c4f342Schristos#else 30976c4f342Schristos srl $16,$11,24 # byte swap(3) 31076c4f342Schristos srl $17,$11,8 31176c4f342Schristos andi $18,$11,0xFF00 31276c4f342Schristos sll $11,$11,24 31376c4f342Schristos andi $17,0xFF00 31476c4f342Schristos sll $18,$18,8 31576c4f342Schristos or $11,$16 31676c4f342Schristos or $17,$18 31776c4f342Schristos or $11,$17 31876c4f342Schristos#endif 31976c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 32076c4f342Schristos xor $18,$3,$7 # 3 32176c4f342Schristos rotr $16,$2,6 32276c4f342Schristos addu $15,$11,$24 32376c4f342Schristos rotr $17,$2,11 32476c4f342Schristos and $18,$2 32576c4f342Schristos rotr $24,$2,25 32676c4f342Schristos xor $16,$17 32776c4f342Schristos rotr $17,$25,2 32876c4f342Schristos xor $18,$7 # Ch(e,f,g) 32976c4f342Schristos xor $16,$24 # Sigma1(e) 33076c4f342Schristos 33176c4f342Schristos rotr $24,$25,13 33276c4f342Schristos addu $15,$18 33376c4f342Schristos lw $18,12($6) # K[3] 33476c4f342Schristos xor $24,$17 33576c4f342Schristos rotr $17,$25,22 33676c4f342Schristos addu $15,$16 33776c4f342Schristos and $16,$30,$31 33876c4f342Schristos xor $24,$17 # Sigma0(a) 33976c4f342Schristos xor $17,$30,$31 34076c4f342Schristos#else 34176c4f342Schristos addu $15,$11,$24 # 3 34276c4f342Schristos srl $24,$2,6 34376c4f342Schristos xor $18,$3,$7 34476c4f342Schristos sll $17,$2,7 34576c4f342Schristos and $18,$2 34676c4f342Schristos srl $16,$2,11 34776c4f342Schristos xor $24,$17 34876c4f342Schristos sll $17,$2,21 34976c4f342Schristos xor $24,$16 35076c4f342Schristos srl $16,$2,25 35176c4f342Schristos xor $24,$17 35276c4f342Schristos sll $17,$2,26 35376c4f342Schristos xor $24,$16 35476c4f342Schristos xor $18,$7 # Ch(e,f,g) 35576c4f342Schristos xor $16,$17,$24 # Sigma1(e) 35676c4f342Schristos 35776c4f342Schristos srl $24,$25,2 35876c4f342Schristos addu $15,$18 35976c4f342Schristos lw $18,12($6) # K[3] 36076c4f342Schristos sll $17,$25,10 36176c4f342Schristos addu $15,$16 36276c4f342Schristos srl $16,$25,13 36376c4f342Schristos xor $24,$17 36476c4f342Schristos sll $17,$25,19 36576c4f342Schristos xor $24,$16 36676c4f342Schristos srl $16,$25,22 36776c4f342Schristos xor $24,$17 36876c4f342Schristos sll $17,$25,30 36976c4f342Schristos xor $24,$16 37076c4f342Schristos and $16,$30,$31 37176c4f342Schristos xor $24,$17 # Sigma0(a) 37276c4f342Schristos xor $17,$30,$31 37376c4f342Schristos#endif 37476c4f342Schristos sw $11,12($29) # offload to ring buffer 37576c4f342Schristos addu $24,$16 37676c4f342Schristos and $17,$25 37776c4f342Schristos addu $15,$18 # +=K[3] 37876c4f342Schristos addu $24,$17 # +=Maj(a,b,c) 37976c4f342Schristos addu $1,$15 38076c4f342Schristos addu $24,$15 381*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 382*e0ea3921Schristos lw $13,20($5) 383*e0ea3921Schristos#else 38476c4f342Schristos lwl $13,23($5) 38576c4f342Schristos lwr $13,20($5) 386*e0ea3921Schristos#endif 38776c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 38876c4f342Schristos wsbh $12,$12 # byte swap(4) 38976c4f342Schristos rotr $12,$12,16 39076c4f342Schristos#else 39176c4f342Schristos srl $17,$12,24 # byte swap(4) 39276c4f342Schristos srl $18,$12,8 39376c4f342Schristos andi $19,$12,0xFF00 39476c4f342Schristos sll $12,$12,24 39576c4f342Schristos andi $18,0xFF00 39676c4f342Schristos sll $19,$19,8 39776c4f342Schristos or $12,$17 39876c4f342Schristos or $18,$19 39976c4f342Schristos or $12,$18 40076c4f342Schristos#endif 40176c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 40276c4f342Schristos xor $19,$2,$3 # 4 40376c4f342Schristos rotr $17,$1,6 40476c4f342Schristos addu $16,$12,$7 40576c4f342Schristos rotr $18,$1,11 40676c4f342Schristos and $19,$1 40776c4f342Schristos rotr $7,$1,25 40876c4f342Schristos xor $17,$18 40976c4f342Schristos rotr $18,$24,2 41076c4f342Schristos xor $19,$3 # Ch(e,f,g) 41176c4f342Schristos xor $17,$7 # Sigma1(e) 41276c4f342Schristos 41376c4f342Schristos rotr $7,$24,13 41476c4f342Schristos addu $16,$19 41576c4f342Schristos lw $19,16($6) # K[4] 41676c4f342Schristos xor $7,$18 41776c4f342Schristos rotr $18,$24,22 41876c4f342Schristos addu $16,$17 41976c4f342Schristos and $17,$25,$30 42076c4f342Schristos xor $7,$18 # Sigma0(a) 42176c4f342Schristos xor $18,$25,$30 42276c4f342Schristos#else 42376c4f342Schristos addu $16,$12,$7 # 4 42476c4f342Schristos srl $7,$1,6 42576c4f342Schristos xor $19,$2,$3 42676c4f342Schristos sll $18,$1,7 42776c4f342Schristos and $19,$1 42876c4f342Schristos srl $17,$1,11 42976c4f342Schristos xor $7,$18 43076c4f342Schristos sll $18,$1,21 43176c4f342Schristos xor $7,$17 43276c4f342Schristos srl $17,$1,25 43376c4f342Schristos xor $7,$18 43476c4f342Schristos sll $18,$1,26 43576c4f342Schristos xor $7,$17 43676c4f342Schristos xor $19,$3 # Ch(e,f,g) 43776c4f342Schristos xor $17,$18,$7 # Sigma1(e) 43876c4f342Schristos 43976c4f342Schristos srl $7,$24,2 44076c4f342Schristos addu $16,$19 44176c4f342Schristos lw $19,16($6) # K[4] 44276c4f342Schristos sll $18,$24,10 44376c4f342Schristos addu $16,$17 44476c4f342Schristos srl $17,$24,13 44576c4f342Schristos xor $7,$18 44676c4f342Schristos sll $18,$24,19 44776c4f342Schristos xor $7,$17 44876c4f342Schristos srl $17,$24,22 44976c4f342Schristos xor $7,$18 45076c4f342Schristos sll $18,$24,30 45176c4f342Schristos xor $7,$17 45276c4f342Schristos and $17,$25,$30 45376c4f342Schristos xor $7,$18 # Sigma0(a) 45476c4f342Schristos xor $18,$25,$30 45576c4f342Schristos#endif 45676c4f342Schristos sw $12,16($29) # offload to ring buffer 45776c4f342Schristos addu $7,$17 45876c4f342Schristos and $18,$24 45976c4f342Schristos addu $16,$19 # +=K[4] 46076c4f342Schristos addu $7,$18 # +=Maj(a,b,c) 46176c4f342Schristos addu $31,$16 46276c4f342Schristos addu $7,$16 463*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 464*e0ea3921Schristos lw $14,24($5) 465*e0ea3921Schristos#else 46676c4f342Schristos lwl $14,27($5) 46776c4f342Schristos lwr $14,24($5) 468*e0ea3921Schristos#endif 46976c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 47076c4f342Schristos wsbh $13,$13 # byte swap(5) 47176c4f342Schristos rotr $13,$13,16 47276c4f342Schristos#else 47376c4f342Schristos srl $18,$13,24 # byte swap(5) 47476c4f342Schristos srl $19,$13,8 47576c4f342Schristos andi $20,$13,0xFF00 47676c4f342Schristos sll $13,$13,24 47776c4f342Schristos andi $19,0xFF00 47876c4f342Schristos sll $20,$20,8 47976c4f342Schristos or $13,$18 48076c4f342Schristos or $19,$20 48176c4f342Schristos or $13,$19 48276c4f342Schristos#endif 48376c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 48476c4f342Schristos xor $20,$1,$2 # 5 48576c4f342Schristos rotr $18,$31,6 48676c4f342Schristos addu $17,$13,$3 48776c4f342Schristos rotr $19,$31,11 48876c4f342Schristos and $20,$31 48976c4f342Schristos rotr $3,$31,25 49076c4f342Schristos xor $18,$19 49176c4f342Schristos rotr $19,$7,2 49276c4f342Schristos xor $20,$2 # Ch(e,f,g) 49376c4f342Schristos xor $18,$3 # Sigma1(e) 49476c4f342Schristos 49576c4f342Schristos rotr $3,$7,13 49676c4f342Schristos addu $17,$20 49776c4f342Schristos lw $20,20($6) # K[5] 49876c4f342Schristos xor $3,$19 49976c4f342Schristos rotr $19,$7,22 50076c4f342Schristos addu $17,$18 50176c4f342Schristos and $18,$24,$25 50276c4f342Schristos xor $3,$19 # Sigma0(a) 50376c4f342Schristos xor $19,$24,$25 50476c4f342Schristos#else 50576c4f342Schristos addu $17,$13,$3 # 5 50676c4f342Schristos srl $3,$31,6 50776c4f342Schristos xor $20,$1,$2 50876c4f342Schristos sll $19,$31,7 50976c4f342Schristos and $20,$31 51076c4f342Schristos srl $18,$31,11 51176c4f342Schristos xor $3,$19 51276c4f342Schristos sll $19,$31,21 51376c4f342Schristos xor $3,$18 51476c4f342Schristos srl $18,$31,25 51576c4f342Schristos xor $3,$19 51676c4f342Schristos sll $19,$31,26 51776c4f342Schristos xor $3,$18 51876c4f342Schristos xor $20,$2 # Ch(e,f,g) 51976c4f342Schristos xor $18,$19,$3 # Sigma1(e) 52076c4f342Schristos 52176c4f342Schristos srl $3,$7,2 52276c4f342Schristos addu $17,$20 52376c4f342Schristos lw $20,20($6) # K[5] 52476c4f342Schristos sll $19,$7,10 52576c4f342Schristos addu $17,$18 52676c4f342Schristos srl $18,$7,13 52776c4f342Schristos xor $3,$19 52876c4f342Schristos sll $19,$7,19 52976c4f342Schristos xor $3,$18 53076c4f342Schristos srl $18,$7,22 53176c4f342Schristos xor $3,$19 53276c4f342Schristos sll $19,$7,30 53376c4f342Schristos xor $3,$18 53476c4f342Schristos and $18,$24,$25 53576c4f342Schristos xor $3,$19 # Sigma0(a) 53676c4f342Schristos xor $19,$24,$25 53776c4f342Schristos#endif 53876c4f342Schristos sw $13,20($29) # offload to ring buffer 53976c4f342Schristos addu $3,$18 54076c4f342Schristos and $19,$7 54176c4f342Schristos addu $17,$20 # +=K[5] 54276c4f342Schristos addu $3,$19 # +=Maj(a,b,c) 54376c4f342Schristos addu $30,$17 54476c4f342Schristos addu $3,$17 545*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 546*e0ea3921Schristos lw $15,28($5) 547*e0ea3921Schristos#else 54876c4f342Schristos lwl $15,31($5) 54976c4f342Schristos lwr $15,28($5) 550*e0ea3921Schristos#endif 55176c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 55276c4f342Schristos wsbh $14,$14 # byte swap(6) 55376c4f342Schristos rotr $14,$14,16 55476c4f342Schristos#else 55576c4f342Schristos srl $19,$14,24 # byte swap(6) 55676c4f342Schristos srl $20,$14,8 55776c4f342Schristos andi $21,$14,0xFF00 55876c4f342Schristos sll $14,$14,24 55976c4f342Schristos andi $20,0xFF00 56076c4f342Schristos sll $21,$21,8 56176c4f342Schristos or $14,$19 56276c4f342Schristos or $20,$21 56376c4f342Schristos or $14,$20 56476c4f342Schristos#endif 56576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 56676c4f342Schristos xor $21,$31,$1 # 6 56776c4f342Schristos rotr $19,$30,6 56876c4f342Schristos addu $18,$14,$2 56976c4f342Schristos rotr $20,$30,11 57076c4f342Schristos and $21,$30 57176c4f342Schristos rotr $2,$30,25 57276c4f342Schristos xor $19,$20 57376c4f342Schristos rotr $20,$3,2 57476c4f342Schristos xor $21,$1 # Ch(e,f,g) 57576c4f342Schristos xor $19,$2 # Sigma1(e) 57676c4f342Schristos 57776c4f342Schristos rotr $2,$3,13 57876c4f342Schristos addu $18,$21 57976c4f342Schristos lw $21,24($6) # K[6] 58076c4f342Schristos xor $2,$20 58176c4f342Schristos rotr $20,$3,22 58276c4f342Schristos addu $18,$19 58376c4f342Schristos and $19,$7,$24 58476c4f342Schristos xor $2,$20 # Sigma0(a) 58576c4f342Schristos xor $20,$7,$24 58676c4f342Schristos#else 58776c4f342Schristos addu $18,$14,$2 # 6 58876c4f342Schristos srl $2,$30,6 58976c4f342Schristos xor $21,$31,$1 59076c4f342Schristos sll $20,$30,7 59176c4f342Schristos and $21,$30 59276c4f342Schristos srl $19,$30,11 59376c4f342Schristos xor $2,$20 59476c4f342Schristos sll $20,$30,21 59576c4f342Schristos xor $2,$19 59676c4f342Schristos srl $19,$30,25 59776c4f342Schristos xor $2,$20 59876c4f342Schristos sll $20,$30,26 59976c4f342Schristos xor $2,$19 60076c4f342Schristos xor $21,$1 # Ch(e,f,g) 60176c4f342Schristos xor $19,$20,$2 # Sigma1(e) 60276c4f342Schristos 60376c4f342Schristos srl $2,$3,2 60476c4f342Schristos addu $18,$21 60576c4f342Schristos lw $21,24($6) # K[6] 60676c4f342Schristos sll $20,$3,10 60776c4f342Schristos addu $18,$19 60876c4f342Schristos srl $19,$3,13 60976c4f342Schristos xor $2,$20 61076c4f342Schristos sll $20,$3,19 61176c4f342Schristos xor $2,$19 61276c4f342Schristos srl $19,$3,22 61376c4f342Schristos xor $2,$20 61476c4f342Schristos sll $20,$3,30 61576c4f342Schristos xor $2,$19 61676c4f342Schristos and $19,$7,$24 61776c4f342Schristos xor $2,$20 # Sigma0(a) 61876c4f342Schristos xor $20,$7,$24 61976c4f342Schristos#endif 62076c4f342Schristos sw $14,24($29) # offload to ring buffer 62176c4f342Schristos addu $2,$19 62276c4f342Schristos and $20,$3 62376c4f342Schristos addu $18,$21 # +=K[6] 62476c4f342Schristos addu $2,$20 # +=Maj(a,b,c) 62576c4f342Schristos addu $25,$18 62676c4f342Schristos addu $2,$18 627*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 628*e0ea3921Schristos lw $16,32($5) 629*e0ea3921Schristos#else 63076c4f342Schristos lwl $16,35($5) 63176c4f342Schristos lwr $16,32($5) 632*e0ea3921Schristos#endif 63376c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 63476c4f342Schristos wsbh $15,$15 # byte swap(7) 63576c4f342Schristos rotr $15,$15,16 63676c4f342Schristos#else 63776c4f342Schristos srl $20,$15,24 # byte swap(7) 63876c4f342Schristos srl $21,$15,8 63976c4f342Schristos andi $22,$15,0xFF00 64076c4f342Schristos sll $15,$15,24 64176c4f342Schristos andi $21,0xFF00 64276c4f342Schristos sll $22,$22,8 64376c4f342Schristos or $15,$20 64476c4f342Schristos or $21,$22 64576c4f342Schristos or $15,$21 64676c4f342Schristos#endif 64776c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 64876c4f342Schristos xor $22,$30,$31 # 7 64976c4f342Schristos rotr $20,$25,6 65076c4f342Schristos addu $19,$15,$1 65176c4f342Schristos rotr $21,$25,11 65276c4f342Schristos and $22,$25 65376c4f342Schristos rotr $1,$25,25 65476c4f342Schristos xor $20,$21 65576c4f342Schristos rotr $21,$2,2 65676c4f342Schristos xor $22,$31 # Ch(e,f,g) 65776c4f342Schristos xor $20,$1 # Sigma1(e) 65876c4f342Schristos 65976c4f342Schristos rotr $1,$2,13 66076c4f342Schristos addu $19,$22 66176c4f342Schristos lw $22,28($6) # K[7] 66276c4f342Schristos xor $1,$21 66376c4f342Schristos rotr $21,$2,22 66476c4f342Schristos addu $19,$20 66576c4f342Schristos and $20,$3,$7 66676c4f342Schristos xor $1,$21 # Sigma0(a) 66776c4f342Schristos xor $21,$3,$7 66876c4f342Schristos#else 66976c4f342Schristos addu $19,$15,$1 # 7 67076c4f342Schristos srl $1,$25,6 67176c4f342Schristos xor $22,$30,$31 67276c4f342Schristos sll $21,$25,7 67376c4f342Schristos and $22,$25 67476c4f342Schristos srl $20,$25,11 67576c4f342Schristos xor $1,$21 67676c4f342Schristos sll $21,$25,21 67776c4f342Schristos xor $1,$20 67876c4f342Schristos srl $20,$25,25 67976c4f342Schristos xor $1,$21 68076c4f342Schristos sll $21,$25,26 68176c4f342Schristos xor $1,$20 68276c4f342Schristos xor $22,$31 # Ch(e,f,g) 68376c4f342Schristos xor $20,$21,$1 # Sigma1(e) 68476c4f342Schristos 68576c4f342Schristos srl $1,$2,2 68676c4f342Schristos addu $19,$22 68776c4f342Schristos lw $22,28($6) # K[7] 68876c4f342Schristos sll $21,$2,10 68976c4f342Schristos addu $19,$20 69076c4f342Schristos srl $20,$2,13 69176c4f342Schristos xor $1,$21 69276c4f342Schristos sll $21,$2,19 69376c4f342Schristos xor $1,$20 69476c4f342Schristos srl $20,$2,22 69576c4f342Schristos xor $1,$21 69676c4f342Schristos sll $21,$2,30 69776c4f342Schristos xor $1,$20 69876c4f342Schristos and $20,$3,$7 69976c4f342Schristos xor $1,$21 # Sigma0(a) 70076c4f342Schristos xor $21,$3,$7 70176c4f342Schristos#endif 70276c4f342Schristos sw $15,28($29) # offload to ring buffer 70376c4f342Schristos addu $1,$20 70476c4f342Schristos and $21,$2 70576c4f342Schristos addu $19,$22 # +=K[7] 70676c4f342Schristos addu $1,$21 # +=Maj(a,b,c) 70776c4f342Schristos addu $24,$19 70876c4f342Schristos addu $1,$19 709*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 710*e0ea3921Schristos lw $17,36($5) 711*e0ea3921Schristos#else 71276c4f342Schristos lwl $17,39($5) 71376c4f342Schristos lwr $17,36($5) 714*e0ea3921Schristos#endif 71576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 71676c4f342Schristos wsbh $16,$16 # byte swap(8) 71776c4f342Schristos rotr $16,$16,16 71876c4f342Schristos#else 71976c4f342Schristos srl $21,$16,24 # byte swap(8) 72076c4f342Schristos srl $22,$16,8 72176c4f342Schristos andi $23,$16,0xFF00 72276c4f342Schristos sll $16,$16,24 72376c4f342Schristos andi $22,0xFF00 72476c4f342Schristos sll $23,$23,8 72576c4f342Schristos or $16,$21 72676c4f342Schristos or $22,$23 72776c4f342Schristos or $16,$22 72876c4f342Schristos#endif 72976c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 73076c4f342Schristos xor $23,$25,$30 # 8 73176c4f342Schristos rotr $21,$24,6 73276c4f342Schristos addu $20,$16,$31 73376c4f342Schristos rotr $22,$24,11 73476c4f342Schristos and $23,$24 73576c4f342Schristos rotr $31,$24,25 73676c4f342Schristos xor $21,$22 73776c4f342Schristos rotr $22,$1,2 73876c4f342Schristos xor $23,$30 # Ch(e,f,g) 73976c4f342Schristos xor $21,$31 # Sigma1(e) 74076c4f342Schristos 74176c4f342Schristos rotr $31,$1,13 74276c4f342Schristos addu $20,$23 74376c4f342Schristos lw $23,32($6) # K[8] 74476c4f342Schristos xor $31,$22 74576c4f342Schristos rotr $22,$1,22 74676c4f342Schristos addu $20,$21 74776c4f342Schristos and $21,$2,$3 74876c4f342Schristos xor $31,$22 # Sigma0(a) 74976c4f342Schristos xor $22,$2,$3 75076c4f342Schristos#else 75176c4f342Schristos addu $20,$16,$31 # 8 75276c4f342Schristos srl $31,$24,6 75376c4f342Schristos xor $23,$25,$30 75476c4f342Schristos sll $22,$24,7 75576c4f342Schristos and $23,$24 75676c4f342Schristos srl $21,$24,11 75776c4f342Schristos xor $31,$22 75876c4f342Schristos sll $22,$24,21 75976c4f342Schristos xor $31,$21 76076c4f342Schristos srl $21,$24,25 76176c4f342Schristos xor $31,$22 76276c4f342Schristos sll $22,$24,26 76376c4f342Schristos xor $31,$21 76476c4f342Schristos xor $23,$30 # Ch(e,f,g) 76576c4f342Schristos xor $21,$22,$31 # Sigma1(e) 76676c4f342Schristos 76776c4f342Schristos srl $31,$1,2 76876c4f342Schristos addu $20,$23 76976c4f342Schristos lw $23,32($6) # K[8] 77076c4f342Schristos sll $22,$1,10 77176c4f342Schristos addu $20,$21 77276c4f342Schristos srl $21,$1,13 77376c4f342Schristos xor $31,$22 77476c4f342Schristos sll $22,$1,19 77576c4f342Schristos xor $31,$21 77676c4f342Schristos srl $21,$1,22 77776c4f342Schristos xor $31,$22 77876c4f342Schristos sll $22,$1,30 77976c4f342Schristos xor $31,$21 78076c4f342Schristos and $21,$2,$3 78176c4f342Schristos xor $31,$22 # Sigma0(a) 78276c4f342Schristos xor $22,$2,$3 78376c4f342Schristos#endif 78476c4f342Schristos sw $16,32($29) # offload to ring buffer 78576c4f342Schristos addu $31,$21 78676c4f342Schristos and $22,$1 78776c4f342Schristos addu $20,$23 # +=K[8] 78876c4f342Schristos addu $31,$22 # +=Maj(a,b,c) 78976c4f342Schristos addu $7,$20 79076c4f342Schristos addu $31,$20 791*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 792*e0ea3921Schristos lw $18,40($5) 793*e0ea3921Schristos#else 79476c4f342Schristos lwl $18,43($5) 79576c4f342Schristos lwr $18,40($5) 796*e0ea3921Schristos#endif 79776c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 79876c4f342Schristos wsbh $17,$17 # byte swap(9) 79976c4f342Schristos rotr $17,$17,16 80076c4f342Schristos#else 80176c4f342Schristos srl $22,$17,24 # byte swap(9) 80276c4f342Schristos srl $23,$17,8 80376c4f342Schristos andi $8,$17,0xFF00 80476c4f342Schristos sll $17,$17,24 80576c4f342Schristos andi $23,0xFF00 80676c4f342Schristos sll $8,$8,8 80776c4f342Schristos or $17,$22 80876c4f342Schristos or $23,$8 80976c4f342Schristos or $17,$23 81076c4f342Schristos#endif 81176c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 81276c4f342Schristos xor $8,$24,$25 # 9 81376c4f342Schristos rotr $22,$7,6 81476c4f342Schristos addu $21,$17,$30 81576c4f342Schristos rotr $23,$7,11 81676c4f342Schristos and $8,$7 81776c4f342Schristos rotr $30,$7,25 81876c4f342Schristos xor $22,$23 81976c4f342Schristos rotr $23,$31,2 82076c4f342Schristos xor $8,$25 # Ch(e,f,g) 82176c4f342Schristos xor $22,$30 # Sigma1(e) 82276c4f342Schristos 82376c4f342Schristos rotr $30,$31,13 82476c4f342Schristos addu $21,$8 82576c4f342Schristos lw $8,36($6) # K[9] 82676c4f342Schristos xor $30,$23 82776c4f342Schristos rotr $23,$31,22 82876c4f342Schristos addu $21,$22 82976c4f342Schristos and $22,$1,$2 83076c4f342Schristos xor $30,$23 # Sigma0(a) 83176c4f342Schristos xor $23,$1,$2 83276c4f342Schristos#else 83376c4f342Schristos addu $21,$17,$30 # 9 83476c4f342Schristos srl $30,$7,6 83576c4f342Schristos xor $8,$24,$25 83676c4f342Schristos sll $23,$7,7 83776c4f342Schristos and $8,$7 83876c4f342Schristos srl $22,$7,11 83976c4f342Schristos xor $30,$23 84076c4f342Schristos sll $23,$7,21 84176c4f342Schristos xor $30,$22 84276c4f342Schristos srl $22,$7,25 84376c4f342Schristos xor $30,$23 84476c4f342Schristos sll $23,$7,26 84576c4f342Schristos xor $30,$22 84676c4f342Schristos xor $8,$25 # Ch(e,f,g) 84776c4f342Schristos xor $22,$23,$30 # Sigma1(e) 84876c4f342Schristos 84976c4f342Schristos srl $30,$31,2 85076c4f342Schristos addu $21,$8 85176c4f342Schristos lw $8,36($6) # K[9] 85276c4f342Schristos sll $23,$31,10 85376c4f342Schristos addu $21,$22 85476c4f342Schristos srl $22,$31,13 85576c4f342Schristos xor $30,$23 85676c4f342Schristos sll $23,$31,19 85776c4f342Schristos xor $30,$22 85876c4f342Schristos srl $22,$31,22 85976c4f342Schristos xor $30,$23 86076c4f342Schristos sll $23,$31,30 86176c4f342Schristos xor $30,$22 86276c4f342Schristos and $22,$1,$2 86376c4f342Schristos xor $30,$23 # Sigma0(a) 86476c4f342Schristos xor $23,$1,$2 86576c4f342Schristos#endif 86676c4f342Schristos sw $17,36($29) # offload to ring buffer 86776c4f342Schristos addu $30,$22 86876c4f342Schristos and $23,$31 86976c4f342Schristos addu $21,$8 # +=K[9] 87076c4f342Schristos addu $30,$23 # +=Maj(a,b,c) 87176c4f342Schristos addu $3,$21 87276c4f342Schristos addu $30,$21 873*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 874*e0ea3921Schristos lw $19,44($5) 875*e0ea3921Schristos#else 87676c4f342Schristos lwl $19,47($5) 87776c4f342Schristos lwr $19,44($5) 878*e0ea3921Schristos#endif 87976c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 88076c4f342Schristos wsbh $18,$18 # byte swap(10) 88176c4f342Schristos rotr $18,$18,16 88276c4f342Schristos#else 88376c4f342Schristos srl $23,$18,24 # byte swap(10) 88476c4f342Schristos srl $8,$18,8 88576c4f342Schristos andi $9,$18,0xFF00 88676c4f342Schristos sll $18,$18,24 88776c4f342Schristos andi $8,0xFF00 88876c4f342Schristos sll $9,$9,8 88976c4f342Schristos or $18,$23 89076c4f342Schristos or $8,$9 89176c4f342Schristos or $18,$8 89276c4f342Schristos#endif 89376c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 89476c4f342Schristos xor $9,$7,$24 # 10 89576c4f342Schristos rotr $23,$3,6 89676c4f342Schristos addu $22,$18,$25 89776c4f342Schristos rotr $8,$3,11 89876c4f342Schristos and $9,$3 89976c4f342Schristos rotr $25,$3,25 90076c4f342Schristos xor $23,$8 90176c4f342Schristos rotr $8,$30,2 90276c4f342Schristos xor $9,$24 # Ch(e,f,g) 90376c4f342Schristos xor $23,$25 # Sigma1(e) 90476c4f342Schristos 90576c4f342Schristos rotr $25,$30,13 90676c4f342Schristos addu $22,$9 90776c4f342Schristos lw $9,40($6) # K[10] 90876c4f342Schristos xor $25,$8 90976c4f342Schristos rotr $8,$30,22 91076c4f342Schristos addu $22,$23 91176c4f342Schristos and $23,$31,$1 91276c4f342Schristos xor $25,$8 # Sigma0(a) 91376c4f342Schristos xor $8,$31,$1 91476c4f342Schristos#else 91576c4f342Schristos addu $22,$18,$25 # 10 91676c4f342Schristos srl $25,$3,6 91776c4f342Schristos xor $9,$7,$24 91876c4f342Schristos sll $8,$3,7 91976c4f342Schristos and $9,$3 92076c4f342Schristos srl $23,$3,11 92176c4f342Schristos xor $25,$8 92276c4f342Schristos sll $8,$3,21 92376c4f342Schristos xor $25,$23 92476c4f342Schristos srl $23,$3,25 92576c4f342Schristos xor $25,$8 92676c4f342Schristos sll $8,$3,26 92776c4f342Schristos xor $25,$23 92876c4f342Schristos xor $9,$24 # Ch(e,f,g) 92976c4f342Schristos xor $23,$8,$25 # Sigma1(e) 93076c4f342Schristos 93176c4f342Schristos srl $25,$30,2 93276c4f342Schristos addu $22,$9 93376c4f342Schristos lw $9,40($6) # K[10] 93476c4f342Schristos sll $8,$30,10 93576c4f342Schristos addu $22,$23 93676c4f342Schristos srl $23,$30,13 93776c4f342Schristos xor $25,$8 93876c4f342Schristos sll $8,$30,19 93976c4f342Schristos xor $25,$23 94076c4f342Schristos srl $23,$30,22 94176c4f342Schristos xor $25,$8 94276c4f342Schristos sll $8,$30,30 94376c4f342Schristos xor $25,$23 94476c4f342Schristos and $23,$31,$1 94576c4f342Schristos xor $25,$8 # Sigma0(a) 94676c4f342Schristos xor $8,$31,$1 94776c4f342Schristos#endif 94876c4f342Schristos sw $18,40($29) # offload to ring buffer 94976c4f342Schristos addu $25,$23 95076c4f342Schristos and $8,$30 95176c4f342Schristos addu $22,$9 # +=K[10] 95276c4f342Schristos addu $25,$8 # +=Maj(a,b,c) 95376c4f342Schristos addu $2,$22 95476c4f342Schristos addu $25,$22 955*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 956*e0ea3921Schristos lw $20,48($5) 957*e0ea3921Schristos#else 95876c4f342Schristos lwl $20,51($5) 95976c4f342Schristos lwr $20,48($5) 960*e0ea3921Schristos#endif 96176c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 96276c4f342Schristos wsbh $19,$19 # byte swap(11) 96376c4f342Schristos rotr $19,$19,16 96476c4f342Schristos#else 96576c4f342Schristos srl $8,$19,24 # byte swap(11) 96676c4f342Schristos srl $9,$19,8 96776c4f342Schristos andi $10,$19,0xFF00 96876c4f342Schristos sll $19,$19,24 96976c4f342Schristos andi $9,0xFF00 97076c4f342Schristos sll $10,$10,8 97176c4f342Schristos or $19,$8 97276c4f342Schristos or $9,$10 97376c4f342Schristos or $19,$9 97476c4f342Schristos#endif 97576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 97676c4f342Schristos xor $10,$3,$7 # 11 97776c4f342Schristos rotr $8,$2,6 97876c4f342Schristos addu $23,$19,$24 97976c4f342Schristos rotr $9,$2,11 98076c4f342Schristos and $10,$2 98176c4f342Schristos rotr $24,$2,25 98276c4f342Schristos xor $8,$9 98376c4f342Schristos rotr $9,$25,2 98476c4f342Schristos xor $10,$7 # Ch(e,f,g) 98576c4f342Schristos xor $8,$24 # Sigma1(e) 98676c4f342Schristos 98776c4f342Schristos rotr $24,$25,13 98876c4f342Schristos addu $23,$10 98976c4f342Schristos lw $10,44($6) # K[11] 99076c4f342Schristos xor $24,$9 99176c4f342Schristos rotr $9,$25,22 99276c4f342Schristos addu $23,$8 99376c4f342Schristos and $8,$30,$31 99476c4f342Schristos xor $24,$9 # Sigma0(a) 99576c4f342Schristos xor $9,$30,$31 99676c4f342Schristos#else 99776c4f342Schristos addu $23,$19,$24 # 11 99876c4f342Schristos srl $24,$2,6 99976c4f342Schristos xor $10,$3,$7 100076c4f342Schristos sll $9,$2,7 100176c4f342Schristos and $10,$2 100276c4f342Schristos srl $8,$2,11 100376c4f342Schristos xor $24,$9 100476c4f342Schristos sll $9,$2,21 100576c4f342Schristos xor $24,$8 100676c4f342Schristos srl $8,$2,25 100776c4f342Schristos xor $24,$9 100876c4f342Schristos sll $9,$2,26 100976c4f342Schristos xor $24,$8 101076c4f342Schristos xor $10,$7 # Ch(e,f,g) 101176c4f342Schristos xor $8,$9,$24 # Sigma1(e) 101276c4f342Schristos 101376c4f342Schristos srl $24,$25,2 101476c4f342Schristos addu $23,$10 101576c4f342Schristos lw $10,44($6) # K[11] 101676c4f342Schristos sll $9,$25,10 101776c4f342Schristos addu $23,$8 101876c4f342Schristos srl $8,$25,13 101976c4f342Schristos xor $24,$9 102076c4f342Schristos sll $9,$25,19 102176c4f342Schristos xor $24,$8 102276c4f342Schristos srl $8,$25,22 102376c4f342Schristos xor $24,$9 102476c4f342Schristos sll $9,$25,30 102576c4f342Schristos xor $24,$8 102676c4f342Schristos and $8,$30,$31 102776c4f342Schristos xor $24,$9 # Sigma0(a) 102876c4f342Schristos xor $9,$30,$31 102976c4f342Schristos#endif 103076c4f342Schristos sw $19,44($29) # offload to ring buffer 103176c4f342Schristos addu $24,$8 103276c4f342Schristos and $9,$25 103376c4f342Schristos addu $23,$10 # +=K[11] 103476c4f342Schristos addu $24,$9 # +=Maj(a,b,c) 103576c4f342Schristos addu $1,$23 103676c4f342Schristos addu $24,$23 1037*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 1038*e0ea3921Schristos lw $21,52($5) 1039*e0ea3921Schristos#else 104076c4f342Schristos lwl $21,55($5) 104176c4f342Schristos lwr $21,52($5) 1042*e0ea3921Schristos#endif 104376c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 104476c4f342Schristos wsbh $20,$20 # byte swap(12) 104576c4f342Schristos rotr $20,$20,16 104676c4f342Schristos#else 104776c4f342Schristos srl $9,$20,24 # byte swap(12) 104876c4f342Schristos srl $10,$20,8 104976c4f342Schristos andi $11,$20,0xFF00 105076c4f342Schristos sll $20,$20,24 105176c4f342Schristos andi $10,0xFF00 105276c4f342Schristos sll $11,$11,8 105376c4f342Schristos or $20,$9 105476c4f342Schristos or $10,$11 105576c4f342Schristos or $20,$10 105676c4f342Schristos#endif 105776c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 105876c4f342Schristos xor $11,$2,$3 # 12 105976c4f342Schristos rotr $9,$1,6 106076c4f342Schristos addu $8,$20,$7 106176c4f342Schristos rotr $10,$1,11 106276c4f342Schristos and $11,$1 106376c4f342Schristos rotr $7,$1,25 106476c4f342Schristos xor $9,$10 106576c4f342Schristos rotr $10,$24,2 106676c4f342Schristos xor $11,$3 # Ch(e,f,g) 106776c4f342Schristos xor $9,$7 # Sigma1(e) 106876c4f342Schristos 106976c4f342Schristos rotr $7,$24,13 107076c4f342Schristos addu $8,$11 107176c4f342Schristos lw $11,48($6) # K[12] 107276c4f342Schristos xor $7,$10 107376c4f342Schristos rotr $10,$24,22 107476c4f342Schristos addu $8,$9 107576c4f342Schristos and $9,$25,$30 107676c4f342Schristos xor $7,$10 # Sigma0(a) 107776c4f342Schristos xor $10,$25,$30 107876c4f342Schristos#else 107976c4f342Schristos addu $8,$20,$7 # 12 108076c4f342Schristos srl $7,$1,6 108176c4f342Schristos xor $11,$2,$3 108276c4f342Schristos sll $10,$1,7 108376c4f342Schristos and $11,$1 108476c4f342Schristos srl $9,$1,11 108576c4f342Schristos xor $7,$10 108676c4f342Schristos sll $10,$1,21 108776c4f342Schristos xor $7,$9 108876c4f342Schristos srl $9,$1,25 108976c4f342Schristos xor $7,$10 109076c4f342Schristos sll $10,$1,26 109176c4f342Schristos xor $7,$9 109276c4f342Schristos xor $11,$3 # Ch(e,f,g) 109376c4f342Schristos xor $9,$10,$7 # Sigma1(e) 109476c4f342Schristos 109576c4f342Schristos srl $7,$24,2 109676c4f342Schristos addu $8,$11 109776c4f342Schristos lw $11,48($6) # K[12] 109876c4f342Schristos sll $10,$24,10 109976c4f342Schristos addu $8,$9 110076c4f342Schristos srl $9,$24,13 110176c4f342Schristos xor $7,$10 110276c4f342Schristos sll $10,$24,19 110376c4f342Schristos xor $7,$9 110476c4f342Schristos srl $9,$24,22 110576c4f342Schristos xor $7,$10 110676c4f342Schristos sll $10,$24,30 110776c4f342Schristos xor $7,$9 110876c4f342Schristos and $9,$25,$30 110976c4f342Schristos xor $7,$10 # Sigma0(a) 111076c4f342Schristos xor $10,$25,$30 111176c4f342Schristos#endif 111276c4f342Schristos sw $20,48($29) # offload to ring buffer 111376c4f342Schristos addu $7,$9 111476c4f342Schristos and $10,$24 111576c4f342Schristos addu $8,$11 # +=K[12] 111676c4f342Schristos addu $7,$10 # +=Maj(a,b,c) 111776c4f342Schristos addu $31,$8 111876c4f342Schristos addu $7,$8 1119*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 1120*e0ea3921Schristos lw $22,56($5) 1121*e0ea3921Schristos#else 112276c4f342Schristos lwl $22,59($5) 112376c4f342Schristos lwr $22,56($5) 1124*e0ea3921Schristos#endif 112576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 112676c4f342Schristos wsbh $21,$21 # byte swap(13) 112776c4f342Schristos rotr $21,$21,16 112876c4f342Schristos#else 112976c4f342Schristos srl $10,$21,24 # byte swap(13) 113076c4f342Schristos srl $11,$21,8 113176c4f342Schristos andi $12,$21,0xFF00 113276c4f342Schristos sll $21,$21,24 113376c4f342Schristos andi $11,0xFF00 113476c4f342Schristos sll $12,$12,8 113576c4f342Schristos or $21,$10 113676c4f342Schristos or $11,$12 113776c4f342Schristos or $21,$11 113876c4f342Schristos#endif 113976c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 114076c4f342Schristos xor $12,$1,$2 # 13 114176c4f342Schristos rotr $10,$31,6 114276c4f342Schristos addu $9,$21,$3 114376c4f342Schristos rotr $11,$31,11 114476c4f342Schristos and $12,$31 114576c4f342Schristos rotr $3,$31,25 114676c4f342Schristos xor $10,$11 114776c4f342Schristos rotr $11,$7,2 114876c4f342Schristos xor $12,$2 # Ch(e,f,g) 114976c4f342Schristos xor $10,$3 # Sigma1(e) 115076c4f342Schristos 115176c4f342Schristos rotr $3,$7,13 115276c4f342Schristos addu $9,$12 115376c4f342Schristos lw $12,52($6) # K[13] 115476c4f342Schristos xor $3,$11 115576c4f342Schristos rotr $11,$7,22 115676c4f342Schristos addu $9,$10 115776c4f342Schristos and $10,$24,$25 115876c4f342Schristos xor $3,$11 # Sigma0(a) 115976c4f342Schristos xor $11,$24,$25 116076c4f342Schristos#else 116176c4f342Schristos addu $9,$21,$3 # 13 116276c4f342Schristos srl $3,$31,6 116376c4f342Schristos xor $12,$1,$2 116476c4f342Schristos sll $11,$31,7 116576c4f342Schristos and $12,$31 116676c4f342Schristos srl $10,$31,11 116776c4f342Schristos xor $3,$11 116876c4f342Schristos sll $11,$31,21 116976c4f342Schristos xor $3,$10 117076c4f342Schristos srl $10,$31,25 117176c4f342Schristos xor $3,$11 117276c4f342Schristos sll $11,$31,26 117376c4f342Schristos xor $3,$10 117476c4f342Schristos xor $12,$2 # Ch(e,f,g) 117576c4f342Schristos xor $10,$11,$3 # Sigma1(e) 117676c4f342Schristos 117776c4f342Schristos srl $3,$7,2 117876c4f342Schristos addu $9,$12 117976c4f342Schristos lw $12,52($6) # K[13] 118076c4f342Schristos sll $11,$7,10 118176c4f342Schristos addu $9,$10 118276c4f342Schristos srl $10,$7,13 118376c4f342Schristos xor $3,$11 118476c4f342Schristos sll $11,$7,19 118576c4f342Schristos xor $3,$10 118676c4f342Schristos srl $10,$7,22 118776c4f342Schristos xor $3,$11 118876c4f342Schristos sll $11,$7,30 118976c4f342Schristos xor $3,$10 119076c4f342Schristos and $10,$24,$25 119176c4f342Schristos xor $3,$11 # Sigma0(a) 119276c4f342Schristos xor $11,$24,$25 119376c4f342Schristos#endif 119476c4f342Schristos sw $21,52($29) # offload to ring buffer 119576c4f342Schristos addu $3,$10 119676c4f342Schristos and $11,$7 119776c4f342Schristos addu $9,$12 # +=K[13] 119876c4f342Schristos addu $3,$11 # +=Maj(a,b,c) 119976c4f342Schristos addu $30,$9 120076c4f342Schristos addu $3,$9 120176c4f342Schristos lw $8,0($29) # prefetch from ring buffer 1202*e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 1203*e0ea3921Schristos lw $23,60($5) 1204*e0ea3921Schristos#else 120576c4f342Schristos lwl $23,63($5) 120676c4f342Schristos lwr $23,60($5) 1207*e0ea3921Schristos#endif 120876c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 120976c4f342Schristos wsbh $22,$22 # byte swap(14) 121076c4f342Schristos rotr $22,$22,16 121176c4f342Schristos#else 121276c4f342Schristos srl $11,$22,24 # byte swap(14) 121376c4f342Schristos srl $12,$22,8 121476c4f342Schristos andi $13,$22,0xFF00 121576c4f342Schristos sll $22,$22,24 121676c4f342Schristos andi $12,0xFF00 121776c4f342Schristos sll $13,$13,8 121876c4f342Schristos or $22,$11 121976c4f342Schristos or $12,$13 122076c4f342Schristos or $22,$12 122176c4f342Schristos#endif 122276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 122376c4f342Schristos xor $13,$31,$1 # 14 122476c4f342Schristos rotr $11,$30,6 122576c4f342Schristos addu $10,$22,$2 122676c4f342Schristos rotr $12,$30,11 122776c4f342Schristos and $13,$30 122876c4f342Schristos rotr $2,$30,25 122976c4f342Schristos xor $11,$12 123076c4f342Schristos rotr $12,$3,2 123176c4f342Schristos xor $13,$1 # Ch(e,f,g) 123276c4f342Schristos xor $11,$2 # Sigma1(e) 123376c4f342Schristos 123476c4f342Schristos rotr $2,$3,13 123576c4f342Schristos addu $10,$13 123676c4f342Schristos lw $13,56($6) # K[14] 123776c4f342Schristos xor $2,$12 123876c4f342Schristos rotr $12,$3,22 123976c4f342Schristos addu $10,$11 124076c4f342Schristos and $11,$7,$24 124176c4f342Schristos xor $2,$12 # Sigma0(a) 124276c4f342Schristos xor $12,$7,$24 124376c4f342Schristos#else 124476c4f342Schristos addu $10,$22,$2 # 14 124576c4f342Schristos srl $2,$30,6 124676c4f342Schristos xor $13,$31,$1 124776c4f342Schristos sll $12,$30,7 124876c4f342Schristos and $13,$30 124976c4f342Schristos srl $11,$30,11 125076c4f342Schristos xor $2,$12 125176c4f342Schristos sll $12,$30,21 125276c4f342Schristos xor $2,$11 125376c4f342Schristos srl $11,$30,25 125476c4f342Schristos xor $2,$12 125576c4f342Schristos sll $12,$30,26 125676c4f342Schristos xor $2,$11 125776c4f342Schristos xor $13,$1 # Ch(e,f,g) 125876c4f342Schristos xor $11,$12,$2 # Sigma1(e) 125976c4f342Schristos 126076c4f342Schristos srl $2,$3,2 126176c4f342Schristos addu $10,$13 126276c4f342Schristos lw $13,56($6) # K[14] 126376c4f342Schristos sll $12,$3,10 126476c4f342Schristos addu $10,$11 126576c4f342Schristos srl $11,$3,13 126676c4f342Schristos xor $2,$12 126776c4f342Schristos sll $12,$3,19 126876c4f342Schristos xor $2,$11 126976c4f342Schristos srl $11,$3,22 127076c4f342Schristos xor $2,$12 127176c4f342Schristos sll $12,$3,30 127276c4f342Schristos xor $2,$11 127376c4f342Schristos and $11,$7,$24 127476c4f342Schristos xor $2,$12 # Sigma0(a) 127576c4f342Schristos xor $12,$7,$24 127676c4f342Schristos#endif 127776c4f342Schristos sw $22,56($29) # offload to ring buffer 127876c4f342Schristos addu $2,$11 127976c4f342Schristos and $12,$3 128076c4f342Schristos addu $10,$13 # +=K[14] 128176c4f342Schristos addu $2,$12 # +=Maj(a,b,c) 128276c4f342Schristos addu $25,$10 128376c4f342Schristos addu $2,$10 128476c4f342Schristos lw $9,4($29) # prefetch from ring buffer 128576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 128676c4f342Schristos wsbh $23,$23 # byte swap(15) 128776c4f342Schristos rotr $23,$23,16 128876c4f342Schristos#else 128976c4f342Schristos srl $12,$23,24 # byte swap(15) 129076c4f342Schristos srl $13,$23,8 129176c4f342Schristos andi $14,$23,0xFF00 129276c4f342Schristos sll $23,$23,24 129376c4f342Schristos andi $13,0xFF00 129476c4f342Schristos sll $14,$14,8 129576c4f342Schristos or $23,$12 129676c4f342Schristos or $13,$14 129776c4f342Schristos or $23,$13 129876c4f342Schristos#endif 129976c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 130076c4f342Schristos xor $14,$30,$31 # 15 130176c4f342Schristos rotr $12,$25,6 130276c4f342Schristos addu $11,$23,$1 130376c4f342Schristos rotr $13,$25,11 130476c4f342Schristos and $14,$25 130576c4f342Schristos rotr $1,$25,25 130676c4f342Schristos xor $12,$13 130776c4f342Schristos rotr $13,$2,2 130876c4f342Schristos xor $14,$31 # Ch(e,f,g) 130976c4f342Schristos xor $12,$1 # Sigma1(e) 131076c4f342Schristos 131176c4f342Schristos rotr $1,$2,13 131276c4f342Schristos addu $11,$14 131376c4f342Schristos lw $14,60($6) # K[15] 131476c4f342Schristos xor $1,$13 131576c4f342Schristos rotr $13,$2,22 131676c4f342Schristos addu $11,$12 131776c4f342Schristos and $12,$3,$7 131876c4f342Schristos xor $1,$13 # Sigma0(a) 131976c4f342Schristos xor $13,$3,$7 132076c4f342Schristos#else 132176c4f342Schristos addu $11,$23,$1 # 15 132276c4f342Schristos srl $1,$25,6 132376c4f342Schristos xor $14,$30,$31 132476c4f342Schristos sll $13,$25,7 132576c4f342Schristos and $14,$25 132676c4f342Schristos srl $12,$25,11 132776c4f342Schristos xor $1,$13 132876c4f342Schristos sll $13,$25,21 132976c4f342Schristos xor $1,$12 133076c4f342Schristos srl $12,$25,25 133176c4f342Schristos xor $1,$13 133276c4f342Schristos sll $13,$25,26 133376c4f342Schristos xor $1,$12 133476c4f342Schristos xor $14,$31 # Ch(e,f,g) 133576c4f342Schristos xor $12,$13,$1 # Sigma1(e) 133676c4f342Schristos 133776c4f342Schristos srl $1,$2,2 133876c4f342Schristos addu $11,$14 133976c4f342Schristos lw $14,60($6) # K[15] 134076c4f342Schristos sll $13,$2,10 134176c4f342Schristos addu $11,$12 134276c4f342Schristos srl $12,$2,13 134376c4f342Schristos xor $1,$13 134476c4f342Schristos sll $13,$2,19 134576c4f342Schristos xor $1,$12 134676c4f342Schristos srl $12,$2,22 134776c4f342Schristos xor $1,$13 134876c4f342Schristos sll $13,$2,30 134976c4f342Schristos xor $1,$12 135076c4f342Schristos and $12,$3,$7 135176c4f342Schristos xor $1,$13 # Sigma0(a) 135276c4f342Schristos xor $13,$3,$7 135376c4f342Schristos#endif 135476c4f342Schristos sw $23,60($29) # offload to ring buffer 135576c4f342Schristos addu $1,$12 135676c4f342Schristos and $13,$2 135776c4f342Schristos addu $11,$14 # +=K[15] 135876c4f342Schristos addu $1,$13 # +=Maj(a,b,c) 135976c4f342Schristos addu $24,$11 136076c4f342Schristos addu $1,$11 136176c4f342Schristos lw $10,8($29) # prefetch from ring buffer 136276c4f342Schristos b .L16_xx 136376c4f342Schristos.align 4 136476c4f342Schristos.L16_xx: 136576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 136676c4f342Schristos srl $14,$9,3 # Xupdate(16) 136776c4f342Schristos rotr $12,$9,7 136876c4f342Schristos addu $8,$17 # +=X[i+9] 136976c4f342Schristos xor $14,$12 137076c4f342Schristos rotr $12,$9,18 137176c4f342Schristos 137276c4f342Schristos srl $15,$22,10 137376c4f342Schristos rotr $13,$22,17 137476c4f342Schristos xor $14,$12 # sigma0(X[i+1]) 137576c4f342Schristos rotr $12,$22,19 137676c4f342Schristos xor $15,$13 137776c4f342Schristos addu $8,$14 137876c4f342Schristos#else 137976c4f342Schristos srl $14,$9,3 # Xupdate(16) 138076c4f342Schristos addu $8,$17 # +=X[i+9] 138176c4f342Schristos sll $13,$9,14 138276c4f342Schristos srl $12,$9,7 138376c4f342Schristos xor $14,$13 138476c4f342Schristos sll $13,11 138576c4f342Schristos xor $14,$12 138676c4f342Schristos srl $12,$9,18 138776c4f342Schristos xor $14,$13 138876c4f342Schristos 138976c4f342Schristos srl $15,$22,10 139076c4f342Schristos xor $14,$12 # sigma0(X[i+1]) 139176c4f342Schristos sll $13,$22,13 139276c4f342Schristos addu $8,$14 139376c4f342Schristos srl $12,$22,17 139476c4f342Schristos xor $15,$13 139576c4f342Schristos sll $13,2 139676c4f342Schristos xor $15,$12 139776c4f342Schristos srl $12,$22,19 139876c4f342Schristos xor $15,$13 139976c4f342Schristos#endif 140076c4f342Schristos xor $15,$12 # sigma1(X[i+14]) 140176c4f342Schristos addu $8,$15 140276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 140376c4f342Schristos xor $15,$25,$30 # 16 140476c4f342Schristos rotr $13,$24,6 140576c4f342Schristos addu $12,$8,$31 140676c4f342Schristos rotr $14,$24,11 140776c4f342Schristos and $15,$24 140876c4f342Schristos rotr $31,$24,25 140976c4f342Schristos xor $13,$14 141076c4f342Schristos rotr $14,$1,2 141176c4f342Schristos xor $15,$30 # Ch(e,f,g) 141276c4f342Schristos xor $13,$31 # Sigma1(e) 141376c4f342Schristos 141476c4f342Schristos rotr $31,$1,13 141576c4f342Schristos addu $12,$15 141676c4f342Schristos lw $15,64($6) # K[16] 141776c4f342Schristos xor $31,$14 141876c4f342Schristos rotr $14,$1,22 141976c4f342Schristos addu $12,$13 142076c4f342Schristos and $13,$2,$3 142176c4f342Schristos xor $31,$14 # Sigma0(a) 142276c4f342Schristos xor $14,$2,$3 142376c4f342Schristos#else 142476c4f342Schristos addu $12,$8,$31 # 16 142576c4f342Schristos srl $31,$24,6 142676c4f342Schristos xor $15,$25,$30 142776c4f342Schristos sll $14,$24,7 142876c4f342Schristos and $15,$24 142976c4f342Schristos srl $13,$24,11 143076c4f342Schristos xor $31,$14 143176c4f342Schristos sll $14,$24,21 143276c4f342Schristos xor $31,$13 143376c4f342Schristos srl $13,$24,25 143476c4f342Schristos xor $31,$14 143576c4f342Schristos sll $14,$24,26 143676c4f342Schristos xor $31,$13 143776c4f342Schristos xor $15,$30 # Ch(e,f,g) 143876c4f342Schristos xor $13,$14,$31 # Sigma1(e) 143976c4f342Schristos 144076c4f342Schristos srl $31,$1,2 144176c4f342Schristos addu $12,$15 144276c4f342Schristos lw $15,64($6) # K[16] 144376c4f342Schristos sll $14,$1,10 144476c4f342Schristos addu $12,$13 144576c4f342Schristos srl $13,$1,13 144676c4f342Schristos xor $31,$14 144776c4f342Schristos sll $14,$1,19 144876c4f342Schristos xor $31,$13 144976c4f342Schristos srl $13,$1,22 145076c4f342Schristos xor $31,$14 145176c4f342Schristos sll $14,$1,30 145276c4f342Schristos xor $31,$13 145376c4f342Schristos and $13,$2,$3 145476c4f342Schristos xor $31,$14 # Sigma0(a) 145576c4f342Schristos xor $14,$2,$3 145676c4f342Schristos#endif 145776c4f342Schristos sw $8,0($29) # offload to ring buffer 145876c4f342Schristos addu $31,$13 145976c4f342Schristos and $14,$1 146076c4f342Schristos addu $12,$15 # +=K[16] 146176c4f342Schristos addu $31,$14 # +=Maj(a,b,c) 146276c4f342Schristos addu $7,$12 146376c4f342Schristos addu $31,$12 146476c4f342Schristos lw $11,12($29) # prefetch from ring buffer 146576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 146676c4f342Schristos srl $15,$10,3 # Xupdate(17) 146776c4f342Schristos rotr $13,$10,7 146876c4f342Schristos addu $9,$18 # +=X[i+9] 146976c4f342Schristos xor $15,$13 147076c4f342Schristos rotr $13,$10,18 147176c4f342Schristos 147276c4f342Schristos srl $16,$23,10 147376c4f342Schristos rotr $14,$23,17 147476c4f342Schristos xor $15,$13 # sigma0(X[i+1]) 147576c4f342Schristos rotr $13,$23,19 147676c4f342Schristos xor $16,$14 147776c4f342Schristos addu $9,$15 147876c4f342Schristos#else 147976c4f342Schristos srl $15,$10,3 # Xupdate(17) 148076c4f342Schristos addu $9,$18 # +=X[i+9] 148176c4f342Schristos sll $14,$10,14 148276c4f342Schristos srl $13,$10,7 148376c4f342Schristos xor $15,$14 148476c4f342Schristos sll $14,11 148576c4f342Schristos xor $15,$13 148676c4f342Schristos srl $13,$10,18 148776c4f342Schristos xor $15,$14 148876c4f342Schristos 148976c4f342Schristos srl $16,$23,10 149076c4f342Schristos xor $15,$13 # sigma0(X[i+1]) 149176c4f342Schristos sll $14,$23,13 149276c4f342Schristos addu $9,$15 149376c4f342Schristos srl $13,$23,17 149476c4f342Schristos xor $16,$14 149576c4f342Schristos sll $14,2 149676c4f342Schristos xor $16,$13 149776c4f342Schristos srl $13,$23,19 149876c4f342Schristos xor $16,$14 149976c4f342Schristos#endif 150076c4f342Schristos xor $16,$13 # sigma1(X[i+14]) 150176c4f342Schristos addu $9,$16 150276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 150376c4f342Schristos xor $16,$24,$25 # 17 150476c4f342Schristos rotr $14,$7,6 150576c4f342Schristos addu $13,$9,$30 150676c4f342Schristos rotr $15,$7,11 150776c4f342Schristos and $16,$7 150876c4f342Schristos rotr $30,$7,25 150976c4f342Schristos xor $14,$15 151076c4f342Schristos rotr $15,$31,2 151176c4f342Schristos xor $16,$25 # Ch(e,f,g) 151276c4f342Schristos xor $14,$30 # Sigma1(e) 151376c4f342Schristos 151476c4f342Schristos rotr $30,$31,13 151576c4f342Schristos addu $13,$16 151676c4f342Schristos lw $16,68($6) # K[17] 151776c4f342Schristos xor $30,$15 151876c4f342Schristos rotr $15,$31,22 151976c4f342Schristos addu $13,$14 152076c4f342Schristos and $14,$1,$2 152176c4f342Schristos xor $30,$15 # Sigma0(a) 152276c4f342Schristos xor $15,$1,$2 152376c4f342Schristos#else 152476c4f342Schristos addu $13,$9,$30 # 17 152576c4f342Schristos srl $30,$7,6 152676c4f342Schristos xor $16,$24,$25 152776c4f342Schristos sll $15,$7,7 152876c4f342Schristos and $16,$7 152976c4f342Schristos srl $14,$7,11 153076c4f342Schristos xor $30,$15 153176c4f342Schristos sll $15,$7,21 153276c4f342Schristos xor $30,$14 153376c4f342Schristos srl $14,$7,25 153476c4f342Schristos xor $30,$15 153576c4f342Schristos sll $15,$7,26 153676c4f342Schristos xor $30,$14 153776c4f342Schristos xor $16,$25 # Ch(e,f,g) 153876c4f342Schristos xor $14,$15,$30 # Sigma1(e) 153976c4f342Schristos 154076c4f342Schristos srl $30,$31,2 154176c4f342Schristos addu $13,$16 154276c4f342Schristos lw $16,68($6) # K[17] 154376c4f342Schristos sll $15,$31,10 154476c4f342Schristos addu $13,$14 154576c4f342Schristos srl $14,$31,13 154676c4f342Schristos xor $30,$15 154776c4f342Schristos sll $15,$31,19 154876c4f342Schristos xor $30,$14 154976c4f342Schristos srl $14,$31,22 155076c4f342Schristos xor $30,$15 155176c4f342Schristos sll $15,$31,30 155276c4f342Schristos xor $30,$14 155376c4f342Schristos and $14,$1,$2 155476c4f342Schristos xor $30,$15 # Sigma0(a) 155576c4f342Schristos xor $15,$1,$2 155676c4f342Schristos#endif 155776c4f342Schristos sw $9,4($29) # offload to ring buffer 155876c4f342Schristos addu $30,$14 155976c4f342Schristos and $15,$31 156076c4f342Schristos addu $13,$16 # +=K[17] 156176c4f342Schristos addu $30,$15 # +=Maj(a,b,c) 156276c4f342Schristos addu $3,$13 156376c4f342Schristos addu $30,$13 156476c4f342Schristos lw $12,16($29) # prefetch from ring buffer 156576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 156676c4f342Schristos srl $16,$11,3 # Xupdate(18) 156776c4f342Schristos rotr $14,$11,7 156876c4f342Schristos addu $10,$19 # +=X[i+9] 156976c4f342Schristos xor $16,$14 157076c4f342Schristos rotr $14,$11,18 157176c4f342Schristos 157276c4f342Schristos srl $17,$8,10 157376c4f342Schristos rotr $15,$8,17 157476c4f342Schristos xor $16,$14 # sigma0(X[i+1]) 157576c4f342Schristos rotr $14,$8,19 157676c4f342Schristos xor $17,$15 157776c4f342Schristos addu $10,$16 157876c4f342Schristos#else 157976c4f342Schristos srl $16,$11,3 # Xupdate(18) 158076c4f342Schristos addu $10,$19 # +=X[i+9] 158176c4f342Schristos sll $15,$11,14 158276c4f342Schristos srl $14,$11,7 158376c4f342Schristos xor $16,$15 158476c4f342Schristos sll $15,11 158576c4f342Schristos xor $16,$14 158676c4f342Schristos srl $14,$11,18 158776c4f342Schristos xor $16,$15 158876c4f342Schristos 158976c4f342Schristos srl $17,$8,10 159076c4f342Schristos xor $16,$14 # sigma0(X[i+1]) 159176c4f342Schristos sll $15,$8,13 159276c4f342Schristos addu $10,$16 159376c4f342Schristos srl $14,$8,17 159476c4f342Schristos xor $17,$15 159576c4f342Schristos sll $15,2 159676c4f342Schristos xor $17,$14 159776c4f342Schristos srl $14,$8,19 159876c4f342Schristos xor $17,$15 159976c4f342Schristos#endif 160076c4f342Schristos xor $17,$14 # sigma1(X[i+14]) 160176c4f342Schristos addu $10,$17 160276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 160376c4f342Schristos xor $17,$7,$24 # 18 160476c4f342Schristos rotr $15,$3,6 160576c4f342Schristos addu $14,$10,$25 160676c4f342Schristos rotr $16,$3,11 160776c4f342Schristos and $17,$3 160876c4f342Schristos rotr $25,$3,25 160976c4f342Schristos xor $15,$16 161076c4f342Schristos rotr $16,$30,2 161176c4f342Schristos xor $17,$24 # Ch(e,f,g) 161276c4f342Schristos xor $15,$25 # Sigma1(e) 161376c4f342Schristos 161476c4f342Schristos rotr $25,$30,13 161576c4f342Schristos addu $14,$17 161676c4f342Schristos lw $17,72($6) # K[18] 161776c4f342Schristos xor $25,$16 161876c4f342Schristos rotr $16,$30,22 161976c4f342Schristos addu $14,$15 162076c4f342Schristos and $15,$31,$1 162176c4f342Schristos xor $25,$16 # Sigma0(a) 162276c4f342Schristos xor $16,$31,$1 162376c4f342Schristos#else 162476c4f342Schristos addu $14,$10,$25 # 18 162576c4f342Schristos srl $25,$3,6 162676c4f342Schristos xor $17,$7,$24 162776c4f342Schristos sll $16,$3,7 162876c4f342Schristos and $17,$3 162976c4f342Schristos srl $15,$3,11 163076c4f342Schristos xor $25,$16 163176c4f342Schristos sll $16,$3,21 163276c4f342Schristos xor $25,$15 163376c4f342Schristos srl $15,$3,25 163476c4f342Schristos xor $25,$16 163576c4f342Schristos sll $16,$3,26 163676c4f342Schristos xor $25,$15 163776c4f342Schristos xor $17,$24 # Ch(e,f,g) 163876c4f342Schristos xor $15,$16,$25 # Sigma1(e) 163976c4f342Schristos 164076c4f342Schristos srl $25,$30,2 164176c4f342Schristos addu $14,$17 164276c4f342Schristos lw $17,72($6) # K[18] 164376c4f342Schristos sll $16,$30,10 164476c4f342Schristos addu $14,$15 164576c4f342Schristos srl $15,$30,13 164676c4f342Schristos xor $25,$16 164776c4f342Schristos sll $16,$30,19 164876c4f342Schristos xor $25,$15 164976c4f342Schristos srl $15,$30,22 165076c4f342Schristos xor $25,$16 165176c4f342Schristos sll $16,$30,30 165276c4f342Schristos xor $25,$15 165376c4f342Schristos and $15,$31,$1 165476c4f342Schristos xor $25,$16 # Sigma0(a) 165576c4f342Schristos xor $16,$31,$1 165676c4f342Schristos#endif 165776c4f342Schristos sw $10,8($29) # offload to ring buffer 165876c4f342Schristos addu $25,$15 165976c4f342Schristos and $16,$30 166076c4f342Schristos addu $14,$17 # +=K[18] 166176c4f342Schristos addu $25,$16 # +=Maj(a,b,c) 166276c4f342Schristos addu $2,$14 166376c4f342Schristos addu $25,$14 166476c4f342Schristos lw $13,20($29) # prefetch from ring buffer 166576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 166676c4f342Schristos srl $17,$12,3 # Xupdate(19) 166776c4f342Schristos rotr $15,$12,7 166876c4f342Schristos addu $11,$20 # +=X[i+9] 166976c4f342Schristos xor $17,$15 167076c4f342Schristos rotr $15,$12,18 167176c4f342Schristos 167276c4f342Schristos srl $18,$9,10 167376c4f342Schristos rotr $16,$9,17 167476c4f342Schristos xor $17,$15 # sigma0(X[i+1]) 167576c4f342Schristos rotr $15,$9,19 167676c4f342Schristos xor $18,$16 167776c4f342Schristos addu $11,$17 167876c4f342Schristos#else 167976c4f342Schristos srl $17,$12,3 # Xupdate(19) 168076c4f342Schristos addu $11,$20 # +=X[i+9] 168176c4f342Schristos sll $16,$12,14 168276c4f342Schristos srl $15,$12,7 168376c4f342Schristos xor $17,$16 168476c4f342Schristos sll $16,11 168576c4f342Schristos xor $17,$15 168676c4f342Schristos srl $15,$12,18 168776c4f342Schristos xor $17,$16 168876c4f342Schristos 168976c4f342Schristos srl $18,$9,10 169076c4f342Schristos xor $17,$15 # sigma0(X[i+1]) 169176c4f342Schristos sll $16,$9,13 169276c4f342Schristos addu $11,$17 169376c4f342Schristos srl $15,$9,17 169476c4f342Schristos xor $18,$16 169576c4f342Schristos sll $16,2 169676c4f342Schristos xor $18,$15 169776c4f342Schristos srl $15,$9,19 169876c4f342Schristos xor $18,$16 169976c4f342Schristos#endif 170076c4f342Schristos xor $18,$15 # sigma1(X[i+14]) 170176c4f342Schristos addu $11,$18 170276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 170376c4f342Schristos xor $18,$3,$7 # 19 170476c4f342Schristos rotr $16,$2,6 170576c4f342Schristos addu $15,$11,$24 170676c4f342Schristos rotr $17,$2,11 170776c4f342Schristos and $18,$2 170876c4f342Schristos rotr $24,$2,25 170976c4f342Schristos xor $16,$17 171076c4f342Schristos rotr $17,$25,2 171176c4f342Schristos xor $18,$7 # Ch(e,f,g) 171276c4f342Schristos xor $16,$24 # Sigma1(e) 171376c4f342Schristos 171476c4f342Schristos rotr $24,$25,13 171576c4f342Schristos addu $15,$18 171676c4f342Schristos lw $18,76($6) # K[19] 171776c4f342Schristos xor $24,$17 171876c4f342Schristos rotr $17,$25,22 171976c4f342Schristos addu $15,$16 172076c4f342Schristos and $16,$30,$31 172176c4f342Schristos xor $24,$17 # Sigma0(a) 172276c4f342Schristos xor $17,$30,$31 172376c4f342Schristos#else 172476c4f342Schristos addu $15,$11,$24 # 19 172576c4f342Schristos srl $24,$2,6 172676c4f342Schristos xor $18,$3,$7 172776c4f342Schristos sll $17,$2,7 172876c4f342Schristos and $18,$2 172976c4f342Schristos srl $16,$2,11 173076c4f342Schristos xor $24,$17 173176c4f342Schristos sll $17,$2,21 173276c4f342Schristos xor $24,$16 173376c4f342Schristos srl $16,$2,25 173476c4f342Schristos xor $24,$17 173576c4f342Schristos sll $17,$2,26 173676c4f342Schristos xor $24,$16 173776c4f342Schristos xor $18,$7 # Ch(e,f,g) 173876c4f342Schristos xor $16,$17,$24 # Sigma1(e) 173976c4f342Schristos 174076c4f342Schristos srl $24,$25,2 174176c4f342Schristos addu $15,$18 174276c4f342Schristos lw $18,76($6) # K[19] 174376c4f342Schristos sll $17,$25,10 174476c4f342Schristos addu $15,$16 174576c4f342Schristos srl $16,$25,13 174676c4f342Schristos xor $24,$17 174776c4f342Schristos sll $17,$25,19 174876c4f342Schristos xor $24,$16 174976c4f342Schristos srl $16,$25,22 175076c4f342Schristos xor $24,$17 175176c4f342Schristos sll $17,$25,30 175276c4f342Schristos xor $24,$16 175376c4f342Schristos and $16,$30,$31 175476c4f342Schristos xor $24,$17 # Sigma0(a) 175576c4f342Schristos xor $17,$30,$31 175676c4f342Schristos#endif 175776c4f342Schristos sw $11,12($29) # offload to ring buffer 175876c4f342Schristos addu $24,$16 175976c4f342Schristos and $17,$25 176076c4f342Schristos addu $15,$18 # +=K[19] 176176c4f342Schristos addu $24,$17 # +=Maj(a,b,c) 176276c4f342Schristos addu $1,$15 176376c4f342Schristos addu $24,$15 176476c4f342Schristos lw $14,24($29) # prefetch from ring buffer 176576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 176676c4f342Schristos srl $18,$13,3 # Xupdate(20) 176776c4f342Schristos rotr $16,$13,7 176876c4f342Schristos addu $12,$21 # +=X[i+9] 176976c4f342Schristos xor $18,$16 177076c4f342Schristos rotr $16,$13,18 177176c4f342Schristos 177276c4f342Schristos srl $19,$10,10 177376c4f342Schristos rotr $17,$10,17 177476c4f342Schristos xor $18,$16 # sigma0(X[i+1]) 177576c4f342Schristos rotr $16,$10,19 177676c4f342Schristos xor $19,$17 177776c4f342Schristos addu $12,$18 177876c4f342Schristos#else 177976c4f342Schristos srl $18,$13,3 # Xupdate(20) 178076c4f342Schristos addu $12,$21 # +=X[i+9] 178176c4f342Schristos sll $17,$13,14 178276c4f342Schristos srl $16,$13,7 178376c4f342Schristos xor $18,$17 178476c4f342Schristos sll $17,11 178576c4f342Schristos xor $18,$16 178676c4f342Schristos srl $16,$13,18 178776c4f342Schristos xor $18,$17 178876c4f342Schristos 178976c4f342Schristos srl $19,$10,10 179076c4f342Schristos xor $18,$16 # sigma0(X[i+1]) 179176c4f342Schristos sll $17,$10,13 179276c4f342Schristos addu $12,$18 179376c4f342Schristos srl $16,$10,17 179476c4f342Schristos xor $19,$17 179576c4f342Schristos sll $17,2 179676c4f342Schristos xor $19,$16 179776c4f342Schristos srl $16,$10,19 179876c4f342Schristos xor $19,$17 179976c4f342Schristos#endif 180076c4f342Schristos xor $19,$16 # sigma1(X[i+14]) 180176c4f342Schristos addu $12,$19 180276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 180376c4f342Schristos xor $19,$2,$3 # 20 180476c4f342Schristos rotr $17,$1,6 180576c4f342Schristos addu $16,$12,$7 180676c4f342Schristos rotr $18,$1,11 180776c4f342Schristos and $19,$1 180876c4f342Schristos rotr $7,$1,25 180976c4f342Schristos xor $17,$18 181076c4f342Schristos rotr $18,$24,2 181176c4f342Schristos xor $19,$3 # Ch(e,f,g) 181276c4f342Schristos xor $17,$7 # Sigma1(e) 181376c4f342Schristos 181476c4f342Schristos rotr $7,$24,13 181576c4f342Schristos addu $16,$19 181676c4f342Schristos lw $19,80($6) # K[20] 181776c4f342Schristos xor $7,$18 181876c4f342Schristos rotr $18,$24,22 181976c4f342Schristos addu $16,$17 182076c4f342Schristos and $17,$25,$30 182176c4f342Schristos xor $7,$18 # Sigma0(a) 182276c4f342Schristos xor $18,$25,$30 182376c4f342Schristos#else 182476c4f342Schristos addu $16,$12,$7 # 20 182576c4f342Schristos srl $7,$1,6 182676c4f342Schristos xor $19,$2,$3 182776c4f342Schristos sll $18,$1,7 182876c4f342Schristos and $19,$1 182976c4f342Schristos srl $17,$1,11 183076c4f342Schristos xor $7,$18 183176c4f342Schristos sll $18,$1,21 183276c4f342Schristos xor $7,$17 183376c4f342Schristos srl $17,$1,25 183476c4f342Schristos xor $7,$18 183576c4f342Schristos sll $18,$1,26 183676c4f342Schristos xor $7,$17 183776c4f342Schristos xor $19,$3 # Ch(e,f,g) 183876c4f342Schristos xor $17,$18,$7 # Sigma1(e) 183976c4f342Schristos 184076c4f342Schristos srl $7,$24,2 184176c4f342Schristos addu $16,$19 184276c4f342Schristos lw $19,80($6) # K[20] 184376c4f342Schristos sll $18,$24,10 184476c4f342Schristos addu $16,$17 184576c4f342Schristos srl $17,$24,13 184676c4f342Schristos xor $7,$18 184776c4f342Schristos sll $18,$24,19 184876c4f342Schristos xor $7,$17 184976c4f342Schristos srl $17,$24,22 185076c4f342Schristos xor $7,$18 185176c4f342Schristos sll $18,$24,30 185276c4f342Schristos xor $7,$17 185376c4f342Schristos and $17,$25,$30 185476c4f342Schristos xor $7,$18 # Sigma0(a) 185576c4f342Schristos xor $18,$25,$30 185676c4f342Schristos#endif 185776c4f342Schristos sw $12,16($29) # offload to ring buffer 185876c4f342Schristos addu $7,$17 185976c4f342Schristos and $18,$24 186076c4f342Schristos addu $16,$19 # +=K[20] 186176c4f342Schristos addu $7,$18 # +=Maj(a,b,c) 186276c4f342Schristos addu $31,$16 186376c4f342Schristos addu $7,$16 186476c4f342Schristos lw $15,28($29) # prefetch from ring buffer 186576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 186676c4f342Schristos srl $19,$14,3 # Xupdate(21) 186776c4f342Schristos rotr $17,$14,7 186876c4f342Schristos addu $13,$22 # +=X[i+9] 186976c4f342Schristos xor $19,$17 187076c4f342Schristos rotr $17,$14,18 187176c4f342Schristos 187276c4f342Schristos srl $20,$11,10 187376c4f342Schristos rotr $18,$11,17 187476c4f342Schristos xor $19,$17 # sigma0(X[i+1]) 187576c4f342Schristos rotr $17,$11,19 187676c4f342Schristos xor $20,$18 187776c4f342Schristos addu $13,$19 187876c4f342Schristos#else 187976c4f342Schristos srl $19,$14,3 # Xupdate(21) 188076c4f342Schristos addu $13,$22 # +=X[i+9] 188176c4f342Schristos sll $18,$14,14 188276c4f342Schristos srl $17,$14,7 188376c4f342Schristos xor $19,$18 188476c4f342Schristos sll $18,11 188576c4f342Schristos xor $19,$17 188676c4f342Schristos srl $17,$14,18 188776c4f342Schristos xor $19,$18 188876c4f342Schristos 188976c4f342Schristos srl $20,$11,10 189076c4f342Schristos xor $19,$17 # sigma0(X[i+1]) 189176c4f342Schristos sll $18,$11,13 189276c4f342Schristos addu $13,$19 189376c4f342Schristos srl $17,$11,17 189476c4f342Schristos xor $20,$18 189576c4f342Schristos sll $18,2 189676c4f342Schristos xor $20,$17 189776c4f342Schristos srl $17,$11,19 189876c4f342Schristos xor $20,$18 189976c4f342Schristos#endif 190076c4f342Schristos xor $20,$17 # sigma1(X[i+14]) 190176c4f342Schristos addu $13,$20 190276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 190376c4f342Schristos xor $20,$1,$2 # 21 190476c4f342Schristos rotr $18,$31,6 190576c4f342Schristos addu $17,$13,$3 190676c4f342Schristos rotr $19,$31,11 190776c4f342Schristos and $20,$31 190876c4f342Schristos rotr $3,$31,25 190976c4f342Schristos xor $18,$19 191076c4f342Schristos rotr $19,$7,2 191176c4f342Schristos xor $20,$2 # Ch(e,f,g) 191276c4f342Schristos xor $18,$3 # Sigma1(e) 191376c4f342Schristos 191476c4f342Schristos rotr $3,$7,13 191576c4f342Schristos addu $17,$20 191676c4f342Schristos lw $20,84($6) # K[21] 191776c4f342Schristos xor $3,$19 191876c4f342Schristos rotr $19,$7,22 191976c4f342Schristos addu $17,$18 192076c4f342Schristos and $18,$24,$25 192176c4f342Schristos xor $3,$19 # Sigma0(a) 192276c4f342Schristos xor $19,$24,$25 192376c4f342Schristos#else 192476c4f342Schristos addu $17,$13,$3 # 21 192576c4f342Schristos srl $3,$31,6 192676c4f342Schristos xor $20,$1,$2 192776c4f342Schristos sll $19,$31,7 192876c4f342Schristos and $20,$31 192976c4f342Schristos srl $18,$31,11 193076c4f342Schristos xor $3,$19 193176c4f342Schristos sll $19,$31,21 193276c4f342Schristos xor $3,$18 193376c4f342Schristos srl $18,$31,25 193476c4f342Schristos xor $3,$19 193576c4f342Schristos sll $19,$31,26 193676c4f342Schristos xor $3,$18 193776c4f342Schristos xor $20,$2 # Ch(e,f,g) 193876c4f342Schristos xor $18,$19,$3 # Sigma1(e) 193976c4f342Schristos 194076c4f342Schristos srl $3,$7,2 194176c4f342Schristos addu $17,$20 194276c4f342Schristos lw $20,84($6) # K[21] 194376c4f342Schristos sll $19,$7,10 194476c4f342Schristos addu $17,$18 194576c4f342Schristos srl $18,$7,13 194676c4f342Schristos xor $3,$19 194776c4f342Schristos sll $19,$7,19 194876c4f342Schristos xor $3,$18 194976c4f342Schristos srl $18,$7,22 195076c4f342Schristos xor $3,$19 195176c4f342Schristos sll $19,$7,30 195276c4f342Schristos xor $3,$18 195376c4f342Schristos and $18,$24,$25 195476c4f342Schristos xor $3,$19 # Sigma0(a) 195576c4f342Schristos xor $19,$24,$25 195676c4f342Schristos#endif 195776c4f342Schristos sw $13,20($29) # offload to ring buffer 195876c4f342Schristos addu $3,$18 195976c4f342Schristos and $19,$7 196076c4f342Schristos addu $17,$20 # +=K[21] 196176c4f342Schristos addu $3,$19 # +=Maj(a,b,c) 196276c4f342Schristos addu $30,$17 196376c4f342Schristos addu $3,$17 196476c4f342Schristos lw $16,32($29) # prefetch from ring buffer 196576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 196676c4f342Schristos srl $20,$15,3 # Xupdate(22) 196776c4f342Schristos rotr $18,$15,7 196876c4f342Schristos addu $14,$23 # +=X[i+9] 196976c4f342Schristos xor $20,$18 197076c4f342Schristos rotr $18,$15,18 197176c4f342Schristos 197276c4f342Schristos srl $21,$12,10 197376c4f342Schristos rotr $19,$12,17 197476c4f342Schristos xor $20,$18 # sigma0(X[i+1]) 197576c4f342Schristos rotr $18,$12,19 197676c4f342Schristos xor $21,$19 197776c4f342Schristos addu $14,$20 197876c4f342Schristos#else 197976c4f342Schristos srl $20,$15,3 # Xupdate(22) 198076c4f342Schristos addu $14,$23 # +=X[i+9] 198176c4f342Schristos sll $19,$15,14 198276c4f342Schristos srl $18,$15,7 198376c4f342Schristos xor $20,$19 198476c4f342Schristos sll $19,11 198576c4f342Schristos xor $20,$18 198676c4f342Schristos srl $18,$15,18 198776c4f342Schristos xor $20,$19 198876c4f342Schristos 198976c4f342Schristos srl $21,$12,10 199076c4f342Schristos xor $20,$18 # sigma0(X[i+1]) 199176c4f342Schristos sll $19,$12,13 199276c4f342Schristos addu $14,$20 199376c4f342Schristos srl $18,$12,17 199476c4f342Schristos xor $21,$19 199576c4f342Schristos sll $19,2 199676c4f342Schristos xor $21,$18 199776c4f342Schristos srl $18,$12,19 199876c4f342Schristos xor $21,$19 199976c4f342Schristos#endif 200076c4f342Schristos xor $21,$18 # sigma1(X[i+14]) 200176c4f342Schristos addu $14,$21 200276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 200376c4f342Schristos xor $21,$31,$1 # 22 200476c4f342Schristos rotr $19,$30,6 200576c4f342Schristos addu $18,$14,$2 200676c4f342Schristos rotr $20,$30,11 200776c4f342Schristos and $21,$30 200876c4f342Schristos rotr $2,$30,25 200976c4f342Schristos xor $19,$20 201076c4f342Schristos rotr $20,$3,2 201176c4f342Schristos xor $21,$1 # Ch(e,f,g) 201276c4f342Schristos xor $19,$2 # Sigma1(e) 201376c4f342Schristos 201476c4f342Schristos rotr $2,$3,13 201576c4f342Schristos addu $18,$21 201676c4f342Schristos lw $21,88($6) # K[22] 201776c4f342Schristos xor $2,$20 201876c4f342Schristos rotr $20,$3,22 201976c4f342Schristos addu $18,$19 202076c4f342Schristos and $19,$7,$24 202176c4f342Schristos xor $2,$20 # Sigma0(a) 202276c4f342Schristos xor $20,$7,$24 202376c4f342Schristos#else 202476c4f342Schristos addu $18,$14,$2 # 22 202576c4f342Schristos srl $2,$30,6 202676c4f342Schristos xor $21,$31,$1 202776c4f342Schristos sll $20,$30,7 202876c4f342Schristos and $21,$30 202976c4f342Schristos srl $19,$30,11 203076c4f342Schristos xor $2,$20 203176c4f342Schristos sll $20,$30,21 203276c4f342Schristos xor $2,$19 203376c4f342Schristos srl $19,$30,25 203476c4f342Schristos xor $2,$20 203576c4f342Schristos sll $20,$30,26 203676c4f342Schristos xor $2,$19 203776c4f342Schristos xor $21,$1 # Ch(e,f,g) 203876c4f342Schristos xor $19,$20,$2 # Sigma1(e) 203976c4f342Schristos 204076c4f342Schristos srl $2,$3,2 204176c4f342Schristos addu $18,$21 204276c4f342Schristos lw $21,88($6) # K[22] 204376c4f342Schristos sll $20,$3,10 204476c4f342Schristos addu $18,$19 204576c4f342Schristos srl $19,$3,13 204676c4f342Schristos xor $2,$20 204776c4f342Schristos sll $20,$3,19 204876c4f342Schristos xor $2,$19 204976c4f342Schristos srl $19,$3,22 205076c4f342Schristos xor $2,$20 205176c4f342Schristos sll $20,$3,30 205276c4f342Schristos xor $2,$19 205376c4f342Schristos and $19,$7,$24 205476c4f342Schristos xor $2,$20 # Sigma0(a) 205576c4f342Schristos xor $20,$7,$24 205676c4f342Schristos#endif 205776c4f342Schristos sw $14,24($29) # offload to ring buffer 205876c4f342Schristos addu $2,$19 205976c4f342Schristos and $20,$3 206076c4f342Schristos addu $18,$21 # +=K[22] 206176c4f342Schristos addu $2,$20 # +=Maj(a,b,c) 206276c4f342Schristos addu $25,$18 206376c4f342Schristos addu $2,$18 206476c4f342Schristos lw $17,36($29) # prefetch from ring buffer 206576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 206676c4f342Schristos srl $21,$16,3 # Xupdate(23) 206776c4f342Schristos rotr $19,$16,7 206876c4f342Schristos addu $15,$8 # +=X[i+9] 206976c4f342Schristos xor $21,$19 207076c4f342Schristos rotr $19,$16,18 207176c4f342Schristos 207276c4f342Schristos srl $22,$13,10 207376c4f342Schristos rotr $20,$13,17 207476c4f342Schristos xor $21,$19 # sigma0(X[i+1]) 207576c4f342Schristos rotr $19,$13,19 207676c4f342Schristos xor $22,$20 207776c4f342Schristos addu $15,$21 207876c4f342Schristos#else 207976c4f342Schristos srl $21,$16,3 # Xupdate(23) 208076c4f342Schristos addu $15,$8 # +=X[i+9] 208176c4f342Schristos sll $20,$16,14 208276c4f342Schristos srl $19,$16,7 208376c4f342Schristos xor $21,$20 208476c4f342Schristos sll $20,11 208576c4f342Schristos xor $21,$19 208676c4f342Schristos srl $19,$16,18 208776c4f342Schristos xor $21,$20 208876c4f342Schristos 208976c4f342Schristos srl $22,$13,10 209076c4f342Schristos xor $21,$19 # sigma0(X[i+1]) 209176c4f342Schristos sll $20,$13,13 209276c4f342Schristos addu $15,$21 209376c4f342Schristos srl $19,$13,17 209476c4f342Schristos xor $22,$20 209576c4f342Schristos sll $20,2 209676c4f342Schristos xor $22,$19 209776c4f342Schristos srl $19,$13,19 209876c4f342Schristos xor $22,$20 209976c4f342Schristos#endif 210076c4f342Schristos xor $22,$19 # sigma1(X[i+14]) 210176c4f342Schristos addu $15,$22 210276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 210376c4f342Schristos xor $22,$30,$31 # 23 210476c4f342Schristos rotr $20,$25,6 210576c4f342Schristos addu $19,$15,$1 210676c4f342Schristos rotr $21,$25,11 210776c4f342Schristos and $22,$25 210876c4f342Schristos rotr $1,$25,25 210976c4f342Schristos xor $20,$21 211076c4f342Schristos rotr $21,$2,2 211176c4f342Schristos xor $22,$31 # Ch(e,f,g) 211276c4f342Schristos xor $20,$1 # Sigma1(e) 211376c4f342Schristos 211476c4f342Schristos rotr $1,$2,13 211576c4f342Schristos addu $19,$22 211676c4f342Schristos lw $22,92($6) # K[23] 211776c4f342Schristos xor $1,$21 211876c4f342Schristos rotr $21,$2,22 211976c4f342Schristos addu $19,$20 212076c4f342Schristos and $20,$3,$7 212176c4f342Schristos xor $1,$21 # Sigma0(a) 212276c4f342Schristos xor $21,$3,$7 212376c4f342Schristos#else 212476c4f342Schristos addu $19,$15,$1 # 23 212576c4f342Schristos srl $1,$25,6 212676c4f342Schristos xor $22,$30,$31 212776c4f342Schristos sll $21,$25,7 212876c4f342Schristos and $22,$25 212976c4f342Schristos srl $20,$25,11 213076c4f342Schristos xor $1,$21 213176c4f342Schristos sll $21,$25,21 213276c4f342Schristos xor $1,$20 213376c4f342Schristos srl $20,$25,25 213476c4f342Schristos xor $1,$21 213576c4f342Schristos sll $21,$25,26 213676c4f342Schristos xor $1,$20 213776c4f342Schristos xor $22,$31 # Ch(e,f,g) 213876c4f342Schristos xor $20,$21,$1 # Sigma1(e) 213976c4f342Schristos 214076c4f342Schristos srl $1,$2,2 214176c4f342Schristos addu $19,$22 214276c4f342Schristos lw $22,92($6) # K[23] 214376c4f342Schristos sll $21,$2,10 214476c4f342Schristos addu $19,$20 214576c4f342Schristos srl $20,$2,13 214676c4f342Schristos xor $1,$21 214776c4f342Schristos sll $21,$2,19 214876c4f342Schristos xor $1,$20 214976c4f342Schristos srl $20,$2,22 215076c4f342Schristos xor $1,$21 215176c4f342Schristos sll $21,$2,30 215276c4f342Schristos xor $1,$20 215376c4f342Schristos and $20,$3,$7 215476c4f342Schristos xor $1,$21 # Sigma0(a) 215576c4f342Schristos xor $21,$3,$7 215676c4f342Schristos#endif 215776c4f342Schristos sw $15,28($29) # offload to ring buffer 215876c4f342Schristos addu $1,$20 215976c4f342Schristos and $21,$2 216076c4f342Schristos addu $19,$22 # +=K[23] 216176c4f342Schristos addu $1,$21 # +=Maj(a,b,c) 216276c4f342Schristos addu $24,$19 216376c4f342Schristos addu $1,$19 216476c4f342Schristos lw $18,40($29) # prefetch from ring buffer 216576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 216676c4f342Schristos srl $22,$17,3 # Xupdate(24) 216776c4f342Schristos rotr $20,$17,7 216876c4f342Schristos addu $16,$9 # +=X[i+9] 216976c4f342Schristos xor $22,$20 217076c4f342Schristos rotr $20,$17,18 217176c4f342Schristos 217276c4f342Schristos srl $23,$14,10 217376c4f342Schristos rotr $21,$14,17 217476c4f342Schristos xor $22,$20 # sigma0(X[i+1]) 217576c4f342Schristos rotr $20,$14,19 217676c4f342Schristos xor $23,$21 217776c4f342Schristos addu $16,$22 217876c4f342Schristos#else 217976c4f342Schristos srl $22,$17,3 # Xupdate(24) 218076c4f342Schristos addu $16,$9 # +=X[i+9] 218176c4f342Schristos sll $21,$17,14 218276c4f342Schristos srl $20,$17,7 218376c4f342Schristos xor $22,$21 218476c4f342Schristos sll $21,11 218576c4f342Schristos xor $22,$20 218676c4f342Schristos srl $20,$17,18 218776c4f342Schristos xor $22,$21 218876c4f342Schristos 218976c4f342Schristos srl $23,$14,10 219076c4f342Schristos xor $22,$20 # sigma0(X[i+1]) 219176c4f342Schristos sll $21,$14,13 219276c4f342Schristos addu $16,$22 219376c4f342Schristos srl $20,$14,17 219476c4f342Schristos xor $23,$21 219576c4f342Schristos sll $21,2 219676c4f342Schristos xor $23,$20 219776c4f342Schristos srl $20,$14,19 219876c4f342Schristos xor $23,$21 219976c4f342Schristos#endif 220076c4f342Schristos xor $23,$20 # sigma1(X[i+14]) 220176c4f342Schristos addu $16,$23 220276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 220376c4f342Schristos xor $23,$25,$30 # 24 220476c4f342Schristos rotr $21,$24,6 220576c4f342Schristos addu $20,$16,$31 220676c4f342Schristos rotr $22,$24,11 220776c4f342Schristos and $23,$24 220876c4f342Schristos rotr $31,$24,25 220976c4f342Schristos xor $21,$22 221076c4f342Schristos rotr $22,$1,2 221176c4f342Schristos xor $23,$30 # Ch(e,f,g) 221276c4f342Schristos xor $21,$31 # Sigma1(e) 221376c4f342Schristos 221476c4f342Schristos rotr $31,$1,13 221576c4f342Schristos addu $20,$23 221676c4f342Schristos lw $23,96($6) # K[24] 221776c4f342Schristos xor $31,$22 221876c4f342Schristos rotr $22,$1,22 221976c4f342Schristos addu $20,$21 222076c4f342Schristos and $21,$2,$3 222176c4f342Schristos xor $31,$22 # Sigma0(a) 222276c4f342Schristos xor $22,$2,$3 222376c4f342Schristos#else 222476c4f342Schristos addu $20,$16,$31 # 24 222576c4f342Schristos srl $31,$24,6 222676c4f342Schristos xor $23,$25,$30 222776c4f342Schristos sll $22,$24,7 222876c4f342Schristos and $23,$24 222976c4f342Schristos srl $21,$24,11 223076c4f342Schristos xor $31,$22 223176c4f342Schristos sll $22,$24,21 223276c4f342Schristos xor $31,$21 223376c4f342Schristos srl $21,$24,25 223476c4f342Schristos xor $31,$22 223576c4f342Schristos sll $22,$24,26 223676c4f342Schristos xor $31,$21 223776c4f342Schristos xor $23,$30 # Ch(e,f,g) 223876c4f342Schristos xor $21,$22,$31 # Sigma1(e) 223976c4f342Schristos 224076c4f342Schristos srl $31,$1,2 224176c4f342Schristos addu $20,$23 224276c4f342Schristos lw $23,96($6) # K[24] 224376c4f342Schristos sll $22,$1,10 224476c4f342Schristos addu $20,$21 224576c4f342Schristos srl $21,$1,13 224676c4f342Schristos xor $31,$22 224776c4f342Schristos sll $22,$1,19 224876c4f342Schristos xor $31,$21 224976c4f342Schristos srl $21,$1,22 225076c4f342Schristos xor $31,$22 225176c4f342Schristos sll $22,$1,30 225276c4f342Schristos xor $31,$21 225376c4f342Schristos and $21,$2,$3 225476c4f342Schristos xor $31,$22 # Sigma0(a) 225576c4f342Schristos xor $22,$2,$3 225676c4f342Schristos#endif 225776c4f342Schristos sw $16,32($29) # offload to ring buffer 225876c4f342Schristos addu $31,$21 225976c4f342Schristos and $22,$1 226076c4f342Schristos addu $20,$23 # +=K[24] 226176c4f342Schristos addu $31,$22 # +=Maj(a,b,c) 226276c4f342Schristos addu $7,$20 226376c4f342Schristos addu $31,$20 226476c4f342Schristos lw $19,44($29) # prefetch from ring buffer 226576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 226676c4f342Schristos srl $23,$18,3 # Xupdate(25) 226776c4f342Schristos rotr $21,$18,7 226876c4f342Schristos addu $17,$10 # +=X[i+9] 226976c4f342Schristos xor $23,$21 227076c4f342Schristos rotr $21,$18,18 227176c4f342Schristos 227276c4f342Schristos srl $8,$15,10 227376c4f342Schristos rotr $22,$15,17 227476c4f342Schristos xor $23,$21 # sigma0(X[i+1]) 227576c4f342Schristos rotr $21,$15,19 227676c4f342Schristos xor $8,$22 227776c4f342Schristos addu $17,$23 227876c4f342Schristos#else 227976c4f342Schristos srl $23,$18,3 # Xupdate(25) 228076c4f342Schristos addu $17,$10 # +=X[i+9] 228176c4f342Schristos sll $22,$18,14 228276c4f342Schristos srl $21,$18,7 228376c4f342Schristos xor $23,$22 228476c4f342Schristos sll $22,11 228576c4f342Schristos xor $23,$21 228676c4f342Schristos srl $21,$18,18 228776c4f342Schristos xor $23,$22 228876c4f342Schristos 228976c4f342Schristos srl $8,$15,10 229076c4f342Schristos xor $23,$21 # sigma0(X[i+1]) 229176c4f342Schristos sll $22,$15,13 229276c4f342Schristos addu $17,$23 229376c4f342Schristos srl $21,$15,17 229476c4f342Schristos xor $8,$22 229576c4f342Schristos sll $22,2 229676c4f342Schristos xor $8,$21 229776c4f342Schristos srl $21,$15,19 229876c4f342Schristos xor $8,$22 229976c4f342Schristos#endif 230076c4f342Schristos xor $8,$21 # sigma1(X[i+14]) 230176c4f342Schristos addu $17,$8 230276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 230376c4f342Schristos xor $8,$24,$25 # 25 230476c4f342Schristos rotr $22,$7,6 230576c4f342Schristos addu $21,$17,$30 230676c4f342Schristos rotr $23,$7,11 230776c4f342Schristos and $8,$7 230876c4f342Schristos rotr $30,$7,25 230976c4f342Schristos xor $22,$23 231076c4f342Schristos rotr $23,$31,2 231176c4f342Schristos xor $8,$25 # Ch(e,f,g) 231276c4f342Schristos xor $22,$30 # Sigma1(e) 231376c4f342Schristos 231476c4f342Schristos rotr $30,$31,13 231576c4f342Schristos addu $21,$8 231676c4f342Schristos lw $8,100($6) # K[25] 231776c4f342Schristos xor $30,$23 231876c4f342Schristos rotr $23,$31,22 231976c4f342Schristos addu $21,$22 232076c4f342Schristos and $22,$1,$2 232176c4f342Schristos xor $30,$23 # Sigma0(a) 232276c4f342Schristos xor $23,$1,$2 232376c4f342Schristos#else 232476c4f342Schristos addu $21,$17,$30 # 25 232576c4f342Schristos srl $30,$7,6 232676c4f342Schristos xor $8,$24,$25 232776c4f342Schristos sll $23,$7,7 232876c4f342Schristos and $8,$7 232976c4f342Schristos srl $22,$7,11 233076c4f342Schristos xor $30,$23 233176c4f342Schristos sll $23,$7,21 233276c4f342Schristos xor $30,$22 233376c4f342Schristos srl $22,$7,25 233476c4f342Schristos xor $30,$23 233576c4f342Schristos sll $23,$7,26 233676c4f342Schristos xor $30,$22 233776c4f342Schristos xor $8,$25 # Ch(e,f,g) 233876c4f342Schristos xor $22,$23,$30 # Sigma1(e) 233976c4f342Schristos 234076c4f342Schristos srl $30,$31,2 234176c4f342Schristos addu $21,$8 234276c4f342Schristos lw $8,100($6) # K[25] 234376c4f342Schristos sll $23,$31,10 234476c4f342Schristos addu $21,$22 234576c4f342Schristos srl $22,$31,13 234676c4f342Schristos xor $30,$23 234776c4f342Schristos sll $23,$31,19 234876c4f342Schristos xor $30,$22 234976c4f342Schristos srl $22,$31,22 235076c4f342Schristos xor $30,$23 235176c4f342Schristos sll $23,$31,30 235276c4f342Schristos xor $30,$22 235376c4f342Schristos and $22,$1,$2 235476c4f342Schristos xor $30,$23 # Sigma0(a) 235576c4f342Schristos xor $23,$1,$2 235676c4f342Schristos#endif 235776c4f342Schristos sw $17,36($29) # offload to ring buffer 235876c4f342Schristos addu $30,$22 235976c4f342Schristos and $23,$31 236076c4f342Schristos addu $21,$8 # +=K[25] 236176c4f342Schristos addu $30,$23 # +=Maj(a,b,c) 236276c4f342Schristos addu $3,$21 236376c4f342Schristos addu $30,$21 236476c4f342Schristos lw $20,48($29) # prefetch from ring buffer 236576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 236676c4f342Schristos srl $8,$19,3 # Xupdate(26) 236776c4f342Schristos rotr $22,$19,7 236876c4f342Schristos addu $18,$11 # +=X[i+9] 236976c4f342Schristos xor $8,$22 237076c4f342Schristos rotr $22,$19,18 237176c4f342Schristos 237276c4f342Schristos srl $9,$16,10 237376c4f342Schristos rotr $23,$16,17 237476c4f342Schristos xor $8,$22 # sigma0(X[i+1]) 237576c4f342Schristos rotr $22,$16,19 237676c4f342Schristos xor $9,$23 237776c4f342Schristos addu $18,$8 237876c4f342Schristos#else 237976c4f342Schristos srl $8,$19,3 # Xupdate(26) 238076c4f342Schristos addu $18,$11 # +=X[i+9] 238176c4f342Schristos sll $23,$19,14 238276c4f342Schristos srl $22,$19,7 238376c4f342Schristos xor $8,$23 238476c4f342Schristos sll $23,11 238576c4f342Schristos xor $8,$22 238676c4f342Schristos srl $22,$19,18 238776c4f342Schristos xor $8,$23 238876c4f342Schristos 238976c4f342Schristos srl $9,$16,10 239076c4f342Schristos xor $8,$22 # sigma0(X[i+1]) 239176c4f342Schristos sll $23,$16,13 239276c4f342Schristos addu $18,$8 239376c4f342Schristos srl $22,$16,17 239476c4f342Schristos xor $9,$23 239576c4f342Schristos sll $23,2 239676c4f342Schristos xor $9,$22 239776c4f342Schristos srl $22,$16,19 239876c4f342Schristos xor $9,$23 239976c4f342Schristos#endif 240076c4f342Schristos xor $9,$22 # sigma1(X[i+14]) 240176c4f342Schristos addu $18,$9 240276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 240376c4f342Schristos xor $9,$7,$24 # 26 240476c4f342Schristos rotr $23,$3,6 240576c4f342Schristos addu $22,$18,$25 240676c4f342Schristos rotr $8,$3,11 240776c4f342Schristos and $9,$3 240876c4f342Schristos rotr $25,$3,25 240976c4f342Schristos xor $23,$8 241076c4f342Schristos rotr $8,$30,2 241176c4f342Schristos xor $9,$24 # Ch(e,f,g) 241276c4f342Schristos xor $23,$25 # Sigma1(e) 241376c4f342Schristos 241476c4f342Schristos rotr $25,$30,13 241576c4f342Schristos addu $22,$9 241676c4f342Schristos lw $9,104($6) # K[26] 241776c4f342Schristos xor $25,$8 241876c4f342Schristos rotr $8,$30,22 241976c4f342Schristos addu $22,$23 242076c4f342Schristos and $23,$31,$1 242176c4f342Schristos xor $25,$8 # Sigma0(a) 242276c4f342Schristos xor $8,$31,$1 242376c4f342Schristos#else 242476c4f342Schristos addu $22,$18,$25 # 26 242576c4f342Schristos srl $25,$3,6 242676c4f342Schristos xor $9,$7,$24 242776c4f342Schristos sll $8,$3,7 242876c4f342Schristos and $9,$3 242976c4f342Schristos srl $23,$3,11 243076c4f342Schristos xor $25,$8 243176c4f342Schristos sll $8,$3,21 243276c4f342Schristos xor $25,$23 243376c4f342Schristos srl $23,$3,25 243476c4f342Schristos xor $25,$8 243576c4f342Schristos sll $8,$3,26 243676c4f342Schristos xor $25,$23 243776c4f342Schristos xor $9,$24 # Ch(e,f,g) 243876c4f342Schristos xor $23,$8,$25 # Sigma1(e) 243976c4f342Schristos 244076c4f342Schristos srl $25,$30,2 244176c4f342Schristos addu $22,$9 244276c4f342Schristos lw $9,104($6) # K[26] 244376c4f342Schristos sll $8,$30,10 244476c4f342Schristos addu $22,$23 244576c4f342Schristos srl $23,$30,13 244676c4f342Schristos xor $25,$8 244776c4f342Schristos sll $8,$30,19 244876c4f342Schristos xor $25,$23 244976c4f342Schristos srl $23,$30,22 245076c4f342Schristos xor $25,$8 245176c4f342Schristos sll $8,$30,30 245276c4f342Schristos xor $25,$23 245376c4f342Schristos and $23,$31,$1 245476c4f342Schristos xor $25,$8 # Sigma0(a) 245576c4f342Schristos xor $8,$31,$1 245676c4f342Schristos#endif 245776c4f342Schristos sw $18,40($29) # offload to ring buffer 245876c4f342Schristos addu $25,$23 245976c4f342Schristos and $8,$30 246076c4f342Schristos addu $22,$9 # +=K[26] 246176c4f342Schristos addu $25,$8 # +=Maj(a,b,c) 246276c4f342Schristos addu $2,$22 246376c4f342Schristos addu $25,$22 246476c4f342Schristos lw $21,52($29) # prefetch from ring buffer 246576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 246676c4f342Schristos srl $9,$20,3 # Xupdate(27) 246776c4f342Schristos rotr $23,$20,7 246876c4f342Schristos addu $19,$12 # +=X[i+9] 246976c4f342Schristos xor $9,$23 247076c4f342Schristos rotr $23,$20,18 247176c4f342Schristos 247276c4f342Schristos srl $10,$17,10 247376c4f342Schristos rotr $8,$17,17 247476c4f342Schristos xor $9,$23 # sigma0(X[i+1]) 247576c4f342Schristos rotr $23,$17,19 247676c4f342Schristos xor $10,$8 247776c4f342Schristos addu $19,$9 247876c4f342Schristos#else 247976c4f342Schristos srl $9,$20,3 # Xupdate(27) 248076c4f342Schristos addu $19,$12 # +=X[i+9] 248176c4f342Schristos sll $8,$20,14 248276c4f342Schristos srl $23,$20,7 248376c4f342Schristos xor $9,$8 248476c4f342Schristos sll $8,11 248576c4f342Schristos xor $9,$23 248676c4f342Schristos srl $23,$20,18 248776c4f342Schristos xor $9,$8 248876c4f342Schristos 248976c4f342Schristos srl $10,$17,10 249076c4f342Schristos xor $9,$23 # sigma0(X[i+1]) 249176c4f342Schristos sll $8,$17,13 249276c4f342Schristos addu $19,$9 249376c4f342Schristos srl $23,$17,17 249476c4f342Schristos xor $10,$8 249576c4f342Schristos sll $8,2 249676c4f342Schristos xor $10,$23 249776c4f342Schristos srl $23,$17,19 249876c4f342Schristos xor $10,$8 249976c4f342Schristos#endif 250076c4f342Schristos xor $10,$23 # sigma1(X[i+14]) 250176c4f342Schristos addu $19,$10 250276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 250376c4f342Schristos xor $10,$3,$7 # 27 250476c4f342Schristos rotr $8,$2,6 250576c4f342Schristos addu $23,$19,$24 250676c4f342Schristos rotr $9,$2,11 250776c4f342Schristos and $10,$2 250876c4f342Schristos rotr $24,$2,25 250976c4f342Schristos xor $8,$9 251076c4f342Schristos rotr $9,$25,2 251176c4f342Schristos xor $10,$7 # Ch(e,f,g) 251276c4f342Schristos xor $8,$24 # Sigma1(e) 251376c4f342Schristos 251476c4f342Schristos rotr $24,$25,13 251576c4f342Schristos addu $23,$10 251676c4f342Schristos lw $10,108($6) # K[27] 251776c4f342Schristos xor $24,$9 251876c4f342Schristos rotr $9,$25,22 251976c4f342Schristos addu $23,$8 252076c4f342Schristos and $8,$30,$31 252176c4f342Schristos xor $24,$9 # Sigma0(a) 252276c4f342Schristos xor $9,$30,$31 252376c4f342Schristos#else 252476c4f342Schristos addu $23,$19,$24 # 27 252576c4f342Schristos srl $24,$2,6 252676c4f342Schristos xor $10,$3,$7 252776c4f342Schristos sll $9,$2,7 252876c4f342Schristos and $10,$2 252976c4f342Schristos srl $8,$2,11 253076c4f342Schristos xor $24,$9 253176c4f342Schristos sll $9,$2,21 253276c4f342Schristos xor $24,$8 253376c4f342Schristos srl $8,$2,25 253476c4f342Schristos xor $24,$9 253576c4f342Schristos sll $9,$2,26 253676c4f342Schristos xor $24,$8 253776c4f342Schristos xor $10,$7 # Ch(e,f,g) 253876c4f342Schristos xor $8,$9,$24 # Sigma1(e) 253976c4f342Schristos 254076c4f342Schristos srl $24,$25,2 254176c4f342Schristos addu $23,$10 254276c4f342Schristos lw $10,108($6) # K[27] 254376c4f342Schristos sll $9,$25,10 254476c4f342Schristos addu $23,$8 254576c4f342Schristos srl $8,$25,13 254676c4f342Schristos xor $24,$9 254776c4f342Schristos sll $9,$25,19 254876c4f342Schristos xor $24,$8 254976c4f342Schristos srl $8,$25,22 255076c4f342Schristos xor $24,$9 255176c4f342Schristos sll $9,$25,30 255276c4f342Schristos xor $24,$8 255376c4f342Schristos and $8,$30,$31 255476c4f342Schristos xor $24,$9 # Sigma0(a) 255576c4f342Schristos xor $9,$30,$31 255676c4f342Schristos#endif 255776c4f342Schristos sw $19,44($29) # offload to ring buffer 255876c4f342Schristos addu $24,$8 255976c4f342Schristos and $9,$25 256076c4f342Schristos addu $23,$10 # +=K[27] 256176c4f342Schristos addu $24,$9 # +=Maj(a,b,c) 256276c4f342Schristos addu $1,$23 256376c4f342Schristos addu $24,$23 256476c4f342Schristos lw $22,56($29) # prefetch from ring buffer 256576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 256676c4f342Schristos srl $10,$21,3 # Xupdate(28) 256776c4f342Schristos rotr $8,$21,7 256876c4f342Schristos addu $20,$13 # +=X[i+9] 256976c4f342Schristos xor $10,$8 257076c4f342Schristos rotr $8,$21,18 257176c4f342Schristos 257276c4f342Schristos srl $11,$18,10 257376c4f342Schristos rotr $9,$18,17 257476c4f342Schristos xor $10,$8 # sigma0(X[i+1]) 257576c4f342Schristos rotr $8,$18,19 257676c4f342Schristos xor $11,$9 257776c4f342Schristos addu $20,$10 257876c4f342Schristos#else 257976c4f342Schristos srl $10,$21,3 # Xupdate(28) 258076c4f342Schristos addu $20,$13 # +=X[i+9] 258176c4f342Schristos sll $9,$21,14 258276c4f342Schristos srl $8,$21,7 258376c4f342Schristos xor $10,$9 258476c4f342Schristos sll $9,11 258576c4f342Schristos xor $10,$8 258676c4f342Schristos srl $8,$21,18 258776c4f342Schristos xor $10,$9 258876c4f342Schristos 258976c4f342Schristos srl $11,$18,10 259076c4f342Schristos xor $10,$8 # sigma0(X[i+1]) 259176c4f342Schristos sll $9,$18,13 259276c4f342Schristos addu $20,$10 259376c4f342Schristos srl $8,$18,17 259476c4f342Schristos xor $11,$9 259576c4f342Schristos sll $9,2 259676c4f342Schristos xor $11,$8 259776c4f342Schristos srl $8,$18,19 259876c4f342Schristos xor $11,$9 259976c4f342Schristos#endif 260076c4f342Schristos xor $11,$8 # sigma1(X[i+14]) 260176c4f342Schristos addu $20,$11 260276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 260376c4f342Schristos xor $11,$2,$3 # 28 260476c4f342Schristos rotr $9,$1,6 260576c4f342Schristos addu $8,$20,$7 260676c4f342Schristos rotr $10,$1,11 260776c4f342Schristos and $11,$1 260876c4f342Schristos rotr $7,$1,25 260976c4f342Schristos xor $9,$10 261076c4f342Schristos rotr $10,$24,2 261176c4f342Schristos xor $11,$3 # Ch(e,f,g) 261276c4f342Schristos xor $9,$7 # Sigma1(e) 261376c4f342Schristos 261476c4f342Schristos rotr $7,$24,13 261576c4f342Schristos addu $8,$11 261676c4f342Schristos lw $11,112($6) # K[28] 261776c4f342Schristos xor $7,$10 261876c4f342Schristos rotr $10,$24,22 261976c4f342Schristos addu $8,$9 262076c4f342Schristos and $9,$25,$30 262176c4f342Schristos xor $7,$10 # Sigma0(a) 262276c4f342Schristos xor $10,$25,$30 262376c4f342Schristos#else 262476c4f342Schristos addu $8,$20,$7 # 28 262576c4f342Schristos srl $7,$1,6 262676c4f342Schristos xor $11,$2,$3 262776c4f342Schristos sll $10,$1,7 262876c4f342Schristos and $11,$1 262976c4f342Schristos srl $9,$1,11 263076c4f342Schristos xor $7,$10 263176c4f342Schristos sll $10,$1,21 263276c4f342Schristos xor $7,$9 263376c4f342Schristos srl $9,$1,25 263476c4f342Schristos xor $7,$10 263576c4f342Schristos sll $10,$1,26 263676c4f342Schristos xor $7,$9 263776c4f342Schristos xor $11,$3 # Ch(e,f,g) 263876c4f342Schristos xor $9,$10,$7 # Sigma1(e) 263976c4f342Schristos 264076c4f342Schristos srl $7,$24,2 264176c4f342Schristos addu $8,$11 264276c4f342Schristos lw $11,112($6) # K[28] 264376c4f342Schristos sll $10,$24,10 264476c4f342Schristos addu $8,$9 264576c4f342Schristos srl $9,$24,13 264676c4f342Schristos xor $7,$10 264776c4f342Schristos sll $10,$24,19 264876c4f342Schristos xor $7,$9 264976c4f342Schristos srl $9,$24,22 265076c4f342Schristos xor $7,$10 265176c4f342Schristos sll $10,$24,30 265276c4f342Schristos xor $7,$9 265376c4f342Schristos and $9,$25,$30 265476c4f342Schristos xor $7,$10 # Sigma0(a) 265576c4f342Schristos xor $10,$25,$30 265676c4f342Schristos#endif 265776c4f342Schristos sw $20,48($29) # offload to ring buffer 265876c4f342Schristos addu $7,$9 265976c4f342Schristos and $10,$24 266076c4f342Schristos addu $8,$11 # +=K[28] 266176c4f342Schristos addu $7,$10 # +=Maj(a,b,c) 266276c4f342Schristos addu $31,$8 266376c4f342Schristos addu $7,$8 266476c4f342Schristos lw $23,60($29) # prefetch from ring buffer 266576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 266676c4f342Schristos srl $11,$22,3 # Xupdate(29) 266776c4f342Schristos rotr $9,$22,7 266876c4f342Schristos addu $21,$14 # +=X[i+9] 266976c4f342Schristos xor $11,$9 267076c4f342Schristos rotr $9,$22,18 267176c4f342Schristos 267276c4f342Schristos srl $12,$19,10 267376c4f342Schristos rotr $10,$19,17 267476c4f342Schristos xor $11,$9 # sigma0(X[i+1]) 267576c4f342Schristos rotr $9,$19,19 267676c4f342Schristos xor $12,$10 267776c4f342Schristos addu $21,$11 267876c4f342Schristos#else 267976c4f342Schristos srl $11,$22,3 # Xupdate(29) 268076c4f342Schristos addu $21,$14 # +=X[i+9] 268176c4f342Schristos sll $10,$22,14 268276c4f342Schristos srl $9,$22,7 268376c4f342Schristos xor $11,$10 268476c4f342Schristos sll $10,11 268576c4f342Schristos xor $11,$9 268676c4f342Schristos srl $9,$22,18 268776c4f342Schristos xor $11,$10 268876c4f342Schristos 268976c4f342Schristos srl $12,$19,10 269076c4f342Schristos xor $11,$9 # sigma0(X[i+1]) 269176c4f342Schristos sll $10,$19,13 269276c4f342Schristos addu $21,$11 269376c4f342Schristos srl $9,$19,17 269476c4f342Schristos xor $12,$10 269576c4f342Schristos sll $10,2 269676c4f342Schristos xor $12,$9 269776c4f342Schristos srl $9,$19,19 269876c4f342Schristos xor $12,$10 269976c4f342Schristos#endif 270076c4f342Schristos xor $12,$9 # sigma1(X[i+14]) 270176c4f342Schristos addu $21,$12 270276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 270376c4f342Schristos xor $12,$1,$2 # 29 270476c4f342Schristos rotr $10,$31,6 270576c4f342Schristos addu $9,$21,$3 270676c4f342Schristos rotr $11,$31,11 270776c4f342Schristos and $12,$31 270876c4f342Schristos rotr $3,$31,25 270976c4f342Schristos xor $10,$11 271076c4f342Schristos rotr $11,$7,2 271176c4f342Schristos xor $12,$2 # Ch(e,f,g) 271276c4f342Schristos xor $10,$3 # Sigma1(e) 271376c4f342Schristos 271476c4f342Schristos rotr $3,$7,13 271576c4f342Schristos addu $9,$12 271676c4f342Schristos lw $12,116($6) # K[29] 271776c4f342Schristos xor $3,$11 271876c4f342Schristos rotr $11,$7,22 271976c4f342Schristos addu $9,$10 272076c4f342Schristos and $10,$24,$25 272176c4f342Schristos xor $3,$11 # Sigma0(a) 272276c4f342Schristos xor $11,$24,$25 272376c4f342Schristos#else 272476c4f342Schristos addu $9,$21,$3 # 29 272576c4f342Schristos srl $3,$31,6 272676c4f342Schristos xor $12,$1,$2 272776c4f342Schristos sll $11,$31,7 272876c4f342Schristos and $12,$31 272976c4f342Schristos srl $10,$31,11 273076c4f342Schristos xor $3,$11 273176c4f342Schristos sll $11,$31,21 273276c4f342Schristos xor $3,$10 273376c4f342Schristos srl $10,$31,25 273476c4f342Schristos xor $3,$11 273576c4f342Schristos sll $11,$31,26 273676c4f342Schristos xor $3,$10 273776c4f342Schristos xor $12,$2 # Ch(e,f,g) 273876c4f342Schristos xor $10,$11,$3 # Sigma1(e) 273976c4f342Schristos 274076c4f342Schristos srl $3,$7,2 274176c4f342Schristos addu $9,$12 274276c4f342Schristos lw $12,116($6) # K[29] 274376c4f342Schristos sll $11,$7,10 274476c4f342Schristos addu $9,$10 274576c4f342Schristos srl $10,$7,13 274676c4f342Schristos xor $3,$11 274776c4f342Schristos sll $11,$7,19 274876c4f342Schristos xor $3,$10 274976c4f342Schristos srl $10,$7,22 275076c4f342Schristos xor $3,$11 275176c4f342Schristos sll $11,$7,30 275276c4f342Schristos xor $3,$10 275376c4f342Schristos and $10,$24,$25 275476c4f342Schristos xor $3,$11 # Sigma0(a) 275576c4f342Schristos xor $11,$24,$25 275676c4f342Schristos#endif 275776c4f342Schristos sw $21,52($29) # offload to ring buffer 275876c4f342Schristos addu $3,$10 275976c4f342Schristos and $11,$7 276076c4f342Schristos addu $9,$12 # +=K[29] 276176c4f342Schristos addu $3,$11 # +=Maj(a,b,c) 276276c4f342Schristos addu $30,$9 276376c4f342Schristos addu $3,$9 276476c4f342Schristos lw $8,0($29) # prefetch from ring buffer 276576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 276676c4f342Schristos srl $12,$23,3 # Xupdate(30) 276776c4f342Schristos rotr $10,$23,7 276876c4f342Schristos addu $22,$15 # +=X[i+9] 276976c4f342Schristos xor $12,$10 277076c4f342Schristos rotr $10,$23,18 277176c4f342Schristos 277276c4f342Schristos srl $13,$20,10 277376c4f342Schristos rotr $11,$20,17 277476c4f342Schristos xor $12,$10 # sigma0(X[i+1]) 277576c4f342Schristos rotr $10,$20,19 277676c4f342Schristos xor $13,$11 277776c4f342Schristos addu $22,$12 277876c4f342Schristos#else 277976c4f342Schristos srl $12,$23,3 # Xupdate(30) 278076c4f342Schristos addu $22,$15 # +=X[i+9] 278176c4f342Schristos sll $11,$23,14 278276c4f342Schristos srl $10,$23,7 278376c4f342Schristos xor $12,$11 278476c4f342Schristos sll $11,11 278576c4f342Schristos xor $12,$10 278676c4f342Schristos srl $10,$23,18 278776c4f342Schristos xor $12,$11 278876c4f342Schristos 278976c4f342Schristos srl $13,$20,10 279076c4f342Schristos xor $12,$10 # sigma0(X[i+1]) 279176c4f342Schristos sll $11,$20,13 279276c4f342Schristos addu $22,$12 279376c4f342Schristos srl $10,$20,17 279476c4f342Schristos xor $13,$11 279576c4f342Schristos sll $11,2 279676c4f342Schristos xor $13,$10 279776c4f342Schristos srl $10,$20,19 279876c4f342Schristos xor $13,$11 279976c4f342Schristos#endif 280076c4f342Schristos xor $13,$10 # sigma1(X[i+14]) 280176c4f342Schristos addu $22,$13 280276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 280376c4f342Schristos xor $13,$31,$1 # 30 280476c4f342Schristos rotr $11,$30,6 280576c4f342Schristos addu $10,$22,$2 280676c4f342Schristos rotr $12,$30,11 280776c4f342Schristos and $13,$30 280876c4f342Schristos rotr $2,$30,25 280976c4f342Schristos xor $11,$12 281076c4f342Schristos rotr $12,$3,2 281176c4f342Schristos xor $13,$1 # Ch(e,f,g) 281276c4f342Schristos xor $11,$2 # Sigma1(e) 281376c4f342Schristos 281476c4f342Schristos rotr $2,$3,13 281576c4f342Schristos addu $10,$13 281676c4f342Schristos lw $13,120($6) # K[30] 281776c4f342Schristos xor $2,$12 281876c4f342Schristos rotr $12,$3,22 281976c4f342Schristos addu $10,$11 282076c4f342Schristos and $11,$7,$24 282176c4f342Schristos xor $2,$12 # Sigma0(a) 282276c4f342Schristos xor $12,$7,$24 282376c4f342Schristos#else 282476c4f342Schristos addu $10,$22,$2 # 30 282576c4f342Schristos srl $2,$30,6 282676c4f342Schristos xor $13,$31,$1 282776c4f342Schristos sll $12,$30,7 282876c4f342Schristos and $13,$30 282976c4f342Schristos srl $11,$30,11 283076c4f342Schristos xor $2,$12 283176c4f342Schristos sll $12,$30,21 283276c4f342Schristos xor $2,$11 283376c4f342Schristos srl $11,$30,25 283476c4f342Schristos xor $2,$12 283576c4f342Schristos sll $12,$30,26 283676c4f342Schristos xor $2,$11 283776c4f342Schristos xor $13,$1 # Ch(e,f,g) 283876c4f342Schristos xor $11,$12,$2 # Sigma1(e) 283976c4f342Schristos 284076c4f342Schristos srl $2,$3,2 284176c4f342Schristos addu $10,$13 284276c4f342Schristos lw $13,120($6) # K[30] 284376c4f342Schristos sll $12,$3,10 284476c4f342Schristos addu $10,$11 284576c4f342Schristos srl $11,$3,13 284676c4f342Schristos xor $2,$12 284776c4f342Schristos sll $12,$3,19 284876c4f342Schristos xor $2,$11 284976c4f342Schristos srl $11,$3,22 285076c4f342Schristos xor $2,$12 285176c4f342Schristos sll $12,$3,30 285276c4f342Schristos xor $2,$11 285376c4f342Schristos and $11,$7,$24 285476c4f342Schristos xor $2,$12 # Sigma0(a) 285576c4f342Schristos xor $12,$7,$24 285676c4f342Schristos#endif 285776c4f342Schristos sw $22,56($29) # offload to ring buffer 285876c4f342Schristos addu $2,$11 285976c4f342Schristos and $12,$3 286076c4f342Schristos addu $10,$13 # +=K[30] 286176c4f342Schristos addu $2,$12 # +=Maj(a,b,c) 286276c4f342Schristos addu $25,$10 286376c4f342Schristos addu $2,$10 286476c4f342Schristos lw $9,4($29) # prefetch from ring buffer 286576c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 286676c4f342Schristos srl $13,$8,3 # Xupdate(31) 286776c4f342Schristos rotr $11,$8,7 286876c4f342Schristos addu $23,$16 # +=X[i+9] 286976c4f342Schristos xor $13,$11 287076c4f342Schristos rotr $11,$8,18 287176c4f342Schristos 287276c4f342Schristos srl $14,$21,10 287376c4f342Schristos rotr $12,$21,17 287476c4f342Schristos xor $13,$11 # sigma0(X[i+1]) 287576c4f342Schristos rotr $11,$21,19 287676c4f342Schristos xor $14,$12 287776c4f342Schristos addu $23,$13 287876c4f342Schristos#else 287976c4f342Schristos srl $13,$8,3 # Xupdate(31) 288076c4f342Schristos addu $23,$16 # +=X[i+9] 288176c4f342Schristos sll $12,$8,14 288276c4f342Schristos srl $11,$8,7 288376c4f342Schristos xor $13,$12 288476c4f342Schristos sll $12,11 288576c4f342Schristos xor $13,$11 288676c4f342Schristos srl $11,$8,18 288776c4f342Schristos xor $13,$12 288876c4f342Schristos 288976c4f342Schristos srl $14,$21,10 289076c4f342Schristos xor $13,$11 # sigma0(X[i+1]) 289176c4f342Schristos sll $12,$21,13 289276c4f342Schristos addu $23,$13 289376c4f342Schristos srl $11,$21,17 289476c4f342Schristos xor $14,$12 289576c4f342Schristos sll $12,2 289676c4f342Schristos xor $14,$11 289776c4f342Schristos srl $11,$21,19 289876c4f342Schristos xor $14,$12 289976c4f342Schristos#endif 290076c4f342Schristos xor $14,$11 # sigma1(X[i+14]) 290176c4f342Schristos addu $23,$14 290276c4f342Schristos#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 290376c4f342Schristos xor $14,$30,$31 # 31 290476c4f342Schristos rotr $12,$25,6 290576c4f342Schristos addu $11,$23,$1 290676c4f342Schristos rotr $13,$25,11 290776c4f342Schristos and $14,$25 290876c4f342Schristos rotr $1,$25,25 290976c4f342Schristos xor $12,$13 291076c4f342Schristos rotr $13,$2,2 291176c4f342Schristos xor $14,$31 # Ch(e,f,g) 291276c4f342Schristos xor $12,$1 # Sigma1(e) 291376c4f342Schristos 291476c4f342Schristos rotr $1,$2,13 291576c4f342Schristos addu $11,$14 291676c4f342Schristos lw $14,124($6) # K[31] 291776c4f342Schristos xor $1,$13 291876c4f342Schristos rotr $13,$2,22 291976c4f342Schristos addu $11,$12 292076c4f342Schristos and $12,$3,$7 292176c4f342Schristos xor $1,$13 # Sigma0(a) 292276c4f342Schristos xor $13,$3,$7 292376c4f342Schristos#else 292476c4f342Schristos addu $11,$23,$1 # 31 292576c4f342Schristos srl $1,$25,6 292676c4f342Schristos xor $14,$30,$31 292776c4f342Schristos sll $13,$25,7 292876c4f342Schristos and $14,$25 292976c4f342Schristos srl $12,$25,11 293076c4f342Schristos xor $1,$13 293176c4f342Schristos sll $13,$25,21 293276c4f342Schristos xor $1,$12 293376c4f342Schristos srl $12,$25,25 293476c4f342Schristos xor $1,$13 293576c4f342Schristos sll $13,$25,26 293676c4f342Schristos xor $1,$12 293776c4f342Schristos xor $14,$31 # Ch(e,f,g) 293876c4f342Schristos xor $12,$13,$1 # Sigma1(e) 293976c4f342Schristos 294076c4f342Schristos srl $1,$2,2 294176c4f342Schristos addu $11,$14 294276c4f342Schristos lw $14,124($6) # K[31] 294376c4f342Schristos sll $13,$2,10 294476c4f342Schristos addu $11,$12 294576c4f342Schristos srl $12,$2,13 294676c4f342Schristos xor $1,$13 294776c4f342Schristos sll $13,$2,19 294876c4f342Schristos xor $1,$12 294976c4f342Schristos srl $12,$2,22 295076c4f342Schristos xor $1,$13 295176c4f342Schristos sll $13,$2,30 295276c4f342Schristos xor $1,$12 295376c4f342Schristos and $12,$3,$7 295476c4f342Schristos xor $1,$13 # Sigma0(a) 295576c4f342Schristos xor $13,$3,$7 295676c4f342Schristos#endif 295776c4f342Schristos sw $23,60($29) # offload to ring buffer 295876c4f342Schristos addu $1,$12 295976c4f342Schristos and $13,$2 296076c4f342Schristos addu $11,$14 # +=K[31] 296176c4f342Schristos addu $1,$13 # +=Maj(a,b,c) 296276c4f342Schristos addu $24,$11 296376c4f342Schristos addu $1,$11 296476c4f342Schristos lw $10,8($29) # prefetch from ring buffer 296576c4f342Schristos and $14,0xfff 296676c4f342Schristos li $15,2290 296776c4f342Schristos .set noreorder 296876c4f342Schristos bne $14,$15,.L16_xx 2969*e0ea3921Schristos addu $6,16*4 # Ktbl+=16 297076c4f342Schristos 297176c4f342Schristos lw $23,16*4($29) # restore pointer to the end of input 297276c4f342Schristos lw $8,0*4($4) 297376c4f342Schristos lw $9,1*4($4) 297476c4f342Schristos lw $10,2*4($4) 2975*e0ea3921Schristos addu $5,16*4 297676c4f342Schristos lw $11,3*4($4) 297776c4f342Schristos addu $1,$8 297876c4f342Schristos lw $12,4*4($4) 297976c4f342Schristos addu $2,$9 298076c4f342Schristos lw $13,5*4($4) 298176c4f342Schristos addu $3,$10 298276c4f342Schristos lw $14,6*4($4) 298376c4f342Schristos addu $7,$11 298476c4f342Schristos lw $15,7*4($4) 298576c4f342Schristos addu $24,$12 298676c4f342Schristos sw $1,0*4($4) 298776c4f342Schristos addu $25,$13 298876c4f342Schristos sw $2,1*4($4) 298976c4f342Schristos addu $30,$14 299076c4f342Schristos sw $3,2*4($4) 299176c4f342Schristos addu $31,$15 299276c4f342Schristos sw $7,3*4($4) 299376c4f342Schristos sw $24,4*4($4) 299476c4f342Schristos sw $25,5*4($4) 299576c4f342Schristos sw $30,6*4($4) 299676c4f342Schristos sw $31,7*4($4) 299776c4f342Schristos 299876c4f342Schristos bne $5,$23,.Loop 2999*e0ea3921Schristos subu $6,192 # rewind $6 300076c4f342Schristos 300176c4f342Schristos lw $31,128-1*4($29) 300276c4f342Schristos lw $30,128-2*4($29) 300376c4f342Schristos lw $23,128-3*4($29) 300476c4f342Schristos lw $22,128-4*4($29) 300576c4f342Schristos lw $21,128-5*4($29) 300676c4f342Schristos lw $20,128-6*4($29) 300776c4f342Schristos lw $19,128-7*4($29) 300876c4f342Schristos lw $18,128-8*4($29) 300976c4f342Schristos lw $17,128-9*4($29) 301076c4f342Schristos lw $16,128-10*4($29) 301176c4f342Schristos jr $31 3012*e0ea3921Schristos addu $29,128 301376c4f342Schristos.end sha256_block_data_order 301476c4f342Schristos 301576c4f342Schristos.rdata 301676c4f342Schristos.align 5 301776c4f342SchristosK256: 301876c4f342Schristos .word 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5 301976c4f342Schristos .word 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5 302076c4f342Schristos .word 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3 302176c4f342Schristos .word 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174 302276c4f342Schristos .word 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc 302376c4f342Schristos .word 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da 302476c4f342Schristos .word 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7 302576c4f342Schristos .word 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967 302676c4f342Schristos .word 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13 302776c4f342Schristos .word 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85 302876c4f342Schristos .word 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3 302976c4f342Schristos .word 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070 303076c4f342Schristos .word 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5 303176c4f342Schristos .word 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3 303276c4f342Schristos .word 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208 303376c4f342Schristos .word 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 303476c4f342Schristos.asciiz "SHA256 for MIPS, CRYPTOGAMS by <appro@openssl.org>" 303576c4f342Schristos.align 5 303676c4f342Schristos 3037