summaryrefslogtreecommitdiff
path: root/deps/openssl/config/archs/linux64-mips64/asm/crypto/sha/sha512-mips.S
diff options
context:
space:
mode:
Diffstat (limited to 'deps/openssl/config/archs/linux64-mips64/asm/crypto/sha/sha512-mips.S')
-rw-r--r--deps/openssl/config/archs/linux64-mips64/asm/crypto/sha/sha512-mips.S3204
1 files changed, 3204 insertions, 0 deletions
diff --git a/deps/openssl/config/archs/linux64-mips64/asm/crypto/sha/sha512-mips.S b/deps/openssl/config/archs/linux64-mips64/asm/crypto/sha/sha512-mips.S
new file mode 100644
index 0000000000..538bd9e459
--- /dev/null
+++ b/deps/openssl/config/archs/linux64-mips64/asm/crypto/sha/sha512-mips.S
@@ -0,0 +1,3204 @@
+#include "mips_arch.h"
+
+.text
+.set noat
+#if !defined(__mips_eabi) && (!defined(__vxworks) || defined(__pic__))
+.option pic2
+#endif
+
+.align 5
+.globl sha512_block_data_order
+.ent sha512_block_data_order
+sha512_block_data_order:
+ .frame $29,256,$31
+ .mask 0xc0ff0000,-8
+ .set noreorder
+ dsubu $29,256
+ sd $31,256-1*8($29)
+ sd $30,256-2*8($29)
+ sd $23,256-3*8($29)
+ sd $22,256-4*8($29)
+ sd $21,256-5*8($29)
+ sd $20,256-6*8($29)
+ sd $19,256-7*8($29)
+ sd $18,256-8*8($29)
+ sd $17,256-9*8($29)
+ sd $16,256-10*8($29)
+ dsll $23,$6,7
+ .cplocal $6
+ .cpsetup $25,$0,sha512_block_data_order
+ .set reorder
+ dla $6,K512 # PIC-ified 'load address'
+
+ ld $1,0*8($4) # load context
+ ld $2,1*8($4)
+ ld $3,2*8($4)
+ ld $7,3*8($4)
+ ld $24,4*8($4)
+ ld $25,5*8($4)
+ ld $30,6*8($4)
+ ld $31,7*8($4)
+
+ daddu $23,$5 # pointer to the end of input
+ sd $23,16*8($29)
+ b .Loop
+
+.align 5
+.Loop:
+#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
+ ld $8,($5)
+#else
+ ldl $8,7($5)
+ ldr $8,0($5)
+#endif
+#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
+ ld $9,8($5)
+#else
+ ldl $9,15($5)
+ ldr $9,8($5)
+#endif
+#if defined(_MIPS_ARCH_MIPS64R2)
+ dsbh $8,$8 # byte swap(0)
+ dshd $8,$8
+#else
+ ori $13,$0,0xFF
+ dsll $15,$13,32
+ or $13,$15 # 0x000000FF000000FF
+ and $14,$8,$13 # byte swap(0)
+ dsrl $15,$8,24
+ dsll $14,24
+ and $15,$13
+ dsll $13,8 # 0x0000FF000000FF00
+ or $14,$15
+ and $15,$8,$13
+ dsrl $8,8
+ dsll $15,8
+ and $8,$13
+ or $14,$15
+ or $8,$14
+ dsrl $14,$8,32
+ dsll $8,32
+ or $8,$14
+#endif
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $15,$25,$30 # 0
+ drotr $13,$24,14
+ daddu $12,$8,$31
+ drotr $14,$24,18
+ and $15,$24
+ drotr $31,$24,41
+ xor $13,$14
+ drotr $14,$1,28
+ xor $15,$30 # Ch(e,f,g)
+ xor $13,$31 # Sigma1(e)
+
+ drotr $31,$1,34
+ daddu $12,$15
+ ld $15,0($6) # K[0]
+ xor $31,$14
+ drotr $14,$1,39
+ daddu $12,$13
+ and $13,$2,$3
+ xor $31,$14 # Sigma0(a)
+ xor $14,$2,$3
+#else
+ daddu $12,$8,$31 # 0
+ dsrl $31,$24,14
+ xor $15,$25,$30
+ dsll $14,$24,23
+ and $15,$24
+ dsrl $13,$24,18
+ xor $31,$14
+ dsll $14,$24,46
+ xor $31,$13
+ dsrl $13,$24,41
+ xor $31,$14
+ dsll $14,$24,50
+ xor $31,$13
+ xor $15,$30 # Ch(e,f,g)
+ xor $13,$14,$31 # Sigma1(e)
+
+ dsrl $31,$1,28
+ daddu $12,$15
+ ld $15,0($6) # K[0]
+ dsll $14,$1,25
+ daddu $12,$13
+ dsrl $13,$1,34
+ xor $31,$14
+ dsll $14,$1,30
+ xor $31,$13
+ dsrl $13,$1,39
+ xor $31,$14
+ dsll $14,$1,36
+ xor $31,$13
+ and $13,$2,$3
+ xor $31,$14 # Sigma0(a)
+ xor $14,$2,$3
+#endif
+ sd $8,0($29) # offload to ring buffer
+ daddu $31,$13
+ and $14,$1
+ daddu $12,$15 # +=K[0]
+ daddu $31,$14 # +=Maj(a,b,c)
+ daddu $7,$12
+ daddu $31,$12
+#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
+ ld $10,16($5)
+#else
+ ldl $10,23($5)
+ ldr $10,16($5)
+#endif
+#if defined(_MIPS_ARCH_MIPS64R2)
+ dsbh $9,$9 # byte swap(1)
+ dshd $9,$9
+#else
+ ori $14,$0,0xFF
+ dsll $16,$14,32
+ or $14,$16 # 0x000000FF000000FF
+ and $15,$9,$14 # byte swap(1)
+ dsrl $16,$9,24
+ dsll $15,24
+ and $16,$14
+ dsll $14,8 # 0x0000FF000000FF00
+ or $15,$16
+ and $16,$9,$14
+ dsrl $9,8
+ dsll $16,8
+ and $9,$14
+ or $15,$16
+ or $9,$15
+ dsrl $15,$9,32
+ dsll $9,32
+ or $9,$15
+#endif
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $16,$24,$25 # 1
+ drotr $14,$7,14
+ daddu $13,$9,$30
+ drotr $15,$7,18
+ and $16,$7
+ drotr $30,$7,41
+ xor $14,$15
+ drotr $15,$31,28
+ xor $16,$25 # Ch(e,f,g)
+ xor $14,$30 # Sigma1(e)
+
+ drotr $30,$31,34
+ daddu $13,$16
+ ld $16,8($6) # K[1]
+ xor $30,$15
+ drotr $15,$31,39
+ daddu $13,$14
+ and $14,$1,$2
+ xor $30,$15 # Sigma0(a)
+ xor $15,$1,$2
+#else
+ daddu $13,$9,$30 # 1
+ dsrl $30,$7,14
+ xor $16,$24,$25
+ dsll $15,$7,23
+ and $16,$7
+ dsrl $14,$7,18
+ xor $30,$15
+ dsll $15,$7,46
+ xor $30,$14
+ dsrl $14,$7,41
+ xor $30,$15
+ dsll $15,$7,50
+ xor $30,$14
+ xor $16,$25 # Ch(e,f,g)
+ xor $14,$15,$30 # Sigma1(e)
+
+ dsrl $30,$31,28
+ daddu $13,$16
+ ld $16,8($6) # K[1]
+ dsll $15,$31,25
+ daddu $13,$14
+ dsrl $14,$31,34
+ xor $30,$15
+ dsll $15,$31,30
+ xor $30,$14
+ dsrl $14,$31,39
+ xor $30,$15
+ dsll $15,$31,36
+ xor $30,$14
+ and $14,$1,$2
+ xor $30,$15 # Sigma0(a)
+ xor $15,$1,$2
+#endif
+ sd $9,8($29) # offload to ring buffer
+ daddu $30,$14
+ and $15,$31
+ daddu $13,$16 # +=K[1]
+ daddu $30,$15 # +=Maj(a,b,c)
+ daddu $3,$13
+ daddu $30,$13
+#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
+ ld $11,24($5)
+#else
+ ldl $11,31($5)
+ ldr $11,24($5)
+#endif
+#if defined(_MIPS_ARCH_MIPS64R2)
+ dsbh $10,$10 # byte swap(2)
+ dshd $10,$10
+#else
+ ori $15,$0,0xFF
+ dsll $17,$15,32
+ or $15,$17 # 0x000000FF000000FF
+ and $16,$10,$15 # byte swap(2)
+ dsrl $17,$10,24
+ dsll $16,24
+ and $17,$15
+ dsll $15,8 # 0x0000FF000000FF00
+ or $16,$17
+ and $17,$10,$15
+ dsrl $10,8
+ dsll $17,8
+ and $10,$15
+ or $16,$17
+ or $10,$16
+ dsrl $16,$10,32
+ dsll $10,32
+ or $10,$16
+#endif
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $17,$7,$24 # 2
+ drotr $15,$3,14
+ daddu $14,$10,$25
+ drotr $16,$3,18
+ and $17,$3
+ drotr $25,$3,41
+ xor $15,$16
+ drotr $16,$30,28
+ xor $17,$24 # Ch(e,f,g)
+ xor $15,$25 # Sigma1(e)
+
+ drotr $25,$30,34
+ daddu $14,$17
+ ld $17,16($6) # K[2]
+ xor $25,$16
+ drotr $16,$30,39
+ daddu $14,$15
+ and $15,$31,$1
+ xor $25,$16 # Sigma0(a)
+ xor $16,$31,$1
+#else
+ daddu $14,$10,$25 # 2
+ dsrl $25,$3,14
+ xor $17,$7,$24
+ dsll $16,$3,23
+ and $17,$3
+ dsrl $15,$3,18
+ xor $25,$16
+ dsll $16,$3,46
+ xor $25,$15
+ dsrl $15,$3,41
+ xor $25,$16
+ dsll $16,$3,50
+ xor $25,$15
+ xor $17,$24 # Ch(e,f,g)
+ xor $15,$16,$25 # Sigma1(e)
+
+ dsrl $25,$30,28
+ daddu $14,$17
+ ld $17,16($6) # K[2]
+ dsll $16,$30,25
+ daddu $14,$15
+ dsrl $15,$30,34
+ xor $25,$16
+ dsll $16,$30,30
+ xor $25,$15
+ dsrl $15,$30,39
+ xor $25,$16
+ dsll $16,$30,36
+ xor $25,$15
+ and $15,$31,$1
+ xor $25,$16 # Sigma0(a)
+ xor $16,$31,$1
+#endif
+ sd $10,16($29) # offload to ring buffer
+ daddu $25,$15
+ and $16,$30
+ daddu $14,$17 # +=K[2]
+ daddu $25,$16 # +=Maj(a,b,c)
+ daddu $2,$14
+ daddu $25,$14
+#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
+ ld $12,32($5)
+#else
+ ldl $12,39($5)
+ ldr $12,32($5)
+#endif
+#if defined(_MIPS_ARCH_MIPS64R2)
+ dsbh $11,$11 # byte swap(3)
+ dshd $11,$11
+#else
+ ori $16,$0,0xFF
+ dsll $18,$16,32
+ or $16,$18 # 0x000000FF000000FF
+ and $17,$11,$16 # byte swap(3)
+ dsrl $18,$11,24
+ dsll $17,24
+ and $18,$16
+ dsll $16,8 # 0x0000FF000000FF00
+ or $17,$18
+ and $18,$11,$16
+ dsrl $11,8
+ dsll $18,8
+ and $11,$16
+ or $17,$18
+ or $11,$17
+ dsrl $17,$11,32
+ dsll $11,32
+ or $11,$17
+#endif
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $18,$3,$7 # 3
+ drotr $16,$2,14
+ daddu $15,$11,$24
+ drotr $17,$2,18
+ and $18,$2
+ drotr $24,$2,41
+ xor $16,$17
+ drotr $17,$25,28
+ xor $18,$7 # Ch(e,f,g)
+ xor $16,$24 # Sigma1(e)
+
+ drotr $24,$25,34
+ daddu $15,$18
+ ld $18,24($6) # K[3]
+ xor $24,$17
+ drotr $17,$25,39
+ daddu $15,$16
+ and $16,$30,$31
+ xor $24,$17 # Sigma0(a)
+ xor $17,$30,$31
+#else
+ daddu $15,$11,$24 # 3
+ dsrl $24,$2,14
+ xor $18,$3,$7
+ dsll $17,$2,23
+ and $18,$2
+ dsrl $16,$2,18
+ xor $24,$17
+ dsll $17,$2,46
+ xor $24,$16
+ dsrl $16,$2,41
+ xor $24,$17
+ dsll $17,$2,50
+ xor $24,$16
+ xor $18,$7 # Ch(e,f,g)
+ xor $16,$17,$24 # Sigma1(e)
+
+ dsrl $24,$25,28
+ daddu $15,$18
+ ld $18,24($6) # K[3]
+ dsll $17,$25,25
+ daddu $15,$16
+ dsrl $16,$25,34
+ xor $24,$17
+ dsll $17,$25,30
+ xor $24,$16
+ dsrl $16,$25,39
+ xor $24,$17
+ dsll $17,$25,36
+ xor $24,$16
+ and $16,$30,$31
+ xor $24,$17 # Sigma0(a)
+ xor $17,$30,$31
+#endif
+ sd $11,24($29) # offload to ring buffer
+ daddu $24,$16
+ and $17,$25
+ daddu $15,$18 # +=K[3]
+ daddu $24,$17 # +=Maj(a,b,c)
+ daddu $1,$15
+ daddu $24,$15
+#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
+ ld $13,40($5)
+#else
+ ldl $13,47($5)
+ ldr $13,40($5)
+#endif
+#if defined(_MIPS_ARCH_MIPS64R2)
+ dsbh $12,$12 # byte swap(4)
+ dshd $12,$12
+#else
+ ori $17,$0,0xFF
+ dsll $19,$17,32
+ or $17,$19 # 0x000000FF000000FF
+ and $18,$12,$17 # byte swap(4)
+ dsrl $19,$12,24
+ dsll $18,24
+ and $19,$17
+ dsll $17,8 # 0x0000FF000000FF00
+ or $18,$19
+ and $19,$12,$17
+ dsrl $12,8
+ dsll $19,8
+ and $12,$17
+ or $18,$19
+ or $12,$18
+ dsrl $18,$12,32
+ dsll $12,32
+ or $12,$18
+#endif
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $19,$2,$3 # 4
+ drotr $17,$1,14
+ daddu $16,$12,$7
+ drotr $18,$1,18
+ and $19,$1
+ drotr $7,$1,41
+ xor $17,$18
+ drotr $18,$24,28
+ xor $19,$3 # Ch(e,f,g)
+ xor $17,$7 # Sigma1(e)
+
+ drotr $7,$24,34
+ daddu $16,$19
+ ld $19,32($6) # K[4]
+ xor $7,$18
+ drotr $18,$24,39
+ daddu $16,$17
+ and $17,$25,$30
+ xor $7,$18 # Sigma0(a)
+ xor $18,$25,$30
+#else
+ daddu $16,$12,$7 # 4
+ dsrl $7,$1,14
+ xor $19,$2,$3
+ dsll $18,$1,23
+ and $19,$1
+ dsrl $17,$1,18
+ xor $7,$18
+ dsll $18,$1,46
+ xor $7,$17
+ dsrl $17,$1,41
+ xor $7,$18
+ dsll $18,$1,50
+ xor $7,$17
+ xor $19,$3 # Ch(e,f,g)
+ xor $17,$18,$7 # Sigma1(e)
+
+ dsrl $7,$24,28
+ daddu $16,$19
+ ld $19,32($6) # K[4]
+ dsll $18,$24,25
+ daddu $16,$17
+ dsrl $17,$24,34
+ xor $7,$18
+ dsll $18,$24,30
+ xor $7,$17
+ dsrl $17,$24,39
+ xor $7,$18
+ dsll $18,$24,36
+ xor $7,$17
+ and $17,$25,$30
+ xor $7,$18 # Sigma0(a)
+ xor $18,$25,$30
+#endif
+ sd $12,32($29) # offload to ring buffer
+ daddu $7,$17
+ and $18,$24
+ daddu $16,$19 # +=K[4]
+ daddu $7,$18 # +=Maj(a,b,c)
+ daddu $31,$16
+ daddu $7,$16
+#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
+ ld $14,48($5)
+#else
+ ldl $14,55($5)
+ ldr $14,48($5)
+#endif
+#if defined(_MIPS_ARCH_MIPS64R2)
+ dsbh $13,$13 # byte swap(5)
+ dshd $13,$13
+#else
+ ori $18,$0,0xFF
+ dsll $20,$18,32
+ or $18,$20 # 0x000000FF000000FF
+ and $19,$13,$18 # byte swap(5)
+ dsrl $20,$13,24
+ dsll $19,24
+ and $20,$18
+ dsll $18,8 # 0x0000FF000000FF00
+ or $19,$20
+ and $20,$13,$18
+ dsrl $13,8
+ dsll $20,8
+ and $13,$18
+ or $19,$20
+ or $13,$19
+ dsrl $19,$13,32
+ dsll $13,32
+ or $13,$19
+#endif
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $20,$1,$2 # 5
+ drotr $18,$31,14
+ daddu $17,$13,$3
+ drotr $19,$31,18
+ and $20,$31
+ drotr $3,$31,41
+ xor $18,$19
+ drotr $19,$7,28
+ xor $20,$2 # Ch(e,f,g)
+ xor $18,$3 # Sigma1(e)
+
+ drotr $3,$7,34
+ daddu $17,$20
+ ld $20,40($6) # K[5]
+ xor $3,$19
+ drotr $19,$7,39
+ daddu $17,$18
+ and $18,$24,$25
+ xor $3,$19 # Sigma0(a)
+ xor $19,$24,$25
+#else
+ daddu $17,$13,$3 # 5
+ dsrl $3,$31,14
+ xor $20,$1,$2
+ dsll $19,$31,23
+ and $20,$31
+ dsrl $18,$31,18
+ xor $3,$19
+ dsll $19,$31,46
+ xor $3,$18
+ dsrl $18,$31,41
+ xor $3,$19
+ dsll $19,$31,50
+ xor $3,$18
+ xor $20,$2 # Ch(e,f,g)
+ xor $18,$19,$3 # Sigma1(e)
+
+ dsrl $3,$7,28
+ daddu $17,$20
+ ld $20,40($6) # K[5]
+ dsll $19,$7,25
+ daddu $17,$18
+ dsrl $18,$7,34
+ xor $3,$19
+ dsll $19,$7,30
+ xor $3,$18
+ dsrl $18,$7,39
+ xor $3,$19
+ dsll $19,$7,36
+ xor $3,$18
+ and $18,$24,$25
+ xor $3,$19 # Sigma0(a)
+ xor $19,$24,$25
+#endif
+ sd $13,40($29) # offload to ring buffer
+ daddu $3,$18
+ and $19,$7
+ daddu $17,$20 # +=K[5]
+ daddu $3,$19 # +=Maj(a,b,c)
+ daddu $30,$17
+ daddu $3,$17
+#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
+ ld $15,56($5)
+#else
+ ldl $15,63($5)
+ ldr $15,56($5)
+#endif
+#if defined(_MIPS_ARCH_MIPS64R2)
+ dsbh $14,$14 # byte swap(6)
+ dshd $14,$14
+#else
+ ori $19,$0,0xFF
+ dsll $21,$19,32
+ or $19,$21 # 0x000000FF000000FF
+ and $20,$14,$19 # byte swap(6)
+ dsrl $21,$14,24
+ dsll $20,24
+ and $21,$19
+ dsll $19,8 # 0x0000FF000000FF00
+ or $20,$21
+ and $21,$14,$19
+ dsrl $14,8
+ dsll $21,8
+ and $14,$19
+ or $20,$21
+ or $14,$20
+ dsrl $20,$14,32
+ dsll $14,32
+ or $14,$20
+#endif
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $21,$31,$1 # 6
+ drotr $19,$30,14
+ daddu $18,$14,$2
+ drotr $20,$30,18
+ and $21,$30
+ drotr $2,$30,41
+ xor $19,$20
+ drotr $20,$3,28
+ xor $21,$1 # Ch(e,f,g)
+ xor $19,$2 # Sigma1(e)
+
+ drotr $2,$3,34
+ daddu $18,$21
+ ld $21,48($6) # K[6]
+ xor $2,$20
+ drotr $20,$3,39
+ daddu $18,$19
+ and $19,$7,$24
+ xor $2,$20 # Sigma0(a)
+ xor $20,$7,$24
+#else
+ daddu $18,$14,$2 # 6
+ dsrl $2,$30,14
+ xor $21,$31,$1
+ dsll $20,$30,23
+ and $21,$30
+ dsrl $19,$30,18
+ xor $2,$20
+ dsll $20,$30,46
+ xor $2,$19
+ dsrl $19,$30,41
+ xor $2,$20
+ dsll $20,$30,50
+ xor $2,$19
+ xor $21,$1 # Ch(e,f,g)
+ xor $19,$20,$2 # Sigma1(e)
+
+ dsrl $2,$3,28
+ daddu $18,$21
+ ld $21,48($6) # K[6]
+ dsll $20,$3,25
+ daddu $18,$19
+ dsrl $19,$3,34
+ xor $2,$20
+ dsll $20,$3,30
+ xor $2,$19
+ dsrl $19,$3,39
+ xor $2,$20
+ dsll $20,$3,36
+ xor $2,$19
+ and $19,$7,$24
+ xor $2,$20 # Sigma0(a)
+ xor $20,$7,$24
+#endif
+ sd $14,48($29) # offload to ring buffer
+ daddu $2,$19
+ and $20,$3
+ daddu $18,$21 # +=K[6]
+ daddu $2,$20 # +=Maj(a,b,c)
+ daddu $25,$18
+ daddu $2,$18
+#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
+ ld $16,64($5)
+#else
+ ldl $16,71($5)
+ ldr $16,64($5)
+#endif
+#if defined(_MIPS_ARCH_MIPS64R2)
+ dsbh $15,$15 # byte swap(7)
+ dshd $15,$15
+#else
+ ori $20,$0,0xFF
+ dsll $22,$20,32
+ or $20,$22 # 0x000000FF000000FF
+ and $21,$15,$20 # byte swap(7)
+ dsrl $22,$15,24
+ dsll $21,24
+ and $22,$20
+ dsll $20,8 # 0x0000FF000000FF00
+ or $21,$22
+ and $22,$15,$20
+ dsrl $15,8
+ dsll $22,8
+ and $15,$20
+ or $21,$22
+ or $15,$21
+ dsrl $21,$15,32
+ dsll $15,32
+ or $15,$21
+#endif
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $22,$30,$31 # 7
+ drotr $20,$25,14
+ daddu $19,$15,$1
+ drotr $21,$25,18
+ and $22,$25
+ drotr $1,$25,41
+ xor $20,$21
+ drotr $21,$2,28
+ xor $22,$31 # Ch(e,f,g)
+ xor $20,$1 # Sigma1(e)
+
+ drotr $1,$2,34
+ daddu $19,$22
+ ld $22,56($6) # K[7]
+ xor $1,$21
+ drotr $21,$2,39
+ daddu $19,$20
+ and $20,$3,$7
+ xor $1,$21 # Sigma0(a)
+ xor $21,$3,$7
+#else
+ daddu $19,$15,$1 # 7
+ dsrl $1,$25,14
+ xor $22,$30,$31
+ dsll $21,$25,23
+ and $22,$25
+ dsrl $20,$25,18
+ xor $1,$21
+ dsll $21,$25,46
+ xor $1,$20
+ dsrl $20,$25,41
+ xor $1,$21
+ dsll $21,$25,50
+ xor $1,$20
+ xor $22,$31 # Ch(e,f,g)
+ xor $20,$21,$1 # Sigma1(e)
+
+ dsrl $1,$2,28
+ daddu $19,$22
+ ld $22,56($6) # K[7]
+ dsll $21,$2,25
+ daddu $19,$20
+ dsrl $20,$2,34
+ xor $1,$21
+ dsll $21,$2,30
+ xor $1,$20
+ dsrl $20,$2,39
+ xor $1,$21
+ dsll $21,$2,36
+ xor $1,$20
+ and $20,$3,$7
+ xor $1,$21 # Sigma0(a)
+ xor $21,$3,$7
+#endif
+ sd $15,56($29) # offload to ring buffer
+ daddu $1,$20
+ and $21,$2
+ daddu $19,$22 # +=K[7]
+ daddu $1,$21 # +=Maj(a,b,c)
+ daddu $24,$19
+ daddu $1,$19
+#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
+ ld $17,72($5)
+#else
+ ldl $17,79($5)
+ ldr $17,72($5)
+#endif
+#if defined(_MIPS_ARCH_MIPS64R2)
+ dsbh $16,$16 # byte swap(8)
+ dshd $16,$16
+#else
+ ori $21,$0,0xFF
+ dsll $23,$21,32
+ or $21,$23 # 0x000000FF000000FF
+ and $22,$16,$21 # byte swap(8)
+ dsrl $23,$16,24
+ dsll $22,24
+ and $23,$21
+ dsll $21,8 # 0x0000FF000000FF00
+ or $22,$23
+ and $23,$16,$21
+ dsrl $16,8
+ dsll $23,8
+ and $16,$21
+ or $22,$23
+ or $16,$22
+ dsrl $22,$16,32
+ dsll $16,32
+ or $16,$22
+#endif
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $23,$25,$30 # 8
+ drotr $21,$24,14
+ daddu $20,$16,$31
+ drotr $22,$24,18
+ and $23,$24
+ drotr $31,$24,41
+ xor $21,$22
+ drotr $22,$1,28
+ xor $23,$30 # Ch(e,f,g)
+ xor $21,$31 # Sigma1(e)
+
+ drotr $31,$1,34
+ daddu $20,$23
+ ld $23,64($6) # K[8]
+ xor $31,$22
+ drotr $22,$1,39
+ daddu $20,$21
+ and $21,$2,$3
+ xor $31,$22 # Sigma0(a)
+ xor $22,$2,$3
+#else
+ daddu $20,$16,$31 # 8
+ dsrl $31,$24,14
+ xor $23,$25,$30
+ dsll $22,$24,23
+ and $23,$24
+ dsrl $21,$24,18
+ xor $31,$22
+ dsll $22,$24,46
+ xor $31,$21
+ dsrl $21,$24,41
+ xor $31,$22
+ dsll $22,$24,50
+ xor $31,$21
+ xor $23,$30 # Ch(e,f,g)
+ xor $21,$22,$31 # Sigma1(e)
+
+ dsrl $31,$1,28
+ daddu $20,$23
+ ld $23,64($6) # K[8]
+ dsll $22,$1,25
+ daddu $20,$21
+ dsrl $21,$1,34
+ xor $31,$22
+ dsll $22,$1,30
+ xor $31,$21
+ dsrl $21,$1,39
+ xor $31,$22
+ dsll $22,$1,36
+ xor $31,$21
+ and $21,$2,$3
+ xor $31,$22 # Sigma0(a)
+ xor $22,$2,$3
+#endif
+ sd $16,64($29) # offload to ring buffer
+ daddu $31,$21
+ and $22,$1
+ daddu $20,$23 # +=K[8]
+ daddu $31,$22 # +=Maj(a,b,c)
+ daddu $7,$20
+ daddu $31,$20
+#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
+ ld $18,80($5)
+#else
+ ldl $18,87($5)
+ ldr $18,80($5)
+#endif
+#if defined(_MIPS_ARCH_MIPS64R2)
+ dsbh $17,$17 # byte swap(9)
+ dshd $17,$17
+#else
+ ori $22,$0,0xFF
+ dsll $8,$22,32
+ or $22,$8 # 0x000000FF000000FF
+ and $23,$17,$22 # byte swap(9)
+ dsrl $8,$17,24
+ dsll $23,24
+ and $8,$22
+ dsll $22,8 # 0x0000FF000000FF00
+ or $23,$8
+ and $8,$17,$22
+ dsrl $17,8
+ dsll $8,8
+ and $17,$22
+ or $23,$8
+ or $17,$23
+ dsrl $23,$17,32
+ dsll $17,32
+ or $17,$23
+#endif
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $8,$24,$25 # 9
+ drotr $22,$7,14
+ daddu $21,$17,$30
+ drotr $23,$7,18
+ and $8,$7
+ drotr $30,$7,41
+ xor $22,$23
+ drotr $23,$31,28
+ xor $8,$25 # Ch(e,f,g)
+ xor $22,$30 # Sigma1(e)
+
+ drotr $30,$31,34
+ daddu $21,$8
+ ld $8,72($6) # K[9]
+ xor $30,$23
+ drotr $23,$31,39
+ daddu $21,$22
+ and $22,$1,$2
+ xor $30,$23 # Sigma0(a)
+ xor $23,$1,$2
+#else
+ daddu $21,$17,$30 # 9
+ dsrl $30,$7,14
+ xor $8,$24,$25
+ dsll $23,$7,23
+ and $8,$7
+ dsrl $22,$7,18
+ xor $30,$23
+ dsll $23,$7,46
+ xor $30,$22
+ dsrl $22,$7,41
+ xor $30,$23
+ dsll $23,$7,50
+ xor $30,$22
+ xor $8,$25 # Ch(e,f,g)
+ xor $22,$23,$30 # Sigma1(e)
+
+ dsrl $30,$31,28
+ daddu $21,$8
+ ld $8,72($6) # K[9]
+ dsll $23,$31,25
+ daddu $21,$22
+ dsrl $22,$31,34
+ xor $30,$23
+ dsll $23,$31,30
+ xor $30,$22
+ dsrl $22,$31,39
+ xor $30,$23
+ dsll $23,$31,36
+ xor $30,$22
+ and $22,$1,$2
+ xor $30,$23 # Sigma0(a)
+ xor $23,$1,$2
+#endif
+ sd $17,72($29) # offload to ring buffer
+ daddu $30,$22
+ and $23,$31
+ daddu $21,$8 # +=K[9]
+ daddu $30,$23 # +=Maj(a,b,c)
+ daddu $3,$21
+ daddu $30,$21
+#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
+ ld $19,88($5)
+#else
+ ldl $19,95($5)
+ ldr $19,88($5)
+#endif
+#if defined(_MIPS_ARCH_MIPS64R2)
+ dsbh $18,$18 # byte swap(10)
+ dshd $18,$18
+#else
+ ori $23,$0,0xFF
+ dsll $9,$23,32
+ or $23,$9 # 0x000000FF000000FF
+ and $8,$18,$23 # byte swap(10)
+ dsrl $9,$18,24
+ dsll $8,24
+ and $9,$23
+ dsll $23,8 # 0x0000FF000000FF00
+ or $8,$9
+ and $9,$18,$23
+ dsrl $18,8
+ dsll $9,8
+ and $18,$23
+ or $8,$9
+ or $18,$8
+ dsrl $8,$18,32
+ dsll $18,32
+ or $18,$8
+#endif
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $9,$7,$24 # 10
+ drotr $23,$3,14
+ daddu $22,$18,$25
+ drotr $8,$3,18
+ and $9,$3
+ drotr $25,$3,41
+ xor $23,$8
+ drotr $8,$30,28
+ xor $9,$24 # Ch(e,f,g)
+ xor $23,$25 # Sigma1(e)
+
+ drotr $25,$30,34
+ daddu $22,$9
+ ld $9,80($6) # K[10]
+ xor $25,$8
+ drotr $8,$30,39
+ daddu $22,$23
+ and $23,$31,$1
+ xor $25,$8 # Sigma0(a)
+ xor $8,$31,$1
+#else
+ daddu $22,$18,$25 # 10
+ dsrl $25,$3,14
+ xor $9,$7,$24
+ dsll $8,$3,23
+ and $9,$3
+ dsrl $23,$3,18
+ xor $25,$8
+ dsll $8,$3,46
+ xor $25,$23
+ dsrl $23,$3,41
+ xor $25,$8
+ dsll $8,$3,50
+ xor $25,$23
+ xor $9,$24 # Ch(e,f,g)
+ xor $23,$8,$25 # Sigma1(e)
+
+ dsrl $25,$30,28
+ daddu $22,$9
+ ld $9,80($6) # K[10]
+ dsll $8,$30,25
+ daddu $22,$23
+ dsrl $23,$30,34
+ xor $25,$8
+ dsll $8,$30,30
+ xor $25,$23
+ dsrl $23,$30,39
+ xor $25,$8
+ dsll $8,$30,36
+ xor $25,$23
+ and $23,$31,$1
+ xor $25,$8 # Sigma0(a)
+ xor $8,$31,$1
+#endif
+ sd $18,80($29) # offload to ring buffer
+ daddu $25,$23
+ and $8,$30
+ daddu $22,$9 # +=K[10]
+ daddu $25,$8 # +=Maj(a,b,c)
+ daddu $2,$22
+ daddu $25,$22
+#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
+ ld $20,96($5)
+#else
+ ldl $20,103($5)
+ ldr $20,96($5)
+#endif
+#if defined(_MIPS_ARCH_MIPS64R2)
+ dsbh $19,$19 # byte swap(11)
+ dshd $19,$19
+#else
+ ori $8,$0,0xFF
+ dsll $10,$8,32
+ or $8,$10 # 0x000000FF000000FF
+ and $9,$19,$8 # byte swap(11)
+ dsrl $10,$19,24
+ dsll $9,24
+ and $10,$8
+ dsll $8,8 # 0x0000FF000000FF00
+ or $9,$10
+ and $10,$19,$8
+ dsrl $19,8
+ dsll $10,8
+ and $19,$8
+ or $9,$10
+ or $19,$9
+ dsrl $9,$19,32
+ dsll $19,32
+ or $19,$9
+#endif
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $10,$3,$7 # 11
+ drotr $8,$2,14
+ daddu $23,$19,$24
+ drotr $9,$2,18
+ and $10,$2
+ drotr $24,$2,41
+ xor $8,$9
+ drotr $9,$25,28
+ xor $10,$7 # Ch(e,f,g)
+ xor $8,$24 # Sigma1(e)
+
+ drotr $24,$25,34
+ daddu $23,$10
+ ld $10,88($6) # K[11]
+ xor $24,$9
+ drotr $9,$25,39
+ daddu $23,$8
+ and $8,$30,$31
+ xor $24,$9 # Sigma0(a)
+ xor $9,$30,$31
+#else
+ daddu $23,$19,$24 # 11
+ dsrl $24,$2,14
+ xor $10,$3,$7
+ dsll $9,$2,23
+ and $10,$2
+ dsrl $8,$2,18
+ xor $24,$9
+ dsll $9,$2,46
+ xor $24,$8
+ dsrl $8,$2,41
+ xor $24,$9
+ dsll $9,$2,50
+ xor $24,$8
+ xor $10,$7 # Ch(e,f,g)
+ xor $8,$9,$24 # Sigma1(e)
+
+ dsrl $24,$25,28
+ daddu $23,$10
+ ld $10,88($6) # K[11]
+ dsll $9,$25,25
+ daddu $23,$8
+ dsrl $8,$25,34
+ xor $24,$9
+ dsll $9,$25,30
+ xor $24,$8
+ dsrl $8,$25,39
+ xor $24,$9
+ dsll $9,$25,36
+ xor $24,$8
+ and $8,$30,$31
+ xor $24,$9 # Sigma0(a)
+ xor $9,$30,$31
+#endif
+ sd $19,88($29) # offload to ring buffer
+ daddu $24,$8
+ and $9,$25
+ daddu $23,$10 # +=K[11]
+ daddu $24,$9 # +=Maj(a,b,c)
+ daddu $1,$23
+ daddu $24,$23
+#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
+ ld $21,104($5)
+#else
+ ldl $21,111($5)
+ ldr $21,104($5)
+#endif
+#if defined(_MIPS_ARCH_MIPS64R2)
+ dsbh $20,$20 # byte swap(12)
+ dshd $20,$20
+#else
+ ori $9,$0,0xFF
+ dsll $11,$9,32
+ or $9,$11 # 0x000000FF000000FF
+ and $10,$20,$9 # byte swap(12)
+ dsrl $11,$20,24
+ dsll $10,24
+ and $11,$9
+ dsll $9,8 # 0x0000FF000000FF00
+ or $10,$11
+ and $11,$20,$9
+ dsrl $20,8
+ dsll $11,8
+ and $20,$9
+ or $10,$11
+ or $20,$10
+ dsrl $10,$20,32
+ dsll $20,32
+ or $20,$10
+#endif
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $11,$2,$3 # 12
+ drotr $9,$1,14
+ daddu $8,$20,$7
+ drotr $10,$1,18
+ and $11,$1
+ drotr $7,$1,41
+ xor $9,$10
+ drotr $10,$24,28
+ xor $11,$3 # Ch(e,f,g)
+ xor $9,$7 # Sigma1(e)
+
+ drotr $7,$24,34
+ daddu $8,$11
+ ld $11,96($6) # K[12]
+ xor $7,$10
+ drotr $10,$24,39
+ daddu $8,$9
+ and $9,$25,$30
+ xor $7,$10 # Sigma0(a)
+ xor $10,$25,$30
+#else
+ daddu $8,$20,$7 # 12
+ dsrl $7,$1,14
+ xor $11,$2,$3
+ dsll $10,$1,23
+ and $11,$1
+ dsrl $9,$1,18
+ xor $7,$10
+ dsll $10,$1,46
+ xor $7,$9
+ dsrl $9,$1,41
+ xor $7,$10
+ dsll $10,$1,50
+ xor $7,$9
+ xor $11,$3 # Ch(e,f,g)
+ xor $9,$10,$7 # Sigma1(e)
+
+ dsrl $7,$24,28
+ daddu $8,$11
+ ld $11,96($6) # K[12]
+ dsll $10,$24,25
+ daddu $8,$9
+ dsrl $9,$24,34
+ xor $7,$10
+ dsll $10,$24,30
+ xor $7,$9
+ dsrl $9,$24,39
+ xor $7,$10
+ dsll $10,$24,36
+ xor $7,$9
+ and $9,$25,$30
+ xor $7,$10 # Sigma0(a)
+ xor $10,$25,$30
+#endif
+ sd $20,96($29) # offload to ring buffer
+ daddu $7,$9
+ and $10,$24
+ daddu $8,$11 # +=K[12]
+ daddu $7,$10 # +=Maj(a,b,c)
+ daddu $31,$8
+ daddu $7,$8
+#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
+ ld $22,112($5)
+#else
+ ldl $22,119($5)
+ ldr $22,112($5)
+#endif
+#if defined(_MIPS_ARCH_MIPS64R2)
+ dsbh $21,$21 # byte swap(13)
+ dshd $21,$21
+#else
+ ori $10,$0,0xFF
+ dsll $12,$10,32
+ or $10,$12 # 0x000000FF000000FF
+ and $11,$21,$10 # byte swap(13)
+ dsrl $12,$21,24
+ dsll $11,24
+ and $12,$10
+ dsll $10,8 # 0x0000FF000000FF00
+ or $11,$12
+ and $12,$21,$10
+ dsrl $21,8
+ dsll $12,8
+ and $21,$10
+ or $11,$12
+ or $21,$11
+ dsrl $11,$21,32
+ dsll $21,32
+ or $21,$11
+#endif
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $12,$1,$2 # 13
+ drotr $10,$31,14
+ daddu $9,$21,$3
+ drotr $11,$31,18
+ and $12,$31
+ drotr $3,$31,41
+ xor $10,$11
+ drotr $11,$7,28
+ xor $12,$2 # Ch(e,f,g)
+ xor $10,$3 # Sigma1(e)
+
+ drotr $3,$7,34
+ daddu $9,$12
+ ld $12,104($6) # K[13]
+ xor $3,$11
+ drotr $11,$7,39
+ daddu $9,$10
+ and $10,$24,$25
+ xor $3,$11 # Sigma0(a)
+ xor $11,$24,$25
+#else
+ daddu $9,$21,$3 # 13
+ dsrl $3,$31,14
+ xor $12,$1,$2
+ dsll $11,$31,23
+ and $12,$31
+ dsrl $10,$31,18
+ xor $3,$11
+ dsll $11,$31,46
+ xor $3,$10
+ dsrl $10,$31,41
+ xor $3,$11
+ dsll $11,$31,50
+ xor $3,$10
+ xor $12,$2 # Ch(e,f,g)
+ xor $10,$11,$3 # Sigma1(e)
+
+ dsrl $3,$7,28
+ daddu $9,$12
+ ld $12,104($6) # K[13]
+ dsll $11,$7,25
+ daddu $9,$10
+ dsrl $10,$7,34
+ xor $3,$11
+ dsll $11,$7,30
+ xor $3,$10
+ dsrl $10,$7,39
+ xor $3,$11
+ dsll $11,$7,36
+ xor $3,$10
+ and $10,$24,$25
+ xor $3,$11 # Sigma0(a)
+ xor $11,$24,$25
+#endif
+ sd $21,104($29) # offload to ring buffer
+ daddu $3,$10
+ and $11,$7
+ daddu $9,$12 # +=K[13]
+ daddu $3,$11 # +=Maj(a,b,c)
+ daddu $30,$9
+ daddu $3,$9
+ ld $8,0($29) # prefetch from ring buffer
+#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
+ ld $23,120($5)
+#else
+ ldl $23,127($5)
+ ldr $23,120($5)
+#endif
+#if defined(_MIPS_ARCH_MIPS64R2)
+ dsbh $22,$22 # byte swap(14)
+ dshd $22,$22
+#else
+ ori $11,$0,0xFF
+ dsll $13,$11,32
+ or $11,$13 # 0x000000FF000000FF
+ and $12,$22,$11 # byte swap(14)
+ dsrl $13,$22,24
+ dsll $12,24
+ and $13,$11
+ dsll $11,8 # 0x0000FF000000FF00
+ or $12,$13
+ and $13,$22,$11
+ dsrl $22,8
+ dsll $13,8
+ and $22,$11
+ or $12,$13
+ or $22,$12
+ dsrl $12,$22,32
+ dsll $22,32
+ or $22,$12
+#endif
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $13,$31,$1 # 14
+ drotr $11,$30,14
+ daddu $10,$22,$2
+ drotr $12,$30,18
+ and $13,$30
+ drotr $2,$30,41
+ xor $11,$12
+ drotr $12,$3,28
+ xor $13,$1 # Ch(e,f,g)
+ xor $11,$2 # Sigma1(e)
+
+ drotr $2,$3,34
+ daddu $10,$13
+ ld $13,112($6) # K[14]
+ xor $2,$12
+ drotr $12,$3,39
+ daddu $10,$11
+ and $11,$7,$24
+ xor $2,$12 # Sigma0(a)
+ xor $12,$7,$24
+#else
+ daddu $10,$22,$2 # 14
+ dsrl $2,$30,14
+ xor $13,$31,$1
+ dsll $12,$30,23
+ and $13,$30
+ dsrl $11,$30,18
+ xor $2,$12
+ dsll $12,$30,46
+ xor $2,$11
+ dsrl $11,$30,41
+ xor $2,$12
+ dsll $12,$30,50
+ xor $2,$11
+ xor $13,$1 # Ch(e,f,g)
+ xor $11,$12,$2 # Sigma1(e)
+
+ dsrl $2,$3,28
+ daddu $10,$13
+ ld $13,112($6) # K[14]
+ dsll $12,$3,25
+ daddu $10,$11
+ dsrl $11,$3,34
+ xor $2,$12
+ dsll $12,$3,30
+ xor $2,$11
+ dsrl $11,$3,39
+ xor $2,$12
+ dsll $12,$3,36
+ xor $2,$11
+ and $11,$7,$24
+ xor $2,$12 # Sigma0(a)
+ xor $12,$7,$24
+#endif
+ sd $22,112($29) # offload to ring buffer
+ daddu $2,$11
+ and $12,$3
+ daddu $10,$13 # +=K[14]
+ daddu $2,$12 # +=Maj(a,b,c)
+ daddu $25,$10
+ daddu $2,$10
+ ld $9,8($29) # prefetch from ring buffer
+#if defined(_MIPS_ARCH_MIPS64R2)
+ dsbh $23,$23 # byte swap(15)
+ dshd $23,$23
+#else
+ ori $12,$0,0xFF
+ dsll $14,$12,32
+ or $12,$14 # 0x000000FF000000FF
+ and $13,$23,$12 # byte swap(15)
+ dsrl $14,$23,24
+ dsll $13,24
+ and $14,$12
+ dsll $12,8 # 0x0000FF000000FF00
+ or $13,$14
+ and $14,$23,$12
+ dsrl $23,8
+ dsll $14,8
+ and $23,$12
+ or $13,$14
+ or $23,$13
+ dsrl $13,$23,32
+ dsll $23,32
+ or $23,$13
+#endif
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $14,$30,$31 # 15
+ drotr $12,$25,14
+ daddu $11,$23,$1
+ drotr $13,$25,18
+ and $14,$25
+ drotr $1,$25,41
+ xor $12,$13
+ drotr $13,$2,28
+ xor $14,$31 # Ch(e,f,g)
+ xor $12,$1 # Sigma1(e)
+
+ drotr $1,$2,34
+ daddu $11,$14
+ ld $14,120($6) # K[15]
+ xor $1,$13
+ drotr $13,$2,39
+ daddu $11,$12
+ and $12,$3,$7
+ xor $1,$13 # Sigma0(a)
+ xor $13,$3,$7
+#else
+ daddu $11,$23,$1 # 15
+ dsrl $1,$25,14
+ xor $14,$30,$31
+ dsll $13,$25,23
+ and $14,$25
+ dsrl $12,$25,18
+ xor $1,$13
+ dsll $13,$25,46
+ xor $1,$12
+ dsrl $12,$25,41
+ xor $1,$13
+ dsll $13,$25,50
+ xor $1,$12
+ xor $14,$31 # Ch(e,f,g)
+ xor $12,$13,$1 # Sigma1(e)
+
+ dsrl $1,$2,28
+ daddu $11,$14
+ ld $14,120($6) # K[15]
+ dsll $13,$2,25
+ daddu $11,$12
+ dsrl $12,$2,34
+ xor $1,$13
+ dsll $13,$2,30
+ xor $1,$12
+ dsrl $12,$2,39
+ xor $1,$13
+ dsll $13,$2,36
+ xor $1,$12
+ and $12,$3,$7
+ xor $1,$13 # Sigma0(a)
+ xor $13,$3,$7
+#endif
+ sd $23,120($29) # offload to ring buffer
+ daddu $1,$12
+ and $13,$2
+ daddu $11,$14 # +=K[15]
+ daddu $1,$13 # +=Maj(a,b,c)
+ daddu $24,$11
+ daddu $1,$11
+ ld $10,16($29) # prefetch from ring buffer
+ b .L16_xx
+.align 4
+.L16_xx:
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ dsrl $14,$9,7 # Xupdate(16)
+ drotr $12,$9,1
+ daddu $8,$17 # +=X[i+9]
+ xor $14,$12
+ drotr $12,$9,8
+
+ dsrl $15,$22,6
+ drotr $13,$22,19
+ xor $14,$12 # sigma0(X[i+1])
+ drotr $12,$22,61
+ xor $15,$13
+ daddu $8,$14
+#else
+ dsrl $14,$9,7 # Xupdate(16)
+ daddu $8,$17 # +=X[i+9]
+ dsll $13,$9,56
+ dsrl $12,$9,1
+ xor $14,$13
+ dsll $13,7
+ xor $14,$12
+ dsrl $12,$9,8
+ xor $14,$13
+
+ dsrl $15,$22,6
+ xor $14,$12 # sigma0(X[i+1])
+ dsll $13,$22,3
+ daddu $8,$14
+ dsrl $12,$22,19
+ xor $15,$13
+ dsll $13,42
+ xor $15,$12
+ dsrl $12,$22,61
+ xor $15,$13
+#endif
+ xor $15,$12 # sigma1(X[i+14])
+ daddu $8,$15
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $15,$25,$30 # 16
+ drotr $13,$24,14
+ daddu $12,$8,$31
+ drotr $14,$24,18
+ and $15,$24
+ drotr $31,$24,41
+ xor $13,$14
+ drotr $14,$1,28
+ xor $15,$30 # Ch(e,f,g)
+ xor $13,$31 # Sigma1(e)
+
+ drotr $31,$1,34
+ daddu $12,$15
+ ld $15,128($6) # K[16]
+ xor $31,$14
+ drotr $14,$1,39
+ daddu $12,$13
+ and $13,$2,$3
+ xor $31,$14 # Sigma0(a)
+ xor $14,$2,$3
+#else
+ daddu $12,$8,$31 # 16
+ dsrl $31,$24,14
+ xor $15,$25,$30
+ dsll $14,$24,23
+ and $15,$24
+ dsrl $13,$24,18
+ xor $31,$14
+ dsll $14,$24,46
+ xor $31,$13
+ dsrl $13,$24,41
+ xor $31,$14
+ dsll $14,$24,50
+ xor $31,$13
+ xor $15,$30 # Ch(e,f,g)
+ xor $13,$14,$31 # Sigma1(e)
+
+ dsrl $31,$1,28
+ daddu $12,$15
+ ld $15,128($6) # K[16]
+ dsll $14,$1,25
+ daddu $12,$13
+ dsrl $13,$1,34
+ xor $31,$14
+ dsll $14,$1,30
+ xor $31,$13
+ dsrl $13,$1,39
+ xor $31,$14
+ dsll $14,$1,36
+ xor $31,$13
+ and $13,$2,$3
+ xor $31,$14 # Sigma0(a)
+ xor $14,$2,$3
+#endif
+ sd $8,0($29) # offload to ring buffer
+ daddu $31,$13
+ and $14,$1
+ daddu $12,$15 # +=K[16]
+ daddu $31,$14 # +=Maj(a,b,c)
+ daddu $7,$12
+ daddu $31,$12
+ ld $11,24($29) # prefetch from ring buffer
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ dsrl $15,$10,7 # Xupdate(17)
+ drotr $13,$10,1
+ daddu $9,$18 # +=X[i+9]
+ xor $15,$13
+ drotr $13,$10,8
+
+ dsrl $16,$23,6
+ drotr $14,$23,19
+ xor $15,$13 # sigma0(X[i+1])
+ drotr $13,$23,61
+ xor $16,$14
+ daddu $9,$15
+#else
+ dsrl $15,$10,7 # Xupdate(17)
+ daddu $9,$18 # +=X[i+9]
+ dsll $14,$10,56
+ dsrl $13,$10,1
+ xor $15,$14
+ dsll $14,7
+ xor $15,$13
+ dsrl $13,$10,8
+ xor $15,$14
+
+ dsrl $16,$23,6
+ xor $15,$13 # sigma0(X[i+1])
+ dsll $14,$23,3
+ daddu $9,$15
+ dsrl $13,$23,19
+ xor $16,$14
+ dsll $14,42
+ xor $16,$13
+ dsrl $13,$23,61
+ xor $16,$14
+#endif
+ xor $16,$13 # sigma1(X[i+14])
+ daddu $9,$16
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $16,$24,$25 # 17
+ drotr $14,$7,14
+ daddu $13,$9,$30
+ drotr $15,$7,18
+ and $16,$7
+ drotr $30,$7,41
+ xor $14,$15
+ drotr $15,$31,28
+ xor $16,$25 # Ch(e,f,g)
+ xor $14,$30 # Sigma1(e)
+
+ drotr $30,$31,34
+ daddu $13,$16
+ ld $16,136($6) # K[17]
+ xor $30,$15
+ drotr $15,$31,39
+ daddu $13,$14
+ and $14,$1,$2
+ xor $30,$15 # Sigma0(a)
+ xor $15,$1,$2
+#else
+ daddu $13,$9,$30 # 17
+ dsrl $30,$7,14
+ xor $16,$24,$25
+ dsll $15,$7,23
+ and $16,$7
+ dsrl $14,$7,18
+ xor $30,$15
+ dsll $15,$7,46
+ xor $30,$14
+ dsrl $14,$7,41
+ xor $30,$15
+ dsll $15,$7,50
+ xor $30,$14
+ xor $16,$25 # Ch(e,f,g)
+ xor $14,$15,$30 # Sigma1(e)
+
+ dsrl $30,$31,28
+ daddu $13,$16
+ ld $16,136($6) # K[17]
+ dsll $15,$31,25
+ daddu $13,$14
+ dsrl $14,$31,34
+ xor $30,$15
+ dsll $15,$31,30
+ xor $30,$14
+ dsrl $14,$31,39
+ xor $30,$15
+ dsll $15,$31,36
+ xor $30,$14
+ and $14,$1,$2
+ xor $30,$15 # Sigma0(a)
+ xor $15,$1,$2
+#endif
+ sd $9,8($29) # offload to ring buffer
+ daddu $30,$14
+ and $15,$31
+ daddu $13,$16 # +=K[17]
+ daddu $30,$15 # +=Maj(a,b,c)
+ daddu $3,$13
+ daddu $30,$13
+ ld $12,32($29) # prefetch from ring buffer
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ dsrl $16,$11,7 # Xupdate(18)
+ drotr $14,$11,1
+ daddu $10,$19 # +=X[i+9]
+ xor $16,$14
+ drotr $14,$11,8
+
+ dsrl $17,$8,6
+ drotr $15,$8,19
+ xor $16,$14 # sigma0(X[i+1])
+ drotr $14,$8,61
+ xor $17,$15
+ daddu $10,$16
+#else
+ dsrl $16,$11,7 # Xupdate(18)
+ daddu $10,$19 # +=X[i+9]
+ dsll $15,$11,56
+ dsrl $14,$11,1
+ xor $16,$15
+ dsll $15,7
+ xor $16,$14
+ dsrl $14,$11,8
+ xor $16,$15
+
+ dsrl $17,$8,6
+ xor $16,$14 # sigma0(X[i+1])
+ dsll $15,$8,3
+ daddu $10,$16
+ dsrl $14,$8,19
+ xor $17,$15
+ dsll $15,42
+ xor $17,$14
+ dsrl $14,$8,61
+ xor $17,$15
+#endif
+ xor $17,$14 # sigma1(X[i+14])
+ daddu $10,$17
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $17,$7,$24 # 18
+ drotr $15,$3,14
+ daddu $14,$10,$25
+ drotr $16,$3,18
+ and $17,$3
+ drotr $25,$3,41
+ xor $15,$16
+ drotr $16,$30,28
+ xor $17,$24 # Ch(e,f,g)
+ xor $15,$25 # Sigma1(e)
+
+ drotr $25,$30,34
+ daddu $14,$17
+ ld $17,144($6) # K[18]
+ xor $25,$16
+ drotr $16,$30,39
+ daddu $14,$15
+ and $15,$31,$1
+ xor $25,$16 # Sigma0(a)
+ xor $16,$31,$1
+#else
+ daddu $14,$10,$25 # 18
+ dsrl $25,$3,14
+ xor $17,$7,$24
+ dsll $16,$3,23
+ and $17,$3
+ dsrl $15,$3,18
+ xor $25,$16
+ dsll $16,$3,46
+ xor $25,$15
+ dsrl $15,$3,41
+ xor $25,$16
+ dsll $16,$3,50
+ xor $25,$15
+ xor $17,$24 # Ch(e,f,g)
+ xor $15,$16,$25 # Sigma1(e)
+
+ dsrl $25,$30,28
+ daddu $14,$17
+ ld $17,144($6) # K[18]
+ dsll $16,$30,25
+ daddu $14,$15
+ dsrl $15,$30,34
+ xor $25,$16
+ dsll $16,$30,30
+ xor $25,$15
+ dsrl $15,$30,39
+ xor $25,$16
+ dsll $16,$30,36
+ xor $25,$15
+ and $15,$31,$1
+ xor $25,$16 # Sigma0(a)
+ xor $16,$31,$1
+#endif
+ sd $10,16($29) # offload to ring buffer
+ daddu $25,$15
+ and $16,$30
+ daddu $14,$17 # +=K[18]
+ daddu $25,$16 # +=Maj(a,b,c)
+ daddu $2,$14
+ daddu $25,$14
+ ld $13,40($29) # prefetch from ring buffer
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ dsrl $17,$12,7 # Xupdate(19)
+ drotr $15,$12,1
+ daddu $11,$20 # +=X[i+9]
+ xor $17,$15
+ drotr $15,$12,8
+
+ dsrl $18,$9,6
+ drotr $16,$9,19
+ xor $17,$15 # sigma0(X[i+1])
+ drotr $15,$9,61
+ xor $18,$16
+ daddu $11,$17
+#else
+ dsrl $17,$12,7 # Xupdate(19)
+ daddu $11,$20 # +=X[i+9]
+ dsll $16,$12,56
+ dsrl $15,$12,1
+ xor $17,$16
+ dsll $16,7
+ xor $17,$15
+ dsrl $15,$12,8
+ xor $17,$16
+
+ dsrl $18,$9,6
+ xor $17,$15 # sigma0(X[i+1])
+ dsll $16,$9,3
+ daddu $11,$17
+ dsrl $15,$9,19
+ xor $18,$16
+ dsll $16,42
+ xor $18,$15
+ dsrl $15,$9,61
+ xor $18,$16
+#endif
+ xor $18,$15 # sigma1(X[i+14])
+ daddu $11,$18
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $18,$3,$7 # 19
+ drotr $16,$2,14
+ daddu $15,$11,$24
+ drotr $17,$2,18
+ and $18,$2
+ drotr $24,$2,41
+ xor $16,$17
+ drotr $17,$25,28
+ xor $18,$7 # Ch(e,f,g)
+ xor $16,$24 # Sigma1(e)
+
+ drotr $24,$25,34
+ daddu $15,$18
+ ld $18,152($6) # K[19]
+ xor $24,$17
+ drotr $17,$25,39
+ daddu $15,$16
+ and $16,$30,$31
+ xor $24,$17 # Sigma0(a)
+ xor $17,$30,$31
+#else
+ daddu $15,$11,$24 # 19
+ dsrl $24,$2,14
+ xor $18,$3,$7
+ dsll $17,$2,23
+ and $18,$2
+ dsrl $16,$2,18
+ xor $24,$17
+ dsll $17,$2,46
+ xor $24,$16
+ dsrl $16,$2,41
+ xor $24,$17
+ dsll $17,$2,50
+ xor $24,$16
+ xor $18,$7 # Ch(e,f,g)
+ xor $16,$17,$24 # Sigma1(e)
+
+ dsrl $24,$25,28
+ daddu $15,$18
+ ld $18,152($6) # K[19]
+ dsll $17,$25,25
+ daddu $15,$16
+ dsrl $16,$25,34
+ xor $24,$17
+ dsll $17,$25,30
+ xor $24,$16
+ dsrl $16,$25,39
+ xor $24,$17
+ dsll $17,$25,36
+ xor $24,$16
+ and $16,$30,$31
+ xor $24,$17 # Sigma0(a)
+ xor $17,$30,$31
+#endif
+ sd $11,24($29) # offload to ring buffer
+ daddu $24,$16
+ and $17,$25
+ daddu $15,$18 # +=K[19]
+ daddu $24,$17 # +=Maj(a,b,c)
+ daddu $1,$15
+ daddu $24,$15
+ ld $14,48($29) # prefetch from ring buffer
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ dsrl $18,$13,7 # Xupdate(20)
+ drotr $16,$13,1
+ daddu $12,$21 # +=X[i+9]
+ xor $18,$16
+ drotr $16,$13,8
+
+ dsrl $19,$10,6
+ drotr $17,$10,19
+ xor $18,$16 # sigma0(X[i+1])
+ drotr $16,$10,61
+ xor $19,$17
+ daddu $12,$18
+#else
+ dsrl $18,$13,7 # Xupdate(20)
+ daddu $12,$21 # +=X[i+9]
+ dsll $17,$13,56
+ dsrl $16,$13,1
+ xor $18,$17
+ dsll $17,7
+ xor $18,$16
+ dsrl $16,$13,8
+ xor $18,$17
+
+ dsrl $19,$10,6
+ xor $18,$16 # sigma0(X[i+1])
+ dsll $17,$10,3
+ daddu $12,$18
+ dsrl $16,$10,19
+ xor $19,$17
+ dsll $17,42
+ xor $19,$16
+ dsrl $16,$10,61
+ xor $19,$17
+#endif
+ xor $19,$16 # sigma1(X[i+14])
+ daddu $12,$19
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $19,$2,$3 # 20
+ drotr $17,$1,14
+ daddu $16,$12,$7
+ drotr $18,$1,18
+ and $19,$1
+ drotr $7,$1,41
+ xor $17,$18
+ drotr $18,$24,28
+ xor $19,$3 # Ch(e,f,g)
+ xor $17,$7 # Sigma1(e)
+
+ drotr $7,$24,34
+ daddu $16,$19
+ ld $19,160($6) # K[20]
+ xor $7,$18
+ drotr $18,$24,39
+ daddu $16,$17
+ and $17,$25,$30
+ xor $7,$18 # Sigma0(a)
+ xor $18,$25,$30
+#else
+ daddu $16,$12,$7 # 20
+ dsrl $7,$1,14
+ xor $19,$2,$3
+ dsll $18,$1,23
+ and $19,$1
+ dsrl $17,$1,18
+ xor $7,$18
+ dsll $18,$1,46
+ xor $7,$17
+ dsrl $17,$1,41
+ xor $7,$18
+ dsll $18,$1,50
+ xor $7,$17
+ xor $19,$3 # Ch(e,f,g)
+ xor $17,$18,$7 # Sigma1(e)
+
+ dsrl $7,$24,28
+ daddu $16,$19
+ ld $19,160($6) # K[20]
+ dsll $18,$24,25
+ daddu $16,$17
+ dsrl $17,$24,34
+ xor $7,$18
+ dsll $18,$24,30
+ xor $7,$17
+ dsrl $17,$24,39
+ xor $7,$18
+ dsll $18,$24,36
+ xor $7,$17
+ and $17,$25,$30
+ xor $7,$18 # Sigma0(a)
+ xor $18,$25,$30
+#endif
+ sd $12,32($29) # offload to ring buffer
+ daddu $7,$17
+ and $18,$24
+ daddu $16,$19 # +=K[20]
+ daddu $7,$18 # +=Maj(a,b,c)
+ daddu $31,$16
+ daddu $7,$16
+ ld $15,56($29) # prefetch from ring buffer
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ dsrl $19,$14,7 # Xupdate(21)
+ drotr $17,$14,1
+ daddu $13,$22 # +=X[i+9]
+ xor $19,$17
+ drotr $17,$14,8
+
+ dsrl $20,$11,6
+ drotr $18,$11,19
+ xor $19,$17 # sigma0(X[i+1])
+ drotr $17,$11,61
+ xor $20,$18
+ daddu $13,$19
+#else
+ dsrl $19,$14,7 # Xupdate(21)
+ daddu $13,$22 # +=X[i+9]
+ dsll $18,$14,56
+ dsrl $17,$14,1
+ xor $19,$18
+ dsll $18,7
+ xor $19,$17
+ dsrl $17,$14,8
+ xor $19,$18
+
+ dsrl $20,$11,6
+ xor $19,$17 # sigma0(X[i+1])
+ dsll $18,$11,3
+ daddu $13,$19
+ dsrl $17,$11,19
+ xor $20,$18
+ dsll $18,42
+ xor $20,$17
+ dsrl $17,$11,61
+ xor $20,$18
+#endif
+ xor $20,$17 # sigma1(X[i+14])
+ daddu $13,$20
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $20,$1,$2 # 21
+ drotr $18,$31,14
+ daddu $17,$13,$3
+ drotr $19,$31,18
+ and $20,$31
+ drotr $3,$31,41
+ xor $18,$19
+ drotr $19,$7,28
+ xor $20,$2 # Ch(e,f,g)
+ xor $18,$3 # Sigma1(e)
+
+ drotr $3,$7,34
+ daddu $17,$20
+ ld $20,168($6) # K[21]
+ xor $3,$19
+ drotr $19,$7,39
+ daddu $17,$18
+ and $18,$24,$25
+ xor $3,$19 # Sigma0(a)
+ xor $19,$24,$25
+#else
+ daddu $17,$13,$3 # 21
+ dsrl $3,$31,14
+ xor $20,$1,$2
+ dsll $19,$31,23
+ and $20,$31
+ dsrl $18,$31,18
+ xor $3,$19
+ dsll $19,$31,46
+ xor $3,$18
+ dsrl $18,$31,41
+ xor $3,$19
+ dsll $19,$31,50
+ xor $3,$18
+ xor $20,$2 # Ch(e,f,g)
+ xor $18,$19,$3 # Sigma1(e)
+
+ dsrl $3,$7,28
+ daddu $17,$20
+ ld $20,168($6) # K[21]
+ dsll $19,$7,25
+ daddu $17,$18
+ dsrl $18,$7,34
+ xor $3,$19
+ dsll $19,$7,30
+ xor $3,$18
+ dsrl $18,$7,39
+ xor $3,$19
+ dsll $19,$7,36
+ xor $3,$18
+ and $18,$24,$25
+ xor $3,$19 # Sigma0(a)
+ xor $19,$24,$25
+#endif
+ sd $13,40($29) # offload to ring buffer
+ daddu $3,$18
+ and $19,$7
+ daddu $17,$20 # +=K[21]
+ daddu $3,$19 # +=Maj(a,b,c)
+ daddu $30,$17
+ daddu $3,$17
+ ld $16,64($29) # prefetch from ring buffer
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ dsrl $20,$15,7 # Xupdate(22)
+ drotr $18,$15,1
+ daddu $14,$23 # +=X[i+9]
+ xor $20,$18
+ drotr $18,$15,8
+
+ dsrl $21,$12,6
+ drotr $19,$12,19
+ xor $20,$18 # sigma0(X[i+1])
+ drotr $18,$12,61
+ xor $21,$19
+ daddu $14,$20
+#else
+ dsrl $20,$15,7 # Xupdate(22)
+ daddu $14,$23 # +=X[i+9]
+ dsll $19,$15,56
+ dsrl $18,$15,1
+ xor $20,$19
+ dsll $19,7
+ xor $20,$18
+ dsrl $18,$15,8
+ xor $20,$19
+
+ dsrl $21,$12,6
+ xor $20,$18 # sigma0(X[i+1])
+ dsll $19,$12,3
+ daddu $14,$20
+ dsrl $18,$12,19
+ xor $21,$19
+ dsll $19,42
+ xor $21,$18
+ dsrl $18,$12,61
+ xor $21,$19
+#endif
+ xor $21,$18 # sigma1(X[i+14])
+ daddu $14,$21
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $21,$31,$1 # 22
+ drotr $19,$30,14
+ daddu $18,$14,$2
+ drotr $20,$30,18
+ and $21,$30
+ drotr $2,$30,41
+ xor $19,$20
+ drotr $20,$3,28
+ xor $21,$1 # Ch(e,f,g)
+ xor $19,$2 # Sigma1(e)
+
+ drotr $2,$3,34
+ daddu $18,$21
+ ld $21,176($6) # K[22]
+ xor $2,$20
+ drotr $20,$3,39
+ daddu $18,$19
+ and $19,$7,$24
+ xor $2,$20 # Sigma0(a)
+ xor $20,$7,$24
+#else
+ daddu $18,$14,$2 # 22
+ dsrl $2,$30,14
+ xor $21,$31,$1
+ dsll $20,$30,23
+ and $21,$30
+ dsrl $19,$30,18
+ xor $2,$20
+ dsll $20,$30,46
+ xor $2,$19
+ dsrl $19,$30,41
+ xor $2,$20
+ dsll $20,$30,50
+ xor $2,$19
+ xor $21,$1 # Ch(e,f,g)
+ xor $19,$20,$2 # Sigma1(e)
+
+ dsrl $2,$3,28
+ daddu $18,$21
+ ld $21,176($6) # K[22]
+ dsll $20,$3,25
+ daddu $18,$19
+ dsrl $19,$3,34
+ xor $2,$20
+ dsll $20,$3,30
+ xor $2,$19
+ dsrl $19,$3,39
+ xor $2,$20
+ dsll $20,$3,36
+ xor $2,$19
+ and $19,$7,$24
+ xor $2,$20 # Sigma0(a)
+ xor $20,$7,$24
+#endif
+ sd $14,48($29) # offload to ring buffer
+ daddu $2,$19
+ and $20,$3
+ daddu $18,$21 # +=K[22]
+ daddu $2,$20 # +=Maj(a,b,c)
+ daddu $25,$18
+ daddu $2,$18
+ ld $17,72($29) # prefetch from ring buffer
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ dsrl $21,$16,7 # Xupdate(23)
+ drotr $19,$16,1
+ daddu $15,$8 # +=X[i+9]
+ xor $21,$19
+ drotr $19,$16,8
+
+ dsrl $22,$13,6
+ drotr $20,$13,19
+ xor $21,$19 # sigma0(X[i+1])
+ drotr $19,$13,61
+ xor $22,$20
+ daddu $15,$21
+#else
+ dsrl $21,$16,7 # Xupdate(23)
+ daddu $15,$8 # +=X[i+9]
+ dsll $20,$16,56
+ dsrl $19,$16,1
+ xor $21,$20
+ dsll $20,7
+ xor $21,$19
+ dsrl $19,$16,8
+ xor $21,$20
+
+ dsrl $22,$13,6
+ xor $21,$19 # sigma0(X[i+1])
+ dsll $20,$13,3
+ daddu $15,$21
+ dsrl $19,$13,19
+ xor $22,$20
+ dsll $20,42
+ xor $22,$19
+ dsrl $19,$13,61
+ xor $22,$20
+#endif
+ xor $22,$19 # sigma1(X[i+14])
+ daddu $15,$22
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $22,$30,$31 # 23
+ drotr $20,$25,14
+ daddu $19,$15,$1
+ drotr $21,$25,18
+ and $22,$25
+ drotr $1,$25,41
+ xor $20,$21
+ drotr $21,$2,28
+ xor $22,$31 # Ch(e,f,g)
+ xor $20,$1 # Sigma1(e)
+
+ drotr $1,$2,34
+ daddu $19,$22
+ ld $22,184($6) # K[23]
+ xor $1,$21
+ drotr $21,$2,39
+ daddu $19,$20
+ and $20,$3,$7
+ xor $1,$21 # Sigma0(a)
+ xor $21,$3,$7
+#else
+ daddu $19,$15,$1 # 23
+ dsrl $1,$25,14
+ xor $22,$30,$31
+ dsll $21,$25,23
+ and $22,$25
+ dsrl $20,$25,18
+ xor $1,$21
+ dsll $21,$25,46
+ xor $1,$20
+ dsrl $20,$25,41
+ xor $1,$21
+ dsll $21,$25,50
+ xor $1,$20
+ xor $22,$31 # Ch(e,f,g)
+ xor $20,$21,$1 # Sigma1(e)
+
+ dsrl $1,$2,28
+ daddu $19,$22
+ ld $22,184($6) # K[23]
+ dsll $21,$2,25
+ daddu $19,$20
+ dsrl $20,$2,34
+ xor $1,$21
+ dsll $21,$2,30
+ xor $1,$20
+ dsrl $20,$2,39
+ xor $1,$21
+ dsll $21,$2,36
+ xor $1,$20
+ and $20,$3,$7
+ xor $1,$21 # Sigma0(a)
+ xor $21,$3,$7
+#endif
+ sd $15,56($29) # offload to ring buffer
+ daddu $1,$20
+ and $21,$2
+ daddu $19,$22 # +=K[23]
+ daddu $1,$21 # +=Maj(a,b,c)
+ daddu $24,$19
+ daddu $1,$19
+ ld $18,80($29) # prefetch from ring buffer
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ dsrl $22,$17,7 # Xupdate(24)
+ drotr $20,$17,1
+ daddu $16,$9 # +=X[i+9]
+ xor $22,$20
+ drotr $20,$17,8
+
+ dsrl $23,$14,6
+ drotr $21,$14,19
+ xor $22,$20 # sigma0(X[i+1])
+ drotr $20,$14,61
+ xor $23,$21
+ daddu $16,$22
+#else
+ dsrl $22,$17,7 # Xupdate(24)
+ daddu $16,$9 # +=X[i+9]
+ dsll $21,$17,56
+ dsrl $20,$17,1
+ xor $22,$21
+ dsll $21,7
+ xor $22,$20
+ dsrl $20,$17,8
+ xor $22,$21
+
+ dsrl $23,$14,6
+ xor $22,$20 # sigma0(X[i+1])
+ dsll $21,$14,3
+ daddu $16,$22
+ dsrl $20,$14,19
+ xor $23,$21
+ dsll $21,42
+ xor $23,$20
+ dsrl $20,$14,61
+ xor $23,$21
+#endif
+ xor $23,$20 # sigma1(X[i+14])
+ daddu $16,$23
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $23,$25,$30 # 24
+ drotr $21,$24,14
+ daddu $20,$16,$31
+ drotr $22,$24,18
+ and $23,$24
+ drotr $31,$24,41
+ xor $21,$22
+ drotr $22,$1,28
+ xor $23,$30 # Ch(e,f,g)
+ xor $21,$31 # Sigma1(e)
+
+ drotr $31,$1,34
+ daddu $20,$23
+ ld $23,192($6) # K[24]
+ xor $31,$22
+ drotr $22,$1,39
+ daddu $20,$21
+ and $21,$2,$3
+ xor $31,$22 # Sigma0(a)
+ xor $22,$2,$3
+#else
+ daddu $20,$16,$31 # 24
+ dsrl $31,$24,14
+ xor $23,$25,$30
+ dsll $22,$24,23
+ and $23,$24
+ dsrl $21,$24,18
+ xor $31,$22
+ dsll $22,$24,46
+ xor $31,$21
+ dsrl $21,$24,41
+ xor $31,$22
+ dsll $22,$24,50
+ xor $31,$21
+ xor $23,$30 # Ch(e,f,g)
+ xor $21,$22,$31 # Sigma1(e)
+
+ dsrl $31,$1,28
+ daddu $20,$23
+ ld $23,192($6) # K[24]
+ dsll $22,$1,25
+ daddu $20,$21
+ dsrl $21,$1,34
+ xor $31,$22
+ dsll $22,$1,30
+ xor $31,$21
+ dsrl $21,$1,39
+ xor $31,$22
+ dsll $22,$1,36
+ xor $31,$21
+ and $21,$2,$3
+ xor $31,$22 # Sigma0(a)
+ xor $22,$2,$3
+#endif
+ sd $16,64($29) # offload to ring buffer
+ daddu $31,$21
+ and $22,$1
+ daddu $20,$23 # +=K[24]
+ daddu $31,$22 # +=Maj(a,b,c)
+ daddu $7,$20
+ daddu $31,$20
+ ld $19,88($29) # prefetch from ring buffer
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ dsrl $23,$18,7 # Xupdate(25)
+ drotr $21,$18,1
+ daddu $17,$10 # +=X[i+9]
+ xor $23,$21
+ drotr $21,$18,8
+
+ dsrl $8,$15,6
+ drotr $22,$15,19
+ xor $23,$21 # sigma0(X[i+1])
+ drotr $21,$15,61
+ xor $8,$22
+ daddu $17,$23
+#else
+ dsrl $23,$18,7 # Xupdate(25)
+ daddu $17,$10 # +=X[i+9]
+ dsll $22,$18,56
+ dsrl $21,$18,1
+ xor $23,$22
+ dsll $22,7
+ xor $23,$21
+ dsrl $21,$18,8
+ xor $23,$22
+
+ dsrl $8,$15,6
+ xor $23,$21 # sigma0(X[i+1])
+ dsll $22,$15,3
+ daddu $17,$23
+ dsrl $21,$15,19
+ xor $8,$22
+ dsll $22,42
+ xor $8,$21
+ dsrl $21,$15,61
+ xor $8,$22
+#endif
+ xor $8,$21 # sigma1(X[i+14])
+ daddu $17,$8
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $8,$24,$25 # 25
+ drotr $22,$7,14
+ daddu $21,$17,$30
+ drotr $23,$7,18
+ and $8,$7
+ drotr $30,$7,41
+ xor $22,$23
+ drotr $23,$31,28
+ xor $8,$25 # Ch(e,f,g)
+ xor $22,$30 # Sigma1(e)
+
+ drotr $30,$31,34
+ daddu $21,$8
+ ld $8,200($6) # K[25]
+ xor $30,$23
+ drotr $23,$31,39
+ daddu $21,$22
+ and $22,$1,$2
+ xor $30,$23 # Sigma0(a)
+ xor $23,$1,$2
+#else
+ daddu $21,$17,$30 # 25
+ dsrl $30,$7,14
+ xor $8,$24,$25
+ dsll $23,$7,23
+ and $8,$7
+ dsrl $22,$7,18
+ xor $30,$23
+ dsll $23,$7,46
+ xor $30,$22
+ dsrl $22,$7,41
+ xor $30,$23
+ dsll $23,$7,50
+ xor $30,$22
+ xor $8,$25 # Ch(e,f,g)
+ xor $22,$23,$30 # Sigma1(e)
+
+ dsrl $30,$31,28
+ daddu $21,$8
+ ld $8,200($6) # K[25]
+ dsll $23,$31,25
+ daddu $21,$22
+ dsrl $22,$31,34
+ xor $30,$23
+ dsll $23,$31,30
+ xor $30,$22
+ dsrl $22,$31,39
+ xor $30,$23
+ dsll $23,$31,36
+ xor $30,$22
+ and $22,$1,$2
+ xor $30,$23 # Sigma0(a)
+ xor $23,$1,$2
+#endif
+ sd $17,72($29) # offload to ring buffer
+ daddu $30,$22
+ and $23,$31
+ daddu $21,$8 # +=K[25]
+ daddu $30,$23 # +=Maj(a,b,c)
+ daddu $3,$21
+ daddu $30,$21
+ ld $20,96($29) # prefetch from ring buffer
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ dsrl $8,$19,7 # Xupdate(26)
+ drotr $22,$19,1
+ daddu $18,$11 # +=X[i+9]
+ xor $8,$22
+ drotr $22,$19,8
+
+ dsrl $9,$16,6
+ drotr $23,$16,19
+ xor $8,$22 # sigma0(X[i+1])
+ drotr $22,$16,61
+ xor $9,$23
+ daddu $18,$8
+#else
+ dsrl $8,$19,7 # Xupdate(26)
+ daddu $18,$11 # +=X[i+9]
+ dsll $23,$19,56
+ dsrl $22,$19,1
+ xor $8,$23
+ dsll $23,7
+ xor $8,$22
+ dsrl $22,$19,8
+ xor $8,$23
+
+ dsrl $9,$16,6
+ xor $8,$22 # sigma0(X[i+1])
+ dsll $23,$16,3
+ daddu $18,$8
+ dsrl $22,$16,19
+ xor $9,$23
+ dsll $23,42
+ xor $9,$22
+ dsrl $22,$16,61
+ xor $9,$23
+#endif
+ xor $9,$22 # sigma1(X[i+14])
+ daddu $18,$9
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $9,$7,$24 # 26
+ drotr $23,$3,14
+ daddu $22,$18,$25
+ drotr $8,$3,18
+ and $9,$3
+ drotr $25,$3,41
+ xor $23,$8
+ drotr $8,$30,28
+ xor $9,$24 # Ch(e,f,g)
+ xor $23,$25 # Sigma1(e)
+
+ drotr $25,$30,34
+ daddu $22,$9
+ ld $9,208($6) # K[26]
+ xor $25,$8
+ drotr $8,$30,39
+ daddu $22,$23
+ and $23,$31,$1
+ xor $25,$8 # Sigma0(a)
+ xor $8,$31,$1
+#else
+ daddu $22,$18,$25 # 26
+ dsrl $25,$3,14
+ xor $9,$7,$24
+ dsll $8,$3,23
+ and $9,$3
+ dsrl $23,$3,18
+ xor $25,$8
+ dsll $8,$3,46
+ xor $25,$23
+ dsrl $23,$3,41
+ xor $25,$8
+ dsll $8,$3,50
+ xor $25,$23
+ xor $9,$24 # Ch(e,f,g)
+ xor $23,$8,$25 # Sigma1(e)
+
+ dsrl $25,$30,28
+ daddu $22,$9
+ ld $9,208($6) # K[26]
+ dsll $8,$30,25
+ daddu $22,$23
+ dsrl $23,$30,34
+ xor $25,$8
+ dsll $8,$30,30
+ xor $25,$23
+ dsrl $23,$30,39
+ xor $25,$8
+ dsll $8,$30,36
+ xor $25,$23
+ and $23,$31,$1
+ xor $25,$8 # Sigma0(a)
+ xor $8,$31,$1
+#endif
+ sd $18,80($29) # offload to ring buffer
+ daddu $25,$23
+ and $8,$30
+ daddu $22,$9 # +=K[26]
+ daddu $25,$8 # +=Maj(a,b,c)
+ daddu $2,$22
+ daddu $25,$22
+ ld $21,104($29) # prefetch from ring buffer
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ dsrl $9,$20,7 # Xupdate(27)
+ drotr $23,$20,1
+ daddu $19,$12 # +=X[i+9]
+ xor $9,$23
+ drotr $23,$20,8
+
+ dsrl $10,$17,6
+ drotr $8,$17,19
+ xor $9,$23 # sigma0(X[i+1])
+ drotr $23,$17,61
+ xor $10,$8
+ daddu $19,$9
+#else
+ dsrl $9,$20,7 # Xupdate(27)
+ daddu $19,$12 # +=X[i+9]
+ dsll $8,$20,56
+ dsrl $23,$20,1
+ xor $9,$8
+ dsll $8,7
+ xor $9,$23
+ dsrl $23,$20,8
+ xor $9,$8
+
+ dsrl $10,$17,6
+ xor $9,$23 # sigma0(X[i+1])
+ dsll $8,$17,3
+ daddu $19,$9
+ dsrl $23,$17,19
+ xor $10,$8
+ dsll $8,42
+ xor $10,$23
+ dsrl $23,$17,61
+ xor $10,$8
+#endif
+ xor $10,$23 # sigma1(X[i+14])
+ daddu $19,$10
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $10,$3,$7 # 27
+ drotr $8,$2,14
+ daddu $23,$19,$24
+ drotr $9,$2,18
+ and $10,$2
+ drotr $24,$2,41
+ xor $8,$9
+ drotr $9,$25,28
+ xor $10,$7 # Ch(e,f,g)
+ xor $8,$24 # Sigma1(e)
+
+ drotr $24,$25,34
+ daddu $23,$10
+ ld $10,216($6) # K[27]
+ xor $24,$9
+ drotr $9,$25,39
+ daddu $23,$8
+ and $8,$30,$31
+ xor $24,$9 # Sigma0(a)
+ xor $9,$30,$31
+#else
+ daddu $23,$19,$24 # 27
+ dsrl $24,$2,14
+ xor $10,$3,$7
+ dsll $9,$2,23
+ and $10,$2
+ dsrl $8,$2,18
+ xor $24,$9
+ dsll $9,$2,46
+ xor $24,$8
+ dsrl $8,$2,41
+ xor $24,$9
+ dsll $9,$2,50
+ xor $24,$8
+ xor $10,$7 # Ch(e,f,g)
+ xor $8,$9,$24 # Sigma1(e)
+
+ dsrl $24,$25,28
+ daddu $23,$10
+ ld $10,216($6) # K[27]
+ dsll $9,$25,25
+ daddu $23,$8
+ dsrl $8,$25,34
+ xor $24,$9
+ dsll $9,$25,30
+ xor $24,$8
+ dsrl $8,$25,39
+ xor $24,$9
+ dsll $9,$25,36
+ xor $24,$8
+ and $8,$30,$31
+ xor $24,$9 # Sigma0(a)
+ xor $9,$30,$31
+#endif
+ sd $19,88($29) # offload to ring buffer
+ daddu $24,$8
+ and $9,$25
+ daddu $23,$10 # +=K[27]
+ daddu $24,$9 # +=Maj(a,b,c)
+ daddu $1,$23
+ daddu $24,$23
+ ld $22,112($29) # prefetch from ring buffer
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ dsrl $10,$21,7 # Xupdate(28)
+ drotr $8,$21,1
+ daddu $20,$13 # +=X[i+9]
+ xor $10,$8
+ drotr $8,$21,8
+
+ dsrl $11,$18,6
+ drotr $9,$18,19
+ xor $10,$8 # sigma0(X[i+1])
+ drotr $8,$18,61
+ xor $11,$9
+ daddu $20,$10
+#else
+ dsrl $10,$21,7 # Xupdate(28)
+ daddu $20,$13 # +=X[i+9]
+ dsll $9,$21,56
+ dsrl $8,$21,1
+ xor $10,$9
+ dsll $9,7
+ xor $10,$8
+ dsrl $8,$21,8
+ xor $10,$9
+
+ dsrl $11,$18,6
+ xor $10,$8 # sigma0(X[i+1])
+ dsll $9,$18,3
+ daddu $20,$10
+ dsrl $8,$18,19
+ xor $11,$9
+ dsll $9,42
+ xor $11,$8
+ dsrl $8,$18,61
+ xor $11,$9
+#endif
+ xor $11,$8 # sigma1(X[i+14])
+ daddu $20,$11
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $11,$2,$3 # 28
+ drotr $9,$1,14
+ daddu $8,$20,$7
+ drotr $10,$1,18
+ and $11,$1
+ drotr $7,$1,41
+ xor $9,$10
+ drotr $10,$24,28
+ xor $11,$3 # Ch(e,f,g)
+ xor $9,$7 # Sigma1(e)
+
+ drotr $7,$24,34
+ daddu $8,$11
+ ld $11,224($6) # K[28]
+ xor $7,$10
+ drotr $10,$24,39
+ daddu $8,$9
+ and $9,$25,$30
+ xor $7,$10 # Sigma0(a)
+ xor $10,$25,$30
+#else
+ daddu $8,$20,$7 # 28
+ dsrl $7,$1,14
+ xor $11,$2,$3
+ dsll $10,$1,23
+ and $11,$1
+ dsrl $9,$1,18
+ xor $7,$10
+ dsll $10,$1,46
+ xor $7,$9
+ dsrl $9,$1,41
+ xor $7,$10
+ dsll $10,$1,50
+ xor $7,$9
+ xor $11,$3 # Ch(e,f,g)
+ xor $9,$10,$7 # Sigma1(e)
+
+ dsrl $7,$24,28
+ daddu $8,$11
+ ld $11,224($6) # K[28]
+ dsll $10,$24,25
+ daddu $8,$9
+ dsrl $9,$24,34
+ xor $7,$10
+ dsll $10,$24,30
+ xor $7,$9
+ dsrl $9,$24,39
+ xor $7,$10
+ dsll $10,$24,36
+ xor $7,$9
+ and $9,$25,$30
+ xor $7,$10 # Sigma0(a)
+ xor $10,$25,$30
+#endif
+ sd $20,96($29) # offload to ring buffer
+ daddu $7,$9
+ and $10,$24
+ daddu $8,$11 # +=K[28]
+ daddu $7,$10 # +=Maj(a,b,c)
+ daddu $31,$8
+ daddu $7,$8
+ ld $23,120($29) # prefetch from ring buffer
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ dsrl $11,$22,7 # Xupdate(29)
+ drotr $9,$22,1
+ daddu $21,$14 # +=X[i+9]
+ xor $11,$9
+ drotr $9,$22,8
+
+ dsrl $12,$19,6
+ drotr $10,$19,19
+ xor $11,$9 # sigma0(X[i+1])
+ drotr $9,$19,61
+ xor $12,$10
+ daddu $21,$11
+#else
+ dsrl $11,$22,7 # Xupdate(29)
+ daddu $21,$14 # +=X[i+9]
+ dsll $10,$22,56
+ dsrl $9,$22,1
+ xor $11,$10
+ dsll $10,7
+ xor $11,$9
+ dsrl $9,$22,8
+ xor $11,$10
+
+ dsrl $12,$19,6
+ xor $11,$9 # sigma0(X[i+1])
+ dsll $10,$19,3
+ daddu $21,$11
+ dsrl $9,$19,19
+ xor $12,$10
+ dsll $10,42
+ xor $12,$9
+ dsrl $9,$19,61
+ xor $12,$10
+#endif
+ xor $12,$9 # sigma1(X[i+14])
+ daddu $21,$12
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $12,$1,$2 # 29
+ drotr $10,$31,14
+ daddu $9,$21,$3
+ drotr $11,$31,18
+ and $12,$31
+ drotr $3,$31,41
+ xor $10,$11
+ drotr $11,$7,28
+ xor $12,$2 # Ch(e,f,g)
+ xor $10,$3 # Sigma1(e)
+
+ drotr $3,$7,34
+ daddu $9,$12
+ ld $12,232($6) # K[29]
+ xor $3,$11
+ drotr $11,$7,39
+ daddu $9,$10
+ and $10,$24,$25
+ xor $3,$11 # Sigma0(a)
+ xor $11,$24,$25
+#else
+ daddu $9,$21,$3 # 29
+ dsrl $3,$31,14
+ xor $12,$1,$2
+ dsll $11,$31,23
+ and $12,$31
+ dsrl $10,$31,18
+ xor $3,$11
+ dsll $11,$31,46
+ xor $3,$10
+ dsrl $10,$31,41
+ xor $3,$11
+ dsll $11,$31,50
+ xor $3,$10
+ xor $12,$2 # Ch(e,f,g)
+ xor $10,$11,$3 # Sigma1(e)
+
+ dsrl $3,$7,28
+ daddu $9,$12
+ ld $12,232($6) # K[29]
+ dsll $11,$7,25
+ daddu $9,$10
+ dsrl $10,$7,34
+ xor $3,$11
+ dsll $11,$7,30
+ xor $3,$10
+ dsrl $10,$7,39
+ xor $3,$11
+ dsll $11,$7,36
+ xor $3,$10
+ and $10,$24,$25
+ xor $3,$11 # Sigma0(a)
+ xor $11,$24,$25
+#endif
+ sd $21,104($29) # offload to ring buffer
+ daddu $3,$10
+ and $11,$7
+ daddu $9,$12 # +=K[29]
+ daddu $3,$11 # +=Maj(a,b,c)
+ daddu $30,$9
+ daddu $3,$9
+ ld $8,0($29) # prefetch from ring buffer
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ dsrl $12,$23,7 # Xupdate(30)
+ drotr $10,$23,1
+ daddu $22,$15 # +=X[i+9]
+ xor $12,$10
+ drotr $10,$23,8
+
+ dsrl $13,$20,6
+ drotr $11,$20,19
+ xor $12,$10 # sigma0(X[i+1])
+ drotr $10,$20,61
+ xor $13,$11
+ daddu $22,$12
+#else
+ dsrl $12,$23,7 # Xupdate(30)
+ daddu $22,$15 # +=X[i+9]
+ dsll $11,$23,56
+ dsrl $10,$23,1
+ xor $12,$11
+ dsll $11,7
+ xor $12,$10
+ dsrl $10,$23,8
+ xor $12,$11
+
+ dsrl $13,$20,6
+ xor $12,$10 # sigma0(X[i+1])
+ dsll $11,$20,3
+ daddu $22,$12
+ dsrl $10,$20,19
+ xor $13,$11
+ dsll $11,42
+ xor $13,$10
+ dsrl $10,$20,61
+ xor $13,$11
+#endif
+ xor $13,$10 # sigma1(X[i+14])
+ daddu $22,$13
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $13,$31,$1 # 30
+ drotr $11,$30,14
+ daddu $10,$22,$2
+ drotr $12,$30,18
+ and $13,$30
+ drotr $2,$30,41
+ xor $11,$12
+ drotr $12,$3,28
+ xor $13,$1 # Ch(e,f,g)
+ xor $11,$2 # Sigma1(e)
+
+ drotr $2,$3,34
+ daddu $10,$13
+ ld $13,240($6) # K[30]
+ xor $2,$12
+ drotr $12,$3,39
+ daddu $10,$11
+ and $11,$7,$24
+ xor $2,$12 # Sigma0(a)
+ xor $12,$7,$24
+#else
+ daddu $10,$22,$2 # 30
+ dsrl $2,$30,14
+ xor $13,$31,$1
+ dsll $12,$30,23
+ and $13,$30
+ dsrl $11,$30,18
+ xor $2,$12
+ dsll $12,$30,46
+ xor $2,$11
+ dsrl $11,$30,41
+ xor $2,$12
+ dsll $12,$30,50
+ xor $2,$11
+ xor $13,$1 # Ch(e,f,g)
+ xor $11,$12,$2 # Sigma1(e)
+
+ dsrl $2,$3,28
+ daddu $10,$13
+ ld $13,240($6) # K[30]
+ dsll $12,$3,25
+ daddu $10,$11
+ dsrl $11,$3,34
+ xor $2,$12
+ dsll $12,$3,30
+ xor $2,$11
+ dsrl $11,$3,39
+ xor $2,$12
+ dsll $12,$3,36
+ xor $2,$11
+ and $11,$7,$24
+ xor $2,$12 # Sigma0(a)
+ xor $12,$7,$24
+#endif
+ sd $22,112($29) # offload to ring buffer
+ daddu $2,$11
+ and $12,$3
+ daddu $10,$13 # +=K[30]
+ daddu $2,$12 # +=Maj(a,b,c)
+ daddu $25,$10
+ daddu $2,$10
+ ld $9,8($29) # prefetch from ring buffer
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ dsrl $13,$8,7 # Xupdate(31)
+ drotr $11,$8,1
+ daddu $23,$16 # +=X[i+9]
+ xor $13,$11
+ drotr $11,$8,8
+
+ dsrl $14,$21,6
+ drotr $12,$21,19
+ xor $13,$11 # sigma0(X[i+1])
+ drotr $11,$21,61
+ xor $14,$12
+ daddu $23,$13
+#else
+ dsrl $13,$8,7 # Xupdate(31)
+ daddu $23,$16 # +=X[i+9]
+ dsll $12,$8,56
+ dsrl $11,$8,1
+ xor $13,$12
+ dsll $12,7
+ xor $13,$11
+ dsrl $11,$8,8
+ xor $13,$12
+
+ dsrl $14,$21,6
+ xor $13,$11 # sigma0(X[i+1])
+ dsll $12,$21,3
+ daddu $23,$13
+ dsrl $11,$21,19
+ xor $14,$12
+ dsll $12,42
+ xor $14,$11
+ dsrl $11,$21,61
+ xor $14,$12
+#endif
+ xor $14,$11 # sigma1(X[i+14])
+ daddu $23,$14
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $14,$30,$31 # 31
+ drotr $12,$25,14
+ daddu $11,$23,$1
+ drotr $13,$25,18
+ and $14,$25
+ drotr $1,$25,41
+ xor $12,$13
+ drotr $13,$2,28
+ xor $14,$31 # Ch(e,f,g)
+ xor $12,$1 # Sigma1(e)
+
+ drotr $1,$2,34
+ daddu $11,$14
+ ld $14,248($6) # K[31]
+ xor $1,$13
+ drotr $13,$2,39
+ daddu $11,$12
+ and $12,$3,$7
+ xor $1,$13 # Sigma0(a)
+ xor $13,$3,$7
+#else
+ daddu $11,$23,$1 # 31
+ dsrl $1,$25,14
+ xor $14,$30,$31
+ dsll $13,$25,23
+ and $14,$25
+ dsrl $12,$25,18
+ xor $1,$13
+ dsll $13,$25,46
+ xor $1,$12
+ dsrl $12,$25,41
+ xor $1,$13
+ dsll $13,$25,50
+ xor $1,$12
+ xor $14,$31 # Ch(e,f,g)
+ xor $12,$13,$1 # Sigma1(e)
+
+ dsrl $1,$2,28
+ daddu $11,$14
+ ld $14,248($6) # K[31]
+ dsll $13,$2,25
+ daddu $11,$12
+ dsrl $12,$2,34
+ xor $1,$13
+ dsll $13,$2,30
+ xor $1,$12
+ dsrl $12,$2,39
+ xor $1,$13
+ dsll $13,$2,36
+ xor $1,$12
+ and $12,$3,$7
+ xor $1,$13 # Sigma0(a)
+ xor $13,$3,$7
+#endif
+ sd $23,120($29) # offload to ring buffer
+ daddu $1,$12
+ and $13,$2
+ daddu $11,$14 # +=K[31]
+ daddu $1,$13 # +=Maj(a,b,c)
+ daddu $24,$11
+ daddu $1,$11
+ ld $10,16($29) # prefetch from ring buffer
+ and $14,0xfff
+ li $15,2071
+ .set noreorder
+ bne $14,$15,.L16_xx
+ daddu $6,16*8 # Ktbl+=16
+
+ ld $23,16*8($29) # restore pointer to the end of input
+ ld $8,0*8($4)
+ ld $9,1*8($4)
+ ld $10,2*8($4)
+ daddu $5,16*8
+ ld $11,3*8($4)
+ daddu $1,$8
+ ld $12,4*8($4)
+ daddu $2,$9
+ ld $13,5*8($4)
+ daddu $3,$10
+ ld $14,6*8($4)
+ daddu $7,$11
+ ld $15,7*8($4)
+ daddu $24,$12
+ sd $1,0*8($4)
+ daddu $25,$13
+ sd $2,1*8($4)
+ daddu $30,$14
+ sd $3,2*8($4)
+ daddu $31,$15
+ sd $7,3*8($4)
+ sd $24,4*8($4)
+ sd $25,5*8($4)
+ sd $30,6*8($4)
+ sd $31,7*8($4)
+
+ bne $5,$23,.Loop
+ dsubu $6,512 # rewind $6
+
+ ld $31,256-1*8($29)
+ ld $30,256-2*8($29)
+ ld $23,256-3*8($29)
+ ld $22,256-4*8($29)
+ ld $21,256-5*8($29)
+ ld $20,256-6*8($29)
+ ld $19,256-7*8($29)
+ ld $18,256-8*8($29)
+ ld $17,256-9*8($29)
+ ld $16,256-10*8($29)
+ jr $31
+ daddu $29,256
+.end sha512_block_data_order
+
+.rdata
+.align 5
+K512:
+ .dword 0x428a2f98d728ae22, 0x7137449123ef65cd
+ .dword 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc
+ .dword 0x3956c25bf348b538, 0x59f111f1b605d019
+ .dword 0x923f82a4af194f9b, 0xab1c5ed5da6d8118
+ .dword 0xd807aa98a3030242, 0x12835b0145706fbe
+ .dword 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2
+ .dword 0x72be5d74f27b896f, 0x80deb1fe3b1696b1
+ .dword 0x9bdc06a725c71235, 0xc19bf174cf692694
+ .dword 0xe49b69c19ef14ad2, 0xefbe4786384f25e3
+ .dword 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65
+ .dword 0x2de92c6f592b0275, 0x4a7484aa6ea6e483
+ .dword 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5
+ .dword 0x983e5152ee66dfab, 0xa831c66d2db43210
+ .dword 0xb00327c898fb213f, 0xbf597fc7beef0ee4
+ .dword 0xc6e00bf33da88fc2, 0xd5a79147930aa725
+ .dword 0x06ca6351e003826f, 0x142929670a0e6e70
+ .dword 0x27b70a8546d22ffc, 0x2e1b21385c26c926
+ .dword 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df
+ .dword 0x650a73548baf63de, 0x766a0abb3c77b2a8
+ .dword 0x81c2c92e47edaee6, 0x92722c851482353b
+ .dword 0xa2bfe8a14cf10364, 0xa81a664bbc423001
+ .dword 0xc24b8b70d0f89791, 0xc76c51a30654be30
+ .dword 0xd192e819d6ef5218, 0xd69906245565a910
+ .dword 0xf40e35855771202a, 0x106aa07032bbd1b8
+ .dword 0x19a4c116b8d2d0c8, 0x1e376c085141ab53
+ .dword 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8
+ .dword 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb
+ .dword 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3
+ .dword 0x748f82ee5defb2fc, 0x78a5636f43172f60
+ .dword 0x84c87814a1f0ab72, 0x8cc702081a6439ec
+ .dword 0x90befffa23631e28, 0xa4506cebde82bde9
+ .dword 0xbef9a3f7b2c67915, 0xc67178f2e372532b
+ .dword 0xca273eceea26619c, 0xd186b8c721c0c207
+ .dword 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178
+ .dword 0x06f067aa72176fba, 0x0a637dc5a2c898a6
+ .dword 0x113f9804bef90dae, 0x1b710b35131c471b
+ .dword 0x28db77f523047d84, 0x32caab7b40c72493
+ .dword 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c
+ .dword 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a
+ .dword 0x5fcb6fab3ad6faec, 0x6c44198c4a475817
+.asciiz "SHA512 for MIPS, CRYPTOGAMS by <appro@openssl.org>"
+.align 5