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_MCELIECE460896F_AVX_vec_reduce_asm 43.global PQCLEAN_MCELIECE460896F_AVX_vec_reduce_asm 44_PQCLEAN_MCELIECE460896F_AVX_vec_reduce_asm: 45PQCLEAN_MCELIECE460896F_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