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