1
2# qhasm: int64 input_0
3
4# qhasm: int64 input_1
5
6# qhasm: int64 input_2
7
8# qhasm: int64 input_3
9
10# qhasm: int64 input_4
11
12# qhasm: int64 input_5
13
14# qhasm: stack64 input_6
15
16# qhasm: stack64 input_7
17
18# qhasm: int64 caller_r11
19
20# qhasm: int64 caller_r12
21
22# qhasm: int64 caller_r13
23
24# qhasm: int64 caller_r14
25
26# qhasm: int64 caller_r15
27
28# qhasm: int64 caller_rbx
29
30# qhasm: int64 caller_rbp
31
32# qhasm: int64 s0
33
34# qhasm: int64 s1
35
36# qhasm: int64 s2
37
38# qhasm: enter update_asm
39.p2align 5
40.global _PQCLEAN_MCELIECE6688128_AVX_update_asm
41.global PQCLEAN_MCELIECE6688128_AVX_update_asm
42_PQCLEAN_MCELIECE6688128_AVX_update_asm:
43PQCLEAN_MCELIECE6688128_AVX_update_asm:
44mov %rsp,%r11
45and $31,%r11
46add $0,%r11
47sub %r11,%rsp
48
49# qhasm: s2 = input_1
50# asm 1: mov  <input_1=int64#2,>s2=int64#2
51# asm 2: mov  <input_1=%rsi,>s2=%rsi
52mov  %rsi,%rsi
53
54# qhasm: s0 = mem64[ input_0 + 0 ]
55# asm 1: movq   0(<input_0=int64#1),>s0=int64#4
56# asm 2: movq   0(<input_0=%rdi),>s0=%rcx
57movq   0(%rdi),%rcx
58
59# qhasm: s1 = mem64[ input_0 + 8 ]
60# asm 1: movq   8(<input_0=int64#1),>s1=int64#5
61# asm 2: movq   8(<input_0=%rdi),>s1=%r8
62movq   8(%rdi),%r8
63
64# qhasm: s0 = (s1 s0) >> 1
65# asm 1: shrd $1,<s1=int64#5,<s0=int64#4
66# asm 2: shrd $1,<s1=%r8,<s0=%rcx
67shrd $1,%r8,%rcx
68
69# qhasm: s1 = (s2 s1) >> 1
70# asm 1: shrd $1,<s2=int64#2,<s1=int64#5
71# asm 2: shrd $1,<s2=%rsi,<s1=%r8
72shrd $1,%rsi,%r8
73
74# qhasm: (uint64) s2 >>= 1
75# asm 1: shr  $1,<s2=int64#2
76# asm 2: shr  $1,<s2=%rsi
77shr  $1,%rsi
78
79# qhasm: mem64[ input_0 + 0 ] = s0
80# asm 1: movq   <s0=int64#4,0(<input_0=int64#1)
81# asm 2: movq   <s0=%rcx,0(<input_0=%rdi)
82movq   %rcx,0(%rdi)
83
84# qhasm: mem64[ input_0 + 8 ] = s1
85# asm 1: movq   <s1=int64#5,8(<input_0=int64#1)
86# asm 2: movq   <s1=%r8,8(<input_0=%rdi)
87movq   %r8,8(%rdi)
88
89# qhasm: input_0 += input_2
90# asm 1: add  <input_2=int64#3,<input_0=int64#1
91# asm 2: add  <input_2=%rdx,<input_0=%rdi
92add  %rdx,%rdi
93
94# qhasm: s0 = mem64[ input_0 + 0 ]
95# asm 1: movq   0(<input_0=int64#1),>s0=int64#4
96# asm 2: movq   0(<input_0=%rdi),>s0=%rcx
97movq   0(%rdi),%rcx
98
99# qhasm: s1 = mem64[ input_0 + 8 ]
100# asm 1: movq   8(<input_0=int64#1),>s1=int64#5
101# asm 2: movq   8(<input_0=%rdi),>s1=%r8
102movq   8(%rdi),%r8
103
104# qhasm: s0 = (s1 s0) >> 1
105# asm 1: shrd $1,<s1=int64#5,<s0=int64#4
106# asm 2: shrd $1,<s1=%r8,<s0=%rcx
107shrd $1,%r8,%rcx
108
109# qhasm: s1 = (s2 s1) >> 1
110# asm 1: shrd $1,<s2=int64#2,<s1=int64#5
111# asm 2: shrd $1,<s2=%rsi,<s1=%r8
112shrd $1,%rsi,%r8
113
114# qhasm: (uint64) s2 >>= 1
115# asm 1: shr  $1,<s2=int64#2
116# asm 2: shr  $1,<s2=%rsi
117shr  $1,%rsi
118
119# qhasm: mem64[ input_0 + 0 ] = s0
120# asm 1: movq   <s0=int64#4,0(<input_0=int64#1)
121# asm 2: movq   <s0=%rcx,0(<input_0=%rdi)
122movq   %rcx,0(%rdi)
123
124# qhasm: mem64[ input_0 + 8 ] = s1
125# asm 1: movq   <s1=int64#5,8(<input_0=int64#1)
126# asm 2: movq   <s1=%r8,8(<input_0=%rdi)
127movq   %r8,8(%rdi)
128
129# qhasm: input_0 += input_2
130# asm 1: add  <input_2=int64#3,<input_0=int64#1
131# asm 2: add  <input_2=%rdx,<input_0=%rdi
132add  %rdx,%rdi
133
134# qhasm: s0 = mem64[ input_0 + 0 ]
135# asm 1: movq   0(<input_0=int64#1),>s0=int64#4
136# asm 2: movq   0(<input_0=%rdi),>s0=%rcx
137movq   0(%rdi),%rcx
138
139# qhasm: s1 = mem64[ input_0 + 8 ]
140# asm 1: movq   8(<input_0=int64#1),>s1=int64#5
141# asm 2: movq   8(<input_0=%rdi),>s1=%r8
142movq   8(%rdi),%r8
143
144# qhasm: s0 = (s1 s0) >> 1
145# asm 1: shrd $1,<s1=int64#5,<s0=int64#4
146# asm 2: shrd $1,<s1=%r8,<s0=%rcx
147shrd $1,%r8,%rcx
148
149# qhasm: s1 = (s2 s1) >> 1
150# asm 1: shrd $1,<s2=int64#2,<s1=int64#5
151# asm 2: shrd $1,<s2=%rsi,<s1=%r8
152shrd $1,%rsi,%r8
153
154# qhasm: (uint64) s2 >>= 1
155# asm 1: shr  $1,<s2=int64#2
156# asm 2: shr  $1,<s2=%rsi
157shr  $1,%rsi
158
159# qhasm: mem64[ input_0 + 0 ] = s0
160# asm 1: movq   <s0=int64#4,0(<input_0=int64#1)
161# asm 2: movq   <s0=%rcx,0(<input_0=%rdi)
162movq   %rcx,0(%rdi)
163
164# qhasm: mem64[ input_0 + 8 ] = s1
165# asm 1: movq   <s1=int64#5,8(<input_0=int64#1)
166# asm 2: movq   <s1=%r8,8(<input_0=%rdi)
167movq   %r8,8(%rdi)
168
169# qhasm: input_0 += input_2
170# asm 1: add  <input_2=int64#3,<input_0=int64#1
171# asm 2: add  <input_2=%rdx,<input_0=%rdi
172add  %rdx,%rdi
173
174# qhasm: s0 = mem64[ input_0 + 0 ]
175# asm 1: movq   0(<input_0=int64#1),>s0=int64#4
176# asm 2: movq   0(<input_0=%rdi),>s0=%rcx
177movq   0(%rdi),%rcx
178
179# qhasm: s1 = mem64[ input_0 + 8 ]
180# asm 1: movq   8(<input_0=int64#1),>s1=int64#5
181# asm 2: movq   8(<input_0=%rdi),>s1=%r8
182movq   8(%rdi),%r8
183
184# qhasm: s0 = (s1 s0) >> 1
185# asm 1: shrd $1,<s1=int64#5,<s0=int64#4
186# asm 2: shrd $1,<s1=%r8,<s0=%rcx
187shrd $1,%r8,%rcx
188
189# qhasm: s1 = (s2 s1) >> 1
190# asm 1: shrd $1,<s2=int64#2,<s1=int64#5
191# asm 2: shrd $1,<s2=%rsi,<s1=%r8
192shrd $1,%rsi,%r8
193
194# qhasm: (uint64) s2 >>= 1
195# asm 1: shr  $1,<s2=int64#2
196# asm 2: shr  $1,<s2=%rsi
197shr  $1,%rsi
198
199# qhasm: mem64[ input_0 + 0 ] = s0
200# asm 1: movq   <s0=int64#4,0(<input_0=int64#1)
201# asm 2: movq   <s0=%rcx,0(<input_0=%rdi)
202movq   %rcx,0(%rdi)
203
204# qhasm: mem64[ input_0 + 8 ] = s1
205# asm 1: movq   <s1=int64#5,8(<input_0=int64#1)
206# asm 2: movq   <s1=%r8,8(<input_0=%rdi)
207movq   %r8,8(%rdi)
208
209# qhasm: input_0 += input_2
210# asm 1: add  <input_2=int64#3,<input_0=int64#1
211# asm 2: add  <input_2=%rdx,<input_0=%rdi
212add  %rdx,%rdi
213
214# qhasm: s0 = mem64[ input_0 + 0 ]
215# asm 1: movq   0(<input_0=int64#1),>s0=int64#4
216# asm 2: movq   0(<input_0=%rdi),>s0=%rcx
217movq   0(%rdi),%rcx
218
219# qhasm: s1 = mem64[ input_0 + 8 ]
220# asm 1: movq   8(<input_0=int64#1),>s1=int64#5
221# asm 2: movq   8(<input_0=%rdi),>s1=%r8
222movq   8(%rdi),%r8
223
224# qhasm: s0 = (s1 s0) >> 1
225# asm 1: shrd $1,<s1=int64#5,<s0=int64#4
226# asm 2: shrd $1,<s1=%r8,<s0=%rcx
227shrd $1,%r8,%rcx
228
229# qhasm: s1 = (s2 s1) >> 1
230# asm 1: shrd $1,<s2=int64#2,<s1=int64#5
231# asm 2: shrd $1,<s2=%rsi,<s1=%r8
232shrd $1,%rsi,%r8
233
234# qhasm: (uint64) s2 >>= 1
235# asm 1: shr  $1,<s2=int64#2
236# asm 2: shr  $1,<s2=%rsi
237shr  $1,%rsi
238
239# qhasm: mem64[ input_0 + 0 ] = s0
240# asm 1: movq   <s0=int64#4,0(<input_0=int64#1)
241# asm 2: movq   <s0=%rcx,0(<input_0=%rdi)
242movq   %rcx,0(%rdi)
243
244# qhasm: mem64[ input_0 + 8 ] = s1
245# asm 1: movq   <s1=int64#5,8(<input_0=int64#1)
246# asm 2: movq   <s1=%r8,8(<input_0=%rdi)
247movq   %r8,8(%rdi)
248
249# qhasm: input_0 += input_2
250# asm 1: add  <input_2=int64#3,<input_0=int64#1
251# asm 2: add  <input_2=%rdx,<input_0=%rdi
252add  %rdx,%rdi
253
254# qhasm: s0 = mem64[ input_0 + 0 ]
255# asm 1: movq   0(<input_0=int64#1),>s0=int64#4
256# asm 2: movq   0(<input_0=%rdi),>s0=%rcx
257movq   0(%rdi),%rcx
258
259# qhasm: s1 = mem64[ input_0 + 8 ]
260# asm 1: movq   8(<input_0=int64#1),>s1=int64#5
261# asm 2: movq   8(<input_0=%rdi),>s1=%r8
262movq   8(%rdi),%r8
263
264# qhasm: s0 = (s1 s0) >> 1
265# asm 1: shrd $1,<s1=int64#5,<s0=int64#4
266# asm 2: shrd $1,<s1=%r8,<s0=%rcx
267shrd $1,%r8,%rcx
268
269# qhasm: s1 = (s2 s1) >> 1
270# asm 1: shrd $1,<s2=int64#2,<s1=int64#5
271# asm 2: shrd $1,<s2=%rsi,<s1=%r8
272shrd $1,%rsi,%r8
273
274# qhasm: (uint64) s2 >>= 1
275# asm 1: shr  $1,<s2=int64#2
276# asm 2: shr  $1,<s2=%rsi
277shr  $1,%rsi
278
279# qhasm: mem64[ input_0 + 0 ] = s0
280# asm 1: movq   <s0=int64#4,0(<input_0=int64#1)
281# asm 2: movq   <s0=%rcx,0(<input_0=%rdi)
282movq   %rcx,0(%rdi)
283
284# qhasm: mem64[ input_0 + 8 ] = s1
285# asm 1: movq   <s1=int64#5,8(<input_0=int64#1)
286# asm 2: movq   <s1=%r8,8(<input_0=%rdi)
287movq   %r8,8(%rdi)
288
289# qhasm: input_0 += input_2
290# asm 1: add  <input_2=int64#3,<input_0=int64#1
291# asm 2: add  <input_2=%rdx,<input_0=%rdi
292add  %rdx,%rdi
293
294# qhasm: s0 = mem64[ input_0 + 0 ]
295# asm 1: movq   0(<input_0=int64#1),>s0=int64#4
296# asm 2: movq   0(<input_0=%rdi),>s0=%rcx
297movq   0(%rdi),%rcx
298
299# qhasm: s1 = mem64[ input_0 + 8 ]
300# asm 1: movq   8(<input_0=int64#1),>s1=int64#5
301# asm 2: movq   8(<input_0=%rdi),>s1=%r8
302movq   8(%rdi),%r8
303
304# qhasm: s0 = (s1 s0) >> 1
305# asm 1: shrd $1,<s1=int64#5,<s0=int64#4
306# asm 2: shrd $1,<s1=%r8,<s0=%rcx
307shrd $1,%r8,%rcx
308
309# qhasm: s1 = (s2 s1) >> 1
310# asm 1: shrd $1,<s2=int64#2,<s1=int64#5
311# asm 2: shrd $1,<s2=%rsi,<s1=%r8
312shrd $1,%rsi,%r8
313
314# qhasm: (uint64) s2 >>= 1
315# asm 1: shr  $1,<s2=int64#2
316# asm 2: shr  $1,<s2=%rsi
317shr  $1,%rsi
318
319# qhasm: mem64[ input_0 + 0 ] = s0
320# asm 1: movq   <s0=int64#4,0(<input_0=int64#1)
321# asm 2: movq   <s0=%rcx,0(<input_0=%rdi)
322movq   %rcx,0(%rdi)
323
324# qhasm: mem64[ input_0 + 8 ] = s1
325# asm 1: movq   <s1=int64#5,8(<input_0=int64#1)
326# asm 2: movq   <s1=%r8,8(<input_0=%rdi)
327movq   %r8,8(%rdi)
328
329# qhasm: input_0 += input_2
330# asm 1: add  <input_2=int64#3,<input_0=int64#1
331# asm 2: add  <input_2=%rdx,<input_0=%rdi
332add  %rdx,%rdi
333
334# qhasm: s0 = mem64[ input_0 + 0 ]
335# asm 1: movq   0(<input_0=int64#1),>s0=int64#4
336# asm 2: movq   0(<input_0=%rdi),>s0=%rcx
337movq   0(%rdi),%rcx
338
339# qhasm: s1 = mem64[ input_0 + 8 ]
340# asm 1: movq   8(<input_0=int64#1),>s1=int64#5
341# asm 2: movq   8(<input_0=%rdi),>s1=%r8
342movq   8(%rdi),%r8
343
344# qhasm: s0 = (s1 s0) >> 1
345# asm 1: shrd $1,<s1=int64#5,<s0=int64#4
346# asm 2: shrd $1,<s1=%r8,<s0=%rcx
347shrd $1,%r8,%rcx
348
349# qhasm: s1 = (s2 s1) >> 1
350# asm 1: shrd $1,<s2=int64#2,<s1=int64#5
351# asm 2: shrd $1,<s2=%rsi,<s1=%r8
352shrd $1,%rsi,%r8
353
354# qhasm: (uint64) s2 >>= 1
355# asm 1: shr  $1,<s2=int64#2
356# asm 2: shr  $1,<s2=%rsi
357shr  $1,%rsi
358
359# qhasm: mem64[ input_0 + 0 ] = s0
360# asm 1: movq   <s0=int64#4,0(<input_0=int64#1)
361# asm 2: movq   <s0=%rcx,0(<input_0=%rdi)
362movq   %rcx,0(%rdi)
363
364# qhasm: mem64[ input_0 + 8 ] = s1
365# asm 1: movq   <s1=int64#5,8(<input_0=int64#1)
366# asm 2: movq   <s1=%r8,8(<input_0=%rdi)
367movq   %r8,8(%rdi)
368
369# qhasm: input_0 += input_2
370# asm 1: add  <input_2=int64#3,<input_0=int64#1
371# asm 2: add  <input_2=%rdx,<input_0=%rdi
372add  %rdx,%rdi
373
374# qhasm: s0 = mem64[ input_0 + 0 ]
375# asm 1: movq   0(<input_0=int64#1),>s0=int64#4
376# asm 2: movq   0(<input_0=%rdi),>s0=%rcx
377movq   0(%rdi),%rcx
378
379# qhasm: s1 = mem64[ input_0 + 8 ]
380# asm 1: movq   8(<input_0=int64#1),>s1=int64#5
381# asm 2: movq   8(<input_0=%rdi),>s1=%r8
382movq   8(%rdi),%r8
383
384# qhasm: s0 = (s1 s0) >> 1
385# asm 1: shrd $1,<s1=int64#5,<s0=int64#4
386# asm 2: shrd $1,<s1=%r8,<s0=%rcx
387shrd $1,%r8,%rcx
388
389# qhasm: s1 = (s2 s1) >> 1
390# asm 1: shrd $1,<s2=int64#2,<s1=int64#5
391# asm 2: shrd $1,<s2=%rsi,<s1=%r8
392shrd $1,%rsi,%r8
393
394# qhasm: (uint64) s2 >>= 1
395# asm 1: shr  $1,<s2=int64#2
396# asm 2: shr  $1,<s2=%rsi
397shr  $1,%rsi
398
399# qhasm: mem64[ input_0 + 0 ] = s0
400# asm 1: movq   <s0=int64#4,0(<input_0=int64#1)
401# asm 2: movq   <s0=%rcx,0(<input_0=%rdi)
402movq   %rcx,0(%rdi)
403
404# qhasm: mem64[ input_0 + 8 ] = s1
405# asm 1: movq   <s1=int64#5,8(<input_0=int64#1)
406# asm 2: movq   <s1=%r8,8(<input_0=%rdi)
407movq   %r8,8(%rdi)
408
409# qhasm: input_0 += input_2
410# asm 1: add  <input_2=int64#3,<input_0=int64#1
411# asm 2: add  <input_2=%rdx,<input_0=%rdi
412add  %rdx,%rdi
413
414# qhasm: s0 = mem64[ input_0 + 0 ]
415# asm 1: movq   0(<input_0=int64#1),>s0=int64#4
416# asm 2: movq   0(<input_0=%rdi),>s0=%rcx
417movq   0(%rdi),%rcx
418
419# qhasm: s1 = mem64[ input_0 + 8 ]
420# asm 1: movq   8(<input_0=int64#1),>s1=int64#5
421# asm 2: movq   8(<input_0=%rdi),>s1=%r8
422movq   8(%rdi),%r8
423
424# qhasm: s0 = (s1 s0) >> 1
425# asm 1: shrd $1,<s1=int64#5,<s0=int64#4
426# asm 2: shrd $1,<s1=%r8,<s0=%rcx
427shrd $1,%r8,%rcx
428
429# qhasm: s1 = (s2 s1) >> 1
430# asm 1: shrd $1,<s2=int64#2,<s1=int64#5
431# asm 2: shrd $1,<s2=%rsi,<s1=%r8
432shrd $1,%rsi,%r8
433
434# qhasm: (uint64) s2 >>= 1
435# asm 1: shr  $1,<s2=int64#2
436# asm 2: shr  $1,<s2=%rsi
437shr  $1,%rsi
438
439# qhasm: mem64[ input_0 + 0 ] = s0
440# asm 1: movq   <s0=int64#4,0(<input_0=int64#1)
441# asm 2: movq   <s0=%rcx,0(<input_0=%rdi)
442movq   %rcx,0(%rdi)
443
444# qhasm: mem64[ input_0 + 8 ] = s1
445# asm 1: movq   <s1=int64#5,8(<input_0=int64#1)
446# asm 2: movq   <s1=%r8,8(<input_0=%rdi)
447movq   %r8,8(%rdi)
448
449# qhasm: input_0 += input_2
450# asm 1: add  <input_2=int64#3,<input_0=int64#1
451# asm 2: add  <input_2=%rdx,<input_0=%rdi
452add  %rdx,%rdi
453
454# qhasm: s0 = mem64[ input_0 + 0 ]
455# asm 1: movq   0(<input_0=int64#1),>s0=int64#4
456# asm 2: movq   0(<input_0=%rdi),>s0=%rcx
457movq   0(%rdi),%rcx
458
459# qhasm: s1 = mem64[ input_0 + 8 ]
460# asm 1: movq   8(<input_0=int64#1),>s1=int64#5
461# asm 2: movq   8(<input_0=%rdi),>s1=%r8
462movq   8(%rdi),%r8
463
464# qhasm: s0 = (s1 s0) >> 1
465# asm 1: shrd $1,<s1=int64#5,<s0=int64#4
466# asm 2: shrd $1,<s1=%r8,<s0=%rcx
467shrd $1,%r8,%rcx
468
469# qhasm: s1 = (s2 s1) >> 1
470# asm 1: shrd $1,<s2=int64#2,<s1=int64#5
471# asm 2: shrd $1,<s2=%rsi,<s1=%r8
472shrd $1,%rsi,%r8
473
474# qhasm: (uint64) s2 >>= 1
475# asm 1: shr  $1,<s2=int64#2
476# asm 2: shr  $1,<s2=%rsi
477shr  $1,%rsi
478
479# qhasm: mem64[ input_0 + 0 ] = s0
480# asm 1: movq   <s0=int64#4,0(<input_0=int64#1)
481# asm 2: movq   <s0=%rcx,0(<input_0=%rdi)
482movq   %rcx,0(%rdi)
483
484# qhasm: mem64[ input_0 + 8 ] = s1
485# asm 1: movq   <s1=int64#5,8(<input_0=int64#1)
486# asm 2: movq   <s1=%r8,8(<input_0=%rdi)
487movq   %r8,8(%rdi)
488
489# qhasm: input_0 += input_2
490# asm 1: add  <input_2=int64#3,<input_0=int64#1
491# asm 2: add  <input_2=%rdx,<input_0=%rdi
492add  %rdx,%rdi
493
494# qhasm: s0 = mem64[ input_0 + 0 ]
495# asm 1: movq   0(<input_0=int64#1),>s0=int64#4
496# asm 2: movq   0(<input_0=%rdi),>s0=%rcx
497movq   0(%rdi),%rcx
498
499# qhasm: s1 = mem64[ input_0 + 8 ]
500# asm 1: movq   8(<input_0=int64#1),>s1=int64#5
501# asm 2: movq   8(<input_0=%rdi),>s1=%r8
502movq   8(%rdi),%r8
503
504# qhasm: s0 = (s1 s0) >> 1
505# asm 1: shrd $1,<s1=int64#5,<s0=int64#4
506# asm 2: shrd $1,<s1=%r8,<s0=%rcx
507shrd $1,%r8,%rcx
508
509# qhasm: s1 = (s2 s1) >> 1
510# asm 1: shrd $1,<s2=int64#2,<s1=int64#5
511# asm 2: shrd $1,<s2=%rsi,<s1=%r8
512shrd $1,%rsi,%r8
513
514# qhasm: (uint64) s2 >>= 1
515# asm 1: shr  $1,<s2=int64#2
516# asm 2: shr  $1,<s2=%rsi
517shr  $1,%rsi
518
519# qhasm: mem64[ input_0 + 0 ] = s0
520# asm 1: movq   <s0=int64#4,0(<input_0=int64#1)
521# asm 2: movq   <s0=%rcx,0(<input_0=%rdi)
522movq   %rcx,0(%rdi)
523
524# qhasm: mem64[ input_0 + 8 ] = s1
525# asm 1: movq   <s1=int64#5,8(<input_0=int64#1)
526# asm 2: movq   <s1=%r8,8(<input_0=%rdi)
527movq   %r8,8(%rdi)
528
529# qhasm: input_0 += input_2
530# asm 1: add  <input_2=int64#3,<input_0=int64#1
531# asm 2: add  <input_2=%rdx,<input_0=%rdi
532add  %rdx,%rdi
533
534# qhasm: s0 = mem64[ input_0 + 0 ]
535# asm 1: movq   0(<input_0=int64#1),>s0=int64#4
536# asm 2: movq   0(<input_0=%rdi),>s0=%rcx
537movq   0(%rdi),%rcx
538
539# qhasm: s1 = mem64[ input_0 + 8 ]
540# asm 1: movq   8(<input_0=int64#1),>s1=int64#5
541# asm 2: movq   8(<input_0=%rdi),>s1=%r8
542movq   8(%rdi),%r8
543
544# qhasm: s0 = (s1 s0) >> 1
545# asm 1: shrd $1,<s1=int64#5,<s0=int64#4
546# asm 2: shrd $1,<s1=%r8,<s0=%rcx
547shrd $1,%r8,%rcx
548
549# qhasm: s1 = (s2 s1) >> 1
550# asm 1: shrd $1,<s2=int64#2,<s1=int64#5
551# asm 2: shrd $1,<s2=%rsi,<s1=%r8
552shrd $1,%rsi,%r8
553
554# qhasm: (uint64) s2 >>= 1
555# asm 1: shr  $1,<s2=int64#2
556# asm 2: shr  $1,<s2=%rsi
557shr  $1,%rsi
558
559# qhasm: mem64[ input_0 + 0 ] = s0
560# asm 1: movq   <s0=int64#4,0(<input_0=int64#1)
561# asm 2: movq   <s0=%rcx,0(<input_0=%rdi)
562movq   %rcx,0(%rdi)
563
564# qhasm: mem64[ input_0 + 8 ] = s1
565# asm 1: movq   <s1=int64#5,8(<input_0=int64#1)
566# asm 2: movq   <s1=%r8,8(<input_0=%rdi)
567movq   %r8,8(%rdi)
568
569# qhasm: input_0 += input_2
570# asm 1: add  <input_2=int64#3,<input_0=int64#1
571# asm 2: add  <input_2=%rdx,<input_0=%rdi
572add  %rdx,%rdi
573
574# qhasm: return
575add %r11,%rsp
576ret
577