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