xref: /OK3568_Linux_fs/kernel/arch/sparc/crypto/des_asm.S (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun#include <linux/linkage.h>
3*4882a593Smuzhiyun#include <asm/visasm.h>
4*4882a593Smuzhiyun
5*4882a593Smuzhiyun#include "opcodes.h"
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun	.align	32
8*4882a593SmuzhiyunENTRY(des_sparc64_key_expand)
9*4882a593Smuzhiyun	/* %o0=input_key, %o1=output_key */
10*4882a593Smuzhiyun	VISEntryHalf
11*4882a593Smuzhiyun	ld	[%o0 + 0x00], %f0
12*4882a593Smuzhiyun	ld	[%o0 + 0x04], %f1
13*4882a593Smuzhiyun	DES_KEXPAND(0, 0, 0)
14*4882a593Smuzhiyun	DES_KEXPAND(0, 1, 2)
15*4882a593Smuzhiyun	DES_KEXPAND(2, 3, 6)
16*4882a593Smuzhiyun	DES_KEXPAND(2, 2, 4)
17*4882a593Smuzhiyun	DES_KEXPAND(6, 3, 10)
18*4882a593Smuzhiyun	DES_KEXPAND(6, 2, 8)
19*4882a593Smuzhiyun	DES_KEXPAND(10, 3, 14)
20*4882a593Smuzhiyun	DES_KEXPAND(10, 2, 12)
21*4882a593Smuzhiyun	DES_KEXPAND(14, 1, 16)
22*4882a593Smuzhiyun	DES_KEXPAND(16, 3, 20)
23*4882a593Smuzhiyun	DES_KEXPAND(16, 2, 18)
24*4882a593Smuzhiyun	DES_KEXPAND(20, 3, 24)
25*4882a593Smuzhiyun	DES_KEXPAND(20, 2, 22)
26*4882a593Smuzhiyun	DES_KEXPAND(24, 3, 28)
27*4882a593Smuzhiyun	DES_KEXPAND(24, 2, 26)
28*4882a593Smuzhiyun	DES_KEXPAND(28, 1, 30)
29*4882a593Smuzhiyun	std	%f0, [%o1 + 0x00]
30*4882a593Smuzhiyun	std	%f2, [%o1 + 0x08]
31*4882a593Smuzhiyun	std	%f4, [%o1 + 0x10]
32*4882a593Smuzhiyun	std	%f6, [%o1 + 0x18]
33*4882a593Smuzhiyun	std	%f8, [%o1 + 0x20]
34*4882a593Smuzhiyun	std	%f10, [%o1 + 0x28]
35*4882a593Smuzhiyun	std	%f12, [%o1 + 0x30]
36*4882a593Smuzhiyun	std	%f14, [%o1 + 0x38]
37*4882a593Smuzhiyun	std	%f16, [%o1 + 0x40]
38*4882a593Smuzhiyun	std	%f18, [%o1 + 0x48]
39*4882a593Smuzhiyun	std	%f20, [%o1 + 0x50]
40*4882a593Smuzhiyun	std	%f22, [%o1 + 0x58]
41*4882a593Smuzhiyun	std	%f24, [%o1 + 0x60]
42*4882a593Smuzhiyun	std	%f26, [%o1 + 0x68]
43*4882a593Smuzhiyun	std	%f28, [%o1 + 0x70]
44*4882a593Smuzhiyun	std	%f30, [%o1 + 0x78]
45*4882a593Smuzhiyun	retl
46*4882a593Smuzhiyun	 VISExitHalf
47*4882a593SmuzhiyunENDPROC(des_sparc64_key_expand)
48*4882a593Smuzhiyun
49*4882a593Smuzhiyun	.align	32
50*4882a593SmuzhiyunENTRY(des_sparc64_crypt)
51*4882a593Smuzhiyun	/* %o0=key, %o1=input, %o2=output */
52*4882a593Smuzhiyun	VISEntry
53*4882a593Smuzhiyun	ldd	[%o1 + 0x00], %f32
54*4882a593Smuzhiyun	ldd	[%o0 + 0x00], %f0
55*4882a593Smuzhiyun	ldd	[%o0 + 0x08], %f2
56*4882a593Smuzhiyun	ldd	[%o0 + 0x10], %f4
57*4882a593Smuzhiyun	ldd	[%o0 + 0x18], %f6
58*4882a593Smuzhiyun	ldd	[%o0 + 0x20], %f8
59*4882a593Smuzhiyun	ldd	[%o0 + 0x28], %f10
60*4882a593Smuzhiyun	ldd	[%o0 + 0x30], %f12
61*4882a593Smuzhiyun	ldd	[%o0 + 0x38], %f14
62*4882a593Smuzhiyun	ldd	[%o0 + 0x40], %f16
63*4882a593Smuzhiyun	ldd	[%o0 + 0x48], %f18
64*4882a593Smuzhiyun	ldd	[%o0 + 0x50], %f20
65*4882a593Smuzhiyun	ldd	[%o0 + 0x58], %f22
66*4882a593Smuzhiyun	ldd	[%o0 + 0x60], %f24
67*4882a593Smuzhiyun	ldd	[%o0 + 0x68], %f26
68*4882a593Smuzhiyun	ldd	[%o0 + 0x70], %f28
69*4882a593Smuzhiyun	ldd	[%o0 + 0x78], %f30
70*4882a593Smuzhiyun	DES_IP(32, 32)
71*4882a593Smuzhiyun	DES_ROUND(0, 2, 32, 32)
72*4882a593Smuzhiyun	DES_ROUND(4, 6, 32, 32)
73*4882a593Smuzhiyun	DES_ROUND(8, 10, 32, 32)
74*4882a593Smuzhiyun	DES_ROUND(12, 14, 32, 32)
75*4882a593Smuzhiyun	DES_ROUND(16, 18, 32, 32)
76*4882a593Smuzhiyun	DES_ROUND(20, 22, 32, 32)
77*4882a593Smuzhiyun	DES_ROUND(24, 26, 32, 32)
78*4882a593Smuzhiyun	DES_ROUND(28, 30, 32, 32)
79*4882a593Smuzhiyun	DES_IIP(32, 32)
80*4882a593Smuzhiyun	std	%f32, [%o2 + 0x00]
81*4882a593Smuzhiyun	retl
82*4882a593Smuzhiyun	 VISExit
83*4882a593SmuzhiyunENDPROC(des_sparc64_crypt)
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun	.align	32
86*4882a593SmuzhiyunENTRY(des_sparc64_load_keys)
87*4882a593Smuzhiyun	/* %o0=key */
88*4882a593Smuzhiyun	VISEntry
89*4882a593Smuzhiyun	ldd	[%o0 + 0x00], %f0
90*4882a593Smuzhiyun	ldd	[%o0 + 0x08], %f2
91*4882a593Smuzhiyun	ldd	[%o0 + 0x10], %f4
92*4882a593Smuzhiyun	ldd	[%o0 + 0x18], %f6
93*4882a593Smuzhiyun	ldd	[%o0 + 0x20], %f8
94*4882a593Smuzhiyun	ldd	[%o0 + 0x28], %f10
95*4882a593Smuzhiyun	ldd	[%o0 + 0x30], %f12
96*4882a593Smuzhiyun	ldd	[%o0 + 0x38], %f14
97*4882a593Smuzhiyun	ldd	[%o0 + 0x40], %f16
98*4882a593Smuzhiyun	ldd	[%o0 + 0x48], %f18
99*4882a593Smuzhiyun	ldd	[%o0 + 0x50], %f20
100*4882a593Smuzhiyun	ldd	[%o0 + 0x58], %f22
101*4882a593Smuzhiyun	ldd	[%o0 + 0x60], %f24
102*4882a593Smuzhiyun	ldd	[%o0 + 0x68], %f26
103*4882a593Smuzhiyun	ldd	[%o0 + 0x70], %f28
104*4882a593Smuzhiyun	retl
105*4882a593Smuzhiyun	 ldd	[%o0 + 0x78], %f30
106*4882a593SmuzhiyunENDPROC(des_sparc64_load_keys)
107*4882a593Smuzhiyun
108*4882a593Smuzhiyun	.align	32
109*4882a593SmuzhiyunENTRY(des_sparc64_ecb_crypt)
110*4882a593Smuzhiyun	/* %o0=input, %o1=output, %o2=len */
111*4882a593Smuzhiyun1:	ldd	[%o0 + 0x00], %f32
112*4882a593Smuzhiyun	add	%o0, 0x08, %o0
113*4882a593Smuzhiyun	DES_IP(32, 32)
114*4882a593Smuzhiyun	DES_ROUND(0, 2, 32, 32)
115*4882a593Smuzhiyun	DES_ROUND(4, 6, 32, 32)
116*4882a593Smuzhiyun	DES_ROUND(8, 10, 32, 32)
117*4882a593Smuzhiyun	DES_ROUND(12, 14, 32, 32)
118*4882a593Smuzhiyun	DES_ROUND(16, 18, 32, 32)
119*4882a593Smuzhiyun	DES_ROUND(20, 22, 32, 32)
120*4882a593Smuzhiyun	DES_ROUND(24, 26, 32, 32)
121*4882a593Smuzhiyun	DES_ROUND(28, 30, 32, 32)
122*4882a593Smuzhiyun	DES_IIP(32, 32)
123*4882a593Smuzhiyun	std	%f32, [%o1 + 0x00]
124*4882a593Smuzhiyun	subcc	%o2, 0x08, %o2
125*4882a593Smuzhiyun	bne,pt	%icc, 1b
126*4882a593Smuzhiyun	 add	%o1, 0x08, %o1
127*4882a593Smuzhiyun	retl
128*4882a593Smuzhiyun	 nop
129*4882a593SmuzhiyunENDPROC(des_sparc64_ecb_crypt)
130*4882a593Smuzhiyun
131*4882a593Smuzhiyun	.align	32
132*4882a593SmuzhiyunENTRY(des_sparc64_cbc_encrypt)
133*4882a593Smuzhiyun	/* %o0=input, %o1=output, %o2=len, %o3=IV */
134*4882a593Smuzhiyun	ldd	[%o3 + 0x00], %f32
135*4882a593Smuzhiyun1:	ldd	[%o0 + 0x00], %f34
136*4882a593Smuzhiyun	fxor	%f32, %f34, %f32
137*4882a593Smuzhiyun	DES_IP(32, 32)
138*4882a593Smuzhiyun	DES_ROUND(0, 2, 32, 32)
139*4882a593Smuzhiyun	DES_ROUND(4, 6, 32, 32)
140*4882a593Smuzhiyun	DES_ROUND(8, 10, 32, 32)
141*4882a593Smuzhiyun	DES_ROUND(12, 14, 32, 32)
142*4882a593Smuzhiyun	DES_ROUND(16, 18, 32, 32)
143*4882a593Smuzhiyun	DES_ROUND(20, 22, 32, 32)
144*4882a593Smuzhiyun	DES_ROUND(24, 26, 32, 32)
145*4882a593Smuzhiyun	DES_ROUND(28, 30, 32, 32)
146*4882a593Smuzhiyun	DES_IIP(32, 32)
147*4882a593Smuzhiyun	std	%f32, [%o1 + 0x00]
148*4882a593Smuzhiyun	add	%o0, 0x08, %o0
149*4882a593Smuzhiyun	subcc	%o2, 0x08, %o2
150*4882a593Smuzhiyun	bne,pt	%icc, 1b
151*4882a593Smuzhiyun	 add	%o1, 0x08, %o1
152*4882a593Smuzhiyun	retl
153*4882a593Smuzhiyun	 std	%f32, [%o3 + 0x00]
154*4882a593SmuzhiyunENDPROC(des_sparc64_cbc_encrypt)
155*4882a593Smuzhiyun
156*4882a593Smuzhiyun	.align	32
157*4882a593SmuzhiyunENTRY(des_sparc64_cbc_decrypt)
158*4882a593Smuzhiyun	/* %o0=input, %o1=output, %o2=len, %o3=IV */
159*4882a593Smuzhiyun	ldd	[%o3 + 0x00], %f34
160*4882a593Smuzhiyun1:	ldd	[%o0 + 0x00], %f36
161*4882a593Smuzhiyun	DES_IP(36, 32)
162*4882a593Smuzhiyun	DES_ROUND(0, 2, 32, 32)
163*4882a593Smuzhiyun	DES_ROUND(4, 6, 32, 32)
164*4882a593Smuzhiyun	DES_ROUND(8, 10, 32, 32)
165*4882a593Smuzhiyun	DES_ROUND(12, 14, 32, 32)
166*4882a593Smuzhiyun	DES_ROUND(16, 18, 32, 32)
167*4882a593Smuzhiyun	DES_ROUND(20, 22, 32, 32)
168*4882a593Smuzhiyun	DES_ROUND(24, 26, 32, 32)
169*4882a593Smuzhiyun	DES_ROUND(28, 30, 32, 32)
170*4882a593Smuzhiyun	DES_IIP(32, 32)
171*4882a593Smuzhiyun	fxor	%f32, %f34, %f32
172*4882a593Smuzhiyun	fsrc2	%f36, %f34
173*4882a593Smuzhiyun	std	%f32, [%o1 + 0x00]
174*4882a593Smuzhiyun	add	%o0, 0x08, %o0
175*4882a593Smuzhiyun	subcc	%o2, 0x08, %o2
176*4882a593Smuzhiyun	bne,pt	%icc, 1b
177*4882a593Smuzhiyun	 add	%o1, 0x08, %o1
178*4882a593Smuzhiyun	retl
179*4882a593Smuzhiyun	 std	%f36, [%o3 + 0x00]
180*4882a593SmuzhiyunENDPROC(des_sparc64_cbc_decrypt)
181*4882a593Smuzhiyun
182*4882a593Smuzhiyun	.align	32
183*4882a593SmuzhiyunENTRY(des3_ede_sparc64_crypt)
184*4882a593Smuzhiyun	/* %o0=key, %o1=input, %o2=output */
185*4882a593Smuzhiyun	VISEntry
186*4882a593Smuzhiyun	ldd	[%o1 + 0x00], %f32
187*4882a593Smuzhiyun	ldd	[%o0 + 0x00], %f0
188*4882a593Smuzhiyun	ldd	[%o0 + 0x08], %f2
189*4882a593Smuzhiyun	ldd	[%o0 + 0x10], %f4
190*4882a593Smuzhiyun	ldd	[%o0 + 0x18], %f6
191*4882a593Smuzhiyun	ldd	[%o0 + 0x20], %f8
192*4882a593Smuzhiyun	ldd	[%o0 + 0x28], %f10
193*4882a593Smuzhiyun	ldd	[%o0 + 0x30], %f12
194*4882a593Smuzhiyun	ldd	[%o0 + 0x38], %f14
195*4882a593Smuzhiyun	ldd	[%o0 + 0x40], %f16
196*4882a593Smuzhiyun	ldd	[%o0 + 0x48], %f18
197*4882a593Smuzhiyun	ldd	[%o0 + 0x50], %f20
198*4882a593Smuzhiyun	ldd	[%o0 + 0x58], %f22
199*4882a593Smuzhiyun	ldd	[%o0 + 0x60], %f24
200*4882a593Smuzhiyun	ldd	[%o0 + 0x68], %f26
201*4882a593Smuzhiyun	ldd	[%o0 + 0x70], %f28
202*4882a593Smuzhiyun	ldd	[%o0 + 0x78], %f30
203*4882a593Smuzhiyun	DES_IP(32, 32)
204*4882a593Smuzhiyun	DES_ROUND(0, 2, 32, 32)
205*4882a593Smuzhiyun	ldd	[%o0 + 0x80], %f0
206*4882a593Smuzhiyun	ldd	[%o0 + 0x88], %f2
207*4882a593Smuzhiyun	DES_ROUND(4, 6, 32, 32)
208*4882a593Smuzhiyun	ldd	[%o0 + 0x90], %f4
209*4882a593Smuzhiyun	ldd	[%o0 + 0x98], %f6
210*4882a593Smuzhiyun	DES_ROUND(8, 10, 32, 32)
211*4882a593Smuzhiyun	ldd	[%o0 + 0xa0], %f8
212*4882a593Smuzhiyun	ldd	[%o0 + 0xa8], %f10
213*4882a593Smuzhiyun	DES_ROUND(12, 14, 32, 32)
214*4882a593Smuzhiyun	ldd	[%o0 + 0xb0], %f12
215*4882a593Smuzhiyun	ldd	[%o0 + 0xb8], %f14
216*4882a593Smuzhiyun	DES_ROUND(16, 18, 32, 32)
217*4882a593Smuzhiyun	ldd	[%o0 + 0xc0], %f16
218*4882a593Smuzhiyun	ldd	[%o0 + 0xc8], %f18
219*4882a593Smuzhiyun	DES_ROUND(20, 22, 32, 32)
220*4882a593Smuzhiyun	ldd	[%o0 + 0xd0], %f20
221*4882a593Smuzhiyun	ldd	[%o0 + 0xd8], %f22
222*4882a593Smuzhiyun	DES_ROUND(24, 26, 32, 32)
223*4882a593Smuzhiyun	ldd	[%o0 + 0xe0], %f24
224*4882a593Smuzhiyun	ldd	[%o0 + 0xe8], %f26
225*4882a593Smuzhiyun	DES_ROUND(28, 30, 32, 32)
226*4882a593Smuzhiyun	ldd	[%o0 + 0xf0], %f28
227*4882a593Smuzhiyun	ldd	[%o0 + 0xf8], %f30
228*4882a593Smuzhiyun	DES_IIP(32, 32)
229*4882a593Smuzhiyun	DES_IP(32, 32)
230*4882a593Smuzhiyun	DES_ROUND(0, 2, 32, 32)
231*4882a593Smuzhiyun	ldd	[%o0 + 0x100], %f0
232*4882a593Smuzhiyun	ldd	[%o0 + 0x108], %f2
233*4882a593Smuzhiyun	DES_ROUND(4, 6, 32, 32)
234*4882a593Smuzhiyun	ldd	[%o0 + 0x110], %f4
235*4882a593Smuzhiyun	ldd	[%o0 + 0x118], %f6
236*4882a593Smuzhiyun	DES_ROUND(8, 10, 32, 32)
237*4882a593Smuzhiyun	ldd	[%o0 + 0x120], %f8
238*4882a593Smuzhiyun	ldd	[%o0 + 0x128], %f10
239*4882a593Smuzhiyun	DES_ROUND(12, 14, 32, 32)
240*4882a593Smuzhiyun	ldd	[%o0 + 0x130], %f12
241*4882a593Smuzhiyun	ldd	[%o0 + 0x138], %f14
242*4882a593Smuzhiyun	DES_ROUND(16, 18, 32, 32)
243*4882a593Smuzhiyun	ldd	[%o0 + 0x140], %f16
244*4882a593Smuzhiyun	ldd	[%o0 + 0x148], %f18
245*4882a593Smuzhiyun	DES_ROUND(20, 22, 32, 32)
246*4882a593Smuzhiyun	ldd	[%o0 + 0x150], %f20
247*4882a593Smuzhiyun	ldd	[%o0 + 0x158], %f22
248*4882a593Smuzhiyun	DES_ROUND(24, 26, 32, 32)
249*4882a593Smuzhiyun	ldd	[%o0 + 0x160], %f24
250*4882a593Smuzhiyun	ldd	[%o0 + 0x168], %f26
251*4882a593Smuzhiyun	DES_ROUND(28, 30, 32, 32)
252*4882a593Smuzhiyun	ldd	[%o0 + 0x170], %f28
253*4882a593Smuzhiyun	ldd	[%o0 + 0x178], %f30
254*4882a593Smuzhiyun	DES_IIP(32, 32)
255*4882a593Smuzhiyun	DES_IP(32, 32)
256*4882a593Smuzhiyun	DES_ROUND(0, 2, 32, 32)
257*4882a593Smuzhiyun	DES_ROUND(4, 6, 32, 32)
258*4882a593Smuzhiyun	DES_ROUND(8, 10, 32, 32)
259*4882a593Smuzhiyun	DES_ROUND(12, 14, 32, 32)
260*4882a593Smuzhiyun	DES_ROUND(16, 18, 32, 32)
261*4882a593Smuzhiyun	DES_ROUND(20, 22, 32, 32)
262*4882a593Smuzhiyun	DES_ROUND(24, 26, 32, 32)
263*4882a593Smuzhiyun	DES_ROUND(28, 30, 32, 32)
264*4882a593Smuzhiyun	DES_IIP(32, 32)
265*4882a593Smuzhiyun
266*4882a593Smuzhiyun	std	%f32, [%o2 + 0x00]
267*4882a593Smuzhiyun	retl
268*4882a593Smuzhiyun	 VISExit
269*4882a593SmuzhiyunENDPROC(des3_ede_sparc64_crypt)
270*4882a593Smuzhiyun
271*4882a593Smuzhiyun	.align	32
272*4882a593SmuzhiyunENTRY(des3_ede_sparc64_load_keys)
273*4882a593Smuzhiyun	/* %o0=key */
274*4882a593Smuzhiyun	VISEntry
275*4882a593Smuzhiyun	ldd	[%o0 + 0x00], %f0
276*4882a593Smuzhiyun	ldd	[%o0 + 0x08], %f2
277*4882a593Smuzhiyun	ldd	[%o0 + 0x10], %f4
278*4882a593Smuzhiyun	ldd	[%o0 + 0x18], %f6
279*4882a593Smuzhiyun	ldd	[%o0 + 0x20], %f8
280*4882a593Smuzhiyun	ldd	[%o0 + 0x28], %f10
281*4882a593Smuzhiyun	ldd	[%o0 + 0x30], %f12
282*4882a593Smuzhiyun	ldd	[%o0 + 0x38], %f14
283*4882a593Smuzhiyun	ldd	[%o0 + 0x40], %f16
284*4882a593Smuzhiyun	ldd	[%o0 + 0x48], %f18
285*4882a593Smuzhiyun	ldd	[%o0 + 0x50], %f20
286*4882a593Smuzhiyun	ldd	[%o0 + 0x58], %f22
287*4882a593Smuzhiyun	ldd	[%o0 + 0x60], %f24
288*4882a593Smuzhiyun	ldd	[%o0 + 0x68], %f26
289*4882a593Smuzhiyun	ldd	[%o0 + 0x70], %f28
290*4882a593Smuzhiyun	ldd	[%o0 + 0x78], %f30
291*4882a593Smuzhiyun	ldd	[%o0 + 0x80], %f32
292*4882a593Smuzhiyun	ldd	[%o0 + 0x88], %f34
293*4882a593Smuzhiyun	ldd	[%o0 + 0x90], %f36
294*4882a593Smuzhiyun	ldd	[%o0 + 0x98], %f38
295*4882a593Smuzhiyun	ldd	[%o0 + 0xa0], %f40
296*4882a593Smuzhiyun	ldd	[%o0 + 0xa8], %f42
297*4882a593Smuzhiyun	ldd	[%o0 + 0xb0], %f44
298*4882a593Smuzhiyun	ldd	[%o0 + 0xb8], %f46
299*4882a593Smuzhiyun	ldd	[%o0 + 0xc0], %f48
300*4882a593Smuzhiyun	ldd	[%o0 + 0xc8], %f50
301*4882a593Smuzhiyun	ldd	[%o0 + 0xd0], %f52
302*4882a593Smuzhiyun	ldd	[%o0 + 0xd8], %f54
303*4882a593Smuzhiyun	ldd	[%o0 + 0xe0], %f56
304*4882a593Smuzhiyun	retl
305*4882a593Smuzhiyun	 ldd	[%o0 + 0xe8], %f58
306*4882a593SmuzhiyunENDPROC(des3_ede_sparc64_load_keys)
307*4882a593Smuzhiyun
308*4882a593Smuzhiyun#define DES3_LOOP_BODY(X) \
309*4882a593Smuzhiyun	DES_IP(X, X) \
310*4882a593Smuzhiyun	DES_ROUND(0, 2, X, X) \
311*4882a593Smuzhiyun	DES_ROUND(4, 6, X, X) \
312*4882a593Smuzhiyun	DES_ROUND(8, 10, X, X) \
313*4882a593Smuzhiyun	DES_ROUND(12, 14, X, X) \
314*4882a593Smuzhiyun	DES_ROUND(16, 18, X, X) \
315*4882a593Smuzhiyun	ldd	[%o0 + 0xf0], %f16; \
316*4882a593Smuzhiyun	ldd	[%o0 + 0xf8], %f18; \
317*4882a593Smuzhiyun	DES_ROUND(20, 22, X, X) \
318*4882a593Smuzhiyun	ldd	[%o0 + 0x100], %f20; \
319*4882a593Smuzhiyun	ldd	[%o0 + 0x108], %f22; \
320*4882a593Smuzhiyun	DES_ROUND(24, 26, X, X) \
321*4882a593Smuzhiyun	ldd	[%o0 + 0x110], %f24; \
322*4882a593Smuzhiyun	ldd	[%o0 + 0x118], %f26; \
323*4882a593Smuzhiyun	DES_ROUND(28, 30, X, X) \
324*4882a593Smuzhiyun	ldd	[%o0 + 0x120], %f28; \
325*4882a593Smuzhiyun	ldd	[%o0 + 0x128], %f30; \
326*4882a593Smuzhiyun	DES_IIP(X, X) \
327*4882a593Smuzhiyun	DES_IP(X, X) \
328*4882a593Smuzhiyun	DES_ROUND(32, 34, X, X) \
329*4882a593Smuzhiyun	ldd	[%o0 + 0x130], %f0; \
330*4882a593Smuzhiyun	ldd	[%o0 + 0x138], %f2; \
331*4882a593Smuzhiyun	DES_ROUND(36, 38, X, X) \
332*4882a593Smuzhiyun	ldd	[%o0 + 0x140], %f4; \
333*4882a593Smuzhiyun	ldd	[%o0 + 0x148], %f6; \
334*4882a593Smuzhiyun	DES_ROUND(40, 42, X, X) \
335*4882a593Smuzhiyun	ldd	[%o0 + 0x150], %f8; \
336*4882a593Smuzhiyun	ldd	[%o0 + 0x158], %f10; \
337*4882a593Smuzhiyun	DES_ROUND(44, 46, X, X) \
338*4882a593Smuzhiyun	ldd	[%o0 + 0x160], %f12; \
339*4882a593Smuzhiyun	ldd	[%o0 + 0x168], %f14; \
340*4882a593Smuzhiyun	DES_ROUND(48, 50, X, X) \
341*4882a593Smuzhiyun	DES_ROUND(52, 54, X, X) \
342*4882a593Smuzhiyun	DES_ROUND(56, 58, X, X) \
343*4882a593Smuzhiyun	DES_ROUND(16, 18, X, X) \
344*4882a593Smuzhiyun	ldd	[%o0 + 0x170], %f16; \
345*4882a593Smuzhiyun	ldd	[%o0 + 0x178], %f18; \
346*4882a593Smuzhiyun	DES_IIP(X, X) \
347*4882a593Smuzhiyun	DES_IP(X, X) \
348*4882a593Smuzhiyun	DES_ROUND(20, 22, X, X) \
349*4882a593Smuzhiyun	ldd	[%o0 + 0x50], %f20; \
350*4882a593Smuzhiyun	ldd	[%o0 + 0x58], %f22; \
351*4882a593Smuzhiyun	DES_ROUND(24, 26, X, X) \
352*4882a593Smuzhiyun	ldd	[%o0 + 0x60], %f24; \
353*4882a593Smuzhiyun	ldd	[%o0 + 0x68], %f26; \
354*4882a593Smuzhiyun	DES_ROUND(28, 30, X, X) \
355*4882a593Smuzhiyun	ldd	[%o0 + 0x70], %f28; \
356*4882a593Smuzhiyun	ldd	[%o0 + 0x78], %f30; \
357*4882a593Smuzhiyun	DES_ROUND(0, 2, X, X) \
358*4882a593Smuzhiyun	ldd	[%o0 + 0x00], %f0; \
359*4882a593Smuzhiyun	ldd	[%o0 + 0x08], %f2; \
360*4882a593Smuzhiyun	DES_ROUND(4, 6, X, X) \
361*4882a593Smuzhiyun	ldd	[%o0 + 0x10], %f4; \
362*4882a593Smuzhiyun	ldd	[%o0 + 0x18], %f6; \
363*4882a593Smuzhiyun	DES_ROUND(8, 10, X, X) \
364*4882a593Smuzhiyun	ldd	[%o0 + 0x20], %f8; \
365*4882a593Smuzhiyun	ldd	[%o0 + 0x28], %f10; \
366*4882a593Smuzhiyun	DES_ROUND(12, 14, X, X) \
367*4882a593Smuzhiyun	ldd	[%o0 + 0x30], %f12; \
368*4882a593Smuzhiyun	ldd	[%o0 + 0x38], %f14; \
369*4882a593Smuzhiyun	DES_ROUND(16, 18, X, X) \
370*4882a593Smuzhiyun	ldd	[%o0 + 0x40], %f16; \
371*4882a593Smuzhiyun	ldd	[%o0 + 0x48], %f18; \
372*4882a593Smuzhiyun	DES_IIP(X, X)
373*4882a593Smuzhiyun
374*4882a593Smuzhiyun	.align	32
375*4882a593SmuzhiyunENTRY(des3_ede_sparc64_ecb_crypt)
376*4882a593Smuzhiyun	/* %o0=key, %o1=input, %o2=output, %o3=len */
377*4882a593Smuzhiyun1:	ldd	[%o1 + 0x00], %f60
378*4882a593Smuzhiyun	DES3_LOOP_BODY(60)
379*4882a593Smuzhiyun	std	%f60, [%o2 + 0x00]
380*4882a593Smuzhiyun	add	%o1, 0x08, %o1
381*4882a593Smuzhiyun	subcc	%o3, 0x08, %o3
382*4882a593Smuzhiyun	bne,pt	%icc, 1b
383*4882a593Smuzhiyun	 add	%o2, 0x08, %o2
384*4882a593Smuzhiyun	retl
385*4882a593Smuzhiyun	 nop
386*4882a593SmuzhiyunENDPROC(des3_ede_sparc64_ecb_crypt)
387*4882a593Smuzhiyun
388*4882a593Smuzhiyun	.align	32
389*4882a593SmuzhiyunENTRY(des3_ede_sparc64_cbc_encrypt)
390*4882a593Smuzhiyun	/* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */
391*4882a593Smuzhiyun	ldd	[%o4 + 0x00], %f60
392*4882a593Smuzhiyun1:	ldd	[%o1 + 0x00], %f62
393*4882a593Smuzhiyun	fxor	%f60, %f62, %f60
394*4882a593Smuzhiyun	DES3_LOOP_BODY(60)
395*4882a593Smuzhiyun	std	%f60, [%o2 + 0x00]
396*4882a593Smuzhiyun	add	%o1, 0x08, %o1
397*4882a593Smuzhiyun	subcc	%o3, 0x08, %o3
398*4882a593Smuzhiyun	bne,pt	%icc, 1b
399*4882a593Smuzhiyun	 add	%o2, 0x08, %o2
400*4882a593Smuzhiyun	retl
401*4882a593Smuzhiyun	 std	%f60, [%o4 + 0x00]
402*4882a593SmuzhiyunENDPROC(des3_ede_sparc64_cbc_encrypt)
403*4882a593Smuzhiyun
404*4882a593Smuzhiyun	.align	32
405*4882a593SmuzhiyunENTRY(des3_ede_sparc64_cbc_decrypt)
406*4882a593Smuzhiyun	/* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */
407*4882a593Smuzhiyun	ldd	[%o4 + 0x00], %f62
408*4882a593Smuzhiyun1:	ldx	[%o1 + 0x00], %g1
409*4882a593Smuzhiyun	MOVXTOD_G1_F60
410*4882a593Smuzhiyun	DES3_LOOP_BODY(60)
411*4882a593Smuzhiyun	fxor	%f62, %f60, %f60
412*4882a593Smuzhiyun	MOVXTOD_G1_F62
413*4882a593Smuzhiyun	std	%f60, [%o2 + 0x00]
414*4882a593Smuzhiyun	add	%o1, 0x08, %o1
415*4882a593Smuzhiyun	subcc	%o3, 0x08, %o3
416*4882a593Smuzhiyun	bne,pt	%icc, 1b
417*4882a593Smuzhiyun	 add	%o2, 0x08, %o2
418*4882a593Smuzhiyun	retl
419*4882a593Smuzhiyun	 stx	%g1, [%o4 + 0x00]
420*4882a593SmuzhiyunENDPROC(des3_ede_sparc64_cbc_decrypt)
421