# qhasm: int32 eax # qhasm: int32 ebx # qhasm: int32 esi # qhasm: int32 edi # qhasm: int32 ebp # qhasm: caller eax # qhasm: caller ebx # qhasm: caller esi # qhasm: caller edi # qhasm: caller ebp # qhasm: stack32 eax_stack # qhasm: stack32 ebx_stack # qhasm: stack32 esi_stack # qhasm: stack32 edi_stack # qhasm: stack32 ebp_stack # qhasm: stack32 arg1 # qhasm: stack32 arg2 # qhasm: stack32 arg3 # qhasm: stack32 arg4 # qhasm: stack32 arg5 # qhasm: input arg1 # qhasm: input arg2 # qhasm: input arg3 # qhasm: input arg4 # qhasm: input arg5 # qhasm: int32 out # qhasm: int32 r # qhasm: int32 s # qhasm: int32 m # qhasm: int32 l # qhasm: int32 m0 # qhasm: int32 m1 # qhasm: int32 m2 # qhasm: int32 m3 # qhasm: float80 a0 # qhasm: float80 a1 # qhasm: float80 a2 # qhasm: float80 a3 # qhasm: float80 h0 # qhasm: float80 h1 # qhasm: float80 h2 # qhasm: float80 h3 # qhasm: float80 x0 # qhasm: float80 x1 # qhasm: float80 x2 # qhasm: float80 x3 # qhasm: float80 y0 # qhasm: float80 y1 # qhasm: float80 y2 # qhasm: float80 y3 # qhasm: float80 r0x0 # qhasm: float80 r1x0 # qhasm: float80 r2x0 # qhasm: float80 r3x0 # qhasm: float80 r0x1 # qhasm: float80 r1x1 # qhasm: float80 r2x1 # qhasm: float80 sr3x1 # qhasm: float80 r0x2 # qhasm: float80 r1x2 # qhasm: float80 sr2x2 # qhasm: float80 sr3x2 # qhasm: float80 r0x3 # qhasm: float80 sr1x3 # qhasm: float80 sr2x3 # qhasm: float80 sr3x3 # qhasm: stack64 d0 # qhasm: stack64 d1 # qhasm: stack64 d2 # qhasm: stack64 d3 # qhasm: stack64 r0 # qhasm: stack64 r1 # qhasm: stack64 r2 # qhasm: stack64 r3 # qhasm: stack64 sr1 # qhasm: stack64 sr2 # qhasm: stack64 sr3 # qhasm: enter poly1305_x86_ppro stackaligned4096 poly1305_x86_ppro_constants .text .p2align 5 .globl _poly1305_x86_ppro .globl poly1305_x86_ppro _poly1305_x86_ppro: poly1305_x86_ppro: mov %esp,%eax sub $poly1305_x86_ppro_constants,%eax and $4095,%eax add $192,%eax sub %eax,%esp # qhasm: round *(uint16 *) &poly1305_x86_ppro_rounding fldcw poly1305_x86_ppro_rounding # qhasm: ebx_stack = ebx # asm 1: movl ebx_stack=stack32#1 # asm 2: movl ebx_stack=0(%esp) movl %ebx,0(%esp) # qhasm: esi_stack = esi # asm 1: movl esi_stack=stack32#2 # asm 2: movl esi_stack=4(%esp) movl %esi,4(%esp) # qhasm: edi_stack = edi # asm 1: movl edi_stack=stack32#3 # asm 2: movl edi_stack=8(%esp) movl %edi,8(%esp) # qhasm: ebp_stack = ebp # asm 1: movl ebp_stack=stack32#4 # asm 2: movl ebp_stack=12(%esp) movl %ebp,12(%esp) # qhasm: r = arg2 # asm 1: movl r=int32#2 # asm 2: movl r=%ecx movl 8(%esp,%eax),%ecx # qhasm: a0 = *(int32 *) (r + 0) # asm 1: fildl 0(r0=stack64#1 # asm 2: fstpl >r0=96(%esp) fstpl 96(%esp) # comment:fpstackfrombottom: # qhasm: a1 = *(int32 *) (r + 4) # asm 1: fildl 4(r1=stack64#2 # asm 2: fstl >r1=104(%esp) fstl 104(%esp) # comment:fpstackfrombottom:sr1=stack64#3 # asm 2: fstpl >sr1=112(%esp) fstpl 112(%esp) # comment:fpstackfrombottom: # qhasm: a2 = *(int32 *) (r + 8) # asm 1: fildl 8(r2=stack64#4 # asm 2: fstl >r2=120(%esp) fstl 120(%esp) # comment:fpstackfrombottom:sr2=stack64#5 # asm 2: fstpl >sr2=128(%esp) fstpl 128(%esp) # comment:fpstackfrombottom: # qhasm: a3 = *(int32 *) (r + 12) # asm 1: fildl 12(r3=stack64#6 # asm 2: fstl >r3=136(%esp) fstl 136(%esp) # comment:fpstackfrombottom:sr3=stack64#7 # asm 2: fstpl >sr3=144(%esp) fstpl 144(%esp) # comment:fpstackfrombottom: # qhasm: h3 = 0 fldz # comment:fpstackfrombottom:d0=stack64#8 # asm 2: movl $0x43300000,>d0=156(%esp) movl $0x43300000,156(%esp) # comment:fpstackfrombottom:d1=stack64#9 # asm 2: movl $0x45300000,>d1=164(%esp) movl $0x45300000,164(%esp) # comment:fpstackfrombottom:d2=stack64#10 # asm 2: movl $0x47300000,>d2=172(%esp) movl $0x47300000,172(%esp) # comment:fpstackfrombottom:d3=stack64#11 # asm 2: movl $0x49300000,>d3=180(%esp) movl $0x49300000,180(%esp) # comment:fpstackfrombottom:m=int32#5 # asm 2: movl m=%esi movl 16(%esp,%eax),%esi # comment:fpstackfrombottom:l=int32#2 # asm 2: movl l=%ecx movl 20(%esp,%eax),%ecx # comment:fpstackfrombottom:eax_stack=stack32#5 # asm 2: movl eax_stack=16(%esp) movl %eax,16(%esp) # comment:fpstackfrombottom:m3=int32#1 # asm 2: movl 12(m3=%eax movl 12(%esi),%eax # comment:fpstackfrombottom:m2=int32#3 # asm 2: movl 8(m2=%edx movl 8(%esi),%edx # comment:fpstackfrombottom:m1=int32#4 # asm 2: movl 4(m1=%ebx movl 4(%esi),%ebx # comment:fpstackfrombottom:m0=int32#6 # asm 2: movl 0(m0=%edi movl 0(%esi),%edi # comment:fpstackfrombottom:m3=int32#1 # asm 2: movl 12(m3=%eax movl 12(%esi),%eax # comment:fpstackfrombottom:m2=int32#3 # asm 2: movl 8(m2=%edx movl 8(%esi),%edx # comment:fpstackfrombottom:m1=int32#4 # asm 2: movl 4(m1=%ebx movl 4(%esi),%ebx # comment:fpstackfrombottom:m0=int32#6 # asm 2: movl 0(m0=%edi movl 0(%esi),%edi # comment:fpstackfrombottom:lastchunk=stack128#1 # asm 2: movl $0,>lastchunk=64(%esp) movl $0,64(%esp) # comment:fpstackfrombottom:destination=int32#6 # asm 2: leal destination=%edi leal 64(%esp),%edi # comment:fpstackfrombottom:m3=int32#1 # asm 2: movl 12+m3=%eax movl 12+64(%esp),%eax # comment:fpstackfrombottom:m2=int32#2 # asm 2: movl 8+m2=%ecx movl 8+64(%esp),%ecx # comment:fpstackfrombottom:m1=int32#3 # asm 2: movl 4+m1=%edx movl 4+64(%esp),%edx # comment:fpstackfrombottom:m0=int32#4 # asm 2: movl m0=%ebx movl 64(%esp),%ebx # comment:fpstackfrombottom:d0=stack64#1 # asm 2: fstpl >d0=96(%esp) fstpl 96(%esp) # comment:fpstackfrombottom:d1=stack64#2 # asm 2: fstpl >d1=104(%esp) fstpl 104(%esp) # comment:fpstackfrombottom:d2=stack64#3 # asm 2: fstpl >d2=112(%esp) fstpl 112(%esp) # comment:fpstackfrombottom:d3=stack64#4 # asm 2: fstpl >d3=120(%esp) fstpl 120(%esp) # comment:fpstackfrombottom: # qhasm: int32 f0 # qhasm: int32 f1 # qhasm: int32 f2 # qhasm: int32 f3 # qhasm: int32 f4 # qhasm: int32 g0 # qhasm: int32 g1 # qhasm: int32 g2 # qhasm: int32 g3 # qhasm: int32 f # qhasm: int32 notf # qhasm: stack32 f1_stack # qhasm: stack32 f2_stack # qhasm: stack32 f3_stack # qhasm: stack32 f4_stack # qhasm: stack32 g0_stack # qhasm: stack32 g1_stack # qhasm: stack32 g2_stack # qhasm: stack32 g3_stack # qhasm: g0 = top d0 # asm 1: movl g0=int32#1 # asm 2: movl g0=%eax movl 100(%esp),%eax # qhasm: g0 &= 63 # asm 1: and $63,g1=int32#2 # asm 2: movl g1=%ecx movl 108(%esp),%ecx # qhasm: g1 &= 63 # asm 1: and $63,g2=int32#3 # asm 2: movl g2=%edx movl 116(%esp),%edx # qhasm: g2 &= 63 # asm 1: and $63,g3=int32#4 # asm 2: movl g3=%ebx movl 124(%esp),%ebx # qhasm: g3 &= 63 # asm 1: and $63,f1=int32#5 # asm 2: movl f1=%esi movl 104(%esp),%esi # qhasm: carry? f1 += g0 # asm 1: addl f1_stack=stack32#6 # asm 2: movl f1_stack=20(%esp) movl %esi,20(%esp) # qhasm: f2 = bottom d2 # asm 1: movl f2=int32#1 # asm 2: movl f2=%eax movl 112(%esp),%eax # qhasm: carry? f2 += g1 + carry # asm 1: adcl f2_stack=stack32#7 # asm 2: movl f2_stack=24(%esp) movl %eax,24(%esp) # qhasm: f3 = bottom d3 # asm 1: movl f3=int32#1 # asm 2: movl f3=%eax movl 120(%esp),%eax # qhasm: carry? f3 += g2 + carry # asm 1: adcl f3_stack=stack32#8 # asm 2: movl f3_stack=28(%esp) movl %eax,28(%esp) # qhasm: f4 = 0 # asm 1: mov $0,>f4=int32#1 # asm 2: mov $0,>f4=%eax mov $0,%eax # qhasm: f4 += g3 + carry # asm 1: adcl f4_stack=stack32#9 # asm 2: movl f4_stack=32(%esp) movl %eax,32(%esp) # qhasm: g0 = 5 # asm 1: mov $5,>g0=int32#1 # asm 2: mov $5,>g0=%eax mov $5,%eax # qhasm: f0 = bottom d0 # asm 1: movl f0=int32#2 # asm 2: movl f0=%ecx movl 96(%esp),%ecx # qhasm: carry? g0 += f0 # asm 1: addl g0_stack=stack32#10 # asm 2: movl g0_stack=36(%esp) movl %eax,36(%esp) # qhasm: g1 = 0 # asm 1: mov $0,>g1=int32#1 # asm 2: mov $0,>g1=%eax mov $0,%eax # qhasm: f1 = f1_stack # asm 1: movl f1=int32#3 # asm 2: movl f1=%edx movl 20(%esp),%edx # qhasm: carry? g1 += f1 + carry # asm 1: adcl g1_stack=stack32#6 # asm 2: movl g1_stack=20(%esp) movl %eax,20(%esp) # qhasm: g2 = 0 # asm 1: mov $0,>g2=int32#1 # asm 2: mov $0,>g2=%eax mov $0,%eax # qhasm: f2 = f2_stack # asm 1: movl f2=int32#4 # asm 2: movl f2=%ebx movl 24(%esp),%ebx # qhasm: carry? g2 += f2 + carry # asm 1: adcl g2_stack=stack32#7 # asm 2: movl g2_stack=24(%esp) movl %eax,24(%esp) # qhasm: g3 = 0 # asm 1: mov $0,>g3=int32#1 # asm 2: mov $0,>g3=%eax mov $0,%eax # qhasm: f3 = f3_stack # asm 1: movl f3=int32#5 # asm 2: movl f3=%esi movl 28(%esp),%esi # qhasm: carry? g3 += f3 + carry # asm 1: adcl g3_stack=stack32#8 # asm 2: movl g3_stack=28(%esp) movl %eax,28(%esp) # qhasm: f = -4 # asm 1: mov $-4,>f=int32#1 # asm 2: mov $-4,>f=%eax mov $-4,%eax # qhasm: f4 = f4_stack # asm 1: movl f4=int32#6 # asm 2: movl f4=%edi movl 32(%esp),%edi # qhasm: f += f4 + carry # asm 1: adcl >= 16 # asm 1: sar $16,notf=int32#6 # asm 2: mov notf=%edi mov %eax,%edi # qhasm: notf ^= -1 # asm 1: xor $-1,g0=int32#7 # asm 2: movl g0=%ebp movl 36(%esp),%ebp # qhasm: g0 &= notf # asm 1: andl g1=int32#7 # asm 2: movl g1=%ebp movl 20(%esp),%ebp # qhasm: g1 &= notf # asm 1: andl g2=int32#7 # asm 2: movl g2=%ebp movl 24(%esp),%ebp # qhasm: g2 &= notf # asm 1: andl g3=int32#1 # asm 2: movl g3=%eax movl 28(%esp),%eax # qhasm: g3 &= notf # asm 1: andl eax=int32#1 # asm 2: movl eax=%eax movl 16(%esp),%eax # qhasm: s = arg3 # asm 1: movl s=int32#6 # asm 2: movl s=%edi movl 12(%esp,%eax),%edi # qhasm: carry? f0 += *(uint32 *) (s + 0) # asm 1: addl 0(out=int32#6 # asm 2: movl out=%edi movl 4(%esp,%eax),%edi # qhasm: *(uint32 *) (out + 0) = f0 # asm 1: movl ebx=int32#4 # asm 2: movl ebx=%ebx movl 0(%esp),%ebx # qhasm: esi = esi_stack # asm 1: movl esi=int32#5 # asm 2: movl esi=%esi movl 4(%esp),%esi # qhasm: edi = edi_stack # asm 1: movl edi=int32#6 # asm 2: movl edi=%edi movl 8(%esp),%edi # qhasm: ebp = ebp_stack # asm 1: movl ebp=int32#7 # asm 2: movl ebp=%ebp movl 12(%esp),%ebp # qhasm: leave add %eax,%esp ret