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