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