xref: /linux/arch/sparc/crypto/camellia_asm.S (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */
281658ad0SDavid S. Miller#include <linux/linkage.h>
381658ad0SDavid S. Miller#include <asm/visasm.h>
481658ad0SDavid S. Miller
57cff82f5SDavid S. Miller#include "opcodes.h"
681658ad0SDavid S. Miller
781658ad0SDavid S. Miller#define CAMELLIA_6ROUNDS(KEY_BASE, I0, I1) \
881658ad0SDavid S. Miller	CAMELLIA_F(KEY_BASE +  0, I1, I0, I1) \
981658ad0SDavid S. Miller	CAMELLIA_F(KEY_BASE +  2, I0, I1, I0) \
1081658ad0SDavid S. Miller	CAMELLIA_F(KEY_BASE +  4, I1, I0, I1) \
1181658ad0SDavid S. Miller	CAMELLIA_F(KEY_BASE +  6, I0, I1, I0) \
1281658ad0SDavid S. Miller	CAMELLIA_F(KEY_BASE +  8, I1, I0, I1) \
1381658ad0SDavid S. Miller	CAMELLIA_F(KEY_BASE + 10, I0, I1, I0)
1481658ad0SDavid S. Miller
1581658ad0SDavid S. Miller#define CAMELLIA_6ROUNDS_FL_FLI(KEY_BASE, I0, I1) \
1681658ad0SDavid S. Miller	CAMELLIA_6ROUNDS(KEY_BASE, I0, I1) \
1781658ad0SDavid S. Miller	CAMELLIA_FL(KEY_BASE + 12, I0, I0) \
1881658ad0SDavid S. Miller	CAMELLIA_FLI(KEY_BASE + 14, I1, I1)
1981658ad0SDavid S. Miller
2081658ad0SDavid S. Miller	.data
2181658ad0SDavid S. Miller
2281658ad0SDavid S. Miller	.align	8
2381658ad0SDavid S. MillerSIGMA:	.xword	0xA09E667F3BCC908B
2481658ad0SDavid S. Miller	.xword	0xB67AE8584CAA73B2
2581658ad0SDavid S. Miller	.xword	0xC6EF372FE94F82BE
2681658ad0SDavid S. Miller	.xword	0x54FF53A5F1D36F1C
2781658ad0SDavid S. Miller	.xword	0x10E527FADE682D1D
2881658ad0SDavid S. Miller	.xword	0xB05688C2B3E6C1FD
2981658ad0SDavid S. Miller
3081658ad0SDavid S. Miller	.text
3181658ad0SDavid S. Miller
3281658ad0SDavid S. Miller	.align	32
3381658ad0SDavid S. MillerENTRY(camellia_sparc64_key_expand)
34274504f5SDavid S. Miller	/* %o0=in_key, %o1=encrypt_key, %o2=key_len, %o3=decrypt_key */
3581658ad0SDavid S. Miller	VISEntry
3681658ad0SDavid S. Miller	ld	[%o0 + 0x00], %f0	! i0, k[0]
3781658ad0SDavid S. Miller	ld	[%o0 + 0x04], %f1	! i1, k[1]
3881658ad0SDavid S. Miller	ld	[%o0 + 0x08], %f2	! i2, k[2]
3981658ad0SDavid S. Miller	ld	[%o0 + 0x0c], %f3	! i3, k[3]
4081658ad0SDavid S. Miller	std	%f0, [%o1 + 0x00]	! k[0, 1]
4181658ad0SDavid S. Miller	fsrc2	%f0, %f28
4281658ad0SDavid S. Miller	std	%f2, [%o1 + 0x08]	! k[2, 3]
4381658ad0SDavid S. Miller	cmp	%o2, 16
4481658ad0SDavid S. Miller	be	10f
4581658ad0SDavid S. Miller	 fsrc2	%f2, %f30
4681658ad0SDavid S. Miller
4781658ad0SDavid S. Miller	ld	[%o0 + 0x10], %f0
4881658ad0SDavid S. Miller	ld	[%o0 + 0x14], %f1
4981658ad0SDavid S. Miller	std	%f0, [%o1 + 0x20]	! k[8, 9]
5081658ad0SDavid S. Miller	cmp	%o2, 24
5181658ad0SDavid S. Miller	fone	%f10
5281658ad0SDavid S. Miller	be,a	1f
5381658ad0SDavid S. Miller	 fxor	%f10, %f0, %f2
5481658ad0SDavid S. Miller	ld	[%o0 + 0x18], %f2
5581658ad0SDavid S. Miller	ld	[%o0 + 0x1c], %f3
5681658ad0SDavid S. Miller1:
5781658ad0SDavid S. Miller	std	%f2, [%o1 + 0x28]	! k[10, 11]
5881658ad0SDavid S. Miller	fxor	%f28, %f0, %f0
5981658ad0SDavid S. Miller	fxor	%f30, %f2, %f2
6081658ad0SDavid S. Miller
6181658ad0SDavid S. Miller10:
6281658ad0SDavid S. Miller	sethi	%hi(SIGMA), %g3
6381658ad0SDavid S. Miller	or	%g3, %lo(SIGMA), %g3
6481658ad0SDavid S. Miller	ldd	[%g3 + 0x00], %f16
6581658ad0SDavid S. Miller	ldd	[%g3 + 0x08], %f18
6681658ad0SDavid S. Miller	ldd	[%g3 + 0x10], %f20
6781658ad0SDavid S. Miller	ldd	[%g3 + 0x18], %f22
6881658ad0SDavid S. Miller	ldd	[%g3 + 0x20], %f24
6981658ad0SDavid S. Miller	ldd	[%g3 + 0x28], %f26
7081658ad0SDavid S. Miller	CAMELLIA_F(16, 2, 0, 2)
7181658ad0SDavid S. Miller	CAMELLIA_F(18, 0, 2, 0)
7281658ad0SDavid S. Miller	fxor	%f28, %f0, %f0
7381658ad0SDavid S. Miller	fxor	%f30, %f2, %f2
7481658ad0SDavid S. Miller	CAMELLIA_F(20, 2, 0, 2)
7581658ad0SDavid S. Miller	CAMELLIA_F(22, 0, 2, 0)
7681658ad0SDavid S. Miller
7781658ad0SDavid S. Miller#define ROTL128(S01, S23, TMP1, TMP2, N)	\
7881658ad0SDavid S. Miller	srlx	S01, (64 - N), TMP1;		\
7981658ad0SDavid S. Miller	sllx	S01, N, S01;			\
8081658ad0SDavid S. Miller	srlx	S23, (64 - N), TMP2;		\
8181658ad0SDavid S. Miller	sllx	S23, N, S23;			\
8281658ad0SDavid S. Miller	or	S01, TMP2, S01;			\
8381658ad0SDavid S. Miller	or	S23, TMP1, S23
8481658ad0SDavid S. Miller
8581658ad0SDavid S. Miller	cmp	%o2, 16
8681658ad0SDavid S. Miller	bne	1f
8781658ad0SDavid S. Miller	 nop
8881658ad0SDavid S. Miller	/* 128-bit key */
8981658ad0SDavid S. Miller	std	%f0, [%o1 + 0x10]	! k[ 4,  5]
9081658ad0SDavid S. Miller	std	%f2, [%o1 + 0x18]	! k[ 6,  7]
9181658ad0SDavid S. Miller	MOVDTOX_F0_O4
9281658ad0SDavid S. Miller	MOVDTOX_F2_O5
9381658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 15)
9481658ad0SDavid S. Miller	stx	%o4, [%o1 + 0x30]	! k[12, 13]
9581658ad0SDavid S. Miller	stx	%o5, [%o1 + 0x38]	! k[14, 15]
9681658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 15)
9781658ad0SDavid S. Miller	stx	%o4, [%o1 + 0x40]	! k[16, 17]
9881658ad0SDavid S. Miller	stx	%o5, [%o1 + 0x48]	! k[18, 19]
9981658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 15)
10081658ad0SDavid S. Miller	stx	%o4, [%o1 + 0x60]	! k[24, 25]
10181658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 15)
10281658ad0SDavid S. Miller	stx	%o4, [%o1 + 0x70]	! k[28, 29]
10381658ad0SDavid S. Miller	stx	%o5, [%o1 + 0x78]	! k[30, 31]
10481658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 34)
10581658ad0SDavid S. Miller	stx	%o4, [%o1 + 0xa0]	! k[40, 41]
10681658ad0SDavid S. Miller	stx	%o5, [%o1 + 0xa8]	! k[42, 43]
10781658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 17)
10881658ad0SDavid S. Miller	stx	%o4, [%o1 + 0xc0]	! k[48, 49]
10981658ad0SDavid S. Miller	stx	%o5, [%o1 + 0xc8]	! k[50, 51]
11081658ad0SDavid S. Miller
11181658ad0SDavid S. Miller	ldx	[%o1 + 0x00], %o4	! k[ 0,  1]
11281658ad0SDavid S. Miller	ldx	[%o1 + 0x08], %o5	! k[ 2,  3]
11381658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 15)
11481658ad0SDavid S. Miller	stx	%o4, [%o1 + 0x20]	! k[ 8,  9]
11581658ad0SDavid S. Miller	stx	%o5, [%o1 + 0x28]	! k[10, 11]
11681658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 30)
11781658ad0SDavid S. Miller	stx	%o4, [%o1 + 0x50]	! k[20, 21]
11881658ad0SDavid S. Miller	stx	%o5, [%o1 + 0x58]	! k[22, 23]
11981658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 15)
12081658ad0SDavid S. Miller	stx	%o5, [%o1 + 0x68]	! k[26, 27]
12181658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 17)
12281658ad0SDavid S. Miller	stx	%o4, [%o1 + 0x80]	! k[32, 33]
12381658ad0SDavid S. Miller	stx	%o5, [%o1 + 0x88]	! k[34, 35]
12481658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 17)
12581658ad0SDavid S. Miller	stx	%o4, [%o1 + 0x90]	! k[36, 37]
12681658ad0SDavid S. Miller	stx	%o5, [%o1 + 0x98]	! k[38, 39]
12781658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 17)
12881658ad0SDavid S. Miller	stx	%o4, [%o1 + 0xb0]	! k[44, 45]
12981658ad0SDavid S. Miller	stx	%o5, [%o1 + 0xb8]	! k[46, 47]
13081658ad0SDavid S. Miller
13181658ad0SDavid S. Miller	ba,pt	%xcc, 2f
13281658ad0SDavid S. Miller	 mov	(3 * 16 * 4), %o0
13381658ad0SDavid S. Miller
13481658ad0SDavid S. Miller1:
13581658ad0SDavid S. Miller	/* 192-bit or 256-bit key */
13681658ad0SDavid S. Miller	std	%f0, [%o1 + 0x30]	! k[12, 13]
13781658ad0SDavid S. Miller	std	%f2, [%o1 + 0x38]	! k[14, 15]
13881658ad0SDavid S. Miller	ldd	[%o1 + 0x20], %f4	! k[ 8,  9]
13981658ad0SDavid S. Miller	ldd	[%o1 + 0x28], %f6	! k[10, 11]
14081658ad0SDavid S. Miller	fxor	%f0, %f4, %f0
14181658ad0SDavid S. Miller	fxor	%f2, %f6, %f2
14281658ad0SDavid S. Miller	CAMELLIA_F(24, 2, 0, 2)
14381658ad0SDavid S. Miller	CAMELLIA_F(26, 0, 2, 0)
14481658ad0SDavid S. Miller	std	%f0, [%o1 + 0x10]	! k[ 4,  5]
14581658ad0SDavid S. Miller	std	%f2, [%o1 + 0x18]	! k[ 6,  7]
14681658ad0SDavid S. Miller	MOVDTOX_F0_O4
14781658ad0SDavid S. Miller	MOVDTOX_F2_O5
14881658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 30)
14981658ad0SDavid S. Miller	stx	%o4, [%o1 + 0x50]	! k[20, 21]
15081658ad0SDavid S. Miller	stx	%o5, [%o1 + 0x58]	! k[22, 23]
15181658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 30)
15281658ad0SDavid S. Miller	stx	%o4, [%o1 + 0xa0]	! k[40, 41]
15381658ad0SDavid S. Miller	stx	%o5, [%o1 + 0xa8]	! k[42, 43]
15481658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 51)
15581658ad0SDavid S. Miller	stx	%o4, [%o1 + 0x100]	! k[64, 65]
15681658ad0SDavid S. Miller	stx	%o5, [%o1 + 0x108]	! k[66, 67]
15781658ad0SDavid S. Miller	ldx	[%o1 + 0x20], %o4	! k[ 8,  9]
15881658ad0SDavid S. Miller	ldx	[%o1 + 0x28], %o5	! k[10, 11]
15981658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 15)
16081658ad0SDavid S. Miller	stx	%o4, [%o1 + 0x20]	! k[ 8,  9]
16181658ad0SDavid S. Miller	stx	%o5, [%o1 + 0x28]	! k[10, 11]
16281658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 15)
16381658ad0SDavid S. Miller	stx	%o4, [%o1 + 0x40]	! k[16, 17]
16481658ad0SDavid S. Miller	stx	%o5, [%o1 + 0x48]	! k[18, 19]
16581658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 30)
16681658ad0SDavid S. Miller	stx	%o4, [%o1 + 0x90]	! k[36, 37]
16781658ad0SDavid S. Miller	stx	%o5, [%o1 + 0x98]	! k[38, 39]
16881658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 34)
16981658ad0SDavid S. Miller	stx	%o4, [%o1 + 0xd0]	! k[52, 53]
17081658ad0SDavid S. Miller	stx	%o5, [%o1 + 0xd8]	! k[54, 55]
17181658ad0SDavid S. Miller	ldx	[%o1 + 0x30], %o4	! k[12, 13]
17281658ad0SDavid S. Miller	ldx	[%o1 + 0x38], %o5	! k[14, 15]
17381658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 15)
17481658ad0SDavid S. Miller	stx	%o4, [%o1 + 0x30]	! k[12, 13]
17581658ad0SDavid S. Miller	stx	%o5, [%o1 + 0x38]	! k[14, 15]
17681658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 30)
17781658ad0SDavid S. Miller	stx	%o4, [%o1 + 0x70]	! k[28, 29]
17881658ad0SDavid S. Miller	stx	%o5, [%o1 + 0x78]	! k[30, 31]
17981658ad0SDavid S. Miller	srlx	%o4, 32, %g2
18081658ad0SDavid S. Miller	srlx	%o5, 32, %g3
18181658ad0SDavid S. Miller	stw	%o4, [%o1 + 0xc0]	! k[48]
18281658ad0SDavid S. Miller	stw	%g3, [%o1 + 0xc4]	! k[49]
18381658ad0SDavid S. Miller	stw	%o5, [%o1 + 0xc8]	! k[50]
18481658ad0SDavid S. Miller	stw	%g2, [%o1 + 0xcc]	! k[51]
18581658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 49)
18681658ad0SDavid S. Miller	stx	%o4, [%o1 + 0xe0]	! k[56, 57]
18781658ad0SDavid S. Miller	stx	%o5, [%o1 + 0xe8]	! k[58, 59]
18881658ad0SDavid S. Miller	ldx	[%o1 + 0x00], %o4	! k[ 0,  1]
18981658ad0SDavid S. Miller	ldx	[%o1 + 0x08], %o5	! k[ 2,  3]
19081658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 45)
19181658ad0SDavid S. Miller	stx	%o4, [%o1 + 0x60]	! k[24, 25]
19281658ad0SDavid S. Miller	stx	%o5, [%o1 + 0x68]	! k[26, 27]
19381658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 15)
19481658ad0SDavid S. Miller	stx	%o4, [%o1 + 0x80]	! k[32, 33]
19581658ad0SDavid S. Miller	stx	%o5, [%o1 + 0x88]	! k[34, 35]
19681658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 17)
19781658ad0SDavid S. Miller	stx	%o4, [%o1 + 0xb0]	! k[44, 45]
19881658ad0SDavid S. Miller	stx	%o5, [%o1 + 0xb8]	! k[46, 47]
19981658ad0SDavid S. Miller	ROTL128(%o4, %o5, %g2, %g3, 34)
20081658ad0SDavid S. Miller	stx	%o4, [%o1 + 0xf0]	! k[60, 61]
20181658ad0SDavid S. Miller	stx	%o5, [%o1 + 0xf8]	! k[62, 63]
20281658ad0SDavid S. Miller	mov	(4 * 16 * 4), %o0
20381658ad0SDavid S. Miller2:
20481658ad0SDavid S. Miller	add	%o1, %o0, %o1
20581658ad0SDavid S. Miller	ldd	[%o1 + 0x00], %f0
20681658ad0SDavid S. Miller	ldd	[%o1 + 0x08], %f2
20781658ad0SDavid S. Miller	std	%f0, [%o3 + 0x00]
20881658ad0SDavid S. Miller	std	%f2, [%o3 + 0x08]
20981658ad0SDavid S. Miller	add	%o3, 0x10, %o3
21081658ad0SDavid S. Miller1:
21181658ad0SDavid S. Miller	sub	%o1, (16 * 4), %o1
21281658ad0SDavid S. Miller	ldd	[%o1 + 0x38], %f0
21381658ad0SDavid S. Miller	ldd	[%o1 + 0x30], %f2
21481658ad0SDavid S. Miller	ldd	[%o1 + 0x28], %f4
21581658ad0SDavid S. Miller	ldd	[%o1 + 0x20], %f6
21681658ad0SDavid S. Miller	ldd	[%o1 + 0x18], %f8
21781658ad0SDavid S. Miller	ldd	[%o1 + 0x10], %f10
21881658ad0SDavid S. Miller	std	%f0, [%o3 + 0x00]
21981658ad0SDavid S. Miller	std	%f2, [%o3 + 0x08]
22081658ad0SDavid S. Miller	std	%f4, [%o3 + 0x10]
22181658ad0SDavid S. Miller	std	%f6, [%o3 + 0x18]
22281658ad0SDavid S. Miller	std	%f8, [%o3 + 0x20]
22381658ad0SDavid S. Miller	std	%f10, [%o3 + 0x28]
22481658ad0SDavid S. Miller
22581658ad0SDavid S. Miller	ldd	[%o1 + 0x08], %f0
22681658ad0SDavid S. Miller	ldd	[%o1 + 0x00], %f2
22781658ad0SDavid S. Miller	std	%f0, [%o3 + 0x30]
22881658ad0SDavid S. Miller	std	%f2, [%o3 + 0x38]
22981658ad0SDavid S. Miller	subcc	%o0, (16 * 4), %o0
23081658ad0SDavid S. Miller	bne,pt	%icc, 1b
23181658ad0SDavid S. Miller	 add	%o3, (16 * 4), %o3
23281658ad0SDavid S. Miller
23381658ad0SDavid S. Miller	std	%f2, [%o3 - 0x10]
23481658ad0SDavid S. Miller	std	%f0, [%o3 - 0x08]
23581658ad0SDavid S. Miller
23681658ad0SDavid S. Miller	retl
23781658ad0SDavid S. Miller	 VISExit
23881658ad0SDavid S. MillerENDPROC(camellia_sparc64_key_expand)
23981658ad0SDavid S. Miller
24081658ad0SDavid S. Miller	.align	32
24181658ad0SDavid S. MillerENTRY(camellia_sparc64_crypt)
24281658ad0SDavid S. Miller	/* %o0=key, %o1=input, %o2=output, %o3=key_len */
24381658ad0SDavid S. Miller	VISEntry
24481658ad0SDavid S. Miller
24581658ad0SDavid S. Miller	ld	[%o1 + 0x00], %f0
24681658ad0SDavid S. Miller	ld	[%o1 + 0x04], %f1
24781658ad0SDavid S. Miller	ld	[%o1 + 0x08], %f2
24881658ad0SDavid S. Miller	ld	[%o1 + 0x0c], %f3
24981658ad0SDavid S. Miller
25081658ad0SDavid S. Miller	ldd	[%o0 + 0x00], %f4
25181658ad0SDavid S. Miller	ldd	[%o0 + 0x08], %f6
25281658ad0SDavid S. Miller
25381658ad0SDavid S. Miller	cmp	%o3, 16
25481658ad0SDavid S. Miller	fxor	%f4, %f0, %f0
25581658ad0SDavid S. Miller	be	1f
25681658ad0SDavid S. Miller	 fxor	%f6, %f2, %f2
25781658ad0SDavid S. Miller
25881658ad0SDavid S. Miller	ldd	[%o0 + 0x10], %f8
25981658ad0SDavid S. Miller	ldd	[%o0 + 0x18], %f10
26081658ad0SDavid S. Miller	ldd	[%o0 + 0x20], %f12
26181658ad0SDavid S. Miller	ldd	[%o0 + 0x28], %f14
26281658ad0SDavid S. Miller	ldd	[%o0 + 0x30], %f16
26381658ad0SDavid S. Miller	ldd	[%o0 + 0x38], %f18
26481658ad0SDavid S. Miller	ldd	[%o0 + 0x40], %f20
26581658ad0SDavid S. Miller	ldd	[%o0 + 0x48], %f22
26681658ad0SDavid S. Miller	add	%o0, 0x40, %o0
26781658ad0SDavid S. Miller
26881658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
26981658ad0SDavid S. Miller
27081658ad0SDavid S. Miller1:
27181658ad0SDavid S. Miller	ldd	[%o0 + 0x10], %f8
27281658ad0SDavid S. Miller	ldd	[%o0 + 0x18], %f10
27381658ad0SDavid S. Miller	ldd	[%o0 + 0x20], %f12
27481658ad0SDavid S. Miller	ldd	[%o0 + 0x28], %f14
27581658ad0SDavid S. Miller	ldd	[%o0 + 0x30], %f16
27681658ad0SDavid S. Miller	ldd	[%o0 + 0x38], %f18
27781658ad0SDavid S. Miller	ldd	[%o0 + 0x40], %f20
27881658ad0SDavid S. Miller	ldd	[%o0 + 0x48], %f22
27981658ad0SDavid S. Miller	ldd	[%o0 + 0x50], %f24
28081658ad0SDavid S. Miller	ldd	[%o0 + 0x58], %f26
28181658ad0SDavid S. Miller	ldd	[%o0 + 0x60], %f28
28281658ad0SDavid S. Miller	ldd	[%o0 + 0x68], %f30
28381658ad0SDavid S. Miller	ldd	[%o0 + 0x70], %f32
28481658ad0SDavid S. Miller	ldd	[%o0 + 0x78], %f34
28581658ad0SDavid S. Miller	ldd	[%o0 + 0x80], %f36
28681658ad0SDavid S. Miller	ldd	[%o0 + 0x88], %f38
28781658ad0SDavid S. Miller	ldd	[%o0 + 0x90], %f40
28881658ad0SDavid S. Miller	ldd	[%o0 + 0x98], %f42
28981658ad0SDavid S. Miller	ldd	[%o0 + 0xa0], %f44
29081658ad0SDavid S. Miller	ldd	[%o0 + 0xa8], %f46
29181658ad0SDavid S. Miller	ldd	[%o0 + 0xb0], %f48
29281658ad0SDavid S. Miller	ldd	[%o0 + 0xb8], %f50
29381658ad0SDavid S. Miller	ldd	[%o0 + 0xc0], %f52
29481658ad0SDavid S. Miller	ldd	[%o0 + 0xc8], %f54
29581658ad0SDavid S. Miller
29681658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
29781658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
29881658ad0SDavid S. Miller	CAMELLIA_6ROUNDS(40, 0, 2)
29981658ad0SDavid S. Miller	fxor	%f52, %f2, %f2
30081658ad0SDavid S. Miller	fxor	%f54, %f0, %f0
30181658ad0SDavid S. Miller
30281658ad0SDavid S. Miller	st	%f2, [%o2 + 0x00]
30381658ad0SDavid S. Miller	st	%f3, [%o2 + 0x04]
30481658ad0SDavid S. Miller	st	%f0, [%o2 + 0x08]
30581658ad0SDavid S. Miller	st	%f1, [%o2 + 0x0c]
30681658ad0SDavid S. Miller
30781658ad0SDavid S. Miller	retl
30881658ad0SDavid S. Miller	 VISExit
30981658ad0SDavid S. MillerENDPROC(camellia_sparc64_crypt)
31081658ad0SDavid S. Miller
31181658ad0SDavid S. Miller	.align	32
31281658ad0SDavid S. MillerENTRY(camellia_sparc64_load_keys)
31381658ad0SDavid S. Miller	/* %o0=key, %o1=key_len */
31481658ad0SDavid S. Miller	VISEntry
31581658ad0SDavid S. Miller	ldd	[%o0 + 0x00], %f4
31681658ad0SDavid S. Miller	ldd	[%o0 + 0x08], %f6
31781658ad0SDavid S. Miller	ldd	[%o0 + 0x10], %f8
31881658ad0SDavid S. Miller	ldd	[%o0 + 0x18], %f10
31981658ad0SDavid S. Miller	ldd	[%o0 + 0x20], %f12
32081658ad0SDavid S. Miller	ldd	[%o0 + 0x28], %f14
32181658ad0SDavid S. Miller	ldd	[%o0 + 0x30], %f16
32281658ad0SDavid S. Miller	ldd	[%o0 + 0x38], %f18
32381658ad0SDavid S. Miller	ldd	[%o0 + 0x40], %f20
32481658ad0SDavid S. Miller	ldd	[%o0 + 0x48], %f22
32581658ad0SDavid S. Miller	ldd	[%o0 + 0x50], %f24
32681658ad0SDavid S. Miller	ldd	[%o0 + 0x58], %f26
32781658ad0SDavid S. Miller	ldd	[%o0 + 0x60], %f28
32881658ad0SDavid S. Miller	ldd	[%o0 + 0x68], %f30
32981658ad0SDavid S. Miller	ldd	[%o0 + 0x70], %f32
33081658ad0SDavid S. Miller	ldd	[%o0 + 0x78], %f34
33181658ad0SDavid S. Miller	ldd	[%o0 + 0x80], %f36
33281658ad0SDavid S. Miller	ldd	[%o0 + 0x88], %f38
33381658ad0SDavid S. Miller	ldd	[%o0 + 0x90], %f40
33481658ad0SDavid S. Miller	ldd	[%o0 + 0x98], %f42
33581658ad0SDavid S. Miller	ldd	[%o0 + 0xa0], %f44
33681658ad0SDavid S. Miller	ldd	[%o0 + 0xa8], %f46
33781658ad0SDavid S. Miller	ldd	[%o0 + 0xb0], %f48
33881658ad0SDavid S. Miller	ldd	[%o0 + 0xb8], %f50
33981658ad0SDavid S. Miller	ldd	[%o0 + 0xc0], %f52
34081658ad0SDavid S. Miller	retl
34181658ad0SDavid S. Miller	 ldd	[%o0 + 0xc8], %f54
34281658ad0SDavid S. MillerENDPROC(camellia_sparc64_load_keys)
34381658ad0SDavid S. Miller
34481658ad0SDavid S. Miller	.align	32
34581658ad0SDavid S. MillerENTRY(camellia_sparc64_ecb_crypt_3_grand_rounds)
34681658ad0SDavid S. Miller	/* %o0=input, %o1=output, %o2=len, %o3=key */
34781658ad0SDavid S. Miller1:	ldd	[%o0 + 0x00], %f0
34881658ad0SDavid S. Miller	ldd	[%o0 + 0x08], %f2
34981658ad0SDavid S. Miller	add	%o0, 0x10, %o0
35081658ad0SDavid S. Miller	fxor	%f4, %f0, %f0
35181658ad0SDavid S. Miller	fxor	%f6, %f2, %f2
35281658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
35381658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
35481658ad0SDavid S. Miller	CAMELLIA_6ROUNDS(40, 0, 2)
35581658ad0SDavid S. Miller	fxor	%f52, %f2, %f2
35681658ad0SDavid S. Miller	fxor	%f54, %f0, %f0
35781658ad0SDavid S. Miller	std	%f2, [%o1 + 0x00]
35881658ad0SDavid S. Miller	std	%f0, [%o1 + 0x08]
35981658ad0SDavid S. Miller	subcc	%o2, 0x10, %o2
36081658ad0SDavid S. Miller	bne,pt	%icc, 1b
36181658ad0SDavid S. Miller	 add	%o1, 0x10, %o1
36281658ad0SDavid S. Miller	retl
36381658ad0SDavid S. Miller	 nop
36481658ad0SDavid S. MillerENDPROC(camellia_sparc64_ecb_crypt_3_grand_rounds)
36581658ad0SDavid S. Miller
36681658ad0SDavid S. Miller	.align	32
36781658ad0SDavid S. MillerENTRY(camellia_sparc64_ecb_crypt_4_grand_rounds)
36881658ad0SDavid S. Miller	/* %o0=input, %o1=output, %o2=len, %o3=key */
36981658ad0SDavid S. Miller1:	ldd	[%o0 + 0x00], %f0
37081658ad0SDavid S. Miller	ldd	[%o0 + 0x08], %f2
37181658ad0SDavid S. Miller	add	%o0, 0x10, %o0
37281658ad0SDavid S. Miller	fxor	%f4, %f0, %f0
37381658ad0SDavid S. Miller	fxor	%f6, %f2, %f2
37481658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
37581658ad0SDavid S. Miller	ldd	[%o3 + 0xd0], %f8
37681658ad0SDavid S. Miller	ldd	[%o3 + 0xd8], %f10
37781658ad0SDavid S. Miller	ldd	[%o3 + 0xe0], %f12
37881658ad0SDavid S. Miller	ldd	[%o3 + 0xe8], %f14
37981658ad0SDavid S. Miller	ldd	[%o3 + 0xf0], %f16
38081658ad0SDavid S. Miller	ldd	[%o3 + 0xf8], %f18
38181658ad0SDavid S. Miller	ldd	[%o3 + 0x100], %f20
38281658ad0SDavid S. Miller	ldd	[%o3 + 0x108], %f22
38381658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
38481658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI(40, 0, 2)
38581658ad0SDavid S. Miller	CAMELLIA_F(8, 2, 0, 2)
38681658ad0SDavid S. Miller	CAMELLIA_F(10, 0, 2, 0)
38781658ad0SDavid S. Miller	ldd	[%o3 + 0x10], %f8
38881658ad0SDavid S. Miller	ldd	[%o3 + 0x18], %f10
38981658ad0SDavid S. Miller	CAMELLIA_F(12, 2, 0, 2)
39081658ad0SDavid S. Miller	CAMELLIA_F(14, 0, 2, 0)
39181658ad0SDavid S. Miller	ldd	[%o3 + 0x20], %f12
39281658ad0SDavid S. Miller	ldd	[%o3 + 0x28], %f14
39381658ad0SDavid S. Miller	CAMELLIA_F(16, 2, 0, 2)
39481658ad0SDavid S. Miller	CAMELLIA_F(18, 0, 2, 0)
39581658ad0SDavid S. Miller	ldd	[%o3 + 0x30], %f16
39681658ad0SDavid S. Miller	ldd	[%o3 + 0x38], %f18
39781658ad0SDavid S. Miller	fxor	%f20, %f2, %f2
39881658ad0SDavid S. Miller	fxor	%f22, %f0, %f0
39981658ad0SDavid S. Miller	ldd	[%o3 + 0x40], %f20
40081658ad0SDavid S. Miller	ldd	[%o3 + 0x48], %f22
40181658ad0SDavid S. Miller	std	%f2, [%o1 + 0x00]
40281658ad0SDavid S. Miller	std	%f0, [%o1 + 0x08]
40381658ad0SDavid S. Miller	subcc	%o2, 0x10, %o2
40481658ad0SDavid S. Miller	bne,pt	%icc, 1b
40581658ad0SDavid S. Miller	 add	%o1, 0x10, %o1
40681658ad0SDavid S. Miller	retl
40781658ad0SDavid S. Miller	 nop
40881658ad0SDavid S. MillerENDPROC(camellia_sparc64_ecb_crypt_4_grand_rounds)
40981658ad0SDavid S. Miller
41081658ad0SDavid S. Miller	.align	32
41181658ad0SDavid S. MillerENTRY(camellia_sparc64_cbc_encrypt_3_grand_rounds)
41281658ad0SDavid S. Miller	/* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */
41381658ad0SDavid S. Miller	ldd	[%o4 + 0x00], %f60
41481658ad0SDavid S. Miller	ldd	[%o4 + 0x08], %f62
41581658ad0SDavid S. Miller1:	ldd	[%o0 + 0x00], %f0
41681658ad0SDavid S. Miller	ldd	[%o0 + 0x08], %f2
41781658ad0SDavid S. Miller	add	%o0, 0x10, %o0
41881658ad0SDavid S. Miller	fxor	%f60, %f0, %f0
41981658ad0SDavid S. Miller	fxor	%f62, %f2, %f2
42081658ad0SDavid S. Miller	fxor	%f4, %f0, %f0
42181658ad0SDavid S. Miller	fxor	%f6, %f2, %f2
42281658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
42381658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
42481658ad0SDavid S. Miller	CAMELLIA_6ROUNDS(40, 0, 2)
42581658ad0SDavid S. Miller	fxor	%f52, %f2, %f60
42681658ad0SDavid S. Miller	fxor	%f54, %f0, %f62
42781658ad0SDavid S. Miller	std	%f60, [%o1 + 0x00]
42881658ad0SDavid S. Miller	std	%f62, [%o1 + 0x08]
42981658ad0SDavid S. Miller	subcc	%o2, 0x10, %o2
43081658ad0SDavid S. Miller	bne,pt	%icc, 1b
43181658ad0SDavid S. Miller	 add	%o1, 0x10, %o1
43281658ad0SDavid S. Miller	std	%f60, [%o4 + 0x00]
43381658ad0SDavid S. Miller	retl
43481658ad0SDavid S. Miller	 std	%f62, [%o4 + 0x08]
43581658ad0SDavid S. MillerENDPROC(camellia_sparc64_cbc_encrypt_3_grand_rounds)
43681658ad0SDavid S. Miller
43781658ad0SDavid S. Miller	.align	32
43881658ad0SDavid S. MillerENTRY(camellia_sparc64_cbc_encrypt_4_grand_rounds)
43981658ad0SDavid S. Miller	/* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */
44081658ad0SDavid S. Miller	ldd	[%o4 + 0x00], %f60
44181658ad0SDavid S. Miller	ldd	[%o4 + 0x08], %f62
44281658ad0SDavid S. Miller1:	ldd	[%o0 + 0x00], %f0
44381658ad0SDavid S. Miller	ldd	[%o0 + 0x08], %f2
44481658ad0SDavid S. Miller	add	%o0, 0x10, %o0
44581658ad0SDavid S. Miller	fxor	%f60, %f0, %f0
44681658ad0SDavid S. Miller	fxor	%f62, %f2, %f2
44781658ad0SDavid S. Miller	fxor	%f4, %f0, %f0
44881658ad0SDavid S. Miller	fxor	%f6, %f2, %f2
44981658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
45081658ad0SDavid S. Miller	ldd	[%o3 + 0xd0], %f8
45181658ad0SDavid S. Miller	ldd	[%o3 + 0xd8], %f10
45281658ad0SDavid S. Miller	ldd	[%o3 + 0xe0], %f12
45381658ad0SDavid S. Miller	ldd	[%o3 + 0xe8], %f14
45481658ad0SDavid S. Miller	ldd	[%o3 + 0xf0], %f16
45581658ad0SDavid S. Miller	ldd	[%o3 + 0xf8], %f18
45681658ad0SDavid S. Miller	ldd	[%o3 + 0x100], %f20
45781658ad0SDavid S. Miller	ldd	[%o3 + 0x108], %f22
45881658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
45981658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI(40, 0, 2)
46081658ad0SDavid S. Miller	CAMELLIA_F(8, 2, 0, 2)
46181658ad0SDavid S. Miller	CAMELLIA_F(10, 0, 2, 0)
46281658ad0SDavid S. Miller	ldd	[%o3 + 0x10], %f8
46381658ad0SDavid S. Miller	ldd	[%o3 + 0x18], %f10
46481658ad0SDavid S. Miller	CAMELLIA_F(12, 2, 0, 2)
46581658ad0SDavid S. Miller	CAMELLIA_F(14, 0, 2, 0)
46681658ad0SDavid S. Miller	ldd	[%o3 + 0x20], %f12
46781658ad0SDavid S. Miller	ldd	[%o3 + 0x28], %f14
46881658ad0SDavid S. Miller	CAMELLIA_F(16, 2, 0, 2)
46981658ad0SDavid S. Miller	CAMELLIA_F(18, 0, 2, 0)
47081658ad0SDavid S. Miller	ldd	[%o3 + 0x30], %f16
47181658ad0SDavid S. Miller	ldd	[%o3 + 0x38], %f18
47281658ad0SDavid S. Miller	fxor	%f20, %f2, %f60
47381658ad0SDavid S. Miller	fxor	%f22, %f0, %f62
47481658ad0SDavid S. Miller	ldd	[%o3 + 0x40], %f20
47581658ad0SDavid S. Miller	ldd	[%o3 + 0x48], %f22
47681658ad0SDavid S. Miller	std	%f60, [%o1 + 0x00]
47781658ad0SDavid S. Miller	std	%f62, [%o1 + 0x08]
47881658ad0SDavid S. Miller	subcc	%o2, 0x10, %o2
47981658ad0SDavid S. Miller	bne,pt	%icc, 1b
48081658ad0SDavid S. Miller	 add	%o1, 0x10, %o1
48181658ad0SDavid S. Miller	std	%f60, [%o4 + 0x00]
48281658ad0SDavid S. Miller	retl
48381658ad0SDavid S. Miller	 std	%f62, [%o4 + 0x08]
48481658ad0SDavid S. MillerENDPROC(camellia_sparc64_cbc_encrypt_4_grand_rounds)
48581658ad0SDavid S. Miller
48681658ad0SDavid S. Miller	.align	32
48781658ad0SDavid S. MillerENTRY(camellia_sparc64_cbc_decrypt_3_grand_rounds)
48881658ad0SDavid S. Miller	/* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */
48981658ad0SDavid S. Miller	ldd	[%o4 + 0x00], %f60
49081658ad0SDavid S. Miller	ldd	[%o4 + 0x08], %f62
49181658ad0SDavid S. Miller1:	ldd	[%o0 + 0x00], %f56
49281658ad0SDavid S. Miller	ldd	[%o0 + 0x08], %f58
49381658ad0SDavid S. Miller	add	%o0, 0x10, %o0
49481658ad0SDavid S. Miller	fxor	%f4, %f56, %f0
49581658ad0SDavid S. Miller	fxor	%f6, %f58, %f2
49681658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
49781658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
49881658ad0SDavid S. Miller	CAMELLIA_6ROUNDS(40, 0, 2)
49981658ad0SDavid S. Miller	fxor	%f52, %f2, %f2
50081658ad0SDavid S. Miller	fxor	%f54, %f0, %f0
50181658ad0SDavid S. Miller	fxor	%f60, %f2, %f2
50281658ad0SDavid S. Miller	fxor	%f62, %f0, %f0
50381658ad0SDavid S. Miller	fsrc2	%f56, %f60
50481658ad0SDavid S. Miller	fsrc2	%f58, %f62
50581658ad0SDavid S. Miller	std	%f2, [%o1 + 0x00]
50681658ad0SDavid S. Miller	std	%f0, [%o1 + 0x08]
50781658ad0SDavid S. Miller	subcc	%o2, 0x10, %o2
50881658ad0SDavid S. Miller	bne,pt	%icc, 1b
50981658ad0SDavid S. Miller	 add	%o1, 0x10, %o1
51081658ad0SDavid S. Miller	std	%f60, [%o4 + 0x00]
51181658ad0SDavid S. Miller	retl
51281658ad0SDavid S. Miller	 std	%f62, [%o4 + 0x08]
51381658ad0SDavid S. MillerENDPROC(camellia_sparc64_cbc_decrypt_3_grand_rounds)
51481658ad0SDavid S. Miller
51581658ad0SDavid S. Miller	.align	32
51681658ad0SDavid S. MillerENTRY(camellia_sparc64_cbc_decrypt_4_grand_rounds)
51781658ad0SDavid S. Miller	/* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */
51881658ad0SDavid S. Miller	ldd	[%o4 + 0x00], %f60
51981658ad0SDavid S. Miller	ldd	[%o4 + 0x08], %f62
52081658ad0SDavid S. Miller1:	ldd	[%o0 + 0x00], %f56
52181658ad0SDavid S. Miller	ldd	[%o0 + 0x08], %f58
52281658ad0SDavid S. Miller	add	%o0, 0x10, %o0
52381658ad0SDavid S. Miller	fxor	%f4, %f56, %f0
52481658ad0SDavid S. Miller	fxor	%f6, %f58, %f2
52581658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
52681658ad0SDavid S. Miller	ldd	[%o3 + 0xd0], %f8
52781658ad0SDavid S. Miller	ldd	[%o3 + 0xd8], %f10
52881658ad0SDavid S. Miller	ldd	[%o3 + 0xe0], %f12
52981658ad0SDavid S. Miller	ldd	[%o3 + 0xe8], %f14
53081658ad0SDavid S. Miller	ldd	[%o3 + 0xf0], %f16
53181658ad0SDavid S. Miller	ldd	[%o3 + 0xf8], %f18
53281658ad0SDavid S. Miller	ldd	[%o3 + 0x100], %f20
53381658ad0SDavid S. Miller	ldd	[%o3 + 0x108], %f22
53481658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
53581658ad0SDavid S. Miller	CAMELLIA_6ROUNDS_FL_FLI(40, 0, 2)
53681658ad0SDavid S. Miller	CAMELLIA_F(8, 2, 0, 2)
53781658ad0SDavid S. Miller	CAMELLIA_F(10, 0, 2, 0)
53881658ad0SDavid S. Miller	ldd	[%o3 + 0x10], %f8
53981658ad0SDavid S. Miller	ldd	[%o3 + 0x18], %f10
54081658ad0SDavid S. Miller	CAMELLIA_F(12, 2, 0, 2)
54181658ad0SDavid S. Miller	CAMELLIA_F(14, 0, 2, 0)
54281658ad0SDavid S. Miller	ldd	[%o3 + 0x20], %f12
54381658ad0SDavid S. Miller	ldd	[%o3 + 0x28], %f14
54481658ad0SDavid S. Miller	CAMELLIA_F(16, 2, 0, 2)
54581658ad0SDavid S. Miller	CAMELLIA_F(18, 0, 2, 0)
54681658ad0SDavid S. Miller	ldd	[%o3 + 0x30], %f16
54781658ad0SDavid S. Miller	ldd	[%o3 + 0x38], %f18
54881658ad0SDavid S. Miller	fxor	%f20, %f2, %f2
54981658ad0SDavid S. Miller	fxor	%f22, %f0, %f0
55081658ad0SDavid S. Miller	ldd	[%o3 + 0x40], %f20
55181658ad0SDavid S. Miller	ldd	[%o3 + 0x48], %f22
55281658ad0SDavid S. Miller	fxor	%f60, %f2, %f2
55381658ad0SDavid S. Miller	fxor	%f62, %f0, %f0
55481658ad0SDavid S. Miller	fsrc2	%f56, %f60
55581658ad0SDavid S. Miller	fsrc2	%f58, %f62
55681658ad0SDavid S. Miller	std	%f2, [%o1 + 0x00]
55781658ad0SDavid S. Miller	std	%f0, [%o1 + 0x08]
55881658ad0SDavid S. Miller	subcc	%o2, 0x10, %o2
55981658ad0SDavid S. Miller	bne,pt	%icc, 1b
56081658ad0SDavid S. Miller	 add	%o1, 0x10, %o1
56181658ad0SDavid S. Miller	std	%f60, [%o4 + 0x00]
56281658ad0SDavid S. Miller	retl
56381658ad0SDavid S. Miller	 std	%f62, [%o4 + 0x08]
56481658ad0SDavid S. MillerENDPROC(camellia_sparc64_cbc_decrypt_4_grand_rounds)
565