]> git.cryptolib.org Git - arm-crypto-lib.git/blob - bmw/bmw_small-asm-cstub.s
forgotten bmw stuff
[arm-crypto-lib.git] / bmw / bmw_small-asm-cstub.s
1         .syntax unified
2         .thumb
3         .file   "bmw_small-asm-cstub.c"
4         .text
5         .align  2
6         .global s32_0
7         .thumb
8         .thumb_func
9         .type   s32_0, %function
10 s32_0:
11         @ args = 0, pretend = 0, frame = 0
12         @ frame_needed = 0, uses_anonymous_args = 0
13         @ link register save eliminated.
14         mov     r3, r0
15         lsrs    r0, r0, #1
16         eor     r0, r0, r3, lsl #3
17         eor     r0, r0, r3, ror #28
18         eor     r0, r0, r3, ror #13
19         bx      lr
20         .size   s32_0, .-s32_0
21         .align  2
22         .global s32_1
23         .thumb
24         .thumb_func
25         .type   s32_1, %function
26 s32_1:
27         @ args = 0, pretend = 0, frame = 0
28         @ frame_needed = 0, uses_anonymous_args = 0
29         @ link register save eliminated.
30         mov     r3, r0
31         lsrs    r0, r0, #1
32         eor     r0, r0, r3, lsl #2
33         eor     r0, r0, r3, ror #24
34         eor     r0, r0, r3, ror #9
35         bx      lr
36         .size   s32_1, .-s32_1
37         .align  2
38         .global s32_2
39         .thumb
40         .thumb_func
41         .type   s32_2, %function
42 s32_2:
43         @ args = 0, pretend = 0, frame = 0
44         @ frame_needed = 0, uses_anonymous_args = 0
45         @ link register save eliminated.
46         mov     r3, r0
47         lsrs    r0, r0, #2
48         eor     r0, r0, r3, lsl #1
49         eor     r0, r0, r3, ror #20
50         eor     r0, r0, r3, ror #7
51         bx      lr
52         .size   s32_2, .-s32_2
53         .align  2
54         .global s32_3
55         .thumb
56         .thumb_func
57         .type   s32_3, %function
58 s32_3:
59         @ args = 0, pretend = 0, frame = 0
60         @ frame_needed = 0, uses_anonymous_args = 0
61         @ link register save eliminated.
62         mov     r3, r0
63         lsrs    r0, r0, #2
64         eor     r0, r0, r3, lsl #2
65         eor     r0, r0, r3, ror #17
66         eor     r0, r0, r3, ror #3
67         bx      lr
68         .size   s32_3, .-s32_3
69         .align  2
70         .global s32_4
71         .thumb
72         .thumb_func
73         .type   s32_4, %function
74 s32_4:
75         @ args = 0, pretend = 0, frame = 0
76         @ frame_needed = 0, uses_anonymous_args = 0
77         @ link register save eliminated.
78         eor     r0, r0, r0, lsr #1
79         bx      lr
80         .size   s32_4, .-s32_4
81         .align  2
82         .global s32_5
83         .thumb
84         .thumb_func
85         .type   s32_5, %function
86 s32_5:
87         @ args = 0, pretend = 0, frame = 0
88         @ frame_needed = 0, uses_anonymous_args = 0
89         @ link register save eliminated.
90         eor     r0, r0, r0, lsr #2
91         bx      lr
92         .size   s32_5, .-s32_5
93         .align  2
94         .thumb
95         .thumb_func
96         .type   bmw_small_expand1, %function
97 bmw_small_expand1:
98         @ args = 0, pretend = 0, frame = 32
99         @ frame_needed = 0, uses_anonymous_args = 0
100         @ link register save eliminated.
101         uxtb    r0, r0
102         and     ip, r0, #15
103         push    {r4, r5, r6, r7, r8, r9, sl, fp}
104         ldr     r4, [r2, ip, lsl #2]
105         mvn     sl, ip
106         add     sl, sl, #32
107         add     ip, ip, #1
108         lsr     sl, r4, sl
109         lsl     r4, r4, ip
110         add     fp, r0, #3
111         add     r7, r0, #10
112         and     r5, fp, #15
113         and     r8, r7, #15
114         ldr     r6, [r2, r5, lsl #2]
115         ldr     r9, [r2, r8, lsl #2]
116         ldr     r2, .L15
117         orr     sl, sl, r4
118         ldr     ip, [r2, r0, lsl #2]
119         mvn     r2, r5
120         add     sl, sl, ip
121         adds    r5, r5, #1
122         adds    r2, r2, #32
123         mvn     ip, r8
124         lsrs    r2, r6, r2
125         add     r8, r8, #1
126         lsls    r6, r6, r5
127         add     ip, ip, #32
128         lsr     ip, r9, ip
129         lsl     r9, r9, r8
130         sub     sp, sp, #32
131         orrs    r2, r2, r6
132         str     r7, [sp, #0]
133         adds    r7, r0, #7
134         orr     ip, ip, r9
135         add     sl, sl, r2
136         and     r2, r7, #15
137         rsb     sl, ip, sl
138         ldr     ip, [r3, r2, lsl #2]
139         adds    r2, r0, #2
140         ldr     r4, [r1, r2, lsl #2]
141         adds    r3, r0, #1
142         adds    r2, r0, #5
143         ldr     r9, [r1, r2, lsl #2]
144         eor     sl, sl, ip
145         add     r2, r0, #9
146         ldr     ip, [r1, r3, lsl #2]
147         adds    r3, r0, #4
148         ldr     r8, [r1, r3, lsl #2]
149         ldr     r2, [r1, r2, lsl #2]
150         adds    r3, r0, #6
151         ldr     r6, [r1, fp, lsl #2]
152         ldr     fp, [r1, r3, lsl #2]
153         add     r3, r0, #8
154         ldr     r3, [r1, r3, lsl #2]
155         str     r2, [sp, #8]
156         ldr     r2, [sp, #0]
157         str     r3, [sp, #4]
158         ldr     r2, [r1, r2, lsl #2]
159         add     r3, r0, #11
160         ldr     r3, [r1, r3, lsl #2]
161         str     r2, [sp, #12]
162         add     r2, r0, #12
163         ldr     r2, [r1, r2, lsl #2]
164         str     r3, [sp, #16]
165         add     r3, r0, #13
166         ldr     r3, [r1, r3, lsl #2]
167         ldr     r5, [r1, r0, lsl #2]
168         str     r2, [sp, #20]
169         add     r2, r0, #14
170         adds    r0, r0, #15
171         ldr     r7, [r1, r7, lsl #2]
172         ldr     r2, [r1, r2, lsl #2]
173         str     r3, [sp, #24]
174         ldr     r1, [r1, r0, lsl #2]
175         lsrs    r3, r4, #2
176         lsr     r0, ip, #2
177         eor     r0, r0, ip, lsl #1
178         eor     r3, r3, r4, lsl #2
179         eor     r0, r0, ip, ror #20
180         eor     r3, r3, r4, ror #17
181         str     r2, [sp, #28]
182         eor     r3, r3, r4, ror #3
183         lsrs    r2, r5, #1
184         eor     r0, r0, ip, ror #7
185         adds    r0, r0, r3
186         eor     r2, r2, r5, lsl #2
187         lsrs    r3, r6, #1
188         eor     r2, r2, r5, ror #24
189         eor     r3, r3, r6, lsl #3
190         eor     r2, r2, r5, ror #9
191         eor     r3, r3, r6, ror #28
192         adds    r0, r0, r2
193         eor     r3, r3, r6, ror #13
194         lsr     r2, r8, #1
195         adds    r0, r0, r3
196         eor     r2, r2, r8, lsl #2
197         lsr     r3, r9, #2
198         eor     r2, r2, r8, ror #24
199         eor     r3, r3, r9, lsl #1
200         eor     r2, r2, r8, ror #9
201         eor     r3, r3, r9, ror #20
202         adds    r0, r0, r2
203         eor     r3, r3, r9, ror #7
204         lsr     r2, fp, #2
205         adds    r0, r0, r3
206         eor     r2, r2, fp, lsl #2
207         lsrs    r3, r7, #1
208         eor     r2, r2, fp, ror #17
209         eor     r3, r3, r7, lsl #3
210         eor     r2, r2, fp, ror #3
211         eor     r3, r3, r7, ror #28
212         adds    r0, r0, r2
213         eor     r3, r3, r7, ror #13
214         adds    r0, r0, r3
215         ldr     r3, [sp, #4]
216         ldr     r7, [sp, #8]
217         lsrs    r2, r3, #1
218         eor     r2, r2, r3, lsl #2
219         eor     r2, r2, r3, ror #24
220         eor     r2, r2, r3, ror #9
221         lsrs    r3, r7, #2
222         eor     r3, r3, r7, lsl #1
223         eor     r3, r3, r7, ror #20
224         adds    r0, r0, r2
225         eor     r3, r3, r7, ror #7
226         adds    r0, r0, r3
227         ldr     r3, [sp, #12]
228         ldr     r7, [sp, #16]
229         lsrs    r2, r3, #2
230         eor     r2, r2, r3, lsl #2
231         eor     r2, r2, r3, ror #17
232         eor     r2, r2, r3, ror #3
233         lsrs    r3, r7, #1
234         eor     r3, r3, r7, lsl #3
235         eor     r3, r3, r7, ror #28
236         adds    r0, r0, r2
237         eor     r3, r3, r7, ror #13
238         adds    r0, r0, r3
239         ldr     r3, [sp, #20]
240         ldr     r7, [sp, #24]
241         lsrs    r2, r3, #1
242         eor     r2, r2, r3, lsl #2
243         eor     r2, r2, r3, ror #24
244         eor     r2, r2, r3, ror #9
245         adds    r0, r0, r2
246         lsrs    r3, r7, #2
247         eor     r3, r3, r7, lsl #1
248         eor     r3, r3, r7, ror #20
249         eor     r3, r3, r7, ror #7
250         adds    r0, r0, r3
251         ldr     r3, [sp, #28]
252         lsrs    r2, r3, #2
253         eor     r2, r2, r3, lsl #2
254         eor     r2, r2, r3, ror #17
255         eor     r2, r2, r3, ror #3
256         lsrs    r3, r1, #1
257         eor     r3, r3, r1, lsl #3
258         eor     r3, r3, r1, ror #28
259         adds    r0, r0, r2
260         eor     r3, r3, r1, ror #13
261         adds    r0, r0, r3
262         add     r0, r0, sl
263         add     sp, sp, #32
264         pop     {r4, r5, r6, r7, r8, r9, sl, fp}
265         bx      lr
266 .L16:
267         .align  2
268 .L15:
269         .word   k_lut
270         .size   bmw_small_expand1, .-bmw_small_expand1
271         .align  2
272         .thumb
273         .thumb_func
274         .type   bmw_small_f0, %function
275 bmw_small_f0:
276         @ args = 0, pretend = 0, frame = 0
277         @ frame_needed = 0, uses_anonymous_args = 0
278         @ link register save eliminated.
279         push    {r4, r5}
280         mov     r5, r0
281         mov     r4, r1
282         mov     r0, r2
283         movs    r1, #0
284 .L18:
285         ldr     r3, [r4, r1]
286         ldr     r2, [r0, r1]
287         eors    r3, r3, r2
288         str     r3, [r4, r1]
289         adds    r1, r1, #4
290         cmp     r1, #64
291         bne     .L18
292         ldr     r2, [r4, #20]
293         ldr     r3, [r4, #40]
294         ldr     r1, [r4, #52]
295         adds    r3, r3, r2
296         ldr     r2, [r4, #56]
297         adds    r3, r3, r1
298         ldr     r1, [r4, #28]
299         adds    r3, r3, r2
300         subs    r3, r3, r1
301         str     r3, [r5, #0]
302         ldr     r3, [r4, #24]
303         ldr     r2, [r4, #44]
304         ldr     r1, [r4, #56]
305         adds    r2, r2, r3
306         ldr     r3, [r4, #60]
307         adds    r2, r2, r1
308         ldr     r1, [r4, #32]
309         subs    r2, r2, r3
310         subs    r2, r2, r1
311         str     r2, [r5, #4]
312         ldr     r2, [r4, #36]
313         ldr     r3, [r4, #28]
314         ldr     r1, [r4, #0]
315         adds    r3, r3, r2
316         ldr     r2, [r4, #60]
317         adds    r3, r3, r1
318         ldr     r1, [r4, #48]
319         adds    r3, r3, r2
320         subs    r3, r3, r1
321         str     r3, [r5, #8]
322         ldr     r3, [r4, #52]
323         ldr     r2, [r4, #32]
324         ldr     r1, [r4, #0]
325         adds    r2, r2, r3
326         ldr     r3, [r4, #4]
327         adds    r2, r2, r1
328         ldr     r1, [r4, #40]
329         subs    r2, r2, r3
330         subs    r2, r2, r1
331         str     r2, [r5, #12]
332         ldr     r2, [r4, #4]
333         ldr     r3, [r4, #8]
334         ldr     r1, [r4, #36]
335         adds    r3, r3, r2
336         ldr     r2, [r4, #56]
337         adds    r3, r3, r1
338         ldr     r1, [r4, #44]
339         subs    r3, r3, r2
340         subs    r3, r3, r1
341         str     r3, [r5, #16]
342         ldr     r3, [r4, #12]
343         ldr     r2, [r4, #40]
344         ldr     r1, [r4, #60]
345         adds    r2, r2, r3
346         ldr     r3, [r4, #8]
347         adds    r2, r2, r1
348         ldr     r1, [r4, #48]
349         subs    r2, r2, r3
350         subs    r2, r2, r1
351         str     r2, [r5, #20]
352         ldr     r2, [r4, #0]
353         ldr     r3, [r4, #16]
354         ldr     r1, [r4, #44]
355         subs    r3, r3, r2
356         ldr     r2, [r4, #52]
357         subs    r3, r3, r1
358         ldr     r1, [r4, #12]
359         adds    r3, r3, r2
360         subs    r3, r3, r1
361         str     r3, [r5, #24]
362         ldr     r3, [r4, #16]
363         ldr     r2, [r4, #4]
364         ldr     r1, [r4, #20]
365         subs    r2, r2, r3
366         ldr     r3, [r4, #48]
367         subs    r2, r2, r1
368         ldr     r1, [r4, #56]
369         subs    r2, r2, r3
370         subs    r2, r2, r1
371         str     r2, [r5, #28]
372         ldr     r2, [r4, #20]
373         ldr     r3, [r4, #8]
374         ldr     r1, [r4, #60]
375         subs    r3, r3, r2
376         ldr     r2, [r4, #52]
377         subs    r3, r3, r1
378         ldr     r1, [r4, #24]
379         adds    r3, r3, r2
380         subs    r3, r3, r1
381         str     r3, [r5, #32]
382         ldr     r3, [r4, #56]
383         ldr     r2, [r4, #24]
384         ldr     r1, [r4, #0]
385         adds    r2, r2, r3
386         ldr     r3, [r4, #12]
387         adds    r2, r2, r1
388         ldr     r1, [r4, #28]
389         subs    r2, r2, r3
390         subs    r2, r2, r1
391         str     r2, [r5, #36]
392         ldr     r2, [r4, #4]
393         ldr     r3, [r4, #32]
394         ldr     r1, [r4, #28]
395         subs    r3, r3, r2
396         ldr     r2, [r4, #60]
397         subs    r3, r3, r1
398         ldr     r1, [r4, #16]
399         adds    r3, r3, r2
400         subs    r3, r3, r1
401         str     r3, [r5, #40]
402         ldr     r3, [r4, #0]
403         ldr     r2, [r4, #32]
404         ldr     r1, [r4, #20]
405         subs    r2, r2, r3
406         ldr     r3, [r4, #36]
407         subs    r2, r2, r1
408         ldr     r1, [r4, #8]
409         adds    r2, r2, r3
410         subs    r2, r2, r1
411         str     r2, [r5, #44]
412         ldr     r2, [r4, #4]
413         ldr     r3, [r4, #12]
414         ldr     r1, [r4, #40]
415         adds    r3, r3, r2
416         ldr     r2, [r4, #36]
417         adds    r3, r3, r1
418         ldr     r1, [r4, #24]
419         subs    r3, r3, r2
420         subs    r3, r3, r1
421         str     r3, [r5, #48]
422         ldr     r3, [r4, #8]
423         ldr     r2, [r4, #16]
424         ldr     r1, [r4, #28]
425         adds    r2, r2, r3
426         ldr     r3, [r4, #40]
427         adds    r2, r2, r1
428         ldr     r1, [r4, #44]
429         adds    r2, r2, r3
430         adds    r2, r2, r1
431         str     r2, [r5, #52]
432         ldr     r2, [r4, #12]
433         ldr     r3, [r4, #32]
434         ldr     r1, [r4, #48]
435         adds    r3, r3, r2
436         ldr     r2, [r4, #44]
437         subs    r3, r3, r1
438         ldr     r1, [r4, #20]
439         subs    r3, r3, r2
440         subs    r3, r3, r1
441         str     r3, [r5, #56]
442         ldr     r2, [r4, #36]
443         ldr     r3, [r4, #24]
444         ldr     r1, [r4, #52]
445         rsb     r2, r2, #0
446         subs    r2, r2, r3
447         adds    r2, r2, r1
448         ldr     r3, [r4, #48]
449         ldr     r1, [r4, #16]
450         subs    r3, r3, r1
451         ldr     r1, [r5, #0]
452         adds    r2, r2, r3
453         lsrs    r3, r1, #1
454         eor     r3, r3, r1, lsl #3
455         str     r2, [r5, #60]
456         eor     r3, r3, r1, ror #28
457         ldr     r2, [r5, #4]
458         eor     r3, r3, r1, ror #13
459         str     r3, [r5, #0]
460         lsrs    r3, r2, #1
461         eor     r3, r3, r2, lsl #2
462         eor     r3, r3, r2, ror #24
463         eor     r3, r3, r2, ror #9
464         ldr     r2, [r5, #8]
465         str     r3, [r5, #4]
466         lsrs    r3, r2, #2
467         eor     r3, r3, r2, lsl #1
468         eor     r3, r3, r2, ror #20
469         eor     r3, r3, r2, ror #7
470         ldr     r2, [r5, #12]
471         str     r3, [r5, #8]
472         lsrs    r3, r2, #2
473         eor     r3, r3, r2, lsl #2
474         eor     r3, r3, r2, ror #17
475         eor     r3, r3, r2, ror #3
476         ldr     r2, [r5, #16]
477         str     r3, [r5, #12]
478         eor     r2, r2, r2, lsr #1
479         str     r2, [r5, #16]
480         ldr     r1, [r5, #20]
481         ldr     r2, [r5, #24]
482         lsrs    r3, r1, #1
483         eor     r3, r3, r1, lsl #3
484         eor     r3, r3, r1, ror #28
485         eor     r3, r3, r1, ror #13
486         str     r3, [r5, #20]
487         lsrs    r3, r2, #1
488         eor     r3, r3, r2, lsl #2
489         eor     r3, r3, r2, ror #24
490         eor     r3, r3, r2, ror #9
491         ldr     r2, [r5, #28]
492         str     r3, [r5, #24]
493         lsrs    r3, r2, #2
494         eor     r3, r3, r2, lsl #1
495         eor     r3, r3, r2, ror #20
496         eor     r3, r3, r2, ror #7
497         ldr     r2, [r5, #32]
498         str     r3, [r5, #28]
499         lsrs    r3, r2, #2
500         eor     r3, r3, r2, lsl #2
501         ldr     r1, [r5, #40]
502         eor     r3, r3, r2, ror #17
503         eor     r3, r3, r2, ror #3
504         ldr     r2, [r5, #36]
505         str     r3, [r5, #32]
506         lsrs    r3, r1, #1
507         eor     r2, r2, r2, lsr #1
508         eor     r3, r3, r1, lsl #3
509         eor     r3, r3, r1, ror #28
510         str     r2, [r5, #36]
511         ldr     r2, [r5, #44]
512         eor     r3, r3, r1, ror #13
513         str     r3, [r5, #40]
514         lsrs    r3, r2, #1
515         eor     r3, r3, r2, lsl #2
516         eor     r3, r3, r2, ror #24
517         eor     r3, r3, r2, ror #9
518         ldr     r2, [r5, #48]
519         str     r3, [r5, #44]
520         lsrs    r3, r2, #2
521         eor     r3, r3, r2, lsl #1
522         eor     r3, r3, r2, ror #20
523         eor     r3, r3, r2, ror #7
524         ldr     r2, [r5, #52]
525         str     r3, [r5, #48]
526         lsrs    r3, r2, #2
527         eor     r3, r3, r2, lsl #2
528         ldr     r1, [r5, #60]
529         eor     r3, r3, r2, ror #17
530         eor     r3, r3, r2, ror #3
531         str     r3, [r5, #52]
532         lsrs    r3, r1, #1
533         ldr     r2, [r5, #56]
534         eor     r3, r3, r1, lsl #3
535         eor     r3, r3, r1, ror #28
536         eor     r3, r3, r1, ror #13
537         eor     r2, r2, r2, lsr #1
538         str     r2, [r5, #56]
539         str     r3, [r5, #60]
540         movs    r1, #0
541 .L19:
542         ldr     r3, [r4, r1]
543         ldr     r2, [r0, r1]
544         eors    r3, r3, r2
545         str     r3, [r4, r1]
546         adds    r1, r1, #4
547         cmp     r1, #64
548         bne     .L19
549         mov     ip, #0
550         movs    r0, #1
551 .L20:
552         and     r3, r0, #15
553         ldr     r2, [r5, ip]
554         ldr     r1, [r4, r3, lsl #2]
555         adds    r0, r0, #1
556         adds    r2, r2, r1
557         str     r2, [r5, ip]
558         add     ip, ip, #4
559         cmp     ip, #64
560         bne     .L20
561         pop     {r4, r5}
562         bx      lr
563         .size   bmw_small_f0, .-bmw_small_f0
564         .align  2
565         .thumb
566         .thumb_func
567         .type   bmw_small_f1, %function
568 bmw_small_f1:
569         @ args = 0, pretend = 0, frame = 4
570         @ frame_needed = 0, uses_anonymous_args = 0
571         push    {r4, r5, r6, r7, r8, r9, sl, fp, lr}
572         sub     sp, sp, #4
573         mov     r4, r0
574         mov     fp, r1
575         str     r2, [sp, #0]
576         mov     r1, r4
577         mov     r2, fp
578         ldr     r3, [sp, #0]
579         movs    r0, #0
580         bl      bmw_small_expand1
581         mov     r1, r4
582         str     r0, [r4, #64]
583         mov     r2, fp
584         movs    r0, #1
585         ldr     r3, [sp, #0]
586         bl      bmw_small_expand1
587         ldr     r9, .L30
588         str     r0, [r4, #68]
589         mov     lr, r4
590         movs    r6, #0
591         mov     sl, #2
592         mov     r8, #5
593         movs    r7, #12
594 .L27:
595         and     r3, sl, #15
596         ldr     r2, [fp, r3, lsl #2]
597         mvn     r0, r3
598         and     r1, r8, #15
599         adds    r3, r3, #1
600         adds    r0, r0, #32
601         ldr     ip, [fp, r1, lsl #2]
602         lsrs    r0, r2, r0
603         lsls    r2, r2, r3
604         mvn     r3, r1
605         adds    r3, r3, #32
606         adds    r1, r1, #1
607         lsr     r3, ip, r3
608         lsl     ip, ip, r1
609         and     r4, r7, #15
610         orrs    r0, r0, r2
611         orr     r3, r3, ip
612         ldr     r5, [fp, r4, lsl #2]
613         adds    r0, r0, r3
614         mvn     r3, r4
615         adds    r3, r3, #32
616         adds    r4, r4, #1
617         lsrs    r3, r5, r3
618         lsls    r5, r5, r4
619         ldr     r2, [r9, #8]
620         ldr     r1, [sp, #0]
621         adds    r0, r0, r2
622         add     r2, r6, #9
623         orrs    r3, r3, r5
624         and     r2, r2, #15
625         subs    r0, r0, r3
626         ldr     r3, [r1, r2, lsl #2]
627         ldr     r2, [lr, #8]
628         eors    r0, r0, r3
629         ldr     r3, [lr, #16]
630         ldr     r1, [lr, #24]
631         adds    r3, r3, r2
632         ldr     r2, [lr, #32]
633         adds    r3, r3, r1
634         ldr     r1, [lr, #40]
635         adds    r3, r3, r2
636         ldr     r2, [lr, #48]
637         adds    r3, r3, r1
638         ldr     r1, [lr, #56]
639         adds    r3, r3, r2
640         ldr     r2, [lr, #12]
641         adds    r3, r3, r1
642         ldr     r1, [lr, #20]
643         add     r3, r3, r2, ror #29
644         ldr     r2, [lr, #28]
645         add     r3, r3, r1, ror #25
646         ldr     r1, [lr, #36]
647         add     r3, r3, r2, ror #19
648         ldr     r2, [lr, #44]
649         add     r3, r3, r1, ror #16
650         ldr     r1, [lr, #52]
651         ldr     ip, [lr, #64]
652         add     r3, r3, r2, ror #13
653         ldr     r2, [lr, #60]
654         ldr     r4, [lr, #68]
655         add     r3, r3, r1, ror #9
656         add     r3, r3, r2, ror #5
657         eor     ip, ip, ip, lsr #1
658         add     r3, r3, ip
659         eor     r4, r4, r4, lsr #2
660         adds    r3, r3, r4
661         adds    r6, r6, #1
662         adds    r3, r3, r0
663         adds    r7, r7, #1
664         cmp     r6, #14
665         str     r3, [lr, #72]
666         add     sl, sl, #1
667         add     r8, r8, #1
668         add     r9, r9, #4
669         add     lr, lr, #4
670         bne     .L27
671         add     sp, sp, #4
672         pop     {r4, r5, r6, r7, r8, r9, sl, fp, pc}
673 .L31:
674         .align  2
675 .L30:
676         .word   k_lut
677         .size   bmw_small_f1, .-bmw_small_f1
678         .align  2
679         .global bmw224_init
680         .thumb
681         .thumb_func
682         .type   bmw224_init, %function
683 bmw224_init:
684         @ args = 0, pretend = 0, frame = 0
685         @ frame_needed = 0, uses_anonymous_args = 0
686         @ link register save eliminated.
687         ldr     r3, .L36
688         mov     r2, r0
689         str     r3, [r0, #0]
690         add     r1, r0, #60
691 .L33:
692         ldr     r3, [r2, #0]
693         add     r3, r3, #67372036
694         str     r3, [r2, #4]!
695         cmp     r2, r1
696         bne     .L33
697         movs    r3, #0
698         str     r3, [r0, #64]
699         bx      lr
700 .L37:
701         .align  2
702 .L36:
703         .word   66051
704         .size   bmw224_init, .-bmw224_init
705         .align  2
706         .global bmw256_init
707         .thumb
708         .thumb_func
709         .type   bmw256_init, %function
710 bmw256_init:
711         @ args = 0, pretend = 0, frame = 0
712         @ frame_needed = 0, uses_anonymous_args = 0
713         @ link register save eliminated.
714         ldr     r3, .L42
715         mov     r2, r0
716         str     r3, [r0, #0]
717         add     r1, r0, #60
718 .L39:
719         ldr     r3, [r2, #0]
720         add     r3, r3, #67372036
721         str     r3, [r2, #4]!
722         cmp     r2, r1
723         bne     .L39
724         movs    r3, #0
725         str     r3, [r0, #64]
726         bx      lr
727 .L43:
728         .align  2
729 .L42:
730         .word   1078018627
731         .size   bmw256_init, .-bmw256_init
732         .align  2
733         .global bmw256_ctx2hash
734         .thumb
735         .thumb_func
736         .type   bmw256_ctx2hash, %function
737 bmw256_ctx2hash:
738         @ args = 0, pretend = 0, frame = 0
739         @ frame_needed = 0, uses_anonymous_args = 0
740         push    {lr}
741         adds    r1, r1, #32
742         movs    r2, #32
743         bl      memcpy
744         pop     {pc}
745         .size   bmw256_ctx2hash, .-bmw256_ctx2hash
746         .align  2
747         .global bmw224_ctx2hash
748         .thumb
749         .thumb_func
750         .type   bmw224_ctx2hash, %function
751 bmw224_ctx2hash:
752         @ args = 0, pretend = 0, frame = 0
753         @ frame_needed = 0, uses_anonymous_args = 0
754         push    {lr}
755         adds    r1, r1, #36
756         movs    r2, #28
757         bl      memcpy
758         pop     {pc}
759         .size   bmw224_ctx2hash, .-bmw224_ctx2hash
760         .align  2
761         .thumb
762         .thumb_func
763         .type   bmw_small_f2, %function
764 bmw_small_f2:
765         @ args = 0, pretend = 0, frame = 0
766         @ frame_needed = 0, uses_anonymous_args = 0
767         push    {r4, r5, r6, r7, r8, lr}
768         mov     r8, #0
769         mov     r5, r0
770         mov     r6, r1
771         mov     r0, r8
772         mov     r1, r2
773 .L49:
774         add     r3, r6, r0
775         ldr     r2, [r3, #64]
776         adds    r0, r0, #4
777         cmp     r0, #32
778         eor     r8, r8, r2
779         bne     .L49
780         mov     r7, r8
781         subs    r0, r0, #32
782 .L50:
783         add     r3, r6, r0
784         ldr     r2, [r3, #96]
785         adds    r0, r0, #4
786         eors    r7, r7, r2
787         cmp     r0, #32
788         bne     .L50
789         movs    r2, #64
790         mov     r0, r5
791         bl      memcpy
792         ldr     r2, [r6, #64]
793         ldr     r3, [r5, #0]
794         movs    r0, #0
795         eor     r3, r3, r2, lsr #5
796         eor     r3, r3, r7, lsl #5
797         str     r3, [r5, #0]
798         ldr     r2, [r6, #68]
799         ldr     r3, [r5, #4]
800         eor     r3, r3, r2, lsl #8
801         eor     r3, r3, r7, lsr #7
802         str     r3, [r5, #4]
803         ldr     r2, [r6, #72]
804         ldr     r3, [r5, #8]
805         eor     r3, r3, r2, lsl #5
806         eor     r3, r3, r7, lsr #5
807         str     r3, [r5, #8]
808         ldr     r2, [r6, #76]
809         ldr     r3, [r5, #12]
810         eor     r3, r3, r2, lsl #5
811         eor     r3, r3, r7, lsr #1
812         str     r3, [r5, #12]
813         ldr     r2, [r6, #80]
814         ldr     r3, [r5, #16]
815         eors    r2, r2, r3
816         eor     r2, r2, r7, lsr #3
817         str     r2, [r5, #16]
818         ldr     r1, [r6, #84]
819         ldr     r3, [r5, #20]
820         eor     r3, r3, r1, lsr #6
821         eor     r3, r3, r7, lsl #6
822         str     r3, [r5, #20]
823         ldr     r2, [r6, #88]
824         ldr     r3, [r5, #24]
825         eor     r3, r3, r2, lsl #6
826         eor     r3, r3, r7, lsr #4
827         str     r3, [r5, #24]
828         ldr     r2, [r6, #92]
829         ldr     r3, [r5, #28]
830         eor     r3, r3, r2, lsl #2
831         eor     r3, r3, r7, lsr #11
832         str     r3, [r5, #28]
833 .L51:
834         add     r1, r6, r0
835         ldr     r2, [r6, r0]
836         ldr     r3, [r1, #96]
837         eors    r2, r2, r3
838         ldr     r3, [r5, r0]
839         eor     r2, r2, r8
840         adds    r3, r3, r2
841         str     r3, [r5, r0]
842         adds    r0, r0, #4
843         cmp     r0, #32
844         bne     .L51
845         mov     lr, r5
846         mov     r4, r6
847         mov     ip, #4
848 .L52:
849         ldr     r3, [lr, #32]
850         ldr     r0, [r4, #96]
851         and     r2, ip, #7
852         eors    r0, r0, r3
853         eors    r0, r0, r7
854         str     r0, [lr, #32]
855         ldr     r1, [r5, r2, lsl #2]
856         rsb     r3, ip, #27
857         add     r2, ip, #5
858         lsrs    r3, r1, r3
859         lsls    r1, r1, r2
860         add     ip, ip, #1
861         orrs    r3, r3, r1
862         adds    r3, r3, r0
863         adds    r4, r4, #4
864         cmp     ip, #12
865         str     r3, [lr, #32]
866         add     lr, lr, #4
867         bne     .L52
868         movs    r2, #28
869         add     r0, r6, #36
870         add     r1, r6, #64
871         bl      memxor
872         ldr     r3, [r6, #32]
873         ldr     r2, [r6, #92]
874         eors    r2, r2, r3
875         str     r2, [r6, #32]
876         ldr     r3, [r5, #32]
877         eor     r2, r2, r8, lsl #8
878         adds    r3, r3, r2
879         str     r3, [r5, #32]
880         ldr     r2, [r6, #36]
881         ldr     r3, [r5, #36]
882         eor     r2, r2, r8, lsr #6
883         adds    r3, r3, r2
884         str     r3, [r5, #36]
885         ldr     r2, [r6, #40]
886         ldr     r3, [r5, #40]
887         eor     r2, r2, r8, lsl #6
888         adds    r3, r3, r2
889         str     r3, [r5, #40]
890         ldr     r2, [r6, #44]
891         ldr     r3, [r5, #44]
892         eor     r2, r2, r8, lsl #4
893         adds    r3, r3, r2
894         str     r3, [r5, #44]
895         ldr     r2, [r6, #48]
896         ldr     r3, [r5, #48]
897         eor     r2, r2, r8, lsr #3
898         adds    r3, r3, r2
899         str     r3, [r5, #48]
900         ldr     r2, [r6, #52]
901         ldr     r3, [r5, #52]
902         eor     r2, r2, r8, lsr #4
903         adds    r3, r3, r2
904         str     r3, [r5, #52]
905         ldr     r2, [r6, #56]
906         ldr     r3, [r5, #56]
907         eor     r2, r2, r8, lsr #7
908         adds    r3, r3, r2
909         str     r3, [r5, #56]
910         ldr     r2, [r6, #60]
911         ldr     r3, [r5, #60]
912         eor     r2, r2, r8, lsr #2
913         adds    r3, r3, r2
914         str     r3, [r5, #60]
915         pop     {r4, r5, r6, r7, r8, pc}
916         .size   bmw_small_f2, .-bmw_small_f2
917         .align  2
918         .global bmw_small_nextBlock
919         .thumb
920         .thumb_func
921         .type   bmw_small_nextBlock, %function
922 bmw_small_nextBlock:
923         @ args = 0, pretend = 0, frame = 128
924         @ frame_needed = 0, uses_anonymous_args = 0
925         push    {r4, r5, r6, lr}
926         mov     r5, r0
927         sub     sp, sp, #128
928         mov     r6, r1
929         mov     r0, sp
930         mov     r1, r5
931         mov     r2, r6
932         bl      bmw_small_f0
933         mov     r0, sp
934         mov     r1, r6
935         mov     r2, r5
936         bl      bmw_small_f1
937         mov     r0, r5
938         mov     r1, sp
939         mov     r2, r6
940         bl      bmw_small_f2
941         ldr     r3, [r5, #64]
942         mov     r4, sp
943         adds    r3, r3, #1
944         str     r3, [r5, #64]
945         add     sp, sp, #128
946         pop     {r4, r5, r6, pc}
947         .size   bmw_small_nextBlock, .-bmw_small_nextBlock
948         .align  2
949         .global bmw256_nextBlock
950         .thumb
951         .thumb_func
952         .type   bmw256_nextBlock, %function
953 bmw256_nextBlock:
954         @ args = 0, pretend = 0, frame = 0
955         @ frame_needed = 0, uses_anonymous_args = 0
956         push    {lr}
957         bl      bmw_small_nextBlock
958         pop     {pc}
959         .size   bmw256_nextBlock, .-bmw256_nextBlock
960         .align  2
961         .global bmw224_nextBlock
962         .thumb
963         .thumb_func
964         .type   bmw224_nextBlock, %function
965 bmw224_nextBlock:
966         @ args = 0, pretend = 0, frame = 0
967         @ frame_needed = 0, uses_anonymous_args = 0
968         push    {lr}
969         bl      bmw_small_nextBlock
970         pop     {pc}
971         .size   bmw224_nextBlock, .-bmw224_nextBlock
972         .align  2
973         .global bmw_small_lastBlock
974         .thumb
975         .thumb_func
976         .type   bmw_small_lastBlock, %function
977 bmw_small_lastBlock:
978         @ args = 0, pretend = 0, frame = 192
979         @ frame_needed = 0, uses_anonymous_args = 0
980         push    {r4, r5, r6, r7, r8, sl, lr}
981         movw    r3, #511
982         uxth    r8, r2
983         cmp     r8, r3
984         sub     sp, sp, #192
985         mov     r6, r0
986         mov     sl, r1
987         bls     .L65
988         mov     r5, r1
989         mov     r4, r8
990         mov     r7, r3
991 .L66:
992         mov     r1, r5
993         mov     r0, r6
994         bl      bmw_small_nextBlock
995         sub     r3, r4, #512
996         uxth    r4, r3
997         adds    r5, r5, #64
998         cmp     r4, r7
999         bhi     .L66
1000         sub     r2, r8, #512
1001         uxth    r2, r2
1002         lsrs    r3, r2, #9
1003         adds    r3, r3, #1
1004         lsls    r3, r3, #6
1005         lsl     r8, r2, #23
1006         add     sl, sl, r3
1007         lsr     r8, r8, #23
1008 .L65:
1009         add     r5, sp, #128
1010         movs    r1, #0
1011         movs    r2, #64
1012         mov     r0, r5
1013         bl      memset
1014         add     r2, r8, #7
1015         asrs    r2, r2, #3
1016         mov     r1, sl
1017         mov     r0, r5
1018         bl      memcpy
1019         add     r3, sp, #192
1020         add     ip, r3, r8, lsr #3
1021         and     r1, r8, #7
1022         movs    r3, #128
1023         asrs    r3, r3, r1
1024         ldrb    r2, [ip, #-64]  @ zero_extendqisi2
1025         orrs    r3, r3, r2
1026         strb    r3, [ip, #-64]
1027         cmp     r8, #448
1028         it      lt
1029         ldrlt   r1, [r6, #64]
1030         bge     .L74
1031 .L67:
1032         mov     r2, #512
1033         mov     r3, r8
1034         mov     r4, #0
1035         umlal   r3, r4, r2, r1
1036         mov     r0, r6
1037         str     r3, [r5, #56]
1038         str     r4, [r5, #60]
1039         mov     r1, r5
1040         bl      bmw_small_nextBlock
1041         movs    r2, #64
1042         mov     r0, r5
1043         movs    r1, #170
1044         bl      memset
1045         movs    r2, #0
1046         movs    r3, #160
1047 .L68:
1048         strb    r3, [r5, r2]
1049         adds    r2, r2, #4
1050         adds    r3, r3, #1
1051         cmp     r2, #64
1052         uxtb    r3, r3
1053         bne     .L68
1054         mov     r1, r5
1055         mov     r0, sp
1056         mov     r2, r6
1057         bl      bmw_small_f0
1058         mov     r2, r5
1059         mov     r0, sp
1060         mov     r1, r6
1061         bl      bmw_small_f1
1062         mov     r4, r6
1063         mov     r0, r5
1064         mov     r1, sp
1065         mov     r2, r6
1066         bl      bmw_small_f2
1067         ldmia   r5!, {r0, r1, r2, r3}
1068         stmia   r4!, {r0, r1, r2, r3}
1069         mov     ip, r5
1070         ldmia   ip!, {r0, r1, r2, r3}
1071         stmia   r4!, {r0, r1, r2, r3}
1072         ldmia   ip!, {r0, r1, r2, r3}
1073         stmia   r4!, {r0, r1, r2, r3}
1074         ldmia   ip, {r0, r1, r2, r3}
1075         stmia   r4, {r0, r1, r2, r3}
1076         add     sp, sp, #192
1077         pop     {r4, r5, r6, r7, r8, sl, pc}
1078 .L74:
1079         mov     r1, r5
1080         mov     r0, r6
1081         bl      bmw_small_nextBlock
1082         ldr     r1, [r6, #64]
1083         movs    r3, #0
1084         subs    r1, r1, #1
1085         str     r3, [sp, #128]
1086         str     r3, [sp, #132]
1087         str     r3, [sp, #136]
1088         str     r3, [sp, #140]
1089         str     r3, [sp, #144]
1090         str     r3, [sp, #148]
1091         str     r3, [sp, #152]
1092         str     r3, [sp, #156]
1093         str     r3, [sp, #160]
1094         str     r3, [sp, #164]
1095         str     r3, [sp, #168]
1096         str     r3, [sp, #172]
1097         str     r3, [sp, #176]
1098         str     r3, [sp, #180]
1099         str     r1, [r6, #64]
1100         b       .L67
1101         .size   bmw_small_lastBlock, .-bmw_small_lastBlock
1102         .align  2
1103         .global bmw256
1104         .thumb
1105         .thumb_func
1106         .type   bmw256, %function
1107 bmw256:
1108         @ args = 0, pretend = 0, frame = 68
1109         @ frame_needed = 0, uses_anonymous_args = 0
1110         push    {r4, r5, r6, r7, r8, r9, sl, lr}
1111         ldr     r3, .L82
1112         sub     sp, sp, #68
1113         add     r6, sp, #68
1114         mov     sl, r1
1115         mov     r7, r2
1116         mov     r9, r0
1117         str     r3, [r6, #-68]!
1118         mov     r2, sp
1119         add     r1, sp, #60
1120 .L76:
1121         ldr     r3, [r2, #0]
1122         add     r3, r3, #67372036
1123         str     r3, [r2, #4]!
1124         cmp     r2, r1
1125         bne     .L76
1126         movs    r3, #0
1127         str     r3, [sp, #64]
1128         movw    r3, #511
1129         cmp     r7, r3
1130         bls     .L77
1131         mov     r5, sl
1132         mov     r4, r7
1133         mov     r8, r3
1134 .L78:
1135         mov     r1, r5
1136         mov     r0, sp
1137         sub     r4, r4, #512
1138         bl      bmw_small_nextBlock
1139         adds    r5, r5, #64
1140         cmp     r4, r8
1141         bhi     .L78
1142         sub     r2, r7, #512
1143         lsrs    r3, r2, #9
1144         adds    r3, r3, #1
1145         lsls    r3, r3, #6
1146         lsls    r7, r2, #23
1147         add     sl, sl, r3
1148         lsrs    r7, r7, #23
1149 .L77:
1150         uxth    r2, r7
1151         mov     r0, sp
1152         mov     r1, sl
1153         bl      bmw_small_lastBlock
1154         mov     r0, r9
1155         add     r1, sp, #32
1156         movs    r2, #32
1157         bl      memcpy
1158         add     sp, sp, #68
1159         pop     {r4, r5, r6, r7, r8, r9, sl, pc}
1160 .L83:
1161         .align  2
1162 .L82:
1163         .word   1078018627
1164         .size   bmw256, .-bmw256
1165         .align  2
1166         .global bmw224
1167         .thumb
1168         .thumb_func
1169         .type   bmw224, %function
1170 bmw224:
1171         @ args = 0, pretend = 0, frame = 68
1172         @ frame_needed = 0, uses_anonymous_args = 0
1173         push    {r4, r5, r6, r7, r8, r9, sl, lr}
1174         ldr     r3, .L91
1175         sub     sp, sp, #68
1176         add     r6, sp, #68
1177         mov     sl, r1
1178         mov     r7, r2
1179         mov     r9, r0
1180         str     r3, [r6, #-68]!
1181         mov     r2, sp
1182         add     r1, sp, #60
1183 .L85:
1184         ldr     r3, [r2, #0]
1185         add     r3, r3, #67372036
1186         str     r3, [r2, #4]!
1187         cmp     r2, r1
1188         bne     .L85
1189         movs    r3, #0
1190         str     r3, [sp, #64]
1191         movw    r3, #511
1192         cmp     r7, r3
1193         bls     .L86
1194         mov     r5, sl
1195         mov     r4, r7
1196         mov     r8, r3
1197 .L87:
1198         mov     r1, r5
1199         mov     r0, sp
1200         sub     r4, r4, #512
1201         bl      bmw_small_nextBlock
1202         adds    r5, r5, #64
1203         cmp     r4, r8
1204         bhi     .L87
1205         sub     r2, r7, #512
1206         lsrs    r3, r2, #9
1207         adds    r3, r3, #1
1208         lsls    r3, r3, #6
1209         lsls    r7, r2, #23
1210         add     sl, sl, r3
1211         lsrs    r7, r7, #23
1212 .L86:
1213         uxth    r2, r7
1214         mov     r0, sp
1215         mov     r1, sl
1216         bl      bmw_small_lastBlock
1217         mov     r0, r9
1218         add     r1, sp, #36
1219         movs    r2, #28
1220         bl      memcpy
1221         add     sp, sp, #68
1222         pop     {r4, r5, r6, r7, r8, r9, sl, pc}
1223 .L92:
1224         .align  2
1225 .L91:
1226         .word   66051
1227         .size   bmw224, .-bmw224
1228         .align  2
1229         .global bmw256_lastBlock
1230         .thumb
1231         .thumb_func
1232         .type   bmw256_lastBlock, %function
1233 bmw256_lastBlock:
1234         @ args = 0, pretend = 0, frame = 0
1235         @ frame_needed = 0, uses_anonymous_args = 0
1236         push    {lr}
1237         uxth    r2, r2
1238         bl      bmw_small_lastBlock
1239         pop     {pc}
1240         .size   bmw256_lastBlock, .-bmw256_lastBlock
1241         .align  2
1242         .global bmw224_lastBlock
1243         .thumb
1244         .thumb_func
1245         .type   bmw224_lastBlock, %function
1246 bmw224_lastBlock:
1247         @ args = 0, pretend = 0, frame = 0
1248         @ frame_needed = 0, uses_anonymous_args = 0
1249         push    {lr}
1250         uxth    r2, r2
1251         bl      bmw_small_lastBlock
1252         pop     {pc}
1253         .size   bmw224_lastBlock, .-bmw224_lastBlock
1254         .section        .rodata
1255         .align  2
1256         .type   k_lut, %object
1257         .size   k_lut, 64
1258 k_lut:
1259         .word   1431655760
1260         .word   1521134245
1261         .word   1610612730
1262         .word   1700091215
1263         .word   1789569700
1264         .word   1879048185
1265         .word   1968526670
1266         .word   2058005155
1267         .word   2147483640
1268         .word   -2058005171
1269         .word   -1968526686
1270         .word   -1879048201
1271         .word   -1789569716
1272         .word   -1700091231
1273         .word   -1610612746
1274         .word   -1521134261
1275         .ident  "GCC: (GNU) 4.3.2"