summaryrefslogtreecommitdiffhomepage
path: root/src/crypto/zinc/poly1305/poly1305-mips64.S
diff options
context:
space:
mode:
Diffstat (limited to 'src/crypto/zinc/poly1305/poly1305-mips64.S')
-rw-r--r--src/crypto/zinc/poly1305/poly1305-mips64.S360
1 files changed, 0 insertions, 360 deletions
diff --git a/src/crypto/zinc/poly1305/poly1305-mips64.S b/src/crypto/zinc/poly1305/poly1305-mips64.S
deleted file mode 100644
index 272a86c..0000000
--- a/src/crypto/zinc/poly1305/poly1305-mips64.S
+++ /dev/null
@@ -1,360 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/*
- * Copyright (C) 2015-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
- * Copyright (C) 2006-2017 CRYPTOGAMS by <appro@openssl.org>. All Rights Reserved.
- *
- * This is based in part on Andy Polyakov's implementation from CRYPTOGAMS.
- */
-
-#if (defined(_MIPS_ARCH_MIPS64R3) || defined(_MIPS_ARCH_MIPS64R5) || \
- defined(_MIPS_ARCH_MIPS64R6)) && !defined(_MIPS_ARCH_MIPS64R2)
-#define _MIPS_ARCH_MIPS64R2
-#endif
-
-#ifdef __MIPSEB__
-#define MSB 0
-#define LSB 7
-#else
-#define MSB 7
-#define LSB 0
-#endif
-
-#if defined(_MIPS_ARCH_MIPS64R6)
-#define dmultu(rs,rt)
-#define mflo(rd,rs,rt) dmulu rd,rs,rt
-#define mfhi(rd,rs,rt) dmuhu rd,rs,rt
-#else
-#define dmultu(rs,rt) dmultu rs,rt
-#define multu(rs,rt) multu rs,rt
-#define mflo(rd,rs,rt) mflo rd
-#define mfhi(rd,rs,rt) mfhi rd
-#endif
-
-.text
-.set noat
-.set noreorder
-
-/* While most of the assembly in the kernel prefers ENTRY() and ENDPROC(),
- * there is no existing MIPS assembly that uses it, and MIPS assembler seems
- * to like its own .ent/.end notation, which the MIPS include files don't
- * provide in a MIPS-specific ENTRY/ENDPROC definition. So, we skip these
- * for now, until somebody complains. */
-
-.align 5
-.globl poly1305_init_mips
-.ent poly1305_init_mips
-poly1305_init_mips:
- .frame $29,0,$31
- .set reorder
-
- sd $0,0($4)
- sd $0,8($4)
- sd $0,16($4)
-
- beqz $5,.Lno_key
-
-#if defined(_MIPS_ARCH_MIPS64R6)
- ld $8,0($5)
- ld $9,8($5)
-#else
- ldl $8,0+MSB($5)
- ldl $9,8+MSB($5)
- ldr $8,0+LSB($5)
- ldr $9,8+LSB($5)
-#endif
-#ifdef __MIPSEB__
-#if defined(_MIPS_ARCH_MIPS64R2)
- dsbh $8,$8 # byte swap
- dsbh $9,$9
- dshd $8,$8
- dshd $9,$9
-#else
- ori $10,$0,0xFF
- dsll $1,$10,32
- or $10,$1 # 0x000000FF000000FF
-
- and $11,$8,$10 # byte swap
- and $2,$9,$10
- dsrl $1,$8,24
- dsrl $24,$9,24
- dsll $11,24
- dsll $2,24
- and $1,$10
- and $24,$10
- dsll $10,8 # 0x0000FF000000FF00
- or $11,$1
- or $2,$24
- and $1,$8,$10
- and $24,$9,$10
- dsrl $8,8
- dsrl $9,8
- dsll $1,8
- dsll $24,8
- and $8,$10
- and $9,$10
- or $11,$1
- or $2,$24
- or $8,$11
- or $9,$2
- dsrl $11,$8,32
- dsrl $2,$9,32
- dsll $8,32
- dsll $9,32
- or $8,$11
- or $9,$2
-#endif
-#endif
- li $10,1
- dsll $10,32
- daddiu $10,-63
- dsll $10,28
- daddiu $10,-1 # 0ffffffc0fffffff
-
- and $8,$10
- daddiu $10,-3 # 0ffffffc0ffffffc
- and $9,$10
-
- sd $8,24($4)
- dsrl $10,$9,2
- sd $9,32($4)
- daddu $10,$9 # s1 = r1 + (r1 >> 2)
- sd $10,40($4)
-
-.Lno_key:
- li $2,0 # return 0
- jr $31
-.end poly1305_init_mips
-
-.align 5
-.globl poly1305_blocks_mips
-.ent poly1305_blocks_mips
-poly1305_blocks_mips:
- .set noreorder
- dsrl $6,4 # number of complete blocks
- bnez $6,poly1305_blocks_internal
- nop
- jr $31
- nop
-.end poly1305_blocks_mips
-
-.align 5
-.ent poly1305_blocks_internal
-poly1305_blocks_internal:
- .frame $29,6*8,$31
- .mask 0x00030000,-8
- .set noreorder
- dsubu $29,6*8
- sd $17,40($29)
- sd $16,32($29)
- .set reorder
-
- ld $12,0($4) # load hash value
- ld $13,8($4)
- ld $14,16($4)
-
- ld $15,24($4) # load key
- ld $16,32($4)
- ld $17,40($4)
-
-.Loop:
-#if defined(_MIPS_ARCH_MIPS64R6)
- ld $8,0($5) # load input
- ld $9,8($5)
-#else
- ldl $8,0+MSB($5) # load input
- ldl $9,8+MSB($5)
- ldr $8,0+LSB($5)
- ldr $9,8+LSB($5)
-#endif
- daddiu $6,-1
- daddiu $5,16
-#ifdef __MIPSEB__
-#if defined(_MIPS_ARCH_MIPS64R2)
- dsbh $8,$8 # byte swap
- dsbh $9,$9
- dshd $8,$8
- dshd $9,$9
-#else
- ori $10,$0,0xFF
- dsll $1,$10,32
- or $10,$1 # 0x000000FF000000FF
-
- and $11,$8,$10 # byte swap
- and $2,$9,$10
- dsrl $1,$8,24
- dsrl $24,$9,24
- dsll $11,24
- dsll $2,24
- and $1,$10
- and $24,$10
- dsll $10,8 # 0x0000FF000000FF00
- or $11,$1
- or $2,$24
- and $1,$8,$10
- and $24,$9,$10
- dsrl $8,8
- dsrl $9,8
- dsll $1,8
- dsll $24,8
- and $8,$10
- and $9,$10
- or $11,$1
- or $2,$24
- or $8,$11
- or $9,$2
- dsrl $11,$8,32
- dsrl $2,$9,32
- dsll $8,32
- dsll $9,32
- or $8,$11
- or $9,$2
-#endif
-#endif
- daddu $12,$8 # accumulate input
- daddu $13,$9
- sltu $10,$12,$8
- sltu $11,$13,$9
- daddu $13,$10
-
- dmultu ($15,$12) # h0*r0
- daddu $14,$7
- sltu $10,$13,$10
- mflo ($8,$15,$12)
- mfhi ($9,$15,$12)
-
- dmultu ($17,$13) # h1*5*r1
- daddu $10,$11
- daddu $14,$10
- mflo ($10,$17,$13)
- mfhi ($11,$17,$13)
-
- dmultu ($16,$12) # h0*r1
- daddu $8,$10
- daddu $9,$11
- mflo ($1,$16,$12)
- mfhi ($25,$16,$12)
- sltu $10,$8,$10
- daddu $9,$10
-
- dmultu ($15,$13) # h1*r0
- daddu $9,$1
- sltu $1,$9,$1
- mflo ($10,$15,$13)
- mfhi ($11,$15,$13)
- daddu $25,$1
-
- dmultu ($17,$14) # h2*5*r1
- daddu $9,$10
- daddu $25,$11
- mflo ($1,$17,$14)
-
- dmultu ($15,$14) # h2*r0
- sltu $10,$9,$10
- daddu $25,$10
- mflo ($2,$15,$14)
-
- daddu $9,$1
- daddu $25,$2
- sltu $1,$9,$1
- daddu $25,$1
-
- li $10,-4 # final reduction
- and $10,$25
- dsrl $11,$25,2
- andi $14,$25,3
- daddu $10,$11
- daddu $12,$8,$10
- sltu $10,$12,$10
- daddu $13,$9,$10
- sltu $10,$13,$10
- daddu $14,$14,$10
-
- bnez $6,.Loop
-
- sd $12,0($4) # store hash value
- sd $13,8($4)
- sd $14,16($4)
-
- .set noreorder
- ld $17,40($29) # epilogue
- ld $16,32($29)
- jr $31
- daddu $29,6*8
-.end poly1305_blocks_internal
-
-.align 5
-.globl poly1305_emit_mips
-.ent poly1305_emit_mips
-poly1305_emit_mips:
- .frame $29,0,$31
- .set reorder
-
- ld $10,0($4)
- ld $11,8($4)
- ld $1,16($4)
-
- daddiu $8,$10,5 # compare to modulus
- sltiu $2,$8,5
- daddu $9,$11,$2
- sltu $2,$9,$2
- daddu $1,$1,$2
-
- dsrl $1,2 # see if it carried/borrowed
- dsubu $1,$0,$1
- nor $2,$0,$1
-
- and $8,$1
- and $10,$2
- and $9,$1
- and $11,$2
- or $8,$10
- or $9,$11
-
- lwu $10,0($6) # load nonce
- lwu $11,4($6)
- lwu $1,8($6)
- lwu $2,12($6)
- dsll $11,32
- dsll $2,32
- or $10,$11
- or $1,$2
-
- daddu $8,$10 # accumulate nonce
- daddu $9,$1
- sltu $10,$8,$10
- daddu $9,$10
-
- dsrl $10,$8,8 # write mac value
- dsrl $11,$8,16
- dsrl $1,$8,24
- sb $8,0($5)
- dsrl $2,$8,32
- sb $10,1($5)
- dsrl $10,$8,40
- sb $11,2($5)
- dsrl $11,$8,48
- sb $1,3($5)
- dsrl $1,$8,56
- sb $2,4($5)
- dsrl $2,$9,8
- sb $10,5($5)
- dsrl $10,$9,16
- sb $11,6($5)
- dsrl $11,$9,24
- sb $1,7($5)
-
- sb $9,8($5)
- dsrl $1,$9,32
- sb $2,9($5)
- dsrl $2,$9,40
- sb $10,10($5)
- dsrl $10,$9,48
- sb $11,11($5)
- dsrl $11,$9,56
- sb $1,12($5)
- sb $2,13($5)
- sb $10,14($5)
- sb $11,15($5)
-
- jr $31
-.end poly1305_emit_mips