Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/lib/crypto/arm/sha1-armv4-large.S
26288 views
1
#define __ARM_ARCH__ __LINUX_ARM_ARCH__
2
@ SPDX-License-Identifier: GPL-2.0
3
4
@ This code is taken from the OpenSSL project but the author (Andy Polyakov)
5
@ has relicensed it under the GPLv2. Therefore this program is free software;
6
@ you can redistribute it and/or modify it under the terms of the GNU General
7
@ Public License version 2 as published by the Free Software Foundation.
8
@
9
@ The original headers, including the original license headers, are
10
@ included below for completeness.
11
12
@ ====================================================================
13
@ Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
14
@ project. The module is, however, dual licensed under OpenSSL and
15
@ CRYPTOGAMS licenses depending on where you obtain it. For further
16
@ details see https://www.openssl.org/~appro/cryptogams/.
17
@ ====================================================================
18
19
@ sha1_block procedure for ARMv4.
20
@
21
@ January 2007.
22
23
@ Size/performance trade-off
24
@ ====================================================================
25
@ impl size in bytes comp cycles[*] measured performance
26
@ ====================================================================
27
@ thumb 304 3212 4420
28
@ armv4-small 392/+29% 1958/+64% 2250/+96%
29
@ armv4-compact 740/+89% 1552/+26% 1840/+22%
30
@ armv4-large 1420/+92% 1307/+19% 1370/+34%[***]
31
@ full unroll ~5100/+260% ~1260/+4% ~1300/+5%
32
@ ====================================================================
33
@ thumb = same as 'small' but in Thumb instructions[**] and
34
@ with recurring code in two private functions;
35
@ small = detached Xload/update, loops are folded;
36
@ compact = detached Xload/update, 5x unroll;
37
@ large = interleaved Xload/update, 5x unroll;
38
@ full unroll = interleaved Xload/update, full unroll, estimated[!];
39
@
40
@ [*] Manually counted instructions in "grand" loop body. Measured
41
@ performance is affected by prologue and epilogue overhead,
42
@ i-cache availability, branch penalties, etc.
43
@ [**] While each Thumb instruction is twice smaller, they are not as
44
@ diverse as ARM ones: e.g., there are only two arithmetic
45
@ instructions with 3 arguments, no [fixed] rotate, addressing
46
@ modes are limited. As result it takes more instructions to do
47
@ the same job in Thumb, therefore the code is never twice as
48
@ small and always slower.
49
@ [***] which is also ~35% better than compiler generated code. Dual-
50
@ issue Cortex A8 core was measured to process input block in
51
@ ~990 cycles.
52
53
@ August 2010.
54
@
55
@ Rescheduling for dual-issue pipeline resulted in 13% improvement on
56
@ Cortex A8 core and in absolute terms ~870 cycles per input block
57
@ [or 13.6 cycles per byte].
58
59
@ February 2011.
60
@
61
@ Profiler-assisted and platform-specific optimization resulted in 10%
62
@ improvement on Cortex A8 core and 12.2 cycles per byte.
63
64
#include <linux/linkage.h>
65
66
.text
67
68
.align 2
69
ENTRY(sha1_block_data_order)
70
stmdb sp!,{r4-r12,lr}
71
add r2,r1,r2,lsl#6 @ r2 to point at the end of r1
72
ldmia r0,{r3,r4,r5,r6,r7}
73
.Lloop:
74
ldr r8,.LK_00_19
75
mov r14,sp
76
sub sp,sp,#15*4
77
mov r5,r5,ror#30
78
mov r6,r6,ror#30
79
mov r7,r7,ror#30 @ [6]
80
.L_00_15:
81
#if __ARM_ARCH__<7
82
ldrb r10,[r1,#2]
83
ldrb r9,[r1,#3]
84
ldrb r11,[r1,#1]
85
add r7,r8,r7,ror#2 @ E+=K_00_19
86
ldrb r12,[r1],#4
87
orr r9,r9,r10,lsl#8
88
eor r10,r5,r6 @ F_xx_xx
89
orr r9,r9,r11,lsl#16
90
add r7,r7,r3,ror#27 @ E+=ROR(A,27)
91
orr r9,r9,r12,lsl#24
92
#else
93
ldr r9,[r1],#4 @ handles unaligned
94
add r7,r8,r7,ror#2 @ E+=K_00_19
95
eor r10,r5,r6 @ F_xx_xx
96
add r7,r7,r3,ror#27 @ E+=ROR(A,27)
97
#ifdef __ARMEL__
98
rev r9,r9 @ byte swap
99
#endif
100
#endif
101
and r10,r4,r10,ror#2
102
add r7,r7,r9 @ E+=X[i]
103
eor r10,r10,r6,ror#2 @ F_00_19(B,C,D)
104
str r9,[r14,#-4]!
105
add r7,r7,r10 @ E+=F_00_19(B,C,D)
106
#if __ARM_ARCH__<7
107
ldrb r10,[r1,#2]
108
ldrb r9,[r1,#3]
109
ldrb r11,[r1,#1]
110
add r6,r8,r6,ror#2 @ E+=K_00_19
111
ldrb r12,[r1],#4
112
orr r9,r9,r10,lsl#8
113
eor r10,r4,r5 @ F_xx_xx
114
orr r9,r9,r11,lsl#16
115
add r6,r6,r7,ror#27 @ E+=ROR(A,27)
116
orr r9,r9,r12,lsl#24
117
#else
118
ldr r9,[r1],#4 @ handles unaligned
119
add r6,r8,r6,ror#2 @ E+=K_00_19
120
eor r10,r4,r5 @ F_xx_xx
121
add r6,r6,r7,ror#27 @ E+=ROR(A,27)
122
#ifdef __ARMEL__
123
rev r9,r9 @ byte swap
124
#endif
125
#endif
126
and r10,r3,r10,ror#2
127
add r6,r6,r9 @ E+=X[i]
128
eor r10,r10,r5,ror#2 @ F_00_19(B,C,D)
129
str r9,[r14,#-4]!
130
add r6,r6,r10 @ E+=F_00_19(B,C,D)
131
#if __ARM_ARCH__<7
132
ldrb r10,[r1,#2]
133
ldrb r9,[r1,#3]
134
ldrb r11,[r1,#1]
135
add r5,r8,r5,ror#2 @ E+=K_00_19
136
ldrb r12,[r1],#4
137
orr r9,r9,r10,lsl#8
138
eor r10,r3,r4 @ F_xx_xx
139
orr r9,r9,r11,lsl#16
140
add r5,r5,r6,ror#27 @ E+=ROR(A,27)
141
orr r9,r9,r12,lsl#24
142
#else
143
ldr r9,[r1],#4 @ handles unaligned
144
add r5,r8,r5,ror#2 @ E+=K_00_19
145
eor r10,r3,r4 @ F_xx_xx
146
add r5,r5,r6,ror#27 @ E+=ROR(A,27)
147
#ifdef __ARMEL__
148
rev r9,r9 @ byte swap
149
#endif
150
#endif
151
and r10,r7,r10,ror#2
152
add r5,r5,r9 @ E+=X[i]
153
eor r10,r10,r4,ror#2 @ F_00_19(B,C,D)
154
str r9,[r14,#-4]!
155
add r5,r5,r10 @ E+=F_00_19(B,C,D)
156
#if __ARM_ARCH__<7
157
ldrb r10,[r1,#2]
158
ldrb r9,[r1,#3]
159
ldrb r11,[r1,#1]
160
add r4,r8,r4,ror#2 @ E+=K_00_19
161
ldrb r12,[r1],#4
162
orr r9,r9,r10,lsl#8
163
eor r10,r7,r3 @ F_xx_xx
164
orr r9,r9,r11,lsl#16
165
add r4,r4,r5,ror#27 @ E+=ROR(A,27)
166
orr r9,r9,r12,lsl#24
167
#else
168
ldr r9,[r1],#4 @ handles unaligned
169
add r4,r8,r4,ror#2 @ E+=K_00_19
170
eor r10,r7,r3 @ F_xx_xx
171
add r4,r4,r5,ror#27 @ E+=ROR(A,27)
172
#ifdef __ARMEL__
173
rev r9,r9 @ byte swap
174
#endif
175
#endif
176
and r10,r6,r10,ror#2
177
add r4,r4,r9 @ E+=X[i]
178
eor r10,r10,r3,ror#2 @ F_00_19(B,C,D)
179
str r9,[r14,#-4]!
180
add r4,r4,r10 @ E+=F_00_19(B,C,D)
181
#if __ARM_ARCH__<7
182
ldrb r10,[r1,#2]
183
ldrb r9,[r1,#3]
184
ldrb r11,[r1,#1]
185
add r3,r8,r3,ror#2 @ E+=K_00_19
186
ldrb r12,[r1],#4
187
orr r9,r9,r10,lsl#8
188
eor r10,r6,r7 @ F_xx_xx
189
orr r9,r9,r11,lsl#16
190
add r3,r3,r4,ror#27 @ E+=ROR(A,27)
191
orr r9,r9,r12,lsl#24
192
#else
193
ldr r9,[r1],#4 @ handles unaligned
194
add r3,r8,r3,ror#2 @ E+=K_00_19
195
eor r10,r6,r7 @ F_xx_xx
196
add r3,r3,r4,ror#27 @ E+=ROR(A,27)
197
#ifdef __ARMEL__
198
rev r9,r9 @ byte swap
199
#endif
200
#endif
201
and r10,r5,r10,ror#2
202
add r3,r3,r9 @ E+=X[i]
203
eor r10,r10,r7,ror#2 @ F_00_19(B,C,D)
204
str r9,[r14,#-4]!
205
add r3,r3,r10 @ E+=F_00_19(B,C,D)
206
cmp r14,sp
207
bne .L_00_15 @ [((11+4)*5+2)*3]
208
sub sp,sp,#25*4
209
#if __ARM_ARCH__<7
210
ldrb r10,[r1,#2]
211
ldrb r9,[r1,#3]
212
ldrb r11,[r1,#1]
213
add r7,r8,r7,ror#2 @ E+=K_00_19
214
ldrb r12,[r1],#4
215
orr r9,r9,r10,lsl#8
216
eor r10,r5,r6 @ F_xx_xx
217
orr r9,r9,r11,lsl#16
218
add r7,r7,r3,ror#27 @ E+=ROR(A,27)
219
orr r9,r9,r12,lsl#24
220
#else
221
ldr r9,[r1],#4 @ handles unaligned
222
add r7,r8,r7,ror#2 @ E+=K_00_19
223
eor r10,r5,r6 @ F_xx_xx
224
add r7,r7,r3,ror#27 @ E+=ROR(A,27)
225
#ifdef __ARMEL__
226
rev r9,r9 @ byte swap
227
#endif
228
#endif
229
and r10,r4,r10,ror#2
230
add r7,r7,r9 @ E+=X[i]
231
eor r10,r10,r6,ror#2 @ F_00_19(B,C,D)
232
str r9,[r14,#-4]!
233
add r7,r7,r10 @ E+=F_00_19(B,C,D)
234
ldr r9,[r14,#15*4]
235
ldr r10,[r14,#13*4]
236
ldr r11,[r14,#7*4]
237
add r6,r8,r6,ror#2 @ E+=K_xx_xx
238
ldr r12,[r14,#2*4]
239
eor r9,r9,r10
240
eor r11,r11,r12 @ 1 cycle stall
241
eor r10,r4,r5 @ F_xx_xx
242
mov r9,r9,ror#31
243
add r6,r6,r7,ror#27 @ E+=ROR(A,27)
244
eor r9,r9,r11,ror#31
245
str r9,[r14,#-4]!
246
and r10,r3,r10,ror#2 @ F_xx_xx
247
@ F_xx_xx
248
add r6,r6,r9 @ E+=X[i]
249
eor r10,r10,r5,ror#2 @ F_00_19(B,C,D)
250
add r6,r6,r10 @ E+=F_00_19(B,C,D)
251
ldr r9,[r14,#15*4]
252
ldr r10,[r14,#13*4]
253
ldr r11,[r14,#7*4]
254
add r5,r8,r5,ror#2 @ E+=K_xx_xx
255
ldr r12,[r14,#2*4]
256
eor r9,r9,r10
257
eor r11,r11,r12 @ 1 cycle stall
258
eor r10,r3,r4 @ F_xx_xx
259
mov r9,r9,ror#31
260
add r5,r5,r6,ror#27 @ E+=ROR(A,27)
261
eor r9,r9,r11,ror#31
262
str r9,[r14,#-4]!
263
and r10,r7,r10,ror#2 @ F_xx_xx
264
@ F_xx_xx
265
add r5,r5,r9 @ E+=X[i]
266
eor r10,r10,r4,ror#2 @ F_00_19(B,C,D)
267
add r5,r5,r10 @ E+=F_00_19(B,C,D)
268
ldr r9,[r14,#15*4]
269
ldr r10,[r14,#13*4]
270
ldr r11,[r14,#7*4]
271
add r4,r8,r4,ror#2 @ E+=K_xx_xx
272
ldr r12,[r14,#2*4]
273
eor r9,r9,r10
274
eor r11,r11,r12 @ 1 cycle stall
275
eor r10,r7,r3 @ F_xx_xx
276
mov r9,r9,ror#31
277
add r4,r4,r5,ror#27 @ E+=ROR(A,27)
278
eor r9,r9,r11,ror#31
279
str r9,[r14,#-4]!
280
and r10,r6,r10,ror#2 @ F_xx_xx
281
@ F_xx_xx
282
add r4,r4,r9 @ E+=X[i]
283
eor r10,r10,r3,ror#2 @ F_00_19(B,C,D)
284
add r4,r4,r10 @ E+=F_00_19(B,C,D)
285
ldr r9,[r14,#15*4]
286
ldr r10,[r14,#13*4]
287
ldr r11,[r14,#7*4]
288
add r3,r8,r3,ror#2 @ E+=K_xx_xx
289
ldr r12,[r14,#2*4]
290
eor r9,r9,r10
291
eor r11,r11,r12 @ 1 cycle stall
292
eor r10,r6,r7 @ F_xx_xx
293
mov r9,r9,ror#31
294
add r3,r3,r4,ror#27 @ E+=ROR(A,27)
295
eor r9,r9,r11,ror#31
296
str r9,[r14,#-4]!
297
and r10,r5,r10,ror#2 @ F_xx_xx
298
@ F_xx_xx
299
add r3,r3,r9 @ E+=X[i]
300
eor r10,r10,r7,ror#2 @ F_00_19(B,C,D)
301
add r3,r3,r10 @ E+=F_00_19(B,C,D)
302
303
ldr r8,.LK_20_39 @ [+15+16*4]
304
cmn sp,#0 @ [+3], clear carry to denote 20_39
305
.L_20_39_or_60_79:
306
ldr r9,[r14,#15*4]
307
ldr r10,[r14,#13*4]
308
ldr r11,[r14,#7*4]
309
add r7,r8,r7,ror#2 @ E+=K_xx_xx
310
ldr r12,[r14,#2*4]
311
eor r9,r9,r10
312
eor r11,r11,r12 @ 1 cycle stall
313
eor r10,r5,r6 @ F_xx_xx
314
mov r9,r9,ror#31
315
add r7,r7,r3,ror#27 @ E+=ROR(A,27)
316
eor r9,r9,r11,ror#31
317
str r9,[r14,#-4]!
318
eor r10,r4,r10,ror#2 @ F_xx_xx
319
@ F_xx_xx
320
add r7,r7,r9 @ E+=X[i]
321
add r7,r7,r10 @ E+=F_20_39(B,C,D)
322
ldr r9,[r14,#15*4]
323
ldr r10,[r14,#13*4]
324
ldr r11,[r14,#7*4]
325
add r6,r8,r6,ror#2 @ E+=K_xx_xx
326
ldr r12,[r14,#2*4]
327
eor r9,r9,r10
328
eor r11,r11,r12 @ 1 cycle stall
329
eor r10,r4,r5 @ F_xx_xx
330
mov r9,r9,ror#31
331
add r6,r6,r7,ror#27 @ E+=ROR(A,27)
332
eor r9,r9,r11,ror#31
333
str r9,[r14,#-4]!
334
eor r10,r3,r10,ror#2 @ F_xx_xx
335
@ F_xx_xx
336
add r6,r6,r9 @ E+=X[i]
337
add r6,r6,r10 @ E+=F_20_39(B,C,D)
338
ldr r9,[r14,#15*4]
339
ldr r10,[r14,#13*4]
340
ldr r11,[r14,#7*4]
341
add r5,r8,r5,ror#2 @ E+=K_xx_xx
342
ldr r12,[r14,#2*4]
343
eor r9,r9,r10
344
eor r11,r11,r12 @ 1 cycle stall
345
eor r10,r3,r4 @ F_xx_xx
346
mov r9,r9,ror#31
347
add r5,r5,r6,ror#27 @ E+=ROR(A,27)
348
eor r9,r9,r11,ror#31
349
str r9,[r14,#-4]!
350
eor r10,r7,r10,ror#2 @ F_xx_xx
351
@ F_xx_xx
352
add r5,r5,r9 @ E+=X[i]
353
add r5,r5,r10 @ E+=F_20_39(B,C,D)
354
ldr r9,[r14,#15*4]
355
ldr r10,[r14,#13*4]
356
ldr r11,[r14,#7*4]
357
add r4,r8,r4,ror#2 @ E+=K_xx_xx
358
ldr r12,[r14,#2*4]
359
eor r9,r9,r10
360
eor r11,r11,r12 @ 1 cycle stall
361
eor r10,r7,r3 @ F_xx_xx
362
mov r9,r9,ror#31
363
add r4,r4,r5,ror#27 @ E+=ROR(A,27)
364
eor r9,r9,r11,ror#31
365
str r9,[r14,#-4]!
366
eor r10,r6,r10,ror#2 @ F_xx_xx
367
@ F_xx_xx
368
add r4,r4,r9 @ E+=X[i]
369
add r4,r4,r10 @ E+=F_20_39(B,C,D)
370
ldr r9,[r14,#15*4]
371
ldr r10,[r14,#13*4]
372
ldr r11,[r14,#7*4]
373
add r3,r8,r3,ror#2 @ E+=K_xx_xx
374
ldr r12,[r14,#2*4]
375
eor r9,r9,r10
376
eor r11,r11,r12 @ 1 cycle stall
377
eor r10,r6,r7 @ F_xx_xx
378
mov r9,r9,ror#31
379
add r3,r3,r4,ror#27 @ E+=ROR(A,27)
380
eor r9,r9,r11,ror#31
381
str r9,[r14,#-4]!
382
eor r10,r5,r10,ror#2 @ F_xx_xx
383
@ F_xx_xx
384
add r3,r3,r9 @ E+=X[i]
385
add r3,r3,r10 @ E+=F_20_39(B,C,D)
386
ARM( teq r14,sp ) @ preserve carry
387
THUMB( mov r11,sp )
388
THUMB( teq r14,r11 ) @ preserve carry
389
bne .L_20_39_or_60_79 @ [+((12+3)*5+2)*4]
390
bcs .L_done @ [+((12+3)*5+2)*4], spare 300 bytes
391
392
ldr r8,.LK_40_59
393
sub sp,sp,#20*4 @ [+2]
394
.L_40_59:
395
ldr r9,[r14,#15*4]
396
ldr r10,[r14,#13*4]
397
ldr r11,[r14,#7*4]
398
add r7,r8,r7,ror#2 @ E+=K_xx_xx
399
ldr r12,[r14,#2*4]
400
eor r9,r9,r10
401
eor r11,r11,r12 @ 1 cycle stall
402
eor r10,r5,r6 @ F_xx_xx
403
mov r9,r9,ror#31
404
add r7,r7,r3,ror#27 @ E+=ROR(A,27)
405
eor r9,r9,r11,ror#31
406
str r9,[r14,#-4]!
407
and r10,r4,r10,ror#2 @ F_xx_xx
408
and r11,r5,r6 @ F_xx_xx
409
add r7,r7,r9 @ E+=X[i]
410
add r7,r7,r10 @ E+=F_40_59(B,C,D)
411
add r7,r7,r11,ror#2
412
ldr r9,[r14,#15*4]
413
ldr r10,[r14,#13*4]
414
ldr r11,[r14,#7*4]
415
add r6,r8,r6,ror#2 @ E+=K_xx_xx
416
ldr r12,[r14,#2*4]
417
eor r9,r9,r10
418
eor r11,r11,r12 @ 1 cycle stall
419
eor r10,r4,r5 @ F_xx_xx
420
mov r9,r9,ror#31
421
add r6,r6,r7,ror#27 @ E+=ROR(A,27)
422
eor r9,r9,r11,ror#31
423
str r9,[r14,#-4]!
424
and r10,r3,r10,ror#2 @ F_xx_xx
425
and r11,r4,r5 @ F_xx_xx
426
add r6,r6,r9 @ E+=X[i]
427
add r6,r6,r10 @ E+=F_40_59(B,C,D)
428
add r6,r6,r11,ror#2
429
ldr r9,[r14,#15*4]
430
ldr r10,[r14,#13*4]
431
ldr r11,[r14,#7*4]
432
add r5,r8,r5,ror#2 @ E+=K_xx_xx
433
ldr r12,[r14,#2*4]
434
eor r9,r9,r10
435
eor r11,r11,r12 @ 1 cycle stall
436
eor r10,r3,r4 @ F_xx_xx
437
mov r9,r9,ror#31
438
add r5,r5,r6,ror#27 @ E+=ROR(A,27)
439
eor r9,r9,r11,ror#31
440
str r9,[r14,#-4]!
441
and r10,r7,r10,ror#2 @ F_xx_xx
442
and r11,r3,r4 @ F_xx_xx
443
add r5,r5,r9 @ E+=X[i]
444
add r5,r5,r10 @ E+=F_40_59(B,C,D)
445
add r5,r5,r11,ror#2
446
ldr r9,[r14,#15*4]
447
ldr r10,[r14,#13*4]
448
ldr r11,[r14,#7*4]
449
add r4,r8,r4,ror#2 @ E+=K_xx_xx
450
ldr r12,[r14,#2*4]
451
eor r9,r9,r10
452
eor r11,r11,r12 @ 1 cycle stall
453
eor r10,r7,r3 @ F_xx_xx
454
mov r9,r9,ror#31
455
add r4,r4,r5,ror#27 @ E+=ROR(A,27)
456
eor r9,r9,r11,ror#31
457
str r9,[r14,#-4]!
458
and r10,r6,r10,ror#2 @ F_xx_xx
459
and r11,r7,r3 @ F_xx_xx
460
add r4,r4,r9 @ E+=X[i]
461
add r4,r4,r10 @ E+=F_40_59(B,C,D)
462
add r4,r4,r11,ror#2
463
ldr r9,[r14,#15*4]
464
ldr r10,[r14,#13*4]
465
ldr r11,[r14,#7*4]
466
add r3,r8,r3,ror#2 @ E+=K_xx_xx
467
ldr r12,[r14,#2*4]
468
eor r9,r9,r10
469
eor r11,r11,r12 @ 1 cycle stall
470
eor r10,r6,r7 @ F_xx_xx
471
mov r9,r9,ror#31
472
add r3,r3,r4,ror#27 @ E+=ROR(A,27)
473
eor r9,r9,r11,ror#31
474
str r9,[r14,#-4]!
475
and r10,r5,r10,ror#2 @ F_xx_xx
476
and r11,r6,r7 @ F_xx_xx
477
add r3,r3,r9 @ E+=X[i]
478
add r3,r3,r10 @ E+=F_40_59(B,C,D)
479
add r3,r3,r11,ror#2
480
cmp r14,sp
481
bne .L_40_59 @ [+((12+5)*5+2)*4]
482
483
ldr r8,.LK_60_79
484
sub sp,sp,#20*4
485
cmp sp,#0 @ set carry to denote 60_79
486
b .L_20_39_or_60_79 @ [+4], spare 300 bytes
487
.L_done:
488
add sp,sp,#80*4 @ "deallocate" stack frame
489
ldmia r0,{r8,r9,r10,r11,r12}
490
add r3,r8,r3
491
add r4,r9,r4
492
add r5,r10,r5,ror#2
493
add r6,r11,r6,ror#2
494
add r7,r12,r7,ror#2
495
stmia r0,{r3,r4,r5,r6,r7}
496
teq r1,r2
497
bne .Lloop @ [+18], total 1307
498
499
ldmia sp!,{r4-r12,pc}
500
.align 2
501
.LK_00_19: .word 0x5a827999
502
.LK_20_39: .word 0x6ed9eba1
503
.LK_40_59: .word 0x8f1bbcdc
504
.LK_60_79: .word 0xca62c1d6
505
ENDPROC(sha1_block_data_order)
506
.asciz "SHA1 block transform for ARMv4, CRYPTOGAMS by <[email protected]>"
507
.align 2
508
509