8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / common / crypto / arcfour / sun4u / arcfour_crypt_asm.s
blobbd2c0a5226cf0639571ed486f46276df5f7ceb12
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 #if defined(lint) || defined(__lint)
28 #include "arcfour.h"
30 /* ARGSUSED */
31 void
32 arcfour_crypt_aligned(ARCFour_key *key, size_t len, uchar_t *in, uchar_t *out)
35 #else /* lint || __lint */
37 .register %g2,#scratch
38 .register %g3,#scratch
40 .section ".text",#alloc,#execinstr
41 .file "arcfour_crypt_asm.s"
43 .section ".text",#alloc
44 .align 32
46 .section ".text",#alloc,#execinstr
47 .align 32
48 .skip 32
51 * SUBROUTINE arcfour_crypt_aligned
53 * void arcfour_crypt_aligned(ARCFour_key *key, size_t len,
54 * uchar_t *in, uchar_t *out);
56 * in and out should be aligned on an 8-byte boundary, but len can be anything
58 .global arcfour_crypt_aligned
61 arcfour_crypt_aligned:
62 save %sp,-144,%sp
64 srl %i1, 3, %l7
65 ldub [%i0+256], %g1
67 orcc %l7, %g0, %g0
68 ldub [%i0+257], %g2
70 add %g1, 1, %o1
71 bz %icc, .Loop2
72 add %i0, 0, %i5
74 add %o1, 1, %g1
75 and %o1, 255, %o1
77 and %g1, 255, %g1
78 ldub [%i5 + %o1], %o3
80 ldub [%i5 + %g1], %g3
82 add %g2, %o3, %o2
84 add %o2, %g3, %g2
85 and %o2, 255, %o2
87 and %g2, 255, %g2
88 ldub [%i5 + %o2], %o4
90 stb %o3, [%i5+%o2]
91 subcc %o2, %g1, %g0
93 stb %o4, [%i5 + %o1]
94 bz %icc, .L1A
95 add %o3,%o4,%o5
96 .L1B:
97 and %o5, 255, %o5
98 ldub [%i5 + %g2], %g4
100 ldub [%i5 + %o5], %o5
101 add %g1, 1, %o1
103 and %o1, 255, %o1
104 stb %g3, [%i5 + %g2]
105 add %g3, %g4, %g5
107 and %g5, 255, %g5
108 stb %g4, [%i5 + %g1]
109 add %o1, 1, %g1
112 sllx %o5, 56, %o0
113 ldub [%i5 + %o1], %o3
114 and %g1, 255, %g1
116 ldub [%i5 + %g1], %g3
118 add %g2, %o3, %o2
119 ldub [%i5 + %g5], %g5
121 add %o2, %g3, %g2
122 and %o2, 255, %o2
124 sllx %g5, 48, %g5
125 ldub [%i5 + %o2], %o4
126 and %g2, 255, %g2
128 or %o0, %g5, %o0
129 stb %o3, [%i5+%o2]
130 subcc %o2, %g1, %g0
132 stb %o4, [%i5 + %o1]
133 bz %icc, .L2A
134 add %o3,%o4,%o5
135 .L2B:
136 and %o5, 255, %o5
137 ldub [%i5 + %g2], %g4
139 ldub [%i5 + %o5], %o5
140 add %g1, 1, %o1
142 and %o1, 255, %o1
143 stb %g3, [%i5 + %g2]
144 add %g3, %g4, %g5
146 and %g5, 255, %g5
147 stb %g4, [%i5 + %g1]
148 add %o1, 1, %g1
151 sllx %o5, 40, %o5
152 ldub [%i5 + %o1], %o3
153 and %g1, 255, %g1
155 ldub [%i5 + %g1], %g3
156 or %o0, %o5, %o0
158 add %g2, %o3, %o2
159 ldub [%i5 + %g5], %g5
161 add %o2, %g3, %g2
162 and %o2, 255, %o2
164 sllx %g5, 32, %g5
165 ldub [%i5 + %o2], %o4
166 and %g2, 255, %g2
168 or %o0, %g5, %o0
169 stb %o3, [%i5+%o2]
170 subcc %o2, %g1, %g0
172 stb %o4, [%i5 + %o1]
173 bz %icc, .L3A
174 add %o3,%o4,%o5
175 .L3B:
176 and %o5, 255, %o5
177 ldub [%i5 + %g2], %g4
179 ldub [%i5 + %o5], %o5
180 add %g1, 1, %o1
182 and %o1, 255, %o1
183 stb %g3, [%i5 + %g2]
184 add %g3, %g4, %g5
186 and %g5, 255, %g5
187 stb %g4, [%i5 + %g1]
188 add %o1, 1, %g1
191 sll %o5, 24, %o5
192 ldub [%i5 + %o1], %o3
193 and %g1, 255, %g1
195 sub %i1, 8, %i1
196 ldub [%i5 + %g1], %g3
197 or %o0, %o5, %o0
199 srl %i1, 3, %l7
200 ldub [%i5 + %g5], %g5
201 add %g2, %o3, %o2
203 add %o2, %g3, %g2
204 and %o2, 255, %o2
206 sll %g5, 16, %g5
207 ldub [%i5 + %o2], %o4
208 and %g2, 255, %g2
210 or %o0, %g5, %o0
211 stb %o3, [%i5+%o2]
212 subcc %o2, %g1, %g0
214 stb %o4, [%i5 + %o1]
215 bz %icc, .L4A
216 add %o3,%o4,%o5
217 .L4B:
218 and %o5, 255, %o5
219 ldub [%i5 + %g2], %g4
220 add %g1, 1, %o1
222 orcc %l7, %g0, %g0
223 ldub [%i5 + %o5], %o5
224 and %o1, 255, %o1
226 add %g3, %g4, %g5
227 stb %g4, [%i5 + %g1]
228 add %o1, 1, %g1
230 stb %g3, [%i5 + %g2]
231 bz %icc, .EndLoop1
232 and %g5, 255, %g5
235 .Loop1:
236 sll %o5, 8, %o5
237 ldub [%i5 + %o1], %o3
238 and %g1, 255, %g1
240 ldub [%i5 + %g1], %g3
241 or %o0, %o5, %o0
243 ldub [%i5 + %g5], %g5
244 add %g2, %o3, %o2
246 add %o2, %g3, %g2
247 ldx [%i2], %o7
248 and %o2, 255, %o2
250 and %g2, 255, %g2
251 ldub [%i5 + %o2], %o4
253 or %o0, %g5, %o0
254 stb %o3, [%i5+%o2]
255 subcc %o2, %g1, %g0
257 stb %o4, [%i5 + %o1]
258 bz %icc, .L5A
259 add %o3,%o4,%o5
260 .L5B:
261 and %o5, 255, %o5
262 ldub [%i5 + %g2], %g4
264 ldub [%i5 + %o5], %o5
265 add %g1, 1, %o1
267 and %o1, 255, %o1
268 stb %g3, [%i5 + %g2]
269 add %g3, %g4, %g5
271 and %g5, 255, %g5
272 stb %g4, [%i5 + %g1]
273 add %o1, 1, %g1
276 xor %o0, %o7, %o7
277 ldub [%i5 + %o1], %o3
278 and %g1, 255, %g1
280 sllx %o5, 56, %o0
281 ldub [%i5 + %g1], %g3
283 add %g2, %o3, %o2
284 ldub [%i5 + %g5], %g5
286 add %o2, %g3, %g2
287 stx %o7, [%i3]
288 and %o2, 255, %o2
290 sllx %g5, 48, %g5
291 ldub [%i5 + %o2], %o4
292 and %g2, 255, %g2
294 or %o0, %g5, %o0
295 stb %o3, [%i5+%o2]
296 subcc %o2, %g1, %g0
298 stb %o4, [%i5 + %o1]
299 bz %icc, .L6A
300 add %o3,%o4,%o5
301 .L6B:
302 and %o5, 255, %o5
303 ldub [%i5 + %g2], %g4
304 add %i3, 8, %i3
306 add %i2, 8, %i2
307 ldub [%i5 + %o5], %o5
308 add %g1, 1, %o1
310 and %o1, 255, %o1
311 stb %g3, [%i5 + %g2]
312 add %g3, %g4, %g5
314 and %g5, 255, %g5
315 stb %g4, [%i5 + %g1]
316 add %o1, 1, %g1
319 sllx %o5, 40, %o5
320 ldub [%i5 + %o1], %o3
321 and %g1, 255, %g1
323 ldub [%i5 + %g1], %g3
324 or %o0, %o5, %o0
326 add %g2, %o3, %o2
327 ldub [%i5 + %g5], %g5
329 add %o2, %g3, %g2
330 and %o2, 255, %o2
332 sllx %g5, 32, %g5
333 ldub [%i5 + %o2], %o4
334 and %g2, 255, %g2
336 or %o0, %g5, %o0
337 stb %o3, [%i5 + %o2]
338 subcc %o2, %g1, %g0
340 stb %o4, [%i5 + %o1]
341 bz %icc, .L7A
342 add %o3,%o4,%o5
343 .L7B:
344 and %o5, 255, %o5
345 ldub [%i5 + %g2], %g4
347 ldub [%i5 + %o5], %o5
348 add %g1, 1, %o1
350 and %o1, 255, %o1
351 stb %g3, [%i5 + %g2]
352 add %g3, %g4, %g5
354 and %g5, 255, %g5
355 stb %g4, [%i5 + %g1]
356 add %o1, 1, %g1
359 sll %o5, 24, %o5
360 ldub [%i5 + %o1], %o3
361 and %g1, 255, %g1
363 sub %i1, 8, %i1
364 ldub [%i5 + %g1], %g3
365 or %o0, %o5, %o0
367 srl %i1, 3, %l7
368 ldub [%i5 + %g5], %g5
369 add %g2, %o3, %o2
371 add %o2, %g3, %g2
372 and %o2, 255, %o2
374 sll %g5, 16, %g5
375 ldub [%i5 + %o2], %o4
376 and %g2, 255, %g2
378 or %o0, %g5, %o0
379 stb %o3, [%i5 + %o2]
380 subcc %o2, %g1, %g0
382 stb %o4, [%i5 + %o1]
383 bz %icc, .L8A
384 add %o3,%o4,%o5
385 .L8B:
386 and %o5, 255, %o5
387 ldub [%i5 + %g2], %g4
388 add %g1, 1, %o1
390 orcc %l7, %g0, %g0
391 ldub [%i5 + %o5], %o5
392 and %o1, 255, %o1
394 add %g3, %g4, %g5
395 stb %g4, [%i5 + %g1]
396 add %o1, 1, %g1
398 stb %g3, [%i5 + %g2]
399 bnz %icc, .Loop1
400 and %g5, 255, %g5
403 .EndLoop1:
404 sll %o5, 8, %o5
405 ldub [%i5 + %g5], %g5
406 orcc %i1, %g0, %g0
408 or %o0, %o5, %o0
409 ldx [%i2], %o7
410 sub %g1, 2, %g1
412 and %g1, 255, %g1
413 stb %g1, [%i0 + 256]
414 or %o0, %g5, %o0
416 xor %o0, %o7, %o7
417 stx %o7, [%i3]
418 add %i2, 8, %i2
420 add %i3, 8, %i3
421 bnz %icc, .Loop2_1
422 stb %g2, [%i0 + 257]
425 restore %g0,%g0,%g0
428 .Loop2:
429 orcc %i1, %g0, %g0
430 bnz .Loop2_1
433 restore %g0,%g0,%g0
435 .Loop2_1:
436 and %o1, 255, %g1
437 ldub [%i5 + %g1], %g3
439 add %g2, %g3, %g2
441 and %g2, 255, %g2
443 ldub [%i5 + %g2], %g4
445 stb %g3, [%i5 + %g2]
447 add %g3, %g4, %g5
448 stb %g4, [%i5 + %g1]
450 and %g5, 255, %g5
451 ldub [%i2], %o0
453 add %g1, 1, %o1
454 ldub [%i5 + %g5], %g5
455 subcc %i1, 1, %i1
457 add %i2, 1, %i2
458 add %i3, 1, %i3
460 xor %o0, %g5, %o0
461 bnz %icc, .Loop2_1
462 stb %o0, [%i3 - 1]
464 stb %g1, [%i0 + 256]
466 stb %g2, [%i0 + 257]
469 restore %g0,%g0,%g0
471 .L1A:
472 add %o2, %o3, %g2
473 or %o3, %g0, %g3
474 ba .L1B
475 and %g2, 255, %g2
477 .L2A:
478 add %o2, %o3, %g2
479 or %o3, %g0, %g3
480 ba .L2B
481 and %g2, 255, %g2
483 .L3A:
484 add %o2, %o3, %g2
485 or %o3, %g0, %g3
486 ba .L3B
487 and %g2, 255, %g2
489 .L4A:
490 add %o2, %o3, %g2
491 or %o3, %g0, %g3
492 ba .L4B
493 and %g2, 255, %g2
495 .L5A:
496 add %o2, %o3, %g2
497 or %o3, %g0, %g3
498 ba .L5B
499 and %g2, 255, %g2
501 .L6A:
502 add %o2, %o3, %g2
503 or %o3, %g0, %g3
504 ba .L6B
505 and %g2, 255, %g2
507 .L7A:
508 add %o2, %o3, %g2
509 or %o3, %g0, %g3
510 ba .L7B
511 and %g2, 255, %g2
513 .L8A:
514 add %o2, %o3, %g2
515 or %o3, %g0, %g3
516 ba .L8B
517 and %g2, 255, %g2
519 .type arcfour_crypt_aligned,2
520 .size arcfour_crypt_aligned,(. - arcfour_crypt_aligned)
522 #endif /* lint || __lint */