xref: /linux/lib/crypto/sparc/sha1_asm.S (revision 13150742b09e720fdf021de14cd2b98b37415a89)
1*c7510599SEric Biggers/* SPDX-License-Identifier: GPL-2.0 */
2*c7510599SEric Biggers#include <linux/linkage.h>
3*c7510599SEric Biggers#include <asm/opcodes.h>
4*c7510599SEric Biggers#include <asm/visasm.h>
5*c7510599SEric Biggers
6*c7510599SEric BiggersENTRY(sha1_sparc64_transform)
7*c7510599SEric Biggers	/* %o0 = digest, %o1 = data, %o2 = rounds */
8*c7510599SEric Biggers	VISEntryHalf
9*c7510599SEric Biggers	ld	[%o0 + 0x00], %f0
10*c7510599SEric Biggers	ld	[%o0 + 0x04], %f1
11*c7510599SEric Biggers	ld	[%o0 + 0x08], %f2
12*c7510599SEric Biggers	andcc	%o1, 0x7, %g0
13*c7510599SEric Biggers	ld	[%o0 + 0x0c], %f3
14*c7510599SEric Biggers	bne,pn	%xcc, 10f
15*c7510599SEric Biggers	 ld	[%o0 + 0x10], %f4
16*c7510599SEric Biggers
17*c7510599SEric Biggers1:
18*c7510599SEric Biggers	ldd	[%o1 + 0x00], %f8
19*c7510599SEric Biggers	ldd	[%o1 + 0x08], %f10
20*c7510599SEric Biggers	ldd	[%o1 + 0x10], %f12
21*c7510599SEric Biggers	ldd	[%o1 + 0x18], %f14
22*c7510599SEric Biggers	ldd	[%o1 + 0x20], %f16
23*c7510599SEric Biggers	ldd	[%o1 + 0x28], %f18
24*c7510599SEric Biggers	ldd	[%o1 + 0x30], %f20
25*c7510599SEric Biggers	ldd	[%o1 + 0x38], %f22
26*c7510599SEric Biggers
27*c7510599SEric Biggers	SHA1
28*c7510599SEric Biggers
29*c7510599SEric Biggers	subcc	%o2, 1, %o2
30*c7510599SEric Biggers	bne,pt	%xcc, 1b
31*c7510599SEric Biggers	 add	%o1, 0x40, %o1
32*c7510599SEric Biggers
33*c7510599SEric Biggers5:
34*c7510599SEric Biggers	st	%f0, [%o0 + 0x00]
35*c7510599SEric Biggers	st	%f1, [%o0 + 0x04]
36*c7510599SEric Biggers	st	%f2, [%o0 + 0x08]
37*c7510599SEric Biggers	st	%f3, [%o0 + 0x0c]
38*c7510599SEric Biggers	st	%f4, [%o0 + 0x10]
39*c7510599SEric Biggers	retl
40*c7510599SEric Biggers	 VISExitHalf
41*c7510599SEric Biggers10:
42*c7510599SEric Biggers	alignaddr %o1, %g0, %o1
43*c7510599SEric Biggers
44*c7510599SEric Biggers	ldd	[%o1 + 0x00], %f10
45*c7510599SEric Biggers1:
46*c7510599SEric Biggers	ldd	[%o1 + 0x08], %f12
47*c7510599SEric Biggers	ldd	[%o1 + 0x10], %f14
48*c7510599SEric Biggers	ldd	[%o1 + 0x18], %f16
49*c7510599SEric Biggers	ldd	[%o1 + 0x20], %f18
50*c7510599SEric Biggers	ldd	[%o1 + 0x28], %f20
51*c7510599SEric Biggers	ldd	[%o1 + 0x30], %f22
52*c7510599SEric Biggers	ldd	[%o1 + 0x38], %f24
53*c7510599SEric Biggers	ldd	[%o1 + 0x40], %f26
54*c7510599SEric Biggers
55*c7510599SEric Biggers	faligndata %f10, %f12, %f8
56*c7510599SEric Biggers	faligndata %f12, %f14, %f10
57*c7510599SEric Biggers	faligndata %f14, %f16, %f12
58*c7510599SEric Biggers	faligndata %f16, %f18, %f14
59*c7510599SEric Biggers	faligndata %f18, %f20, %f16
60*c7510599SEric Biggers	faligndata %f20, %f22, %f18
61*c7510599SEric Biggers	faligndata %f22, %f24, %f20
62*c7510599SEric Biggers	faligndata %f24, %f26, %f22
63*c7510599SEric Biggers
64*c7510599SEric Biggers	SHA1
65*c7510599SEric Biggers
66*c7510599SEric Biggers	subcc	%o2, 1, %o2
67*c7510599SEric Biggers	fsrc2	%f26, %f10
68*c7510599SEric Biggers	bne,pt	%xcc, 1b
69*c7510599SEric Biggers	 add	%o1, 0x40, %o1
70*c7510599SEric Biggers
71*c7510599SEric Biggers	ba,a,pt	%xcc, 5b
72*c7510599SEric BiggersENDPROC(sha1_sparc64_transform)
73