blob: 8a16feab931eccf7919093f213743f3360dbd10d [file] [log] [blame]
Robert Sloanc9abfe42018-11-26 12:19:07 -08001// This file is generated from a similarly-named Perl script in the BoringSSL
2// source tree. Do not edit by hand.
3
Robert Sloan726e9d12018-09-11 11:45:04 -07004#if defined(__has_feature)
5#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
6#define OPENSSL_NO_ASM
7#endif
8#endif
9
10#if !defined(OPENSSL_NO_ASM)
Kenny Rootb8494592015-09-25 02:29:14 +000011#if defined(__aarch64__)
Robert Sloan726e9d12018-09-11 11:45:04 -070012#if defined(BORINGSSL_PREFIX)
13#include <boringssl_prefix_symbols_asm.h>
14#endif
Kenny Rootb8494592015-09-25 02:29:14 +000015#include <openssl/arm_arch.h>
Adam Langleyd9e397b2015-01-22 14:27:53 -080016
17.text
18
Adam Langleye9ada862015-05-11 17:20:37 -070019
Adam Langleyd9e397b2015-01-22 14:27:53 -080020.globl sha1_block_data_order
David Benjamin4969cc92016-04-22 15:02:23 -040021.hidden sha1_block_data_order
Adam Langleyd9e397b2015-01-22 14:27:53 -080022.type sha1_block_data_order,%function
23.align 6
24sha1_block_data_order:
Robert Sloanc9abfe42018-11-26 12:19:07 -080025 adrp x16,OPENSSL_armcap_P
26 add x16,x16,:lo12:OPENSSL_armcap_P
Adam Langleyd9e397b2015-01-22 14:27:53 -080027 ldr w16,[x16]
28 tst w16,#ARMV8_SHA1
29 b.ne .Lv8_entry
30
31 stp x29,x30,[sp,#-96]!
32 add x29,sp,#0
33 stp x19,x20,[sp,#16]
34 stp x21,x22,[sp,#32]
35 stp x23,x24,[sp,#48]
36 stp x25,x26,[sp,#64]
37 stp x27,x28,[sp,#80]
38
39 ldp w20,w21,[x0]
40 ldp w22,w23,[x0,#8]
41 ldr w24,[x0,#16]
42
43.Loop:
44 ldr x3,[x1],#64
45 movz w28,#0x7999
46 sub x2,x2,#1
47 movk w28,#0x5a82,lsl#16
48#ifdef __ARMEB__
49 ror x3,x3,#32
50#else
51 rev32 x3,x3
52#endif
53 add w24,w24,w28 // warm it up
54 add w24,w24,w3
55 lsr x4,x3,#32
56 ldr x5,[x1,#-56]
57 bic w25,w23,w21
58 and w26,w22,w21
59 ror w27,w20,#27
60 add w23,w23,w28 // future e+=K
61 orr w25,w25,w26
62 add w24,w24,w27 // e+=rot(a,5)
63 ror w21,w21,#2
64 add w23,w23,w4 // future e+=X[i]
65 add w24,w24,w25 // e+=F(b,c,d)
66#ifdef __ARMEB__
67 ror x5,x5,#32
68#else
69 rev32 x5,x5
70#endif
71 bic w25,w22,w20
72 and w26,w21,w20
73 ror w27,w24,#27
74 add w22,w22,w28 // future e+=K
75 orr w25,w25,w26
76 add w23,w23,w27 // e+=rot(a,5)
77 ror w20,w20,#2
78 add w22,w22,w5 // future e+=X[i]
79 add w23,w23,w25 // e+=F(b,c,d)
80 lsr x6,x5,#32
81 ldr x7,[x1,#-48]
82 bic w25,w21,w24
83 and w26,w20,w24
84 ror w27,w23,#27
85 add w21,w21,w28 // future e+=K
86 orr w25,w25,w26
87 add w22,w22,w27 // e+=rot(a,5)
88 ror w24,w24,#2
89 add w21,w21,w6 // future e+=X[i]
90 add w22,w22,w25 // e+=F(b,c,d)
91#ifdef __ARMEB__
92 ror x7,x7,#32
93#else
94 rev32 x7,x7
95#endif
96 bic w25,w20,w23
97 and w26,w24,w23
98 ror w27,w22,#27
99 add w20,w20,w28 // future e+=K
100 orr w25,w25,w26
101 add w21,w21,w27 // e+=rot(a,5)
102 ror w23,w23,#2
103 add w20,w20,w7 // future e+=X[i]
104 add w21,w21,w25 // e+=F(b,c,d)
105 lsr x8,x7,#32
106 ldr x9,[x1,#-40]
107 bic w25,w24,w22
108 and w26,w23,w22
109 ror w27,w21,#27
110 add w24,w24,w28 // future e+=K
111 orr w25,w25,w26
112 add w20,w20,w27 // e+=rot(a,5)
113 ror w22,w22,#2
114 add w24,w24,w8 // future e+=X[i]
115 add w20,w20,w25 // e+=F(b,c,d)
116#ifdef __ARMEB__
117 ror x9,x9,#32
118#else
119 rev32 x9,x9
120#endif
121 bic w25,w23,w21
122 and w26,w22,w21
123 ror w27,w20,#27
124 add w23,w23,w28 // future e+=K
125 orr w25,w25,w26
126 add w24,w24,w27 // e+=rot(a,5)
127 ror w21,w21,#2
128 add w23,w23,w9 // future e+=X[i]
129 add w24,w24,w25 // e+=F(b,c,d)
130 lsr x10,x9,#32
131 ldr x11,[x1,#-32]
132 bic w25,w22,w20
133 and w26,w21,w20
134 ror w27,w24,#27
135 add w22,w22,w28 // future e+=K
136 orr w25,w25,w26
137 add w23,w23,w27 // e+=rot(a,5)
138 ror w20,w20,#2
139 add w22,w22,w10 // future e+=X[i]
140 add w23,w23,w25 // e+=F(b,c,d)
141#ifdef __ARMEB__
142 ror x11,x11,#32
143#else
144 rev32 x11,x11
145#endif
146 bic w25,w21,w24
147 and w26,w20,w24
148 ror w27,w23,#27
149 add w21,w21,w28 // future e+=K
150 orr w25,w25,w26
151 add w22,w22,w27 // e+=rot(a,5)
152 ror w24,w24,#2
153 add w21,w21,w11 // future e+=X[i]
154 add w22,w22,w25 // e+=F(b,c,d)
155 lsr x12,x11,#32
156 ldr x13,[x1,#-24]
157 bic w25,w20,w23
158 and w26,w24,w23
159 ror w27,w22,#27
160 add w20,w20,w28 // future e+=K
161 orr w25,w25,w26
162 add w21,w21,w27 // e+=rot(a,5)
163 ror w23,w23,#2
164 add w20,w20,w12 // future e+=X[i]
165 add w21,w21,w25 // e+=F(b,c,d)
166#ifdef __ARMEB__
167 ror x13,x13,#32
168#else
169 rev32 x13,x13
170#endif
171 bic w25,w24,w22
172 and w26,w23,w22
173 ror w27,w21,#27
174 add w24,w24,w28 // future e+=K
175 orr w25,w25,w26
176 add w20,w20,w27 // e+=rot(a,5)
177 ror w22,w22,#2
178 add w24,w24,w13 // future e+=X[i]
179 add w20,w20,w25 // e+=F(b,c,d)
180 lsr x14,x13,#32
181 ldr x15,[x1,#-16]
182 bic w25,w23,w21
183 and w26,w22,w21
184 ror w27,w20,#27
185 add w23,w23,w28 // future e+=K
186 orr w25,w25,w26
187 add w24,w24,w27 // e+=rot(a,5)
188 ror w21,w21,#2
189 add w23,w23,w14 // future e+=X[i]
190 add w24,w24,w25 // e+=F(b,c,d)
191#ifdef __ARMEB__
192 ror x15,x15,#32
193#else
194 rev32 x15,x15
195#endif
196 bic w25,w22,w20
197 and w26,w21,w20
198 ror w27,w24,#27
199 add w22,w22,w28 // future e+=K
200 orr w25,w25,w26
201 add w23,w23,w27 // e+=rot(a,5)
202 ror w20,w20,#2
203 add w22,w22,w15 // future e+=X[i]
204 add w23,w23,w25 // e+=F(b,c,d)
205 lsr x16,x15,#32
206 ldr x17,[x1,#-8]
207 bic w25,w21,w24
208 and w26,w20,w24
209 ror w27,w23,#27
210 add w21,w21,w28 // future e+=K
211 orr w25,w25,w26
212 add w22,w22,w27 // e+=rot(a,5)
213 ror w24,w24,#2
214 add w21,w21,w16 // future e+=X[i]
215 add w22,w22,w25 // e+=F(b,c,d)
216#ifdef __ARMEB__
217 ror x17,x17,#32
218#else
219 rev32 x17,x17
220#endif
221 bic w25,w20,w23
222 and w26,w24,w23
223 ror w27,w22,#27
224 add w20,w20,w28 // future e+=K
225 orr w25,w25,w26
226 add w21,w21,w27 // e+=rot(a,5)
227 ror w23,w23,#2
228 add w20,w20,w17 // future e+=X[i]
229 add w21,w21,w25 // e+=F(b,c,d)
230 lsr x19,x17,#32
Adam Langleye9ada862015-05-11 17:20:37 -0700231 eor w3,w3,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800232 bic w25,w24,w22
233 and w26,w23,w22
234 ror w27,w21,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700235 eor w3,w3,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800236 add w24,w24,w28 // future e+=K
237 orr w25,w25,w26
238 add w20,w20,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700239 eor w3,w3,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800240 ror w22,w22,#2
241 add w24,w24,w19 // future e+=X[i]
242 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700243 ror w3,w3,#31
244 eor w4,w4,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800245 bic w25,w23,w21
246 and w26,w22,w21
247 ror w27,w20,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700248 eor w4,w4,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800249 add w23,w23,w28 // future e+=K
250 orr w25,w25,w26
251 add w24,w24,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700252 eor w4,w4,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800253 ror w21,w21,#2
254 add w23,w23,w3 // future e+=X[i]
255 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700256 ror w4,w4,#31
257 eor w5,w5,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800258 bic w25,w22,w20
259 and w26,w21,w20
260 ror w27,w24,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700261 eor w5,w5,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800262 add w22,w22,w28 // future e+=K
263 orr w25,w25,w26
264 add w23,w23,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700265 eor w5,w5,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800266 ror w20,w20,#2
267 add w22,w22,w4 // future e+=X[i]
268 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700269 ror w5,w5,#31
270 eor w6,w6,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800271 bic w25,w21,w24
272 and w26,w20,w24
273 ror w27,w23,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700274 eor w6,w6,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800275 add w21,w21,w28 // future e+=K
276 orr w25,w25,w26
277 add w22,w22,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700278 eor w6,w6,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800279 ror w24,w24,#2
280 add w21,w21,w5 // future e+=X[i]
281 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700282 ror w6,w6,#31
283 eor w7,w7,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800284 bic w25,w20,w23
285 and w26,w24,w23
286 ror w27,w22,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700287 eor w7,w7,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800288 add w20,w20,w28 // future e+=K
289 orr w25,w25,w26
290 add w21,w21,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700291 eor w7,w7,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800292 ror w23,w23,#2
293 add w20,w20,w6 // future e+=X[i]
294 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700295 ror w7,w7,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800296 movz w28,#0xeba1
297 movk w28,#0x6ed9,lsl#16
Adam Langleye9ada862015-05-11 17:20:37 -0700298 eor w8,w8,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800299 bic w25,w24,w22
300 and w26,w23,w22
301 ror w27,w21,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700302 eor w8,w8,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800303 add w24,w24,w28 // future e+=K
304 orr w25,w25,w26
305 add w20,w20,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700306 eor w8,w8,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800307 ror w22,w22,#2
308 add w24,w24,w7 // future e+=X[i]
309 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700310 ror w8,w8,#31
311 eor w9,w9,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800312 eor w25,w23,w21
313 ror w27,w20,#27
314 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700315 eor w9,w9,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800316 eor w25,w25,w22
317 add w24,w24,w27 // e+=rot(a,5)
318 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700319 eor w9,w9,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800320 add w23,w23,w8 // future e+=X[i]
321 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700322 ror w9,w9,#31
323 eor w10,w10,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800324 eor w25,w22,w20
325 ror w27,w24,#27
326 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700327 eor w10,w10,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800328 eor w25,w25,w21
329 add w23,w23,w27 // e+=rot(a,5)
330 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700331 eor w10,w10,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800332 add w22,w22,w9 // future e+=X[i]
333 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700334 ror w10,w10,#31
335 eor w11,w11,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800336 eor w25,w21,w24
337 ror w27,w23,#27
338 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700339 eor w11,w11,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800340 eor w25,w25,w20
341 add w22,w22,w27 // e+=rot(a,5)
342 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700343 eor w11,w11,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800344 add w21,w21,w10 // future e+=X[i]
345 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700346 ror w11,w11,#31
347 eor w12,w12,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800348 eor w25,w20,w23
349 ror w27,w22,#27
350 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700351 eor w12,w12,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800352 eor w25,w25,w24
353 add w21,w21,w27 // e+=rot(a,5)
354 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700355 eor w12,w12,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800356 add w20,w20,w11 // future e+=X[i]
357 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700358 ror w12,w12,#31
359 eor w13,w13,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800360 eor w25,w24,w22
361 ror w27,w21,#27
362 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700363 eor w13,w13,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800364 eor w25,w25,w23
365 add w20,w20,w27 // e+=rot(a,5)
366 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700367 eor w13,w13,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800368 add w24,w24,w12 // future e+=X[i]
369 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700370 ror w13,w13,#31
371 eor w14,w14,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800372 eor w25,w23,w21
373 ror w27,w20,#27
374 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700375 eor w14,w14,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800376 eor w25,w25,w22
377 add w24,w24,w27 // e+=rot(a,5)
378 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700379 eor w14,w14,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800380 add w23,w23,w13 // future e+=X[i]
381 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700382 ror w14,w14,#31
383 eor w15,w15,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800384 eor w25,w22,w20
385 ror w27,w24,#27
386 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700387 eor w15,w15,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800388 eor w25,w25,w21
389 add w23,w23,w27 // e+=rot(a,5)
390 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700391 eor w15,w15,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800392 add w22,w22,w14 // future e+=X[i]
393 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700394 ror w15,w15,#31
395 eor w16,w16,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800396 eor w25,w21,w24
397 ror w27,w23,#27
398 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700399 eor w16,w16,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800400 eor w25,w25,w20
401 add w22,w22,w27 // e+=rot(a,5)
402 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700403 eor w16,w16,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800404 add w21,w21,w15 // future e+=X[i]
405 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700406 ror w16,w16,#31
407 eor w17,w17,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800408 eor w25,w20,w23
409 ror w27,w22,#27
410 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700411 eor w17,w17,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800412 eor w25,w25,w24
413 add w21,w21,w27 // e+=rot(a,5)
414 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700415 eor w17,w17,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800416 add w20,w20,w16 // future e+=X[i]
417 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700418 ror w17,w17,#31
419 eor w19,w19,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800420 eor w25,w24,w22
421 ror w27,w21,#27
422 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700423 eor w19,w19,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800424 eor w25,w25,w23
425 add w20,w20,w27 // e+=rot(a,5)
426 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700427 eor w19,w19,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800428 add w24,w24,w17 // future e+=X[i]
429 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700430 ror w19,w19,#31
431 eor w3,w3,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800432 eor w25,w23,w21
433 ror w27,w20,#27
434 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700435 eor w3,w3,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800436 eor w25,w25,w22
437 add w24,w24,w27 // e+=rot(a,5)
438 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700439 eor w3,w3,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800440 add w23,w23,w19 // future e+=X[i]
441 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700442 ror w3,w3,#31
443 eor w4,w4,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800444 eor w25,w22,w20
445 ror w27,w24,#27
446 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700447 eor w4,w4,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800448 eor w25,w25,w21
449 add w23,w23,w27 // e+=rot(a,5)
450 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700451 eor w4,w4,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800452 add w22,w22,w3 // future e+=X[i]
453 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700454 ror w4,w4,#31
455 eor w5,w5,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800456 eor w25,w21,w24
457 ror w27,w23,#27
458 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700459 eor w5,w5,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800460 eor w25,w25,w20
461 add w22,w22,w27 // e+=rot(a,5)
462 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700463 eor w5,w5,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800464 add w21,w21,w4 // future e+=X[i]
465 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700466 ror w5,w5,#31
467 eor w6,w6,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800468 eor w25,w20,w23
469 ror w27,w22,#27
470 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700471 eor w6,w6,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800472 eor w25,w25,w24
473 add w21,w21,w27 // e+=rot(a,5)
474 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700475 eor w6,w6,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800476 add w20,w20,w5 // future e+=X[i]
477 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700478 ror w6,w6,#31
479 eor w7,w7,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800480 eor w25,w24,w22
481 ror w27,w21,#27
482 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700483 eor w7,w7,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800484 eor w25,w25,w23
485 add w20,w20,w27 // e+=rot(a,5)
486 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700487 eor w7,w7,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800488 add w24,w24,w6 // future e+=X[i]
489 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700490 ror w7,w7,#31
491 eor w8,w8,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800492 eor w25,w23,w21
493 ror w27,w20,#27
494 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700495 eor w8,w8,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800496 eor w25,w25,w22
497 add w24,w24,w27 // e+=rot(a,5)
498 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700499 eor w8,w8,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800500 add w23,w23,w7 // future e+=X[i]
501 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700502 ror w8,w8,#31
503 eor w9,w9,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800504 eor w25,w22,w20
505 ror w27,w24,#27
506 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700507 eor w9,w9,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800508 eor w25,w25,w21
509 add w23,w23,w27 // e+=rot(a,5)
510 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700511 eor w9,w9,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800512 add w22,w22,w8 // future e+=X[i]
513 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700514 ror w9,w9,#31
515 eor w10,w10,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800516 eor w25,w21,w24
517 ror w27,w23,#27
518 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700519 eor w10,w10,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800520 eor w25,w25,w20
521 add w22,w22,w27 // e+=rot(a,5)
522 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700523 eor w10,w10,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800524 add w21,w21,w9 // future e+=X[i]
525 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700526 ror w10,w10,#31
527 eor w11,w11,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800528 eor w25,w20,w23
529 ror w27,w22,#27
530 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700531 eor w11,w11,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800532 eor w25,w25,w24
533 add w21,w21,w27 // e+=rot(a,5)
534 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700535 eor w11,w11,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800536 add w20,w20,w10 // future e+=X[i]
537 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700538 ror w11,w11,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800539 movz w28,#0xbcdc
540 movk w28,#0x8f1b,lsl#16
Adam Langleye9ada862015-05-11 17:20:37 -0700541 eor w12,w12,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800542 eor w25,w24,w22
543 ror w27,w21,#27
544 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700545 eor w12,w12,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800546 eor w25,w25,w23
547 add w20,w20,w27 // e+=rot(a,5)
548 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700549 eor w12,w12,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800550 add w24,w24,w11 // future e+=X[i]
551 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700552 ror w12,w12,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800553 orr w25,w21,w22
554 and w26,w21,w22
Adam Langleye9ada862015-05-11 17:20:37 -0700555 eor w13,w13,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800556 ror w27,w20,#27
557 and w25,w25,w23
558 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700559 eor w13,w13,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800560 add w24,w24,w27 // e+=rot(a,5)
561 orr w25,w25,w26
562 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700563 eor w13,w13,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800564 add w23,w23,w12 // future e+=X[i]
565 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700566 ror w13,w13,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800567 orr w25,w20,w21
568 and w26,w20,w21
Adam Langleye9ada862015-05-11 17:20:37 -0700569 eor w14,w14,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800570 ror w27,w24,#27
571 and w25,w25,w22
572 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700573 eor w14,w14,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800574 add w23,w23,w27 // e+=rot(a,5)
575 orr w25,w25,w26
576 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700577 eor w14,w14,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800578 add w22,w22,w13 // future e+=X[i]
579 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700580 ror w14,w14,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800581 orr w25,w24,w20
582 and w26,w24,w20
Adam Langleye9ada862015-05-11 17:20:37 -0700583 eor w15,w15,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800584 ror w27,w23,#27
585 and w25,w25,w21
586 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700587 eor w15,w15,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800588 add w22,w22,w27 // e+=rot(a,5)
589 orr w25,w25,w26
590 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700591 eor w15,w15,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800592 add w21,w21,w14 // future e+=X[i]
593 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700594 ror w15,w15,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800595 orr w25,w23,w24
596 and w26,w23,w24
Adam Langleye9ada862015-05-11 17:20:37 -0700597 eor w16,w16,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800598 ror w27,w22,#27
599 and w25,w25,w20
600 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700601 eor w16,w16,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800602 add w21,w21,w27 // e+=rot(a,5)
603 orr w25,w25,w26
604 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700605 eor w16,w16,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800606 add w20,w20,w15 // future e+=X[i]
607 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700608 ror w16,w16,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800609 orr w25,w22,w23
610 and w26,w22,w23
Adam Langleye9ada862015-05-11 17:20:37 -0700611 eor w17,w17,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800612 ror w27,w21,#27
613 and w25,w25,w24
614 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700615 eor w17,w17,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800616 add w20,w20,w27 // e+=rot(a,5)
617 orr w25,w25,w26
618 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700619 eor w17,w17,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800620 add w24,w24,w16 // future e+=X[i]
621 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700622 ror w17,w17,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800623 orr w25,w21,w22
624 and w26,w21,w22
Adam Langleye9ada862015-05-11 17:20:37 -0700625 eor w19,w19,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800626 ror w27,w20,#27
627 and w25,w25,w23
628 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700629 eor w19,w19,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800630 add w24,w24,w27 // e+=rot(a,5)
631 orr w25,w25,w26
632 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700633 eor w19,w19,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800634 add w23,w23,w17 // future e+=X[i]
635 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700636 ror w19,w19,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800637 orr w25,w20,w21
638 and w26,w20,w21
Adam Langleye9ada862015-05-11 17:20:37 -0700639 eor w3,w3,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800640 ror w27,w24,#27
641 and w25,w25,w22
642 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700643 eor w3,w3,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800644 add w23,w23,w27 // e+=rot(a,5)
645 orr w25,w25,w26
646 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700647 eor w3,w3,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800648 add w22,w22,w19 // future e+=X[i]
649 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700650 ror w3,w3,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800651 orr w25,w24,w20
652 and w26,w24,w20
Adam Langleye9ada862015-05-11 17:20:37 -0700653 eor w4,w4,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800654 ror w27,w23,#27
655 and w25,w25,w21
656 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700657 eor w4,w4,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800658 add w22,w22,w27 // e+=rot(a,5)
659 orr w25,w25,w26
660 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700661 eor w4,w4,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800662 add w21,w21,w3 // future e+=X[i]
663 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700664 ror w4,w4,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800665 orr w25,w23,w24
666 and w26,w23,w24
Adam Langleye9ada862015-05-11 17:20:37 -0700667 eor w5,w5,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800668 ror w27,w22,#27
669 and w25,w25,w20
670 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700671 eor w5,w5,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800672 add w21,w21,w27 // e+=rot(a,5)
673 orr w25,w25,w26
674 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700675 eor w5,w5,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800676 add w20,w20,w4 // future e+=X[i]
677 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700678 ror w5,w5,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800679 orr w25,w22,w23
680 and w26,w22,w23
Adam Langleye9ada862015-05-11 17:20:37 -0700681 eor w6,w6,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800682 ror w27,w21,#27
683 and w25,w25,w24
684 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700685 eor w6,w6,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800686 add w20,w20,w27 // e+=rot(a,5)
687 orr w25,w25,w26
688 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700689 eor w6,w6,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800690 add w24,w24,w5 // future e+=X[i]
691 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700692 ror w6,w6,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800693 orr w25,w21,w22
694 and w26,w21,w22
Adam Langleye9ada862015-05-11 17:20:37 -0700695 eor w7,w7,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800696 ror w27,w20,#27
697 and w25,w25,w23
698 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700699 eor w7,w7,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800700 add w24,w24,w27 // e+=rot(a,5)
701 orr w25,w25,w26
702 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700703 eor w7,w7,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800704 add w23,w23,w6 // future e+=X[i]
705 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700706 ror w7,w7,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800707 orr w25,w20,w21
708 and w26,w20,w21
Adam Langleye9ada862015-05-11 17:20:37 -0700709 eor w8,w8,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800710 ror w27,w24,#27
711 and w25,w25,w22
712 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700713 eor w8,w8,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800714 add w23,w23,w27 // e+=rot(a,5)
715 orr w25,w25,w26
716 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700717 eor w8,w8,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800718 add w22,w22,w7 // future e+=X[i]
719 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700720 ror w8,w8,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800721 orr w25,w24,w20
722 and w26,w24,w20
Adam Langleye9ada862015-05-11 17:20:37 -0700723 eor w9,w9,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800724 ror w27,w23,#27
725 and w25,w25,w21
726 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700727 eor w9,w9,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800728 add w22,w22,w27 // e+=rot(a,5)
729 orr w25,w25,w26
730 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700731 eor w9,w9,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800732 add w21,w21,w8 // future e+=X[i]
733 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700734 ror w9,w9,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800735 orr w25,w23,w24
736 and w26,w23,w24
Adam Langleye9ada862015-05-11 17:20:37 -0700737 eor w10,w10,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800738 ror w27,w22,#27
739 and w25,w25,w20
740 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700741 eor w10,w10,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800742 add w21,w21,w27 // e+=rot(a,5)
743 orr w25,w25,w26
744 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700745 eor w10,w10,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800746 add w20,w20,w9 // future e+=X[i]
747 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700748 ror w10,w10,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800749 orr w25,w22,w23
750 and w26,w22,w23
Adam Langleye9ada862015-05-11 17:20:37 -0700751 eor w11,w11,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800752 ror w27,w21,#27
753 and w25,w25,w24
754 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700755 eor w11,w11,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800756 add w20,w20,w27 // e+=rot(a,5)
757 orr w25,w25,w26
758 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700759 eor w11,w11,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800760 add w24,w24,w10 // future e+=X[i]
761 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700762 ror w11,w11,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800763 orr w25,w21,w22
764 and w26,w21,w22
Adam Langleye9ada862015-05-11 17:20:37 -0700765 eor w12,w12,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800766 ror w27,w20,#27
767 and w25,w25,w23
768 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700769 eor w12,w12,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800770 add w24,w24,w27 // e+=rot(a,5)
771 orr w25,w25,w26
772 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700773 eor w12,w12,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800774 add w23,w23,w11 // future e+=X[i]
775 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700776 ror w12,w12,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800777 orr w25,w20,w21
778 and w26,w20,w21
Adam Langleye9ada862015-05-11 17:20:37 -0700779 eor w13,w13,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800780 ror w27,w24,#27
781 and w25,w25,w22
782 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700783 eor w13,w13,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800784 add w23,w23,w27 // e+=rot(a,5)
785 orr w25,w25,w26
786 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700787 eor w13,w13,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800788 add w22,w22,w12 // future e+=X[i]
789 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700790 ror w13,w13,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800791 orr w25,w24,w20
792 and w26,w24,w20
Adam Langleye9ada862015-05-11 17:20:37 -0700793 eor w14,w14,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800794 ror w27,w23,#27
795 and w25,w25,w21
796 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700797 eor w14,w14,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800798 add w22,w22,w27 // e+=rot(a,5)
799 orr w25,w25,w26
800 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700801 eor w14,w14,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800802 add w21,w21,w13 // future e+=X[i]
803 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700804 ror w14,w14,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800805 orr w25,w23,w24
806 and w26,w23,w24
Adam Langleye9ada862015-05-11 17:20:37 -0700807 eor w15,w15,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800808 ror w27,w22,#27
809 and w25,w25,w20
810 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700811 eor w15,w15,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800812 add w21,w21,w27 // e+=rot(a,5)
813 orr w25,w25,w26
814 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700815 eor w15,w15,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800816 add w20,w20,w14 // future e+=X[i]
817 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700818 ror w15,w15,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800819 movz w28,#0xc1d6
820 movk w28,#0xca62,lsl#16
821 orr w25,w22,w23
822 and w26,w22,w23
Adam Langleye9ada862015-05-11 17:20:37 -0700823 eor w16,w16,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800824 ror w27,w21,#27
825 and w25,w25,w24
826 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700827 eor w16,w16,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800828 add w20,w20,w27 // e+=rot(a,5)
829 orr w25,w25,w26
830 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700831 eor w16,w16,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800832 add w24,w24,w15 // future e+=X[i]
833 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700834 ror w16,w16,#31
835 eor w17,w17,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800836 eor w25,w23,w21
837 ror w27,w20,#27
838 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700839 eor w17,w17,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800840 eor w25,w25,w22
841 add w24,w24,w27 // e+=rot(a,5)
842 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700843 eor w17,w17,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800844 add w23,w23,w16 // future e+=X[i]
845 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700846 ror w17,w17,#31
847 eor w19,w19,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800848 eor w25,w22,w20
849 ror w27,w24,#27
850 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700851 eor w19,w19,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800852 eor w25,w25,w21
853 add w23,w23,w27 // e+=rot(a,5)
854 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700855 eor w19,w19,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800856 add w22,w22,w17 // future e+=X[i]
857 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700858 ror w19,w19,#31
859 eor w3,w3,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800860 eor w25,w21,w24
861 ror w27,w23,#27
862 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700863 eor w3,w3,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800864 eor w25,w25,w20
865 add w22,w22,w27 // e+=rot(a,5)
866 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700867 eor w3,w3,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800868 add w21,w21,w19 // future e+=X[i]
869 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700870 ror w3,w3,#31
871 eor w4,w4,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800872 eor w25,w20,w23
873 ror w27,w22,#27
874 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700875 eor w4,w4,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800876 eor w25,w25,w24
877 add w21,w21,w27 // e+=rot(a,5)
878 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700879 eor w4,w4,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800880 add w20,w20,w3 // future e+=X[i]
881 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700882 ror w4,w4,#31
883 eor w5,w5,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800884 eor w25,w24,w22
885 ror w27,w21,#27
886 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700887 eor w5,w5,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800888 eor w25,w25,w23
889 add w20,w20,w27 // e+=rot(a,5)
890 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700891 eor w5,w5,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800892 add w24,w24,w4 // future e+=X[i]
893 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700894 ror w5,w5,#31
895 eor w6,w6,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800896 eor w25,w23,w21
897 ror w27,w20,#27
898 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700899 eor w6,w6,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800900 eor w25,w25,w22
901 add w24,w24,w27 // e+=rot(a,5)
902 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700903 eor w6,w6,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800904 add w23,w23,w5 // future e+=X[i]
905 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700906 ror w6,w6,#31
907 eor w7,w7,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800908 eor w25,w22,w20
909 ror w27,w24,#27
910 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700911 eor w7,w7,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800912 eor w25,w25,w21
913 add w23,w23,w27 // e+=rot(a,5)
914 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700915 eor w7,w7,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800916 add w22,w22,w6 // future e+=X[i]
917 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700918 ror w7,w7,#31
919 eor w8,w8,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800920 eor w25,w21,w24
921 ror w27,w23,#27
922 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700923 eor w8,w8,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800924 eor w25,w25,w20
925 add w22,w22,w27 // e+=rot(a,5)
926 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700927 eor w8,w8,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800928 add w21,w21,w7 // future e+=X[i]
929 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700930 ror w8,w8,#31
931 eor w9,w9,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800932 eor w25,w20,w23
933 ror w27,w22,#27
934 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700935 eor w9,w9,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800936 eor w25,w25,w24
937 add w21,w21,w27 // e+=rot(a,5)
938 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700939 eor w9,w9,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800940 add w20,w20,w8 // future e+=X[i]
941 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700942 ror w9,w9,#31
943 eor w10,w10,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800944 eor w25,w24,w22
945 ror w27,w21,#27
946 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700947 eor w10,w10,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800948 eor w25,w25,w23
949 add w20,w20,w27 // e+=rot(a,5)
950 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700951 eor w10,w10,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800952 add w24,w24,w9 // future e+=X[i]
953 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700954 ror w10,w10,#31
955 eor w11,w11,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800956 eor w25,w23,w21
957 ror w27,w20,#27
958 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700959 eor w11,w11,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800960 eor w25,w25,w22
961 add w24,w24,w27 // e+=rot(a,5)
962 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700963 eor w11,w11,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800964 add w23,w23,w10 // future e+=X[i]
965 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700966 ror w11,w11,#31
967 eor w12,w12,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800968 eor w25,w22,w20
969 ror w27,w24,#27
970 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700971 eor w12,w12,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800972 eor w25,w25,w21
973 add w23,w23,w27 // e+=rot(a,5)
974 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700975 eor w12,w12,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800976 add w22,w22,w11 // future e+=X[i]
977 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700978 ror w12,w12,#31
979 eor w13,w13,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800980 eor w25,w21,w24
981 ror w27,w23,#27
982 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700983 eor w13,w13,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800984 eor w25,w25,w20
985 add w22,w22,w27 // e+=rot(a,5)
986 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700987 eor w13,w13,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800988 add w21,w21,w12 // future e+=X[i]
989 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700990 ror w13,w13,#31
991 eor w14,w14,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800992 eor w25,w20,w23
993 ror w27,w22,#27
994 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700995 eor w14,w14,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800996 eor w25,w25,w24
997 add w21,w21,w27 // e+=rot(a,5)
998 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700999 eor w14,w14,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -08001000 add w20,w20,w13 // future e+=X[i]
1001 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -07001002 ror w14,w14,#31
1003 eor w15,w15,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -08001004 eor w25,w24,w22
1005 ror w27,w21,#27
1006 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -07001007 eor w15,w15,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -08001008 eor w25,w25,w23
1009 add w20,w20,w27 // e+=rot(a,5)
1010 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -07001011 eor w15,w15,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -08001012 add w24,w24,w14 // future e+=X[i]
1013 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -07001014 ror w15,w15,#31
1015 eor w16,w16,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -08001016 eor w25,w23,w21
1017 ror w27,w20,#27
1018 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -07001019 eor w16,w16,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -08001020 eor w25,w25,w22
1021 add w24,w24,w27 // e+=rot(a,5)
1022 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -07001023 eor w16,w16,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001024 add w23,w23,w15 // future e+=X[i]
1025 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -07001026 ror w16,w16,#31
1027 eor w17,w17,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -08001028 eor w25,w22,w20
1029 ror w27,w24,#27
1030 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -07001031 eor w17,w17,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -08001032 eor w25,w25,w21
1033 add w23,w23,w27 // e+=rot(a,5)
1034 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -07001035 eor w17,w17,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -08001036 add w22,w22,w16 // future e+=X[i]
1037 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -07001038 ror w17,w17,#31
1039 eor w19,w19,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -08001040 eor w25,w21,w24
1041 ror w27,w23,#27
1042 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -07001043 eor w19,w19,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -08001044 eor w25,w25,w20
1045 add w22,w22,w27 // e+=rot(a,5)
1046 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -07001047 eor w19,w19,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -08001048 add w21,w21,w17 // future e+=X[i]
1049 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -07001050 ror w19,w19,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -08001051 ldp w4,w5,[x0]
1052 eor w25,w20,w23
1053 ror w27,w22,#27
1054 add w20,w20,w28 // future e+=K
1055 eor w25,w25,w24
1056 add w21,w21,w27 // e+=rot(a,5)
1057 ror w23,w23,#2
1058 add w20,w20,w19 // future e+=X[i]
1059 add w21,w21,w25 // e+=F(b,c,d)
1060 ldp w6,w7,[x0,#8]
1061 eor w25,w24,w22
1062 ror w27,w21,#27
1063 eor w25,w25,w23
1064 add w20,w20,w27 // e+=rot(a,5)
1065 ror w22,w22,#2
1066 ldr w8,[x0,#16]
1067 add w20,w20,w25 // e+=F(b,c,d)
1068 add w21,w21,w5
1069 add w22,w22,w6
1070 add w20,w20,w4
1071 add w23,w23,w7
1072 add w24,w24,w8
1073 stp w20,w21,[x0]
1074 stp w22,w23,[x0,#8]
1075 str w24,[x0,#16]
1076 cbnz x2,.Loop
1077
1078 ldp x19,x20,[sp,#16]
1079 ldp x21,x22,[sp,#32]
1080 ldp x23,x24,[sp,#48]
1081 ldp x25,x26,[sp,#64]
1082 ldp x27,x28,[sp,#80]
1083 ldr x29,[sp],#96
1084 ret
1085.size sha1_block_data_order,.-sha1_block_data_order
1086.type sha1_block_armv8,%function
1087.align 6
1088sha1_block_armv8:
1089.Lv8_entry:
1090 stp x29,x30,[sp,#-16]!
1091 add x29,sp,#0
1092
Robert Sloanc9abfe42018-11-26 12:19:07 -08001093 adrp x4,.Lconst
1094 add x4,x4,:lo12:.Lconst
Adam Langleyd9e397b2015-01-22 14:27:53 -08001095 eor v1.16b,v1.16b,v1.16b
1096 ld1 {v0.4s},[x0],#16
1097 ld1 {v1.s}[0],[x0]
1098 sub x0,x0,#16
Adam Langleye9ada862015-05-11 17:20:37 -07001099 ld1 {v16.4s,v17.4s,v18.4s,v19.4s},[x4]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001100
1101.Loop_hw:
Adam Langleye9ada862015-05-11 17:20:37 -07001102 ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64
Adam Langleyd9e397b2015-01-22 14:27:53 -08001103 sub x2,x2,#1
1104 rev32 v4.16b,v4.16b
1105 rev32 v5.16b,v5.16b
1106
1107 add v20.4s,v16.4s,v4.4s
1108 rev32 v6.16b,v6.16b
1109 orr v22.16b,v0.16b,v0.16b // offload
1110
1111 add v21.4s,v16.4s,v5.4s
1112 rev32 v7.16b,v7.16b
Adam Langleye9ada862015-05-11 17:20:37 -07001113.inst 0x5e280803 //sha1h v3.16b,v0.16b
1114.inst 0x5e140020 //sha1c v0.16b,v1.16b,v20.4s // 0
Adam Langleyd9e397b2015-01-22 14:27:53 -08001115 add v20.4s,v16.4s,v6.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001116.inst 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1117.inst 0x5e280802 //sha1h v2.16b,v0.16b // 1
1118.inst 0x5e150060 //sha1c v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001119 add v21.4s,v16.4s,v7.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001120.inst 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1121.inst 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1122.inst 0x5e280803 //sha1h v3.16b,v0.16b // 2
1123.inst 0x5e140040 //sha1c v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001124 add v20.4s,v16.4s,v4.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001125.inst 0x5e281885 //sha1su1 v5.16b,v4.16b
1126.inst 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1127.inst 0x5e280802 //sha1h v2.16b,v0.16b // 3
1128.inst 0x5e150060 //sha1c v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001129 add v21.4s,v17.4s,v5.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001130.inst 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1131.inst 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1132.inst 0x5e280803 //sha1h v3.16b,v0.16b // 4
1133.inst 0x5e140040 //sha1c v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001134 add v20.4s,v17.4s,v6.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001135.inst 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1136.inst 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1137.inst 0x5e280802 //sha1h v2.16b,v0.16b // 5
1138.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001139 add v21.4s,v17.4s,v7.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001140.inst 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1141.inst 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1142.inst 0x5e280803 //sha1h v3.16b,v0.16b // 6
1143.inst 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001144 add v20.4s,v17.4s,v4.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001145.inst 0x5e281885 //sha1su1 v5.16b,v4.16b
1146.inst 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1147.inst 0x5e280802 //sha1h v2.16b,v0.16b // 7
1148.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001149 add v21.4s,v17.4s,v5.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001150.inst 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1151.inst 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1152.inst 0x5e280803 //sha1h v3.16b,v0.16b // 8
1153.inst 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001154 add v20.4s,v18.4s,v6.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001155.inst 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1156.inst 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1157.inst 0x5e280802 //sha1h v2.16b,v0.16b // 9
1158.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001159 add v21.4s,v18.4s,v7.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001160.inst 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1161.inst 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1162.inst 0x5e280803 //sha1h v3.16b,v0.16b // 10
1163.inst 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001164 add v20.4s,v18.4s,v4.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001165.inst 0x5e281885 //sha1su1 v5.16b,v4.16b
1166.inst 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1167.inst 0x5e280802 //sha1h v2.16b,v0.16b // 11
1168.inst 0x5e152060 //sha1m v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001169 add v21.4s,v18.4s,v5.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001170.inst 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1171.inst 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1172.inst 0x5e280803 //sha1h v3.16b,v0.16b // 12
1173.inst 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001174 add v20.4s,v18.4s,v6.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001175.inst 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1176.inst 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1177.inst 0x5e280802 //sha1h v2.16b,v0.16b // 13
1178.inst 0x5e152060 //sha1m v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001179 add v21.4s,v19.4s,v7.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001180.inst 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1181.inst 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1182.inst 0x5e280803 //sha1h v3.16b,v0.16b // 14
1183.inst 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001184 add v20.4s,v19.4s,v4.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001185.inst 0x5e281885 //sha1su1 v5.16b,v4.16b
1186.inst 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1187.inst 0x5e280802 //sha1h v2.16b,v0.16b // 15
1188.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001189 add v21.4s,v19.4s,v5.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001190.inst 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1191.inst 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1192.inst 0x5e280803 //sha1h v3.16b,v0.16b // 16
1193.inst 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001194 add v20.4s,v19.4s,v6.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001195.inst 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1196.inst 0x5e280802 //sha1h v2.16b,v0.16b // 17
1197.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001198 add v21.4s,v19.4s,v7.4s
1199
Adam Langleye9ada862015-05-11 17:20:37 -07001200.inst 0x5e280803 //sha1h v3.16b,v0.16b // 18
1201.inst 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001202
Adam Langleye9ada862015-05-11 17:20:37 -07001203.inst 0x5e280802 //sha1h v2.16b,v0.16b // 19
1204.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001205
1206 add v1.4s,v1.4s,v2.4s
1207 add v0.4s,v0.4s,v22.4s
1208
1209 cbnz x2,.Loop_hw
1210
1211 st1 {v0.4s},[x0],#16
1212 st1 {v1.s}[0],[x0]
1213
1214 ldr x29,[sp],#16
1215 ret
1216.size sha1_block_armv8,.-sha1_block_armv8
Robert Sloanc9abfe42018-11-26 12:19:07 -08001217.section .rodata
Adam Langleyd9e397b2015-01-22 14:27:53 -08001218.align 6
1219.Lconst:
1220.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 //K_00_19
1221.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 //K_20_39
1222.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc //K_40_59
1223.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 //K_60_79
Adam Langleye9ada862015-05-11 17:20:37 -07001224.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
1225.align 2
Adam Langleyd9e397b2015-01-22 14:27:53 -08001226.align 2
1227.comm OPENSSL_armcap_P,4,4
Robert Sloanf068def2018-10-10 18:45:40 -07001228.hidden OPENSSL_armcap_P
David Benjamin4969cc92016-04-22 15:02:23 -04001229#endif
Robert Sloan726e9d12018-09-11 11:45:04 -07001230#endif // !OPENSSL_NO_ASM