blob: 5cd02b7ee42840e09c9f99617b0461a4450fa217 [file] [log] [blame]
Robert Sloan726e9d12018-09-11 11:45:04 -07001#if defined(__has_feature)
2#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
3#define OPENSSL_NO_ASM
4#endif
5#endif
6
7#if !defined(OPENSSL_NO_ASM)
Kenny Rootb8494592015-09-25 02:29:14 +00008#if defined(__aarch64__)
Robert Sloan726e9d12018-09-11 11:45:04 -07009#if defined(BORINGSSL_PREFIX)
10#include <boringssl_prefix_symbols_asm.h>
11#endif
Kenny Rootb8494592015-09-25 02:29:14 +000012#include <openssl/arm_arch.h>
Adam Langleyd9e397b2015-01-22 14:27:53 -080013
14.text
15
Adam Langleye9ada862015-05-11 17:20:37 -070016
Adam Langleyd9e397b2015-01-22 14:27:53 -080017.globl sha1_block_data_order
David Benjamin4969cc92016-04-22 15:02:23 -040018.hidden sha1_block_data_order
Adam Langleyd9e397b2015-01-22 14:27:53 -080019.type sha1_block_data_order,%function
20.align 6
21sha1_block_data_order:
Robert Sloan8ff03552017-06-14 12:40:58 -070022#ifdef __ILP32__
23 ldrsw x16,.LOPENSSL_armcap_P
24#else
Adam Langleyd9e397b2015-01-22 14:27:53 -080025 ldr x16,.LOPENSSL_armcap_P
Robert Sloan8ff03552017-06-14 12:40:58 -070026#endif
Adam Langleyd9e397b2015-01-22 14:27:53 -080027 adr x17,.LOPENSSL_armcap_P
28 add x16,x16,x17
29 ldr w16,[x16]
30 tst w16,#ARMV8_SHA1
31 b.ne .Lv8_entry
32
33 stp x29,x30,[sp,#-96]!
34 add x29,sp,#0
35 stp x19,x20,[sp,#16]
36 stp x21,x22,[sp,#32]
37 stp x23,x24,[sp,#48]
38 stp x25,x26,[sp,#64]
39 stp x27,x28,[sp,#80]
40
41 ldp w20,w21,[x0]
42 ldp w22,w23,[x0,#8]
43 ldr w24,[x0,#16]
44
45.Loop:
46 ldr x3,[x1],#64
47 movz w28,#0x7999
48 sub x2,x2,#1
49 movk w28,#0x5a82,lsl#16
50#ifdef __ARMEB__
51 ror x3,x3,#32
52#else
53 rev32 x3,x3
54#endif
55 add w24,w24,w28 // warm it up
56 add w24,w24,w3
57 lsr x4,x3,#32
58 ldr x5,[x1,#-56]
59 bic w25,w23,w21
60 and w26,w22,w21
61 ror w27,w20,#27
62 add w23,w23,w28 // future e+=K
63 orr w25,w25,w26
64 add w24,w24,w27 // e+=rot(a,5)
65 ror w21,w21,#2
66 add w23,w23,w4 // future e+=X[i]
67 add w24,w24,w25 // e+=F(b,c,d)
68#ifdef __ARMEB__
69 ror x5,x5,#32
70#else
71 rev32 x5,x5
72#endif
73 bic w25,w22,w20
74 and w26,w21,w20
75 ror w27,w24,#27
76 add w22,w22,w28 // future e+=K
77 orr w25,w25,w26
78 add w23,w23,w27 // e+=rot(a,5)
79 ror w20,w20,#2
80 add w22,w22,w5 // future e+=X[i]
81 add w23,w23,w25 // e+=F(b,c,d)
82 lsr x6,x5,#32
83 ldr x7,[x1,#-48]
84 bic w25,w21,w24
85 and w26,w20,w24
86 ror w27,w23,#27
87 add w21,w21,w28 // future e+=K
88 orr w25,w25,w26
89 add w22,w22,w27 // e+=rot(a,5)
90 ror w24,w24,#2
91 add w21,w21,w6 // future e+=X[i]
92 add w22,w22,w25 // e+=F(b,c,d)
93#ifdef __ARMEB__
94 ror x7,x7,#32
95#else
96 rev32 x7,x7
97#endif
98 bic w25,w20,w23
99 and w26,w24,w23
100 ror w27,w22,#27
101 add w20,w20,w28 // future e+=K
102 orr w25,w25,w26
103 add w21,w21,w27 // e+=rot(a,5)
104 ror w23,w23,#2
105 add w20,w20,w7 // future e+=X[i]
106 add w21,w21,w25 // e+=F(b,c,d)
107 lsr x8,x7,#32
108 ldr x9,[x1,#-40]
109 bic w25,w24,w22
110 and w26,w23,w22
111 ror w27,w21,#27
112 add w24,w24,w28 // future e+=K
113 orr w25,w25,w26
114 add w20,w20,w27 // e+=rot(a,5)
115 ror w22,w22,#2
116 add w24,w24,w8 // future e+=X[i]
117 add w20,w20,w25 // e+=F(b,c,d)
118#ifdef __ARMEB__
119 ror x9,x9,#32
120#else
121 rev32 x9,x9
122#endif
123 bic w25,w23,w21
124 and w26,w22,w21
125 ror w27,w20,#27
126 add w23,w23,w28 // future e+=K
127 orr w25,w25,w26
128 add w24,w24,w27 // e+=rot(a,5)
129 ror w21,w21,#2
130 add w23,w23,w9 // future e+=X[i]
131 add w24,w24,w25 // e+=F(b,c,d)
132 lsr x10,x9,#32
133 ldr x11,[x1,#-32]
134 bic w25,w22,w20
135 and w26,w21,w20
136 ror w27,w24,#27
137 add w22,w22,w28 // future e+=K
138 orr w25,w25,w26
139 add w23,w23,w27 // e+=rot(a,5)
140 ror w20,w20,#2
141 add w22,w22,w10 // future e+=X[i]
142 add w23,w23,w25 // e+=F(b,c,d)
143#ifdef __ARMEB__
144 ror x11,x11,#32
145#else
146 rev32 x11,x11
147#endif
148 bic w25,w21,w24
149 and w26,w20,w24
150 ror w27,w23,#27
151 add w21,w21,w28 // future e+=K
152 orr w25,w25,w26
153 add w22,w22,w27 // e+=rot(a,5)
154 ror w24,w24,#2
155 add w21,w21,w11 // future e+=X[i]
156 add w22,w22,w25 // e+=F(b,c,d)
157 lsr x12,x11,#32
158 ldr x13,[x1,#-24]
159 bic w25,w20,w23
160 and w26,w24,w23
161 ror w27,w22,#27
162 add w20,w20,w28 // future e+=K
163 orr w25,w25,w26
164 add w21,w21,w27 // e+=rot(a,5)
165 ror w23,w23,#2
166 add w20,w20,w12 // future e+=X[i]
167 add w21,w21,w25 // e+=F(b,c,d)
168#ifdef __ARMEB__
169 ror x13,x13,#32
170#else
171 rev32 x13,x13
172#endif
173 bic w25,w24,w22
174 and w26,w23,w22
175 ror w27,w21,#27
176 add w24,w24,w28 // future e+=K
177 orr w25,w25,w26
178 add w20,w20,w27 // e+=rot(a,5)
179 ror w22,w22,#2
180 add w24,w24,w13 // future e+=X[i]
181 add w20,w20,w25 // e+=F(b,c,d)
182 lsr x14,x13,#32
183 ldr x15,[x1,#-16]
184 bic w25,w23,w21
185 and w26,w22,w21
186 ror w27,w20,#27
187 add w23,w23,w28 // future e+=K
188 orr w25,w25,w26
189 add w24,w24,w27 // e+=rot(a,5)
190 ror w21,w21,#2
191 add w23,w23,w14 // future e+=X[i]
192 add w24,w24,w25 // e+=F(b,c,d)
193#ifdef __ARMEB__
194 ror x15,x15,#32
195#else
196 rev32 x15,x15
197#endif
198 bic w25,w22,w20
199 and w26,w21,w20
200 ror w27,w24,#27
201 add w22,w22,w28 // future e+=K
202 orr w25,w25,w26
203 add w23,w23,w27 // e+=rot(a,5)
204 ror w20,w20,#2
205 add w22,w22,w15 // future e+=X[i]
206 add w23,w23,w25 // e+=F(b,c,d)
207 lsr x16,x15,#32
208 ldr x17,[x1,#-8]
209 bic w25,w21,w24
210 and w26,w20,w24
211 ror w27,w23,#27
212 add w21,w21,w28 // future e+=K
213 orr w25,w25,w26
214 add w22,w22,w27 // e+=rot(a,5)
215 ror w24,w24,#2
216 add w21,w21,w16 // future e+=X[i]
217 add w22,w22,w25 // e+=F(b,c,d)
218#ifdef __ARMEB__
219 ror x17,x17,#32
220#else
221 rev32 x17,x17
222#endif
223 bic w25,w20,w23
224 and w26,w24,w23
225 ror w27,w22,#27
226 add w20,w20,w28 // future e+=K
227 orr w25,w25,w26
228 add w21,w21,w27 // e+=rot(a,5)
229 ror w23,w23,#2
230 add w20,w20,w17 // future e+=X[i]
231 add w21,w21,w25 // e+=F(b,c,d)
232 lsr x19,x17,#32
Adam Langleye9ada862015-05-11 17:20:37 -0700233 eor w3,w3,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800234 bic w25,w24,w22
235 and w26,w23,w22
236 ror w27,w21,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700237 eor w3,w3,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800238 add w24,w24,w28 // future e+=K
239 orr w25,w25,w26
240 add w20,w20,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700241 eor w3,w3,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800242 ror w22,w22,#2
243 add w24,w24,w19 // future e+=X[i]
244 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700245 ror w3,w3,#31
246 eor w4,w4,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800247 bic w25,w23,w21
248 and w26,w22,w21
249 ror w27,w20,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700250 eor w4,w4,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800251 add w23,w23,w28 // future e+=K
252 orr w25,w25,w26
253 add w24,w24,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700254 eor w4,w4,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800255 ror w21,w21,#2
256 add w23,w23,w3 // future e+=X[i]
257 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700258 ror w4,w4,#31
259 eor w5,w5,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800260 bic w25,w22,w20
261 and w26,w21,w20
262 ror w27,w24,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700263 eor w5,w5,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800264 add w22,w22,w28 // future e+=K
265 orr w25,w25,w26
266 add w23,w23,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700267 eor w5,w5,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800268 ror w20,w20,#2
269 add w22,w22,w4 // future e+=X[i]
270 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700271 ror w5,w5,#31
272 eor w6,w6,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800273 bic w25,w21,w24
274 and w26,w20,w24
275 ror w27,w23,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700276 eor w6,w6,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800277 add w21,w21,w28 // future e+=K
278 orr w25,w25,w26
279 add w22,w22,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700280 eor w6,w6,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800281 ror w24,w24,#2
282 add w21,w21,w5 // future e+=X[i]
283 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700284 ror w6,w6,#31
285 eor w7,w7,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800286 bic w25,w20,w23
287 and w26,w24,w23
288 ror w27,w22,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700289 eor w7,w7,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800290 add w20,w20,w28 // future e+=K
291 orr w25,w25,w26
292 add w21,w21,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700293 eor w7,w7,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800294 ror w23,w23,#2
295 add w20,w20,w6 // future e+=X[i]
296 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700297 ror w7,w7,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800298 movz w28,#0xeba1
299 movk w28,#0x6ed9,lsl#16
Adam Langleye9ada862015-05-11 17:20:37 -0700300 eor w8,w8,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800301 bic w25,w24,w22
302 and w26,w23,w22
303 ror w27,w21,#27
Adam Langleye9ada862015-05-11 17:20:37 -0700304 eor w8,w8,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800305 add w24,w24,w28 // future e+=K
306 orr w25,w25,w26
307 add w20,w20,w27 // e+=rot(a,5)
Adam Langleye9ada862015-05-11 17:20:37 -0700308 eor w8,w8,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800309 ror w22,w22,#2
310 add w24,w24,w7 // future e+=X[i]
311 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700312 ror w8,w8,#31
313 eor w9,w9,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800314 eor w25,w23,w21
315 ror w27,w20,#27
316 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700317 eor w9,w9,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800318 eor w25,w25,w22
319 add w24,w24,w27 // e+=rot(a,5)
320 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700321 eor w9,w9,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800322 add w23,w23,w8 // future e+=X[i]
323 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700324 ror w9,w9,#31
325 eor w10,w10,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800326 eor w25,w22,w20
327 ror w27,w24,#27
328 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700329 eor w10,w10,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800330 eor w25,w25,w21
331 add w23,w23,w27 // e+=rot(a,5)
332 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700333 eor w10,w10,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800334 add w22,w22,w9 // future e+=X[i]
335 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700336 ror w10,w10,#31
337 eor w11,w11,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800338 eor w25,w21,w24
339 ror w27,w23,#27
340 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700341 eor w11,w11,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800342 eor w25,w25,w20
343 add w22,w22,w27 // e+=rot(a,5)
344 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700345 eor w11,w11,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800346 add w21,w21,w10 // future e+=X[i]
347 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700348 ror w11,w11,#31
349 eor w12,w12,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800350 eor w25,w20,w23
351 ror w27,w22,#27
352 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700353 eor w12,w12,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800354 eor w25,w25,w24
355 add w21,w21,w27 // e+=rot(a,5)
356 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700357 eor w12,w12,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800358 add w20,w20,w11 // future e+=X[i]
359 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700360 ror w12,w12,#31
361 eor w13,w13,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800362 eor w25,w24,w22
363 ror w27,w21,#27
364 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700365 eor w13,w13,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800366 eor w25,w25,w23
367 add w20,w20,w27 // e+=rot(a,5)
368 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700369 eor w13,w13,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800370 add w24,w24,w12 // future e+=X[i]
371 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700372 ror w13,w13,#31
373 eor w14,w14,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800374 eor w25,w23,w21
375 ror w27,w20,#27
376 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700377 eor w14,w14,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800378 eor w25,w25,w22
379 add w24,w24,w27 // e+=rot(a,5)
380 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700381 eor w14,w14,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800382 add w23,w23,w13 // future e+=X[i]
383 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700384 ror w14,w14,#31
385 eor w15,w15,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800386 eor w25,w22,w20
387 ror w27,w24,#27
388 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700389 eor w15,w15,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800390 eor w25,w25,w21
391 add w23,w23,w27 // e+=rot(a,5)
392 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700393 eor w15,w15,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800394 add w22,w22,w14 // future e+=X[i]
395 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700396 ror w15,w15,#31
397 eor w16,w16,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800398 eor w25,w21,w24
399 ror w27,w23,#27
400 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700401 eor w16,w16,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800402 eor w25,w25,w20
403 add w22,w22,w27 // e+=rot(a,5)
404 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700405 eor w16,w16,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800406 add w21,w21,w15 // future e+=X[i]
407 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700408 ror w16,w16,#31
409 eor w17,w17,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800410 eor w25,w20,w23
411 ror w27,w22,#27
412 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700413 eor w17,w17,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800414 eor w25,w25,w24
415 add w21,w21,w27 // e+=rot(a,5)
416 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700417 eor w17,w17,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800418 add w20,w20,w16 // future e+=X[i]
419 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700420 ror w17,w17,#31
421 eor w19,w19,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800422 eor w25,w24,w22
423 ror w27,w21,#27
424 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700425 eor w19,w19,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800426 eor w25,w25,w23
427 add w20,w20,w27 // e+=rot(a,5)
428 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700429 eor w19,w19,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800430 add w24,w24,w17 // future e+=X[i]
431 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700432 ror w19,w19,#31
433 eor w3,w3,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800434 eor w25,w23,w21
435 ror w27,w20,#27
436 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700437 eor w3,w3,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800438 eor w25,w25,w22
439 add w24,w24,w27 // e+=rot(a,5)
440 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700441 eor w3,w3,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800442 add w23,w23,w19 // future e+=X[i]
443 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700444 ror w3,w3,#31
445 eor w4,w4,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800446 eor w25,w22,w20
447 ror w27,w24,#27
448 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700449 eor w4,w4,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800450 eor w25,w25,w21
451 add w23,w23,w27 // e+=rot(a,5)
452 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700453 eor w4,w4,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800454 add w22,w22,w3 // future e+=X[i]
455 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700456 ror w4,w4,#31
457 eor w5,w5,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800458 eor w25,w21,w24
459 ror w27,w23,#27
460 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700461 eor w5,w5,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800462 eor w25,w25,w20
463 add w22,w22,w27 // e+=rot(a,5)
464 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700465 eor w5,w5,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800466 add w21,w21,w4 // future e+=X[i]
467 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700468 ror w5,w5,#31
469 eor w6,w6,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800470 eor w25,w20,w23
471 ror w27,w22,#27
472 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700473 eor w6,w6,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800474 eor w25,w25,w24
475 add w21,w21,w27 // e+=rot(a,5)
476 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700477 eor w6,w6,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800478 add w20,w20,w5 // future e+=X[i]
479 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700480 ror w6,w6,#31
481 eor w7,w7,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800482 eor w25,w24,w22
483 ror w27,w21,#27
484 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700485 eor w7,w7,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800486 eor w25,w25,w23
487 add w20,w20,w27 // e+=rot(a,5)
488 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700489 eor w7,w7,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800490 add w24,w24,w6 // future e+=X[i]
491 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700492 ror w7,w7,#31
493 eor w8,w8,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800494 eor w25,w23,w21
495 ror w27,w20,#27
496 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700497 eor w8,w8,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800498 eor w25,w25,w22
499 add w24,w24,w27 // e+=rot(a,5)
500 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700501 eor w8,w8,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800502 add w23,w23,w7 // future e+=X[i]
503 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700504 ror w8,w8,#31
505 eor w9,w9,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800506 eor w25,w22,w20
507 ror w27,w24,#27
508 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700509 eor w9,w9,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800510 eor w25,w25,w21
511 add w23,w23,w27 // e+=rot(a,5)
512 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700513 eor w9,w9,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800514 add w22,w22,w8 // future e+=X[i]
515 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700516 ror w9,w9,#31
517 eor w10,w10,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800518 eor w25,w21,w24
519 ror w27,w23,#27
520 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700521 eor w10,w10,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800522 eor w25,w25,w20
523 add w22,w22,w27 // e+=rot(a,5)
524 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700525 eor w10,w10,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800526 add w21,w21,w9 // future e+=X[i]
527 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700528 ror w10,w10,#31
529 eor w11,w11,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800530 eor w25,w20,w23
531 ror w27,w22,#27
532 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700533 eor w11,w11,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800534 eor w25,w25,w24
535 add w21,w21,w27 // e+=rot(a,5)
536 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700537 eor w11,w11,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800538 add w20,w20,w10 // future e+=X[i]
539 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700540 ror w11,w11,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800541 movz w28,#0xbcdc
542 movk w28,#0x8f1b,lsl#16
Adam Langleye9ada862015-05-11 17:20:37 -0700543 eor w12,w12,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800544 eor w25,w24,w22
545 ror w27,w21,#27
546 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700547 eor w12,w12,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800548 eor w25,w25,w23
549 add w20,w20,w27 // e+=rot(a,5)
550 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700551 eor w12,w12,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800552 add w24,w24,w11 // future e+=X[i]
553 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700554 ror w12,w12,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800555 orr w25,w21,w22
556 and w26,w21,w22
Adam Langleye9ada862015-05-11 17:20:37 -0700557 eor w13,w13,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800558 ror w27,w20,#27
559 and w25,w25,w23
560 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700561 eor w13,w13,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800562 add w24,w24,w27 // e+=rot(a,5)
563 orr w25,w25,w26
564 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700565 eor w13,w13,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800566 add w23,w23,w12 // future e+=X[i]
567 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700568 ror w13,w13,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800569 orr w25,w20,w21
570 and w26,w20,w21
Adam Langleye9ada862015-05-11 17:20:37 -0700571 eor w14,w14,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800572 ror w27,w24,#27
573 and w25,w25,w22
574 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700575 eor w14,w14,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800576 add w23,w23,w27 // e+=rot(a,5)
577 orr w25,w25,w26
578 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700579 eor w14,w14,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800580 add w22,w22,w13 // future e+=X[i]
581 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700582 ror w14,w14,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800583 orr w25,w24,w20
584 and w26,w24,w20
Adam Langleye9ada862015-05-11 17:20:37 -0700585 eor w15,w15,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800586 ror w27,w23,#27
587 and w25,w25,w21
588 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700589 eor w15,w15,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800590 add w22,w22,w27 // e+=rot(a,5)
591 orr w25,w25,w26
592 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700593 eor w15,w15,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800594 add w21,w21,w14 // future e+=X[i]
595 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700596 ror w15,w15,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800597 orr w25,w23,w24
598 and w26,w23,w24
Adam Langleye9ada862015-05-11 17:20:37 -0700599 eor w16,w16,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800600 ror w27,w22,#27
601 and w25,w25,w20
602 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700603 eor w16,w16,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800604 add w21,w21,w27 // e+=rot(a,5)
605 orr w25,w25,w26
606 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700607 eor w16,w16,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800608 add w20,w20,w15 // future e+=X[i]
609 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700610 ror w16,w16,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800611 orr w25,w22,w23
612 and w26,w22,w23
Adam Langleye9ada862015-05-11 17:20:37 -0700613 eor w17,w17,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800614 ror w27,w21,#27
615 and w25,w25,w24
616 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700617 eor w17,w17,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800618 add w20,w20,w27 // e+=rot(a,5)
619 orr w25,w25,w26
620 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700621 eor w17,w17,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800622 add w24,w24,w16 // future e+=X[i]
623 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700624 ror w17,w17,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800625 orr w25,w21,w22
626 and w26,w21,w22
Adam Langleye9ada862015-05-11 17:20:37 -0700627 eor w19,w19,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800628 ror w27,w20,#27
629 and w25,w25,w23
630 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700631 eor w19,w19,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800632 add w24,w24,w27 // e+=rot(a,5)
633 orr w25,w25,w26
634 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700635 eor w19,w19,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800636 add w23,w23,w17 // future e+=X[i]
637 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700638 ror w19,w19,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800639 orr w25,w20,w21
640 and w26,w20,w21
Adam Langleye9ada862015-05-11 17:20:37 -0700641 eor w3,w3,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800642 ror w27,w24,#27
643 and w25,w25,w22
644 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700645 eor w3,w3,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800646 add w23,w23,w27 // e+=rot(a,5)
647 orr w25,w25,w26
648 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700649 eor w3,w3,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800650 add w22,w22,w19 // future e+=X[i]
651 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700652 ror w3,w3,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800653 orr w25,w24,w20
654 and w26,w24,w20
Adam Langleye9ada862015-05-11 17:20:37 -0700655 eor w4,w4,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800656 ror w27,w23,#27
657 and w25,w25,w21
658 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700659 eor w4,w4,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800660 add w22,w22,w27 // e+=rot(a,5)
661 orr w25,w25,w26
662 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700663 eor w4,w4,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800664 add w21,w21,w3 // future e+=X[i]
665 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700666 ror w4,w4,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800667 orr w25,w23,w24
668 and w26,w23,w24
Adam Langleye9ada862015-05-11 17:20:37 -0700669 eor w5,w5,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800670 ror w27,w22,#27
671 and w25,w25,w20
672 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700673 eor w5,w5,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800674 add w21,w21,w27 // e+=rot(a,5)
675 orr w25,w25,w26
676 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700677 eor w5,w5,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800678 add w20,w20,w4 // future e+=X[i]
679 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700680 ror w5,w5,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800681 orr w25,w22,w23
682 and w26,w22,w23
Adam Langleye9ada862015-05-11 17:20:37 -0700683 eor w6,w6,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800684 ror w27,w21,#27
685 and w25,w25,w24
686 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700687 eor w6,w6,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800688 add w20,w20,w27 // e+=rot(a,5)
689 orr w25,w25,w26
690 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700691 eor w6,w6,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800692 add w24,w24,w5 // future e+=X[i]
693 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700694 ror w6,w6,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800695 orr w25,w21,w22
696 and w26,w21,w22
Adam Langleye9ada862015-05-11 17:20:37 -0700697 eor w7,w7,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800698 ror w27,w20,#27
699 and w25,w25,w23
700 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700701 eor w7,w7,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800702 add w24,w24,w27 // e+=rot(a,5)
703 orr w25,w25,w26
704 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700705 eor w7,w7,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800706 add w23,w23,w6 // future e+=X[i]
707 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700708 ror w7,w7,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800709 orr w25,w20,w21
710 and w26,w20,w21
Adam Langleye9ada862015-05-11 17:20:37 -0700711 eor w8,w8,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800712 ror w27,w24,#27
713 and w25,w25,w22
714 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700715 eor w8,w8,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800716 add w23,w23,w27 // e+=rot(a,5)
717 orr w25,w25,w26
718 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700719 eor w8,w8,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800720 add w22,w22,w7 // future e+=X[i]
721 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700722 ror w8,w8,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800723 orr w25,w24,w20
724 and w26,w24,w20
Adam Langleye9ada862015-05-11 17:20:37 -0700725 eor w9,w9,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800726 ror w27,w23,#27
727 and w25,w25,w21
728 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700729 eor w9,w9,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800730 add w22,w22,w27 // e+=rot(a,5)
731 orr w25,w25,w26
732 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700733 eor w9,w9,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800734 add w21,w21,w8 // future e+=X[i]
735 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700736 ror w9,w9,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800737 orr w25,w23,w24
738 and w26,w23,w24
Adam Langleye9ada862015-05-11 17:20:37 -0700739 eor w10,w10,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800740 ror w27,w22,#27
741 and w25,w25,w20
742 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700743 eor w10,w10,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800744 add w21,w21,w27 // e+=rot(a,5)
745 orr w25,w25,w26
746 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700747 eor w10,w10,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800748 add w20,w20,w9 // future e+=X[i]
749 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700750 ror w10,w10,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800751 orr w25,w22,w23
752 and w26,w22,w23
Adam Langleye9ada862015-05-11 17:20:37 -0700753 eor w11,w11,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800754 ror w27,w21,#27
755 and w25,w25,w24
756 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700757 eor w11,w11,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800758 add w20,w20,w27 // e+=rot(a,5)
759 orr w25,w25,w26
760 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700761 eor w11,w11,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800762 add w24,w24,w10 // future e+=X[i]
763 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700764 ror w11,w11,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800765 orr w25,w21,w22
766 and w26,w21,w22
Adam Langleye9ada862015-05-11 17:20:37 -0700767 eor w12,w12,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800768 ror w27,w20,#27
769 and w25,w25,w23
770 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700771 eor w12,w12,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800772 add w24,w24,w27 // e+=rot(a,5)
773 orr w25,w25,w26
774 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700775 eor w12,w12,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800776 add w23,w23,w11 // future e+=X[i]
777 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700778 ror w12,w12,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800779 orr w25,w20,w21
780 and w26,w20,w21
Adam Langleye9ada862015-05-11 17:20:37 -0700781 eor w13,w13,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800782 ror w27,w24,#27
783 and w25,w25,w22
784 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700785 eor w13,w13,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800786 add w23,w23,w27 // e+=rot(a,5)
787 orr w25,w25,w26
788 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700789 eor w13,w13,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800790 add w22,w22,w12 // future e+=X[i]
791 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700792 ror w13,w13,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800793 orr w25,w24,w20
794 and w26,w24,w20
Adam Langleye9ada862015-05-11 17:20:37 -0700795 eor w14,w14,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800796 ror w27,w23,#27
797 and w25,w25,w21
798 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700799 eor w14,w14,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800800 add w22,w22,w27 // e+=rot(a,5)
801 orr w25,w25,w26
802 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700803 eor w14,w14,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800804 add w21,w21,w13 // future e+=X[i]
805 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700806 ror w14,w14,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800807 orr w25,w23,w24
808 and w26,w23,w24
Adam Langleye9ada862015-05-11 17:20:37 -0700809 eor w15,w15,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800810 ror w27,w22,#27
811 and w25,w25,w20
812 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700813 eor w15,w15,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800814 add w21,w21,w27 // e+=rot(a,5)
815 orr w25,w25,w26
816 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700817 eor w15,w15,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800818 add w20,w20,w14 // future e+=X[i]
819 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700820 ror w15,w15,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -0800821 movz w28,#0xc1d6
822 movk w28,#0xca62,lsl#16
823 orr w25,w22,w23
824 and w26,w22,w23
Adam Langleye9ada862015-05-11 17:20:37 -0700825 eor w16,w16,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800826 ror w27,w21,#27
827 and w25,w25,w24
828 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700829 eor w16,w16,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800830 add w20,w20,w27 // e+=rot(a,5)
831 orr w25,w25,w26
832 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700833 eor w16,w16,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800834 add w24,w24,w15 // future e+=X[i]
835 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700836 ror w16,w16,#31
837 eor w17,w17,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800838 eor w25,w23,w21
839 ror w27,w20,#27
840 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700841 eor w17,w17,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800842 eor w25,w25,w22
843 add w24,w24,w27 // e+=rot(a,5)
844 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700845 eor w17,w17,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800846 add w23,w23,w16 // future e+=X[i]
847 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700848 ror w17,w17,#31
849 eor w19,w19,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800850 eor w25,w22,w20
851 ror w27,w24,#27
852 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700853 eor w19,w19,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800854 eor w25,w25,w21
855 add w23,w23,w27 // e+=rot(a,5)
856 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700857 eor w19,w19,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800858 add w22,w22,w17 // future e+=X[i]
859 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700860 ror w19,w19,#31
861 eor w3,w3,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800862 eor w25,w21,w24
863 ror w27,w23,#27
864 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700865 eor w3,w3,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800866 eor w25,w25,w20
867 add w22,w22,w27 // e+=rot(a,5)
868 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700869 eor w3,w3,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800870 add w21,w21,w19 // future e+=X[i]
871 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700872 ror w3,w3,#31
873 eor w4,w4,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800874 eor w25,w20,w23
875 ror w27,w22,#27
876 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700877 eor w4,w4,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800878 eor w25,w25,w24
879 add w21,w21,w27 // e+=rot(a,5)
880 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700881 eor w4,w4,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800882 add w20,w20,w3 // future e+=X[i]
883 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700884 ror w4,w4,#31
885 eor w5,w5,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800886 eor w25,w24,w22
887 ror w27,w21,#27
888 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700889 eor w5,w5,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800890 eor w25,w25,w23
891 add w20,w20,w27 // e+=rot(a,5)
892 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700893 eor w5,w5,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800894 add w24,w24,w4 // future e+=X[i]
895 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700896 ror w5,w5,#31
897 eor w6,w6,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800898 eor w25,w23,w21
899 ror w27,w20,#27
900 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700901 eor w6,w6,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800902 eor w25,w25,w22
903 add w24,w24,w27 // e+=rot(a,5)
904 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700905 eor w6,w6,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800906 add w23,w23,w5 // future e+=X[i]
907 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700908 ror w6,w6,#31
909 eor w7,w7,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800910 eor w25,w22,w20
911 ror w27,w24,#27
912 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700913 eor w7,w7,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800914 eor w25,w25,w21
915 add w23,w23,w27 // e+=rot(a,5)
916 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700917 eor w7,w7,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800918 add w22,w22,w6 // future e+=X[i]
919 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700920 ror w7,w7,#31
921 eor w8,w8,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800922 eor w25,w21,w24
923 ror w27,w23,#27
924 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700925 eor w8,w8,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800926 eor w25,w25,w20
927 add w22,w22,w27 // e+=rot(a,5)
928 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700929 eor w8,w8,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800930 add w21,w21,w7 // future e+=X[i]
931 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700932 ror w8,w8,#31
933 eor w9,w9,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -0800934 eor w25,w20,w23
935 ror w27,w22,#27
936 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700937 eor w9,w9,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -0800938 eor w25,w25,w24
939 add w21,w21,w27 // e+=rot(a,5)
940 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700941 eor w9,w9,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800942 add w20,w20,w8 // future e+=X[i]
943 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700944 ror w9,w9,#31
945 eor w10,w10,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -0800946 eor w25,w24,w22
947 ror w27,w21,#27
948 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700949 eor w10,w10,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -0800950 eor w25,w25,w23
951 add w20,w20,w27 // e+=rot(a,5)
952 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700953 eor w10,w10,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800954 add w24,w24,w9 // future e+=X[i]
955 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700956 ror w10,w10,#31
957 eor w11,w11,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -0800958 eor w25,w23,w21
959 ror w27,w20,#27
960 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700961 eor w11,w11,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800962 eor w25,w25,w22
963 add w24,w24,w27 // e+=rot(a,5)
964 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700965 eor w11,w11,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -0800966 add w23,w23,w10 // future e+=X[i]
967 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700968 ror w11,w11,#31
969 eor w12,w12,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -0800970 eor w25,w22,w20
971 ror w27,w24,#27
972 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700973 eor w12,w12,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800974 eor w25,w25,w21
975 add w23,w23,w27 // e+=rot(a,5)
976 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700977 eor w12,w12,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -0800978 add w22,w22,w11 // future e+=X[i]
979 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700980 ror w12,w12,#31
981 eor w13,w13,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -0800982 eor w25,w21,w24
983 ror w27,w23,#27
984 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700985 eor w13,w13,w5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800986 eor w25,w25,w20
987 add w22,w22,w27 // e+=rot(a,5)
988 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -0700989 eor w13,w13,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800990 add w21,w21,w12 // future e+=X[i]
991 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -0700992 ror w13,w13,#31
993 eor w14,w14,w16
Adam Langleyd9e397b2015-01-22 14:27:53 -0800994 eor w25,w20,w23
995 ror w27,w22,#27
996 add w20,w20,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -0700997 eor w14,w14,w6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800998 eor w25,w25,w24
999 add w21,w21,w27 // e+=rot(a,5)
1000 ror w23,w23,#2
Adam Langleye9ada862015-05-11 17:20:37 -07001001 eor w14,w14,w11
Adam Langleyd9e397b2015-01-22 14:27:53 -08001002 add w20,w20,w13 // future e+=X[i]
1003 add w21,w21,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -07001004 ror w14,w14,#31
1005 eor w15,w15,w17
Adam Langleyd9e397b2015-01-22 14:27:53 -08001006 eor w25,w24,w22
1007 ror w27,w21,#27
1008 add w24,w24,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -07001009 eor w15,w15,w7
Adam Langleyd9e397b2015-01-22 14:27:53 -08001010 eor w25,w25,w23
1011 add w20,w20,w27 // e+=rot(a,5)
1012 ror w22,w22,#2
Adam Langleye9ada862015-05-11 17:20:37 -07001013 eor w15,w15,w12
Adam Langleyd9e397b2015-01-22 14:27:53 -08001014 add w24,w24,w14 // future e+=X[i]
1015 add w20,w20,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -07001016 ror w15,w15,#31
1017 eor w16,w16,w19
Adam Langleyd9e397b2015-01-22 14:27:53 -08001018 eor w25,w23,w21
1019 ror w27,w20,#27
1020 add w23,w23,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -07001021 eor w16,w16,w8
Adam Langleyd9e397b2015-01-22 14:27:53 -08001022 eor w25,w25,w22
1023 add w24,w24,w27 // e+=rot(a,5)
1024 ror w21,w21,#2
Adam Langleye9ada862015-05-11 17:20:37 -07001025 eor w16,w16,w13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001026 add w23,w23,w15 // future e+=X[i]
1027 add w24,w24,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -07001028 ror w16,w16,#31
1029 eor w17,w17,w3
Adam Langleyd9e397b2015-01-22 14:27:53 -08001030 eor w25,w22,w20
1031 ror w27,w24,#27
1032 add w22,w22,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -07001033 eor w17,w17,w9
Adam Langleyd9e397b2015-01-22 14:27:53 -08001034 eor w25,w25,w21
1035 add w23,w23,w27 // e+=rot(a,5)
1036 ror w20,w20,#2
Adam Langleye9ada862015-05-11 17:20:37 -07001037 eor w17,w17,w14
Adam Langleyd9e397b2015-01-22 14:27:53 -08001038 add w22,w22,w16 // future e+=X[i]
1039 add w23,w23,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -07001040 ror w17,w17,#31
1041 eor w19,w19,w4
Adam Langleyd9e397b2015-01-22 14:27:53 -08001042 eor w25,w21,w24
1043 ror w27,w23,#27
1044 add w21,w21,w28 // future e+=K
Adam Langleye9ada862015-05-11 17:20:37 -07001045 eor w19,w19,w10
Adam Langleyd9e397b2015-01-22 14:27:53 -08001046 eor w25,w25,w20
1047 add w22,w22,w27 // e+=rot(a,5)
1048 ror w24,w24,#2
Adam Langleye9ada862015-05-11 17:20:37 -07001049 eor w19,w19,w15
Adam Langleyd9e397b2015-01-22 14:27:53 -08001050 add w21,w21,w17 // future e+=X[i]
1051 add w22,w22,w25 // e+=F(b,c,d)
Adam Langleye9ada862015-05-11 17:20:37 -07001052 ror w19,w19,#31
Adam Langleyd9e397b2015-01-22 14:27:53 -08001053 ldp w4,w5,[x0]
1054 eor w25,w20,w23
1055 ror w27,w22,#27
1056 add w20,w20,w28 // future e+=K
1057 eor w25,w25,w24
1058 add w21,w21,w27 // e+=rot(a,5)
1059 ror w23,w23,#2
1060 add w20,w20,w19 // future e+=X[i]
1061 add w21,w21,w25 // e+=F(b,c,d)
1062 ldp w6,w7,[x0,#8]
1063 eor w25,w24,w22
1064 ror w27,w21,#27
1065 eor w25,w25,w23
1066 add w20,w20,w27 // e+=rot(a,5)
1067 ror w22,w22,#2
1068 ldr w8,[x0,#16]
1069 add w20,w20,w25 // e+=F(b,c,d)
1070 add w21,w21,w5
1071 add w22,w22,w6
1072 add w20,w20,w4
1073 add w23,w23,w7
1074 add w24,w24,w8
1075 stp w20,w21,[x0]
1076 stp w22,w23,[x0,#8]
1077 str w24,[x0,#16]
1078 cbnz x2,.Loop
1079
1080 ldp x19,x20,[sp,#16]
1081 ldp x21,x22,[sp,#32]
1082 ldp x23,x24,[sp,#48]
1083 ldp x25,x26,[sp,#64]
1084 ldp x27,x28,[sp,#80]
1085 ldr x29,[sp],#96
1086 ret
1087.size sha1_block_data_order,.-sha1_block_data_order
1088.type sha1_block_armv8,%function
1089.align 6
1090sha1_block_armv8:
1091.Lv8_entry:
1092 stp x29,x30,[sp,#-16]!
1093 add x29,sp,#0
1094
1095 adr x4,.Lconst
1096 eor v1.16b,v1.16b,v1.16b
1097 ld1 {v0.4s},[x0],#16
1098 ld1 {v1.s}[0],[x0]
1099 sub x0,x0,#16
Adam Langleye9ada862015-05-11 17:20:37 -07001100 ld1 {v16.4s,v17.4s,v18.4s,v19.4s},[x4]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001101
1102.Loop_hw:
Adam Langleye9ada862015-05-11 17:20:37 -07001103 ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64
Adam Langleyd9e397b2015-01-22 14:27:53 -08001104 sub x2,x2,#1
1105 rev32 v4.16b,v4.16b
1106 rev32 v5.16b,v5.16b
1107
1108 add v20.4s,v16.4s,v4.4s
1109 rev32 v6.16b,v6.16b
1110 orr v22.16b,v0.16b,v0.16b // offload
1111
1112 add v21.4s,v16.4s,v5.4s
1113 rev32 v7.16b,v7.16b
Adam Langleye9ada862015-05-11 17:20:37 -07001114.inst 0x5e280803 //sha1h v3.16b,v0.16b
1115.inst 0x5e140020 //sha1c v0.16b,v1.16b,v20.4s // 0
Adam Langleyd9e397b2015-01-22 14:27:53 -08001116 add v20.4s,v16.4s,v6.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001117.inst 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1118.inst 0x5e280802 //sha1h v2.16b,v0.16b // 1
1119.inst 0x5e150060 //sha1c v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001120 add v21.4s,v16.4s,v7.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001121.inst 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1122.inst 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1123.inst 0x5e280803 //sha1h v3.16b,v0.16b // 2
1124.inst 0x5e140040 //sha1c v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001125 add v20.4s,v16.4s,v4.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001126.inst 0x5e281885 //sha1su1 v5.16b,v4.16b
1127.inst 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1128.inst 0x5e280802 //sha1h v2.16b,v0.16b // 3
1129.inst 0x5e150060 //sha1c v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001130 add v21.4s,v17.4s,v5.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001131.inst 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1132.inst 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1133.inst 0x5e280803 //sha1h v3.16b,v0.16b // 4
1134.inst 0x5e140040 //sha1c v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001135 add v20.4s,v17.4s,v6.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001136.inst 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1137.inst 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1138.inst 0x5e280802 //sha1h v2.16b,v0.16b // 5
1139.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001140 add v21.4s,v17.4s,v7.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001141.inst 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1142.inst 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1143.inst 0x5e280803 //sha1h v3.16b,v0.16b // 6
1144.inst 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001145 add v20.4s,v17.4s,v4.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001146.inst 0x5e281885 //sha1su1 v5.16b,v4.16b
1147.inst 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1148.inst 0x5e280802 //sha1h v2.16b,v0.16b // 7
1149.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001150 add v21.4s,v17.4s,v5.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001151.inst 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1152.inst 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1153.inst 0x5e280803 //sha1h v3.16b,v0.16b // 8
1154.inst 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001155 add v20.4s,v18.4s,v6.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001156.inst 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1157.inst 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1158.inst 0x5e280802 //sha1h v2.16b,v0.16b // 9
1159.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001160 add v21.4s,v18.4s,v7.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001161.inst 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1162.inst 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1163.inst 0x5e280803 //sha1h v3.16b,v0.16b // 10
1164.inst 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001165 add v20.4s,v18.4s,v4.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001166.inst 0x5e281885 //sha1su1 v5.16b,v4.16b
1167.inst 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1168.inst 0x5e280802 //sha1h v2.16b,v0.16b // 11
1169.inst 0x5e152060 //sha1m v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001170 add v21.4s,v18.4s,v5.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001171.inst 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1172.inst 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1173.inst 0x5e280803 //sha1h v3.16b,v0.16b // 12
1174.inst 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001175 add v20.4s,v18.4s,v6.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001176.inst 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1177.inst 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1178.inst 0x5e280802 //sha1h v2.16b,v0.16b // 13
1179.inst 0x5e152060 //sha1m v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001180 add v21.4s,v19.4s,v7.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001181.inst 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1182.inst 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1183.inst 0x5e280803 //sha1h v3.16b,v0.16b // 14
1184.inst 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001185 add v20.4s,v19.4s,v4.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001186.inst 0x5e281885 //sha1su1 v5.16b,v4.16b
1187.inst 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1188.inst 0x5e280802 //sha1h v2.16b,v0.16b // 15
1189.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001190 add v21.4s,v19.4s,v5.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001191.inst 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1192.inst 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1193.inst 0x5e280803 //sha1h v3.16b,v0.16b // 16
1194.inst 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001195 add v20.4s,v19.4s,v6.4s
Adam Langleye9ada862015-05-11 17:20:37 -07001196.inst 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1197.inst 0x5e280802 //sha1h v2.16b,v0.16b // 17
1198.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001199 add v21.4s,v19.4s,v7.4s
1200
Adam Langleye9ada862015-05-11 17:20:37 -07001201.inst 0x5e280803 //sha1h v3.16b,v0.16b // 18
1202.inst 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001203
Adam Langleye9ada862015-05-11 17:20:37 -07001204.inst 0x5e280802 //sha1h v2.16b,v0.16b // 19
1205.inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
Adam Langleyd9e397b2015-01-22 14:27:53 -08001206
1207 add v1.4s,v1.4s,v2.4s
1208 add v0.4s,v0.4s,v22.4s
1209
1210 cbnz x2,.Loop_hw
1211
1212 st1 {v0.4s},[x0],#16
1213 st1 {v1.s}[0],[x0]
1214
1215 ldr x29,[sp],#16
1216 ret
1217.size sha1_block_armv8,.-sha1_block_armv8
1218.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
1224.LOPENSSL_armcap_P:
Robert Sloan8ff03552017-06-14 12:40:58 -07001225#ifdef __ILP32__
1226.long OPENSSL_armcap_P-.
1227#else
Adam Langleyd9e397b2015-01-22 14:27:53 -08001228.quad OPENSSL_armcap_P-.
Robert Sloan8ff03552017-06-14 12:40:58 -07001229#endif
Adam Langleye9ada862015-05-11 17:20:37 -07001230.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
1231.align 2
Adam Langleyd9e397b2015-01-22 14:27:53 -08001232.align 2
1233.comm OPENSSL_armcap_P,4,4
David Benjamin4969cc92016-04-22 15:02:23 -04001234#endif
Robert Sloan726e9d12018-09-11 11:45:04 -07001235#endif // !OPENSSL_NO_ASM