# salsa20,12_p4.s version 20060209 # D. J. Bernstein # Public domain. # int32 a # stack32 arg1 # stack32 arg2 # stack32 arg3 # stack32 arg4 # input arg1 # input arg2 # input arg3 # input arg4 # int32 eax # int32 ebx # int32 esi # int32 edi # int32 ebp # caller eax # caller ebx # caller esi # caller edi # caller ebp # int32 k # int32 kbits # int32 iv # int32 i # int32 x # int32 m # int32 out # stack32 bytes_backup # int32 bytes # stack32 eax_stack # stack32 ebx_stack # stack32 esi_stack # stack32 edi_stack # stack32 ebp_stack # int6464 diag0 # int6464 diag1 # int6464 diag2 # int6464 diag3 # int6464 a0 # int6464 a1 # int6464 a2 # int6464 a3 # int6464 a4 # int6464 a5 # int6464 a6 # int6464 a7 # int6464 b0 # int6464 b1 # int6464 b2 # int6464 b3 # int6464 b4 # int6464 b5 # int6464 b6 # int6464 b7 # int32 in0 # int32 in1 # int32 in2 # int32 in3 # int32 in4 # int32 in5 # int32 in6 # int32 in7 # int32 in8 # int32 in9 # int32 in10 # int32 in11 # int32 in12 # int32 in13 # int32 in14 # int32 in15 # stack512 tmp # stack32 ctarget # enter ECRYPT_keystream_bytes .text .p2align 5 .globl _ECRYPT_keystream_bytes .globl ECRYPT_keystream_bytes _ECRYPT_keystream_bytes: ECRYPT_keystream_bytes: mov %esp,%eax and $31,%eax add $96,%eax sub %eax,%esp # eax_stack = eax # movl eax_stack=stack32#2 # movl eax_stack=68(%esp) movl %eax,68(%esp) # ebx_stack = ebx # movl ebx_stack=stack32#3 # movl ebx_stack=72(%esp) movl %ebx,72(%esp) # esi_stack = esi # movl esi_stack=stack32#4 # movl esi_stack=76(%esp) movl %esi,76(%esp) # edi_stack = edi # movl edi_stack=stack32#5 # movl edi_stack=80(%esp) movl %edi,80(%esp) # ebp_stack = ebp # movl ebp_stack=stack32#6 # movl ebp_stack=84(%esp) movl %ebp,84(%esp) # x = arg1 # movl x=int32#3 # movl x=%edx movl 4(%esp,%eax),%edx # m = arg2 # movl m=int32#5 # movl m=%esi movl 8(%esp,%eax),%esi # out = m # mov out=int32#6 # mov out=%edi mov %esi,%edi # bytes = arg3 # movl bytes=int32#4 # movl bytes=%ebx movl 12(%esp,%eax),%ebx # bytes -= 0 # sub $0,a=int32#1 # mov $0,>a=%eax mov $0,%eax # i = bytes # mov i=int32#2 # mov i=%ecx mov %ebx,%ecx # while (i) { *out++ = a; --i } rep stosb # out -= bytes # sub eax_stack=stack32#2 # movl eax_stack=68(%esp) movl %eax,68(%esp) # ebx_stack = ebx # movl ebx_stack=stack32#3 # movl ebx_stack=72(%esp) movl %ebx,72(%esp) # esi_stack = esi # movl esi_stack=stack32#4 # movl esi_stack=76(%esp) movl %esi,76(%esp) # edi_stack = edi # movl edi_stack=stack32#5 # movl edi_stack=80(%esp) movl %edi,80(%esp) # ebp_stack = ebp # movl ebp_stack=stack32#6 # movl ebp_stack=84(%esp) movl %ebp,84(%esp) # x = arg1 # movl x=int32#3 # movl x=%edx movl 4(%esp,%eax),%edx # m = arg2 # movl m=int32#5 # movl m=%esi movl 8(%esp,%eax),%esi # out = arg3 # movl out=int32#6 # movl out=%edi movl 12(%esp,%eax),%edi # bytes = arg4 # movl bytes=int32#4 # movl bytes=%ebx movl 16(%esp,%eax),%ebx # bytes -= 0 # sub $0,eax_stack=stack32#2 # movl eax_stack=68(%esp) movl %eax,68(%esp) # ebx_stack = ebx # movl ebx_stack=stack32#3 # movl ebx_stack=72(%esp) movl %ebx,72(%esp) # esi_stack = esi # movl esi_stack=stack32#4 # movl esi_stack=76(%esp) movl %esi,76(%esp) # edi_stack = edi # movl edi_stack=stack32#5 # movl edi_stack=80(%esp) movl %edi,80(%esp) # ebp_stack = ebp # movl ebp_stack=stack32#6 # movl ebp_stack=84(%esp) movl %ebp,84(%esp) # x = arg1 # movl x=int32#3 # movl x=%edx movl 4(%esp,%eax),%edx # m = arg2 # movl m=int32#5 # movl m=%esi movl 8(%esp,%eax),%esi # out = arg3 # movl out=int32#6 # movl out=%edi movl 12(%esp,%eax),%edi # bytes = arg4 # movl bytes=int32#4 # movl bytes=%ebx movl 16(%esp,%eax),%ebx # bytes -= 0 # sub $0,= jae ._nocopy # ctarget = out # movl ctarget=stack32#7 # movl ctarget=88(%esp) movl %edi,88(%esp) # out = &tmp # leal >tmp=stack512#1,>out=int32#6 # leal >tmp=0(%esp),>out=%edi leal 0(%esp),%edi # i = bytes # mov i=int32#2 # mov i=%ecx mov %ebx,%ecx # while (i) { *out++ = *m++; --i } rep movsb # out = &tmp # leal >tmp=stack512#1,>out=int32#6 # leal >tmp=0(%esp),>out=%edi leal 0(%esp),%edi # m = &tmp # leal >tmp=stack512#1,>m=int32#5 # leal >tmp=0(%esp),>m=%esi leal 0(%esp),%esi # nocopy# ._nocopy: # bytes_backup = bytes # movl bytes_backup=stack32#1 # movl bytes_backup=64(%esp) movl %ebx,64(%esp) # diag0 = *(int128 *) (x + 0) # movdqa 0(diag0=int6464#1 # movdqa 0(diag0=%xmm0 movdqa 0(%edx),%xmm0 # diag1 = *(int128 *) (x + 16) # movdqa 16(diag1=int6464#2 # movdqa 16(diag1=%xmm1 movdqa 16(%edx),%xmm1 # diag2 = *(int128 *) (x + 32) # movdqa 32(diag2=int6464#3 # movdqa 32(diag2=%xmm2 movdqa 32(%edx),%xmm2 # diag3 = *(int128 *) (x + 48) # movdqa 48(diag3=int6464#4 # movdqa 48(diag3=%xmm3 movdqa 48(%edx),%xmm3 # a0 = diag1 <<< 0 # pshufd $0xe4,a0=int6464#5 # pshufd $0xe4,a0=%xmm4 pshufd $0xe4,%xmm1,%xmm4 # b0 = 0 # pxor >b0=int6464#7,>b0=int6464#7 # pxor >b0=%xmm6,>b0=%xmm6 pxor %xmm6,%xmm6 # i = 12 # mov $12,>i=int32#1 # mov $12,>i=%eax mov $12,%eax # mainloop# ._mainloop: # uint32323232 a0 += diag0 # paddd a1=int6464#6 # pshufd $0xe4,a1=%xmm5 pshufd $0xe4,%xmm0,%xmm5 # uint32323232 b0 += a0 # paddd b1=int6464#8,>b1=int6464#8 # pxor >b1=%xmm7,>b1=%xmm7 pxor %xmm7,%xmm7 # uint32323232 b0 >>= 25 # psrld $25,a2=int6464#5 # pshufd $0xe4,a2=%xmm4 pshufd $0xe4,%xmm3,%xmm4 # uint32323232 b1 += a1 # paddd b2=int6464#7,>b2=int6464#7 # pxor >b2=%xmm6,>b2=%xmm6 pxor %xmm6,%xmm6 # uint32323232 b1 >>= 23 # psrld $23,diag3=int6464#4 # pshufd $0x93,diag3=%xmm3 pshufd $0x93,%xmm3,%xmm3 # diag2 ^= b1 # pxor a3=int6464#6 # pshufd $0xe4,a3=%xmm5 pshufd $0xe4,%xmm2,%xmm5 # uint32323232 b2 += a2 # paddd b3=int6464#8,>b3=int6464#8 # pxor >b3=%xmm7,>b3=%xmm7 pxor %xmm7,%xmm7 # uint32323232 b2 >>= 19 # psrld $19,diag2=int6464#3 # pshufd $0x4e,diag2=%xmm2 pshufd $0x4e,%xmm2,%xmm2 # diag1 ^= b2 # pxor a4=int6464#5 # pshufd $0xe4,a4=%xmm4 pshufd $0xe4,%xmm3,%xmm4 # uint32323232 b3 += a3 # paddd b4=int6464#7,>b4=int6464#7 # pxor >b4=%xmm6,>b4=%xmm6 pxor %xmm6,%xmm6 # uint32323232 b3 >>= 14 # psrld $14,diag1=int6464#2 # pshufd $0x39,diag1=%xmm1 pshufd $0x39,%xmm1,%xmm1 # diag0 ^= b3 # pxor a5=int6464#6 # pshufd $0xe4,a5=%xmm5 pshufd $0xe4,%xmm0,%xmm5 # uint32323232 b4 += a4 # paddd b5=int6464#8,>b5=int6464#8 # pxor >b5=%xmm7,>b5=%xmm7 pxor %xmm7,%xmm7 # uint32323232 b4 >>= 25 # psrld $25,a6=int6464#5 # pshufd $0xe4,a6=%xmm4 pshufd $0xe4,%xmm1,%xmm4 # uint32323232 b5 += a5 # paddd b6=int6464#7,>b6=int6464#7 # pxor >b6=%xmm6,>b6=%xmm6 pxor %xmm6,%xmm6 # uint32323232 b5 >>= 23 # psrld $23,diag1=int6464#2 # pshufd $0x93,diag1=%xmm1 pshufd $0x93,%xmm1,%xmm1 # diag2 ^= b5 # pxor a7=int6464#6 # pshufd $0xe4,a7=%xmm5 pshufd $0xe4,%xmm2,%xmm5 # uint32323232 b6 += a6 # paddd b7=int6464#8,>b7=int6464#8 # pxor >b7=%xmm7,>b7=%xmm7 pxor %xmm7,%xmm7 # uint32323232 b6 >>= 19 # psrld $19,diag2=int6464#3 # pshufd $0x4e,diag2=%xmm2 pshufd $0x4e,%xmm2,%xmm2 # diag3 ^= b6 # pxor a0=int6464#5 # pshufd $0xe4,a0=%xmm4 pshufd $0xe4,%xmm1,%xmm4 # uint32323232 b7 += a7 # paddd b0=int6464#7,>b0=int6464#7 # pxor >b0=%xmm6,>b0=%xmm6 pxor %xmm6,%xmm6 # uint32323232 b7 >>= 14 # psrld $14,diag3=int6464#4 # pshufd $0x39,diag3=%xmm3 pshufd $0x39,%xmm3,%xmm3 # diag0 ^= b7 # pxor a1=int6464#6 # pshufd $0xe4,a1=%xmm5 pshufd $0xe4,%xmm0,%xmm5 # uint32323232 b0 += a0 # paddd b1=int6464#8,>b1=int6464#8 # pxor >b1=%xmm7,>b1=%xmm7 pxor %xmm7,%xmm7 # uint32323232 b0 >>= 25 # psrld $25,a2=int6464#5 # pshufd $0xe4,a2=%xmm4 pshufd $0xe4,%xmm3,%xmm4 # uint32323232 b1 += a1 # paddd b2=int6464#7,>b2=int6464#7 # pxor >b2=%xmm6,>b2=%xmm6 pxor %xmm6,%xmm6 # uint32323232 b1 >>= 23 # psrld $23,diag3=int6464#4 # pshufd $0x93,diag3=%xmm3 pshufd $0x93,%xmm3,%xmm3 # diag2 ^= b1 # pxor a3=int6464#6 # pshufd $0xe4,a3=%xmm5 pshufd $0xe4,%xmm2,%xmm5 # uint32323232 b2 += a2 # paddd b3=int6464#8,>b3=int6464#8 # pxor >b3=%xmm7,>b3=%xmm7 pxor %xmm7,%xmm7 # uint32323232 b2 >>= 19 # psrld $19,diag2=int6464#3 # pshufd $0x4e,diag2=%xmm2 pshufd $0x4e,%xmm2,%xmm2 # diag1 ^= b2 # pxor a4=int6464#5 # pshufd $0xe4,a4=%xmm4 pshufd $0xe4,%xmm3,%xmm4 # uint32323232 b3 += a3 # paddd b4=int6464#7,>b4=int6464#7 # pxor >b4=%xmm6,>b4=%xmm6 pxor %xmm6,%xmm6 # uint32323232 b3 >>= 14 # psrld $14,diag1=int6464#2 # pshufd $0x39,diag1=%xmm1 pshufd $0x39,%xmm1,%xmm1 # diag0 ^= b3 # pxor a5=int6464#6 # pshufd $0xe4,a5=%xmm5 pshufd $0xe4,%xmm0,%xmm5 # uint32323232 b4 += a4 # paddd b5=int6464#8,>b5=int6464#8 # pxor >b5=%xmm7,>b5=%xmm7 pxor %xmm7,%xmm7 # uint32323232 b4 >>= 25 # psrld $25,a6=int6464#5 # pshufd $0xe4,a6=%xmm4 pshufd $0xe4,%xmm1,%xmm4 # uint32323232 b5 += a5 # paddd b6=int6464#7,>b6=int6464#7 # pxor >b6=%xmm6,>b6=%xmm6 pxor %xmm6,%xmm6 # uint32323232 b5 >>= 23 # psrld $23,diag1=int6464#2 # pshufd $0x93,diag1=%xmm1 pshufd $0x93,%xmm1,%xmm1 # diag2 ^= b5 # pxor a7=int6464#6 # pshufd $0xe4,a7=%xmm5 pshufd $0xe4,%xmm2,%xmm5 # uint32323232 b6 += a6 # paddd b7=int6464#8,>b7=int6464#8 # pxor >b7=%xmm7,>b7=%xmm7 pxor %xmm7,%xmm7 # uint32323232 b6 >>= 19 # psrld $19,diag2=int6464#3 # pshufd $0x4e,diag2=%xmm2 pshufd $0x4e,%xmm2,%xmm2 # diag3 ^= b6 # pxor a0=int6464#5 # pshufd $0xe4,a0=%xmm4 pshufd $0xe4,%xmm1,%xmm4 # uint32323232 b7 += a7 # paddd b0=int6464#7,>b0=int6464#7 # pxor >b0=%xmm6,>b0=%xmm6 pxor %xmm6,%xmm6 # uint32323232 b7 >>= 14 # psrld $14,diag3=int6464#4 # pshufd $0x39,diag3=%xmm3 pshufd $0x39,%xmm3,%xmm3 # diag0 ^= b7 # pxor ja ._mainloop # uint32323232 diag0 += *(int128 *) (x + 0) # paddd 0(in0=int32#1 # movd in0=%eax movd %xmm0,%eax # in12 = diag1 # movd in12=int32#7 # movd in12=%ebp movd %xmm1,%ebp # in8 = diag2 # movd in8=int32#4 # movd in8=%ebx movd %xmm2,%ebx # in4 = diag3 # movd in4=int32#2 # movd in4=%ecx movd %xmm3,%ecx # diag0 <<<= 96 # pshufd $0x39,diag0=int6464#1 # pshufd $0x39,diag0=%xmm0 pshufd $0x39,%xmm0,%xmm0 # diag1 <<<= 96 # pshufd $0x39,diag1=int6464#2 # pshufd $0x39,diag1=%xmm1 pshufd $0x39,%xmm1,%xmm1 # diag2 <<<= 96 # pshufd $0x39,diag2=int6464#3 # pshufd $0x39,diag2=%xmm2 pshufd $0x39,%xmm2,%xmm2 # diag3 <<<= 96 # pshufd $0x39,diag3=int6464#4 # pshufd $0x39,diag3=%xmm3 pshufd $0x39,%xmm3,%xmm3 # in0 ^= *(uint32 *) (m + 0) # xorl 0(in5=int32#2 # movd in5=%ecx movd %xmm0,%ecx # in1 = diag1 # movd in1=int32#1 # movd in1=%eax movd %xmm1,%eax # in13 = diag2 # movd in13=int32#7 # movd in13=%ebp movd %xmm2,%ebp # in9 = diag3 # movd in9=int32#4 # movd in9=%ebx movd %xmm3,%ebx # diag0 <<<= 96 # pshufd $0x39,diag0=int6464#1 # pshufd $0x39,diag0=%xmm0 pshufd $0x39,%xmm0,%xmm0 # diag1 <<<= 96 # pshufd $0x39,diag1=int6464#2 # pshufd $0x39,diag1=%xmm1 pshufd $0x39,%xmm1,%xmm1 # diag2 <<<= 96 # pshufd $0x39,diag2=int6464#3 # pshufd $0x39,diag2=%xmm2 pshufd $0x39,%xmm2,%xmm2 # diag3 <<<= 96 # pshufd $0x39,diag3=int6464#4 # pshufd $0x39,diag3=%xmm3 pshufd $0x39,%xmm3,%xmm3 # in5 ^= *(uint32 *) (m + 20) # xorl 20(in10=int32#4 # movd in10=%ebx movd %xmm0,%ebx # in6 = diag1 # movd in6=int32#2 # movd in6=%ecx movd %xmm1,%ecx # in2 = diag2 # movd in2=int32#1 # movd in2=%eax movd %xmm2,%eax # in14 = diag3 # movd in14=int32#7 # movd in14=%ebp movd %xmm3,%ebp # diag0 <<<= 96 # pshufd $0x39,diag0=int6464#1 # pshufd $0x39,diag0=%xmm0 pshufd $0x39,%xmm0,%xmm0 # diag1 <<<= 96 # pshufd $0x39,diag1=int6464#2 # pshufd $0x39,diag1=%xmm1 pshufd $0x39,%xmm1,%xmm1 # diag2 <<<= 96 # pshufd $0x39,diag2=int6464#3 # pshufd $0x39,diag2=%xmm2 pshufd $0x39,%xmm2,%xmm2 # diag3 <<<= 96 # pshufd $0x39,diag3=int6464#4 # pshufd $0x39,diag3=%xmm3 pshufd $0x39,%xmm3,%xmm3 # in10 ^= *(uint32 *) (m + 40) # xorl 40(in15=int32#7 # movd in15=%ebp movd %xmm0,%ebp # in11 = diag1 # movd in11=int32#4 # movd in11=%ebx movd %xmm1,%ebx # in7 = diag2 # movd in7=int32#2 # movd in7=%ecx movd %xmm2,%ecx # in3 = diag3 # movd in3=int32#1 # movd in3=%eax movd %xmm3,%eax # in15 ^= *(uint32 *) (m + 60) # xorl 60(bytes=int32#4 # movl bytes=%ebx movl 64(%esp),%ebx # in8 = *(uint32 *) (x + 32) # movl 32(in8=int32#1 # movl 32(in8=%eax movl 32(%edx),%eax # in9 = *(uint32 *) (x + 52) # movl 52(in9=int32#2 # movl 52(in9=%ecx movl 52(%edx),%ecx # in8 += 1 # add $1, ja ._bytesatleast65 # goto bytesatleast64 if unsigned>= jae ._bytesatleast64 # m = out # mov m=int32#5 # mov m=%esi mov %edi,%esi # out = ctarget # movl out=int32#6 # movl out=%edi movl 88(%esp),%edi # i = bytes # mov i=int32#2 # mov i=%ecx mov %ebx,%ecx # while (i) { *out++ = *m++; --i } rep movsb # bytesatleast64# ._bytesatleast64: # done# ._done: # eax = eax_stack # movl eax=int32#1 # movl eax=%eax movl 68(%esp),%eax # ebx = ebx_stack # movl ebx=int32#4 # movl ebx=%ebx movl 72(%esp),%ebx # esi = esi_stack # movl esi=int32#5 # movl esi=%esi movl 76(%esp),%esi # edi = edi_stack # movl edi=int32#6 # movl edi=%edi movl 80(%esp),%edi # ebp = ebp_stack # movl ebp=int32#7 # movl ebp=%ebp movl 84(%esp),%ebp # leave add %eax,%esp ret # bytesatleast65# ._bytesatleast65: # bytes -= 64 # sub $64,eax_stack=stack32#1 # movl eax_stack=64(%esp) movl %eax,64(%esp) # ebx_stack = ebx # movl ebx_stack=stack32#2 # movl ebx_stack=68(%esp) movl %ebx,68(%esp) # esi_stack = esi # movl esi_stack=stack32#3 # movl esi_stack=72(%esp) movl %esi,72(%esp) # edi_stack = edi # movl edi_stack=stack32#4 # movl edi_stack=76(%esp) movl %edi,76(%esp) # ebp_stack = ebp # movl ebp_stack=stack32#5 # movl ebp_stack=80(%esp) movl %ebp,80(%esp) # k = arg2 # movl k=int32#2 # movl k=%ecx movl 8(%esp,%eax),%ecx # kbits = arg3 # movl kbits=int32#3 # movl kbits=%edx movl 12(%esp,%eax),%edx # x = arg1 # movl x=int32#1 # movl x=%eax movl 4(%esp,%eax),%eax # in1 = *(uint32 *) (k + 0) # movl 0(in1=int32#4 # movl 0(in1=%ebx movl 0(%ecx),%ebx # in2 = *(uint32 *) (k + 4) # movl 4(in2=int32#5 # movl 4(in2=%esi movl 4(%ecx),%esi # in3 = *(uint32 *) (k + 8) # movl 8(in3=int32#6 # movl 8(in3=%edi movl 8(%ecx),%edi # in4 = *(uint32 *) (k + 12) # movl 12(in4=int32#7 # movl 12(in4=%ebp movl 12(%ecx),%ebp # *(uint32 *) (x + 20) = in1 # movl in11=int32#3 # movl 16(in11=%edx movl 16(%ecx),%edx # in12 = *(uint32 *) (k + 20) # movl 20(in12=int32#4 # movl 20(in12=%ebx movl 20(%ecx),%ebx # in13 = *(uint32 *) (k + 24) # movl 24(in13=int32#5 # movl 24(in13=%esi movl 24(%ecx),%esi # in14 = *(uint32 *) (k + 28) # movl 28(in14=int32#2 # movl 28(in14=%ecx movl 28(%ecx),%ecx # *(uint32 *) (x + 28) = in11 # movl in0=int32#2 # mov $1634760805,>in0=%ecx mov $1634760805,%ecx # in5 = 857760878 # mov $857760878,>in5=int32#3 # mov $857760878,>in5=%edx mov $857760878,%edx # in10 = 2036477234 # mov $2036477234,>in10=int32#4 # mov $2036477234,>in10=%ebx mov $2036477234,%ebx # in15 = 1797285236 # mov $1797285236,>in15=int32#5 # mov $1797285236,>in15=%esi mov $1797285236,%esi # *(uint32 *) (x + 0) = in0 # movl in11=int32#3 # movl 0(in11=%edx movl 0(%ecx),%edx # in12 = *(uint32 *) (k + 4) # movl 4(in12=int32#4 # movl 4(in12=%ebx movl 4(%ecx),%ebx # in13 = *(uint32 *) (k + 8) # movl 8(in13=int32#5 # movl 8(in13=%esi movl 8(%ecx),%esi # in14 = *(uint32 *) (k + 12) # movl 12(in14=int32#2 # movl 12(in14=%ecx movl 12(%ecx),%ecx # *(uint32 *) (x + 28) = in11 # movl in0=int32#2 # mov $1634760805,>in0=%ecx mov $1634760805,%ecx # in5 = 824206446 # mov $824206446,>in5=int32#3 # mov $824206446,>in5=%edx mov $824206446,%edx # in10 = 2036477238 # mov $2036477238,>in10=int32#4 # mov $2036477238,>in10=%ebx mov $2036477238,%ebx # in15 = 1797285236 # mov $1797285236,>in15=int32#5 # mov $1797285236,>in15=%esi mov $1797285236,%esi # *(uint32 *) (x + 0) = in0 # movl eax=int32#1 # movl eax=%eax movl 64(%esp),%eax # ebx = ebx_stack # movl ebx=int32#4 # movl ebx=%ebx movl 68(%esp),%ebx # esi = esi_stack # movl esi=int32#5 # movl esi=%esi movl 72(%esp),%esi # edi = edi_stack # movl edi=int32#6 # movl edi=%edi movl 76(%esp),%edi # ebp = ebp_stack # movl ebp=int32#7 # movl ebp=%ebp movl 80(%esp),%ebp # leave add %eax,%esp ret # enter ECRYPT_ivsetup .text .p2align 5 .globl _ECRYPT_ivsetup .globl ECRYPT_ivsetup _ECRYPT_ivsetup: ECRYPT_ivsetup: mov %esp,%eax and $31,%eax add $96,%eax sub %eax,%esp # eax_stack = eax # movl eax_stack=stack32#1 # movl eax_stack=64(%esp) movl %eax,64(%esp) # ebx_stack = ebx # movl ebx_stack=stack32#2 # movl ebx_stack=68(%esp) movl %ebx,68(%esp) # esi_stack = esi # movl esi_stack=stack32#3 # movl esi_stack=72(%esp) movl %esi,72(%esp) # edi_stack = edi # movl edi_stack=stack32#4 # movl edi_stack=76(%esp) movl %edi,76(%esp) # ebp_stack = ebp # movl ebp_stack=stack32#5 # movl ebp_stack=80(%esp) movl %ebp,80(%esp) # iv = arg2 # movl iv=int32#2 # movl iv=%ecx movl 8(%esp,%eax),%ecx # x = arg1 # movl x=int32#1 # movl x=%eax movl 4(%esp,%eax),%eax # in6 = *(uint32 *) (iv + 0) # movl 0(in6=int32#3 # movl 0(in6=%edx movl 0(%ecx),%edx # in7 = *(uint32 *) (iv + 4) # movl 4(in7=int32#2 # movl 4(in7=%ecx movl 4(%ecx),%ecx # in8 = 0 # mov $0,>in8=int32#4 # mov $0,>in8=%ebx mov $0,%ebx # in9 = 0 # mov $0,>in9=int32#5 # mov $0,>in9=%esi mov $0,%esi # *(uint32 *) (x + 24) = in6 # movl eax=int32#1 # movl eax=%eax movl 64(%esp),%eax # ebx = ebx_stack # movl ebx=int32#4 # movl ebx=%ebx movl 68(%esp),%ebx # esi = esi_stack # movl esi=int32#5 # movl esi=%esi movl 72(%esp),%esi # edi = edi_stack # movl edi=int32#6 # movl edi=%edi movl 76(%esp),%edi # ebp = ebp_stack # movl ebp=int32#7 # movl ebp=%ebp movl 80(%esp),%ebp # leave add %eax,%esp ret