Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) #include <linux/linkage.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) #include <asm/visasm.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) #include "opcodes.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) #define CAMELLIA_6ROUNDS(KEY_BASE, I0, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 	CAMELLIA_F(KEY_BASE +  0, I1, I0, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 	CAMELLIA_F(KEY_BASE +  2, I0, I1, I0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) 	CAMELLIA_F(KEY_BASE +  4, I1, I0, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 	CAMELLIA_F(KEY_BASE +  6, I0, I1, I0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 	CAMELLIA_F(KEY_BASE +  8, I1, I0, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 	CAMELLIA_F(KEY_BASE + 10, I0, I1, I0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #define CAMELLIA_6ROUNDS_FL_FLI(KEY_BASE, I0, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 	CAMELLIA_6ROUNDS(KEY_BASE, I0, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 	CAMELLIA_FL(KEY_BASE + 12, I0, I0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 	CAMELLIA_FLI(KEY_BASE + 14, I1, I1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 	.data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 	.align	8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) SIGMA:	.xword	0xA09E667F3BCC908B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 	.xword	0xB67AE8584CAA73B2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 	.xword	0xC6EF372FE94F82BE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 	.xword	0x54FF53A5F1D36F1C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	.xword	0x10E527FADE682D1D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 	.xword	0xB05688C2B3E6C1FD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	.text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	.align	32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) ENTRY(camellia_sparc64_key_expand)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	/* %o0=in_key, %o1=encrypt_key, %o2=key_len, %o3=decrypt_key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 	VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 	ld	[%o0 + 0x00], %f0	! i0, k[0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 	ld	[%o0 + 0x04], %f1	! i1, k[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 	ld	[%o0 + 0x08], %f2	! i2, k[2]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	ld	[%o0 + 0x0c], %f3	! i3, k[3]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	std	%f0, [%o1 + 0x00]	! k[0, 1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 	fsrc2	%f0, %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	std	%f2, [%o1 + 0x08]	! k[2, 3]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	cmp	%o2, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	be	10f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	 fsrc2	%f2, %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	ld	[%o0 + 0x10], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	ld	[%o0 + 0x14], %f1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	std	%f0, [%o1 + 0x20]	! k[8, 9]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 	cmp	%o2, 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	fone	%f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	be,a	1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	 fxor	%f10, %f0, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	ld	[%o0 + 0x18], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	ld	[%o0 + 0x1c], %f3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	std	%f2, [%o1 + 0x28]	! k[10, 11]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	fxor	%f28, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	fxor	%f30, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 10:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	sethi	%hi(SIGMA), %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	or	%g3, %lo(SIGMA), %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	ldd	[%g3 + 0x00], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	ldd	[%g3 + 0x08], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	ldd	[%g3 + 0x10], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	ldd	[%g3 + 0x18], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	ldd	[%g3 + 0x20], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	ldd	[%g3 + 0x28], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	CAMELLIA_F(16, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	CAMELLIA_F(18, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	fxor	%f28, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	fxor	%f30, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	CAMELLIA_F(20, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	CAMELLIA_F(22, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) #define ROTL128(S01, S23, TMP1, TMP2, N)	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	srlx	S01, (64 - N), TMP1;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	sllx	S01, N, S01;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	srlx	S23, (64 - N), TMP2;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	sllx	S23, N, S23;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	or	S01, TMP2, S01;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	or	S23, TMP1, S23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	cmp	%o2, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	bne	1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	/* 128-bit key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	std	%f0, [%o1 + 0x10]	! k[ 4,  5]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	std	%f2, [%o1 + 0x18]	! k[ 6,  7]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	MOVDTOX_F0_O4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	MOVDTOX_F2_O5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	stx	%o4, [%o1 + 0x30]	! k[12, 13]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	stx	%o5, [%o1 + 0x38]	! k[14, 15]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	stx	%o4, [%o1 + 0x40]	! k[16, 17]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	stx	%o5, [%o1 + 0x48]	! k[18, 19]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	stx	%o4, [%o1 + 0x60]	! k[24, 25]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	stx	%o4, [%o1 + 0x70]	! k[28, 29]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	stx	%o5, [%o1 + 0x78]	! k[30, 31]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	ROTL128(%o4, %o5, %g2, %g3, 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	stx	%o4, [%o1 + 0xa0]	! k[40, 41]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	stx	%o5, [%o1 + 0xa8]	! k[42, 43]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	ROTL128(%o4, %o5, %g2, %g3, 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	stx	%o4, [%o1 + 0xc0]	! k[48, 49]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	stx	%o5, [%o1 + 0xc8]	! k[50, 51]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	ldx	[%o1 + 0x00], %o4	! k[ 0,  1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	ldx	[%o1 + 0x08], %o5	! k[ 2,  3]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	stx	%o4, [%o1 + 0x20]	! k[ 8,  9]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	stx	%o5, [%o1 + 0x28]	! k[10, 11]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	ROTL128(%o4, %o5, %g2, %g3, 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	stx	%o4, [%o1 + 0x50]	! k[20, 21]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	stx	%o5, [%o1 + 0x58]	! k[22, 23]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	stx	%o5, [%o1 + 0x68]	! k[26, 27]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	ROTL128(%o4, %o5, %g2, %g3, 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	stx	%o4, [%o1 + 0x80]	! k[32, 33]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	stx	%o5, [%o1 + 0x88]	! k[34, 35]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	ROTL128(%o4, %o5, %g2, %g3, 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	stx	%o4, [%o1 + 0x90]	! k[36, 37]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	stx	%o5, [%o1 + 0x98]	! k[38, 39]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	ROTL128(%o4, %o5, %g2, %g3, 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 	stx	%o4, [%o1 + 0xb0]	! k[44, 45]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	stx	%o5, [%o1 + 0xb8]	! k[46, 47]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 	ba,pt	%xcc, 2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 	 mov	(3 * 16 * 4), %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	/* 192-bit or 256-bit key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 	std	%f0, [%o1 + 0x30]	! k[12, 13]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 	std	%f2, [%o1 + 0x38]	! k[14, 15]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 	ldd	[%o1 + 0x20], %f4	! k[ 8,  9]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 	ldd	[%o1 + 0x28], %f6	! k[10, 11]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	fxor	%f0, %f4, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 	fxor	%f2, %f6, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	CAMELLIA_F(24, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	CAMELLIA_F(26, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	std	%f0, [%o1 + 0x10]	! k[ 4,  5]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	std	%f2, [%o1 + 0x18]	! k[ 6,  7]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 	MOVDTOX_F0_O4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	MOVDTOX_F2_O5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	ROTL128(%o4, %o5, %g2, %g3, 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	stx	%o4, [%o1 + 0x50]	! k[20, 21]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 	stx	%o5, [%o1 + 0x58]	! k[22, 23]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	ROTL128(%o4, %o5, %g2, %g3, 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 	stx	%o4, [%o1 + 0xa0]	! k[40, 41]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	stx	%o5, [%o1 + 0xa8]	! k[42, 43]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 	ROTL128(%o4, %o5, %g2, %g3, 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 	stx	%o4, [%o1 + 0x100]	! k[64, 65]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 	stx	%o5, [%o1 + 0x108]	! k[66, 67]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	ldx	[%o1 + 0x20], %o4	! k[ 8,  9]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	ldx	[%o1 + 0x28], %o5	! k[10, 11]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 	ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 	stx	%o4, [%o1 + 0x20]	! k[ 8,  9]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 	stx	%o5, [%o1 + 0x28]	! k[10, 11]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 	ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 	stx	%o4, [%o1 + 0x40]	! k[16, 17]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	stx	%o5, [%o1 + 0x48]	! k[18, 19]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	ROTL128(%o4, %o5, %g2, %g3, 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 	stx	%o4, [%o1 + 0x90]	! k[36, 37]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	stx	%o5, [%o1 + 0x98]	! k[38, 39]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	ROTL128(%o4, %o5, %g2, %g3, 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	stx	%o4, [%o1 + 0xd0]	! k[52, 53]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 	stx	%o5, [%o1 + 0xd8]	! k[54, 55]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	ldx	[%o1 + 0x30], %o4	! k[12, 13]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	ldx	[%o1 + 0x38], %o5	! k[14, 15]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	stx	%o4, [%o1 + 0x30]	! k[12, 13]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	stx	%o5, [%o1 + 0x38]	! k[14, 15]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	ROTL128(%o4, %o5, %g2, %g3, 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 	stx	%o4, [%o1 + 0x70]	! k[28, 29]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 	stx	%o5, [%o1 + 0x78]	! k[30, 31]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 	srlx	%o4, 32, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 	srlx	%o5, 32, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 	stw	%o4, [%o1 + 0xc0]	! k[48]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 	stw	%g3, [%o1 + 0xc4]	! k[49]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 	stw	%o5, [%o1 + 0xc8]	! k[50]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 	stw	%g2, [%o1 + 0xcc]	! k[51]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 	ROTL128(%o4, %o5, %g2, %g3, 49)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 	stx	%o4, [%o1 + 0xe0]	! k[56, 57]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 	stx	%o5, [%o1 + 0xe8]	! k[58, 59]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 	ldx	[%o1 + 0x00], %o4	! k[ 0,  1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 	ldx	[%o1 + 0x08], %o5	! k[ 2,  3]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 	ROTL128(%o4, %o5, %g2, %g3, 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 	stx	%o4, [%o1 + 0x60]	! k[24, 25]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 	stx	%o5, [%o1 + 0x68]	! k[26, 27]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 	ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 	stx	%o4, [%o1 + 0x80]	! k[32, 33]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	stx	%o5, [%o1 + 0x88]	! k[34, 35]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 	ROTL128(%o4, %o5, %g2, %g3, 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 	stx	%o4, [%o1 + 0xb0]	! k[44, 45]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 	stx	%o5, [%o1 + 0xb8]	! k[46, 47]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 	ROTL128(%o4, %o5, %g2, %g3, 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	stx	%o4, [%o1 + 0xf0]	! k[60, 61]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	stx	%o5, [%o1 + 0xf8]	! k[62, 63]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	mov	(4 * 16 * 4), %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 	add	%o1, %o0, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 	ldd	[%o1 + 0x00], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 	ldd	[%o1 + 0x08], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 	std	%f0, [%o3 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 	std	%f2, [%o3 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 	add	%o3, 0x10, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 	sub	%o1, (16 * 4), %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 	ldd	[%o1 + 0x38], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 	ldd	[%o1 + 0x30], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	ldd	[%o1 + 0x28], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 	ldd	[%o1 + 0x20], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 	ldd	[%o1 + 0x18], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 	ldd	[%o1 + 0x10], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 	std	%f0, [%o3 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 	std	%f2, [%o3 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	std	%f4, [%o3 + 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 	std	%f6, [%o3 + 0x18]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 	std	%f8, [%o3 + 0x20]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 	std	%f10, [%o3 + 0x28]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 	ldd	[%o1 + 0x08], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 	ldd	[%o1 + 0x00], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 	std	%f0, [%o3 + 0x30]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 	std	%f2, [%o3 + 0x38]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 	subcc	%o0, (16 * 4), %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 	bne,pt	%icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 	 add	%o3, (16 * 4), %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 	std	%f2, [%o3 - 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 	std	%f0, [%o3 - 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 	retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 	 VISExit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) ENDPROC(camellia_sparc64_key_expand)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 	.align	32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) ENTRY(camellia_sparc64_crypt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 	/* %o0=key, %o1=input, %o2=output, %o3=key_len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 	VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 	ld	[%o1 + 0x00], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 	ld	[%o1 + 0x04], %f1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 	ld	[%o1 + 0x08], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 	ld	[%o1 + 0x0c], %f3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 	ldd	[%o0 + 0x00], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 	ldd	[%o0 + 0x08], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 	cmp	%o3, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 	fxor	%f4, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 	be	1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 	 fxor	%f6, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 	ldd	[%o0 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 	ldd	[%o0 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 	ldd	[%o0 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 	ldd	[%o0 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 	ldd	[%o0 + 0x30], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 	ldd	[%o0 + 0x38], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 	ldd	[%o0 + 0x40], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 	ldd	[%o0 + 0x48], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 	add	%o0, 0x40, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 	CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 	ldd	[%o0 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 	ldd	[%o0 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 	ldd	[%o0 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 	ldd	[%o0 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 	ldd	[%o0 + 0x30], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) 	ldd	[%o0 + 0x38], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 	ldd	[%o0 + 0x40], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) 	ldd	[%o0 + 0x48], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 	ldd	[%o0 + 0x50], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 	ldd	[%o0 + 0x58], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 	ldd	[%o0 + 0x60], %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 	ldd	[%o0 + 0x68], %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 	ldd	[%o0 + 0x70], %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 	ldd	[%o0 + 0x78], %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 	ldd	[%o0 + 0x80], %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 	ldd	[%o0 + 0x88], %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 	ldd	[%o0 + 0x90], %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 	ldd	[%o0 + 0x98], %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 	ldd	[%o0 + 0xa0], %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 	ldd	[%o0 + 0xa8], %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 	ldd	[%o0 + 0xb0], %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) 	ldd	[%o0 + 0xb8], %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 	ldd	[%o0 + 0xc0], %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 	ldd	[%o0 + 0xc8], %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 	CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 	CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 	CAMELLIA_6ROUNDS(40, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 	fxor	%f52, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) 	fxor	%f54, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 	st	%f2, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) 	st	%f3, [%o2 + 0x04]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 	st	%f0, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 	st	%f1, [%o2 + 0x0c]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) 	retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 	 VISExit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) ENDPROC(camellia_sparc64_crypt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 	.align	32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) ENTRY(camellia_sparc64_load_keys)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 	/* %o0=key, %o1=key_len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 	VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 	ldd	[%o0 + 0x00], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 	ldd	[%o0 + 0x08], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 	ldd	[%o0 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 	ldd	[%o0 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 	ldd	[%o0 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) 	ldd	[%o0 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 	ldd	[%o0 + 0x30], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 	ldd	[%o0 + 0x38], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 	ldd	[%o0 + 0x40], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 	ldd	[%o0 + 0x48], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 	ldd	[%o0 + 0x50], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 	ldd	[%o0 + 0x58], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 	ldd	[%o0 + 0x60], %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) 	ldd	[%o0 + 0x68], %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 	ldd	[%o0 + 0x70], %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) 	ldd	[%o0 + 0x78], %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 	ldd	[%o0 + 0x80], %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) 	ldd	[%o0 + 0x88], %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) 	ldd	[%o0 + 0x90], %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) 	ldd	[%o0 + 0x98], %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) 	ldd	[%o0 + 0xa0], %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 	ldd	[%o0 + 0xa8], %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) 	ldd	[%o0 + 0xb0], %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) 	ldd	[%o0 + 0xb8], %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) 	ldd	[%o0 + 0xc0], %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) 	retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) 	 ldd	[%o0 + 0xc8], %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) ENDPROC(camellia_sparc64_load_keys)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 	.align	32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) ENTRY(camellia_sparc64_ecb_crypt_3_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) 	/* %o0=input, %o1=output, %o2=len, %o3=key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 1:	ldd	[%o0 + 0x00], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) 	ldd	[%o0 + 0x08], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) 	add	%o0, 0x10, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) 	fxor	%f4, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) 	fxor	%f6, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) 	CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) 	CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) 	CAMELLIA_6ROUNDS(40, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) 	fxor	%f52, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) 	fxor	%f54, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) 	std	%f2, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) 	std	%f0, [%o1 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) 	subcc	%o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) 	bne,pt	%icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) 	 add	%o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) 	retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) ENDPROC(camellia_sparc64_ecb_crypt_3_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) 	.align	32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) ENTRY(camellia_sparc64_ecb_crypt_4_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) 	/* %o0=input, %o1=output, %o2=len, %o3=key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) 1:	ldd	[%o0 + 0x00], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) 	ldd	[%o0 + 0x08], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) 	add	%o0, 0x10, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) 	fxor	%f4, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) 	fxor	%f6, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) 	CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) 	ldd	[%o3 + 0xd0], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) 	ldd	[%o3 + 0xd8], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) 	ldd	[%o3 + 0xe0], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) 	ldd	[%o3 + 0xe8], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) 	ldd	[%o3 + 0xf0], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) 	ldd	[%o3 + 0xf8], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) 	ldd	[%o3 + 0x100], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) 	ldd	[%o3 + 0x108], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) 	CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) 	CAMELLIA_6ROUNDS_FL_FLI(40, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) 	CAMELLIA_F(8, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) 	CAMELLIA_F(10, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) 	ldd	[%o3 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) 	ldd	[%o3 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) 	CAMELLIA_F(12, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) 	CAMELLIA_F(14, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) 	ldd	[%o3 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) 	ldd	[%o3 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) 	CAMELLIA_F(16, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) 	CAMELLIA_F(18, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) 	ldd	[%o3 + 0x30], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) 	ldd	[%o3 + 0x38], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) 	fxor	%f20, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) 	fxor	%f22, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) 	ldd	[%o3 + 0x40], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) 	ldd	[%o3 + 0x48], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) 	std	%f2, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) 	std	%f0, [%o1 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) 	subcc	%o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) 	bne,pt	%icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) 	 add	%o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) 	retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) ENDPROC(camellia_sparc64_ecb_crypt_4_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) 	.align	32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) ENTRY(camellia_sparc64_cbc_encrypt_3_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) 	/* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) 	ldd	[%o4 + 0x00], %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) 	ldd	[%o4 + 0x08], %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) 1:	ldd	[%o0 + 0x00], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) 	ldd	[%o0 + 0x08], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) 	add	%o0, 0x10, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) 	fxor	%f60, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) 	fxor	%f62, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) 	fxor	%f4, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) 	fxor	%f6, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) 	CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) 	CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) 	CAMELLIA_6ROUNDS(40, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) 	fxor	%f52, %f2, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) 	fxor	%f54, %f0, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) 	std	%f60, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) 	std	%f62, [%o1 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) 	subcc	%o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) 	bne,pt	%icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) 	 add	%o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) 	std	%f60, [%o4 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) 	retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) 	 std	%f62, [%o4 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) ENDPROC(camellia_sparc64_cbc_encrypt_3_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) 	.align	32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) ENTRY(camellia_sparc64_cbc_encrypt_4_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) 	/* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) 	ldd	[%o4 + 0x00], %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) 	ldd	[%o4 + 0x08], %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) 1:	ldd	[%o0 + 0x00], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) 	ldd	[%o0 + 0x08], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) 	add	%o0, 0x10, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) 	fxor	%f60, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) 	fxor	%f62, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) 	fxor	%f4, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) 	fxor	%f6, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) 	CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) 	ldd	[%o3 + 0xd0], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) 	ldd	[%o3 + 0xd8], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) 	ldd	[%o3 + 0xe0], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) 	ldd	[%o3 + 0xe8], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) 	ldd	[%o3 + 0xf0], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) 	ldd	[%o3 + 0xf8], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) 	ldd	[%o3 + 0x100], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) 	ldd	[%o3 + 0x108], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) 	CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) 	CAMELLIA_6ROUNDS_FL_FLI(40, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) 	CAMELLIA_F(8, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) 	CAMELLIA_F(10, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) 	ldd	[%o3 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) 	ldd	[%o3 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) 	CAMELLIA_F(12, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) 	CAMELLIA_F(14, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) 	ldd	[%o3 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) 	ldd	[%o3 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) 	CAMELLIA_F(16, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) 	CAMELLIA_F(18, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) 	ldd	[%o3 + 0x30], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) 	ldd	[%o3 + 0x38], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) 	fxor	%f20, %f2, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) 	fxor	%f22, %f0, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) 	ldd	[%o3 + 0x40], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) 	ldd	[%o3 + 0x48], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) 	std	%f60, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) 	std	%f62, [%o1 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) 	subcc	%o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) 	bne,pt	%icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) 	 add	%o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) 	std	%f60, [%o4 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) 	retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) 	 std	%f62, [%o4 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) ENDPROC(camellia_sparc64_cbc_encrypt_4_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) 	.align	32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) ENTRY(camellia_sparc64_cbc_decrypt_3_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) 	/* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) 	ldd	[%o4 + 0x00], %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) 	ldd	[%o4 + 0x08], %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) 1:	ldd	[%o0 + 0x00], %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) 	ldd	[%o0 + 0x08], %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) 	add	%o0, 0x10, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) 	fxor	%f4, %f56, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) 	fxor	%f6, %f58, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) 	CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) 	CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) 	CAMELLIA_6ROUNDS(40, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) 	fxor	%f52, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) 	fxor	%f54, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) 	fxor	%f60, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) 	fxor	%f62, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) 	fsrc2	%f56, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) 	fsrc2	%f58, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) 	std	%f2, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) 	std	%f0, [%o1 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) 	subcc	%o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) 	bne,pt	%icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) 	 add	%o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) 	std	%f60, [%o4 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) 	retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) 	 std	%f62, [%o4 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) ENDPROC(camellia_sparc64_cbc_decrypt_3_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) 	.align	32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) ENTRY(camellia_sparc64_cbc_decrypt_4_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) 	/* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) 	ldd	[%o4 + 0x00], %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) 	ldd	[%o4 + 0x08], %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) 1:	ldd	[%o0 + 0x00], %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) 	ldd	[%o0 + 0x08], %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) 	add	%o0, 0x10, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) 	fxor	%f4, %f56, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) 	fxor	%f6, %f58, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) 	CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) 	ldd	[%o3 + 0xd0], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) 	ldd	[%o3 + 0xd8], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) 	ldd	[%o3 + 0xe0], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) 	ldd	[%o3 + 0xe8], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) 	ldd	[%o3 + 0xf0], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) 	ldd	[%o3 + 0xf8], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) 	ldd	[%o3 + 0x100], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) 	ldd	[%o3 + 0x108], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) 	CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) 	CAMELLIA_6ROUNDS_FL_FLI(40, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) 	CAMELLIA_F(8, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) 	CAMELLIA_F(10, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) 	ldd	[%o3 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) 	ldd	[%o3 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) 	CAMELLIA_F(12, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) 	CAMELLIA_F(14, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) 	ldd	[%o3 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) 	ldd	[%o3 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) 	CAMELLIA_F(16, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) 	CAMELLIA_F(18, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) 	ldd	[%o3 + 0x30], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) 	ldd	[%o3 + 0x38], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) 	fxor	%f20, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) 	fxor	%f22, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) 	ldd	[%o3 + 0x40], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) 	ldd	[%o3 + 0x48], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) 	fxor	%f60, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) 	fxor	%f62, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) 	fsrc2	%f56, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) 	fsrc2	%f58, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) 	std	%f2, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) 	std	%f0, [%o1 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) 	subcc	%o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) 	bne,pt	%icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) 	 add	%o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) 	std	%f60, [%o4 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) 	retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) 	 std	%f62, [%o4 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) ENDPROC(camellia_sparc64_cbc_decrypt_4_grand_rounds)