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