xref: /freebsd/sys/crypto/openssl/aarch64/sha1-armv8.S (revision bd9588bca05f5cbdeac6e5f9f426b2589301d7c6)
1bc3d5698SJohn Baldwin/* Do not modify. This file is auto-generated from sha1-armv8.pl. */
2bc3d5698SJohn Baldwin#include "arm_arch.h"
3*bd9588bcSAndrew Turner#ifndef	__KERNEL__
4bc3d5698SJohn Baldwin
5c0855eaaSJohn Baldwin.hidden	OPENSSL_armcap_P
6c0855eaaSJohn Baldwin#endif
7c0855eaaSJohn Baldwin
8bc3d5698SJohn Baldwin.text
9bc3d5698SJohn Baldwin
10bc3d5698SJohn Baldwin.globl	sha1_block_data_order
11bc3d5698SJohn Baldwin.type	sha1_block_data_order,%function
12bc3d5698SJohn Baldwin.align	6
13bc3d5698SJohn Baldwinsha1_block_data_order:
14*bd9588bcSAndrew Turner	AARCH64_VALID_CALL_TARGET
15c0855eaaSJohn Baldwin	adrp	x16,OPENSSL_armcap_P
16c0855eaaSJohn Baldwin	ldr	w16,[x16,#:lo12:OPENSSL_armcap_P]
17bc3d5698SJohn Baldwin	tst	w16,#ARMV8_SHA1
18bc3d5698SJohn Baldwin	b.ne	.Lv8_entry
19bc3d5698SJohn Baldwin
20*bd9588bcSAndrew Turner	// Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later.
21bc3d5698SJohn Baldwin	stp	x29,x30,[sp,#-96]!
22bc3d5698SJohn Baldwin	add	x29,sp,#0
23bc3d5698SJohn Baldwin	stp	x19,x20,[sp,#16]
24bc3d5698SJohn Baldwin	stp	x21,x22,[sp,#32]
25bc3d5698SJohn Baldwin	stp	x23,x24,[sp,#48]
26bc3d5698SJohn Baldwin	stp	x25,x26,[sp,#64]
27bc3d5698SJohn Baldwin	stp	x27,x28,[sp,#80]
28bc3d5698SJohn Baldwin
29bc3d5698SJohn Baldwin	ldp	w20,w21,[x0]
30bc3d5698SJohn Baldwin	ldp	w22,w23,[x0,#8]
31bc3d5698SJohn Baldwin	ldr	w24,[x0,#16]
32bc3d5698SJohn Baldwin
33bc3d5698SJohn Baldwin.Loop:
34bc3d5698SJohn Baldwin	ldr	x3,[x1],#64
35bc3d5698SJohn Baldwin	movz	w28,#0x7999
36bc3d5698SJohn Baldwin	sub	x2,x2,#1
37bc3d5698SJohn Baldwin	movk	w28,#0x5a82,lsl#16
38c0855eaaSJohn Baldwin#ifdef	__AARCH64EB__
39bc3d5698SJohn Baldwin	ror	x3,x3,#32
40bc3d5698SJohn Baldwin#else
41bc3d5698SJohn Baldwin	rev32	x3,x3
42bc3d5698SJohn Baldwin#endif
43bc3d5698SJohn Baldwin	add	w24,w24,w28		// warm it up
44bc3d5698SJohn Baldwin	add	w24,w24,w3
45bc3d5698SJohn Baldwin	lsr	x4,x3,#32
46c0855eaaSJohn Baldwin	ldur	x5,[x1,#-56]
47bc3d5698SJohn Baldwin	bic	w25,w23,w21
48bc3d5698SJohn Baldwin	and	w26,w22,w21
49bc3d5698SJohn Baldwin	ror	w27,w20,#27
50bc3d5698SJohn Baldwin	add	w23,w23,w28		// future e+=K
51bc3d5698SJohn Baldwin	orr	w25,w25,w26
52bc3d5698SJohn Baldwin	add	w24,w24,w27		// e+=rot(a,5)
53bc3d5698SJohn Baldwin	ror	w21,w21,#2
54bc3d5698SJohn Baldwin	add	w23,w23,w4	// future e+=X[i]
55bc3d5698SJohn Baldwin	add	w24,w24,w25		// e+=F(b,c,d)
56c0855eaaSJohn Baldwin#ifdef	__AARCH64EB__
57bc3d5698SJohn Baldwin	ror	x5,x5,#32
58bc3d5698SJohn Baldwin#else
59bc3d5698SJohn Baldwin	rev32	x5,x5
60bc3d5698SJohn Baldwin#endif
61bc3d5698SJohn Baldwin	bic	w25,w22,w20
62bc3d5698SJohn Baldwin	and	w26,w21,w20
63bc3d5698SJohn Baldwin	ror	w27,w24,#27
64bc3d5698SJohn Baldwin	add	w22,w22,w28		// future e+=K
65bc3d5698SJohn Baldwin	orr	w25,w25,w26
66bc3d5698SJohn Baldwin	add	w23,w23,w27		// e+=rot(a,5)
67bc3d5698SJohn Baldwin	ror	w20,w20,#2
68bc3d5698SJohn Baldwin	add	w22,w22,w5	// future e+=X[i]
69bc3d5698SJohn Baldwin	add	w23,w23,w25		// e+=F(b,c,d)
70bc3d5698SJohn Baldwin	lsr	x6,x5,#32
71c0855eaaSJohn Baldwin	ldur	x7,[x1,#-48]
72bc3d5698SJohn Baldwin	bic	w25,w21,w24
73bc3d5698SJohn Baldwin	and	w26,w20,w24
74bc3d5698SJohn Baldwin	ror	w27,w23,#27
75bc3d5698SJohn Baldwin	add	w21,w21,w28		// future e+=K
76bc3d5698SJohn Baldwin	orr	w25,w25,w26
77bc3d5698SJohn Baldwin	add	w22,w22,w27		// e+=rot(a,5)
78bc3d5698SJohn Baldwin	ror	w24,w24,#2
79bc3d5698SJohn Baldwin	add	w21,w21,w6	// future e+=X[i]
80bc3d5698SJohn Baldwin	add	w22,w22,w25		// e+=F(b,c,d)
81c0855eaaSJohn Baldwin#ifdef	__AARCH64EB__
82bc3d5698SJohn Baldwin	ror	x7,x7,#32
83bc3d5698SJohn Baldwin#else
84bc3d5698SJohn Baldwin	rev32	x7,x7
85bc3d5698SJohn Baldwin#endif
86bc3d5698SJohn Baldwin	bic	w25,w20,w23
87bc3d5698SJohn Baldwin	and	w26,w24,w23
88bc3d5698SJohn Baldwin	ror	w27,w22,#27
89bc3d5698SJohn Baldwin	add	w20,w20,w28		// future e+=K
90bc3d5698SJohn Baldwin	orr	w25,w25,w26
91bc3d5698SJohn Baldwin	add	w21,w21,w27		// e+=rot(a,5)
92bc3d5698SJohn Baldwin	ror	w23,w23,#2
93bc3d5698SJohn Baldwin	add	w20,w20,w7	// future e+=X[i]
94bc3d5698SJohn Baldwin	add	w21,w21,w25		// e+=F(b,c,d)
95bc3d5698SJohn Baldwin	lsr	x8,x7,#32
96c0855eaaSJohn Baldwin	ldur	x9,[x1,#-40]
97bc3d5698SJohn Baldwin	bic	w25,w24,w22
98bc3d5698SJohn Baldwin	and	w26,w23,w22
99bc3d5698SJohn Baldwin	ror	w27,w21,#27
100bc3d5698SJohn Baldwin	add	w24,w24,w28		// future e+=K
101bc3d5698SJohn Baldwin	orr	w25,w25,w26
102bc3d5698SJohn Baldwin	add	w20,w20,w27		// e+=rot(a,5)
103bc3d5698SJohn Baldwin	ror	w22,w22,#2
104bc3d5698SJohn Baldwin	add	w24,w24,w8	// future e+=X[i]
105bc3d5698SJohn Baldwin	add	w20,w20,w25		// e+=F(b,c,d)
106c0855eaaSJohn Baldwin#ifdef	__AARCH64EB__
107bc3d5698SJohn Baldwin	ror	x9,x9,#32
108bc3d5698SJohn Baldwin#else
109bc3d5698SJohn Baldwin	rev32	x9,x9
110bc3d5698SJohn Baldwin#endif
111bc3d5698SJohn Baldwin	bic	w25,w23,w21
112bc3d5698SJohn Baldwin	and	w26,w22,w21
113bc3d5698SJohn Baldwin	ror	w27,w20,#27
114bc3d5698SJohn Baldwin	add	w23,w23,w28		// future e+=K
115bc3d5698SJohn Baldwin	orr	w25,w25,w26
116bc3d5698SJohn Baldwin	add	w24,w24,w27		// e+=rot(a,5)
117bc3d5698SJohn Baldwin	ror	w21,w21,#2
118bc3d5698SJohn Baldwin	add	w23,w23,w9	// future e+=X[i]
119bc3d5698SJohn Baldwin	add	w24,w24,w25		// e+=F(b,c,d)
120bc3d5698SJohn Baldwin	lsr	x10,x9,#32
121c0855eaaSJohn Baldwin	ldur	x11,[x1,#-32]
122bc3d5698SJohn Baldwin	bic	w25,w22,w20
123bc3d5698SJohn Baldwin	and	w26,w21,w20
124bc3d5698SJohn Baldwin	ror	w27,w24,#27
125bc3d5698SJohn Baldwin	add	w22,w22,w28		// future e+=K
126bc3d5698SJohn Baldwin	orr	w25,w25,w26
127bc3d5698SJohn Baldwin	add	w23,w23,w27		// e+=rot(a,5)
128bc3d5698SJohn Baldwin	ror	w20,w20,#2
129bc3d5698SJohn Baldwin	add	w22,w22,w10	// future e+=X[i]
130bc3d5698SJohn Baldwin	add	w23,w23,w25		// e+=F(b,c,d)
131c0855eaaSJohn Baldwin#ifdef	__AARCH64EB__
132bc3d5698SJohn Baldwin	ror	x11,x11,#32
133bc3d5698SJohn Baldwin#else
134bc3d5698SJohn Baldwin	rev32	x11,x11
135bc3d5698SJohn Baldwin#endif
136bc3d5698SJohn Baldwin	bic	w25,w21,w24
137bc3d5698SJohn Baldwin	and	w26,w20,w24
138bc3d5698SJohn Baldwin	ror	w27,w23,#27
139bc3d5698SJohn Baldwin	add	w21,w21,w28		// future e+=K
140bc3d5698SJohn Baldwin	orr	w25,w25,w26
141bc3d5698SJohn Baldwin	add	w22,w22,w27		// e+=rot(a,5)
142bc3d5698SJohn Baldwin	ror	w24,w24,#2
143bc3d5698SJohn Baldwin	add	w21,w21,w11	// future e+=X[i]
144bc3d5698SJohn Baldwin	add	w22,w22,w25		// e+=F(b,c,d)
145bc3d5698SJohn Baldwin	lsr	x12,x11,#32
146c0855eaaSJohn Baldwin	ldur	x13,[x1,#-24]
147bc3d5698SJohn Baldwin	bic	w25,w20,w23
148bc3d5698SJohn Baldwin	and	w26,w24,w23
149bc3d5698SJohn Baldwin	ror	w27,w22,#27
150bc3d5698SJohn Baldwin	add	w20,w20,w28		// future e+=K
151bc3d5698SJohn Baldwin	orr	w25,w25,w26
152bc3d5698SJohn Baldwin	add	w21,w21,w27		// e+=rot(a,5)
153bc3d5698SJohn Baldwin	ror	w23,w23,#2
154bc3d5698SJohn Baldwin	add	w20,w20,w12	// future e+=X[i]
155bc3d5698SJohn Baldwin	add	w21,w21,w25		// e+=F(b,c,d)
156c0855eaaSJohn Baldwin#ifdef	__AARCH64EB__
157bc3d5698SJohn Baldwin	ror	x13,x13,#32
158bc3d5698SJohn Baldwin#else
159bc3d5698SJohn Baldwin	rev32	x13,x13
160bc3d5698SJohn Baldwin#endif
161bc3d5698SJohn Baldwin	bic	w25,w24,w22
162bc3d5698SJohn Baldwin	and	w26,w23,w22
163bc3d5698SJohn Baldwin	ror	w27,w21,#27
164bc3d5698SJohn Baldwin	add	w24,w24,w28		// future e+=K
165bc3d5698SJohn Baldwin	orr	w25,w25,w26
166bc3d5698SJohn Baldwin	add	w20,w20,w27		// e+=rot(a,5)
167bc3d5698SJohn Baldwin	ror	w22,w22,#2
168bc3d5698SJohn Baldwin	add	w24,w24,w13	// future e+=X[i]
169bc3d5698SJohn Baldwin	add	w20,w20,w25		// e+=F(b,c,d)
170bc3d5698SJohn Baldwin	lsr	x14,x13,#32
171c0855eaaSJohn Baldwin	ldur	x15,[x1,#-16]
172bc3d5698SJohn Baldwin	bic	w25,w23,w21
173bc3d5698SJohn Baldwin	and	w26,w22,w21
174bc3d5698SJohn Baldwin	ror	w27,w20,#27
175bc3d5698SJohn Baldwin	add	w23,w23,w28		// future e+=K
176bc3d5698SJohn Baldwin	orr	w25,w25,w26
177bc3d5698SJohn Baldwin	add	w24,w24,w27		// e+=rot(a,5)
178bc3d5698SJohn Baldwin	ror	w21,w21,#2
179bc3d5698SJohn Baldwin	add	w23,w23,w14	// future e+=X[i]
180bc3d5698SJohn Baldwin	add	w24,w24,w25		// e+=F(b,c,d)
181c0855eaaSJohn Baldwin#ifdef	__AARCH64EB__
182bc3d5698SJohn Baldwin	ror	x15,x15,#32
183bc3d5698SJohn Baldwin#else
184bc3d5698SJohn Baldwin	rev32	x15,x15
185bc3d5698SJohn Baldwin#endif
186bc3d5698SJohn Baldwin	bic	w25,w22,w20
187bc3d5698SJohn Baldwin	and	w26,w21,w20
188bc3d5698SJohn Baldwin	ror	w27,w24,#27
189bc3d5698SJohn Baldwin	add	w22,w22,w28		// future e+=K
190bc3d5698SJohn Baldwin	orr	w25,w25,w26
191bc3d5698SJohn Baldwin	add	w23,w23,w27		// e+=rot(a,5)
192bc3d5698SJohn Baldwin	ror	w20,w20,#2
193bc3d5698SJohn Baldwin	add	w22,w22,w15	// future e+=X[i]
194bc3d5698SJohn Baldwin	add	w23,w23,w25		// e+=F(b,c,d)
195bc3d5698SJohn Baldwin	lsr	x16,x15,#32
196c0855eaaSJohn Baldwin	ldur	x17,[x1,#-8]
197bc3d5698SJohn Baldwin	bic	w25,w21,w24
198bc3d5698SJohn Baldwin	and	w26,w20,w24
199bc3d5698SJohn Baldwin	ror	w27,w23,#27
200bc3d5698SJohn Baldwin	add	w21,w21,w28		// future e+=K
201bc3d5698SJohn Baldwin	orr	w25,w25,w26
202bc3d5698SJohn Baldwin	add	w22,w22,w27		// e+=rot(a,5)
203bc3d5698SJohn Baldwin	ror	w24,w24,#2
204bc3d5698SJohn Baldwin	add	w21,w21,w16	// future e+=X[i]
205bc3d5698SJohn Baldwin	add	w22,w22,w25		// e+=F(b,c,d)
206c0855eaaSJohn Baldwin#ifdef	__AARCH64EB__
207bc3d5698SJohn Baldwin	ror	x17,x17,#32
208bc3d5698SJohn Baldwin#else
209bc3d5698SJohn Baldwin	rev32	x17,x17
210bc3d5698SJohn Baldwin#endif
211bc3d5698SJohn Baldwin	bic	w25,w20,w23
212bc3d5698SJohn Baldwin	and	w26,w24,w23
213bc3d5698SJohn Baldwin	ror	w27,w22,#27
214bc3d5698SJohn Baldwin	add	w20,w20,w28		// future e+=K
215bc3d5698SJohn Baldwin	orr	w25,w25,w26
216bc3d5698SJohn Baldwin	add	w21,w21,w27		// e+=rot(a,5)
217bc3d5698SJohn Baldwin	ror	w23,w23,#2
218bc3d5698SJohn Baldwin	add	w20,w20,w17	// future e+=X[i]
219bc3d5698SJohn Baldwin	add	w21,w21,w25		// e+=F(b,c,d)
220bc3d5698SJohn Baldwin	lsr	x19,x17,#32
221bc3d5698SJohn Baldwin	eor	w3,w3,w5
222bc3d5698SJohn Baldwin	bic	w25,w24,w22
223bc3d5698SJohn Baldwin	and	w26,w23,w22
224bc3d5698SJohn Baldwin	ror	w27,w21,#27
225bc3d5698SJohn Baldwin	eor	w3,w3,w11
226bc3d5698SJohn Baldwin	add	w24,w24,w28		// future e+=K
227bc3d5698SJohn Baldwin	orr	w25,w25,w26
228bc3d5698SJohn Baldwin	add	w20,w20,w27		// e+=rot(a,5)
229bc3d5698SJohn Baldwin	eor	w3,w3,w16
230bc3d5698SJohn Baldwin	ror	w22,w22,#2
231bc3d5698SJohn Baldwin	add	w24,w24,w19	// future e+=X[i]
232bc3d5698SJohn Baldwin	add	w20,w20,w25		// e+=F(b,c,d)
233bc3d5698SJohn Baldwin	ror	w3,w3,#31
234bc3d5698SJohn Baldwin	eor	w4,w4,w6
235bc3d5698SJohn Baldwin	bic	w25,w23,w21
236bc3d5698SJohn Baldwin	and	w26,w22,w21
237bc3d5698SJohn Baldwin	ror	w27,w20,#27
238bc3d5698SJohn Baldwin	eor	w4,w4,w12
239bc3d5698SJohn Baldwin	add	w23,w23,w28		// future e+=K
240bc3d5698SJohn Baldwin	orr	w25,w25,w26
241bc3d5698SJohn Baldwin	add	w24,w24,w27		// e+=rot(a,5)
242bc3d5698SJohn Baldwin	eor	w4,w4,w17
243bc3d5698SJohn Baldwin	ror	w21,w21,#2
244bc3d5698SJohn Baldwin	add	w23,w23,w3	// future e+=X[i]
245bc3d5698SJohn Baldwin	add	w24,w24,w25		// e+=F(b,c,d)
246bc3d5698SJohn Baldwin	ror	w4,w4,#31
247bc3d5698SJohn Baldwin	eor	w5,w5,w7
248bc3d5698SJohn Baldwin	bic	w25,w22,w20
249bc3d5698SJohn Baldwin	and	w26,w21,w20
250bc3d5698SJohn Baldwin	ror	w27,w24,#27
251bc3d5698SJohn Baldwin	eor	w5,w5,w13
252bc3d5698SJohn Baldwin	add	w22,w22,w28		// future e+=K
253bc3d5698SJohn Baldwin	orr	w25,w25,w26
254bc3d5698SJohn Baldwin	add	w23,w23,w27		// e+=rot(a,5)
255bc3d5698SJohn Baldwin	eor	w5,w5,w19
256bc3d5698SJohn Baldwin	ror	w20,w20,#2
257bc3d5698SJohn Baldwin	add	w22,w22,w4	// future e+=X[i]
258bc3d5698SJohn Baldwin	add	w23,w23,w25		// e+=F(b,c,d)
259bc3d5698SJohn Baldwin	ror	w5,w5,#31
260bc3d5698SJohn Baldwin	eor	w6,w6,w8
261bc3d5698SJohn Baldwin	bic	w25,w21,w24
262bc3d5698SJohn Baldwin	and	w26,w20,w24
263bc3d5698SJohn Baldwin	ror	w27,w23,#27
264bc3d5698SJohn Baldwin	eor	w6,w6,w14
265bc3d5698SJohn Baldwin	add	w21,w21,w28		// future e+=K
266bc3d5698SJohn Baldwin	orr	w25,w25,w26
267bc3d5698SJohn Baldwin	add	w22,w22,w27		// e+=rot(a,5)
268bc3d5698SJohn Baldwin	eor	w6,w6,w3
269bc3d5698SJohn Baldwin	ror	w24,w24,#2
270bc3d5698SJohn Baldwin	add	w21,w21,w5	// future e+=X[i]
271bc3d5698SJohn Baldwin	add	w22,w22,w25		// e+=F(b,c,d)
272bc3d5698SJohn Baldwin	ror	w6,w6,#31
273bc3d5698SJohn Baldwin	eor	w7,w7,w9
274bc3d5698SJohn Baldwin	bic	w25,w20,w23
275bc3d5698SJohn Baldwin	and	w26,w24,w23
276bc3d5698SJohn Baldwin	ror	w27,w22,#27
277bc3d5698SJohn Baldwin	eor	w7,w7,w15
278bc3d5698SJohn Baldwin	add	w20,w20,w28		// future e+=K
279bc3d5698SJohn Baldwin	orr	w25,w25,w26
280bc3d5698SJohn Baldwin	add	w21,w21,w27		// e+=rot(a,5)
281bc3d5698SJohn Baldwin	eor	w7,w7,w4
282bc3d5698SJohn Baldwin	ror	w23,w23,#2
283bc3d5698SJohn Baldwin	add	w20,w20,w6	// future e+=X[i]
284bc3d5698SJohn Baldwin	add	w21,w21,w25		// e+=F(b,c,d)
285bc3d5698SJohn Baldwin	ror	w7,w7,#31
286bc3d5698SJohn Baldwin	movz	w28,#0xeba1
287bc3d5698SJohn Baldwin	movk	w28,#0x6ed9,lsl#16
288bc3d5698SJohn Baldwin	eor	w8,w8,w10
289bc3d5698SJohn Baldwin	bic	w25,w24,w22
290bc3d5698SJohn Baldwin	and	w26,w23,w22
291bc3d5698SJohn Baldwin	ror	w27,w21,#27
292bc3d5698SJohn Baldwin	eor	w8,w8,w16
293bc3d5698SJohn Baldwin	add	w24,w24,w28		// future e+=K
294bc3d5698SJohn Baldwin	orr	w25,w25,w26
295bc3d5698SJohn Baldwin	add	w20,w20,w27		// e+=rot(a,5)
296bc3d5698SJohn Baldwin	eor	w8,w8,w5
297bc3d5698SJohn Baldwin	ror	w22,w22,#2
298bc3d5698SJohn Baldwin	add	w24,w24,w7	// future e+=X[i]
299bc3d5698SJohn Baldwin	add	w20,w20,w25		// e+=F(b,c,d)
300bc3d5698SJohn Baldwin	ror	w8,w8,#31
301bc3d5698SJohn Baldwin	eor	w9,w9,w11
302bc3d5698SJohn Baldwin	eor	w25,w23,w21
303bc3d5698SJohn Baldwin	ror	w27,w20,#27
304bc3d5698SJohn Baldwin	add	w23,w23,w28		// future e+=K
305bc3d5698SJohn Baldwin	eor	w9,w9,w17
306bc3d5698SJohn Baldwin	eor	w25,w25,w22
307bc3d5698SJohn Baldwin	add	w24,w24,w27		// e+=rot(a,5)
308bc3d5698SJohn Baldwin	ror	w21,w21,#2
309bc3d5698SJohn Baldwin	eor	w9,w9,w6
310bc3d5698SJohn Baldwin	add	w23,w23,w8	// future e+=X[i]
311bc3d5698SJohn Baldwin	add	w24,w24,w25		// e+=F(b,c,d)
312bc3d5698SJohn Baldwin	ror	w9,w9,#31
313bc3d5698SJohn Baldwin	eor	w10,w10,w12
314bc3d5698SJohn Baldwin	eor	w25,w22,w20
315bc3d5698SJohn Baldwin	ror	w27,w24,#27
316bc3d5698SJohn Baldwin	add	w22,w22,w28		// future e+=K
317bc3d5698SJohn Baldwin	eor	w10,w10,w19
318bc3d5698SJohn Baldwin	eor	w25,w25,w21
319bc3d5698SJohn Baldwin	add	w23,w23,w27		// e+=rot(a,5)
320bc3d5698SJohn Baldwin	ror	w20,w20,#2
321bc3d5698SJohn Baldwin	eor	w10,w10,w7
322bc3d5698SJohn Baldwin	add	w22,w22,w9	// future e+=X[i]
323bc3d5698SJohn Baldwin	add	w23,w23,w25		// e+=F(b,c,d)
324bc3d5698SJohn Baldwin	ror	w10,w10,#31
325bc3d5698SJohn Baldwin	eor	w11,w11,w13
326bc3d5698SJohn Baldwin	eor	w25,w21,w24
327bc3d5698SJohn Baldwin	ror	w27,w23,#27
328bc3d5698SJohn Baldwin	add	w21,w21,w28		// future e+=K
329bc3d5698SJohn Baldwin	eor	w11,w11,w3
330bc3d5698SJohn Baldwin	eor	w25,w25,w20
331bc3d5698SJohn Baldwin	add	w22,w22,w27		// e+=rot(a,5)
332bc3d5698SJohn Baldwin	ror	w24,w24,#2
333bc3d5698SJohn Baldwin	eor	w11,w11,w8
334bc3d5698SJohn Baldwin	add	w21,w21,w10	// future e+=X[i]
335bc3d5698SJohn Baldwin	add	w22,w22,w25		// e+=F(b,c,d)
336bc3d5698SJohn Baldwin	ror	w11,w11,#31
337bc3d5698SJohn Baldwin	eor	w12,w12,w14
338bc3d5698SJohn Baldwin	eor	w25,w20,w23
339bc3d5698SJohn Baldwin	ror	w27,w22,#27
340bc3d5698SJohn Baldwin	add	w20,w20,w28		// future e+=K
341bc3d5698SJohn Baldwin	eor	w12,w12,w4
342bc3d5698SJohn Baldwin	eor	w25,w25,w24
343bc3d5698SJohn Baldwin	add	w21,w21,w27		// e+=rot(a,5)
344bc3d5698SJohn Baldwin	ror	w23,w23,#2
345bc3d5698SJohn Baldwin	eor	w12,w12,w9
346bc3d5698SJohn Baldwin	add	w20,w20,w11	// future e+=X[i]
347bc3d5698SJohn Baldwin	add	w21,w21,w25		// e+=F(b,c,d)
348bc3d5698SJohn Baldwin	ror	w12,w12,#31
349bc3d5698SJohn Baldwin	eor	w13,w13,w15
350bc3d5698SJohn Baldwin	eor	w25,w24,w22
351bc3d5698SJohn Baldwin	ror	w27,w21,#27
352bc3d5698SJohn Baldwin	add	w24,w24,w28		// future e+=K
353bc3d5698SJohn Baldwin	eor	w13,w13,w5
354bc3d5698SJohn Baldwin	eor	w25,w25,w23
355bc3d5698SJohn Baldwin	add	w20,w20,w27		// e+=rot(a,5)
356bc3d5698SJohn Baldwin	ror	w22,w22,#2
357bc3d5698SJohn Baldwin	eor	w13,w13,w10
358bc3d5698SJohn Baldwin	add	w24,w24,w12	// future e+=X[i]
359bc3d5698SJohn Baldwin	add	w20,w20,w25		// e+=F(b,c,d)
360bc3d5698SJohn Baldwin	ror	w13,w13,#31
361bc3d5698SJohn Baldwin	eor	w14,w14,w16
362bc3d5698SJohn Baldwin	eor	w25,w23,w21
363bc3d5698SJohn Baldwin	ror	w27,w20,#27
364bc3d5698SJohn Baldwin	add	w23,w23,w28		// future e+=K
365bc3d5698SJohn Baldwin	eor	w14,w14,w6
366bc3d5698SJohn Baldwin	eor	w25,w25,w22
367bc3d5698SJohn Baldwin	add	w24,w24,w27		// e+=rot(a,5)
368bc3d5698SJohn Baldwin	ror	w21,w21,#2
369bc3d5698SJohn Baldwin	eor	w14,w14,w11
370bc3d5698SJohn Baldwin	add	w23,w23,w13	// future e+=X[i]
371bc3d5698SJohn Baldwin	add	w24,w24,w25		// e+=F(b,c,d)
372bc3d5698SJohn Baldwin	ror	w14,w14,#31
373bc3d5698SJohn Baldwin	eor	w15,w15,w17
374bc3d5698SJohn Baldwin	eor	w25,w22,w20
375bc3d5698SJohn Baldwin	ror	w27,w24,#27
376bc3d5698SJohn Baldwin	add	w22,w22,w28		// future e+=K
377bc3d5698SJohn Baldwin	eor	w15,w15,w7
378bc3d5698SJohn Baldwin	eor	w25,w25,w21
379bc3d5698SJohn Baldwin	add	w23,w23,w27		// e+=rot(a,5)
380bc3d5698SJohn Baldwin	ror	w20,w20,#2
381bc3d5698SJohn Baldwin	eor	w15,w15,w12
382bc3d5698SJohn Baldwin	add	w22,w22,w14	// future e+=X[i]
383bc3d5698SJohn Baldwin	add	w23,w23,w25		// e+=F(b,c,d)
384bc3d5698SJohn Baldwin	ror	w15,w15,#31
385bc3d5698SJohn Baldwin	eor	w16,w16,w19
386bc3d5698SJohn Baldwin	eor	w25,w21,w24
387bc3d5698SJohn Baldwin	ror	w27,w23,#27
388bc3d5698SJohn Baldwin	add	w21,w21,w28		// future e+=K
389bc3d5698SJohn Baldwin	eor	w16,w16,w8
390bc3d5698SJohn Baldwin	eor	w25,w25,w20
391bc3d5698SJohn Baldwin	add	w22,w22,w27		// e+=rot(a,5)
392bc3d5698SJohn Baldwin	ror	w24,w24,#2
393bc3d5698SJohn Baldwin	eor	w16,w16,w13
394bc3d5698SJohn Baldwin	add	w21,w21,w15	// future e+=X[i]
395bc3d5698SJohn Baldwin	add	w22,w22,w25		// e+=F(b,c,d)
396bc3d5698SJohn Baldwin	ror	w16,w16,#31
397bc3d5698SJohn Baldwin	eor	w17,w17,w3
398bc3d5698SJohn Baldwin	eor	w25,w20,w23
399bc3d5698SJohn Baldwin	ror	w27,w22,#27
400bc3d5698SJohn Baldwin	add	w20,w20,w28		// future e+=K
401bc3d5698SJohn Baldwin	eor	w17,w17,w9
402bc3d5698SJohn Baldwin	eor	w25,w25,w24
403bc3d5698SJohn Baldwin	add	w21,w21,w27		// e+=rot(a,5)
404bc3d5698SJohn Baldwin	ror	w23,w23,#2
405bc3d5698SJohn Baldwin	eor	w17,w17,w14
406bc3d5698SJohn Baldwin	add	w20,w20,w16	// future e+=X[i]
407bc3d5698SJohn Baldwin	add	w21,w21,w25		// e+=F(b,c,d)
408bc3d5698SJohn Baldwin	ror	w17,w17,#31
409bc3d5698SJohn Baldwin	eor	w19,w19,w4
410bc3d5698SJohn Baldwin	eor	w25,w24,w22
411bc3d5698SJohn Baldwin	ror	w27,w21,#27
412bc3d5698SJohn Baldwin	add	w24,w24,w28		// future e+=K
413bc3d5698SJohn Baldwin	eor	w19,w19,w10
414bc3d5698SJohn Baldwin	eor	w25,w25,w23
415bc3d5698SJohn Baldwin	add	w20,w20,w27		// e+=rot(a,5)
416bc3d5698SJohn Baldwin	ror	w22,w22,#2
417bc3d5698SJohn Baldwin	eor	w19,w19,w15
418bc3d5698SJohn Baldwin	add	w24,w24,w17	// future e+=X[i]
419bc3d5698SJohn Baldwin	add	w20,w20,w25		// e+=F(b,c,d)
420bc3d5698SJohn Baldwin	ror	w19,w19,#31
421bc3d5698SJohn Baldwin	eor	w3,w3,w5
422bc3d5698SJohn Baldwin	eor	w25,w23,w21
423bc3d5698SJohn Baldwin	ror	w27,w20,#27
424bc3d5698SJohn Baldwin	add	w23,w23,w28		// future e+=K
425bc3d5698SJohn Baldwin	eor	w3,w3,w11
426bc3d5698SJohn Baldwin	eor	w25,w25,w22
427bc3d5698SJohn Baldwin	add	w24,w24,w27		// e+=rot(a,5)
428bc3d5698SJohn Baldwin	ror	w21,w21,#2
429bc3d5698SJohn Baldwin	eor	w3,w3,w16
430bc3d5698SJohn Baldwin	add	w23,w23,w19	// future e+=X[i]
431bc3d5698SJohn Baldwin	add	w24,w24,w25		// e+=F(b,c,d)
432bc3d5698SJohn Baldwin	ror	w3,w3,#31
433bc3d5698SJohn Baldwin	eor	w4,w4,w6
434bc3d5698SJohn Baldwin	eor	w25,w22,w20
435bc3d5698SJohn Baldwin	ror	w27,w24,#27
436bc3d5698SJohn Baldwin	add	w22,w22,w28		// future e+=K
437bc3d5698SJohn Baldwin	eor	w4,w4,w12
438bc3d5698SJohn Baldwin	eor	w25,w25,w21
439bc3d5698SJohn Baldwin	add	w23,w23,w27		// e+=rot(a,5)
440bc3d5698SJohn Baldwin	ror	w20,w20,#2
441bc3d5698SJohn Baldwin	eor	w4,w4,w17
442bc3d5698SJohn Baldwin	add	w22,w22,w3	// future e+=X[i]
443bc3d5698SJohn Baldwin	add	w23,w23,w25		// e+=F(b,c,d)
444bc3d5698SJohn Baldwin	ror	w4,w4,#31
445bc3d5698SJohn Baldwin	eor	w5,w5,w7
446bc3d5698SJohn Baldwin	eor	w25,w21,w24
447bc3d5698SJohn Baldwin	ror	w27,w23,#27
448bc3d5698SJohn Baldwin	add	w21,w21,w28		// future e+=K
449bc3d5698SJohn Baldwin	eor	w5,w5,w13
450bc3d5698SJohn Baldwin	eor	w25,w25,w20
451bc3d5698SJohn Baldwin	add	w22,w22,w27		// e+=rot(a,5)
452bc3d5698SJohn Baldwin	ror	w24,w24,#2
453bc3d5698SJohn Baldwin	eor	w5,w5,w19
454bc3d5698SJohn Baldwin	add	w21,w21,w4	// future e+=X[i]
455bc3d5698SJohn Baldwin	add	w22,w22,w25		// e+=F(b,c,d)
456bc3d5698SJohn Baldwin	ror	w5,w5,#31
457bc3d5698SJohn Baldwin	eor	w6,w6,w8
458bc3d5698SJohn Baldwin	eor	w25,w20,w23
459bc3d5698SJohn Baldwin	ror	w27,w22,#27
460bc3d5698SJohn Baldwin	add	w20,w20,w28		// future e+=K
461bc3d5698SJohn Baldwin	eor	w6,w6,w14
462bc3d5698SJohn Baldwin	eor	w25,w25,w24
463bc3d5698SJohn Baldwin	add	w21,w21,w27		// e+=rot(a,5)
464bc3d5698SJohn Baldwin	ror	w23,w23,#2
465bc3d5698SJohn Baldwin	eor	w6,w6,w3
466bc3d5698SJohn Baldwin	add	w20,w20,w5	// future e+=X[i]
467bc3d5698SJohn Baldwin	add	w21,w21,w25		// e+=F(b,c,d)
468bc3d5698SJohn Baldwin	ror	w6,w6,#31
469bc3d5698SJohn Baldwin	eor	w7,w7,w9
470bc3d5698SJohn Baldwin	eor	w25,w24,w22
471bc3d5698SJohn Baldwin	ror	w27,w21,#27
472bc3d5698SJohn Baldwin	add	w24,w24,w28		// future e+=K
473bc3d5698SJohn Baldwin	eor	w7,w7,w15
474bc3d5698SJohn Baldwin	eor	w25,w25,w23
475bc3d5698SJohn Baldwin	add	w20,w20,w27		// e+=rot(a,5)
476bc3d5698SJohn Baldwin	ror	w22,w22,#2
477bc3d5698SJohn Baldwin	eor	w7,w7,w4
478bc3d5698SJohn Baldwin	add	w24,w24,w6	// future e+=X[i]
479bc3d5698SJohn Baldwin	add	w20,w20,w25		// e+=F(b,c,d)
480bc3d5698SJohn Baldwin	ror	w7,w7,#31
481bc3d5698SJohn Baldwin	eor	w8,w8,w10
482bc3d5698SJohn Baldwin	eor	w25,w23,w21
483bc3d5698SJohn Baldwin	ror	w27,w20,#27
484bc3d5698SJohn Baldwin	add	w23,w23,w28		// future e+=K
485bc3d5698SJohn Baldwin	eor	w8,w8,w16
486bc3d5698SJohn Baldwin	eor	w25,w25,w22
487bc3d5698SJohn Baldwin	add	w24,w24,w27		// e+=rot(a,5)
488bc3d5698SJohn Baldwin	ror	w21,w21,#2
489bc3d5698SJohn Baldwin	eor	w8,w8,w5
490bc3d5698SJohn Baldwin	add	w23,w23,w7	// future e+=X[i]
491bc3d5698SJohn Baldwin	add	w24,w24,w25		// e+=F(b,c,d)
492bc3d5698SJohn Baldwin	ror	w8,w8,#31
493bc3d5698SJohn Baldwin	eor	w9,w9,w11
494bc3d5698SJohn Baldwin	eor	w25,w22,w20
495bc3d5698SJohn Baldwin	ror	w27,w24,#27
496bc3d5698SJohn Baldwin	add	w22,w22,w28		// future e+=K
497bc3d5698SJohn Baldwin	eor	w9,w9,w17
498bc3d5698SJohn Baldwin	eor	w25,w25,w21
499bc3d5698SJohn Baldwin	add	w23,w23,w27		// e+=rot(a,5)
500bc3d5698SJohn Baldwin	ror	w20,w20,#2
501bc3d5698SJohn Baldwin	eor	w9,w9,w6
502bc3d5698SJohn Baldwin	add	w22,w22,w8	// future e+=X[i]
503bc3d5698SJohn Baldwin	add	w23,w23,w25		// e+=F(b,c,d)
504bc3d5698SJohn Baldwin	ror	w9,w9,#31
505bc3d5698SJohn Baldwin	eor	w10,w10,w12
506bc3d5698SJohn Baldwin	eor	w25,w21,w24
507bc3d5698SJohn Baldwin	ror	w27,w23,#27
508bc3d5698SJohn Baldwin	add	w21,w21,w28		// future e+=K
509bc3d5698SJohn Baldwin	eor	w10,w10,w19
510bc3d5698SJohn Baldwin	eor	w25,w25,w20
511bc3d5698SJohn Baldwin	add	w22,w22,w27		// e+=rot(a,5)
512bc3d5698SJohn Baldwin	ror	w24,w24,#2
513bc3d5698SJohn Baldwin	eor	w10,w10,w7
514bc3d5698SJohn Baldwin	add	w21,w21,w9	// future e+=X[i]
515bc3d5698SJohn Baldwin	add	w22,w22,w25		// e+=F(b,c,d)
516bc3d5698SJohn Baldwin	ror	w10,w10,#31
517bc3d5698SJohn Baldwin	eor	w11,w11,w13
518bc3d5698SJohn Baldwin	eor	w25,w20,w23
519bc3d5698SJohn Baldwin	ror	w27,w22,#27
520bc3d5698SJohn Baldwin	add	w20,w20,w28		// future e+=K
521bc3d5698SJohn Baldwin	eor	w11,w11,w3
522bc3d5698SJohn Baldwin	eor	w25,w25,w24
523bc3d5698SJohn Baldwin	add	w21,w21,w27		// e+=rot(a,5)
524bc3d5698SJohn Baldwin	ror	w23,w23,#2
525bc3d5698SJohn Baldwin	eor	w11,w11,w8
526bc3d5698SJohn Baldwin	add	w20,w20,w10	// future e+=X[i]
527bc3d5698SJohn Baldwin	add	w21,w21,w25		// e+=F(b,c,d)
528bc3d5698SJohn Baldwin	ror	w11,w11,#31
529bc3d5698SJohn Baldwin	movz	w28,#0xbcdc
530bc3d5698SJohn Baldwin	movk	w28,#0x8f1b,lsl#16
531bc3d5698SJohn Baldwin	eor	w12,w12,w14
532bc3d5698SJohn Baldwin	eor	w25,w24,w22
533bc3d5698SJohn Baldwin	ror	w27,w21,#27
534bc3d5698SJohn Baldwin	add	w24,w24,w28		// future e+=K
535bc3d5698SJohn Baldwin	eor	w12,w12,w4
536bc3d5698SJohn Baldwin	eor	w25,w25,w23
537bc3d5698SJohn Baldwin	add	w20,w20,w27		// e+=rot(a,5)
538bc3d5698SJohn Baldwin	ror	w22,w22,#2
539bc3d5698SJohn Baldwin	eor	w12,w12,w9
540bc3d5698SJohn Baldwin	add	w24,w24,w11	// future e+=X[i]
541bc3d5698SJohn Baldwin	add	w20,w20,w25		// e+=F(b,c,d)
542bc3d5698SJohn Baldwin	ror	w12,w12,#31
543bc3d5698SJohn Baldwin	orr	w25,w21,w22
544bc3d5698SJohn Baldwin	and	w26,w21,w22
545bc3d5698SJohn Baldwin	eor	w13,w13,w15
546bc3d5698SJohn Baldwin	ror	w27,w20,#27
547bc3d5698SJohn Baldwin	and	w25,w25,w23
548bc3d5698SJohn Baldwin	add	w23,w23,w28		// future e+=K
549bc3d5698SJohn Baldwin	eor	w13,w13,w5
550bc3d5698SJohn Baldwin	add	w24,w24,w27		// e+=rot(a,5)
551bc3d5698SJohn Baldwin	orr	w25,w25,w26
552bc3d5698SJohn Baldwin	ror	w21,w21,#2
553bc3d5698SJohn Baldwin	eor	w13,w13,w10
554bc3d5698SJohn Baldwin	add	w23,w23,w12	// future e+=X[i]
555bc3d5698SJohn Baldwin	add	w24,w24,w25		// e+=F(b,c,d)
556bc3d5698SJohn Baldwin	ror	w13,w13,#31
557bc3d5698SJohn Baldwin	orr	w25,w20,w21
558bc3d5698SJohn Baldwin	and	w26,w20,w21
559bc3d5698SJohn Baldwin	eor	w14,w14,w16
560bc3d5698SJohn Baldwin	ror	w27,w24,#27
561bc3d5698SJohn Baldwin	and	w25,w25,w22
562bc3d5698SJohn Baldwin	add	w22,w22,w28		// future e+=K
563bc3d5698SJohn Baldwin	eor	w14,w14,w6
564bc3d5698SJohn Baldwin	add	w23,w23,w27		// e+=rot(a,5)
565bc3d5698SJohn Baldwin	orr	w25,w25,w26
566bc3d5698SJohn Baldwin	ror	w20,w20,#2
567bc3d5698SJohn Baldwin	eor	w14,w14,w11
568bc3d5698SJohn Baldwin	add	w22,w22,w13	// future e+=X[i]
569bc3d5698SJohn Baldwin	add	w23,w23,w25		// e+=F(b,c,d)
570bc3d5698SJohn Baldwin	ror	w14,w14,#31
571bc3d5698SJohn Baldwin	orr	w25,w24,w20
572bc3d5698SJohn Baldwin	and	w26,w24,w20
573bc3d5698SJohn Baldwin	eor	w15,w15,w17
574bc3d5698SJohn Baldwin	ror	w27,w23,#27
575bc3d5698SJohn Baldwin	and	w25,w25,w21
576bc3d5698SJohn Baldwin	add	w21,w21,w28		// future e+=K
577bc3d5698SJohn Baldwin	eor	w15,w15,w7
578bc3d5698SJohn Baldwin	add	w22,w22,w27		// e+=rot(a,5)
579bc3d5698SJohn Baldwin	orr	w25,w25,w26
580bc3d5698SJohn Baldwin	ror	w24,w24,#2
581bc3d5698SJohn Baldwin	eor	w15,w15,w12
582bc3d5698SJohn Baldwin	add	w21,w21,w14	// future e+=X[i]
583bc3d5698SJohn Baldwin	add	w22,w22,w25		// e+=F(b,c,d)
584bc3d5698SJohn Baldwin	ror	w15,w15,#31
585bc3d5698SJohn Baldwin	orr	w25,w23,w24
586bc3d5698SJohn Baldwin	and	w26,w23,w24
587bc3d5698SJohn Baldwin	eor	w16,w16,w19
588bc3d5698SJohn Baldwin	ror	w27,w22,#27
589bc3d5698SJohn Baldwin	and	w25,w25,w20
590bc3d5698SJohn Baldwin	add	w20,w20,w28		// future e+=K
591bc3d5698SJohn Baldwin	eor	w16,w16,w8
592bc3d5698SJohn Baldwin	add	w21,w21,w27		// e+=rot(a,5)
593bc3d5698SJohn Baldwin	orr	w25,w25,w26
594bc3d5698SJohn Baldwin	ror	w23,w23,#2
595bc3d5698SJohn Baldwin	eor	w16,w16,w13
596bc3d5698SJohn Baldwin	add	w20,w20,w15	// future e+=X[i]
597bc3d5698SJohn Baldwin	add	w21,w21,w25		// e+=F(b,c,d)
598bc3d5698SJohn Baldwin	ror	w16,w16,#31
599bc3d5698SJohn Baldwin	orr	w25,w22,w23
600bc3d5698SJohn Baldwin	and	w26,w22,w23
601bc3d5698SJohn Baldwin	eor	w17,w17,w3
602bc3d5698SJohn Baldwin	ror	w27,w21,#27
603bc3d5698SJohn Baldwin	and	w25,w25,w24
604bc3d5698SJohn Baldwin	add	w24,w24,w28		// future e+=K
605bc3d5698SJohn Baldwin	eor	w17,w17,w9
606bc3d5698SJohn Baldwin	add	w20,w20,w27		// e+=rot(a,5)
607bc3d5698SJohn Baldwin	orr	w25,w25,w26
608bc3d5698SJohn Baldwin	ror	w22,w22,#2
609bc3d5698SJohn Baldwin	eor	w17,w17,w14
610bc3d5698SJohn Baldwin	add	w24,w24,w16	// future e+=X[i]
611bc3d5698SJohn Baldwin	add	w20,w20,w25		// e+=F(b,c,d)
612bc3d5698SJohn Baldwin	ror	w17,w17,#31
613bc3d5698SJohn Baldwin	orr	w25,w21,w22
614bc3d5698SJohn Baldwin	and	w26,w21,w22
615bc3d5698SJohn Baldwin	eor	w19,w19,w4
616bc3d5698SJohn Baldwin	ror	w27,w20,#27
617bc3d5698SJohn Baldwin	and	w25,w25,w23
618bc3d5698SJohn Baldwin	add	w23,w23,w28		// future e+=K
619bc3d5698SJohn Baldwin	eor	w19,w19,w10
620bc3d5698SJohn Baldwin	add	w24,w24,w27		// e+=rot(a,5)
621bc3d5698SJohn Baldwin	orr	w25,w25,w26
622bc3d5698SJohn Baldwin	ror	w21,w21,#2
623bc3d5698SJohn Baldwin	eor	w19,w19,w15
624bc3d5698SJohn Baldwin	add	w23,w23,w17	// future e+=X[i]
625bc3d5698SJohn Baldwin	add	w24,w24,w25		// e+=F(b,c,d)
626bc3d5698SJohn Baldwin	ror	w19,w19,#31
627bc3d5698SJohn Baldwin	orr	w25,w20,w21
628bc3d5698SJohn Baldwin	and	w26,w20,w21
629bc3d5698SJohn Baldwin	eor	w3,w3,w5
630bc3d5698SJohn Baldwin	ror	w27,w24,#27
631bc3d5698SJohn Baldwin	and	w25,w25,w22
632bc3d5698SJohn Baldwin	add	w22,w22,w28		// future e+=K
633bc3d5698SJohn Baldwin	eor	w3,w3,w11
634bc3d5698SJohn Baldwin	add	w23,w23,w27		// e+=rot(a,5)
635bc3d5698SJohn Baldwin	orr	w25,w25,w26
636bc3d5698SJohn Baldwin	ror	w20,w20,#2
637bc3d5698SJohn Baldwin	eor	w3,w3,w16
638bc3d5698SJohn Baldwin	add	w22,w22,w19	// future e+=X[i]
639bc3d5698SJohn Baldwin	add	w23,w23,w25		// e+=F(b,c,d)
640bc3d5698SJohn Baldwin	ror	w3,w3,#31
641bc3d5698SJohn Baldwin	orr	w25,w24,w20
642bc3d5698SJohn Baldwin	and	w26,w24,w20
643bc3d5698SJohn Baldwin	eor	w4,w4,w6
644bc3d5698SJohn Baldwin	ror	w27,w23,#27
645bc3d5698SJohn Baldwin	and	w25,w25,w21
646bc3d5698SJohn Baldwin	add	w21,w21,w28		// future e+=K
647bc3d5698SJohn Baldwin	eor	w4,w4,w12
648bc3d5698SJohn Baldwin	add	w22,w22,w27		// e+=rot(a,5)
649bc3d5698SJohn Baldwin	orr	w25,w25,w26
650bc3d5698SJohn Baldwin	ror	w24,w24,#2
651bc3d5698SJohn Baldwin	eor	w4,w4,w17
652bc3d5698SJohn Baldwin	add	w21,w21,w3	// future e+=X[i]
653bc3d5698SJohn Baldwin	add	w22,w22,w25		// e+=F(b,c,d)
654bc3d5698SJohn Baldwin	ror	w4,w4,#31
655bc3d5698SJohn Baldwin	orr	w25,w23,w24
656bc3d5698SJohn Baldwin	and	w26,w23,w24
657bc3d5698SJohn Baldwin	eor	w5,w5,w7
658bc3d5698SJohn Baldwin	ror	w27,w22,#27
659bc3d5698SJohn Baldwin	and	w25,w25,w20
660bc3d5698SJohn Baldwin	add	w20,w20,w28		// future e+=K
661bc3d5698SJohn Baldwin	eor	w5,w5,w13
662bc3d5698SJohn Baldwin	add	w21,w21,w27		// e+=rot(a,5)
663bc3d5698SJohn Baldwin	orr	w25,w25,w26
664bc3d5698SJohn Baldwin	ror	w23,w23,#2
665bc3d5698SJohn Baldwin	eor	w5,w5,w19
666bc3d5698SJohn Baldwin	add	w20,w20,w4	// future e+=X[i]
667bc3d5698SJohn Baldwin	add	w21,w21,w25		// e+=F(b,c,d)
668bc3d5698SJohn Baldwin	ror	w5,w5,#31
669bc3d5698SJohn Baldwin	orr	w25,w22,w23
670bc3d5698SJohn Baldwin	and	w26,w22,w23
671bc3d5698SJohn Baldwin	eor	w6,w6,w8
672bc3d5698SJohn Baldwin	ror	w27,w21,#27
673bc3d5698SJohn Baldwin	and	w25,w25,w24
674bc3d5698SJohn Baldwin	add	w24,w24,w28		// future e+=K
675bc3d5698SJohn Baldwin	eor	w6,w6,w14
676bc3d5698SJohn Baldwin	add	w20,w20,w27		// e+=rot(a,5)
677bc3d5698SJohn Baldwin	orr	w25,w25,w26
678bc3d5698SJohn Baldwin	ror	w22,w22,#2
679bc3d5698SJohn Baldwin	eor	w6,w6,w3
680bc3d5698SJohn Baldwin	add	w24,w24,w5	// future e+=X[i]
681bc3d5698SJohn Baldwin	add	w20,w20,w25		// e+=F(b,c,d)
682bc3d5698SJohn Baldwin	ror	w6,w6,#31
683bc3d5698SJohn Baldwin	orr	w25,w21,w22
684bc3d5698SJohn Baldwin	and	w26,w21,w22
685bc3d5698SJohn Baldwin	eor	w7,w7,w9
686bc3d5698SJohn Baldwin	ror	w27,w20,#27
687bc3d5698SJohn Baldwin	and	w25,w25,w23
688bc3d5698SJohn Baldwin	add	w23,w23,w28		// future e+=K
689bc3d5698SJohn Baldwin	eor	w7,w7,w15
690bc3d5698SJohn Baldwin	add	w24,w24,w27		// e+=rot(a,5)
691bc3d5698SJohn Baldwin	orr	w25,w25,w26
692bc3d5698SJohn Baldwin	ror	w21,w21,#2
693bc3d5698SJohn Baldwin	eor	w7,w7,w4
694bc3d5698SJohn Baldwin	add	w23,w23,w6	// future e+=X[i]
695bc3d5698SJohn Baldwin	add	w24,w24,w25		// e+=F(b,c,d)
696bc3d5698SJohn Baldwin	ror	w7,w7,#31
697bc3d5698SJohn Baldwin	orr	w25,w20,w21
698bc3d5698SJohn Baldwin	and	w26,w20,w21
699bc3d5698SJohn Baldwin	eor	w8,w8,w10
700bc3d5698SJohn Baldwin	ror	w27,w24,#27
701bc3d5698SJohn Baldwin	and	w25,w25,w22
702bc3d5698SJohn Baldwin	add	w22,w22,w28		// future e+=K
703bc3d5698SJohn Baldwin	eor	w8,w8,w16
704bc3d5698SJohn Baldwin	add	w23,w23,w27		// e+=rot(a,5)
705bc3d5698SJohn Baldwin	orr	w25,w25,w26
706bc3d5698SJohn Baldwin	ror	w20,w20,#2
707bc3d5698SJohn Baldwin	eor	w8,w8,w5
708bc3d5698SJohn Baldwin	add	w22,w22,w7	// future e+=X[i]
709bc3d5698SJohn Baldwin	add	w23,w23,w25		// e+=F(b,c,d)
710bc3d5698SJohn Baldwin	ror	w8,w8,#31
711bc3d5698SJohn Baldwin	orr	w25,w24,w20
712bc3d5698SJohn Baldwin	and	w26,w24,w20
713bc3d5698SJohn Baldwin	eor	w9,w9,w11
714bc3d5698SJohn Baldwin	ror	w27,w23,#27
715bc3d5698SJohn Baldwin	and	w25,w25,w21
716bc3d5698SJohn Baldwin	add	w21,w21,w28		// future e+=K
717bc3d5698SJohn Baldwin	eor	w9,w9,w17
718bc3d5698SJohn Baldwin	add	w22,w22,w27		// e+=rot(a,5)
719bc3d5698SJohn Baldwin	orr	w25,w25,w26
720bc3d5698SJohn Baldwin	ror	w24,w24,#2
721bc3d5698SJohn Baldwin	eor	w9,w9,w6
722bc3d5698SJohn Baldwin	add	w21,w21,w8	// future e+=X[i]
723bc3d5698SJohn Baldwin	add	w22,w22,w25		// e+=F(b,c,d)
724bc3d5698SJohn Baldwin	ror	w9,w9,#31
725bc3d5698SJohn Baldwin	orr	w25,w23,w24
726bc3d5698SJohn Baldwin	and	w26,w23,w24
727bc3d5698SJohn Baldwin	eor	w10,w10,w12
728bc3d5698SJohn Baldwin	ror	w27,w22,#27
729bc3d5698SJohn Baldwin	and	w25,w25,w20
730bc3d5698SJohn Baldwin	add	w20,w20,w28		// future e+=K
731bc3d5698SJohn Baldwin	eor	w10,w10,w19
732bc3d5698SJohn Baldwin	add	w21,w21,w27		// e+=rot(a,5)
733bc3d5698SJohn Baldwin	orr	w25,w25,w26
734bc3d5698SJohn Baldwin	ror	w23,w23,#2
735bc3d5698SJohn Baldwin	eor	w10,w10,w7
736bc3d5698SJohn Baldwin	add	w20,w20,w9	// future e+=X[i]
737bc3d5698SJohn Baldwin	add	w21,w21,w25		// e+=F(b,c,d)
738bc3d5698SJohn Baldwin	ror	w10,w10,#31
739bc3d5698SJohn Baldwin	orr	w25,w22,w23
740bc3d5698SJohn Baldwin	and	w26,w22,w23
741bc3d5698SJohn Baldwin	eor	w11,w11,w13
742bc3d5698SJohn Baldwin	ror	w27,w21,#27
743bc3d5698SJohn Baldwin	and	w25,w25,w24
744bc3d5698SJohn Baldwin	add	w24,w24,w28		// future e+=K
745bc3d5698SJohn Baldwin	eor	w11,w11,w3
746bc3d5698SJohn Baldwin	add	w20,w20,w27		// e+=rot(a,5)
747bc3d5698SJohn Baldwin	orr	w25,w25,w26
748bc3d5698SJohn Baldwin	ror	w22,w22,#2
749bc3d5698SJohn Baldwin	eor	w11,w11,w8
750bc3d5698SJohn Baldwin	add	w24,w24,w10	// future e+=X[i]
751bc3d5698SJohn Baldwin	add	w20,w20,w25		// e+=F(b,c,d)
752bc3d5698SJohn Baldwin	ror	w11,w11,#31
753bc3d5698SJohn Baldwin	orr	w25,w21,w22
754bc3d5698SJohn Baldwin	and	w26,w21,w22
755bc3d5698SJohn Baldwin	eor	w12,w12,w14
756bc3d5698SJohn Baldwin	ror	w27,w20,#27
757bc3d5698SJohn Baldwin	and	w25,w25,w23
758bc3d5698SJohn Baldwin	add	w23,w23,w28		// future e+=K
759bc3d5698SJohn Baldwin	eor	w12,w12,w4
760bc3d5698SJohn Baldwin	add	w24,w24,w27		// e+=rot(a,5)
761bc3d5698SJohn Baldwin	orr	w25,w25,w26
762bc3d5698SJohn Baldwin	ror	w21,w21,#2
763bc3d5698SJohn Baldwin	eor	w12,w12,w9
764bc3d5698SJohn Baldwin	add	w23,w23,w11	// future e+=X[i]
765bc3d5698SJohn Baldwin	add	w24,w24,w25		// e+=F(b,c,d)
766bc3d5698SJohn Baldwin	ror	w12,w12,#31
767bc3d5698SJohn Baldwin	orr	w25,w20,w21
768bc3d5698SJohn Baldwin	and	w26,w20,w21
769bc3d5698SJohn Baldwin	eor	w13,w13,w15
770bc3d5698SJohn Baldwin	ror	w27,w24,#27
771bc3d5698SJohn Baldwin	and	w25,w25,w22
772bc3d5698SJohn Baldwin	add	w22,w22,w28		// future e+=K
773bc3d5698SJohn Baldwin	eor	w13,w13,w5
774bc3d5698SJohn Baldwin	add	w23,w23,w27		// e+=rot(a,5)
775bc3d5698SJohn Baldwin	orr	w25,w25,w26
776bc3d5698SJohn Baldwin	ror	w20,w20,#2
777bc3d5698SJohn Baldwin	eor	w13,w13,w10
778bc3d5698SJohn Baldwin	add	w22,w22,w12	// future e+=X[i]
779bc3d5698SJohn Baldwin	add	w23,w23,w25		// e+=F(b,c,d)
780bc3d5698SJohn Baldwin	ror	w13,w13,#31
781bc3d5698SJohn Baldwin	orr	w25,w24,w20
782bc3d5698SJohn Baldwin	and	w26,w24,w20
783bc3d5698SJohn Baldwin	eor	w14,w14,w16
784bc3d5698SJohn Baldwin	ror	w27,w23,#27
785bc3d5698SJohn Baldwin	and	w25,w25,w21
786bc3d5698SJohn Baldwin	add	w21,w21,w28		// future e+=K
787bc3d5698SJohn Baldwin	eor	w14,w14,w6
788bc3d5698SJohn Baldwin	add	w22,w22,w27		// e+=rot(a,5)
789bc3d5698SJohn Baldwin	orr	w25,w25,w26
790bc3d5698SJohn Baldwin	ror	w24,w24,#2
791bc3d5698SJohn Baldwin	eor	w14,w14,w11
792bc3d5698SJohn Baldwin	add	w21,w21,w13	// future e+=X[i]
793bc3d5698SJohn Baldwin	add	w22,w22,w25		// e+=F(b,c,d)
794bc3d5698SJohn Baldwin	ror	w14,w14,#31
795bc3d5698SJohn Baldwin	orr	w25,w23,w24
796bc3d5698SJohn Baldwin	and	w26,w23,w24
797bc3d5698SJohn Baldwin	eor	w15,w15,w17
798bc3d5698SJohn Baldwin	ror	w27,w22,#27
799bc3d5698SJohn Baldwin	and	w25,w25,w20
800bc3d5698SJohn Baldwin	add	w20,w20,w28		// future e+=K
801bc3d5698SJohn Baldwin	eor	w15,w15,w7
802bc3d5698SJohn Baldwin	add	w21,w21,w27		// e+=rot(a,5)
803bc3d5698SJohn Baldwin	orr	w25,w25,w26
804bc3d5698SJohn Baldwin	ror	w23,w23,#2
805bc3d5698SJohn Baldwin	eor	w15,w15,w12
806bc3d5698SJohn Baldwin	add	w20,w20,w14	// future e+=X[i]
807bc3d5698SJohn Baldwin	add	w21,w21,w25		// e+=F(b,c,d)
808bc3d5698SJohn Baldwin	ror	w15,w15,#31
809bc3d5698SJohn Baldwin	movz	w28,#0xc1d6
810bc3d5698SJohn Baldwin	movk	w28,#0xca62,lsl#16
811bc3d5698SJohn Baldwin	orr	w25,w22,w23
812bc3d5698SJohn Baldwin	and	w26,w22,w23
813bc3d5698SJohn Baldwin	eor	w16,w16,w19
814bc3d5698SJohn Baldwin	ror	w27,w21,#27
815bc3d5698SJohn Baldwin	and	w25,w25,w24
816bc3d5698SJohn Baldwin	add	w24,w24,w28		// future e+=K
817bc3d5698SJohn Baldwin	eor	w16,w16,w8
818bc3d5698SJohn Baldwin	add	w20,w20,w27		// e+=rot(a,5)
819bc3d5698SJohn Baldwin	orr	w25,w25,w26
820bc3d5698SJohn Baldwin	ror	w22,w22,#2
821bc3d5698SJohn Baldwin	eor	w16,w16,w13
822bc3d5698SJohn Baldwin	add	w24,w24,w15	// future e+=X[i]
823bc3d5698SJohn Baldwin	add	w20,w20,w25		// e+=F(b,c,d)
824bc3d5698SJohn Baldwin	ror	w16,w16,#31
825bc3d5698SJohn Baldwin	eor	w17,w17,w3
826bc3d5698SJohn Baldwin	eor	w25,w23,w21
827bc3d5698SJohn Baldwin	ror	w27,w20,#27
828bc3d5698SJohn Baldwin	add	w23,w23,w28		// future e+=K
829bc3d5698SJohn Baldwin	eor	w17,w17,w9
830bc3d5698SJohn Baldwin	eor	w25,w25,w22
831bc3d5698SJohn Baldwin	add	w24,w24,w27		// e+=rot(a,5)
832bc3d5698SJohn Baldwin	ror	w21,w21,#2
833bc3d5698SJohn Baldwin	eor	w17,w17,w14
834bc3d5698SJohn Baldwin	add	w23,w23,w16	// future e+=X[i]
835bc3d5698SJohn Baldwin	add	w24,w24,w25		// e+=F(b,c,d)
836bc3d5698SJohn Baldwin	ror	w17,w17,#31
837bc3d5698SJohn Baldwin	eor	w19,w19,w4
838bc3d5698SJohn Baldwin	eor	w25,w22,w20
839bc3d5698SJohn Baldwin	ror	w27,w24,#27
840bc3d5698SJohn Baldwin	add	w22,w22,w28		// future e+=K
841bc3d5698SJohn Baldwin	eor	w19,w19,w10
842bc3d5698SJohn Baldwin	eor	w25,w25,w21
843bc3d5698SJohn Baldwin	add	w23,w23,w27		// e+=rot(a,5)
844bc3d5698SJohn Baldwin	ror	w20,w20,#2
845bc3d5698SJohn Baldwin	eor	w19,w19,w15
846bc3d5698SJohn Baldwin	add	w22,w22,w17	// future e+=X[i]
847bc3d5698SJohn Baldwin	add	w23,w23,w25		// e+=F(b,c,d)
848bc3d5698SJohn Baldwin	ror	w19,w19,#31
849bc3d5698SJohn Baldwin	eor	w3,w3,w5
850bc3d5698SJohn Baldwin	eor	w25,w21,w24
851bc3d5698SJohn Baldwin	ror	w27,w23,#27
852bc3d5698SJohn Baldwin	add	w21,w21,w28		// future e+=K
853bc3d5698SJohn Baldwin	eor	w3,w3,w11
854bc3d5698SJohn Baldwin	eor	w25,w25,w20
855bc3d5698SJohn Baldwin	add	w22,w22,w27		// e+=rot(a,5)
856bc3d5698SJohn Baldwin	ror	w24,w24,#2
857bc3d5698SJohn Baldwin	eor	w3,w3,w16
858bc3d5698SJohn Baldwin	add	w21,w21,w19	// future e+=X[i]
859bc3d5698SJohn Baldwin	add	w22,w22,w25		// e+=F(b,c,d)
860bc3d5698SJohn Baldwin	ror	w3,w3,#31
861bc3d5698SJohn Baldwin	eor	w4,w4,w6
862bc3d5698SJohn Baldwin	eor	w25,w20,w23
863bc3d5698SJohn Baldwin	ror	w27,w22,#27
864bc3d5698SJohn Baldwin	add	w20,w20,w28		// future e+=K
865bc3d5698SJohn Baldwin	eor	w4,w4,w12
866bc3d5698SJohn Baldwin	eor	w25,w25,w24
867bc3d5698SJohn Baldwin	add	w21,w21,w27		// e+=rot(a,5)
868bc3d5698SJohn Baldwin	ror	w23,w23,#2
869bc3d5698SJohn Baldwin	eor	w4,w4,w17
870bc3d5698SJohn Baldwin	add	w20,w20,w3	// future e+=X[i]
871bc3d5698SJohn Baldwin	add	w21,w21,w25		// e+=F(b,c,d)
872bc3d5698SJohn Baldwin	ror	w4,w4,#31
873bc3d5698SJohn Baldwin	eor	w5,w5,w7
874bc3d5698SJohn Baldwin	eor	w25,w24,w22
875bc3d5698SJohn Baldwin	ror	w27,w21,#27
876bc3d5698SJohn Baldwin	add	w24,w24,w28		// future e+=K
877bc3d5698SJohn Baldwin	eor	w5,w5,w13
878bc3d5698SJohn Baldwin	eor	w25,w25,w23
879bc3d5698SJohn Baldwin	add	w20,w20,w27		// e+=rot(a,5)
880bc3d5698SJohn Baldwin	ror	w22,w22,#2
881bc3d5698SJohn Baldwin	eor	w5,w5,w19
882bc3d5698SJohn Baldwin	add	w24,w24,w4	// future e+=X[i]
883bc3d5698SJohn Baldwin	add	w20,w20,w25		// e+=F(b,c,d)
884bc3d5698SJohn Baldwin	ror	w5,w5,#31
885bc3d5698SJohn Baldwin	eor	w6,w6,w8
886bc3d5698SJohn Baldwin	eor	w25,w23,w21
887bc3d5698SJohn Baldwin	ror	w27,w20,#27
888bc3d5698SJohn Baldwin	add	w23,w23,w28		// future e+=K
889bc3d5698SJohn Baldwin	eor	w6,w6,w14
890bc3d5698SJohn Baldwin	eor	w25,w25,w22
891bc3d5698SJohn Baldwin	add	w24,w24,w27		// e+=rot(a,5)
892bc3d5698SJohn Baldwin	ror	w21,w21,#2
893bc3d5698SJohn Baldwin	eor	w6,w6,w3
894bc3d5698SJohn Baldwin	add	w23,w23,w5	// future e+=X[i]
895bc3d5698SJohn Baldwin	add	w24,w24,w25		// e+=F(b,c,d)
896bc3d5698SJohn Baldwin	ror	w6,w6,#31
897bc3d5698SJohn Baldwin	eor	w7,w7,w9
898bc3d5698SJohn Baldwin	eor	w25,w22,w20
899bc3d5698SJohn Baldwin	ror	w27,w24,#27
900bc3d5698SJohn Baldwin	add	w22,w22,w28		// future e+=K
901bc3d5698SJohn Baldwin	eor	w7,w7,w15
902bc3d5698SJohn Baldwin	eor	w25,w25,w21
903bc3d5698SJohn Baldwin	add	w23,w23,w27		// e+=rot(a,5)
904bc3d5698SJohn Baldwin	ror	w20,w20,#2
905bc3d5698SJohn Baldwin	eor	w7,w7,w4
906bc3d5698SJohn Baldwin	add	w22,w22,w6	// future e+=X[i]
907bc3d5698SJohn Baldwin	add	w23,w23,w25		// e+=F(b,c,d)
908bc3d5698SJohn Baldwin	ror	w7,w7,#31
909bc3d5698SJohn Baldwin	eor	w8,w8,w10
910bc3d5698SJohn Baldwin	eor	w25,w21,w24
911bc3d5698SJohn Baldwin	ror	w27,w23,#27
912bc3d5698SJohn Baldwin	add	w21,w21,w28		// future e+=K
913bc3d5698SJohn Baldwin	eor	w8,w8,w16
914bc3d5698SJohn Baldwin	eor	w25,w25,w20
915bc3d5698SJohn Baldwin	add	w22,w22,w27		// e+=rot(a,5)
916bc3d5698SJohn Baldwin	ror	w24,w24,#2
917bc3d5698SJohn Baldwin	eor	w8,w8,w5
918bc3d5698SJohn Baldwin	add	w21,w21,w7	// future e+=X[i]
919bc3d5698SJohn Baldwin	add	w22,w22,w25		// e+=F(b,c,d)
920bc3d5698SJohn Baldwin	ror	w8,w8,#31
921bc3d5698SJohn Baldwin	eor	w9,w9,w11
922bc3d5698SJohn Baldwin	eor	w25,w20,w23
923bc3d5698SJohn Baldwin	ror	w27,w22,#27
924bc3d5698SJohn Baldwin	add	w20,w20,w28		// future e+=K
925bc3d5698SJohn Baldwin	eor	w9,w9,w17
926bc3d5698SJohn Baldwin	eor	w25,w25,w24
927bc3d5698SJohn Baldwin	add	w21,w21,w27		// e+=rot(a,5)
928bc3d5698SJohn Baldwin	ror	w23,w23,#2
929bc3d5698SJohn Baldwin	eor	w9,w9,w6
930bc3d5698SJohn Baldwin	add	w20,w20,w8	// future e+=X[i]
931bc3d5698SJohn Baldwin	add	w21,w21,w25		// e+=F(b,c,d)
932bc3d5698SJohn Baldwin	ror	w9,w9,#31
933bc3d5698SJohn Baldwin	eor	w10,w10,w12
934bc3d5698SJohn Baldwin	eor	w25,w24,w22
935bc3d5698SJohn Baldwin	ror	w27,w21,#27
936bc3d5698SJohn Baldwin	add	w24,w24,w28		// future e+=K
937bc3d5698SJohn Baldwin	eor	w10,w10,w19
938bc3d5698SJohn Baldwin	eor	w25,w25,w23
939bc3d5698SJohn Baldwin	add	w20,w20,w27		// e+=rot(a,5)
940bc3d5698SJohn Baldwin	ror	w22,w22,#2
941bc3d5698SJohn Baldwin	eor	w10,w10,w7
942bc3d5698SJohn Baldwin	add	w24,w24,w9	// future e+=X[i]
943bc3d5698SJohn Baldwin	add	w20,w20,w25		// e+=F(b,c,d)
944bc3d5698SJohn Baldwin	ror	w10,w10,#31
945bc3d5698SJohn Baldwin	eor	w11,w11,w13
946bc3d5698SJohn Baldwin	eor	w25,w23,w21
947bc3d5698SJohn Baldwin	ror	w27,w20,#27
948bc3d5698SJohn Baldwin	add	w23,w23,w28		// future e+=K
949bc3d5698SJohn Baldwin	eor	w11,w11,w3
950bc3d5698SJohn Baldwin	eor	w25,w25,w22
951bc3d5698SJohn Baldwin	add	w24,w24,w27		// e+=rot(a,5)
952bc3d5698SJohn Baldwin	ror	w21,w21,#2
953bc3d5698SJohn Baldwin	eor	w11,w11,w8
954bc3d5698SJohn Baldwin	add	w23,w23,w10	// future e+=X[i]
955bc3d5698SJohn Baldwin	add	w24,w24,w25		// e+=F(b,c,d)
956bc3d5698SJohn Baldwin	ror	w11,w11,#31
957bc3d5698SJohn Baldwin	eor	w12,w12,w14
958bc3d5698SJohn Baldwin	eor	w25,w22,w20
959bc3d5698SJohn Baldwin	ror	w27,w24,#27
960bc3d5698SJohn Baldwin	add	w22,w22,w28		// future e+=K
961bc3d5698SJohn Baldwin	eor	w12,w12,w4
962bc3d5698SJohn Baldwin	eor	w25,w25,w21
963bc3d5698SJohn Baldwin	add	w23,w23,w27		// e+=rot(a,5)
964bc3d5698SJohn Baldwin	ror	w20,w20,#2
965bc3d5698SJohn Baldwin	eor	w12,w12,w9
966bc3d5698SJohn Baldwin	add	w22,w22,w11	// future e+=X[i]
967bc3d5698SJohn Baldwin	add	w23,w23,w25		// e+=F(b,c,d)
968bc3d5698SJohn Baldwin	ror	w12,w12,#31
969bc3d5698SJohn Baldwin	eor	w13,w13,w15
970bc3d5698SJohn Baldwin	eor	w25,w21,w24
971bc3d5698SJohn Baldwin	ror	w27,w23,#27
972bc3d5698SJohn Baldwin	add	w21,w21,w28		// future e+=K
973bc3d5698SJohn Baldwin	eor	w13,w13,w5
974bc3d5698SJohn Baldwin	eor	w25,w25,w20
975bc3d5698SJohn Baldwin	add	w22,w22,w27		// e+=rot(a,5)
976bc3d5698SJohn Baldwin	ror	w24,w24,#2
977bc3d5698SJohn Baldwin	eor	w13,w13,w10
978bc3d5698SJohn Baldwin	add	w21,w21,w12	// future e+=X[i]
979bc3d5698SJohn Baldwin	add	w22,w22,w25		// e+=F(b,c,d)
980bc3d5698SJohn Baldwin	ror	w13,w13,#31
981bc3d5698SJohn Baldwin	eor	w14,w14,w16
982bc3d5698SJohn Baldwin	eor	w25,w20,w23
983bc3d5698SJohn Baldwin	ror	w27,w22,#27
984bc3d5698SJohn Baldwin	add	w20,w20,w28		// future e+=K
985bc3d5698SJohn Baldwin	eor	w14,w14,w6
986bc3d5698SJohn Baldwin	eor	w25,w25,w24
987bc3d5698SJohn Baldwin	add	w21,w21,w27		// e+=rot(a,5)
988bc3d5698SJohn Baldwin	ror	w23,w23,#2
989bc3d5698SJohn Baldwin	eor	w14,w14,w11
990bc3d5698SJohn Baldwin	add	w20,w20,w13	// future e+=X[i]
991bc3d5698SJohn Baldwin	add	w21,w21,w25		// e+=F(b,c,d)
992bc3d5698SJohn Baldwin	ror	w14,w14,#31
993bc3d5698SJohn Baldwin	eor	w15,w15,w17
994bc3d5698SJohn Baldwin	eor	w25,w24,w22
995bc3d5698SJohn Baldwin	ror	w27,w21,#27
996bc3d5698SJohn Baldwin	add	w24,w24,w28		// future e+=K
997bc3d5698SJohn Baldwin	eor	w15,w15,w7
998bc3d5698SJohn Baldwin	eor	w25,w25,w23
999bc3d5698SJohn Baldwin	add	w20,w20,w27		// e+=rot(a,5)
1000bc3d5698SJohn Baldwin	ror	w22,w22,#2
1001bc3d5698SJohn Baldwin	eor	w15,w15,w12
1002bc3d5698SJohn Baldwin	add	w24,w24,w14	// future e+=X[i]
1003bc3d5698SJohn Baldwin	add	w20,w20,w25		// e+=F(b,c,d)
1004bc3d5698SJohn Baldwin	ror	w15,w15,#31
1005bc3d5698SJohn Baldwin	eor	w16,w16,w19
1006bc3d5698SJohn Baldwin	eor	w25,w23,w21
1007bc3d5698SJohn Baldwin	ror	w27,w20,#27
1008bc3d5698SJohn Baldwin	add	w23,w23,w28		// future e+=K
1009bc3d5698SJohn Baldwin	eor	w16,w16,w8
1010bc3d5698SJohn Baldwin	eor	w25,w25,w22
1011bc3d5698SJohn Baldwin	add	w24,w24,w27		// e+=rot(a,5)
1012bc3d5698SJohn Baldwin	ror	w21,w21,#2
1013bc3d5698SJohn Baldwin	eor	w16,w16,w13
1014bc3d5698SJohn Baldwin	add	w23,w23,w15	// future e+=X[i]
1015bc3d5698SJohn Baldwin	add	w24,w24,w25		// e+=F(b,c,d)
1016bc3d5698SJohn Baldwin	ror	w16,w16,#31
1017bc3d5698SJohn Baldwin	eor	w17,w17,w3
1018bc3d5698SJohn Baldwin	eor	w25,w22,w20
1019bc3d5698SJohn Baldwin	ror	w27,w24,#27
1020bc3d5698SJohn Baldwin	add	w22,w22,w28		// future e+=K
1021bc3d5698SJohn Baldwin	eor	w17,w17,w9
1022bc3d5698SJohn Baldwin	eor	w25,w25,w21
1023bc3d5698SJohn Baldwin	add	w23,w23,w27		// e+=rot(a,5)
1024bc3d5698SJohn Baldwin	ror	w20,w20,#2
1025bc3d5698SJohn Baldwin	eor	w17,w17,w14
1026bc3d5698SJohn Baldwin	add	w22,w22,w16	// future e+=X[i]
1027bc3d5698SJohn Baldwin	add	w23,w23,w25		// e+=F(b,c,d)
1028bc3d5698SJohn Baldwin	ror	w17,w17,#31
1029bc3d5698SJohn Baldwin	eor	w19,w19,w4
1030bc3d5698SJohn Baldwin	eor	w25,w21,w24
1031bc3d5698SJohn Baldwin	ror	w27,w23,#27
1032bc3d5698SJohn Baldwin	add	w21,w21,w28		// future e+=K
1033bc3d5698SJohn Baldwin	eor	w19,w19,w10
1034bc3d5698SJohn Baldwin	eor	w25,w25,w20
1035bc3d5698SJohn Baldwin	add	w22,w22,w27		// e+=rot(a,5)
1036bc3d5698SJohn Baldwin	ror	w24,w24,#2
1037bc3d5698SJohn Baldwin	eor	w19,w19,w15
1038bc3d5698SJohn Baldwin	add	w21,w21,w17	// future e+=X[i]
1039bc3d5698SJohn Baldwin	add	w22,w22,w25		// e+=F(b,c,d)
1040bc3d5698SJohn Baldwin	ror	w19,w19,#31
1041bc3d5698SJohn Baldwin	ldp	w4,w5,[x0]
1042bc3d5698SJohn Baldwin	eor	w25,w20,w23
1043bc3d5698SJohn Baldwin	ror	w27,w22,#27
1044bc3d5698SJohn Baldwin	add	w20,w20,w28		// future e+=K
1045bc3d5698SJohn Baldwin	eor	w25,w25,w24
1046bc3d5698SJohn Baldwin	add	w21,w21,w27		// e+=rot(a,5)
1047bc3d5698SJohn Baldwin	ror	w23,w23,#2
1048bc3d5698SJohn Baldwin	add	w20,w20,w19	// future e+=X[i]
1049bc3d5698SJohn Baldwin	add	w21,w21,w25		// e+=F(b,c,d)
1050bc3d5698SJohn Baldwin	ldp	w6,w7,[x0,#8]
1051bc3d5698SJohn Baldwin	eor	w25,w24,w22
1052bc3d5698SJohn Baldwin	ror	w27,w21,#27
1053bc3d5698SJohn Baldwin	eor	w25,w25,w23
1054bc3d5698SJohn Baldwin	add	w20,w20,w27		// e+=rot(a,5)
1055bc3d5698SJohn Baldwin	ror	w22,w22,#2
1056bc3d5698SJohn Baldwin	ldr	w8,[x0,#16]
1057bc3d5698SJohn Baldwin	add	w20,w20,w25		// e+=F(b,c,d)
1058bc3d5698SJohn Baldwin	add	w21,w21,w5
1059bc3d5698SJohn Baldwin	add	w22,w22,w6
1060bc3d5698SJohn Baldwin	add	w20,w20,w4
1061bc3d5698SJohn Baldwin	add	w23,w23,w7
1062bc3d5698SJohn Baldwin	add	w24,w24,w8
1063bc3d5698SJohn Baldwin	stp	w20,w21,[x0]
1064bc3d5698SJohn Baldwin	stp	w22,w23,[x0,#8]
1065bc3d5698SJohn Baldwin	str	w24,[x0,#16]
1066bc3d5698SJohn Baldwin	cbnz	x2,.Loop
1067bc3d5698SJohn Baldwin
1068bc3d5698SJohn Baldwin	ldp	x19,x20,[sp,#16]
1069bc3d5698SJohn Baldwin	ldp	x21,x22,[sp,#32]
1070bc3d5698SJohn Baldwin	ldp	x23,x24,[sp,#48]
1071bc3d5698SJohn Baldwin	ldp	x25,x26,[sp,#64]
1072bc3d5698SJohn Baldwin	ldp	x27,x28,[sp,#80]
1073bc3d5698SJohn Baldwin	ldr	x29,[sp],#96
1074bc3d5698SJohn Baldwin	ret
1075bc3d5698SJohn Baldwin.size	sha1_block_data_order,.-sha1_block_data_order
1076bc3d5698SJohn Baldwin.type	sha1_block_armv8,%function
1077bc3d5698SJohn Baldwin.align	6
1078bc3d5698SJohn Baldwinsha1_block_armv8:
1079bc3d5698SJohn Baldwin.Lv8_entry:
1080*bd9588bcSAndrew Turner	// Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later.
1081bc3d5698SJohn Baldwin	stp	x29,x30,[sp,#-16]!
1082bc3d5698SJohn Baldwin	add	x29,sp,#0
1083bc3d5698SJohn Baldwin
1084bc3d5698SJohn Baldwin	adr	x4,.Lconst
1085bc3d5698SJohn Baldwin	eor	v1.16b,v1.16b,v1.16b
1086bc3d5698SJohn Baldwin	ld1	{v0.4s},[x0],#16
1087bc3d5698SJohn Baldwin	ld1	{v1.s}[0],[x0]
1088bc3d5698SJohn Baldwin	sub	x0,x0,#16
1089bc3d5698SJohn Baldwin	ld1	{v16.4s,v17.4s,v18.4s,v19.4s},[x4]
1090bc3d5698SJohn Baldwin
1091bc3d5698SJohn Baldwin.Loop_hw:
1092bc3d5698SJohn Baldwin	ld1	{v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64
1093bc3d5698SJohn Baldwin	sub	x2,x2,#1
1094bc3d5698SJohn Baldwin	rev32	v4.16b,v4.16b
1095bc3d5698SJohn Baldwin	rev32	v5.16b,v5.16b
1096bc3d5698SJohn Baldwin
1097bc3d5698SJohn Baldwin	add	v20.4s,v16.4s,v4.4s
1098bc3d5698SJohn Baldwin	rev32	v6.16b,v6.16b
1099bc3d5698SJohn Baldwin	orr	v22.16b,v0.16b,v0.16b	// offload
1100bc3d5698SJohn Baldwin
1101bc3d5698SJohn Baldwin	add	v21.4s,v16.4s,v5.4s
1102bc3d5698SJohn Baldwin	rev32	v7.16b,v7.16b
1103bc3d5698SJohn Baldwin.inst	0x5e280803	//sha1h v3.16b,v0.16b
1104bc3d5698SJohn Baldwin.inst	0x5e140020	//sha1c v0.16b,v1.16b,v20.4s		// 0
1105bc3d5698SJohn Baldwin	add	v20.4s,v16.4s,v6.4s
1106bc3d5698SJohn Baldwin.inst	0x5e0630a4	//sha1su0 v4.16b,v5.16b,v6.16b
1107bc3d5698SJohn Baldwin.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 1
1108bc3d5698SJohn Baldwin.inst	0x5e150060	//sha1c v0.16b,v3.16b,v21.4s
1109bc3d5698SJohn Baldwin	add	v21.4s,v16.4s,v7.4s
1110bc3d5698SJohn Baldwin.inst	0x5e2818e4	//sha1su1 v4.16b,v7.16b
1111bc3d5698SJohn Baldwin.inst	0x5e0730c5	//sha1su0 v5.16b,v6.16b,v7.16b
1112bc3d5698SJohn Baldwin.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 2
1113bc3d5698SJohn Baldwin.inst	0x5e140040	//sha1c v0.16b,v2.16b,v20.4s
1114bc3d5698SJohn Baldwin	add	v20.4s,v16.4s,v4.4s
1115bc3d5698SJohn Baldwin.inst	0x5e281885	//sha1su1 v5.16b,v4.16b
1116bc3d5698SJohn Baldwin.inst	0x5e0430e6	//sha1su0 v6.16b,v7.16b,v4.16b
1117bc3d5698SJohn Baldwin.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 3
1118bc3d5698SJohn Baldwin.inst	0x5e150060	//sha1c v0.16b,v3.16b,v21.4s
1119bc3d5698SJohn Baldwin	add	v21.4s,v17.4s,v5.4s
1120bc3d5698SJohn Baldwin.inst	0x5e2818a6	//sha1su1 v6.16b,v5.16b
1121bc3d5698SJohn Baldwin.inst	0x5e053087	//sha1su0 v7.16b,v4.16b,v5.16b
1122bc3d5698SJohn Baldwin.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 4
1123bc3d5698SJohn Baldwin.inst	0x5e140040	//sha1c v0.16b,v2.16b,v20.4s
1124bc3d5698SJohn Baldwin	add	v20.4s,v17.4s,v6.4s
1125bc3d5698SJohn Baldwin.inst	0x5e2818c7	//sha1su1 v7.16b,v6.16b
1126bc3d5698SJohn Baldwin.inst	0x5e0630a4	//sha1su0 v4.16b,v5.16b,v6.16b
1127bc3d5698SJohn Baldwin.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 5
1128bc3d5698SJohn Baldwin.inst	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
1129bc3d5698SJohn Baldwin	add	v21.4s,v17.4s,v7.4s
1130bc3d5698SJohn Baldwin.inst	0x5e2818e4	//sha1su1 v4.16b,v7.16b
1131bc3d5698SJohn Baldwin.inst	0x5e0730c5	//sha1su0 v5.16b,v6.16b,v7.16b
1132bc3d5698SJohn Baldwin.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 6
1133bc3d5698SJohn Baldwin.inst	0x5e141040	//sha1p v0.16b,v2.16b,v20.4s
1134bc3d5698SJohn Baldwin	add	v20.4s,v17.4s,v4.4s
1135bc3d5698SJohn Baldwin.inst	0x5e281885	//sha1su1 v5.16b,v4.16b
1136bc3d5698SJohn Baldwin.inst	0x5e0430e6	//sha1su0 v6.16b,v7.16b,v4.16b
1137bc3d5698SJohn Baldwin.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 7
1138bc3d5698SJohn Baldwin.inst	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
1139bc3d5698SJohn Baldwin	add	v21.4s,v17.4s,v5.4s
1140bc3d5698SJohn Baldwin.inst	0x5e2818a6	//sha1su1 v6.16b,v5.16b
1141bc3d5698SJohn Baldwin.inst	0x5e053087	//sha1su0 v7.16b,v4.16b,v5.16b
1142bc3d5698SJohn Baldwin.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 8
1143bc3d5698SJohn Baldwin.inst	0x5e141040	//sha1p v0.16b,v2.16b,v20.4s
1144bc3d5698SJohn Baldwin	add	v20.4s,v18.4s,v6.4s
1145bc3d5698SJohn Baldwin.inst	0x5e2818c7	//sha1su1 v7.16b,v6.16b
1146bc3d5698SJohn Baldwin.inst	0x5e0630a4	//sha1su0 v4.16b,v5.16b,v6.16b
1147bc3d5698SJohn Baldwin.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 9
1148bc3d5698SJohn Baldwin.inst	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
1149bc3d5698SJohn Baldwin	add	v21.4s,v18.4s,v7.4s
1150bc3d5698SJohn Baldwin.inst	0x5e2818e4	//sha1su1 v4.16b,v7.16b
1151bc3d5698SJohn Baldwin.inst	0x5e0730c5	//sha1su0 v5.16b,v6.16b,v7.16b
1152bc3d5698SJohn Baldwin.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 10
1153bc3d5698SJohn Baldwin.inst	0x5e142040	//sha1m v0.16b,v2.16b,v20.4s
1154bc3d5698SJohn Baldwin	add	v20.4s,v18.4s,v4.4s
1155bc3d5698SJohn Baldwin.inst	0x5e281885	//sha1su1 v5.16b,v4.16b
1156bc3d5698SJohn Baldwin.inst	0x5e0430e6	//sha1su0 v6.16b,v7.16b,v4.16b
1157bc3d5698SJohn Baldwin.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 11
1158bc3d5698SJohn Baldwin.inst	0x5e152060	//sha1m v0.16b,v3.16b,v21.4s
1159bc3d5698SJohn Baldwin	add	v21.4s,v18.4s,v5.4s
1160bc3d5698SJohn Baldwin.inst	0x5e2818a6	//sha1su1 v6.16b,v5.16b
1161bc3d5698SJohn Baldwin.inst	0x5e053087	//sha1su0 v7.16b,v4.16b,v5.16b
1162bc3d5698SJohn Baldwin.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 12
1163bc3d5698SJohn Baldwin.inst	0x5e142040	//sha1m v0.16b,v2.16b,v20.4s
1164bc3d5698SJohn Baldwin	add	v20.4s,v18.4s,v6.4s
1165bc3d5698SJohn Baldwin.inst	0x5e2818c7	//sha1su1 v7.16b,v6.16b
1166bc3d5698SJohn Baldwin.inst	0x5e0630a4	//sha1su0 v4.16b,v5.16b,v6.16b
1167bc3d5698SJohn Baldwin.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 13
1168bc3d5698SJohn Baldwin.inst	0x5e152060	//sha1m v0.16b,v3.16b,v21.4s
1169bc3d5698SJohn Baldwin	add	v21.4s,v19.4s,v7.4s
1170bc3d5698SJohn Baldwin.inst	0x5e2818e4	//sha1su1 v4.16b,v7.16b
1171bc3d5698SJohn Baldwin.inst	0x5e0730c5	//sha1su0 v5.16b,v6.16b,v7.16b
1172bc3d5698SJohn Baldwin.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 14
1173bc3d5698SJohn Baldwin.inst	0x5e142040	//sha1m v0.16b,v2.16b,v20.4s
1174bc3d5698SJohn Baldwin	add	v20.4s,v19.4s,v4.4s
1175bc3d5698SJohn Baldwin.inst	0x5e281885	//sha1su1 v5.16b,v4.16b
1176bc3d5698SJohn Baldwin.inst	0x5e0430e6	//sha1su0 v6.16b,v7.16b,v4.16b
1177bc3d5698SJohn Baldwin.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 15
1178bc3d5698SJohn Baldwin.inst	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
1179bc3d5698SJohn Baldwin	add	v21.4s,v19.4s,v5.4s
1180bc3d5698SJohn Baldwin.inst	0x5e2818a6	//sha1su1 v6.16b,v5.16b
1181bc3d5698SJohn Baldwin.inst	0x5e053087	//sha1su0 v7.16b,v4.16b,v5.16b
1182bc3d5698SJohn Baldwin.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 16
1183bc3d5698SJohn Baldwin.inst	0x5e141040	//sha1p v0.16b,v2.16b,v20.4s
1184bc3d5698SJohn Baldwin	add	v20.4s,v19.4s,v6.4s
1185bc3d5698SJohn Baldwin.inst	0x5e2818c7	//sha1su1 v7.16b,v6.16b
1186bc3d5698SJohn Baldwin.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 17
1187bc3d5698SJohn Baldwin.inst	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
1188bc3d5698SJohn Baldwin	add	v21.4s,v19.4s,v7.4s
1189bc3d5698SJohn Baldwin
1190bc3d5698SJohn Baldwin.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 18
1191bc3d5698SJohn Baldwin.inst	0x5e141040	//sha1p v0.16b,v2.16b,v20.4s
1192bc3d5698SJohn Baldwin
1193bc3d5698SJohn Baldwin.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 19
1194bc3d5698SJohn Baldwin.inst	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
1195bc3d5698SJohn Baldwin
1196bc3d5698SJohn Baldwin	add	v1.4s,v1.4s,v2.4s
1197bc3d5698SJohn Baldwin	add	v0.4s,v0.4s,v22.4s
1198bc3d5698SJohn Baldwin
1199bc3d5698SJohn Baldwin	cbnz	x2,.Loop_hw
1200bc3d5698SJohn Baldwin
1201bc3d5698SJohn Baldwin	st1	{v0.4s},[x0],#16
1202bc3d5698SJohn Baldwin	st1	{v1.s}[0],[x0]
1203bc3d5698SJohn Baldwin
1204bc3d5698SJohn Baldwin	ldr	x29,[sp],#16
1205bc3d5698SJohn Baldwin	ret
1206bc3d5698SJohn Baldwin.size	sha1_block_armv8,.-sha1_block_armv8
1207bc3d5698SJohn Baldwin.align	6
1208bc3d5698SJohn Baldwin.Lconst:
1209bc3d5698SJohn Baldwin.long	0x5a827999,0x5a827999,0x5a827999,0x5a827999	//K_00_19
1210bc3d5698SJohn Baldwin.long	0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1	//K_20_39
1211bc3d5698SJohn Baldwin.long	0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc	//K_40_59
1212bc3d5698SJohn Baldwin.long	0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6	//K_60_79
1213bc3d5698SJohn Baldwin.byte	83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
1214bc3d5698SJohn Baldwin.align	2
1215bc3d5698SJohn Baldwin.align	2
1216