1 .text
2 
3 .globl	RC4
4 .type	RC4,@function
5 .align	64
6 RC4:
7 	stmg	%r6,%r11,6*8(%r15)
8 	llgc	%r6,0(%r2)
9 	llgc	%r10,1(%r2)
10 	la	%r6,1(%r6)
11 	nill	%r6,0xff
12 	srlg	%r1,%r3,3
13 	ltgr	%r1,%r1
14 	llgc	%r8,2(%r6,%r2)
15 	jz	.Lshort
16 	j	.Loop8
17 
18 .align	64
19 .Loop8:
20 	la	%r10,0(%r10,%r8)	# 0
21 	nill	%r10,255
22 	la	%r7,1(%r6)
23 	nill	%r7,255
24 	llgc	%r11,2(%r10,%r2)
25 	stc	%r8,2(%r10,%r2)
26 	llgc	%r9,2(%r7,%r2)
27 	stc	%r11,2(%r6,%r2)
28 	cr	%r7,%r10
29 	jne	.Lcmov0
30 	la	%r9,0(%r8)
31 .Lcmov0:
32 	la	%r11,0(%r11,%r8)
33 	nill	%r11,255
34 	la	%r10,0(%r10,%r9)	# 1
35 	nill	%r10,255
36 	la	%r6,1(%r7)
37 	nill	%r6,255
38 	llgc	%r0,2(%r11,%r2)
39 	llgc	%r11,2(%r10,%r2)
40 	stc	%r9,2(%r10,%r2)
41 	llgc	%r8,2(%r6,%r2)
42 	stc	%r11,2(%r7,%r2)
43 	cr	%r6,%r10
44 	jne	.Lcmov1
45 	la	%r8,0(%r9)
46 .Lcmov1:
47 	la	%r11,0(%r11,%r9)
48 	nill	%r11,255
49 	la	%r10,0(%r10,%r8)	# 2
50 	nill	%r10,255
51 	la	%r7,1(%r6)
52 	nill	%r7,255
53 	sllg	%r0,%r0,8
54 	ic	%r0,2(%r11,%r2)
55 	llgc	%r11,2(%r10,%r2)
56 	stc	%r8,2(%r10,%r2)
57 	llgc	%r9,2(%r7,%r2)
58 	stc	%r11,2(%r6,%r2)
59 	cr	%r7,%r10
60 	jne	.Lcmov2
61 	la	%r9,0(%r8)
62 .Lcmov2:
63 	la	%r11,0(%r11,%r8)
64 	nill	%r11,255
65 	la	%r10,0(%r10,%r9)	# 3
66 	nill	%r10,255
67 	la	%r6,1(%r7)
68 	nill	%r6,255
69 	sllg	%r0,%r0,8
70 	ic	%r0,2(%r11,%r2)
71 	llgc	%r11,2(%r10,%r2)
72 	stc	%r9,2(%r10,%r2)
73 	llgc	%r8,2(%r6,%r2)
74 	stc	%r11,2(%r7,%r2)
75 	cr	%r6,%r10
76 	jne	.Lcmov3
77 	la	%r8,0(%r9)
78 .Lcmov3:
79 	la	%r11,0(%r11,%r9)
80 	nill	%r11,255
81 	la	%r10,0(%r10,%r8)	# 4
82 	nill	%r10,255
83 	la	%r7,1(%r6)
84 	nill	%r7,255
85 	sllg	%r0,%r0,8
86 	ic	%r0,2(%r11,%r2)
87 	llgc	%r11,2(%r10,%r2)
88 	stc	%r8,2(%r10,%r2)
89 	llgc	%r9,2(%r7,%r2)
90 	stc	%r11,2(%r6,%r2)
91 	cr	%r7,%r10
92 	jne	.Lcmov4
93 	la	%r9,0(%r8)
94 .Lcmov4:
95 	la	%r11,0(%r11,%r8)
96 	nill	%r11,255
97 	la	%r10,0(%r10,%r9)	# 5
98 	nill	%r10,255
99 	la	%r6,1(%r7)
100 	nill	%r6,255
101 	sllg	%r0,%r0,8
102 	ic	%r0,2(%r11,%r2)
103 	llgc	%r11,2(%r10,%r2)
104 	stc	%r9,2(%r10,%r2)
105 	llgc	%r8,2(%r6,%r2)
106 	stc	%r11,2(%r7,%r2)
107 	cr	%r6,%r10
108 	jne	.Lcmov5
109 	la	%r8,0(%r9)
110 .Lcmov5:
111 	la	%r11,0(%r11,%r9)
112 	nill	%r11,255
113 	la	%r10,0(%r10,%r8)	# 6
114 	nill	%r10,255
115 	la	%r7,1(%r6)
116 	nill	%r7,255
117 	sllg	%r0,%r0,8
118 	ic	%r0,2(%r11,%r2)
119 	llgc	%r11,2(%r10,%r2)
120 	stc	%r8,2(%r10,%r2)
121 	llgc	%r9,2(%r7,%r2)
122 	stc	%r11,2(%r6,%r2)
123 	cr	%r7,%r10
124 	jne	.Lcmov6
125 	la	%r9,0(%r8)
126 .Lcmov6:
127 	la	%r11,0(%r11,%r8)
128 	nill	%r11,255
129 	la	%r10,0(%r10,%r9)	# 7
130 	nill	%r10,255
131 	la	%r6,1(%r7)
132 	nill	%r6,255
133 	sllg	%r0,%r0,8
134 	ic	%r0,2(%r11,%r2)
135 	llgc	%r11,2(%r10,%r2)
136 	stc	%r9,2(%r10,%r2)
137 	llgc	%r8,2(%r6,%r2)
138 	stc	%r11,2(%r7,%r2)
139 	cr	%r6,%r10
140 	jne	.Lcmov7
141 	la	%r8,0(%r9)
142 .Lcmov7:
143 	la	%r11,0(%r11,%r9)
144 	nill	%r11,255
145 	lg	%r9,0(%r4)
146 	sllg	%r0,%r0,8
147 	la	%r4,8(%r4)
148 	ic	%r0,2(%r11,%r2)
149 	xgr	%r0,%r9
150 	stg	%r0,0(%r5)
151 	la	%r5,8(%r5)
152 	brctg	%r1,.Loop8
153 
154 .Lshort:
155 	lghi	%r0,7
156 	ngr	%r3,%r0
157 	jz	.Lexit
158 	j	.Loop1
159 
160 .align	16
161 .Loop1:
162 	la	%r10,0(%r10,%r8)
163 	nill	%r10,255
164 	llgc	%r11,2(%r10,%r2)
165 	stc	%r8,2(%r10,%r2)
166 	stc	%r11,2(%r6,%r2)
167 	ar	%r11,%r8
168 	ahi	%r6,1
169 	nill	%r11,255
170 	nill	%r6,255
171 	llgc	%r0,0(%r4)
172 	la	%r4,1(%r4)
173 	llgc	%r11,2(%r11,%r2)
174 	llgc	%r8,2(%r6,%r2)
175 	xr	%r0,%r11
176 	stc	%r0,0(%r5)
177 	la	%r5,1(%r5)
178 	brct	%r3,.Loop1
179 
180 .Lexit:
181 	ahi	%r6,-1
182 	stc	%r6,0(%r2)
183 	stc	%r10,1(%r2)
184 	lmg	%r6,%r11,6*8(%r15)
185 	br	%r14
186 .size	RC4,.-RC4
187 .string	"RC4 for s390x, CRYPTOGAMS by <appro@openssl.org>"
188 
189 .globl	RC4_set_key
190 .type	RC4_set_key,@function
191 .align	64
192 RC4_set_key:
193 	stmg	%r6,%r8,6*8(%r15)
194 	lhi	%r0,256
195 	la	%r1,0
196 	sth	%r1,0(%r2)
197 .align	4
198 .L1stloop:
199 	stc	%r1,2(%r1,%r2)
200 	la	%r1,1(%r1)
201 	brct	%r0,.L1stloop
202 
203 	lghi	%r7,-256
204 	lr	%r0,%r3
205 	la	%r8,0
206 	la	%r1,0
207 .align	16
208 .L2ndloop:
209 	llgc	%r5,2+256(%r7,%r2)
210 	llgc	%r6,0(%r8,%r4)
211 	la	%r1,0(%r1,%r5)
212 	la	%r7,1(%r7)
213 	la	%r1,0(%r1,%r6)
214 	nill	%r1,255
215 	la	%r8,1(%r8)
216 	tml	%r7,255
217 	llgc	%r6,2(%r1,%r2)
218 	stc	%r6,2+256-1(%r7,%r2)
219 	stc	%r5,2(%r1,%r2)
220 	jz	.Ldone
221 	brct	%r0,.L2ndloop
222 	lr	%r0,%r3
223 	la	%r8,0
224 	j	.L2ndloop
225 .Ldone:
226 	lmg	%r6,%r8,6*8(%r15)
227 	br	%r14
228 .size	RC4_set_key,.-RC4_set_key
229 
230 .globl	RC4_options
231 .type	RC4_options,@function
232 .align	16
233 RC4_options:
234 	larl	%r2,.Loptions
235 	br	%r14
236 .size	RC4_options,.-RC4_options
237 .section	.rodata
238 .Loptions:
239 .align	8
240 .string	"rc4(8x,char)"
241