blob: cfb4aa021f293dfa9320ff34c444fca68238c289 [file] [log] [blame]
Kenny Rootb8494592015-09-25 02:29:14 +00001#if defined(__aarch64__)
2#include <openssl/arm_arch.h>
Adam Langleyd9e397b2015-01-22 14:27:53 -08003
4.text
5
Adam Langleye9ada862015-05-11 17:20:37 -07006
Adam Langleyd9e397b2015-01-22 14:27:53 -08007.globl sha1_block_data_order
David Benjamin4969cc92016-04-22 15:02:23 -04008.hidden sha1_block_data_order
Adam Langleyd9e397b2015-01-22 14:27:53 -08009.type sha1_block_data_order,%function
10.align 6
11sha1_block_data_order:
12 ldr x16,.LOPENSSL_armcap_P
13 adr x17,.LOPENSSL_armcap_P
14 add x16,x16,x17
15 ldr w16,[x16]
16 tst w16,#ARMV8_SHA1
17 b.ne .Lv8_entry
18
19 stp x29,x30,[sp,#-96]!
20 add x29,sp,#0
21 stp x19,x20,[sp,#16]
22 stp x21,x22,[sp,#32]
23 stp x23,x24,[sp,#48]
24 stp x25,x26,[sp,#64]
25 stp x27,x28,[sp,#80]
26
27 ldp w20,w21,[x0]
28 ldp w22,w23,[x0,#8]
29 ldr w24,[x0,#16]
30
31.Loop:
32 ldr x3,[x1],#64
33 movz w28,#0x7999
34 sub x2,x2,#1
35 movk w28,#0x5a82,lsl#16
36#ifdef __ARMEB__
37 ror x3,x3,#32
38#else
39 rev32 x3,x3
40#endif
41 add w24,w24,w28 // warm it up
42 add w24,w24,w3
43 lsr x4,x3,#32
44 ldr x5,[x1,#-56]
45 bic w25,w23,w21
46 and w26,w22,w21
47 ror w27,w20,#27
48 add w23,w23,w28 // future e+=K
49 orr w25,w25,w26
50 add w24,w24,w27 // e+=rot(a,5)
51 ror w21,w21,#2
52 add w23,w23,w4 // future e+=X[i]
53 add w24,w24,w25 // e+=F(b,c,d)
54#ifdef __ARMEB__
55 ror x5,x5,#32
56#else
57 rev32 x5,x5
58#endif
59 bic w25,w22,w20
60 and w26,w21,w20
61 ror w27,w24,#27
62 add w22,w22,w28 // future e+=K
63 orr w25,w25,w26
64 add w23,w23,w27 // e+=rot(a,5)
65 ror w20,w20,#2
66 add w22,w22,w5 // future e+=X[i]
67 add w23,w23,w25 // e+=F(b,c,d)
68 lsr x6,x5,#32
69 ldr x7,[x1,#-48]
70 bic w25,w21,w24
71 and w26,w20,w24
72 ror w27,w23,#27
73 add w21,w21,w28 // future e+=K
74 orr w25,w25,w26
75 add w22,w22,w27 // e+=rot(a,5)
76 ror w24,w24,#2
77 add w21,w21,w6 // future e+=X[i]
78 add w22,w22,w25 // e+=F(b,c,d)
79#ifdef __ARMEB__
80 ror x7,x7,#32
81#else
82 rev32 x7,x7
83#endif
84 bic w25,w20,w23
85 and w26,w24,w23
86 ror w27,w22,#27
87 add w20,w20,w28 // future e+=K
88 orr w25,w25,w26
89 add w21,w21,w27 // e+=rot(a,5)
90 ror w23,w23,#2
91 add w20,w20,w7 // future e+=X[i]
92 add w21,w21,w25 // e+=F(b,c,d)
93 lsr x8,x7,#32
94 ldr x9,[x1,#-40]
95 bic w25,w24,w22
96 and w26,w23,w22
97 ror w27,w21,#27
98 add w24,w24,w28 // future e+=K
99 orr w25,w25,w26
100 add w20,w20,w27 // e+=rot(a,5)
101 ror w22,w22,#2
102 add w24,w24,w8 // future e+=X[i]
103 add w20,w20,w25 // e+=F(b,c,d)
104#ifdef __ARMEB__
105 ror x9,x9,#32
106#else
107 rev32 x9,x9
108#endif
109 bic w25,w23,w21
110 and w26,w22,w21
111 ror w27,w20,#27
112 add w23,w23,w28 // future e+=K
113 orr w25,w25,w26
114 add w24,w24,w27 // e+=rot(a,5)
115 ror w21,w21,#2
116 add w23,w23,w9 // future e+=X[i]
117 add w24,w24,w25 // e+=F(b,c,d)
118 lsr x10,x9,#32
119 ldr x11,[x1,#-32]
120 bic w25,w22,w20
121 and w26,w21,w20
122 ror w27,w24,#27
123 add w22,w22,w28 // future e+=K
124 orr w25,w25,w26
125 add w23,w23,w27 // e+=rot(a,5)
126 ror w20,w20,#2
127 add w22,w22,w10 // future e+=X[i]
128 add w23,w23,w25 // e+=F(b,c,d)
129#ifdef __ARMEB__
130 ror x11,x11,#32
131#else
132 rev32 x11,x11
133#endif
134 bic w25,w21,w24
135 and w26,w20,w24
136 ror w27,w23,#27
137 add w21,w21,w28 // future e+=K
138 orr w25,w25,w26
139 add w22,w22,w27 // e+=rot(a,5)
140 ror w24,w24,#2
141 add w21,w21,w11 // future e+=X[i]
142 add w22,w22,w25 // e+=F(b,c,d)
143 lsr x12,x11,#32
144 ldr x13,[x1,#-24]
145 bic w25,w20,w23
146 and w26,w24,w23
147 ror w27,w22,#27
148 add w20,w20,w28 // future e+=K
149 orr w25,w25,w26
150 add w21,w21,w27 // e+=rot(a,5)
151 ror w23,w23,#2
152 add w20,w20,w12 // future e+=X[i]
153 add w21,w21,w25 // e+=F(b,c,d)
154#ifdef __ARMEB__
155 ror x13,x13,#32
156#else
157 rev32 x13,x13
158#endif
159 bic w25,w24,w22
160 and w26,w23,w22
161 ror w27,w21,#27
162 add w24,w24,w28 // future e+=K
163 orr w25,w25,w26
164 add w20,w20,w27 // e+=rot(a,5)
165 ror w22,w22,#2
166 add w24,w24,w13 // future e+=X[i]
167 add w20,w20,w25 // e+=F(b,c,d)
168 lsr x14,x13,#32
169 ldr x15,[x1,#-16]
170 bic w25,w23,w21
171 and w26,w22,w21
172 ror w27,w20,#27
173 add w23,w23,w28 // future e+=K
174 orr w25,w25,w26
175 add w24,w24,w27 // e+=rot(a,5)
176 ror w21,w21,#2
177 add w23,w23,w14 // future e+=X[i]
178 add w24,w24,w25 // e+=F(b,c,d)
179#ifdef __ARMEB__
180 ror x15,x15,#32
181#else
182 rev32 x15,x15
183#endif
184 bic w25,w22,w20
185 and w26,w21,w20
186 ror w27,w24,#27
187 add w22,w22,w28 // future e+=K
188 orr w25,w25,w26
189 add w23,w23,w27 // e+=rot(a,5)
190 ror w20,w20,#2
191 add w22,w22,w15 // future e+=X[i]
192 add w23,w23,w25 // e+=F(b,c,d)
193 lsr x16,x15,#32
194 ldr x17,[x1,#-8]
195 bic w25,w21,w24
196 and w26,w20,w24
197 ror w27,w23,#27
198 add w21,w21,w28 // future e+=K
199 orr w25,w25,w26
200 add w22,w22,w27 // e+=rot(a,5)
201 ror w24,w24,#2
202 add w21,w21,w16 // future e+=X[i]
203 add w22,w22,w25 // e+=F(b,c,d)
204#ifdef __ARMEB__
205 ror x17,x17,#32
206#else
207 rev32 x17,x17
208#endif
209 bic w25,w20,w23
210 and w26,w24,w23
211 ror w27,w22,#27
212 add w20,w20,w28 // future e+=K
213 orr w25,w25,w26
214 add w21,w21,w27 // e+=rot(a,5)
215 ror w23,w23,#2
216 add w20,w20,w17 // future e+=X[i]
217 add w21,w21,w25 // e+=F(b,c,d)
218 lsr x19,x17,#32
Adam Langleye9ada862015-05-11 17:20:37 -0700219 eor w3,w3,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800220 bic w25,w24,w22
221 and w26,w23,w22
222 ror w27,w21,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700223 eor w3,w3,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800224 add w24,w24,w28 // future e+=K
225 orr w25,w25,w26
226 add w20,w20,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700227 eor w3,w3,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800228 ror w22,w22,#2
229 add w24,w24,w19 // future e+=X[i]
230 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700231 ror w3,w3,#31
232 eor w4,w4,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800233 bic w25,w23,w21
234 and w26,w22,w21
235 ror w27,w20,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700236 eor w4,w4,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800237 add w23,w23,w28 // future e+=K
238 orr w25,w25,w26
239 add w24,w24,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700240 eor w4,w4,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800241 ror w21,w21,#2
242 add w23,w23,w3 // future e+=X[i]
243 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700244 ror w4,w4,#31
245 eor w5,w5,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800246 bic w25,w22,w20
247 and w26,w21,w20
248 ror w27,w24,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700249 eor w5,w5,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800250 add w22,w22,w28 // future e+=K
251 orr w25,w25,w26
252 add w23,w23,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700253 eor w5,w5,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800254 ror w20,w20,#2
255 add w22,w22,w4 // future e+=X[i]
256 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700257 ror w5,w5,#31
258 eor w6,w6,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800259 bic w25,w21,w24
260 and w26,w20,w24
261 ror w27,w23,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700262 eor w6,w6,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800263 add w21,w21,w28 // future e+=K
264 orr w25,w25,w26
265 add w22,w22,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700266 eor w6,w6,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800267 ror w24,w24,#2
268 add w21,w21,w5 // future e+=X[i]
269 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700270 ror w6,w6,#31
271 eor w7,w7,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800272 bic w25,w20,w23
273 and w26,w24,w23
274 ror w27,w22,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700275 eor w7,w7,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800276 add w20,w20,w28 // future e+=K
277 orr w25,w25,w26
278 add w21,w21,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700279 eor w7,w7,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800280 ror w23,w23,#2
281 add w20,w20,w6 // future e+=X[i]
282 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700283 ror w7,w7,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800284 movz w28,#0xeba1
285 movk w28,#0x6ed9,lsl#16
Adam Langleye9ada862015-05-11 17:20:37 -0700286 eor w8,w8,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800287 bic w25,w24,w22
288 and w26,w23,w22
289 ror w27,w21,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700290 eor w8,w8,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800291 add w24,w24,w28 // future e+=K
292 orr w25,w25,w26
293 add w20,w20,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700294 eor w8,w8,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800295 ror w22,w22,#2
296 add w24,w24,w7 // future e+=X[i]
297 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700298 ror w8,w8,#31
299 eor w9,w9,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800300 eor w25,w23,w21
301 ror w27,w20,#27
302 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700303 eor w9,w9,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800304 eor w25,w25,w22
305 add w24,w24,w27 // e+=rot(a,5)
306 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700307 eor w9,w9,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800308 add w23,w23,w8 // future e+=X[i]
309 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700310 ror w9,w9,#31
311 eor w10,w10,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800312 eor w25,w22,w20
313 ror w27,w24,#27
314 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700315 eor w10,w10,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800316 eor w25,w25,w21
317 add w23,w23,w27 // e+=rot(a,5)
318 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700319 eor w10,w10,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800320 add w22,w22,w9 // future e+=X[i]
321 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700322 ror w10,w10,#31
323 eor w11,w11,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800324 eor w25,w21,w24
325 ror w27,w23,#27
326 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700327 eor w11,w11,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800328 eor w25,w25,w20
329 add w22,w22,w27 // e+=rot(a,5)
330 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700331 eor w11,w11,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800332 add w21,w21,w10 // future e+=X[i]
333 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700334 ror w11,w11,#31
335 eor w12,w12,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800336 eor w25,w20,w23
337 ror w27,w22,#27
338 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700339 eor w12,w12,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800340 eor w25,w25,w24
341 add w21,w21,w27 // e+=rot(a,5)
342 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700343 eor w12,w12,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800344 add w20,w20,w11 // future e+=X[i]
345 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700346 ror w12,w12,#31
347 eor w13,w13,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800348 eor w25,w24,w22
349 ror w27,w21,#27
350 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700351 eor w13,w13,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800352 eor w25,w25,w23
353 add w20,w20,w27 // e+=rot(a,5)
354 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700355 eor w13,w13,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800356 add w24,w24,w12 // future e+=X[i]
357 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700358 ror w13,w13,#31
359 eor w14,w14,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800360 eor w25,w23,w21
361 ror w27,w20,#27
362 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700363 eor w14,w14,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800364 eor w25,w25,w22
365 add w24,w24,w27 // e+=rot(a,5)
366 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700367 eor w14,w14,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800368 add w23,w23,w13 // future e+=X[i]
369 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700370 ror w14,w14,#31
371 eor w15,w15,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800372 eor w25,w22,w20
373 ror w27,w24,#27
374 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700375 eor w15,w15,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800376 eor w25,w25,w21
377 add w23,w23,w27 // e+=rot(a,5)
378 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700379 eor w15,w15,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800380 add w22,w22,w14 // future e+=X[i]
381 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700382 ror w15,w15,#31
383 eor w16,w16,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800384 eor w25,w21,w24
385 ror w27,w23,#27
386 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700387 eor w16,w16,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800388 eor w25,w25,w20
389 add w22,w22,w27 // e+=rot(a,5)
390 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700391 eor w16,w16,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800392 add w21,w21,w15 // future e+=X[i]
393 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700394 ror w16,w16,#31
395 eor w17,w17,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800396 eor w25,w20,w23
397 ror w27,w22,#27
398 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700399 eor w17,w17,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800400 eor w25,w25,w24
401 add w21,w21,w27 // e+=rot(a,5)
402 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700403 eor w17,w17,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800404 add w20,w20,w16 // future e+=X[i]
405 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700406 ror w17,w17,#31
407 eor w19,w19,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800408 eor w25,w24,w22
409 ror w27,w21,#27
410 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700411 eor w19,w19,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800412 eor w25,w25,w23
413 add w20,w20,w27 // e+=rot(a,5)
414 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700415 eor w19,w19,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800416 add w24,w24,w17 // future e+=X[i]
417 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700418 ror w19,w19,#31
419 eor w3,w3,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800420 eor w25,w23,w21
421 ror w27,w20,#27
422 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700423 eor w3,w3,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800424 eor w25,w25,w22
425 add w24,w24,w27 // e+=rot(a,5)
426 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700427 eor w3,w3,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800428 add w23,w23,w19 // future e+=X[i]
429 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700430 ror w3,w3,#31
431 eor w4,w4,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800432 eor w25,w22,w20
433 ror w27,w24,#27
434 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700435 eor w4,w4,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800436 eor w25,w25,w21
437 add w23,w23,w27 // e+=rot(a,5)
438 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700439 eor w4,w4,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800440 add w22,w22,w3 // future e+=X[i]
441 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700442 ror w4,w4,#31
443 eor w5,w5,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800444 eor w25,w21,w24
445 ror w27,w23,#27
446 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700447 eor w5,w5,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800448 eor w25,w25,w20
449 add w22,w22,w27 // e+=rot(a,5)
450 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700451 eor w5,w5,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800452 add w21,w21,w4 // future e+=X[i]
453 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700454 ror w5,w5,#31
455 eor w6,w6,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800456 eor w25,w20,w23
457 ror w27,w22,#27
458 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700459 eor w6,w6,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800460 eor w25,w25,w24
461 add w21,w21,w27 // e+=rot(a,5)
462 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700463 eor w6,w6,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800464 add w20,w20,w5 // future e+=X[i]
465 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700466 ror w6,w6,#31
467 eor w7,w7,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800468 eor w25,w24,w22
469 ror w27,w21,#27
470 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700471 eor w7,w7,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800472 eor w25,w25,w23
473 add w20,w20,w27 // e+=rot(a,5)
474 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700475 eor w7,w7,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800476 add w24,w24,w6 // future e+=X[i]
477 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700478 ror w7,w7,#31
479 eor w8,w8,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800480 eor w25,w23,w21
481 ror w27,w20,#27
482 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700483 eor w8,w8,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800484 eor w25,w25,w22
485 add w24,w24,w27 // e+=rot(a,5)
486 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700487 eor w8,w8,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800488 add w23,w23,w7 // future e+=X[i]
489 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700490 ror w8,w8,#31
491 eor w9,w9,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800492 eor w25,w22,w20
493 ror w27,w24,#27
494 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700495 eor w9,w9,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800496 eor w25,w25,w21
497 add w23,w23,w27 // e+=rot(a,5)
498 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700499 eor w9,w9,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800500 add w22,w22,w8 // future e+=X[i]
501 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700502 ror w9,w9,#31
503 eor w10,w10,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800504 eor w25,w21,w24
505 ror w27,w23,#27
506 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700507 eor w10,w10,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800508 eor w25,w25,w20
509 add w22,w22,w27 // e+=rot(a,5)
510 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700511 eor w10,w10,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800512 add w21,w21,w9 // future e+=X[i]
513 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700514 ror w10,w10,#31
515 eor w11,w11,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800516 eor w25,w20,w23
517 ror w27,w22,#27
518 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700519 eor w11,w11,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800520 eor w25,w25,w24
521 add w21,w21,w27 // e+=rot(a,5)
522 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700523 eor w11,w11,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800524 add w20,w20,w10 // future e+=X[i]
525 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700526 ror w11,w11,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800527 movz w28,#0xbcdc
528 movk w28,#0x8f1b,lsl#16
Adam Langleye9ada862015-05-11 17:20:37 -0700529 eor w12,w12,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800530 eor w25,w24,w22
531 ror w27,w21,#27
532 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700533 eor w12,w12,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800534 eor w25,w25,w23
535 add w20,w20,w27 // e+=rot(a,5)
536 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700537 eor w12,w12,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800538 add w24,w24,w11 // future e+=X[i]
539 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700540 ror w12,w12,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800541 orr w25,w21,w22
542 and w26,w21,w22
Adam Langleye9ada862015-05-11 17:20:37 -0700543 eor w13,w13,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800544 ror w27,w20,#27
545 and w25,w25,w23
546 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700547 eor w13,w13,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800548 add w24,w24,w27 // e+=rot(a,5)
549 orr w25,w25,w26
550 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700551 eor w13,w13,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800552 add w23,w23,w12 // future e+=X[i]
553 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700554 ror w13,w13,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800555 orr w25,w20,w21
556 and w26,w20,w21
Adam Langleye9ada862015-05-11 17:20:37 -0700557 eor w14,w14,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800558 ror w27,w24,#27
559 and w25,w25,w22
560 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700561 eor w14,w14,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800562 add w23,w23,w27 // e+=rot(a,5)
563 orr w25,w25,w26
564 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700565 eor w14,w14,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800566 add w22,w22,w13 // future e+=X[i]
567 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700568 ror w14,w14,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800569 orr w25,w24,w20
570 and w26,w24,w20
Adam Langleye9ada862015-05-11 17:20:37 -0700571 eor w15,w15,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800572 ror w27,w23,#27
573 and w25,w25,w21
574 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700575 eor w15,w15,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800576 add w22,w22,w27 // e+=rot(a,5)
577 orr w25,w25,w26
578 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700579 eor w15,w15,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800580 add w21,w21,w14 // future e+=X[i]
581 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700582 ror w15,w15,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800583 orr w25,w23,w24
584 and w26,w23,w24
Adam Langleye9ada862015-05-11 17:20:37 -0700585 eor w16,w16,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800586 ror w27,w22,#27
587 and w25,w25,w20
588 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700589 eor w16,w16,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800590 add w21,w21,w27 // e+=rot(a,5)
591 orr w25,w25,w26
592 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700593 eor w16,w16,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800594 add w20,w20,w15 // future e+=X[i]
595 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700596 ror w16,w16,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800597 orr w25,w22,w23
598 and w26,w22,w23
Adam Langleye9ada862015-05-11 17:20:37 -0700599 eor w17,w17,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800600 ror w27,w21,#27
601 and w25,w25,w24
602 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700603 eor w17,w17,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800604 add w20,w20,w27 // e+=rot(a,5)
605 orr w25,w25,w26
606 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700607 eor w17,w17,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800608 add w24,w24,w16 // future e+=X[i]
609 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700610 ror w17,w17,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800611 orr w25,w21,w22
612 and w26,w21,w22
Adam Langleye9ada862015-05-11 17:20:37 -0700613 eor w19,w19,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800614 ror w27,w20,#27
615 and w25,w25,w23
616 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700617 eor w19,w19,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800618 add w24,w24,w27 // e+=rot(a,5)
619 orr w25,w25,w26
620 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700621 eor w19,w19,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800622 add w23,w23,w17 // future e+=X[i]
623 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700624 ror w19,w19,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800625 orr w25,w20,w21
626 and w26,w20,w21
Adam Langleye9ada862015-05-11 17:20:37 -0700627 eor w3,w3,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800628 ror w27,w24,#27
629 and w25,w25,w22
630 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700631 eor w3,w3,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800632 add w23,w23,w27 // e+=rot(a,5)
633 orr w25,w25,w26
634 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700635 eor w3,w3,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800636 add w22,w22,w19 // future e+=X[i]
637 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700638 ror w3,w3,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800639 orr w25,w24,w20
640 and w26,w24,w20
Adam Langleye9ada862015-05-11 17:20:37 -0700641 eor w4,w4,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800642 ror w27,w23,#27
643 and w25,w25,w21
644 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700645 eor w4,w4,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800646 add w22,w22,w27 // e+=rot(a,5)
647 orr w25,w25,w26
648 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700649 eor w4,w4,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800650 add w21,w21,w3 // future e+=X[i]
651 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700652 ror w4,w4,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800653 orr w25,w23,w24
654 and w26,w23,w24
Adam Langleye9ada862015-05-11 17:20:37 -0700655 eor w5,w5,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800656 ror w27,w22,#27
657 and w25,w25,w20
658 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700659 eor w5,w5,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800660 add w21,w21,w27 // e+=rot(a,5)
661 orr w25,w25,w26
662 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700663 eor w5,w5,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800664 add w20,w20,w4 // future e+=X[i]
665 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700666 ror w5,w5,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800667 orr w25,w22,w23
668 and w26,w22,w23
Adam Langleye9ada862015-05-11 17:20:37 -0700669 eor w6,w6,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800670 ror w27,w21,#27
671 and w25,w25,w24
672 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700673 eor w6,w6,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800674 add w20,w20,w27 // e+=rot(a,5)
675 orr w25,w25,w26
676 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700677 eor w6,w6,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800678 add w24,w24,w5 // future e+=X[i]
679 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700680 ror w6,w6,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800681 orr w25,w21,w22
682 and w26,w21,w22
Adam Langleye9ada862015-05-11 17:20:37 -0700683 eor w7,w7,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800684 ror w27,w20,#27
685 and w25,w25,w23
686 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700687 eor w7,w7,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800688 add w24,w24,w27 // e+=rot(a,5)
689 orr w25,w25,w26
690 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700691 eor w7,w7,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800692 add w23,w23,w6 // future e+=X[i]
693 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700694 ror w7,w7,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800695 orr w25,w20,w21
696 and w26,w20,w21
Adam Langleye9ada862015-05-11 17:20:37 -0700697 eor w8,w8,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800698 ror w27,w24,#27
699 and w25,w25,w22
700 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700701 eor w8,w8,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800702 add w23,w23,w27 // e+=rot(a,5)
703 orr w25,w25,w26
704 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700705 eor w8,w8,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800706 add w22,w22,w7 // future e+=X[i]
707 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700708 ror w8,w8,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800709 orr w25,w24,w20
710 and w26,w24,w20
Adam Langleye9ada862015-05-11 17:20:37 -0700711 eor w9,w9,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800712 ror w27,w23,#27
713 and w25,w25,w21
714 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700715 eor w9,w9,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800716 add w22,w22,w27 // e+=rot(a,5)
717 orr w25,w25,w26
718 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700719 eor w9,w9,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800720 add w21,w21,w8 // future e+=X[i]
721 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700722 ror w9,w9,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800723 orr w25,w23,w24
724 and w26,w23,w24
Adam Langleye9ada862015-05-11 17:20:37 -0700725 eor w10,w10,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800726 ror w27,w22,#27
727 and w25,w25,w20
728 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700729 eor w10,w10,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800730 add w21,w21,w27 // e+=rot(a,5)
731 orr w25,w25,w26
732 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700733 eor w10,w10,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800734 add w20,w20,w9 // future e+=X[i]
735 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700736 ror w10,w10,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800737 orr w25,w22,w23
738 and w26,w22,w23
Adam Langleye9ada862015-05-11 17:20:37 -0700739 eor w11,w11,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800740 ror w27,w21,#27
741 and w25,w25,w24
742 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700743 eor w11,w11,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800744 add w20,w20,w27 // e+=rot(a,5)
745 orr w25,w25,w26
746 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700747 eor w11,w11,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800748 add w24,w24,w10 // future e+=X[i]
749 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700750 ror w11,w11,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800751 orr w25,w21,w22
752 and w26,w21,w22
Adam Langleye9ada862015-05-11 17:20:37 -0700753 eor w12,w12,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800754 ror w27,w20,#27
755 and w25,w25,w23
756 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700757 eor w12,w12,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800758 add w24,w24,w27 // e+=rot(a,5)
759 orr w25,w25,w26
760 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700761 eor w12,w12,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800762 add w23,w23,w11 // future e+=X[i]
763 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700764 ror w12,w12,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800765 orr w25,w20,w21
766 and w26,w20,w21
Adam Langleye9ada862015-05-11 17:20:37 -0700767 eor w13,w13,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800768 ror w27,w24,#27
769 and w25,w25,w22
770 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700771 eor w13,w13,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800772 add w23,w23,w27 // e+=rot(a,5)
773 orr w25,w25,w26
774 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700775 eor w13,w13,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800776 add w22,w22,w12 // future e+=X[i]
777 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700778 ror w13,w13,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800779 orr w25,w24,w20
780 and w26,w24,w20
Adam Langleye9ada862015-05-11 17:20:37 -0700781 eor w14,w14,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800782 ror w27,w23,#27
783 and w25,w25,w21
784 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700785 eor w14,w14,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800786 add w22,w22,w27 // e+=rot(a,5)
787 orr w25,w25,w26
788 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700789 eor w14,w14,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800790 add w21,w21,w13 // future e+=X[i]
791 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700792 ror w14,w14,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800793 orr w25,w23,w24
794 and w26,w23,w24
Adam Langleye9ada862015-05-11 17:20:37 -0700795 eor w15,w15,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800796 ror w27,w22,#27
797 and w25,w25,w20
798 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700799 eor w15,w15,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800800 add w21,w21,w27 // e+=rot(a,5)
801 orr w25,w25,w26
802 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700803 eor w15,w15,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800804 add w20,w20,w14 // future e+=X[i]
805 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700806 ror w15,w15,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800807 movz w28,#0xc1d6
808 movk w28,#0xca62,lsl#16
809 orr w25,w22,w23
810 and w26,w22,w23
Adam Langleye9ada862015-05-11 17:20:37 -0700811 eor w16,w16,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800812 ror w27,w21,#27
813 and w25,w25,w24
814 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700815 eor w16,w16,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800816 add w20,w20,w27 // e+=rot(a,5)
817 orr w25,w25,w26
818 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700819 eor w16,w16,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800820 add w24,w24,w15 // future e+=X[i]
821 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700822 ror w16,w16,#31
823 eor w17,w17,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800824 eor w25,w23,w21
825 ror w27,w20,#27
826 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700827 eor w17,w17,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800828 eor w25,w25,w22
829 add w24,w24,w27 // e+=rot(a,5)
830 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700831 eor w17,w17,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800832 add w23,w23,w16 // future e+=X[i]
833 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700834 ror w17,w17,#31
835 eor w19,w19,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800836 eor w25,w22,w20
837 ror w27,w24,#27
838 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700839 eor w19,w19,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800840 eor w25,w25,w21
841 add w23,w23,w27 // e+=rot(a,5)
842 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700843 eor w19,w19,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800844 add w22,w22,w17 // future e+=X[i]
845 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700846 ror w19,w19,#31
847 eor w3,w3,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800848 eor w25,w21,w24
849 ror w27,w23,#27
850 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700851 eor w3,w3,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800852 eor w25,w25,w20
853 add w22,w22,w27 // e+=rot(a,5)
854 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700855 eor w3,w3,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800856 add w21,w21,w19 // future e+=X[i]
857 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700858 ror w3,w3,#31
859 eor w4,w4,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800860 eor w25,w20,w23
861 ror w27,w22,#27
862 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700863 eor w4,w4,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800864 eor w25,w25,w24
865 add w21,w21,w27 // e+=rot(a,5)
866 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700867 eor w4,w4,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800868 add w20,w20,w3 // future e+=X[i]
869 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700870 ror w4,w4,#31
871 eor w5,w5,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800872 eor w25,w24,w22
873 ror w27,w21,#27
874 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700875 eor w5,w5,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800876 eor w25,w25,w23
877 add w20,w20,w27 // e+=rot(a,5)
878 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700879 eor w5,w5,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800880 add w24,w24,w4 // future e+=X[i]
881 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700882 ror w5,w5,#31
883 eor w6,w6,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800884 eor w25,w23,w21
885 ror w27,w20,#27
886 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700887 eor w6,w6,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800888 eor w25,w25,w22
889 add w24,w24,w27 // e+=rot(a,5)
890 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700891 eor w6,w6,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800892 add w23,w23,w5 // future e+=X[i]
893 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700894 ror w6,w6,#31
895 eor w7,w7,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800896 eor w25,w22,w20
897 ror w27,w24,#27
898 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700899 eor w7,w7,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800900 eor w25,w25,w21
901 add w23,w23,w27 // e+=rot(a,5)
902 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700903 eor w7,w7,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800904 add w22,w22,w6 // future e+=X[i]
905 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700906 ror w7,w7,#31
907 eor w8,w8,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800908 eor w25,w21,w24
909 ror w27,w23,#27
910 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700911 eor w8,w8,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800912 eor w25,w25,w20
913 add w22,w22,w27 // e+=rot(a,5)
914 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700915 eor w8,w8,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800916 add w21,w21,w7 // future e+=X[i]
917 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700918 ror w8,w8,#31
919 eor w9,w9,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800920 eor w25,w20,w23
921 ror w27,w22,#27
922 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700923 eor w9,w9,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800924 eor w25,w25,w24
925 add w21,w21,w27 // e+=rot(a,5)
926 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700927 eor w9,w9,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800928 add w20,w20,w8 // future e+=X[i]
929 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700930 ror w9,w9,#31
931 eor w10,w10,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800932 eor w25,w24,w22
933 ror w27,w21,#27
934 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700935 eor w10,w10,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800936 eor w25,w25,w23
937 add w20,w20,w27 // e+=rot(a,5)
938 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700939 eor w10,w10,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800940 add w24,w24,w9 // future e+=X[i]
941 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700942 ror w10,w10,#31
943 eor w11,w11,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800944 eor w25,w23,w21
945 ror w27,w20,#27
946 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700947 eor w11,w11,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800948 eor w25,w25,w22
949 add w24,w24,w27 // e+=rot(a,5)
950 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700951 eor w11,w11,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800952 add w23,w23,w10 // future e+=X[i]
953 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700954 ror w11,w11,#31
955 eor w12,w12,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800956 eor w25,w22,w20
957 ror w27,w24,#27
958 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700959 eor w12,w12,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800960 eor w25,w25,w21
961 add w23,w23,w27 // e+=rot(a,5)
962 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700963 eor w12,w12,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800964 add w22,w22,w11 // future e+=X[i]
965 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700966 ror w12,w12,#31
967 eor w13,w13,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800968 eor w25,w21,w24
969 ror w27,w23,#27
970 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700971 eor w13,w13,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800972 eor w25,w25,w20
973 add w22,w22,w27 // e+=rot(a,5)
974 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700975 eor w13,w13,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800976 add w21,w21,w12 // future e+=X[i]
977 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700978 ror w13,w13,#31
979 eor w14,w14,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800980 eor w25,w20,w23
981 ror w27,w22,#27
982 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700983 eor w14,w14,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800984 eor w25,w25,w24
985 add w21,w21,w27 // e+=rot(a,5)
986 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700987 eor w14,w14,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800988 add w20,w20,w13 // future e+=X[i]
989 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700990 ror w14,w14,#31
991 eor w15,w15,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800992 eor w25,w24,w22
993 ror w27,w21,#27
994 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700995 eor w15,w15,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800996 eor w25,w25,w23
997 add w20,w20,w27 // e+=rot(a,5)
998 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700999 eor w15,w15,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -08001000 add w24,w24,w14 // future e+=X[i]
1001 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -07001002 ror w15,w15,#31
1003 eor w16,w16,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -08001004 eor w25,w23,w21
1005 ror w27,w20,#27
1006 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -07001007 eor w16,w16,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -08001008 eor w25,w25,w22
1009 add w24,w24,w27 // e+=rot(a,5)
1010 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -07001011 eor w16,w16,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001012 add w23,w23,w15 // future e+=X[i]
1013 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -07001014 ror w16,w16,#31
1015 eor w17,w17,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -08001016 eor w25,w22,w20
1017 ror w27,w24,#27
1018 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -07001019 eor w17,w17,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -08001020 eor w25,w25,w21
1021 add w23,w23,w27 // e+=rot(a,5)
1022 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -07001023 eor w17,w17,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -08001024 add w22,w22,w16 // future e+=X[i]
1025 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -07001026 ror w17,w17,#31
1027 eor w19,w19,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -08001028 eor w25,w21,w24
1029 ror w27,w23,#27
1030 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -07001031 eor w19,w19,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -08001032 eor w25,w25,w20
1033 add w22,w22,w27 // e+=rot(a,5)
1034 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -07001035 eor w19,w19,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -08001036 add w21,w21,w17 // future e+=X[i]
1037 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -07001038 ror w19,w19,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -08001039 ldp w4,w5,[x0]
1040 eor w25,w20,w23
1041 ror w27,w22,#27
1042 add w20,w20,w28 // future e+=K
1043 eor w25,w25,w24
1044 add w21,w21,w27 // e+=rot(a,5)
1045 ror w23,w23,#2
1046 add w20,w20,w19 // future e+=X[i]
1047 add w21,w21,w25 // e+=F(b,c,d)
1048 ldp w6,w7,[x0,#8]
1049 eor w25,w24,w22
1050 ror w27,w21,#27
1051 eor w25,w25,w23
1052 add w20,w20,w27 // e+=rot(a,5)
1053 ror w22,w22,#2
1054 ldr w8,[x0,#16]
1055 add w20,w20,w25 // e+=F(b,c,d)
1056 add w21,w21,w5
1057 add w22,w22,w6
1058 add w20,w20,w4
1059 add w23,w23,w7
1060 add w24,w24,w8
1061 stp w20,w21,[x0]
1062 stp w22,w23,[x0,#8]
1063 str w24,[x0,#16]
1064 cbnz x2,.Loop
1065
1066 ldp x19,x20,[sp,#16]
1067 ldp x21,x22,[sp,#32]
1068 ldp x23,x24,[sp,#48]
1069 ldp x25,x26,[sp,#64]
1070 ldp x27,x28,[sp,#80]
1071 ldr x29,[sp],#96
1072 ret
1073.size sha1_block_data_order,.-sha1_block_data_order
1074.type sha1_block_armv8,%function
1075.align 6
1076sha1_block_armv8:
1077.Lv8_entry:
1078 stp x29,x30,[sp,#-16]!
1079 add x29,sp,#0
1080
1081 adr x4,.Lconst
1082 eor v1.16b,v1.16b,v1.16b
1083 ld1 {v0.4s},[x0],#16
1084 ld1 {v1.s}[0],[x0]
1085 sub x0,x0,#16
Adam Langleye9ada862015-05-11 17:20:37 -07001086 ld1 {v16.4s,v17.4s,v18.4s,v19.4s},[x4]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001087
1088.Loop_hw:
Adam Langleye9ada862015-05-11 17:20:37 -07001089 ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64
Adam Langleyd9e397b2015-01-22 14:27:53 -08001090 sub x2,x2,#1
1091 rev32 v4.16b,v4.16b
1092 rev32 v5.16b,v5.16b
1093
1094 add v20.4s,v16.4s,v4.4s
1095 rev32 v6.16b,v6.16b
1096 orr v22.16b,v0.16b,v0.16b // offload
1097
1098 add v21.4s,v16.4s,v5.4s
1099 rev32 v7.16b,v7.16b
Adam Langleye9ada862015-05-11 17:20:37 -07001100.inst 0x5e280803 //sha1h v3.16b,v0.16b
1101.inst 0x5e140020 //sha1c v0.16b,v1.16b,v20.4s // 0
Adam Langleyd9e397b2015-01-22 14:27:53 -08001102 add v20.4s,v16.4s,v6.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001103.inst 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1104.inst 0x5e280802 //sha1h v2.16b,v0.16b // 1
1105.inst 0x5e150060 //sha1c v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001106 add v21.4s,v16.4s,v7.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001107.inst 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1108.inst 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1109.inst 0x5e280803 //sha1h v3.16b,v0.16b // 2
1110.inst 0x5e140040 //sha1c v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001111 add v20.4s,v16.4s,v4.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001112.inst 0x5e281885 //sha1su1 v5.16b,v4.16b
1113.inst 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1114.inst 0x5e280802 //sha1h v2.16b,v0.16b // 3
1115.inst 0x5e150060 //sha1c v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001116 add v21.4s,v17.4s,v5.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001117.inst 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1118.inst 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1119.inst 0x5e280803 //sha1h v3.16b,v0.16b // 4
1120.inst 0x5e140040 //sha1c v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001121 add v20.4s,v17.4s,v6.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001122.inst 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1123.inst 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1124.inst 0x5e280802 //sha1h v2.16b,v0.16b // 5
1125.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001126 add v21.4s,v17.4s,v7.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001127.inst 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1128.inst 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1129.inst 0x5e280803 //sha1h v3.16b,v0.16b // 6
1130.inst 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001131 add v20.4s,v17.4s,v4.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001132.inst 0x5e281885 //sha1su1 v5.16b,v4.16b
1133.inst 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1134.inst 0x5e280802 //sha1h v2.16b,v0.16b // 7
1135.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001136 add v21.4s,v17.4s,v5.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001137.inst 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1138.inst 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1139.inst 0x5e280803 //sha1h v3.16b,v0.16b // 8
1140.inst 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001141 add v20.4s,v18.4s,v6.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001142.inst 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1143.inst 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1144.inst 0x5e280802 //sha1h v2.16b,v0.16b // 9
1145.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001146 add v21.4s,v18.4s,v7.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001147.inst 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1148.inst 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1149.inst 0x5e280803 //sha1h v3.16b,v0.16b // 10
1150.inst 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001151 add v20.4s,v18.4s,v4.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001152.inst 0x5e281885 //sha1su1 v5.16b,v4.16b
1153.inst 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1154.inst 0x5e280802 //sha1h v2.16b,v0.16b // 11
1155.inst 0x5e152060 //sha1m v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001156 add v21.4s,v18.4s,v5.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001157.inst 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1158.inst 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1159.inst 0x5e280803 //sha1h v3.16b,v0.16b // 12
1160.inst 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001161 add v20.4s,v18.4s,v6.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001162.inst 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1163.inst 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1164.inst 0x5e280802 //sha1h v2.16b,v0.16b // 13
1165.inst 0x5e152060 //sha1m v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001166 add v21.4s,v19.4s,v7.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001167.inst 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1168.inst 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1169.inst 0x5e280803 //sha1h v3.16b,v0.16b // 14
1170.inst 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001171 add v20.4s,v19.4s,v4.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001172.inst 0x5e281885 //sha1su1 v5.16b,v4.16b
1173.inst 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1174.inst 0x5e280802 //sha1h v2.16b,v0.16b // 15
1175.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001176 add v21.4s,v19.4s,v5.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001177.inst 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1178.inst 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1179.inst 0x5e280803 //sha1h v3.16b,v0.16b // 16
1180.inst 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001181 add v20.4s,v19.4s,v6.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001182.inst 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1183.inst 0x5e280802 //sha1h v2.16b,v0.16b // 17
1184.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001185 add v21.4s,v19.4s,v7.4s
1186
Adam Langleye9ada862015-05-11 17:20:37 -07001187.inst 0x5e280803 //sha1h v3.16b,v0.16b // 18
1188.inst 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001189
Adam Langleye9ada862015-05-11 17:20:37 -07001190.inst 0x5e280802 //sha1h v2.16b,v0.16b // 19
1191.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001192
1193 add v1.4s,v1.4s,v2.4s
1194 add v0.4s,v0.4s,v22.4s
1195
1196 cbnz x2,.Loop_hw
1197
1198 st1 {v0.4s},[x0],#16
1199 st1 {v1.s}[0],[x0]
1200
1201 ldr x29,[sp],#16
1202 ret
1203.size sha1_block_armv8,.-sha1_block_armv8
1204.align 6
1205.Lconst:
1206.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 //K_00_19
1207.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 //K_20_39
1208.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc //K_40_59
1209.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 //K_60_79
1210.LOPENSSL_armcap_P:
1211.quad OPENSSL_armcap_P-.
Adam Langleye9ada862015-05-11 17:20:37 -07001212.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
1213.align 2
Adam Langleyd9e397b2015-01-22 14:27:53 -08001214.align 2
1215.comm OPENSSL_armcap_P,4,4
David Benjamin4969cc92016-04-22 15:02:23 -04001216#endif