xref: /illumos-gate/usr/src/common/crypto/arcfour/sun4u/arcfour_crypt_asm.S (revision 5d9d9091f564c198a760790b0bfa72c44e17912b)
1*5d9d9091SRichard Lowe/*
2*5d9d9091SRichard Lowe * CDDL HEADER START
3*5d9d9091SRichard Lowe *
4*5d9d9091SRichard Lowe * The contents of this file are subject to the terms of the
5*5d9d9091SRichard Lowe * Common Development and Distribution License (the "License").
6*5d9d9091SRichard Lowe * You may not use this file except in compliance with the License.
7*5d9d9091SRichard Lowe *
8*5d9d9091SRichard Lowe * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*5d9d9091SRichard Lowe * or http://www.opensolaris.org/os/licensing.
10*5d9d9091SRichard Lowe * See the License for the specific language governing permissions
11*5d9d9091SRichard Lowe * and limitations under the License.
12*5d9d9091SRichard Lowe *
13*5d9d9091SRichard Lowe * When distributing Covered Code, include this CDDL HEADER in each
14*5d9d9091SRichard Lowe * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*5d9d9091SRichard Lowe * If applicable, add the following below this CDDL HEADER, with the
16*5d9d9091SRichard Lowe * fields enclosed by brackets "[]" replaced with your own identifying
17*5d9d9091SRichard Lowe * information: Portions Copyright [yyyy] [name of copyright owner]
18*5d9d9091SRichard Lowe *
19*5d9d9091SRichard Lowe * CDDL HEADER END
20*5d9d9091SRichard Lowe */
21*5d9d9091SRichard Lowe/*
22*5d9d9091SRichard Lowe * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23*5d9d9091SRichard Lowe * Use is subject to license terms.
24*5d9d9091SRichard Lowe */
25*5d9d9091SRichard Lowe
26*5d9d9091SRichard Lowe#if defined(lint) || defined(__lint)
27*5d9d9091SRichard Lowe
28*5d9d9091SRichard Lowe#include "arcfour.h"
29*5d9d9091SRichard Lowe
30*5d9d9091SRichard Lowe/* ARGSUSED */
31*5d9d9091SRichard Lowevoid
32*5d9d9091SRichard Lowearcfour_crypt_aligned(ARCFour_key *key, size_t len, uchar_t *in, uchar_t *out)
33*5d9d9091SRichard Lowe{}
34*5d9d9091SRichard Lowe
35*5d9d9091SRichard Lowe#else	/* lint || __lint */
36*5d9d9091SRichard Lowe
37*5d9d9091SRichard Lowe	.register	%g2,#scratch
38*5d9d9091SRichard Lowe	.register	%g3,#scratch
39*5d9d9091SRichard Lowe
40*5d9d9091SRichard Lowe	.section	".text",#alloc,#execinstr
41*5d9d9091SRichard Lowe	.file	"arcfour_crypt_asm.s"
42*5d9d9091SRichard Lowe
43*5d9d9091SRichard Lowe	.section	".text",#alloc
44*5d9d9091SRichard Lowe	.align	32
45*5d9d9091SRichard Lowe
46*5d9d9091SRichard Lowe	.section	".text",#alloc,#execinstr
47*5d9d9091SRichard Lowe	.align	32
48*5d9d9091SRichard Lowe	.skip	32
49*5d9d9091SRichard Lowe
50*5d9d9091SRichard Lowe/*
51*5d9d9091SRichard Lowe * SUBROUTINE arcfour_crypt_aligned
52*5d9d9091SRichard Lowe *
53*5d9d9091SRichard Lowe * void arcfour_crypt_aligned(ARCFour_key *key, size_t len,
54*5d9d9091SRichard Lowe *			uchar_t *in, uchar_t *out);
55*5d9d9091SRichard Lowe *
56*5d9d9091SRichard Lowe * in and out should be aligned on an 8-byte boundary, but len can be anything
57*5d9d9091SRichard Lowe */
58*5d9d9091SRichard Lowe	.global arcfour_crypt_aligned
59*5d9d9091SRichard Lowe
60*5d9d9091SRichard Lowe
61*5d9d9091SRichard Lowearcfour_crypt_aligned:
62*5d9d9091SRichard Lowe	save	%sp,-144,%sp
63*5d9d9091SRichard Lowe
64*5d9d9091SRichard Lowe	srl	%i1, 3, %l7
65*5d9d9091SRichard Lowe	ldub	[%i0+256], %g1
66*5d9d9091SRichard Lowe
67*5d9d9091SRichard Lowe	orcc	%l7, %g0, %g0
68*5d9d9091SRichard Lowe	ldub	[%i0+257], %g2
69*5d9d9091SRichard Lowe
70*5d9d9091SRichard Lowe	add	%g1, 1, %o1
71*5d9d9091SRichard Lowe	bz	%icc, .Loop2
72*5d9d9091SRichard Lowe	add	%i0, 0, %i5
73*5d9d9091SRichard Lowe
74*5d9d9091SRichard Lowe	add	%o1, 1, %g1
75*5d9d9091SRichard Lowe	and	%o1, 255, %o1
76*5d9d9091SRichard Lowe
77*5d9d9091SRichard Lowe	and	%g1, 255, %g1
78*5d9d9091SRichard Lowe	ldub	[%i5 + %o1], %o3
79*5d9d9091SRichard Lowe
80*5d9d9091SRichard Lowe	ldub	[%i5 + %g1], %g3
81*5d9d9091SRichard Lowe
82*5d9d9091SRichard Lowe	add	%g2, %o3, %o2
83*5d9d9091SRichard Lowe
84*5d9d9091SRichard Lowe	add	%o2, %g3, %g2
85*5d9d9091SRichard Lowe	and	%o2, 255, %o2
86*5d9d9091SRichard Lowe
87*5d9d9091SRichard Lowe	and	%g2, 255, %g2
88*5d9d9091SRichard Lowe	ldub	[%i5 + %o2], %o4
89*5d9d9091SRichard Lowe
90*5d9d9091SRichard Lowe	stb	%o3, [%i5+%o2]
91*5d9d9091SRichard Lowe	subcc	%o2, %g1, %g0
92*5d9d9091SRichard Lowe
93*5d9d9091SRichard Lowe	stb	%o4, [%i5 + %o1]
94*5d9d9091SRichard Lowe	bz	%icc, .L1A
95*5d9d9091SRichard Lowe	add	%o3,%o4,%o5
96*5d9d9091SRichard Lowe.L1B:
97*5d9d9091SRichard Lowe	and	%o5, 255, %o5
98*5d9d9091SRichard Lowe	ldub	[%i5 + %g2], %g4
99*5d9d9091SRichard Lowe
100*5d9d9091SRichard Lowe	ldub	[%i5 + %o5], %o5
101*5d9d9091SRichard Lowe	add	%g1, 1, %o1
102*5d9d9091SRichard Lowe
103*5d9d9091SRichard Lowe	and	%o1, 255, %o1
104*5d9d9091SRichard Lowe	stb	%g3, [%i5 + %g2]
105*5d9d9091SRichard Lowe	add	%g3, %g4, %g5
106*5d9d9091SRichard Lowe
107*5d9d9091SRichard Lowe	and	%g5, 255, %g5
108*5d9d9091SRichard Lowe	stb	%g4, [%i5 + %g1]
109*5d9d9091SRichard Lowe	add	%o1, 1, %g1
110*5d9d9091SRichard Lowe
111*5d9d9091SRichard Lowe
112*5d9d9091SRichard Lowe	sllx	%o5, 56, %o0
113*5d9d9091SRichard Lowe	ldub	[%i5 + %o1], %o3
114*5d9d9091SRichard Lowe	and	%g1, 255, %g1
115*5d9d9091SRichard Lowe
116*5d9d9091SRichard Lowe	ldub	[%i5 + %g1], %g3
117*5d9d9091SRichard Lowe
118*5d9d9091SRichard Lowe	add	%g2, %o3, %o2
119*5d9d9091SRichard Lowe	ldub	[%i5 + %g5], %g5
120*5d9d9091SRichard Lowe
121*5d9d9091SRichard Lowe	add	%o2, %g3, %g2
122*5d9d9091SRichard Lowe	and	%o2, 255, %o2
123*5d9d9091SRichard Lowe
124*5d9d9091SRichard Lowe	sllx	%g5, 48, %g5
125*5d9d9091SRichard Lowe	ldub	[%i5 + %o2], %o4
126*5d9d9091SRichard Lowe	and	%g2, 255, %g2
127*5d9d9091SRichard Lowe
128*5d9d9091SRichard Lowe	or	%o0, %g5, %o0
129*5d9d9091SRichard Lowe	stb	%o3, [%i5+%o2]
130*5d9d9091SRichard Lowe	subcc	%o2, %g1, %g0
131*5d9d9091SRichard Lowe
132*5d9d9091SRichard Lowe	stb	%o4, [%i5 + %o1]
133*5d9d9091SRichard Lowe	bz	%icc, .L2A
134*5d9d9091SRichard Lowe	add	%o3,%o4,%o5
135*5d9d9091SRichard Lowe.L2B:
136*5d9d9091SRichard Lowe	and	%o5, 255, %o5
137*5d9d9091SRichard Lowe	ldub	[%i5 + %g2], %g4
138*5d9d9091SRichard Lowe
139*5d9d9091SRichard Lowe	ldub	[%i5 + %o5], %o5
140*5d9d9091SRichard Lowe	add	%g1, 1, %o1
141*5d9d9091SRichard Lowe
142*5d9d9091SRichard Lowe	and	%o1, 255, %o1
143*5d9d9091SRichard Lowe	stb	%g3, [%i5 + %g2]
144*5d9d9091SRichard Lowe	add	%g3, %g4, %g5
145*5d9d9091SRichard Lowe
146*5d9d9091SRichard Lowe	and	%g5, 255, %g5
147*5d9d9091SRichard Lowe	stb	%g4, [%i5 + %g1]
148*5d9d9091SRichard Lowe	add	%o1, 1, %g1
149*5d9d9091SRichard Lowe
150*5d9d9091SRichard Lowe
151*5d9d9091SRichard Lowe	sllx	%o5, 40, %o5
152*5d9d9091SRichard Lowe	ldub	[%i5 + %o1], %o3
153*5d9d9091SRichard Lowe	and	%g1, 255, %g1
154*5d9d9091SRichard Lowe
155*5d9d9091SRichard Lowe	ldub	[%i5 + %g1], %g3
156*5d9d9091SRichard Lowe	or	%o0, %o5, %o0
157*5d9d9091SRichard Lowe
158*5d9d9091SRichard Lowe	add	%g2, %o3, %o2
159*5d9d9091SRichard Lowe	ldub	[%i5 + %g5], %g5
160*5d9d9091SRichard Lowe
161*5d9d9091SRichard Lowe	add	%o2, %g3, %g2
162*5d9d9091SRichard Lowe	and	%o2, 255, %o2
163*5d9d9091SRichard Lowe
164*5d9d9091SRichard Lowe	sllx	%g5, 32, %g5
165*5d9d9091SRichard Lowe	ldub	[%i5 + %o2], %o4
166*5d9d9091SRichard Lowe	and	%g2, 255, %g2
167*5d9d9091SRichard Lowe
168*5d9d9091SRichard Lowe	or	%o0, %g5, %o0
169*5d9d9091SRichard Lowe	stb	%o3, [%i5+%o2]
170*5d9d9091SRichard Lowe	subcc	%o2, %g1, %g0
171*5d9d9091SRichard Lowe
172*5d9d9091SRichard Lowe	stb	%o4, [%i5 + %o1]
173*5d9d9091SRichard Lowe	bz	%icc, .L3A
174*5d9d9091SRichard Lowe	add	%o3,%o4,%o5
175*5d9d9091SRichard Lowe.L3B:
176*5d9d9091SRichard Lowe	and	%o5, 255, %o5
177*5d9d9091SRichard Lowe	ldub	[%i5 + %g2], %g4
178*5d9d9091SRichard Lowe
179*5d9d9091SRichard Lowe	ldub	[%i5 + %o5], %o5
180*5d9d9091SRichard Lowe	add	%g1, 1, %o1
181*5d9d9091SRichard Lowe
182*5d9d9091SRichard Lowe	and	%o1, 255, %o1
183*5d9d9091SRichard Lowe	stb	%g3, [%i5 + %g2]
184*5d9d9091SRichard Lowe	add	%g3, %g4, %g5
185*5d9d9091SRichard Lowe
186*5d9d9091SRichard Lowe	and	%g5, 255, %g5
187*5d9d9091SRichard Lowe	stb	%g4, [%i5 + %g1]
188*5d9d9091SRichard Lowe	add	%o1, 1, %g1
189*5d9d9091SRichard Lowe
190*5d9d9091SRichard Lowe
191*5d9d9091SRichard Lowe	sll	%o5, 24, %o5
192*5d9d9091SRichard Lowe	ldub	[%i5 + %o1], %o3
193*5d9d9091SRichard Lowe	and	%g1, 255, %g1
194*5d9d9091SRichard Lowe
195*5d9d9091SRichard Lowe	sub	%i1, 8, %i1
196*5d9d9091SRichard Lowe	ldub	[%i5 + %g1], %g3
197*5d9d9091SRichard Lowe	or	%o0, %o5, %o0
198*5d9d9091SRichard Lowe
199*5d9d9091SRichard Lowe	srl	%i1, 3, %l7
200*5d9d9091SRichard Lowe	ldub	[%i5 + %g5], %g5
201*5d9d9091SRichard Lowe	add	%g2, %o3, %o2
202*5d9d9091SRichard Lowe
203*5d9d9091SRichard Lowe	add	%o2, %g3, %g2
204*5d9d9091SRichard Lowe	and	%o2, 255, %o2
205*5d9d9091SRichard Lowe
206*5d9d9091SRichard Lowe	sll	%g5, 16, %g5
207*5d9d9091SRichard Lowe	ldub	[%i5 + %o2], %o4
208*5d9d9091SRichard Lowe	and	%g2, 255, %g2
209*5d9d9091SRichard Lowe
210*5d9d9091SRichard Lowe	or	%o0, %g5, %o0
211*5d9d9091SRichard Lowe	stb	%o3, [%i5+%o2]
212*5d9d9091SRichard Lowe	subcc	%o2, %g1, %g0
213*5d9d9091SRichard Lowe
214*5d9d9091SRichard Lowe	stb	%o4, [%i5 + %o1]
215*5d9d9091SRichard Lowe	bz	%icc, .L4A
216*5d9d9091SRichard Lowe	add	%o3,%o4,%o5
217*5d9d9091SRichard Lowe.L4B:
218*5d9d9091SRichard Lowe	and	%o5, 255, %o5
219*5d9d9091SRichard Lowe	ldub	[%i5 + %g2], %g4
220*5d9d9091SRichard Lowe	add	%g1, 1, %o1
221*5d9d9091SRichard Lowe
222*5d9d9091SRichard Lowe	orcc	%l7, %g0, %g0
223*5d9d9091SRichard Lowe	ldub	[%i5 + %o5], %o5
224*5d9d9091SRichard Lowe	and	%o1, 255, %o1
225*5d9d9091SRichard Lowe
226*5d9d9091SRichard Lowe	add	%g3, %g4, %g5
227*5d9d9091SRichard Lowe	stb	%g4, [%i5 + %g1]
228*5d9d9091SRichard Lowe	add	%o1, 1, %g1
229*5d9d9091SRichard Lowe
230*5d9d9091SRichard Lowe	stb	%g3, [%i5 + %g2]
231*5d9d9091SRichard Lowe	bz	%icc, .EndLoop1
232*5d9d9091SRichard Lowe	and	%g5, 255, %g5
233*5d9d9091SRichard Lowe
234*5d9d9091SRichard Lowe
235*5d9d9091SRichard Lowe.Loop1:
236*5d9d9091SRichard Lowe	sll	%o5, 8, %o5
237*5d9d9091SRichard Lowe	ldub	[%i5 + %o1], %o3
238*5d9d9091SRichard Lowe	and	%g1, 255, %g1
239*5d9d9091SRichard Lowe
240*5d9d9091SRichard Lowe	ldub	[%i5 + %g1], %g3
241*5d9d9091SRichard Lowe	or	%o0, %o5, %o0
242*5d9d9091SRichard Lowe
243*5d9d9091SRichard Lowe	ldub	[%i5 + %g5], %g5
244*5d9d9091SRichard Lowe	add	%g2, %o3, %o2
245*5d9d9091SRichard Lowe
246*5d9d9091SRichard Lowe	add	%o2, %g3, %g2
247*5d9d9091SRichard Lowe	ldx	[%i2], %o7
248*5d9d9091SRichard Lowe	and	%o2, 255, %o2
249*5d9d9091SRichard Lowe
250*5d9d9091SRichard Lowe	and	%g2, 255, %g2
251*5d9d9091SRichard Lowe	ldub	[%i5 + %o2], %o4
252*5d9d9091SRichard Lowe
253*5d9d9091SRichard Lowe	or	%o0, %g5, %o0
254*5d9d9091SRichard Lowe	stb	%o3, [%i5+%o2]
255*5d9d9091SRichard Lowe	subcc	%o2, %g1, %g0
256*5d9d9091SRichard Lowe
257*5d9d9091SRichard Lowe	stb	%o4, [%i5 + %o1]
258*5d9d9091SRichard Lowe	bz	%icc, .L5A
259*5d9d9091SRichard Lowe	add	%o3,%o4,%o5
260*5d9d9091SRichard Lowe.L5B:
261*5d9d9091SRichard Lowe	and	%o5, 255, %o5
262*5d9d9091SRichard Lowe	ldub	[%i5 + %g2], %g4
263*5d9d9091SRichard Lowe
264*5d9d9091SRichard Lowe	ldub	[%i5 + %o5], %o5
265*5d9d9091SRichard Lowe	add	%g1, 1, %o1
266*5d9d9091SRichard Lowe
267*5d9d9091SRichard Lowe	and	%o1, 255, %o1
268*5d9d9091SRichard Lowe	stb	%g3, [%i5 + %g2]
269*5d9d9091SRichard Lowe	add	%g3, %g4, %g5
270*5d9d9091SRichard Lowe
271*5d9d9091SRichard Lowe	and	%g5, 255, %g5
272*5d9d9091SRichard Lowe	stb	%g4, [%i5 + %g1]
273*5d9d9091SRichard Lowe	add	%o1, 1, %g1
274*5d9d9091SRichard Lowe
275*5d9d9091SRichard Lowe
276*5d9d9091SRichard Lowe	xor	%o0, %o7, %o7
277*5d9d9091SRichard Lowe	ldub	[%i5 + %o1], %o3
278*5d9d9091SRichard Lowe	and	%g1, 255, %g1
279*5d9d9091SRichard Lowe
280*5d9d9091SRichard Lowe	sllx	%o5, 56, %o0
281*5d9d9091SRichard Lowe	ldub	[%i5 + %g1], %g3
282*5d9d9091SRichard Lowe
283*5d9d9091SRichard Lowe	add	%g2, %o3, %o2
284*5d9d9091SRichard Lowe	ldub	[%i5 + %g5], %g5
285*5d9d9091SRichard Lowe
286*5d9d9091SRichard Lowe	add	%o2, %g3, %g2
287*5d9d9091SRichard Lowe	stx	%o7, [%i3]
288*5d9d9091SRichard Lowe	and	%o2, 255, %o2
289*5d9d9091SRichard Lowe
290*5d9d9091SRichard Lowe	sllx	%g5, 48, %g5
291*5d9d9091SRichard Lowe	ldub	[%i5 + %o2], %o4
292*5d9d9091SRichard Lowe	and	%g2, 255, %g2
293*5d9d9091SRichard Lowe
294*5d9d9091SRichard Lowe	or	%o0, %g5, %o0
295*5d9d9091SRichard Lowe	stb	%o3, [%i5+%o2]
296*5d9d9091SRichard Lowe	subcc	%o2, %g1, %g0
297*5d9d9091SRichard Lowe
298*5d9d9091SRichard Lowe	stb	%o4, [%i5 + %o1]
299*5d9d9091SRichard Lowe	bz	%icc, .L6A
300*5d9d9091SRichard Lowe	add	%o3,%o4,%o5
301*5d9d9091SRichard Lowe.L6B:
302*5d9d9091SRichard Lowe	and	%o5, 255, %o5
303*5d9d9091SRichard Lowe	ldub	[%i5 + %g2], %g4
304*5d9d9091SRichard Lowe	add	%i3, 8, %i3
305*5d9d9091SRichard Lowe
306*5d9d9091SRichard Lowe	add	%i2, 8, %i2
307*5d9d9091SRichard Lowe	ldub	[%i5 + %o5], %o5
308*5d9d9091SRichard Lowe	add	%g1, 1, %o1
309*5d9d9091SRichard Lowe
310*5d9d9091SRichard Lowe	and	%o1, 255, %o1
311*5d9d9091SRichard Lowe	stb	%g3, [%i5 + %g2]
312*5d9d9091SRichard Lowe	add	%g3, %g4, %g5
313*5d9d9091SRichard Lowe
314*5d9d9091SRichard Lowe	and	%g5, 255, %g5
315*5d9d9091SRichard Lowe	stb	%g4, [%i5 + %g1]
316*5d9d9091SRichard Lowe	add	%o1, 1, %g1
317*5d9d9091SRichard Lowe
318*5d9d9091SRichard Lowe
319*5d9d9091SRichard Lowe	sllx	%o5, 40, %o5
320*5d9d9091SRichard Lowe	ldub	[%i5 + %o1], %o3
321*5d9d9091SRichard Lowe	and	%g1, 255, %g1
322*5d9d9091SRichard Lowe
323*5d9d9091SRichard Lowe	ldub	[%i5 + %g1], %g3
324*5d9d9091SRichard Lowe	or	%o0, %o5, %o0
325*5d9d9091SRichard Lowe
326*5d9d9091SRichard Lowe	add	%g2, %o3, %o2
327*5d9d9091SRichard Lowe	ldub	[%i5 + %g5], %g5
328*5d9d9091SRichard Lowe
329*5d9d9091SRichard Lowe	add	%o2, %g3, %g2
330*5d9d9091SRichard Lowe	and	%o2, 255, %o2
331*5d9d9091SRichard Lowe
332*5d9d9091SRichard Lowe	sllx	%g5, 32, %g5
333*5d9d9091SRichard Lowe	ldub	[%i5 + %o2], %o4
334*5d9d9091SRichard Lowe	and	%g2, 255, %g2
335*5d9d9091SRichard Lowe
336*5d9d9091SRichard Lowe	or	%o0, %g5, %o0
337*5d9d9091SRichard Lowe	stb	%o3, [%i5 + %o2]
338*5d9d9091SRichard Lowe	subcc	%o2, %g1, %g0
339*5d9d9091SRichard Lowe
340*5d9d9091SRichard Lowe	stb	%o4, [%i5 + %o1]
341*5d9d9091SRichard Lowe	bz	%icc, .L7A
342*5d9d9091SRichard Lowe	add	%o3,%o4,%o5
343*5d9d9091SRichard Lowe.L7B:
344*5d9d9091SRichard Lowe	and	%o5, 255, %o5
345*5d9d9091SRichard Lowe	ldub	[%i5 + %g2], %g4
346*5d9d9091SRichard Lowe
347*5d9d9091SRichard Lowe	ldub	[%i5 + %o5], %o5
348*5d9d9091SRichard Lowe	add	%g1, 1, %o1
349*5d9d9091SRichard Lowe
350*5d9d9091SRichard Lowe	and	%o1, 255, %o1
351*5d9d9091SRichard Lowe	stb	%g3, [%i5 + %g2]
352*5d9d9091SRichard Lowe	add	%g3, %g4, %g5
353*5d9d9091SRichard Lowe
354*5d9d9091SRichard Lowe	and	%g5, 255, %g5
355*5d9d9091SRichard Lowe	stb	%g4, [%i5 + %g1]
356*5d9d9091SRichard Lowe	add	%o1, 1, %g1
357*5d9d9091SRichard Lowe
358*5d9d9091SRichard Lowe
359*5d9d9091SRichard Lowe	sll	%o5, 24, %o5
360*5d9d9091SRichard Lowe	ldub	[%i5 + %o1], %o3
361*5d9d9091SRichard Lowe	and	%g1, 255, %g1
362*5d9d9091SRichard Lowe
363*5d9d9091SRichard Lowe	sub	%i1, 8, %i1
364*5d9d9091SRichard Lowe	ldub	[%i5 + %g1], %g3
365*5d9d9091SRichard Lowe	or	%o0, %o5, %o0
366*5d9d9091SRichard Lowe
367*5d9d9091SRichard Lowe	srl	%i1, 3, %l7
368*5d9d9091SRichard Lowe	ldub	[%i5 + %g5], %g5
369*5d9d9091SRichard Lowe	add	%g2, %o3, %o2
370*5d9d9091SRichard Lowe
371*5d9d9091SRichard Lowe	add	%o2, %g3, %g2
372*5d9d9091SRichard Lowe	and	%o2, 255, %o2
373*5d9d9091SRichard Lowe
374*5d9d9091SRichard Lowe	sll	%g5, 16, %g5
375*5d9d9091SRichard Lowe	ldub	[%i5 + %o2], %o4
376*5d9d9091SRichard Lowe	and	%g2, 255, %g2
377*5d9d9091SRichard Lowe
378*5d9d9091SRichard Lowe	or	%o0, %g5, %o0
379*5d9d9091SRichard Lowe	stb	%o3, [%i5 + %o2]
380*5d9d9091SRichard Lowe	subcc	%o2, %g1, %g0
381*5d9d9091SRichard Lowe
382*5d9d9091SRichard Lowe	stb	%o4, [%i5 + %o1]
383*5d9d9091SRichard Lowe	bz	%icc, .L8A
384*5d9d9091SRichard Lowe	add	%o3,%o4,%o5
385*5d9d9091SRichard Lowe.L8B:
386*5d9d9091SRichard Lowe	and	%o5, 255, %o5
387*5d9d9091SRichard Lowe	ldub	[%i5 + %g2], %g4
388*5d9d9091SRichard Lowe	add	%g1, 1, %o1
389*5d9d9091SRichard Lowe
390*5d9d9091SRichard Lowe	orcc	%l7, %g0, %g0
391*5d9d9091SRichard Lowe	ldub	[%i5 + %o5], %o5
392*5d9d9091SRichard Lowe	and	%o1, 255, %o1
393*5d9d9091SRichard Lowe
394*5d9d9091SRichard Lowe	add	%g3, %g4, %g5
395*5d9d9091SRichard Lowe	stb	%g4, [%i5 + %g1]
396*5d9d9091SRichard Lowe	add	%o1, 1, %g1
397*5d9d9091SRichard Lowe
398*5d9d9091SRichard Lowe	stb	%g3, [%i5 + %g2]
399*5d9d9091SRichard Lowe	bnz	%icc, .Loop1
400*5d9d9091SRichard Lowe	and	%g5, 255, %g5
401*5d9d9091SRichard Lowe
402*5d9d9091SRichard Lowe
403*5d9d9091SRichard Lowe.EndLoop1:
404*5d9d9091SRichard Lowe	sll	%o5, 8, %o5
405*5d9d9091SRichard Lowe	ldub	[%i5 + %g5], %g5
406*5d9d9091SRichard Lowe	orcc	%i1, %g0, %g0
407*5d9d9091SRichard Lowe
408*5d9d9091SRichard Lowe	or	%o0, %o5, %o0
409*5d9d9091SRichard Lowe	ldx	[%i2], %o7
410*5d9d9091SRichard Lowe	sub	%g1, 2, %g1
411*5d9d9091SRichard Lowe
412*5d9d9091SRichard Lowe	and	%g1, 255, %g1
413*5d9d9091SRichard Lowe	stb	%g1, [%i0 + 256]
414*5d9d9091SRichard Lowe	or	%o0, %g5, %o0
415*5d9d9091SRichard Lowe
416*5d9d9091SRichard Lowe	xor	%o0, %o7, %o7
417*5d9d9091SRichard Lowe	stx	%o7, [%i3]
418*5d9d9091SRichard Lowe	add	%i2, 8, %i2
419*5d9d9091SRichard Lowe
420*5d9d9091SRichard Lowe	add	%i3, 8, %i3
421*5d9d9091SRichard Lowe	bnz	%icc, .Loop2_1
422*5d9d9091SRichard Lowe	stb	%g2, [%i0 + 257]
423*5d9d9091SRichard Lowe
424*5d9d9091SRichard Lowe	ret
425*5d9d9091SRichard Lowe	restore	%g0,%g0,%g0
426*5d9d9091SRichard Lowe
427*5d9d9091SRichard Lowe
428*5d9d9091SRichard Lowe.Loop2:
429*5d9d9091SRichard Lowe	orcc	%i1, %g0, %g0
430*5d9d9091SRichard Lowe	bnz	.Loop2_1
431*5d9d9091SRichard Lowe	nop
432*5d9d9091SRichard Lowe	ret
433*5d9d9091SRichard Lowe	restore	%g0,%g0,%g0
434*5d9d9091SRichard Lowe
435*5d9d9091SRichard Lowe.Loop2_1:
436*5d9d9091SRichard Lowe	and	%o1, 255, %g1
437*5d9d9091SRichard Lowe	ldub	[%i5 + %g1], %g3
438*5d9d9091SRichard Lowe
439*5d9d9091SRichard Lowe	add	%g2, %g3, %g2
440*5d9d9091SRichard Lowe
441*5d9d9091SRichard Lowe	and	%g2, 255, %g2
442*5d9d9091SRichard Lowe
443*5d9d9091SRichard Lowe	ldub	[%i5 + %g2], %g4
444*5d9d9091SRichard Lowe
445*5d9d9091SRichard Lowe	stb	%g3, [%i5 + %g2]
446*5d9d9091SRichard Lowe
447*5d9d9091SRichard Lowe	add	%g3, %g4, %g5
448*5d9d9091SRichard Lowe	stb	%g4, [%i5 + %g1]
449*5d9d9091SRichard Lowe
450*5d9d9091SRichard Lowe	and	%g5, 255, %g5
451*5d9d9091SRichard Lowe	ldub	[%i2], %o0
452*5d9d9091SRichard Lowe
453*5d9d9091SRichard Lowe	add	%g1, 1, %o1
454*5d9d9091SRichard Lowe	ldub	[%i5 + %g5], %g5
455*5d9d9091SRichard Lowe	subcc	%i1, 1, %i1
456*5d9d9091SRichard Lowe
457*5d9d9091SRichard Lowe	add	%i2, 1, %i2
458*5d9d9091SRichard Lowe	add	%i3, 1, %i3
459*5d9d9091SRichard Lowe
460*5d9d9091SRichard Lowe	xor	%o0, %g5, %o0
461*5d9d9091SRichard Lowe	bnz	%icc, .Loop2_1
462*5d9d9091SRichard Lowe	stb	%o0, [%i3 - 1]
463*5d9d9091SRichard Lowe
464*5d9d9091SRichard Lowe	stb	%g1, [%i0 + 256]
465*5d9d9091SRichard Lowe
466*5d9d9091SRichard Lowe	stb	%g2, [%i0 + 257]
467*5d9d9091SRichard Lowe
468*5d9d9091SRichard Lowe	ret
469*5d9d9091SRichard Lowe	restore	%g0,%g0,%g0
470*5d9d9091SRichard Lowe
471*5d9d9091SRichard Lowe.L1A:
472*5d9d9091SRichard Lowe	add	%o2, %o3, %g2
473*5d9d9091SRichard Lowe	or	%o3, %g0, %g3
474*5d9d9091SRichard Lowe	ba	.L1B
475*5d9d9091SRichard Lowe	and	%g2, 255, %g2
476*5d9d9091SRichard Lowe
477*5d9d9091SRichard Lowe.L2A:
478*5d9d9091SRichard Lowe	add	%o2, %o3, %g2
479*5d9d9091SRichard Lowe	or	%o3, %g0, %g3
480*5d9d9091SRichard Lowe	ba	.L2B
481*5d9d9091SRichard Lowe	and	%g2, 255, %g2
482*5d9d9091SRichard Lowe
483*5d9d9091SRichard Lowe.L3A:
484*5d9d9091SRichard Lowe	add	%o2, %o3, %g2
485*5d9d9091SRichard Lowe	or	%o3, %g0, %g3
486*5d9d9091SRichard Lowe	ba	.L3B
487*5d9d9091SRichard Lowe	and	%g2, 255, %g2
488*5d9d9091SRichard Lowe
489*5d9d9091SRichard Lowe.L4A:
490*5d9d9091SRichard Lowe	add	%o2, %o3, %g2
491*5d9d9091SRichard Lowe	or	%o3, %g0, %g3
492*5d9d9091SRichard Lowe	ba	.L4B
493*5d9d9091SRichard Lowe	and	%g2, 255, %g2
494*5d9d9091SRichard Lowe
495*5d9d9091SRichard Lowe.L5A:
496*5d9d9091SRichard Lowe	add	%o2, %o3, %g2
497*5d9d9091SRichard Lowe	or	%o3, %g0, %g3
498*5d9d9091SRichard Lowe	ba	.L5B
499*5d9d9091SRichard Lowe	and	%g2, 255, %g2
500*5d9d9091SRichard Lowe
501*5d9d9091SRichard Lowe.L6A:
502*5d9d9091SRichard Lowe	add	%o2, %o3, %g2
503*5d9d9091SRichard Lowe	or	%o3, %g0, %g3
504*5d9d9091SRichard Lowe	ba	.L6B
505*5d9d9091SRichard Lowe	and	%g2, 255, %g2
506*5d9d9091SRichard Lowe
507*5d9d9091SRichard Lowe.L7A:
508*5d9d9091SRichard Lowe	add	%o2, %o3, %g2
509*5d9d9091SRichard Lowe	or	%o3, %g0, %g3
510*5d9d9091SRichard Lowe	ba	.L7B
511*5d9d9091SRichard Lowe	and	%g2, 255, %g2
512*5d9d9091SRichard Lowe
513*5d9d9091SRichard Lowe.L8A:
514*5d9d9091SRichard Lowe	add	%o2, %o3, %g2
515*5d9d9091SRichard Lowe	or	%o3, %g0, %g3
516*5d9d9091SRichard Lowe	ba	.L8B
517*5d9d9091SRichard Lowe	and	%g2, 255, %g2
518*5d9d9091SRichard Lowe
519*5d9d9091SRichard Lowe	.type	arcfour_crypt_aligned,2
520*5d9d9091SRichard Lowe	.size	arcfour_crypt_aligned,(. - arcfour_crypt_aligned)
521*5d9d9091SRichard Lowe
522*5d9d9091SRichard Lowe#endif	/* lint || __lint */
523