1
2# qhasm: int32 a
3
4# qhasm: stack32 arg1
5
6# qhasm: stack32 arg2
7
8# qhasm: stack32 arg3
9
10# qhasm: stack32 arg4
11
12# qhasm: input arg1
13
14# qhasm: input arg2
15
16# qhasm: input arg3
17
18# qhasm: input arg4
19
20# qhasm: int32 eax
21
22# qhasm: int32 ebx
23
24# qhasm: int32 esi
25
26# qhasm: int32 edi
27
28# qhasm: int32 ebp
29
30# qhasm: caller eax
31
32# qhasm: caller ebx
33
34# qhasm: caller esi
35
36# qhasm: caller edi
37
38# qhasm: caller ebp
39
40# qhasm: int32 k
41
42# qhasm: int32 kbits
43
44# qhasm: int32 iv
45
46# qhasm: int32 i
47
48# qhasm: int32 x
49
50# qhasm: int32 m
51
52# qhasm: int32 out
53
54# qhasm: stack32 bytes_backup
55
56# qhasm: int32 bytes
57
58# qhasm: stack32 eax_stack
59
60# qhasm: stack32 ebx_stack
61
62# qhasm: stack32 esi_stack
63
64# qhasm: stack32 edi_stack
65
66# qhasm: stack32 ebp_stack
67
68# qhasm: int6464 diag0
69
70# qhasm: int6464 diag1
71
72# qhasm: int6464 diag2
73
74# qhasm: int6464 diag3
75
76# qhasm: int6464 a0
77
78# qhasm: int6464 a1
79
80# qhasm: int6464 a2
81
82# qhasm: int6464 a3
83
84# qhasm: int6464 a4
85
86# qhasm: int6464 a5
87
88# qhasm: int6464 a6
89
90# qhasm: int6464 a7
91
92# qhasm: int6464 b0
93
94# qhasm: int6464 b1
95
96# qhasm: int6464 b2
97
98# qhasm: int6464 b3
99
100# qhasm: int6464 b4
101
102# qhasm: int6464 b5
103
104# qhasm: int6464 b6
105
106# qhasm: int6464 b7
107
108# qhasm: int32 in0
109
110# qhasm: int32 in1
111
112# qhasm: int32 in2
113
114# qhasm: int32 in3
115
116# qhasm: int32 in4
117
118# qhasm: int32 in5
119
120# qhasm: int32 in6
121
122# qhasm: int32 in7
123
124# qhasm: int32 in8
125
126# qhasm: int32 in9
127
128# qhasm: int32 in10
129
130# qhasm: int32 in11
131
132# qhasm: int32 in12
133
134# qhasm: int32 in13
135
136# qhasm: int32 in14
137
138# qhasm: int32 in15
139
140# qhasm: stack512 tmp
141
142# qhasm: stack32 ctarget
143
144# qhasm: enter ECRYPT_keystream_bytes
145.text
146.p2align 5
147.globl _ECRYPT_keystream_bytes
148.globl ECRYPT_keystream_bytes
149_ECRYPT_keystream_bytes:
150ECRYPT_keystream_bytes:
151mov %esp,%eax
152and $31,%eax
153add $96,%eax
154sub %eax,%esp
155
156# qhasm: eax_stack = eax
157# asm 1: movl <eax=int32#1,>eax_stack=stack32#1
158# asm 2: movl <eax=%eax,>eax_stack=0(%esp)
159movl %eax,0(%esp)
160
161# qhasm: ebx_stack = ebx
162# asm 1: movl <ebx=int32#4,>ebx_stack=stack32#2
163# asm 2: movl <ebx=%ebx,>ebx_stack=4(%esp)
164movl %ebx,4(%esp)
165
166# qhasm: esi_stack = esi
167# asm 1: movl <esi=int32#5,>esi_stack=stack32#3
168# asm 2: movl <esi=%esi,>esi_stack=8(%esp)
169movl %esi,8(%esp)
170
171# qhasm: edi_stack = edi
172# asm 1: movl <edi=int32#6,>edi_stack=stack32#4
173# asm 2: movl <edi=%edi,>edi_stack=12(%esp)
174movl %edi,12(%esp)
175
176# qhasm: ebp_stack = ebp
177# asm 1: movl <ebp=int32#7,>ebp_stack=stack32#5
178# asm 2: movl <ebp=%ebp,>ebp_stack=16(%esp)
179movl %ebp,16(%esp)
180
181# qhasm: x = arg1
182# asm 1: movl <arg1=stack32#-1,>x=int32#3
183# asm 2: movl <arg1=4(%esp,%eax),>x=%edx
184movl 4(%esp,%eax),%edx
185
186# qhasm: m = arg2
187# asm 1: movl <arg2=stack32#-2,>m=int32#5
188# asm 2: movl <arg2=8(%esp,%eax),>m=%esi
189movl 8(%esp,%eax),%esi
190
191# qhasm: out = m
192# asm 1: mov  <m=int32#5,>out=int32#6
193# asm 2: mov  <m=%esi,>out=%edi
194mov  %esi,%edi
195
196# qhasm: bytes = arg3
197# asm 1: movl <arg3=stack32#-3,>bytes=int32#4
198# asm 2: movl <arg3=12(%esp,%eax),>bytes=%ebx
199movl 12(%esp,%eax),%ebx
200
201# qhasm:               unsigned>? bytes - 0
202# asm 1: cmp  $0,<bytes=int32#4
203# asm 2: cmp  $0,<bytes=%ebx
204cmp  $0,%ebx
205# comment:fp stack unchanged by jump
206
207# qhasm: goto done if !unsigned>
208jbe ._done
209
210# qhasm: a = 0
211# asm 1: mov  $0,>a=int32#1
212# asm 2: mov  $0,>a=%eax
213mov  $0,%eax
214
215# qhasm: i = bytes
216# asm 1: mov  <bytes=int32#4,>i=int32#2
217# asm 2: mov  <bytes=%ebx,>i=%ecx
218mov  %ebx,%ecx
219
220# qhasm: while (i) { *out++ = a; --i }
221rep stosb
222
223# qhasm: out -= bytes
224# asm 1: subl <bytes=int32#4,<out=int32#6
225# asm 2: subl <bytes=%ebx,<out=%edi
226subl %ebx,%edi
227# comment:fp stack unchanged by jump
228
229# qhasm: goto start
230jmp ._start
231
232# qhasm: enter ECRYPT_decrypt_bytes
233.text
234.p2align 5
235.globl _ECRYPT_decrypt_bytes
236.globl ECRYPT_decrypt_bytes
237_ECRYPT_decrypt_bytes:
238ECRYPT_decrypt_bytes:
239mov %esp,%eax
240and $31,%eax
241add $96,%eax
242sub %eax,%esp
243
244# qhasm: eax_stack = eax
245# asm 1: movl <eax=int32#1,>eax_stack=stack32#1
246# asm 2: movl <eax=%eax,>eax_stack=0(%esp)
247movl %eax,0(%esp)
248
249# qhasm: ebx_stack = ebx
250# asm 1: movl <ebx=int32#4,>ebx_stack=stack32#2
251# asm 2: movl <ebx=%ebx,>ebx_stack=4(%esp)
252movl %ebx,4(%esp)
253
254# qhasm: esi_stack = esi
255# asm 1: movl <esi=int32#5,>esi_stack=stack32#3
256# asm 2: movl <esi=%esi,>esi_stack=8(%esp)
257movl %esi,8(%esp)
258
259# qhasm: edi_stack = edi
260# asm 1: movl <edi=int32#6,>edi_stack=stack32#4
261# asm 2: movl <edi=%edi,>edi_stack=12(%esp)
262movl %edi,12(%esp)
263
264# qhasm: ebp_stack = ebp
265# asm 1: movl <ebp=int32#7,>ebp_stack=stack32#5
266# asm 2: movl <ebp=%ebp,>ebp_stack=16(%esp)
267movl %ebp,16(%esp)
268
269# qhasm: x = arg1
270# asm 1: movl <arg1=stack32#-1,>x=int32#3
271# asm 2: movl <arg1=4(%esp,%eax),>x=%edx
272movl 4(%esp,%eax),%edx
273
274# qhasm: m = arg2
275# asm 1: movl <arg2=stack32#-2,>m=int32#5
276# asm 2: movl <arg2=8(%esp,%eax),>m=%esi
277movl 8(%esp,%eax),%esi
278
279# qhasm: out = arg3
280# asm 1: movl <arg3=stack32#-3,>out=int32#6
281# asm 2: movl <arg3=12(%esp,%eax),>out=%edi
282movl 12(%esp,%eax),%edi
283
284# qhasm: bytes = arg4
285# asm 1: movl <arg4=stack32#-4,>bytes=int32#4
286# asm 2: movl <arg4=16(%esp,%eax),>bytes=%ebx
287movl 16(%esp,%eax),%ebx
288
289# qhasm:               unsigned>? bytes - 0
290# asm 1: cmp  $0,<bytes=int32#4
291# asm 2: cmp  $0,<bytes=%ebx
292cmp  $0,%ebx
293# comment:fp stack unchanged by jump
294
295# qhasm: goto done if !unsigned>
296jbe ._done
297# comment:fp stack unchanged by jump
298
299# qhasm: goto start
300jmp ._start
301
302# qhasm: enter ECRYPT_encrypt_bytes
303.text
304.p2align 5
305.globl _ECRYPT_encrypt_bytes
306.globl ECRYPT_encrypt_bytes
307_ECRYPT_encrypt_bytes:
308ECRYPT_encrypt_bytes:
309mov %esp,%eax
310and $31,%eax
311add $96,%eax
312sub %eax,%esp
313
314# qhasm: eax_stack = eax
315# asm 1: movl <eax=int32#1,>eax_stack=stack32#1
316# asm 2: movl <eax=%eax,>eax_stack=0(%esp)
317movl %eax,0(%esp)
318
319# qhasm: ebx_stack = ebx
320# asm 1: movl <ebx=int32#4,>ebx_stack=stack32#2
321# asm 2: movl <ebx=%ebx,>ebx_stack=4(%esp)
322movl %ebx,4(%esp)
323
324# qhasm: esi_stack = esi
325# asm 1: movl <esi=int32#5,>esi_stack=stack32#3
326# asm 2: movl <esi=%esi,>esi_stack=8(%esp)
327movl %esi,8(%esp)
328
329# qhasm: edi_stack = edi
330# asm 1: movl <edi=int32#6,>edi_stack=stack32#4
331# asm 2: movl <edi=%edi,>edi_stack=12(%esp)
332movl %edi,12(%esp)
333
334# qhasm: ebp_stack = ebp
335# asm 1: movl <ebp=int32#7,>ebp_stack=stack32#5
336# asm 2: movl <ebp=%ebp,>ebp_stack=16(%esp)
337movl %ebp,16(%esp)
338
339# qhasm: x = arg1
340# asm 1: movl <arg1=stack32#-1,>x=int32#3
341# asm 2: movl <arg1=4(%esp,%eax),>x=%edx
342movl 4(%esp,%eax),%edx
343
344# qhasm: m = arg2
345# asm 1: movl <arg2=stack32#-2,>m=int32#5
346# asm 2: movl <arg2=8(%esp,%eax),>m=%esi
347movl 8(%esp,%eax),%esi
348
349# qhasm: out = arg3
350# asm 1: movl <arg3=stack32#-3,>out=int32#6
351# asm 2: movl <arg3=12(%esp,%eax),>out=%edi
352movl 12(%esp,%eax),%edi
353
354# qhasm: bytes = arg4
355# asm 1: movl <arg4=stack32#-4,>bytes=int32#4
356# asm 2: movl <arg4=16(%esp,%eax),>bytes=%ebx
357movl 16(%esp,%eax),%ebx
358
359# qhasm:               unsigned>? bytes - 0
360# asm 1: cmp  $0,<bytes=int32#4
361# asm 2: cmp  $0,<bytes=%ebx
362cmp  $0,%ebx
363# comment:fp stack unchanged by jump
364
365# qhasm: goto done if !unsigned>
366jbe ._done
367# comment:fp stack unchanged by fallthrough
368
369# qhasm: start:
370._start:
371
372# qhasm: bytesatleast1:
373._bytesatleast1:
374
375# qhasm:                   unsigned<? bytes - 64
376# asm 1: cmp  $64,<bytes=int32#4
377# asm 2: cmp  $64,<bytes=%ebx
378cmp  $64,%ebx
379# comment:fp stack unchanged by jump
380
381# qhasm:   goto nocopy if !unsigned<
382jae ._nocopy
383
384# qhasm:     ctarget = out
385# asm 1: movl <out=int32#6,>ctarget=stack32#6
386# asm 2: movl <out=%edi,>ctarget=20(%esp)
387movl %edi,20(%esp)
388
389# qhasm:     out = &tmp
390# asm 1: leal <tmp=stack512#1,>out=int32#6
391# asm 2: leal <tmp=32(%esp),>out=%edi
392leal 32(%esp),%edi
393
394# qhasm:     i = bytes
395# asm 1: mov  <bytes=int32#4,>i=int32#2
396# asm 2: mov  <bytes=%ebx,>i=%ecx
397mov  %ebx,%ecx
398
399# qhasm:     while (i) { *out++ = *m++; --i }
400rep movsb
401
402# qhasm:     out = &tmp
403# asm 1: leal <tmp=stack512#1,>out=int32#6
404# asm 2: leal <tmp=32(%esp),>out=%edi
405leal 32(%esp),%edi
406
407# qhasm:     m = &tmp
408# asm 1: leal <tmp=stack512#1,>m=int32#5
409# asm 2: leal <tmp=32(%esp),>m=%esi
410leal 32(%esp),%esi
411# comment:fp stack unchanged by fallthrough
412
413# qhasm:   nocopy:
414._nocopy:
415
416# qhasm:   bytes_backup = bytes
417# asm 1: movl <bytes=int32#4,>bytes_backup=stack32#7
418# asm 2: movl <bytes=%ebx,>bytes_backup=24(%esp)
419movl %ebx,24(%esp)
420
421# qhasm: diag0 = *(int128 *) (x + 0)
422# asm 1: movdqa 0(<x=int32#3),>diag0=int6464#1
423# asm 2: movdqa 0(<x=%edx),>diag0=%xmm0
424movdqa 0(%edx),%xmm0
425
426# qhasm: diag1 = *(int128 *) (x + 16)
427# asm 1: movdqa 16(<x=int32#3),>diag1=int6464#2
428# asm 2: movdqa 16(<x=%edx),>diag1=%xmm1
429movdqa 16(%edx),%xmm1
430
431# qhasm: diag2 = *(int128 *) (x + 32)
432# asm 1: movdqa 32(<x=int32#3),>diag2=int6464#3
433# asm 2: movdqa 32(<x=%edx),>diag2=%xmm2
434movdqa 32(%edx),%xmm2
435
436# qhasm: diag3 = *(int128 *) (x + 48)
437# asm 1: movdqa 48(<x=int32#3),>diag3=int6464#4
438# asm 2: movdqa 48(<x=%edx),>diag3=%xmm3
439movdqa 48(%edx),%xmm3
440
441# qhasm:             	a0 = diag1
442# asm 1: movdqa <diag1=int6464#2,>a0=int6464#5
443# asm 2: movdqa <diag1=%xmm1,>a0=%xmm4
444movdqa %xmm1,%xmm4
445
446# qhasm: i = 20
447# asm 1: mov  $20,>i=int32#1
448# asm 2: mov  $20,>i=%eax
449mov  $20,%eax
450
451# qhasm: mainloop:
452._mainloop:
453
454# qhasm: uint32323232	a0 += diag0
455# asm 1: paddd <diag0=int6464#1,<a0=int6464#5
456# asm 2: paddd <diag0=%xmm0,<a0=%xmm4
457paddd %xmm0,%xmm4
458
459# qhasm: 				a1 = diag0
460# asm 1: movdqa <diag0=int6464#1,>a1=int6464#6
461# asm 2: movdqa <diag0=%xmm0,>a1=%xmm5
462movdqa %xmm0,%xmm5
463
464# qhasm:             	b0 = a0
465# asm 1: movdqa <a0=int6464#5,>b0=int6464#7
466# asm 2: movdqa <a0=%xmm4,>b0=%xmm6
467movdqa %xmm4,%xmm6
468
469# qhasm: uint32323232	a0 <<= 7
470# asm 1: pslld $7,<a0=int6464#5
471# asm 2: pslld $7,<a0=%xmm4
472pslld $7,%xmm4
473
474# qhasm: uint32323232	b0 >>= 25
475# asm 1: psrld $25,<b0=int6464#7
476# asm 2: psrld $25,<b0=%xmm6
477psrld $25,%xmm6
478
479# qhasm:                 diag3 ^= a0
480# asm 1: pxor  <a0=int6464#5,<diag3=int6464#4
481# asm 2: pxor  <a0=%xmm4,<diag3=%xmm3
482pxor  %xmm4,%xmm3
483
484# qhasm:                 diag3 ^= b0
485# asm 1: pxor  <b0=int6464#7,<diag3=int6464#4
486# asm 2: pxor  <b0=%xmm6,<diag3=%xmm3
487pxor  %xmm6,%xmm3
488
489# qhasm: uint32323232			a1 += diag3
490# asm 1: paddd <diag3=int6464#4,<a1=int6464#6
491# asm 2: paddd <diag3=%xmm3,<a1=%xmm5
492paddd %xmm3,%xmm5
493
494# qhasm: 						a2 = diag3
495# asm 1: movdqa <diag3=int6464#4,>a2=int6464#5
496# asm 2: movdqa <diag3=%xmm3,>a2=%xmm4
497movdqa %xmm3,%xmm4
498
499# qhasm:             			b1 = a1
500# asm 1: movdqa <a1=int6464#6,>b1=int6464#7
501# asm 2: movdqa <a1=%xmm5,>b1=%xmm6
502movdqa %xmm5,%xmm6
503
504# qhasm: uint32323232			a1 <<= 9
505# asm 1: pslld $9,<a1=int6464#6
506# asm 2: pslld $9,<a1=%xmm5
507pslld $9,%xmm5
508
509# qhasm: uint32323232			b1 >>= 23
510# asm 1: psrld $23,<b1=int6464#7
511# asm 2: psrld $23,<b1=%xmm6
512psrld $23,%xmm6
513
514# qhasm: 				diag2 ^= a1
515# asm 1: pxor  <a1=int6464#6,<diag2=int6464#3
516# asm 2: pxor  <a1=%xmm5,<diag2=%xmm2
517pxor  %xmm5,%xmm2
518
519# qhasm: 		diag3 <<<= 32
520# asm 1: pshufd $0x93,<diag3=int6464#4,<diag3=int6464#4
521# asm 2: pshufd $0x93,<diag3=%xmm3,<diag3=%xmm3
522pshufd $0x93,%xmm3,%xmm3
523
524# qhasm: 				diag2 ^= b1
525# asm 1: pxor  <b1=int6464#7,<diag2=int6464#3
526# asm 2: pxor  <b1=%xmm6,<diag2=%xmm2
527pxor  %xmm6,%xmm2
528
529# qhasm: uint32323232					a2 += diag2
530# asm 1: paddd <diag2=int6464#3,<a2=int6464#5
531# asm 2: paddd <diag2=%xmm2,<a2=%xmm4
532paddd %xmm2,%xmm4
533
534# qhasm: 								a3 = diag2
535# asm 1: movdqa <diag2=int6464#3,>a3=int6464#6
536# asm 2: movdqa <diag2=%xmm2,>a3=%xmm5
537movdqa %xmm2,%xmm5
538
539# qhasm:             					b2 = a2
540# asm 1: movdqa <a2=int6464#5,>b2=int6464#7
541# asm 2: movdqa <a2=%xmm4,>b2=%xmm6
542movdqa %xmm4,%xmm6
543
544# qhasm: uint32323232					a2 <<= 13
545# asm 1: pslld $13,<a2=int6464#5
546# asm 2: pslld $13,<a2=%xmm4
547pslld $13,%xmm4
548
549# qhasm: uint32323232					b2 >>= 19
550# asm 1: psrld $19,<b2=int6464#7
551# asm 2: psrld $19,<b2=%xmm6
552psrld $19,%xmm6
553
554# qhasm: 						diag1 ^= a2
555# asm 1: pxor  <a2=int6464#5,<diag1=int6464#2
556# asm 2: pxor  <a2=%xmm4,<diag1=%xmm1
557pxor  %xmm4,%xmm1
558
559# qhasm: 				diag2 <<<= 64
560# asm 1: pshufd $0x4e,<diag2=int6464#3,<diag2=int6464#3
561# asm 2: pshufd $0x4e,<diag2=%xmm2,<diag2=%xmm2
562pshufd $0x4e,%xmm2,%xmm2
563
564# qhasm: 						diag1 ^= b2
565# asm 1: pxor  <b2=int6464#7,<diag1=int6464#2
566# asm 2: pxor  <b2=%xmm6,<diag1=%xmm1
567pxor  %xmm6,%xmm1
568
569# qhasm: uint32323232							a3 += diag1
570# asm 1: paddd <diag1=int6464#2,<a3=int6464#6
571# asm 2: paddd <diag1=%xmm1,<a3=%xmm5
572paddd %xmm1,%xmm5
573
574# qhasm: 		a4 = diag3
575# asm 1: movdqa <diag3=int6464#4,>a4=int6464#5
576# asm 2: movdqa <diag3=%xmm3,>a4=%xmm4
577movdqa %xmm3,%xmm4
578
579# qhasm:             							b3 = a3
580# asm 1: movdqa <a3=int6464#6,>b3=int6464#7
581# asm 2: movdqa <a3=%xmm5,>b3=%xmm6
582movdqa %xmm5,%xmm6
583
584# qhasm: uint32323232							a3 <<= 18
585# asm 1: pslld $18,<a3=int6464#6
586# asm 2: pslld $18,<a3=%xmm5
587pslld $18,%xmm5
588
589# qhasm: uint32323232							b3 >>= 14
590# asm 1: psrld $14,<b3=int6464#7
591# asm 2: psrld $14,<b3=%xmm6
592psrld $14,%xmm6
593
594# qhasm: 								diag0 ^= a3
595# asm 1: pxor  <a3=int6464#6,<diag0=int6464#1
596# asm 2: pxor  <a3=%xmm5,<diag0=%xmm0
597pxor  %xmm5,%xmm0
598
599# qhasm: 						diag1 <<<= 96
600# asm 1: pshufd $0x39,<diag1=int6464#2,<diag1=int6464#2
601# asm 2: pshufd $0x39,<diag1=%xmm1,<diag1=%xmm1
602pshufd $0x39,%xmm1,%xmm1
603
604# qhasm: 								diag0 ^= b3
605# asm 1: pxor  <b3=int6464#7,<diag0=int6464#1
606# asm 2: pxor  <b3=%xmm6,<diag0=%xmm0
607pxor  %xmm6,%xmm0
608
609# qhasm: uint32323232	a4 += diag0
610# asm 1: paddd <diag0=int6464#1,<a4=int6464#5
611# asm 2: paddd <diag0=%xmm0,<a4=%xmm4
612paddd %xmm0,%xmm4
613
614# qhasm: 				a5 = diag0
615# asm 1: movdqa <diag0=int6464#1,>a5=int6464#6
616# asm 2: movdqa <diag0=%xmm0,>a5=%xmm5
617movdqa %xmm0,%xmm5
618
619# qhasm:             	b4 = a4
620# asm 1: movdqa <a4=int6464#5,>b4=int6464#7
621# asm 2: movdqa <a4=%xmm4,>b4=%xmm6
622movdqa %xmm4,%xmm6
623
624# qhasm: uint32323232	a4 <<= 7
625# asm 1: pslld $7,<a4=int6464#5
626# asm 2: pslld $7,<a4=%xmm4
627pslld $7,%xmm4
628
629# qhasm: uint32323232	b4 >>= 25
630# asm 1: psrld $25,<b4=int6464#7
631# asm 2: psrld $25,<b4=%xmm6
632psrld $25,%xmm6
633
634# qhasm:                 diag1 ^= a4
635# asm 1: pxor  <a4=int6464#5,<diag1=int6464#2
636# asm 2: pxor  <a4=%xmm4,<diag1=%xmm1
637pxor  %xmm4,%xmm1
638
639# qhasm:                 diag1 ^= b4
640# asm 1: pxor  <b4=int6464#7,<diag1=int6464#2
641# asm 2: pxor  <b4=%xmm6,<diag1=%xmm1
642pxor  %xmm6,%xmm1
643
644# qhasm: uint32323232			a5 += diag1
645# asm 1: paddd <diag1=int6464#2,<a5=int6464#6
646# asm 2: paddd <diag1=%xmm1,<a5=%xmm5
647paddd %xmm1,%xmm5
648
649# qhasm: 						a6 = diag1
650# asm 1: movdqa <diag1=int6464#2,>a6=int6464#5
651# asm 2: movdqa <diag1=%xmm1,>a6=%xmm4
652movdqa %xmm1,%xmm4
653
654# qhasm:             			b5 = a5
655# asm 1: movdqa <a5=int6464#6,>b5=int6464#7
656# asm 2: movdqa <a5=%xmm5,>b5=%xmm6
657movdqa %xmm5,%xmm6
658
659# qhasm: uint32323232			a5 <<= 9
660# asm 1: pslld $9,<a5=int6464#6
661# asm 2: pslld $9,<a5=%xmm5
662pslld $9,%xmm5
663
664# qhasm: uint32323232			b5 >>= 23
665# asm 1: psrld $23,<b5=int6464#7
666# asm 2: psrld $23,<b5=%xmm6
667psrld $23,%xmm6
668
669# qhasm: 				diag2 ^= a5
670# asm 1: pxor  <a5=int6464#6,<diag2=int6464#3
671# asm 2: pxor  <a5=%xmm5,<diag2=%xmm2
672pxor  %xmm5,%xmm2
673
674# qhasm: 		diag1 <<<= 32
675# asm 1: pshufd $0x93,<diag1=int6464#2,<diag1=int6464#2
676# asm 2: pshufd $0x93,<diag1=%xmm1,<diag1=%xmm1
677pshufd $0x93,%xmm1,%xmm1
678
679# qhasm: 				diag2 ^= b5
680# asm 1: pxor  <b5=int6464#7,<diag2=int6464#3
681# asm 2: pxor  <b5=%xmm6,<diag2=%xmm2
682pxor  %xmm6,%xmm2
683
684# qhasm: uint32323232					a6 += diag2
685# asm 1: paddd <diag2=int6464#3,<a6=int6464#5
686# asm 2: paddd <diag2=%xmm2,<a6=%xmm4
687paddd %xmm2,%xmm4
688
689# qhasm: 								a7 = diag2
690# asm 1: movdqa <diag2=int6464#3,>a7=int6464#6
691# asm 2: movdqa <diag2=%xmm2,>a7=%xmm5
692movdqa %xmm2,%xmm5
693
694# qhasm:             					b6 = a6
695# asm 1: movdqa <a6=int6464#5,>b6=int6464#7
696# asm 2: movdqa <a6=%xmm4,>b6=%xmm6
697movdqa %xmm4,%xmm6
698
699# qhasm: uint32323232					a6 <<= 13
700# asm 1: pslld $13,<a6=int6464#5
701# asm 2: pslld $13,<a6=%xmm4
702pslld $13,%xmm4
703
704# qhasm: uint32323232					b6 >>= 19
705# asm 1: psrld $19,<b6=int6464#7
706# asm 2: psrld $19,<b6=%xmm6
707psrld $19,%xmm6
708
709# qhasm: 						diag3 ^= a6
710# asm 1: pxor  <a6=int6464#5,<diag3=int6464#4
711# asm 2: pxor  <a6=%xmm4,<diag3=%xmm3
712pxor  %xmm4,%xmm3
713
714# qhasm: 				diag2 <<<= 64
715# asm 1: pshufd $0x4e,<diag2=int6464#3,<diag2=int6464#3
716# asm 2: pshufd $0x4e,<diag2=%xmm2,<diag2=%xmm2
717pshufd $0x4e,%xmm2,%xmm2
718
719# qhasm: 						diag3 ^= b6
720# asm 1: pxor  <b6=int6464#7,<diag3=int6464#4
721# asm 2: pxor  <b6=%xmm6,<diag3=%xmm3
722pxor  %xmm6,%xmm3
723
724# qhasm: uint32323232							a7 += diag3
725# asm 1: paddd <diag3=int6464#4,<a7=int6464#6
726# asm 2: paddd <diag3=%xmm3,<a7=%xmm5
727paddd %xmm3,%xmm5
728
729# qhasm: 		a0 = diag1
730# asm 1: movdqa <diag1=int6464#2,>a0=int6464#5
731# asm 2: movdqa <diag1=%xmm1,>a0=%xmm4
732movdqa %xmm1,%xmm4
733
734# qhasm:             							b7 = a7
735# asm 1: movdqa <a7=int6464#6,>b7=int6464#7
736# asm 2: movdqa <a7=%xmm5,>b7=%xmm6
737movdqa %xmm5,%xmm6
738
739# qhasm: uint32323232							a7 <<= 18
740# asm 1: pslld $18,<a7=int6464#6
741# asm 2: pslld $18,<a7=%xmm5
742pslld $18,%xmm5
743
744# qhasm: uint32323232							b7 >>= 14
745# asm 1: psrld $14,<b7=int6464#7
746# asm 2: psrld $14,<b7=%xmm6
747psrld $14,%xmm6
748
749# qhasm: 								diag0 ^= a7
750# asm 1: pxor  <a7=int6464#6,<diag0=int6464#1
751# asm 2: pxor  <a7=%xmm5,<diag0=%xmm0
752pxor  %xmm5,%xmm0
753
754# qhasm: 						diag3 <<<= 96
755# asm 1: pshufd $0x39,<diag3=int6464#4,<diag3=int6464#4
756# asm 2: pshufd $0x39,<diag3=%xmm3,<diag3=%xmm3
757pshufd $0x39,%xmm3,%xmm3
758
759# qhasm: 								diag0 ^= b7
760# asm 1: pxor  <b7=int6464#7,<diag0=int6464#1
761# asm 2: pxor  <b7=%xmm6,<diag0=%xmm0
762pxor  %xmm6,%xmm0
763
764# qhasm: uint32323232	a0 += diag0
765# asm 1: paddd <diag0=int6464#1,<a0=int6464#5
766# asm 2: paddd <diag0=%xmm0,<a0=%xmm4
767paddd %xmm0,%xmm4
768
769# qhasm: 				a1 = diag0
770# asm 1: movdqa <diag0=int6464#1,>a1=int6464#6
771# asm 2: movdqa <diag0=%xmm0,>a1=%xmm5
772movdqa %xmm0,%xmm5
773
774# qhasm:             	b0 = a0
775# asm 1: movdqa <a0=int6464#5,>b0=int6464#7
776# asm 2: movdqa <a0=%xmm4,>b0=%xmm6
777movdqa %xmm4,%xmm6
778
779# qhasm: uint32323232	a0 <<= 7
780# asm 1: pslld $7,<a0=int6464#5
781# asm 2: pslld $7,<a0=%xmm4
782pslld $7,%xmm4
783
784# qhasm: uint32323232	b0 >>= 25
785# asm 1: psrld $25,<b0=int6464#7
786# asm 2: psrld $25,<b0=%xmm6
787psrld $25,%xmm6
788
789# qhasm:                 diag3 ^= a0
790# asm 1: pxor  <a0=int6464#5,<diag3=int6464#4
791# asm 2: pxor  <a0=%xmm4,<diag3=%xmm3
792pxor  %xmm4,%xmm3
793
794# qhasm:                 diag3 ^= b0
795# asm 1: pxor  <b0=int6464#7,<diag3=int6464#4
796# asm 2: pxor  <b0=%xmm6,<diag3=%xmm3
797pxor  %xmm6,%xmm3
798
799# qhasm: uint32323232			a1 += diag3
800# asm 1: paddd <diag3=int6464#4,<a1=int6464#6
801# asm 2: paddd <diag3=%xmm3,<a1=%xmm5
802paddd %xmm3,%xmm5
803
804# qhasm: 						a2 = diag3
805# asm 1: movdqa <diag3=int6464#4,>a2=int6464#5
806# asm 2: movdqa <diag3=%xmm3,>a2=%xmm4
807movdqa %xmm3,%xmm4
808
809# qhasm:             			b1 = a1
810# asm 1: movdqa <a1=int6464#6,>b1=int6464#7
811# asm 2: movdqa <a1=%xmm5,>b1=%xmm6
812movdqa %xmm5,%xmm6
813
814# qhasm: uint32323232			a1 <<= 9
815# asm 1: pslld $9,<a1=int6464#6
816# asm 2: pslld $9,<a1=%xmm5
817pslld $9,%xmm5
818
819# qhasm: uint32323232			b1 >>= 23
820# asm 1: psrld $23,<b1=int6464#7
821# asm 2: psrld $23,<b1=%xmm6
822psrld $23,%xmm6
823
824# qhasm: 				diag2 ^= a1
825# asm 1: pxor  <a1=int6464#6,<diag2=int6464#3
826# asm 2: pxor  <a1=%xmm5,<diag2=%xmm2
827pxor  %xmm5,%xmm2
828
829# qhasm: 		diag3 <<<= 32
830# asm 1: pshufd $0x93,<diag3=int6464#4,<diag3=int6464#4
831# asm 2: pshufd $0x93,<diag3=%xmm3,<diag3=%xmm3
832pshufd $0x93,%xmm3,%xmm3
833
834# qhasm: 				diag2 ^= b1
835# asm 1: pxor  <b1=int6464#7,<diag2=int6464#3
836# asm 2: pxor  <b1=%xmm6,<diag2=%xmm2
837pxor  %xmm6,%xmm2
838
839# qhasm: uint32323232					a2 += diag2
840# asm 1: paddd <diag2=int6464#3,<a2=int6464#5
841# asm 2: paddd <diag2=%xmm2,<a2=%xmm4
842paddd %xmm2,%xmm4
843
844# qhasm: 								a3 = diag2
845# asm 1: movdqa <diag2=int6464#3,>a3=int6464#6
846# asm 2: movdqa <diag2=%xmm2,>a3=%xmm5
847movdqa %xmm2,%xmm5
848
849# qhasm:             					b2 = a2
850# asm 1: movdqa <a2=int6464#5,>b2=int6464#7
851# asm 2: movdqa <a2=%xmm4,>b2=%xmm6
852movdqa %xmm4,%xmm6
853
854# qhasm: uint32323232					a2 <<= 13
855# asm 1: pslld $13,<a2=int6464#5
856# asm 2: pslld $13,<a2=%xmm4
857pslld $13,%xmm4
858
859# qhasm: uint32323232					b2 >>= 19
860# asm 1: psrld $19,<b2=int6464#7
861# asm 2: psrld $19,<b2=%xmm6
862psrld $19,%xmm6
863
864# qhasm: 						diag1 ^= a2
865# asm 1: pxor  <a2=int6464#5,<diag1=int6464#2
866# asm 2: pxor  <a2=%xmm4,<diag1=%xmm1
867pxor  %xmm4,%xmm1
868
869# qhasm: 				diag2 <<<= 64
870# asm 1: pshufd $0x4e,<diag2=int6464#3,<diag2=int6464#3
871# asm 2: pshufd $0x4e,<diag2=%xmm2,<diag2=%xmm2
872pshufd $0x4e,%xmm2,%xmm2
873
874# qhasm: 						diag1 ^= b2
875# asm 1: pxor  <b2=int6464#7,<diag1=int6464#2
876# asm 2: pxor  <b2=%xmm6,<diag1=%xmm1
877pxor  %xmm6,%xmm1
878
879# qhasm: uint32323232							a3 += diag1
880# asm 1: paddd <diag1=int6464#2,<a3=int6464#6
881# asm 2: paddd <diag1=%xmm1,<a3=%xmm5
882paddd %xmm1,%xmm5
883
884# qhasm: 		a4 = diag3
885# asm 1: movdqa <diag3=int6464#4,>a4=int6464#5
886# asm 2: movdqa <diag3=%xmm3,>a4=%xmm4
887movdqa %xmm3,%xmm4
888
889# qhasm:             							b3 = a3
890# asm 1: movdqa <a3=int6464#6,>b3=int6464#7
891# asm 2: movdqa <a3=%xmm5,>b3=%xmm6
892movdqa %xmm5,%xmm6
893
894# qhasm: uint32323232							a3 <<= 18
895# asm 1: pslld $18,<a3=int6464#6
896# asm 2: pslld $18,<a3=%xmm5
897pslld $18,%xmm5
898
899# qhasm: uint32323232							b3 >>= 14
900# asm 1: psrld $14,<b3=int6464#7
901# asm 2: psrld $14,<b3=%xmm6
902psrld $14,%xmm6
903
904# qhasm: 								diag0 ^= a3
905# asm 1: pxor  <a3=int6464#6,<diag0=int6464#1
906# asm 2: pxor  <a3=%xmm5,<diag0=%xmm0
907pxor  %xmm5,%xmm0
908
909# qhasm: 						diag1 <<<= 96
910# asm 1: pshufd $0x39,<diag1=int6464#2,<diag1=int6464#2
911# asm 2: pshufd $0x39,<diag1=%xmm1,<diag1=%xmm1
912pshufd $0x39,%xmm1,%xmm1
913
914# qhasm: 								diag0 ^= b3
915# asm 1: pxor  <b3=int6464#7,<diag0=int6464#1
916# asm 2: pxor  <b3=%xmm6,<diag0=%xmm0
917pxor  %xmm6,%xmm0
918
919# qhasm: uint32323232	a4 += diag0
920# asm 1: paddd <diag0=int6464#1,<a4=int6464#5
921# asm 2: paddd <diag0=%xmm0,<a4=%xmm4
922paddd %xmm0,%xmm4
923
924# qhasm: 				a5 = diag0
925# asm 1: movdqa <diag0=int6464#1,>a5=int6464#6
926# asm 2: movdqa <diag0=%xmm0,>a5=%xmm5
927movdqa %xmm0,%xmm5
928
929# qhasm:             	b4 = a4
930# asm 1: movdqa <a4=int6464#5,>b4=int6464#7
931# asm 2: movdqa <a4=%xmm4,>b4=%xmm6
932movdqa %xmm4,%xmm6
933
934# qhasm: uint32323232	a4 <<= 7
935# asm 1: pslld $7,<a4=int6464#5
936# asm 2: pslld $7,<a4=%xmm4
937pslld $7,%xmm4
938
939# qhasm: uint32323232	b4 >>= 25
940# asm 1: psrld $25,<b4=int6464#7
941# asm 2: psrld $25,<b4=%xmm6
942psrld $25,%xmm6
943
944# qhasm:                 diag1 ^= a4
945# asm 1: pxor  <a4=int6464#5,<diag1=int6464#2
946# asm 2: pxor  <a4=%xmm4,<diag1=%xmm1
947pxor  %xmm4,%xmm1
948
949# qhasm:                 diag1 ^= b4
950# asm 1: pxor  <b4=int6464#7,<diag1=int6464#2
951# asm 2: pxor  <b4=%xmm6,<diag1=%xmm1
952pxor  %xmm6,%xmm1
953
954# qhasm: uint32323232			a5 += diag1
955# asm 1: paddd <diag1=int6464#2,<a5=int6464#6
956# asm 2: paddd <diag1=%xmm1,<a5=%xmm5
957paddd %xmm1,%xmm5
958
959# qhasm: 						a6 = diag1
960# asm 1: movdqa <diag1=int6464#2,>a6=int6464#5
961# asm 2: movdqa <diag1=%xmm1,>a6=%xmm4
962movdqa %xmm1,%xmm4
963
964# qhasm:             			b5 = a5
965# asm 1: movdqa <a5=int6464#6,>b5=int6464#7
966# asm 2: movdqa <a5=%xmm5,>b5=%xmm6
967movdqa %xmm5,%xmm6
968
969# qhasm: uint32323232			a5 <<= 9
970# asm 1: pslld $9,<a5=int6464#6
971# asm 2: pslld $9,<a5=%xmm5
972pslld $9,%xmm5
973
974# qhasm: uint32323232			b5 >>= 23
975# asm 1: psrld $23,<b5=int6464#7
976# asm 2: psrld $23,<b5=%xmm6
977psrld $23,%xmm6
978
979# qhasm: 				diag2 ^= a5
980# asm 1: pxor  <a5=int6464#6,<diag2=int6464#3
981# asm 2: pxor  <a5=%xmm5,<diag2=%xmm2
982pxor  %xmm5,%xmm2
983
984# qhasm: 		diag1 <<<= 32
985# asm 1: pshufd $0x93,<diag1=int6464#2,<diag1=int6464#2
986# asm 2: pshufd $0x93,<diag1=%xmm1,<diag1=%xmm1
987pshufd $0x93,%xmm1,%xmm1
988
989# qhasm: 				diag2 ^= b5
990# asm 1: pxor  <b5=int6464#7,<diag2=int6464#3
991# asm 2: pxor  <b5=%xmm6,<diag2=%xmm2
992pxor  %xmm6,%xmm2
993
994# qhasm: uint32323232					a6 += diag2
995# asm 1: paddd <diag2=int6464#3,<a6=int6464#5
996# asm 2: paddd <diag2=%xmm2,<a6=%xmm4
997paddd %xmm2,%xmm4
998
999# qhasm: 								a7 = diag2
1000# asm 1: movdqa <diag2=int6464#3,>a7=int6464#6
1001# asm 2: movdqa <diag2=%xmm2,>a7=%xmm5
1002movdqa %xmm2,%xmm5
1003
1004# qhasm:             					b6 = a6
1005# asm 1: movdqa <a6=int6464#5,>b6=int6464#7
1006# asm 2: movdqa <a6=%xmm4,>b6=%xmm6
1007movdqa %xmm4,%xmm6
1008
1009# qhasm: uint32323232					a6 <<= 13
1010# asm 1: pslld $13,<a6=int6464#5
1011# asm 2: pslld $13,<a6=%xmm4
1012pslld $13,%xmm4
1013
1014# qhasm: uint32323232					b6 >>= 19
1015# asm 1: psrld $19,<b6=int6464#7
1016# asm 2: psrld $19,<b6=%xmm6
1017psrld $19,%xmm6
1018
1019# qhasm: 						diag3 ^= a6
1020# asm 1: pxor  <a6=int6464#5,<diag3=int6464#4
1021# asm 2: pxor  <a6=%xmm4,<diag3=%xmm3
1022pxor  %xmm4,%xmm3
1023
1024# qhasm: 				diag2 <<<= 64
1025# asm 1: pshufd $0x4e,<diag2=int6464#3,<diag2=int6464#3
1026# asm 2: pshufd $0x4e,<diag2=%xmm2,<diag2=%xmm2
1027pshufd $0x4e,%xmm2,%xmm2
1028
1029# qhasm: 						diag3 ^= b6
1030# asm 1: pxor  <b6=int6464#7,<diag3=int6464#4
1031# asm 2: pxor  <b6=%xmm6,<diag3=%xmm3
1032pxor  %xmm6,%xmm3
1033
1034# qhasm: 		 unsigned>? i -= 4
1035# asm 1: sub  $4,<i=int32#1
1036# asm 2: sub  $4,<i=%eax
1037sub  $4,%eax
1038
1039# qhasm: uint32323232							a7 += diag3
1040# asm 1: paddd <diag3=int6464#4,<a7=int6464#6
1041# asm 2: paddd <diag3=%xmm3,<a7=%xmm5
1042paddd %xmm3,%xmm5
1043
1044# qhasm: 		a0 = diag1
1045# asm 1: movdqa <diag1=int6464#2,>a0=int6464#5
1046# asm 2: movdqa <diag1=%xmm1,>a0=%xmm4
1047movdqa %xmm1,%xmm4
1048
1049# qhasm:             							b7 = a7
1050# asm 1: movdqa <a7=int6464#6,>b7=int6464#7
1051# asm 2: movdqa <a7=%xmm5,>b7=%xmm6
1052movdqa %xmm5,%xmm6
1053
1054# qhasm: uint32323232							a7 <<= 18
1055# asm 1: pslld $18,<a7=int6464#6
1056# asm 2: pslld $18,<a7=%xmm5
1057pslld $18,%xmm5
1058
1059# qhasm: uint32323232							b7 >>= 14
1060# asm 1: psrld $14,<b7=int6464#7
1061# asm 2: psrld $14,<b7=%xmm6
1062psrld $14,%xmm6
1063
1064# qhasm: 								diag0 ^= a7
1065# asm 1: pxor  <a7=int6464#6,<diag0=int6464#1
1066# asm 2: pxor  <a7=%xmm5,<diag0=%xmm0
1067pxor  %xmm5,%xmm0
1068
1069# qhasm: 						diag3 <<<= 96
1070# asm 1: pshufd $0x39,<diag3=int6464#4,<diag3=int6464#4
1071# asm 2: pshufd $0x39,<diag3=%xmm3,<diag3=%xmm3
1072pshufd $0x39,%xmm3,%xmm3
1073
1074# qhasm: 								diag0 ^= b7
1075# asm 1: pxor  <b7=int6464#7,<diag0=int6464#1
1076# asm 2: pxor  <b7=%xmm6,<diag0=%xmm0
1077pxor  %xmm6,%xmm0
1078# comment:fp stack unchanged by jump
1079
1080# qhasm: goto mainloop if unsigned>
1081ja ._mainloop
1082
1083# qhasm: uint32323232 diag0 += *(int128 *) (x + 0)
1084# asm 1: paddd 0(<x=int32#3),<diag0=int6464#1
1085# asm 2: paddd 0(<x=%edx),<diag0=%xmm0
1086paddd 0(%edx),%xmm0
1087
1088# qhasm: uint32323232 diag1 += *(int128 *) (x + 16)
1089# asm 1: paddd 16(<x=int32#3),<diag1=int6464#2
1090# asm 2: paddd 16(<x=%edx),<diag1=%xmm1
1091paddd 16(%edx),%xmm1
1092
1093# qhasm: uint32323232 diag2 += *(int128 *) (x + 32)
1094# asm 1: paddd 32(<x=int32#3),<diag2=int6464#3
1095# asm 2: paddd 32(<x=%edx),<diag2=%xmm2
1096paddd 32(%edx),%xmm2
1097
1098# qhasm: uint32323232 diag3 += *(int128 *) (x + 48)
1099# asm 1: paddd 48(<x=int32#3),<diag3=int6464#4
1100# asm 2: paddd 48(<x=%edx),<diag3=%xmm3
1101paddd 48(%edx),%xmm3
1102
1103# qhasm: in0 = diag0
1104# asm 1: movd   <diag0=int6464#1,>in0=int32#1
1105# asm 2: movd   <diag0=%xmm0,>in0=%eax
1106movd   %xmm0,%eax
1107
1108# qhasm: in12 = diag1
1109# asm 1: movd   <diag1=int6464#2,>in12=int32#2
1110# asm 2: movd   <diag1=%xmm1,>in12=%ecx
1111movd   %xmm1,%ecx
1112
1113# qhasm: in8 = diag2
1114# asm 1: movd   <diag2=int6464#3,>in8=int32#4
1115# asm 2: movd   <diag2=%xmm2,>in8=%ebx
1116movd   %xmm2,%ebx
1117
1118# qhasm: in4 = diag3
1119# asm 1: movd   <diag3=int6464#4,>in4=int32#7
1120# asm 2: movd   <diag3=%xmm3,>in4=%ebp
1121movd   %xmm3,%ebp
1122
1123# qhasm: diag0 <<<= 96
1124# asm 1: pshufd $0x39,<diag0=int6464#1,<diag0=int6464#1
1125# asm 2: pshufd $0x39,<diag0=%xmm0,<diag0=%xmm0
1126pshufd $0x39,%xmm0,%xmm0
1127
1128# qhasm: diag1 <<<= 96
1129# asm 1: pshufd $0x39,<diag1=int6464#2,<diag1=int6464#2
1130# asm 2: pshufd $0x39,<diag1=%xmm1,<diag1=%xmm1
1131pshufd $0x39,%xmm1,%xmm1
1132
1133# qhasm: diag2 <<<= 96
1134# asm 1: pshufd $0x39,<diag2=int6464#3,<diag2=int6464#3
1135# asm 2: pshufd $0x39,<diag2=%xmm2,<diag2=%xmm2
1136pshufd $0x39,%xmm2,%xmm2
1137
1138# qhasm: diag3 <<<= 96
1139# asm 1: pshufd $0x39,<diag3=int6464#4,<diag3=int6464#4
1140# asm 2: pshufd $0x39,<diag3=%xmm3,<diag3=%xmm3
1141pshufd $0x39,%xmm3,%xmm3
1142
1143# qhasm: in0 ^= *(uint32 *) (m + 0)
1144# asm 1: xorl 0(<m=int32#5),<in0=int32#1
1145# asm 2: xorl 0(<m=%esi),<in0=%eax
1146xorl 0(%esi),%eax
1147
1148# qhasm: in12 ^= *(uint32 *) (m + 48)
1149# asm 1: xorl 48(<m=int32#5),<in12=int32#2
1150# asm 2: xorl 48(<m=%esi),<in12=%ecx
1151xorl 48(%esi),%ecx
1152
1153# qhasm: in8 ^= *(uint32 *) (m + 32)
1154# asm 1: xorl 32(<m=int32#5),<in8=int32#4
1155# asm 2: xorl 32(<m=%esi),<in8=%ebx
1156xorl 32(%esi),%ebx
1157
1158# qhasm: in4 ^= *(uint32 *) (m + 16)
1159# asm 1: xorl 16(<m=int32#5),<in4=int32#7
1160# asm 2: xorl 16(<m=%esi),<in4=%ebp
1161xorl 16(%esi),%ebp
1162
1163# qhasm: *(uint32 *) (out + 0) = in0
1164# asm 1: movl <in0=int32#1,0(<out=int32#6)
1165# asm 2: movl <in0=%eax,0(<out=%edi)
1166movl %eax,0(%edi)
1167
1168# qhasm: *(uint32 *) (out + 48) = in12
1169# asm 1: movl <in12=int32#2,48(<out=int32#6)
1170# asm 2: movl <in12=%ecx,48(<out=%edi)
1171movl %ecx,48(%edi)
1172
1173# qhasm: *(uint32 *) (out + 32) = in8
1174# asm 1: movl <in8=int32#4,32(<out=int32#6)
1175# asm 2: movl <in8=%ebx,32(<out=%edi)
1176movl %ebx,32(%edi)
1177
1178# qhasm: *(uint32 *) (out + 16) = in4
1179# asm 1: movl <in4=int32#7,16(<out=int32#6)
1180# asm 2: movl <in4=%ebp,16(<out=%edi)
1181movl %ebp,16(%edi)
1182
1183# qhasm: in5 = diag0
1184# asm 1: movd   <diag0=int6464#1,>in5=int32#1
1185# asm 2: movd   <diag0=%xmm0,>in5=%eax
1186movd   %xmm0,%eax
1187
1188# qhasm: in1 = diag1
1189# asm 1: movd   <diag1=int6464#2,>in1=int32#2
1190# asm 2: movd   <diag1=%xmm1,>in1=%ecx
1191movd   %xmm1,%ecx
1192
1193# qhasm: in13 = diag2
1194# asm 1: movd   <diag2=int6464#3,>in13=int32#4
1195# asm 2: movd   <diag2=%xmm2,>in13=%ebx
1196movd   %xmm2,%ebx
1197
1198# qhasm: in9 = diag3
1199# asm 1: movd   <diag3=int6464#4,>in9=int32#7
1200# asm 2: movd   <diag3=%xmm3,>in9=%ebp
1201movd   %xmm3,%ebp
1202
1203# qhasm: diag0 <<<= 96
1204# asm 1: pshufd $0x39,<diag0=int6464#1,<diag0=int6464#1
1205# asm 2: pshufd $0x39,<diag0=%xmm0,<diag0=%xmm0
1206pshufd $0x39,%xmm0,%xmm0
1207
1208# qhasm: diag1 <<<= 96
1209# asm 1: pshufd $0x39,<diag1=int6464#2,<diag1=int6464#2
1210# asm 2: pshufd $0x39,<diag1=%xmm1,<diag1=%xmm1
1211pshufd $0x39,%xmm1,%xmm1
1212
1213# qhasm: diag2 <<<= 96
1214# asm 1: pshufd $0x39,<diag2=int6464#3,<diag2=int6464#3
1215# asm 2: pshufd $0x39,<diag2=%xmm2,<diag2=%xmm2
1216pshufd $0x39,%xmm2,%xmm2
1217
1218# qhasm: diag3 <<<= 96
1219# asm 1: pshufd $0x39,<diag3=int6464#4,<diag3=int6464#4
1220# asm 2: pshufd $0x39,<diag3=%xmm3,<diag3=%xmm3
1221pshufd $0x39,%xmm3,%xmm3
1222
1223# qhasm: in5 ^= *(uint32 *) (m + 20)
1224# asm 1: xorl 20(<m=int32#5),<in5=int32#1
1225# asm 2: xorl 20(<m=%esi),<in5=%eax
1226xorl 20(%esi),%eax
1227
1228# qhasm: in1 ^= *(uint32 *) (m + 4)
1229# asm 1: xorl 4(<m=int32#5),<in1=int32#2
1230# asm 2: xorl 4(<m=%esi),<in1=%ecx
1231xorl 4(%esi),%ecx
1232
1233# qhasm: in13 ^= *(uint32 *) (m + 52)
1234# asm 1: xorl 52(<m=int32#5),<in13=int32#4
1235# asm 2: xorl 52(<m=%esi),<in13=%ebx
1236xorl 52(%esi),%ebx
1237
1238# qhasm: in9 ^= *(uint32 *) (m + 36)
1239# asm 1: xorl 36(<m=int32#5),<in9=int32#7
1240# asm 2: xorl 36(<m=%esi),<in9=%ebp
1241xorl 36(%esi),%ebp
1242
1243# qhasm: *(uint32 *) (out + 20) = in5
1244# asm 1: movl <in5=int32#1,20(<out=int32#6)
1245# asm 2: movl <in5=%eax,20(<out=%edi)
1246movl %eax,20(%edi)
1247
1248# qhasm: *(uint32 *) (out + 4) = in1
1249# asm 1: movl <in1=int32#2,4(<out=int32#6)
1250# asm 2: movl <in1=%ecx,4(<out=%edi)
1251movl %ecx,4(%edi)
1252
1253# qhasm: *(uint32 *) (out + 52) = in13
1254# asm 1: movl <in13=int32#4,52(<out=int32#6)
1255# asm 2: movl <in13=%ebx,52(<out=%edi)
1256movl %ebx,52(%edi)
1257
1258# qhasm: *(uint32 *) (out + 36) = in9
1259# asm 1: movl <in9=int32#7,36(<out=int32#6)
1260# asm 2: movl <in9=%ebp,36(<out=%edi)
1261movl %ebp,36(%edi)
1262
1263# qhasm: in10 = diag0
1264# asm 1: movd   <diag0=int6464#1,>in10=int32#1
1265# asm 2: movd   <diag0=%xmm0,>in10=%eax
1266movd   %xmm0,%eax
1267
1268# qhasm: in6 = diag1
1269# asm 1: movd   <diag1=int6464#2,>in6=int32#2
1270# asm 2: movd   <diag1=%xmm1,>in6=%ecx
1271movd   %xmm1,%ecx
1272
1273# qhasm: in2 = diag2
1274# asm 1: movd   <diag2=int6464#3,>in2=int32#4
1275# asm 2: movd   <diag2=%xmm2,>in2=%ebx
1276movd   %xmm2,%ebx
1277
1278# qhasm: in14 = diag3
1279# asm 1: movd   <diag3=int6464#4,>in14=int32#7
1280# asm 2: movd   <diag3=%xmm3,>in14=%ebp
1281movd   %xmm3,%ebp
1282
1283# qhasm: diag0 <<<= 96
1284# asm 1: pshufd $0x39,<diag0=int6464#1,<diag0=int6464#1
1285# asm 2: pshufd $0x39,<diag0=%xmm0,<diag0=%xmm0
1286pshufd $0x39,%xmm0,%xmm0
1287
1288# qhasm: diag1 <<<= 96
1289# asm 1: pshufd $0x39,<diag1=int6464#2,<diag1=int6464#2
1290# asm 2: pshufd $0x39,<diag1=%xmm1,<diag1=%xmm1
1291pshufd $0x39,%xmm1,%xmm1
1292
1293# qhasm: diag2 <<<= 96
1294# asm 1: pshufd $0x39,<diag2=int6464#3,<diag2=int6464#3
1295# asm 2: pshufd $0x39,<diag2=%xmm2,<diag2=%xmm2
1296pshufd $0x39,%xmm2,%xmm2
1297
1298# qhasm: diag3 <<<= 96
1299# asm 1: pshufd $0x39,<diag3=int6464#4,<diag3=int6464#4
1300# asm 2: pshufd $0x39,<diag3=%xmm3,<diag3=%xmm3
1301pshufd $0x39,%xmm3,%xmm3
1302
1303# qhasm: in10 ^= *(uint32 *) (m + 40)
1304# asm 1: xorl 40(<m=int32#5),<in10=int32#1
1305# asm 2: xorl 40(<m=%esi),<in10=%eax
1306xorl 40(%esi),%eax
1307
1308# qhasm: in6 ^= *(uint32 *) (m + 24)
1309# asm 1: xorl 24(<m=int32#5),<in6=int32#2
1310# asm 2: xorl 24(<m=%esi),<in6=%ecx
1311xorl 24(%esi),%ecx
1312
1313# qhasm: in2 ^= *(uint32 *) (m + 8)
1314# asm 1: xorl 8(<m=int32#5),<in2=int32#4
1315# asm 2: xorl 8(<m=%esi),<in2=%ebx
1316xorl 8(%esi),%ebx
1317
1318# qhasm: in14 ^= *(uint32 *) (m + 56)
1319# asm 1: xorl 56(<m=int32#5),<in14=int32#7
1320# asm 2: xorl 56(<m=%esi),<in14=%ebp
1321xorl 56(%esi),%ebp
1322
1323# qhasm: *(uint32 *) (out + 40) = in10
1324# asm 1: movl <in10=int32#1,40(<out=int32#6)
1325# asm 2: movl <in10=%eax,40(<out=%edi)
1326movl %eax,40(%edi)
1327
1328# qhasm: *(uint32 *) (out + 24) = in6
1329# asm 1: movl <in6=int32#2,24(<out=int32#6)
1330# asm 2: movl <in6=%ecx,24(<out=%edi)
1331movl %ecx,24(%edi)
1332
1333# qhasm: *(uint32 *) (out + 8) = in2
1334# asm 1: movl <in2=int32#4,8(<out=int32#6)
1335# asm 2: movl <in2=%ebx,8(<out=%edi)
1336movl %ebx,8(%edi)
1337
1338# qhasm: *(uint32 *) (out + 56) = in14
1339# asm 1: movl <in14=int32#7,56(<out=int32#6)
1340# asm 2: movl <in14=%ebp,56(<out=%edi)
1341movl %ebp,56(%edi)
1342
1343# qhasm: in15 = diag0
1344# asm 1: movd   <diag0=int6464#1,>in15=int32#1
1345# asm 2: movd   <diag0=%xmm0,>in15=%eax
1346movd   %xmm0,%eax
1347
1348# qhasm: in11 = diag1
1349# asm 1: movd   <diag1=int6464#2,>in11=int32#2
1350# asm 2: movd   <diag1=%xmm1,>in11=%ecx
1351movd   %xmm1,%ecx
1352
1353# qhasm: in7 = diag2
1354# asm 1: movd   <diag2=int6464#3,>in7=int32#4
1355# asm 2: movd   <diag2=%xmm2,>in7=%ebx
1356movd   %xmm2,%ebx
1357
1358# qhasm: in3 = diag3
1359# asm 1: movd   <diag3=int6464#4,>in3=int32#7
1360# asm 2: movd   <diag3=%xmm3,>in3=%ebp
1361movd   %xmm3,%ebp
1362
1363# qhasm: in15 ^= *(uint32 *) (m + 60)
1364# asm 1: xorl 60(<m=int32#5),<in15=int32#1
1365# asm 2: xorl 60(<m=%esi),<in15=%eax
1366xorl 60(%esi),%eax
1367
1368# qhasm: in11 ^= *(uint32 *) (m + 44)
1369# asm 1: xorl 44(<m=int32#5),<in11=int32#2
1370# asm 2: xorl 44(<m=%esi),<in11=%ecx
1371xorl 44(%esi),%ecx
1372
1373# qhasm: in7 ^= *(uint32 *) (m + 28)
1374# asm 1: xorl 28(<m=int32#5),<in7=int32#4
1375# asm 2: xorl 28(<m=%esi),<in7=%ebx
1376xorl 28(%esi),%ebx
1377
1378# qhasm: in3 ^= *(uint32 *) (m + 12)
1379# asm 1: xorl 12(<m=int32#5),<in3=int32#7
1380# asm 2: xorl 12(<m=%esi),<in3=%ebp
1381xorl 12(%esi),%ebp
1382
1383# qhasm: *(uint32 *) (out + 60) = in15
1384# asm 1: movl <in15=int32#1,60(<out=int32#6)
1385# asm 2: movl <in15=%eax,60(<out=%edi)
1386movl %eax,60(%edi)
1387
1388# qhasm: *(uint32 *) (out + 44) = in11
1389# asm 1: movl <in11=int32#2,44(<out=int32#6)
1390# asm 2: movl <in11=%ecx,44(<out=%edi)
1391movl %ecx,44(%edi)
1392
1393# qhasm: *(uint32 *) (out + 28) = in7
1394# asm 1: movl <in7=int32#4,28(<out=int32#6)
1395# asm 2: movl <in7=%ebx,28(<out=%edi)
1396movl %ebx,28(%edi)
1397
1398# qhasm: *(uint32 *) (out + 12) = in3
1399# asm 1: movl <in3=int32#7,12(<out=int32#6)
1400# asm 2: movl <in3=%ebp,12(<out=%edi)
1401movl %ebp,12(%edi)
1402
1403# qhasm:   bytes = bytes_backup
1404# asm 1: movl <bytes_backup=stack32#7,>bytes=int32#4
1405# asm 2: movl <bytes_backup=24(%esp),>bytes=%ebx
1406movl 24(%esp),%ebx
1407
1408# qhasm:   in8 = *(uint32 *) (x + 32)
1409# asm 1: movl 32(<x=int32#3),>in8=int32#1
1410# asm 2: movl 32(<x=%edx),>in8=%eax
1411movl 32(%edx),%eax
1412
1413# qhasm:   in9 = *(uint32 *) (x + 52)
1414# asm 1: movl 52(<x=int32#3),>in9=int32#2
1415# asm 2: movl 52(<x=%edx),>in9=%ecx
1416movl 52(%edx),%ecx
1417
1418# qhasm:   carry? in8 += 1
1419# asm 1: add  $1,<in8=int32#1
1420# asm 2: add  $1,<in8=%eax
1421add  $1,%eax
1422
1423# qhasm:   in9 += 0 + carry
1424# asm 1: adc $0,<in9=int32#2
1425# asm 2: adc $0,<in9=%ecx
1426adc $0,%ecx
1427
1428# qhasm:   *(uint32 *) (x + 32) = in8
1429# asm 1: movl <in8=int32#1,32(<x=int32#3)
1430# asm 2: movl <in8=%eax,32(<x=%edx)
1431movl %eax,32(%edx)
1432
1433# qhasm:   *(uint32 *) (x + 52) = in9
1434# asm 1: movl <in9=int32#2,52(<x=int32#3)
1435# asm 2: movl <in9=%ecx,52(<x=%edx)
1436movl %ecx,52(%edx)
1437
1438# qhasm:                          unsigned>? unsigned<? bytes - 64
1439# asm 1: cmp  $64,<bytes=int32#4
1440# asm 2: cmp  $64,<bytes=%ebx
1441cmp  $64,%ebx
1442# comment:fp stack unchanged by jump
1443
1444# qhasm:   goto bytesatleast65 if unsigned>
1445ja ._bytesatleast65
1446# comment:fp stack unchanged by jump
1447
1448# qhasm:     goto bytesatleast64 if !unsigned<
1449jae ._bytesatleast64
1450
1451# qhasm:       m = out
1452# asm 1: mov  <out=int32#6,>m=int32#5
1453# asm 2: mov  <out=%edi,>m=%esi
1454mov  %edi,%esi
1455
1456# qhasm:       out = ctarget
1457# asm 1: movl <ctarget=stack32#6,>out=int32#6
1458# asm 2: movl <ctarget=20(%esp),>out=%edi
1459movl 20(%esp),%edi
1460
1461# qhasm:       i = bytes
1462# asm 1: mov  <bytes=int32#4,>i=int32#2
1463# asm 2: mov  <bytes=%ebx,>i=%ecx
1464mov  %ebx,%ecx
1465
1466# qhasm:       while (i) { *out++ = *m++; --i }
1467rep movsb
1468# comment:fp stack unchanged by fallthrough
1469
1470# qhasm:     bytesatleast64:
1471._bytesatleast64:
1472# comment:fp stack unchanged by fallthrough
1473
1474# qhasm:     done:
1475._done:
1476
1477# qhasm:     eax = eax_stack
1478# asm 1: movl <eax_stack=stack32#1,>eax=int32#1
1479# asm 2: movl <eax_stack=0(%esp),>eax=%eax
1480movl 0(%esp),%eax
1481
1482# qhasm:     ebx = ebx_stack
1483# asm 1: movl <ebx_stack=stack32#2,>ebx=int32#4
1484# asm 2: movl <ebx_stack=4(%esp),>ebx=%ebx
1485movl 4(%esp),%ebx
1486
1487# qhasm:     esi = esi_stack
1488# asm 1: movl <esi_stack=stack32#3,>esi=int32#5
1489# asm 2: movl <esi_stack=8(%esp),>esi=%esi
1490movl 8(%esp),%esi
1491
1492# qhasm:     edi = edi_stack
1493# asm 1: movl <edi_stack=stack32#4,>edi=int32#6
1494# asm 2: movl <edi_stack=12(%esp),>edi=%edi
1495movl 12(%esp),%edi
1496
1497# qhasm:     ebp = ebp_stack
1498# asm 1: movl <ebp_stack=stack32#5,>ebp=int32#7
1499# asm 2: movl <ebp_stack=16(%esp),>ebp=%ebp
1500movl 16(%esp),%ebp
1501
1502# qhasm:     leave
1503add %eax,%esp
1504ret
1505
1506# qhasm:   bytesatleast65:
1507._bytesatleast65:
1508
1509# qhasm:   bytes -= 64
1510# asm 1: sub  $64,<bytes=int32#4
1511# asm 2: sub  $64,<bytes=%ebx
1512sub  $64,%ebx
1513
1514# qhasm:   out += 64
1515# asm 1: add  $64,<out=int32#6
1516# asm 2: add  $64,<out=%edi
1517add  $64,%edi
1518
1519# qhasm:   m += 64
1520# asm 1: add  $64,<m=int32#5
1521# asm 2: add  $64,<m=%esi
1522add  $64,%esi
1523# comment:fp stack unchanged by jump
1524
1525# qhasm: goto bytesatleast1
1526jmp ._bytesatleast1
1527
1528# qhasm: enter ECRYPT_init
1529.text
1530.p2align 5
1531.globl _ECRYPT_init
1532.globl ECRYPT_init
1533_ECRYPT_init:
1534ECRYPT_init:
1535mov %esp,%eax
1536and $31,%eax
1537add $96,%eax
1538sub %eax,%esp
1539
1540# qhasm: leave
1541add %eax,%esp
1542ret
1543
1544# qhasm: enter ECRYPT_keysetup
1545.text
1546.p2align 5
1547.globl _ECRYPT_keysetup
1548.globl ECRYPT_keysetup
1549_ECRYPT_keysetup:
1550ECRYPT_keysetup:
1551mov %esp,%eax
1552and $31,%eax
1553add $96,%eax
1554sub %eax,%esp
1555
1556# qhasm:   eax_stack = eax
1557# asm 1: movl <eax=int32#1,>eax_stack=stack32#1
1558# asm 2: movl <eax=%eax,>eax_stack=0(%esp)
1559movl %eax,0(%esp)
1560
1561# qhasm:   ebx_stack = ebx
1562# asm 1: movl <ebx=int32#4,>ebx_stack=stack32#2
1563# asm 2: movl <ebx=%ebx,>ebx_stack=4(%esp)
1564movl %ebx,4(%esp)
1565
1566# qhasm:   esi_stack = esi
1567# asm 1: movl <esi=int32#5,>esi_stack=stack32#3
1568# asm 2: movl <esi=%esi,>esi_stack=8(%esp)
1569movl %esi,8(%esp)
1570
1571# qhasm:   edi_stack = edi
1572# asm 1: movl <edi=int32#6,>edi_stack=stack32#4
1573# asm 2: movl <edi=%edi,>edi_stack=12(%esp)
1574movl %edi,12(%esp)
1575
1576# qhasm:   ebp_stack = ebp
1577# asm 1: movl <ebp=int32#7,>ebp_stack=stack32#5
1578# asm 2: movl <ebp=%ebp,>ebp_stack=16(%esp)
1579movl %ebp,16(%esp)
1580
1581# qhasm:   k = arg2
1582# asm 1: movl <arg2=stack32#-2,>k=int32#2
1583# asm 2: movl <arg2=8(%esp,%eax),>k=%ecx
1584movl 8(%esp,%eax),%ecx
1585
1586# qhasm:   kbits = arg3
1587# asm 1: movl <arg3=stack32#-3,>kbits=int32#3
1588# asm 2: movl <arg3=12(%esp,%eax),>kbits=%edx
1589movl 12(%esp,%eax),%edx
1590
1591# qhasm:   x = arg1
1592# asm 1: movl <arg1=stack32#-1,>x=int32#1
1593# asm 2: movl <arg1=4(%esp,%eax),>x=%eax
1594movl 4(%esp,%eax),%eax
1595
1596# qhasm:   in1 = *(uint32 *) (k + 0)
1597# asm 1: movl 0(<k=int32#2),>in1=int32#4
1598# asm 2: movl 0(<k=%ecx),>in1=%ebx
1599movl 0(%ecx),%ebx
1600
1601# qhasm:   in2 = *(uint32 *) (k + 4)
1602# asm 1: movl 4(<k=int32#2),>in2=int32#5
1603# asm 2: movl 4(<k=%ecx),>in2=%esi
1604movl 4(%ecx),%esi
1605
1606# qhasm:   in3 = *(uint32 *) (k + 8)
1607# asm 1: movl 8(<k=int32#2),>in3=int32#6
1608# asm 2: movl 8(<k=%ecx),>in3=%edi
1609movl 8(%ecx),%edi
1610
1611# qhasm:   in4 = *(uint32 *) (k + 12)
1612# asm 1: movl 12(<k=int32#2),>in4=int32#7
1613# asm 2: movl 12(<k=%ecx),>in4=%ebp
1614movl 12(%ecx),%ebp
1615
1616# qhasm:   *(uint32 *) (x + 20) = in1
1617# asm 1: movl <in1=int32#4,20(<x=int32#1)
1618# asm 2: movl <in1=%ebx,20(<x=%eax)
1619movl %ebx,20(%eax)
1620
1621# qhasm:   *(uint32 *) (x + 40) = in2
1622# asm 1: movl <in2=int32#5,40(<x=int32#1)
1623# asm 2: movl <in2=%esi,40(<x=%eax)
1624movl %esi,40(%eax)
1625
1626# qhasm:   *(uint32 *) (x + 60) = in3
1627# asm 1: movl <in3=int32#6,60(<x=int32#1)
1628# asm 2: movl <in3=%edi,60(<x=%eax)
1629movl %edi,60(%eax)
1630
1631# qhasm:   *(uint32 *) (x + 48) = in4
1632# asm 1: movl <in4=int32#7,48(<x=int32#1)
1633# asm 2: movl <in4=%ebp,48(<x=%eax)
1634movl %ebp,48(%eax)
1635
1636# qhasm:                    unsigned<? kbits - 256
1637# asm 1: cmp  $256,<kbits=int32#3
1638# asm 2: cmp  $256,<kbits=%edx
1639cmp  $256,%edx
1640# comment:fp stack unchanged by jump
1641
1642# qhasm:   goto kbits128 if unsigned<
1643jb ._kbits128
1644
1645# qhasm:   kbits256:
1646._kbits256:
1647
1648# qhasm:     in11 = *(uint32 *) (k + 16)
1649# asm 1: movl 16(<k=int32#2),>in11=int32#3
1650# asm 2: movl 16(<k=%ecx),>in11=%edx
1651movl 16(%ecx),%edx
1652
1653# qhasm:     in12 = *(uint32 *) (k + 20)
1654# asm 1: movl 20(<k=int32#2),>in12=int32#4
1655# asm 2: movl 20(<k=%ecx),>in12=%ebx
1656movl 20(%ecx),%ebx
1657
1658# qhasm:     in13 = *(uint32 *) (k + 24)
1659# asm 1: movl 24(<k=int32#2),>in13=int32#5
1660# asm 2: movl 24(<k=%ecx),>in13=%esi
1661movl 24(%ecx),%esi
1662
1663# qhasm:     in14 = *(uint32 *) (k + 28)
1664# asm 1: movl 28(<k=int32#2),>in14=int32#2
1665# asm 2: movl 28(<k=%ecx),>in14=%ecx
1666movl 28(%ecx),%ecx
1667
1668# qhasm:     *(uint32 *) (x + 28) = in11
1669# asm 1: movl <in11=int32#3,28(<x=int32#1)
1670# asm 2: movl <in11=%edx,28(<x=%eax)
1671movl %edx,28(%eax)
1672
1673# qhasm:     *(uint32 *) (x + 16) = in12
1674# asm 1: movl <in12=int32#4,16(<x=int32#1)
1675# asm 2: movl <in12=%ebx,16(<x=%eax)
1676movl %ebx,16(%eax)
1677
1678# qhasm:     *(uint32 *) (x + 36) = in13
1679# asm 1: movl <in13=int32#5,36(<x=int32#1)
1680# asm 2: movl <in13=%esi,36(<x=%eax)
1681movl %esi,36(%eax)
1682
1683# qhasm:     *(uint32 *) (x + 56) = in14
1684# asm 1: movl <in14=int32#2,56(<x=int32#1)
1685# asm 2: movl <in14=%ecx,56(<x=%eax)
1686movl %ecx,56(%eax)
1687
1688# qhasm:     in0 = 1634760805
1689# asm 1: mov  $1634760805,>in0=int32#2
1690# asm 2: mov  $1634760805,>in0=%ecx
1691mov  $1634760805,%ecx
1692
1693# qhasm:     in5 = 857760878
1694# asm 1: mov  $857760878,>in5=int32#3
1695# asm 2: mov  $857760878,>in5=%edx
1696mov  $857760878,%edx
1697
1698# qhasm:     in10 = 2036477234
1699# asm 1: mov  $2036477234,>in10=int32#4
1700# asm 2: mov  $2036477234,>in10=%ebx
1701mov  $2036477234,%ebx
1702
1703# qhasm:     in15 = 1797285236
1704# asm 1: mov  $1797285236,>in15=int32#5
1705# asm 2: mov  $1797285236,>in15=%esi
1706mov  $1797285236,%esi
1707
1708# qhasm:     *(uint32 *) (x + 0) = in0
1709# asm 1: movl <in0=int32#2,0(<x=int32#1)
1710# asm 2: movl <in0=%ecx,0(<x=%eax)
1711movl %ecx,0(%eax)
1712
1713# qhasm:     *(uint32 *) (x + 4) = in5
1714# asm 1: movl <in5=int32#3,4(<x=int32#1)
1715# asm 2: movl <in5=%edx,4(<x=%eax)
1716movl %edx,4(%eax)
1717
1718# qhasm:     *(uint32 *) (x + 8) = in10
1719# asm 1: movl <in10=int32#4,8(<x=int32#1)
1720# asm 2: movl <in10=%ebx,8(<x=%eax)
1721movl %ebx,8(%eax)
1722
1723# qhasm:     *(uint32 *) (x + 12) = in15
1724# asm 1: movl <in15=int32#5,12(<x=int32#1)
1725# asm 2: movl <in15=%esi,12(<x=%eax)
1726movl %esi,12(%eax)
1727# comment:fp stack unchanged by jump
1728
1729# qhasm:   goto keysetupdone
1730jmp ._keysetupdone
1731
1732# qhasm:   kbits128:
1733._kbits128:
1734
1735# qhasm:     in11 = *(uint32 *) (k + 0)
1736# asm 1: movl 0(<k=int32#2),>in11=int32#3
1737# asm 2: movl 0(<k=%ecx),>in11=%edx
1738movl 0(%ecx),%edx
1739
1740# qhasm:     in12 = *(uint32 *) (k + 4)
1741# asm 1: movl 4(<k=int32#2),>in12=int32#4
1742# asm 2: movl 4(<k=%ecx),>in12=%ebx
1743movl 4(%ecx),%ebx
1744
1745# qhasm:     in13 = *(uint32 *) (k + 8)
1746# asm 1: movl 8(<k=int32#2),>in13=int32#5
1747# asm 2: movl 8(<k=%ecx),>in13=%esi
1748movl 8(%ecx),%esi
1749
1750# qhasm:     in14 = *(uint32 *) (k + 12)
1751# asm 1: movl 12(<k=int32#2),>in14=int32#2
1752# asm 2: movl 12(<k=%ecx),>in14=%ecx
1753movl 12(%ecx),%ecx
1754
1755# qhasm:     *(uint32 *) (x + 28) = in11
1756# asm 1: movl <in11=int32#3,28(<x=int32#1)
1757# asm 2: movl <in11=%edx,28(<x=%eax)
1758movl %edx,28(%eax)
1759
1760# qhasm:     *(uint32 *) (x + 16) = in12
1761# asm 1: movl <in12=int32#4,16(<x=int32#1)
1762# asm 2: movl <in12=%ebx,16(<x=%eax)
1763movl %ebx,16(%eax)
1764
1765# qhasm:     *(uint32 *) (x + 36) = in13
1766# asm 1: movl <in13=int32#5,36(<x=int32#1)
1767# asm 2: movl <in13=%esi,36(<x=%eax)
1768movl %esi,36(%eax)
1769
1770# qhasm:     *(uint32 *) (x + 56) = in14
1771# asm 1: movl <in14=int32#2,56(<x=int32#1)
1772# asm 2: movl <in14=%ecx,56(<x=%eax)
1773movl %ecx,56(%eax)
1774
1775# qhasm:     in0 = 1634760805
1776# asm 1: mov  $1634760805,>in0=int32#2
1777# asm 2: mov  $1634760805,>in0=%ecx
1778mov  $1634760805,%ecx
1779
1780# qhasm:     in5 = 824206446
1781# asm 1: mov  $824206446,>in5=int32#3
1782# asm 2: mov  $824206446,>in5=%edx
1783mov  $824206446,%edx
1784
1785# qhasm:     in10 = 2036477238
1786# asm 1: mov  $2036477238,>in10=int32#4
1787# asm 2: mov  $2036477238,>in10=%ebx
1788mov  $2036477238,%ebx
1789
1790# qhasm:     in15 = 1797285236
1791# asm 1: mov  $1797285236,>in15=int32#5
1792# asm 2: mov  $1797285236,>in15=%esi
1793mov  $1797285236,%esi
1794
1795# qhasm:     *(uint32 *) (x + 0) = in0
1796# asm 1: movl <in0=int32#2,0(<x=int32#1)
1797# asm 2: movl <in0=%ecx,0(<x=%eax)
1798movl %ecx,0(%eax)
1799
1800# qhasm:     *(uint32 *) (x + 4) = in5
1801# asm 1: movl <in5=int32#3,4(<x=int32#1)
1802# asm 2: movl <in5=%edx,4(<x=%eax)
1803movl %edx,4(%eax)
1804
1805# qhasm:     *(uint32 *) (x + 8) = in10
1806# asm 1: movl <in10=int32#4,8(<x=int32#1)
1807# asm 2: movl <in10=%ebx,8(<x=%eax)
1808movl %ebx,8(%eax)
1809
1810# qhasm:     *(uint32 *) (x + 12) = in15
1811# asm 1: movl <in15=int32#5,12(<x=int32#1)
1812# asm 2: movl <in15=%esi,12(<x=%eax)
1813movl %esi,12(%eax)
1814
1815# qhasm:   keysetupdone:
1816._keysetupdone:
1817
1818# qhasm:   eax = eax_stack
1819# asm 1: movl <eax_stack=stack32#1,>eax=int32#1
1820# asm 2: movl <eax_stack=0(%esp),>eax=%eax
1821movl 0(%esp),%eax
1822
1823# qhasm:   ebx = ebx_stack
1824# asm 1: movl <ebx_stack=stack32#2,>ebx=int32#4
1825# asm 2: movl <ebx_stack=4(%esp),>ebx=%ebx
1826movl 4(%esp),%ebx
1827
1828# qhasm:   esi = esi_stack
1829# asm 1: movl <esi_stack=stack32#3,>esi=int32#5
1830# asm 2: movl <esi_stack=8(%esp),>esi=%esi
1831movl 8(%esp),%esi
1832
1833# qhasm:   edi = edi_stack
1834# asm 1: movl <edi_stack=stack32#4,>edi=int32#6
1835# asm 2: movl <edi_stack=12(%esp),>edi=%edi
1836movl 12(%esp),%edi
1837
1838# qhasm:   ebp = ebp_stack
1839# asm 1: movl <ebp_stack=stack32#5,>ebp=int32#7
1840# asm 2: movl <ebp_stack=16(%esp),>ebp=%ebp
1841movl 16(%esp),%ebp
1842
1843# qhasm: leave
1844add %eax,%esp
1845ret
1846
1847# qhasm: enter ECRYPT_ivsetup
1848.text
1849.p2align 5
1850.globl _ECRYPT_ivsetup
1851.globl ECRYPT_ivsetup
1852_ECRYPT_ivsetup:
1853ECRYPT_ivsetup:
1854mov %esp,%eax
1855and $31,%eax
1856add $96,%eax
1857sub %eax,%esp
1858
1859# qhasm:   eax_stack = eax
1860# asm 1: movl <eax=int32#1,>eax_stack=stack32#1
1861# asm 2: movl <eax=%eax,>eax_stack=0(%esp)
1862movl %eax,0(%esp)
1863
1864# qhasm:   ebx_stack = ebx
1865# asm 1: movl <ebx=int32#4,>ebx_stack=stack32#2
1866# asm 2: movl <ebx=%ebx,>ebx_stack=4(%esp)
1867movl %ebx,4(%esp)
1868
1869# qhasm:   esi_stack = esi
1870# asm 1: movl <esi=int32#5,>esi_stack=stack32#3
1871# asm 2: movl <esi=%esi,>esi_stack=8(%esp)
1872movl %esi,8(%esp)
1873
1874# qhasm:   edi_stack = edi
1875# asm 1: movl <edi=int32#6,>edi_stack=stack32#4
1876# asm 2: movl <edi=%edi,>edi_stack=12(%esp)
1877movl %edi,12(%esp)
1878
1879# qhasm:   ebp_stack = ebp
1880# asm 1: movl <ebp=int32#7,>ebp_stack=stack32#5
1881# asm 2: movl <ebp=%ebp,>ebp_stack=16(%esp)
1882movl %ebp,16(%esp)
1883
1884# qhasm:   iv = arg2
1885# asm 1: movl <arg2=stack32#-2,>iv=int32#2
1886# asm 2: movl <arg2=8(%esp,%eax),>iv=%ecx
1887movl 8(%esp,%eax),%ecx
1888
1889# qhasm:   x = arg1
1890# asm 1: movl <arg1=stack32#-1,>x=int32#1
1891# asm 2: movl <arg1=4(%esp,%eax),>x=%eax
1892movl 4(%esp,%eax),%eax
1893
1894# qhasm:   in6 = *(uint32 *) (iv + 0)
1895# asm 1: movl 0(<iv=int32#2),>in6=int32#3
1896# asm 2: movl 0(<iv=%ecx),>in6=%edx
1897movl 0(%ecx),%edx
1898
1899# qhasm:   in7 = *(uint32 *) (iv + 4)
1900# asm 1: movl 4(<iv=int32#2),>in7=int32#2
1901# asm 2: movl 4(<iv=%ecx),>in7=%ecx
1902movl 4(%ecx),%ecx
1903
1904# qhasm:   in8 = 0
1905# asm 1: mov  $0,>in8=int32#4
1906# asm 2: mov  $0,>in8=%ebx
1907mov  $0,%ebx
1908
1909# qhasm:   in9 = 0
1910# asm 1: mov  $0,>in9=int32#5
1911# asm 2: mov  $0,>in9=%esi
1912mov  $0,%esi
1913
1914# qhasm:   *(uint32 *) (x + 24) = in6
1915# asm 1: movl <in6=int32#3,24(<x=int32#1)
1916# asm 2: movl <in6=%edx,24(<x=%eax)
1917movl %edx,24(%eax)
1918
1919# qhasm:   *(uint32 *) (x + 44) = in7
1920# asm 1: movl <in7=int32#2,44(<x=int32#1)
1921# asm 2: movl <in7=%ecx,44(<x=%eax)
1922movl %ecx,44(%eax)
1923
1924# qhasm:   *(uint32 *) (x + 32) = in8
1925# asm 1: movl <in8=int32#4,32(<x=int32#1)
1926# asm 2: movl <in8=%ebx,32(<x=%eax)
1927movl %ebx,32(%eax)
1928
1929# qhasm:   *(uint32 *) (x + 52) = in9
1930# asm 1: movl <in9=int32#5,52(<x=int32#1)
1931# asm 2: movl <in9=%esi,52(<x=%eax)
1932movl %esi,52(%eax)
1933
1934# qhasm:   eax = eax_stack
1935# asm 1: movl <eax_stack=stack32#1,>eax=int32#1
1936# asm 2: movl <eax_stack=0(%esp),>eax=%eax
1937movl 0(%esp),%eax
1938
1939# qhasm:   ebx = ebx_stack
1940# asm 1: movl <ebx_stack=stack32#2,>ebx=int32#4
1941# asm 2: movl <ebx_stack=4(%esp),>ebx=%ebx
1942movl 4(%esp),%ebx
1943
1944# qhasm:   esi = esi_stack
1945# asm 1: movl <esi_stack=stack32#3,>esi=int32#5
1946# asm 2: movl <esi_stack=8(%esp),>esi=%esi
1947movl 8(%esp),%esi
1948
1949# qhasm:   edi = edi_stack
1950# asm 1: movl <edi_stack=stack32#4,>edi=int32#6
1951# asm 2: movl <edi_stack=12(%esp),>edi=%edi
1952movl 12(%esp),%edi
1953
1954# qhasm:   ebp = ebp_stack
1955# asm 1: movl <ebp_stack=stack32#5,>ebp=int32#7
1956# asm 2: movl <ebp_stack=16(%esp),>ebp=%ebp
1957movl 16(%esp),%ebp
1958
1959# qhasm: leave
1960add %eax,%esp
1961ret
1962