projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
{chacha|poly1305}/asm/*-x64.pl: harmonize clang version detection.
[openssl.git]
/
crypto
/
poly1305
/
asm
/
poly1305-mips.pl
diff --git
a/crypto/poly1305/asm/poly1305-mips.pl
b/crypto/poly1305/asm/poly1305-mips.pl
index d2b3e90d93f0456399c267e144667f01256a8cf2..28b6772ee5fe7954e4be9da30acedfc86f54ccb0 100755
(executable)
--- a/
crypto/poly1305/asm/poly1305-mips.pl
+++ b/
crypto/poly1305/asm/poly1305-mips.pl
@@
-67,6
+67,8
@@
$SAVED_REGS_MASK = ($flavour =~ /nubi/i) ? "0x0003f000" : "0x00030000";
($in0,$in1,$tmp0,$tmp1,$tmp2,$tmp3,$tmp4) = ($a4,$a5,$a6,$a7,$at,$t0,$t1);
$code.=<<___;
($in0,$in1,$tmp0,$tmp1,$tmp2,$tmp3,$tmp4) = ($a4,$a5,$a6,$a7,$at,$t0,$t1);
$code.=<<___;
+#include "mips_arch.h"
+
#ifdef MIPSEB
# define MSB 0
# define LSB 7
#ifdef MIPSEB
# define MSB 0
# define LSB 7
@@
-92,10
+94,15
@@
poly1305_init:
beqz $inp,.Lno_key
beqz $inp,.Lno_key
+#if defined(_MIPS_ARCH_MIPS64R6)
+ ld $in0,0($inp)
+ ld $in1,8($inp)
+#else
ldl $in0,0+MSB($inp)
ldl $in1,8+MSB($inp)
ldr $in0,0+LSB($inp)
ldr $in1,8+LSB($inp)
ldl $in0,0+MSB($inp)
ldl $in1,8+MSB($inp)
ldr $in0,0+LSB($inp)
ldr $in1,8+LSB($inp)
+#endif
#ifdef MIPSEB
# if defined(_MIPS_ARCH_MIPS64R2)
dsbh $in0,$in0 # byte swap
#ifdef MIPSEB
# if defined(_MIPS_ARCH_MIPS64R2)
dsbh $in0,$in0 # byte swap
@@
-182,7
+189,7
@@
poly1305_blocks_internal:
.frame $sp,6*8,$ra
.mask $SAVED_REGS_MASK,-8
.set noreorder
.frame $sp,6*8,$ra
.mask $SAVED_REGS_MASK,-8
.set noreorder
- dsub
$sp,6*8
+ dsub
u
$sp,6*8
sd $s5,40($sp)
sd $s4,32($sp)
___
sd $s5,40($sp)
sd $s4,32($sp)
___
@@
-204,11
+211,16
@@
$code.=<<___;
ld $s1,40($ctx)
.Loop:
ld $s1,40($ctx)
.Loop:
+#if defined(_MIPS_ARCH_MIPS64R6)
+ ld $in0,0($inp) # load input
+ ld $in1,8($inp)
+#else
ldl $in0,0+MSB($inp) # load input
ldl $in1,8+MSB($inp)
ldr $in0,0+LSB($inp)
ldl $in0,0+MSB($inp) # load input
ldl $in1,8+MSB($inp)
ldr $in0,0+LSB($inp)
- daddiu $len,-1
ldr $in1,8+LSB($inp)
ldr $in1,8+LSB($inp)
+#endif
+ daddiu $len,-1
daddiu $inp,16
#ifdef MIPSEB
# if defined(_MIPS_ARCH_MIPS64R2)
daddiu $inp,16
#ifdef MIPSEB
# if defined(_MIPS_ARCH_MIPS64R2)
@@
-258,42
+270,42
@@
$code.=<<___;
sltu $tmp1,$h1,$in1
daddu $h1,$tmp0
sltu $tmp1,$h1,$in1
daddu $h1,$tmp0
- dmultu
$r0,$h0
# h0*r0
+ dmultu
($r0,$h0)
# h0*r0
daddu $h2,$padbit
sltu $tmp0,$h1,$tmp0
daddu $h2,$padbit
sltu $tmp0,$h1,$tmp0
- mflo
$d0
- mfhi
$d1
+ mflo
($d0,$r0,$h0)
+ mfhi
($d1,$r0,$h0)
- dmultu
$s1,$h1
# h1*5*r1
+ dmultu
($s1,$h1)
# h1*5*r1
daddu $tmp0,$tmp1
daddu $h2,$tmp0
daddu $tmp0,$tmp1
daddu $h2,$tmp0
- mflo
$tmp0
- mfhi
$tmp1
+ mflo
($tmp0,$s1,$h1)
+ mfhi
($tmp1,$s1,$h1)
- dmultu
$r1,$h0
# h0*r1
+ dmultu
($r1,$h0)
# h0*r1
daddu $d0,$tmp0
daddu $d1,$tmp1
daddu $d0,$tmp0
daddu $d1,$tmp1
- mflo
$tmp2
- mfhi
$d2
+ mflo
($tmp2,$r1,$h0)
+ mfhi
($d2,$r1,$h0)
sltu $tmp0,$d0,$tmp0
daddu $d1,$tmp0
sltu $tmp0,$d0,$tmp0
daddu $d1,$tmp0
- dmultu
$r0,$h1
# h1*r0
+ dmultu
($r0,$h1)
# h1*r0
daddu $d1,$tmp2
sltu $tmp2,$d1,$tmp2
daddu $d1,$tmp2
sltu $tmp2,$d1,$tmp2
- mflo
$tmp0
- mfhi
$tmp1
+ mflo
($tmp0,$r0,$h1)
+ mfhi
($tmp1,$r0,$h1)
daddu $d2,$tmp2
daddu $d2,$tmp2
- dmultu
$s1,$h2
# h2*5*r1
+ dmultu
($s1,$h2)
# h2*5*r1
daddu $d1,$tmp0
daddu $d2,$tmp1
daddu $d1,$tmp0
daddu $d2,$tmp1
- mflo
$tmp2
+ mflo
($tmp2,$s1,$h2)
- dmultu
$r0,$h2
# h2*r0
+ dmultu
($r0,$h2)
# h2*r0
sltu $tmp0,$d1,$tmp0
daddu $d2,$tmp0
sltu $tmp0,$d1,$tmp0
daddu $d2,$tmp0
- mflo
$tmp3
+ mflo
($tmp3,$r0,$h2)
daddu $d1,$tmp2
daddu $d2,$tmp3
daddu $d1,$tmp2
daddu $d2,$tmp3
@@
-329,7
+341,7
@@
$code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi epilogue
___
$code.=<<___;
jr $ra
___
$code.=<<___;
jr $ra
- dadd
$sp,6*8
+ dadd
u
$sp,6*8
.end poly1305_blocks_internal
___
}
.end poly1305_blocks_internal
___
}