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