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 t0
33
34# qhasm: int64 t1
35
36# qhasm: int64 c
37
38# qhasm: int64 r
39
40# qhasm: enter vec_reduce_asm
41.p2align 5
42.global _PQCLEAN_MCELIECE460896_AVX_vec_reduce_asm
43.global PQCLEAN_MCELIECE460896_AVX_vec_reduce_asm
44_PQCLEAN_MCELIECE460896_AVX_vec_reduce_asm:
45PQCLEAN_MCELIECE460896_AVX_vec_reduce_asm:
46mov %rsp,%r11
47and $31,%r11
48add $0,%r11
49sub %r11,%rsp
50
51# qhasm: r = 0
52# asm 1: mov  $0,>r=int64#7
53# asm 2: mov  $0,>r=%rax
54mov  $0,%rax
55
56# qhasm: t0 = mem64[ input_0 + 192 ]
57# asm 1: movq   192(<input_0=int64#1),>t0=int64#2
58# asm 2: movq   192(<input_0=%rdi),>t0=%rsi
59movq   192(%rdi),%rsi
60
61# qhasm: t1 = mem64[ input_0 + 200 ]
62# asm 1: movq   200(<input_0=int64#1),>t1=int64#3
63# asm 2: movq   200(<input_0=%rdi),>t1=%rdx
64movq   200(%rdi),%rdx
65
66# qhasm: t0 ^= t1
67# asm 1: xor  <t1=int64#3,<t0=int64#2
68# asm 2: xor  <t1=%rdx,<t0=%rsi
69xor  %rdx,%rsi
70
71# qhasm: c = count(t0)
72# asm 1: popcnt <t0=int64#2, >c=int64#2
73# asm 2: popcnt <t0=%rsi, >c=%rsi
74popcnt %rsi, %rsi
75
76# qhasm: (uint32) c &= 1
77# asm 1: and  $1,<c=int64#2d
78# asm 2: and  $1,<c=%esi
79and  $1,%esi
80
81# qhasm: r <<= 1
82# asm 1: shl  $1,<r=int64#7
83# asm 2: shl  $1,<r=%rax
84shl  $1,%rax
85
86# qhasm: r |= c
87# asm 1: or   <c=int64#2,<r=int64#7
88# asm 2: or   <c=%rsi,<r=%rax
89or   %rsi,%rax
90
91# qhasm: t0 = mem64[ input_0 + 176 ]
92# asm 1: movq   176(<input_0=int64#1),>t0=int64#2
93# asm 2: movq   176(<input_0=%rdi),>t0=%rsi
94movq   176(%rdi),%rsi
95
96# qhasm: t1 = mem64[ input_0 + 184 ]
97# asm 1: movq   184(<input_0=int64#1),>t1=int64#3
98# asm 2: movq   184(<input_0=%rdi),>t1=%rdx
99movq   184(%rdi),%rdx
100
101# qhasm: t0 ^= t1
102# asm 1: xor  <t1=int64#3,<t0=int64#2
103# asm 2: xor  <t1=%rdx,<t0=%rsi
104xor  %rdx,%rsi
105
106# qhasm: c = count(t0)
107# asm 1: popcnt <t0=int64#2, >c=int64#2
108# asm 2: popcnt <t0=%rsi, >c=%rsi
109popcnt %rsi, %rsi
110
111# qhasm: (uint32) c &= 1
112# asm 1: and  $1,<c=int64#2d
113# asm 2: and  $1,<c=%esi
114and  $1,%esi
115
116# qhasm: r <<= 1
117# asm 1: shl  $1,<r=int64#7
118# asm 2: shl  $1,<r=%rax
119shl  $1,%rax
120
121# qhasm: r |= c
122# asm 1: or   <c=int64#2,<r=int64#7
123# asm 2: or   <c=%rsi,<r=%rax
124or   %rsi,%rax
125
126# qhasm: t0 = mem64[ input_0 + 160 ]
127# asm 1: movq   160(<input_0=int64#1),>t0=int64#2
128# asm 2: movq   160(<input_0=%rdi),>t0=%rsi
129movq   160(%rdi),%rsi
130
131# qhasm: t1 = mem64[ input_0 + 168 ]
132# asm 1: movq   168(<input_0=int64#1),>t1=int64#3
133# asm 2: movq   168(<input_0=%rdi),>t1=%rdx
134movq   168(%rdi),%rdx
135
136# qhasm: t0 ^= t1
137# asm 1: xor  <t1=int64#3,<t0=int64#2
138# asm 2: xor  <t1=%rdx,<t0=%rsi
139xor  %rdx,%rsi
140
141# qhasm: c = count(t0)
142# asm 1: popcnt <t0=int64#2, >c=int64#2
143# asm 2: popcnt <t0=%rsi, >c=%rsi
144popcnt %rsi, %rsi
145
146# qhasm: (uint32) c &= 1
147# asm 1: and  $1,<c=int64#2d
148# asm 2: and  $1,<c=%esi
149and  $1,%esi
150
151# qhasm: r <<= 1
152# asm 1: shl  $1,<r=int64#7
153# asm 2: shl  $1,<r=%rax
154shl  $1,%rax
155
156# qhasm: r |= c
157# asm 1: or   <c=int64#2,<r=int64#7
158# asm 2: or   <c=%rsi,<r=%rax
159or   %rsi,%rax
160
161# qhasm: t0 = mem64[ input_0 + 144 ]
162# asm 1: movq   144(<input_0=int64#1),>t0=int64#2
163# asm 2: movq   144(<input_0=%rdi),>t0=%rsi
164movq   144(%rdi),%rsi
165
166# qhasm: t1 = mem64[ input_0 + 152 ]
167# asm 1: movq   152(<input_0=int64#1),>t1=int64#3
168# asm 2: movq   152(<input_0=%rdi),>t1=%rdx
169movq   152(%rdi),%rdx
170
171# qhasm: t0 ^= t1
172# asm 1: xor  <t1=int64#3,<t0=int64#2
173# asm 2: xor  <t1=%rdx,<t0=%rsi
174xor  %rdx,%rsi
175
176# qhasm: c = count(t0)
177# asm 1: popcnt <t0=int64#2, >c=int64#2
178# asm 2: popcnt <t0=%rsi, >c=%rsi
179popcnt %rsi, %rsi
180
181# qhasm: (uint32) c &= 1
182# asm 1: and  $1,<c=int64#2d
183# asm 2: and  $1,<c=%esi
184and  $1,%esi
185
186# qhasm: r <<= 1
187# asm 1: shl  $1,<r=int64#7
188# asm 2: shl  $1,<r=%rax
189shl  $1,%rax
190
191# qhasm: r |= c
192# asm 1: or   <c=int64#2,<r=int64#7
193# asm 2: or   <c=%rsi,<r=%rax
194or   %rsi,%rax
195
196# qhasm: t0 = mem64[ input_0 + 128 ]
197# asm 1: movq   128(<input_0=int64#1),>t0=int64#2
198# asm 2: movq   128(<input_0=%rdi),>t0=%rsi
199movq   128(%rdi),%rsi
200
201# qhasm: t1 = mem64[ input_0 + 136 ]
202# asm 1: movq   136(<input_0=int64#1),>t1=int64#3
203# asm 2: movq   136(<input_0=%rdi),>t1=%rdx
204movq   136(%rdi),%rdx
205
206# qhasm: t0 ^= t1
207# asm 1: xor  <t1=int64#3,<t0=int64#2
208# asm 2: xor  <t1=%rdx,<t0=%rsi
209xor  %rdx,%rsi
210
211# qhasm: c = count(t0)
212# asm 1: popcnt <t0=int64#2, >c=int64#2
213# asm 2: popcnt <t0=%rsi, >c=%rsi
214popcnt %rsi, %rsi
215
216# qhasm: (uint32) c &= 1
217# asm 1: and  $1,<c=int64#2d
218# asm 2: and  $1,<c=%esi
219and  $1,%esi
220
221# qhasm: r <<= 1
222# asm 1: shl  $1,<r=int64#7
223# asm 2: shl  $1,<r=%rax
224shl  $1,%rax
225
226# qhasm: r |= c
227# asm 1: or   <c=int64#2,<r=int64#7
228# asm 2: or   <c=%rsi,<r=%rax
229or   %rsi,%rax
230
231# qhasm: t0 = mem64[ input_0 + 112 ]
232# asm 1: movq   112(<input_0=int64#1),>t0=int64#2
233# asm 2: movq   112(<input_0=%rdi),>t0=%rsi
234movq   112(%rdi),%rsi
235
236# qhasm: t1 = mem64[ input_0 + 120 ]
237# asm 1: movq   120(<input_0=int64#1),>t1=int64#3
238# asm 2: movq   120(<input_0=%rdi),>t1=%rdx
239movq   120(%rdi),%rdx
240
241# qhasm: t0 ^= t1
242# asm 1: xor  <t1=int64#3,<t0=int64#2
243# asm 2: xor  <t1=%rdx,<t0=%rsi
244xor  %rdx,%rsi
245
246# qhasm: c = count(t0)
247# asm 1: popcnt <t0=int64#2, >c=int64#2
248# asm 2: popcnt <t0=%rsi, >c=%rsi
249popcnt %rsi, %rsi
250
251# qhasm: (uint32) c &= 1
252# asm 1: and  $1,<c=int64#2d
253# asm 2: and  $1,<c=%esi
254and  $1,%esi
255
256# qhasm: r <<= 1
257# asm 1: shl  $1,<r=int64#7
258# asm 2: shl  $1,<r=%rax
259shl  $1,%rax
260
261# qhasm: r |= c
262# asm 1: or   <c=int64#2,<r=int64#7
263# asm 2: or   <c=%rsi,<r=%rax
264or   %rsi,%rax
265
266# qhasm: t0 = mem64[ input_0 + 96 ]
267# asm 1: movq   96(<input_0=int64#1),>t0=int64#2
268# asm 2: movq   96(<input_0=%rdi),>t0=%rsi
269movq   96(%rdi),%rsi
270
271# qhasm: t1 = mem64[ input_0 + 104 ]
272# asm 1: movq   104(<input_0=int64#1),>t1=int64#3
273# asm 2: movq   104(<input_0=%rdi),>t1=%rdx
274movq   104(%rdi),%rdx
275
276# qhasm: t0 ^= t1
277# asm 1: xor  <t1=int64#3,<t0=int64#2
278# asm 2: xor  <t1=%rdx,<t0=%rsi
279xor  %rdx,%rsi
280
281# qhasm: c = count(t0)
282# asm 1: popcnt <t0=int64#2, >c=int64#2
283# asm 2: popcnt <t0=%rsi, >c=%rsi
284popcnt %rsi, %rsi
285
286# qhasm: (uint32) c &= 1
287# asm 1: and  $1,<c=int64#2d
288# asm 2: and  $1,<c=%esi
289and  $1,%esi
290
291# qhasm: r <<= 1
292# asm 1: shl  $1,<r=int64#7
293# asm 2: shl  $1,<r=%rax
294shl  $1,%rax
295
296# qhasm: r |= c
297# asm 1: or   <c=int64#2,<r=int64#7
298# asm 2: or   <c=%rsi,<r=%rax
299or   %rsi,%rax
300
301# qhasm: t0 = mem64[ input_0 + 80 ]
302# asm 1: movq   80(<input_0=int64#1),>t0=int64#2
303# asm 2: movq   80(<input_0=%rdi),>t0=%rsi
304movq   80(%rdi),%rsi
305
306# qhasm: t1 = mem64[ input_0 + 88 ]
307# asm 1: movq   88(<input_0=int64#1),>t1=int64#3
308# asm 2: movq   88(<input_0=%rdi),>t1=%rdx
309movq   88(%rdi),%rdx
310
311# qhasm: t0 ^= t1
312# asm 1: xor  <t1=int64#3,<t0=int64#2
313# asm 2: xor  <t1=%rdx,<t0=%rsi
314xor  %rdx,%rsi
315
316# qhasm: c = count(t0)
317# asm 1: popcnt <t0=int64#2, >c=int64#2
318# asm 2: popcnt <t0=%rsi, >c=%rsi
319popcnt %rsi, %rsi
320
321# qhasm: (uint32) c &= 1
322# asm 1: and  $1,<c=int64#2d
323# asm 2: and  $1,<c=%esi
324and  $1,%esi
325
326# qhasm: r <<= 1
327# asm 1: shl  $1,<r=int64#7
328# asm 2: shl  $1,<r=%rax
329shl  $1,%rax
330
331# qhasm: r |= c
332# asm 1: or   <c=int64#2,<r=int64#7
333# asm 2: or   <c=%rsi,<r=%rax
334or   %rsi,%rax
335
336# qhasm: t0 = mem64[ input_0 + 64 ]
337# asm 1: movq   64(<input_0=int64#1),>t0=int64#2
338# asm 2: movq   64(<input_0=%rdi),>t0=%rsi
339movq   64(%rdi),%rsi
340
341# qhasm: t1 = mem64[ input_0 + 72 ]
342# asm 1: movq   72(<input_0=int64#1),>t1=int64#3
343# asm 2: movq   72(<input_0=%rdi),>t1=%rdx
344movq   72(%rdi),%rdx
345
346# qhasm: t0 ^= t1
347# asm 1: xor  <t1=int64#3,<t0=int64#2
348# asm 2: xor  <t1=%rdx,<t0=%rsi
349xor  %rdx,%rsi
350
351# qhasm: c = count(t0)
352# asm 1: popcnt <t0=int64#2, >c=int64#2
353# asm 2: popcnt <t0=%rsi, >c=%rsi
354popcnt %rsi, %rsi
355
356# qhasm: (uint32) c &= 1
357# asm 1: and  $1,<c=int64#2d
358# asm 2: and  $1,<c=%esi
359and  $1,%esi
360
361# qhasm: r <<= 1
362# asm 1: shl  $1,<r=int64#7
363# asm 2: shl  $1,<r=%rax
364shl  $1,%rax
365
366# qhasm: r |= c
367# asm 1: or   <c=int64#2,<r=int64#7
368# asm 2: or   <c=%rsi,<r=%rax
369or   %rsi,%rax
370
371# qhasm: t0 = mem64[ input_0 + 48 ]
372# asm 1: movq   48(<input_0=int64#1),>t0=int64#2
373# asm 2: movq   48(<input_0=%rdi),>t0=%rsi
374movq   48(%rdi),%rsi
375
376# qhasm: t1 = mem64[ input_0 + 56 ]
377# asm 1: movq   56(<input_0=int64#1),>t1=int64#3
378# asm 2: movq   56(<input_0=%rdi),>t1=%rdx
379movq   56(%rdi),%rdx
380
381# qhasm: t0 ^= t1
382# asm 1: xor  <t1=int64#3,<t0=int64#2
383# asm 2: xor  <t1=%rdx,<t0=%rsi
384xor  %rdx,%rsi
385
386# qhasm: c = count(t0)
387# asm 1: popcnt <t0=int64#2, >c=int64#2
388# asm 2: popcnt <t0=%rsi, >c=%rsi
389popcnt %rsi, %rsi
390
391# qhasm: (uint32) c &= 1
392# asm 1: and  $1,<c=int64#2d
393# asm 2: and  $1,<c=%esi
394and  $1,%esi
395
396# qhasm: r <<= 1
397# asm 1: shl  $1,<r=int64#7
398# asm 2: shl  $1,<r=%rax
399shl  $1,%rax
400
401# qhasm: r |= c
402# asm 1: or   <c=int64#2,<r=int64#7
403# asm 2: or   <c=%rsi,<r=%rax
404or   %rsi,%rax
405
406# qhasm: t0 = mem64[ input_0 + 32 ]
407# asm 1: movq   32(<input_0=int64#1),>t0=int64#2
408# asm 2: movq   32(<input_0=%rdi),>t0=%rsi
409movq   32(%rdi),%rsi
410
411# qhasm: t1 = mem64[ input_0 + 40 ]
412# asm 1: movq   40(<input_0=int64#1),>t1=int64#3
413# asm 2: movq   40(<input_0=%rdi),>t1=%rdx
414movq   40(%rdi),%rdx
415
416# qhasm: t0 ^= t1
417# asm 1: xor  <t1=int64#3,<t0=int64#2
418# asm 2: xor  <t1=%rdx,<t0=%rsi
419xor  %rdx,%rsi
420
421# qhasm: c = count(t0)
422# asm 1: popcnt <t0=int64#2, >c=int64#2
423# asm 2: popcnt <t0=%rsi, >c=%rsi
424popcnt %rsi, %rsi
425
426# qhasm: (uint32) c &= 1
427# asm 1: and  $1,<c=int64#2d
428# asm 2: and  $1,<c=%esi
429and  $1,%esi
430
431# qhasm: r <<= 1
432# asm 1: shl  $1,<r=int64#7
433# asm 2: shl  $1,<r=%rax
434shl  $1,%rax
435
436# qhasm: r |= c
437# asm 1: or   <c=int64#2,<r=int64#7
438# asm 2: or   <c=%rsi,<r=%rax
439or   %rsi,%rax
440
441# qhasm: t0 = mem64[ input_0 + 16 ]
442# asm 1: movq   16(<input_0=int64#1),>t0=int64#2
443# asm 2: movq   16(<input_0=%rdi),>t0=%rsi
444movq   16(%rdi),%rsi
445
446# qhasm: t1 = mem64[ input_0 + 24 ]
447# asm 1: movq   24(<input_0=int64#1),>t1=int64#3
448# asm 2: movq   24(<input_0=%rdi),>t1=%rdx
449movq   24(%rdi),%rdx
450
451# qhasm: t0 ^= t1
452# asm 1: xor  <t1=int64#3,<t0=int64#2
453# asm 2: xor  <t1=%rdx,<t0=%rsi
454xor  %rdx,%rsi
455
456# qhasm: c = count(t0)
457# asm 1: popcnt <t0=int64#2, >c=int64#2
458# asm 2: popcnt <t0=%rsi, >c=%rsi
459popcnt %rsi, %rsi
460
461# qhasm: (uint32) c &= 1
462# asm 1: and  $1,<c=int64#2d
463# asm 2: and  $1,<c=%esi
464and  $1,%esi
465
466# qhasm: r <<= 1
467# asm 1: shl  $1,<r=int64#7
468# asm 2: shl  $1,<r=%rax
469shl  $1,%rax
470
471# qhasm: r |= c
472# asm 1: or   <c=int64#2,<r=int64#7
473# asm 2: or   <c=%rsi,<r=%rax
474or   %rsi,%rax
475
476# qhasm: t0 = mem64[ input_0 + 0 ]
477# asm 1: movq   0(<input_0=int64#1),>t0=int64#2
478# asm 2: movq   0(<input_0=%rdi),>t0=%rsi
479movq   0(%rdi),%rsi
480
481# qhasm: t1 = mem64[ input_0 + 8 ]
482# asm 1: movq   8(<input_0=int64#1),>t1=int64#1
483# asm 2: movq   8(<input_0=%rdi),>t1=%rdi
484movq   8(%rdi),%rdi
485
486# qhasm: t0 ^= t1
487# asm 1: xor  <t1=int64#1,<t0=int64#2
488# asm 2: xor  <t1=%rdi,<t0=%rsi
489xor  %rdi,%rsi
490
491# qhasm: c = count(t0)
492# asm 1: popcnt <t0=int64#2, >c=int64#1
493# asm 2: popcnt <t0=%rsi, >c=%rdi
494popcnt %rsi, %rdi
495
496# qhasm: (uint32) c &= 1
497# asm 1: and  $1,<c=int64#1d
498# asm 2: and  $1,<c=%edi
499and  $1,%edi
500
501# qhasm: r <<= 1
502# asm 1: shl  $1,<r=int64#7
503# asm 2: shl  $1,<r=%rax
504shl  $1,%rax
505
506# qhasm: r |= c
507# asm 1: or   <c=int64#1,<r=int64#7
508# asm 2: or   <c=%rdi,<r=%rax
509or   %rdi,%rax
510
511# qhasm: return r
512add %r11,%rsp
513ret
514