Upstream version 11.40.271.0
[platform/framework/web/crosswalk.git] / src / third_party / boringssl / win-x86 / crypto / sha / sha512-586.asm
1 %ifidn __OUTPUT_FORMAT__,obj
2 section code    use32 class=code align=64
3 %elifidn __OUTPUT_FORMAT__,win32
4 %ifdef __YASM_VERSION_ID__
5 %if __YASM_VERSION_ID__ < 01010000h
6 %error yasm version 1.1.0 or later needed.
7 %endif
8 ; Yasm automatically includes .00 and complains about redefining it.
9 ; https://www.tortall.net/projects/yasm/manual/html/objfmt-win32-safeseh.html
10 %else
11 $@feat.00 equ 1
12 %endif
13 section .text   code align=64
14 %else
15 section .text   code
16 %endif
17 global  _sha512_block_data_order
18 align   16
19 _sha512_block_data_order:
20 L$_sha512_block_data_order_begin:
21         push    ebp
22         push    ebx
23         push    esi
24         push    edi
25         mov     esi,DWORD [20+esp]
26         mov     edi,DWORD [24+esp]
27         mov     eax,DWORD [28+esp]
28         mov     ebx,esp
29         call    L$000pic_point
30 L$000pic_point:
31         pop     ebp
32         lea     ebp,[(L$001K512-L$000pic_point)+ebp]
33         sub     esp,16
34         and     esp,-64
35         shl     eax,7
36         add     eax,edi
37         mov     DWORD [esp],esi
38         mov     DWORD [4+esp],edi
39         mov     DWORD [8+esp],eax
40         mov     DWORD [12+esp],ebx
41 align   16
42 L$002loop_x86:
43         mov     eax,DWORD [edi]
44         mov     ebx,DWORD [4+edi]
45         mov     ecx,DWORD [8+edi]
46         mov     edx,DWORD [12+edi]
47         bswap   eax
48         bswap   ebx
49         bswap   ecx
50         bswap   edx
51         push    eax
52         push    ebx
53         push    ecx
54         push    edx
55         mov     eax,DWORD [16+edi]
56         mov     ebx,DWORD [20+edi]
57         mov     ecx,DWORD [24+edi]
58         mov     edx,DWORD [28+edi]
59         bswap   eax
60         bswap   ebx
61         bswap   ecx
62         bswap   edx
63         push    eax
64         push    ebx
65         push    ecx
66         push    edx
67         mov     eax,DWORD [32+edi]
68         mov     ebx,DWORD [36+edi]
69         mov     ecx,DWORD [40+edi]
70         mov     edx,DWORD [44+edi]
71         bswap   eax
72         bswap   ebx
73         bswap   ecx
74         bswap   edx
75         push    eax
76         push    ebx
77         push    ecx
78         push    edx
79         mov     eax,DWORD [48+edi]
80         mov     ebx,DWORD [52+edi]
81         mov     ecx,DWORD [56+edi]
82         mov     edx,DWORD [60+edi]
83         bswap   eax
84         bswap   ebx
85         bswap   ecx
86         bswap   edx
87         push    eax
88         push    ebx
89         push    ecx
90         push    edx
91         mov     eax,DWORD [64+edi]
92         mov     ebx,DWORD [68+edi]
93         mov     ecx,DWORD [72+edi]
94         mov     edx,DWORD [76+edi]
95         bswap   eax
96         bswap   ebx
97         bswap   ecx
98         bswap   edx
99         push    eax
100         push    ebx
101         push    ecx
102         push    edx
103         mov     eax,DWORD [80+edi]
104         mov     ebx,DWORD [84+edi]
105         mov     ecx,DWORD [88+edi]
106         mov     edx,DWORD [92+edi]
107         bswap   eax
108         bswap   ebx
109         bswap   ecx
110         bswap   edx
111         push    eax
112         push    ebx
113         push    ecx
114         push    edx
115         mov     eax,DWORD [96+edi]
116         mov     ebx,DWORD [100+edi]
117         mov     ecx,DWORD [104+edi]
118         mov     edx,DWORD [108+edi]
119         bswap   eax
120         bswap   ebx
121         bswap   ecx
122         bswap   edx
123         push    eax
124         push    ebx
125         push    ecx
126         push    edx
127         mov     eax,DWORD [112+edi]
128         mov     ebx,DWORD [116+edi]
129         mov     ecx,DWORD [120+edi]
130         mov     edx,DWORD [124+edi]
131         bswap   eax
132         bswap   ebx
133         bswap   ecx
134         bswap   edx
135         push    eax
136         push    ebx
137         push    ecx
138         push    edx
139         add     edi,128
140         sub     esp,72
141         mov     DWORD [204+esp],edi
142         lea     edi,[8+esp]
143         mov     ecx,16
144 dd      2784229001
145 align   16
146 L$00300_15_x86:
147         mov     ecx,DWORD [40+esp]
148         mov     edx,DWORD [44+esp]
149         mov     esi,ecx
150         shr     ecx,9
151         mov     edi,edx
152         shr     edx,9
153         mov     ebx,ecx
154         shl     esi,14
155         mov     eax,edx
156         shl     edi,14
157         xor     ebx,esi
158         shr     ecx,5
159         xor     eax,edi
160         shr     edx,5
161         xor     eax,ecx
162         shl     esi,4
163         xor     ebx,edx
164         shl     edi,4
165         xor     ebx,esi
166         shr     ecx,4
167         xor     eax,edi
168         shr     edx,4
169         xor     eax,ecx
170         shl     esi,5
171         xor     ebx,edx
172         shl     edi,5
173         xor     eax,esi
174         xor     ebx,edi
175         mov     ecx,DWORD [48+esp]
176         mov     edx,DWORD [52+esp]
177         mov     esi,DWORD [56+esp]
178         mov     edi,DWORD [60+esp]
179         add     eax,DWORD [64+esp]
180         adc     ebx,DWORD [68+esp]
181         xor     ecx,esi
182         xor     edx,edi
183         and     ecx,DWORD [40+esp]
184         and     edx,DWORD [44+esp]
185         add     eax,DWORD [192+esp]
186         adc     ebx,DWORD [196+esp]
187         xor     ecx,esi
188         xor     edx,edi
189         mov     esi,DWORD [ebp]
190         mov     edi,DWORD [4+ebp]
191         add     eax,ecx
192         adc     ebx,edx
193         mov     ecx,DWORD [32+esp]
194         mov     edx,DWORD [36+esp]
195         add     eax,esi
196         adc     ebx,edi
197         mov     DWORD [esp],eax
198         mov     DWORD [4+esp],ebx
199         add     eax,ecx
200         adc     ebx,edx
201         mov     ecx,DWORD [8+esp]
202         mov     edx,DWORD [12+esp]
203         mov     DWORD [32+esp],eax
204         mov     DWORD [36+esp],ebx
205         mov     esi,ecx
206         shr     ecx,2
207         mov     edi,edx
208         shr     edx,2
209         mov     ebx,ecx
210         shl     esi,4
211         mov     eax,edx
212         shl     edi,4
213         xor     ebx,esi
214         shr     ecx,5
215         xor     eax,edi
216         shr     edx,5
217         xor     ebx,ecx
218         shl     esi,21
219         xor     eax,edx
220         shl     edi,21
221         xor     eax,esi
222         shr     ecx,21
223         xor     ebx,edi
224         shr     edx,21
225         xor     eax,ecx
226         shl     esi,5
227         xor     ebx,edx
228         shl     edi,5
229         xor     eax,esi
230         xor     ebx,edi
231         mov     ecx,DWORD [8+esp]
232         mov     edx,DWORD [12+esp]
233         mov     esi,DWORD [16+esp]
234         mov     edi,DWORD [20+esp]
235         add     eax,DWORD [esp]
236         adc     ebx,DWORD [4+esp]
237         or      ecx,esi
238         or      edx,edi
239         and     ecx,DWORD [24+esp]
240         and     edx,DWORD [28+esp]
241         and     esi,DWORD [8+esp]
242         and     edi,DWORD [12+esp]
243         or      ecx,esi
244         or      edx,edi
245         add     eax,ecx
246         adc     ebx,edx
247         mov     DWORD [esp],eax
248         mov     DWORD [4+esp],ebx
249         mov     dl,BYTE [ebp]
250         sub     esp,8
251         lea     ebp,[8+ebp]
252         cmp     dl,148
253         jne     NEAR L$00300_15_x86
254 align   16
255 L$00416_79_x86:
256         mov     ecx,DWORD [312+esp]
257         mov     edx,DWORD [316+esp]
258         mov     esi,ecx
259         shr     ecx,1
260         mov     edi,edx
261         shr     edx,1
262         mov     eax,ecx
263         shl     esi,24
264         mov     ebx,edx
265         shl     edi,24
266         xor     ebx,esi
267         shr     ecx,6
268         xor     eax,edi
269         shr     edx,6
270         xor     eax,ecx
271         shl     esi,7
272         xor     ebx,edx
273         shl     edi,1
274         xor     ebx,esi
275         shr     ecx,1
276         xor     eax,edi
277         shr     edx,1
278         xor     eax,ecx
279         shl     edi,6
280         xor     ebx,edx
281         xor     eax,edi
282         mov     DWORD [esp],eax
283         mov     DWORD [4+esp],ebx
284         mov     ecx,DWORD [208+esp]
285         mov     edx,DWORD [212+esp]
286         mov     esi,ecx
287         shr     ecx,6
288         mov     edi,edx
289         shr     edx,6
290         mov     eax,ecx
291         shl     esi,3
292         mov     ebx,edx
293         shl     edi,3
294         xor     eax,esi
295         shr     ecx,13
296         xor     ebx,edi
297         shr     edx,13
298         xor     eax,ecx
299         shl     esi,10
300         xor     ebx,edx
301         shl     edi,10
302         xor     ebx,esi
303         shr     ecx,10
304         xor     eax,edi
305         shr     edx,10
306         xor     ebx,ecx
307         shl     edi,13
308         xor     eax,edx
309         xor     eax,edi
310         mov     ecx,DWORD [320+esp]
311         mov     edx,DWORD [324+esp]
312         add     eax,DWORD [esp]
313         adc     ebx,DWORD [4+esp]
314         mov     esi,DWORD [248+esp]
315         mov     edi,DWORD [252+esp]
316         add     eax,ecx
317         adc     ebx,edx
318         add     eax,esi
319         adc     ebx,edi
320         mov     DWORD [192+esp],eax
321         mov     DWORD [196+esp],ebx
322         mov     ecx,DWORD [40+esp]
323         mov     edx,DWORD [44+esp]
324         mov     esi,ecx
325         shr     ecx,9
326         mov     edi,edx
327         shr     edx,9
328         mov     ebx,ecx
329         shl     esi,14
330         mov     eax,edx
331         shl     edi,14
332         xor     ebx,esi
333         shr     ecx,5
334         xor     eax,edi
335         shr     edx,5
336         xor     eax,ecx
337         shl     esi,4
338         xor     ebx,edx
339         shl     edi,4
340         xor     ebx,esi
341         shr     ecx,4
342         xor     eax,edi
343         shr     edx,4
344         xor     eax,ecx
345         shl     esi,5
346         xor     ebx,edx
347         shl     edi,5
348         xor     eax,esi
349         xor     ebx,edi
350         mov     ecx,DWORD [48+esp]
351         mov     edx,DWORD [52+esp]
352         mov     esi,DWORD [56+esp]
353         mov     edi,DWORD [60+esp]
354         add     eax,DWORD [64+esp]
355         adc     ebx,DWORD [68+esp]
356         xor     ecx,esi
357         xor     edx,edi
358         and     ecx,DWORD [40+esp]
359         and     edx,DWORD [44+esp]
360         add     eax,DWORD [192+esp]
361         adc     ebx,DWORD [196+esp]
362         xor     ecx,esi
363         xor     edx,edi
364         mov     esi,DWORD [ebp]
365         mov     edi,DWORD [4+ebp]
366         add     eax,ecx
367         adc     ebx,edx
368         mov     ecx,DWORD [32+esp]
369         mov     edx,DWORD [36+esp]
370         add     eax,esi
371         adc     ebx,edi
372         mov     DWORD [esp],eax
373         mov     DWORD [4+esp],ebx
374         add     eax,ecx
375         adc     ebx,edx
376         mov     ecx,DWORD [8+esp]
377         mov     edx,DWORD [12+esp]
378         mov     DWORD [32+esp],eax
379         mov     DWORD [36+esp],ebx
380         mov     esi,ecx
381         shr     ecx,2
382         mov     edi,edx
383         shr     edx,2
384         mov     ebx,ecx
385         shl     esi,4
386         mov     eax,edx
387         shl     edi,4
388         xor     ebx,esi
389         shr     ecx,5
390         xor     eax,edi
391         shr     edx,5
392         xor     ebx,ecx
393         shl     esi,21
394         xor     eax,edx
395         shl     edi,21
396         xor     eax,esi
397         shr     ecx,21
398         xor     ebx,edi
399         shr     edx,21
400         xor     eax,ecx
401         shl     esi,5
402         xor     ebx,edx
403         shl     edi,5
404         xor     eax,esi
405         xor     ebx,edi
406         mov     ecx,DWORD [8+esp]
407         mov     edx,DWORD [12+esp]
408         mov     esi,DWORD [16+esp]
409         mov     edi,DWORD [20+esp]
410         add     eax,DWORD [esp]
411         adc     ebx,DWORD [4+esp]
412         or      ecx,esi
413         or      edx,edi
414         and     ecx,DWORD [24+esp]
415         and     edx,DWORD [28+esp]
416         and     esi,DWORD [8+esp]
417         and     edi,DWORD [12+esp]
418         or      ecx,esi
419         or      edx,edi
420         add     eax,ecx
421         adc     ebx,edx
422         mov     DWORD [esp],eax
423         mov     DWORD [4+esp],ebx
424         mov     dl,BYTE [ebp]
425         sub     esp,8
426         lea     ebp,[8+ebp]
427         cmp     dl,23
428         jne     NEAR L$00416_79_x86
429         mov     esi,DWORD [840+esp]
430         mov     edi,DWORD [844+esp]
431         mov     eax,DWORD [esi]
432         mov     ebx,DWORD [4+esi]
433         mov     ecx,DWORD [8+esi]
434         mov     edx,DWORD [12+esi]
435         add     eax,DWORD [8+esp]
436         adc     ebx,DWORD [12+esp]
437         mov     DWORD [esi],eax
438         mov     DWORD [4+esi],ebx
439         add     ecx,DWORD [16+esp]
440         adc     edx,DWORD [20+esp]
441         mov     DWORD [8+esi],ecx
442         mov     DWORD [12+esi],edx
443         mov     eax,DWORD [16+esi]
444         mov     ebx,DWORD [20+esi]
445         mov     ecx,DWORD [24+esi]
446         mov     edx,DWORD [28+esi]
447         add     eax,DWORD [24+esp]
448         adc     ebx,DWORD [28+esp]
449         mov     DWORD [16+esi],eax
450         mov     DWORD [20+esi],ebx
451         add     ecx,DWORD [32+esp]
452         adc     edx,DWORD [36+esp]
453         mov     DWORD [24+esi],ecx
454         mov     DWORD [28+esi],edx
455         mov     eax,DWORD [32+esi]
456         mov     ebx,DWORD [36+esi]
457         mov     ecx,DWORD [40+esi]
458         mov     edx,DWORD [44+esi]
459         add     eax,DWORD [40+esp]
460         adc     ebx,DWORD [44+esp]
461         mov     DWORD [32+esi],eax
462         mov     DWORD [36+esi],ebx
463         add     ecx,DWORD [48+esp]
464         adc     edx,DWORD [52+esp]
465         mov     DWORD [40+esi],ecx
466         mov     DWORD [44+esi],edx
467         mov     eax,DWORD [48+esi]
468         mov     ebx,DWORD [52+esi]
469         mov     ecx,DWORD [56+esi]
470         mov     edx,DWORD [60+esi]
471         add     eax,DWORD [56+esp]
472         adc     ebx,DWORD [60+esp]
473         mov     DWORD [48+esi],eax
474         mov     DWORD [52+esi],ebx
475         add     ecx,DWORD [64+esp]
476         adc     edx,DWORD [68+esp]
477         mov     DWORD [56+esi],ecx
478         mov     DWORD [60+esi],edx
479         add     esp,840
480         sub     ebp,640
481         cmp     edi,DWORD [8+esp]
482         jb      NEAR L$002loop_x86
483         mov     esp,DWORD [12+esp]
484         pop     edi
485         pop     esi
486         pop     ebx
487         pop     ebp
488         ret
489 align   64
490 L$001K512:
491 dd      3609767458,1116352408
492 dd      602891725,1899447441
493 dd      3964484399,3049323471
494 dd      2173295548,3921009573
495 dd      4081628472,961987163
496 dd      3053834265,1508970993
497 dd      2937671579,2453635748
498 dd      3664609560,2870763221
499 dd      2734883394,3624381080
500 dd      1164996542,310598401
501 dd      1323610764,607225278
502 dd      3590304994,1426881987
503 dd      4068182383,1925078388
504 dd      991336113,2162078206
505 dd      633803317,2614888103
506 dd      3479774868,3248222580
507 dd      2666613458,3835390401
508 dd      944711139,4022224774
509 dd      2341262773,264347078
510 dd      2007800933,604807628
511 dd      1495990901,770255983
512 dd      1856431235,1249150122
513 dd      3175218132,1555081692
514 dd      2198950837,1996064986
515 dd      3999719339,2554220882
516 dd      766784016,2821834349
517 dd      2566594879,2952996808
518 dd      3203337956,3210313671
519 dd      1034457026,3336571891
520 dd      2466948901,3584528711
521 dd      3758326383,113926993
522 dd      168717936,338241895
523 dd      1188179964,666307205
524 dd      1546045734,773529912
525 dd      1522805485,1294757372
526 dd      2643833823,1396182291
527 dd      2343527390,1695183700
528 dd      1014477480,1986661051
529 dd      1206759142,2177026350
530 dd      344077627,2456956037
531 dd      1290863460,2730485921
532 dd      3158454273,2820302411
533 dd      3505952657,3259730800
534 dd      106217008,3345764771
535 dd      3606008344,3516065817
536 dd      1432725776,3600352804
537 dd      1467031594,4094571909
538 dd      851169720,275423344
539 dd      3100823752,430227734
540 dd      1363258195,506948616
541 dd      3750685593,659060556
542 dd      3785050280,883997877
543 dd      3318307427,958139571
544 dd      3812723403,1322822218
545 dd      2003034995,1537002063
546 dd      3602036899,1747873779
547 dd      1575990012,1955562222
548 dd      1125592928,2024104815
549 dd      2716904306,2227730452
550 dd      442776044,2361852424
551 dd      593698344,2428436474
552 dd      3733110249,2756734187
553 dd      2999351573,3204031479
554 dd      3815920427,3329325298
555 dd      3928383900,3391569614
556 dd      566280711,3515267271
557 dd      3454069534,3940187606
558 dd      4000239992,4118630271
559 dd      1914138554,116418474
560 dd      2731055270,174292421
561 dd      3203993006,289380356
562 dd      320620315,460393269
563 dd      587496836,685471733
564 dd      1086792851,852142971
565 dd      365543100,1017036298
566 dd      2618297676,1126000580
567 dd      3409855158,1288033470
568 dd      4234509866,1501505948
569 dd      987167468,1607167915
570 dd      1246189591,1816402316
571 dd      67438087,66051
572 dd      202182159,134810123
573 db      83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97
574 db      110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32
575 db      67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
576 db      112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
577 db      62,0