| # salsa20_pm.s version 20051229 | |
| # D. J. Bernstein | |
| # Public domain. | |
| #include <linux/linkage.h> | |
| .text | |
| # enter salsa20_encrypt_bytes | |
| ENTRY(salsa20_encrypt_bytes) | |
| mov %esp,%eax | |
| and $31,%eax | |
| add $256,%eax | |
| sub %eax,%esp | |
| # eax_stack = eax | |
| movl %eax,80(%esp) | |
| # ebx_stack = ebx | |
| movl %ebx,84(%esp) | |
| # esi_stack = esi | |
| movl %esi,88(%esp) | |
| # edi_stack = edi | |
| movl %edi,92(%esp) | |
| # ebp_stack = ebp | |
| movl %ebp,96(%esp) | |
| # x = arg1 | |
| movl 4(%esp,%eax),%edx | |
| # m = arg2 | |
| movl 8(%esp,%eax),%esi | |
| # out = arg3 | |
| movl 12(%esp,%eax),%edi | |
| # bytes = arg4 | |
| movl 16(%esp,%eax),%ebx | |
| # bytes -= 0 | |
| sub $0,%ebx | |
| # goto done if unsigned<= | |
| jbe ._done | |
| ._start: | |
| # in0 = *(uint32 *) (x + 0) | |
| movl 0(%edx),%eax | |
| # in1 = *(uint32 *) (x + 4) | |
| movl 4(%edx),%ecx | |
| # in2 = *(uint32 *) (x + 8) | |
| movl 8(%edx),%ebp | |
| # j0 = in0 | |
| movl %eax,164(%esp) | |
| # in3 = *(uint32 *) (x + 12) | |
| movl 12(%edx),%eax | |
| # j1 = in1 | |
| movl %ecx,168(%esp) | |
| # in4 = *(uint32 *) (x + 16) | |
| movl 16(%edx),%ecx | |
| # j2 = in2 | |
| movl %ebp,172(%esp) | |
| # in5 = *(uint32 *) (x + 20) | |
| movl 20(%edx),%ebp | |
| # j3 = in3 | |
| movl %eax,176(%esp) | |
| # in6 = *(uint32 *) (x + 24) | |
| movl 24(%edx),%eax | |
| # j4 = in4 | |
| movl %ecx,180(%esp) | |
| # in7 = *(uint32 *) (x + 28) | |
| movl 28(%edx),%ecx | |
| # j5 = in5 | |
| movl %ebp,184(%esp) | |
| # in8 = *(uint32 *) (x + 32) | |
| movl 32(%edx),%ebp | |
| # j6 = in6 | |
| movl %eax,188(%esp) | |
| # in9 = *(uint32 *) (x + 36) | |
| movl 36(%edx),%eax | |
| # j7 = in7 | |
| movl %ecx,192(%esp) | |
| # in10 = *(uint32 *) (x + 40) | |
| movl 40(%edx),%ecx | |
| # j8 = in8 | |
| movl %ebp,196(%esp) | |
| # in11 = *(uint32 *) (x + 44) | |
| movl 44(%edx),%ebp | |
| # j9 = in9 | |
| movl %eax,200(%esp) | |
| # in12 = *(uint32 *) (x + 48) | |
| movl 48(%edx),%eax | |
| # j10 = in10 | |
| movl %ecx,204(%esp) | |
| # in13 = *(uint32 *) (x + 52) | |
| movl 52(%edx),%ecx | |
| # j11 = in11 | |
| movl %ebp,208(%esp) | |
| # in14 = *(uint32 *) (x + 56) | |
| movl 56(%edx),%ebp | |
| # j12 = in12 | |
| movl %eax,212(%esp) | |
| # in15 = *(uint32 *) (x + 60) | |
| movl 60(%edx),%eax | |
| # j13 = in13 | |
| movl %ecx,216(%esp) | |
| # j14 = in14 | |
| movl %ebp,220(%esp) | |
| # j15 = in15 | |
| movl %eax,224(%esp) | |
| # x_backup = x | |
| movl %edx,64(%esp) | |
| ._bytesatleast1: | |
| # bytes - 64 | |
| cmp $64,%ebx | |
| # goto nocopy if unsigned>= | |
| jae ._nocopy | |
| # ctarget = out | |
| movl %edi,228(%esp) | |
| # out = &tmp | |
| leal 0(%esp),%edi | |
| # i = bytes | |
| mov %ebx,%ecx | |
| # while (i) { *out++ = *m++; --i } | |
| rep movsb | |
| # out = &tmp | |
| leal 0(%esp),%edi | |
| # m = &tmp | |
| leal 0(%esp),%esi | |
| ._nocopy: | |
| # out_backup = out | |
| movl %edi,72(%esp) | |
| # m_backup = m | |
| movl %esi,68(%esp) | |
| # bytes_backup = bytes | |
| movl %ebx,76(%esp) | |
| # in0 = j0 | |
| movl 164(%esp),%eax | |
| # in1 = j1 | |
| movl 168(%esp),%ecx | |
| # in2 = j2 | |
| movl 172(%esp),%edx | |
| # in3 = j3 | |
| movl 176(%esp),%ebx | |
| # x0 = in0 | |
| movl %eax,100(%esp) | |
| # x1 = in1 | |
| movl %ecx,104(%esp) | |
| # x2 = in2 | |
| movl %edx,108(%esp) | |
| # x3 = in3 | |
| movl %ebx,112(%esp) | |
| # in4 = j4 | |
| movl 180(%esp),%eax | |
| # in5 = j5 | |
| movl 184(%esp),%ecx | |
| # in6 = j6 | |
| movl 188(%esp),%edx | |
| # in7 = j7 | |
| movl 192(%esp),%ebx | |
| # x4 = in4 | |
| movl %eax,116(%esp) | |
| # x5 = in5 | |
| movl %ecx,120(%esp) | |
| # x6 = in6 | |
| movl %edx,124(%esp) | |
| # x7 = in7 | |
| movl %ebx,128(%esp) | |
| # in8 = j8 | |
| movl 196(%esp),%eax | |
| # in9 = j9 | |
| movl 200(%esp),%ecx | |
| # in10 = j10 | |
| movl 204(%esp),%edx | |
| # in11 = j11 | |
| movl 208(%esp),%ebx | |
| # x8 = in8 | |
| movl %eax,132(%esp) | |
| # x9 = in9 | |
| movl %ecx,136(%esp) | |
| # x10 = in10 | |
| movl %edx,140(%esp) | |
| # x11 = in11 | |
| movl %ebx,144(%esp) | |
| # in12 = j12 | |
| movl 212(%esp),%eax | |
| # in13 = j13 | |
| movl 216(%esp),%ecx | |
| # in14 = j14 | |
| movl 220(%esp),%edx | |
| # in15 = j15 | |
| movl 224(%esp),%ebx | |
| # x12 = in12 | |
| movl %eax,148(%esp) | |
| # x13 = in13 | |
| movl %ecx,152(%esp) | |
| # x14 = in14 | |
| movl %edx,156(%esp) | |
| # x15 = in15 | |
| movl %ebx,160(%esp) | |
| # i = 20 | |
| mov $20,%ebp | |
| # p = x0 | |
| movl 100(%esp),%eax | |
| # s = x5 | |
| movl 120(%esp),%ecx | |
| # t = x10 | |
| movl 140(%esp),%edx | |
| # w = x15 | |
| movl 160(%esp),%ebx | |
| ._mainloop: | |
| # x0 = p | |
| movl %eax,100(%esp) | |
| # x10 = t | |
| movl %edx,140(%esp) | |
| # p += x12 | |
| addl 148(%esp),%eax | |
| # x5 = s | |
| movl %ecx,120(%esp) | |
| # t += x6 | |
| addl 124(%esp),%edx | |
| # x15 = w | |
| movl %ebx,160(%esp) | |
| # r = x1 | |
| movl 104(%esp),%esi | |
| # r += s | |
| add %ecx,%esi | |
| # v = x11 | |
| movl 144(%esp),%edi | |
| # v += w | |
| add %ebx,%edi | |
| # p <<<= 7 | |
| rol $7,%eax | |
| # p ^= x4 | |
| xorl 116(%esp),%eax | |
| # t <<<= 7 | |
| rol $7,%edx | |
| # t ^= x14 | |
| xorl 156(%esp),%edx | |
| # r <<<= 7 | |
| rol $7,%esi | |
| # r ^= x9 | |
| xorl 136(%esp),%esi | |
| # v <<<= 7 | |
| rol $7,%edi | |
| # v ^= x3 | |
| xorl 112(%esp),%edi | |
| # x4 = p | |
| movl %eax,116(%esp) | |
| # x14 = t | |
| movl %edx,156(%esp) | |
| # p += x0 | |
| addl 100(%esp),%eax | |
| # x9 = r | |
| movl %esi,136(%esp) | |
| # t += x10 | |
| addl 140(%esp),%edx | |
| # x3 = v | |
| movl %edi,112(%esp) | |
| # p <<<= 9 | |
| rol $9,%eax | |
| # p ^= x8 | |
| xorl 132(%esp),%eax | |
| # t <<<= 9 | |
| rol $9,%edx | |
| # t ^= x2 | |
| xorl 108(%esp),%edx | |
| # s += r | |
| add %esi,%ecx | |
| # s <<<= 9 | |
| rol $9,%ecx | |
| # s ^= x13 | |
| xorl 152(%esp),%ecx | |
| # w += v | |
| add %edi,%ebx | |
| # w <<<= 9 | |
| rol $9,%ebx | |
| # w ^= x7 | |
| xorl 128(%esp),%ebx | |
| # x8 = p | |
| movl %eax,132(%esp) | |
| # x2 = t | |
| movl %edx,108(%esp) | |
| # p += x4 | |
| addl 116(%esp),%eax | |
| # x13 = s | |
| movl %ecx,152(%esp) | |
| # t += x14 | |
| addl 156(%esp),%edx | |
| # x7 = w | |
| movl %ebx,128(%esp) | |
| # p <<<= 13 | |
| rol $13,%eax | |
| # p ^= x12 | |
| xorl 148(%esp),%eax | |
| # t <<<= 13 | |
| rol $13,%edx | |
| # t ^= x6 | |
| xorl 124(%esp),%edx | |
| # r += s | |
| add %ecx,%esi | |
| # r <<<= 13 | |
| rol $13,%esi | |
| # r ^= x1 | |
| xorl 104(%esp),%esi | |
| # v += w | |
| add %ebx,%edi | |
| # v <<<= 13 | |
| rol $13,%edi | |
| # v ^= x11 | |
| xorl 144(%esp),%edi | |
| # x12 = p | |
| movl %eax,148(%esp) | |
| # x6 = t | |
| movl %edx,124(%esp) | |
| # p += x8 | |
| addl 132(%esp),%eax | |
| # x1 = r | |
| movl %esi,104(%esp) | |
| # t += x2 | |
| addl 108(%esp),%edx | |
| # x11 = v | |
| movl %edi,144(%esp) | |
| # p <<<= 18 | |
| rol $18,%eax | |
| # p ^= x0 | |
| xorl 100(%esp),%eax | |
| # t <<<= 18 | |
| rol $18,%edx | |
| # t ^= x10 | |
| xorl 140(%esp),%edx | |
| # s += r | |
| add %esi,%ecx | |
| # s <<<= 18 | |
| rol $18,%ecx | |
| # s ^= x5 | |
| xorl 120(%esp),%ecx | |
| # w += v | |
| add %edi,%ebx | |
| # w <<<= 18 | |
| rol $18,%ebx | |
| # w ^= x15 | |
| xorl 160(%esp),%ebx | |
| # x0 = p | |
| movl %eax,100(%esp) | |
| # x10 = t | |
| movl %edx,140(%esp) | |
| # p += x3 | |
| addl 112(%esp),%eax | |
| # p <<<= 7 | |
| rol $7,%eax | |
| # x5 = s | |
| movl %ecx,120(%esp) | |
| # t += x9 | |
| addl 136(%esp),%edx | |
| # x15 = w | |
| movl %ebx,160(%esp) | |
| # r = x4 | |
| movl 116(%esp),%esi | |
| # r += s | |
| add %ecx,%esi | |
| # v = x14 | |
| movl 156(%esp),%edi | |
| # v += w | |
| add %ebx,%edi | |
| # p ^= x1 | |
| xorl 104(%esp),%eax | |
| # t <<<= 7 | |
| rol $7,%edx | |
| # t ^= x11 | |
| xorl 144(%esp),%edx | |
| # r <<<= 7 | |
| rol $7,%esi | |
| # r ^= x6 | |
| xorl 124(%esp),%esi | |
| # v <<<= 7 | |
| rol $7,%edi | |
| # v ^= x12 | |
| xorl 148(%esp),%edi | |
| # x1 = p | |
| movl %eax,104(%esp) | |
| # x11 = t | |
| movl %edx,144(%esp) | |
| # p += x0 | |
| addl 100(%esp),%eax | |
| # x6 = r | |
| movl %esi,124(%esp) | |
| # t += x10 | |
| addl 140(%esp),%edx | |
| # x12 = v | |
| movl %edi,148(%esp) | |
| # p <<<= 9 | |
| rol $9,%eax | |
| # p ^= x2 | |
| xorl 108(%esp),%eax | |
| # t <<<= 9 | |
| rol $9,%edx | |
| # t ^= x8 | |
| xorl 132(%esp),%edx | |
| # s += r | |
| add %esi,%ecx | |
| # s <<<= 9 | |
| rol $9,%ecx | |
| # s ^= x7 | |
| xorl 128(%esp),%ecx | |
| # w += v | |
| add %edi,%ebx | |
| # w <<<= 9 | |
| rol $9,%ebx | |
| # w ^= x13 | |
| xorl 152(%esp),%ebx | |
| # x2 = p | |
| movl %eax,108(%esp) | |
| # x8 = t | |
| movl %edx,132(%esp) | |
| # p += x1 | |
| addl 104(%esp),%eax | |
| # x7 = s | |
| movl %ecx,128(%esp) | |
| # t += x11 | |
| addl 144(%esp),%edx | |
| # x13 = w | |
| movl %ebx,152(%esp) | |
| # p <<<= 13 | |
| rol $13,%eax | |
| # p ^= x3 | |
| xorl 112(%esp),%eax | |
| # t <<<= 13 | |
| rol $13,%edx | |
| # t ^= x9 | |
| xorl 136(%esp),%edx | |
| # r += s | |
| add %ecx,%esi | |
| # r <<<= 13 | |
| rol $13,%esi | |
| # r ^= x4 | |
| xorl 116(%esp),%esi | |
| # v += w | |
| add %ebx,%edi | |
| # v <<<= 13 | |
| rol $13,%edi | |
| # v ^= x14 | |
| xorl 156(%esp),%edi | |
| # x3 = p | |
| movl %eax,112(%esp) | |
| # x9 = t | |
| movl %edx,136(%esp) | |
| # p += x2 | |
| addl 108(%esp),%eax | |
| # x4 = r | |
| movl %esi,116(%esp) | |
| # t += x8 | |
| addl 132(%esp),%edx | |
| # x14 = v | |
| movl %edi,156(%esp) | |
| # p <<<= 18 | |
| rol $18,%eax | |
| # p ^= x0 | |
| xorl 100(%esp),%eax | |
| # t <<<= 18 | |
| rol $18,%edx | |
| # t ^= x10 | |
| xorl 140(%esp),%edx | |
| # s += r | |
| add %esi,%ecx | |
| # s <<<= 18 | |
| rol $18,%ecx | |
| # s ^= x5 | |
| xorl 120(%esp),%ecx | |
| # w += v | |
| add %edi,%ebx | |
| # w <<<= 18 | |
| rol $18,%ebx | |
| # w ^= x15 | |
| xorl 160(%esp),%ebx | |
| # x0 = p | |
| movl %eax,100(%esp) | |
| # x10 = t | |
| movl %edx,140(%esp) | |
| # p += x12 | |
| addl 148(%esp),%eax | |
| # x5 = s | |
| movl %ecx,120(%esp) | |
| # t += x6 | |
| addl 124(%esp),%edx | |
| # x15 = w | |
| movl %ebx,160(%esp) | |
| # r = x1 | |
| movl 104(%esp),%esi | |
| # r += s | |
| add %ecx,%esi | |
| # v = x11 | |
| movl 144(%esp),%edi | |
| # v += w | |
| add %ebx,%edi | |
| # p <<<= 7 | |
| rol $7,%eax | |
| # p ^= x4 | |
| xorl 116(%esp),%eax | |
| # t <<<= 7 | |
| rol $7,%edx | |
| # t ^= x14 | |
| xorl 156(%esp),%edx | |
| # r <<<= 7 | |
| rol $7,%esi | |
| # r ^= x9 | |
| xorl 136(%esp),%esi | |
| # v <<<= 7 | |
| rol $7,%edi | |
| # v ^= x3 | |
| xorl 112(%esp),%edi | |
| # x4 = p | |
| movl %eax,116(%esp) | |
| # x14 = t | |
| movl %edx,156(%esp) | |
| # p += x0 | |
| addl 100(%esp),%eax | |
| # x9 = r | |
| movl %esi,136(%esp) | |
| # t += x10 | |
| addl 140(%esp),%edx | |
| # x3 = v | |
| movl %edi,112(%esp) | |
| # p <<<= 9 | |
| rol $9,%eax | |
| # p ^= x8 | |
| xorl 132(%esp),%eax | |
| # t <<<= 9 | |
| rol $9,%edx | |
| # t ^= x2 | |
| xorl 108(%esp),%edx | |
| # s += r | |
| add %esi,%ecx | |
| # s <<<= 9 | |
| rol $9,%ecx | |
| # s ^= x13 | |
| xorl 152(%esp),%ecx | |
| # w += v | |
| add %edi,%ebx | |
| # w <<<= 9 | |
| rol $9,%ebx | |
| # w ^= x7 | |
| xorl 128(%esp),%ebx | |
| # x8 = p | |
| movl %eax,132(%esp) | |
| # x2 = t | |
| movl %edx,108(%esp) | |
| # p += x4 | |
| addl 116(%esp),%eax | |
| # x13 = s | |
| movl %ecx,152(%esp) | |
| # t += x14 | |
| addl 156(%esp),%edx | |
| # x7 = w | |
| movl %ebx,128(%esp) | |
| # p <<<= 13 | |
| rol $13,%eax | |
| # p ^= x12 | |
| xorl 148(%esp),%eax | |
| # t <<<= 13 | |
| rol $13,%edx | |
| # t ^= x6 | |
| xorl 124(%esp),%edx | |
| # r += s | |
| add %ecx,%esi | |
| # r <<<= 13 | |
| rol $13,%esi | |
| # r ^= x1 | |
| xorl 104(%esp),%esi | |
| # v += w | |
| add %ebx,%edi | |
| # v <<<= 13 | |
| rol $13,%edi | |
| # v ^= x11 | |
| xorl 144(%esp),%edi | |
| # x12 = p | |
| movl %eax,148(%esp) | |
| # x6 = t | |
| movl %edx,124(%esp) | |
| # p += x8 | |
| addl 132(%esp),%eax | |
| # x1 = r | |
| movl %esi,104(%esp) | |
| # t += x2 | |
| addl 108(%esp),%edx | |
| # x11 = v | |
| movl %edi,144(%esp) | |
| # p <<<= 18 | |
| rol $18,%eax | |
| # p ^= x0 | |
| xorl 100(%esp),%eax | |
| # t <<<= 18 | |
| rol $18,%edx | |
| # t ^= x10 | |
| xorl 140(%esp),%edx | |
| # s += r | |
| add %esi,%ecx | |
| # s <<<= 18 | |
| rol $18,%ecx | |
| # s ^= x5 | |
| xorl 120(%esp),%ecx | |
| # w += v | |
| add %edi,%ebx | |
| # w <<<= 18 | |
| rol $18,%ebx | |
| # w ^= x15 | |
| xorl 160(%esp),%ebx | |
| # x0 = p | |
| movl %eax,100(%esp) | |
| # x10 = t | |
| movl %edx,140(%esp) | |
| # p += x3 | |
| addl 112(%esp),%eax | |
| # p <<<= 7 | |
| rol $7,%eax | |
| # x5 = s | |
| movl %ecx,120(%esp) | |
| # t += x9 | |
| addl 136(%esp),%edx | |
| # x15 = w | |
| movl %ebx,160(%esp) | |
| # r = x4 | |
| movl 116(%esp),%esi | |
| # r += s | |
| add %ecx,%esi | |
| # v = x14 | |
| movl 156(%esp),%edi | |
| # v += w | |
| add %ebx,%edi | |
| # p ^= x1 | |
| xorl 104(%esp),%eax | |
| # t <<<= 7 | |
| rol $7,%edx | |
| # t ^= x11 | |
| xorl 144(%esp),%edx | |
| # r <<<= 7 | |
| rol $7,%esi | |
| # r ^= x6 | |
| xorl 124(%esp),%esi | |
| # v <<<= 7 | |
| rol $7,%edi | |
| # v ^= x12 | |
| xorl 148(%esp),%edi | |
| # x1 = p | |
| movl %eax,104(%esp) | |
| # x11 = t | |
| movl %edx,144(%esp) | |
| # p += x0 | |
| addl 100(%esp),%eax | |
| # x6 = r | |
| movl %esi,124(%esp) | |
| # t += x10 | |
| addl 140(%esp),%edx | |
| # x12 = v | |
| movl %edi,148(%esp) | |
| # p <<<= 9 | |
| rol $9,%eax | |
| # p ^= x2 | |
| xorl 108(%esp),%eax | |
| # t <<<= 9 | |
| rol $9,%edx | |
| # t ^= x8 | |
| xorl 132(%esp),%edx | |
| # s += r | |
| add %esi,%ecx | |
| # s <<<= 9 | |
| rol $9,%ecx | |
| # s ^= x7 | |
| xorl 128(%esp),%ecx | |
| # w += v | |
| add %edi,%ebx | |
| # w <<<= 9 | |
| rol $9,%ebx | |
| # w ^= x13 | |
| xorl 152(%esp),%ebx | |
| # x2 = p | |
| movl %eax,108(%esp) | |
| # x8 = t | |
| movl %edx,132(%esp) | |
| # p += x1 | |
| addl 104(%esp),%eax | |
| # x7 = s | |
| movl %ecx,128(%esp) | |
| # t += x11 | |
| addl 144(%esp),%edx | |
| # x13 = w | |
| movl %ebx,152(%esp) | |
| # p <<<= 13 | |
| rol $13,%eax | |
| # p ^= x3 | |
| xorl 112(%esp),%eax | |
| # t <<<= 13 | |
| rol $13,%edx | |
| # t ^= x9 | |
| xorl 136(%esp),%edx | |
| # r += s | |
| add %ecx,%esi | |
| # r <<<= 13 | |
| rol $13,%esi | |
| # r ^= x4 | |
| xorl 116(%esp),%esi | |
| # v += w | |
| add %ebx,%edi | |
| # v <<<= 13 | |
| rol $13,%edi | |
| # v ^= x14 | |
| xorl 156(%esp),%edi | |
| # x3 = p | |
| movl %eax,112(%esp) | |
| # x9 = t | |
| movl %edx,136(%esp) | |
| # p += x2 | |
| addl 108(%esp),%eax | |
| # x4 = r | |
| movl %esi,116(%esp) | |
| # t += x8 | |
| addl 132(%esp),%edx | |
| # x14 = v | |
| movl %edi,156(%esp) | |
| # p <<<= 18 | |
| rol $18,%eax | |
| # p ^= x0 | |
| xorl 100(%esp),%eax | |
| # t <<<= 18 | |
| rol $18,%edx | |
| # t ^= x10 | |
| xorl 140(%esp),%edx | |
| # s += r | |
| add %esi,%ecx | |
| # s <<<= 18 | |
| rol $18,%ecx | |
| # s ^= x5 | |
| xorl 120(%esp),%ecx | |
| # w += v | |
| add %edi,%ebx | |
| # w <<<= 18 | |
| rol $18,%ebx | |
| # w ^= x15 | |
| xorl 160(%esp),%ebx | |
| # i -= 4 | |
| sub $4,%ebp | |
| # goto mainloop if unsigned > | |
| ja ._mainloop | |
| # x0 = p | |
| movl %eax,100(%esp) | |
| # x5 = s | |
| movl %ecx,120(%esp) | |
| # x10 = t | |
| movl %edx,140(%esp) | |
| # x15 = w | |
| movl %ebx,160(%esp) | |
| # out = out_backup | |
| movl 72(%esp),%edi | |
| # m = m_backup | |
| movl 68(%esp),%esi | |
| # in0 = x0 | |
| movl 100(%esp),%eax | |
| # in1 = x1 | |
| movl 104(%esp),%ecx | |
| # in0 += j0 | |
| addl 164(%esp),%eax | |
| # in1 += j1 | |
| addl 168(%esp),%ecx | |
| # in0 ^= *(uint32 *) (m + 0) | |
| xorl 0(%esi),%eax | |
| # in1 ^= *(uint32 *) (m + 4) | |
| xorl 4(%esi),%ecx | |
| # *(uint32 *) (out + 0) = in0 | |
| movl %eax,0(%edi) | |
| # *(uint32 *) (out + 4) = in1 | |
| movl %ecx,4(%edi) | |
| # in2 = x2 | |
| movl 108(%esp),%eax | |
| # in3 = x3 | |
| movl 112(%esp),%ecx | |
| # in2 += j2 | |
| addl 172(%esp),%eax | |
| # in3 += j3 | |
| addl 176(%esp),%ecx | |
| # in2 ^= *(uint32 *) (m + 8) | |
| xorl 8(%esi),%eax | |
| # in3 ^= *(uint32 *) (m + 12) | |
| xorl 12(%esi),%ecx | |
| # *(uint32 *) (out + 8) = in2 | |
| movl %eax,8(%edi) | |
| # *(uint32 *) (out + 12) = in3 | |
| movl %ecx,12(%edi) | |
| # in4 = x4 | |
| movl 116(%esp),%eax | |
| # in5 = x5 | |
| movl 120(%esp),%ecx | |
| # in4 += j4 | |
| addl 180(%esp),%eax | |
| # in5 += j5 | |
| addl 184(%esp),%ecx | |
| # in4 ^= *(uint32 *) (m + 16) | |
| xorl 16(%esi),%eax | |
| # in5 ^= *(uint32 *) (m + 20) | |
| xorl 20(%esi),%ecx | |
| # *(uint32 *) (out + 16) = in4 | |
| movl %eax,16(%edi) | |
| # *(uint32 *) (out + 20) = in5 | |
| movl %ecx,20(%edi) | |
| # in6 = x6 | |
| movl 124(%esp),%eax | |
| # in7 = x7 | |
| movl 128(%esp),%ecx | |
| # in6 += j6 | |
| addl 188(%esp),%eax | |
| # in7 += j7 | |
| addl 192(%esp),%ecx | |
| # in6 ^= *(uint32 *) (m + 24) | |
| xorl 24(%esi),%eax | |
| # in7 ^= *(uint32 *) (m + 28) | |
| xorl 28(%esi),%ecx | |
| # *(uint32 *) (out + 24) = in6 | |
| movl %eax,24(%edi) | |
| # *(uint32 *) (out + 28) = in7 | |
| movl %ecx,28(%edi) | |
| # in8 = x8 | |
| movl 132(%esp),%eax | |
| # in9 = x9 | |
| movl 136(%esp),%ecx | |
| # in8 += j8 | |
| addl 196(%esp),%eax | |
| # in9 += j9 | |
| addl 200(%esp),%ecx | |
| # in8 ^= *(uint32 *) (m + 32) | |
| xorl 32(%esi),%eax | |
| # in9 ^= *(uint32 *) (m + 36) | |
| xorl 36(%esi),%ecx | |
| # *(uint32 *) (out + 32) = in8 | |
| movl %eax,32(%edi) | |
| # *(uint32 *) (out + 36) = in9 | |
| movl %ecx,36(%edi) | |
| # in10 = x10 | |
| movl 140(%esp),%eax | |
| # in11 = x11 | |
| movl 144(%esp),%ecx | |
| # in10 += j10 | |
| addl 204(%esp),%eax | |
| # in11 += j11 | |
| addl 208(%esp),%ecx | |
| # in10 ^= *(uint32 *) (m + 40) | |
| xorl 40(%esi),%eax | |
| # in11 ^= *(uint32 *) (m + 44) | |
| xorl 44(%esi),%ecx | |
| # *(uint32 *) (out + 40) = in10 | |
| movl %eax,40(%edi) | |
| # *(uint32 *) (out + 44) = in11 | |
| movl %ecx,44(%edi) | |
| # in12 = x12 | |
| movl 148(%esp),%eax | |
| # in13 = x13 | |
| movl 152(%esp),%ecx | |
| # in12 += j12 | |
| addl 212(%esp),%eax | |
| # in13 += j13 | |
| addl 216(%esp),%ecx | |
| # in12 ^= *(uint32 *) (m + 48) | |
| xorl 48(%esi),%eax | |
| # in13 ^= *(uint32 *) (m + 52) | |
| xorl 52(%esi),%ecx | |
| # *(uint32 *) (out + 48) = in12 | |
| movl %eax,48(%edi) | |
| # *(uint32 *) (out + 52) = in13 | |
| movl %ecx,52(%edi) | |
| # in14 = x14 | |
| movl 156(%esp),%eax | |
| # in15 = x15 | |
| movl 160(%esp),%ecx | |
| # in14 += j14 | |
| addl 220(%esp),%eax | |
| # in15 += j15 | |
| addl 224(%esp),%ecx | |
| # in14 ^= *(uint32 *) (m + 56) | |
| xorl 56(%esi),%eax | |
| # in15 ^= *(uint32 *) (m + 60) | |
| xorl 60(%esi),%ecx | |
| # *(uint32 *) (out + 56) = in14 | |
| movl %eax,56(%edi) | |
| # *(uint32 *) (out + 60) = in15 | |
| movl %ecx,60(%edi) | |
| # bytes = bytes_backup | |
| movl 76(%esp),%ebx | |
| # in8 = j8 | |
| movl 196(%esp),%eax | |
| # in9 = j9 | |
| movl 200(%esp),%ecx | |
| # in8 += 1 | |
| add $1,%eax | |
| # in9 += 0 + carry | |
| adc $0,%ecx | |
| # j8 = in8 | |
| movl %eax,196(%esp) | |
| # j9 = in9 | |
| movl %ecx,200(%esp) | |
| # bytes - 64 | |
| cmp $64,%ebx | |
| # goto bytesatleast65 if unsigned> | |
| ja ._bytesatleast65 | |
| # goto bytesatleast64 if unsigned>= | |
| jae ._bytesatleast64 | |
| # m = out | |
| mov %edi,%esi | |
| # out = ctarget | |
| movl 228(%esp),%edi | |
| # i = bytes | |
| mov %ebx,%ecx | |
| # while (i) { *out++ = *m++; --i } | |
| rep movsb | |
| ._bytesatleast64: | |
| # x = x_backup | |
| movl 64(%esp),%eax | |
| # in8 = j8 | |
| movl 196(%esp),%ecx | |
| # in9 = j9 | |
| movl 200(%esp),%edx | |
| # *(uint32 *) (x + 32) = in8 | |
| movl %ecx,32(%eax) | |
| # *(uint32 *) (x + 36) = in9 | |
| movl %edx,36(%eax) | |
| ._done: | |
| # eax = eax_stack | |
| movl 80(%esp),%eax | |
| # ebx = ebx_stack | |
| movl 84(%esp),%ebx | |
| # esi = esi_stack | |
| movl 88(%esp),%esi | |
| # edi = edi_stack | |
| movl 92(%esp),%edi | |
| # ebp = ebp_stack | |
| movl 96(%esp),%ebp | |
| # leave | |
| add %eax,%esp | |
| ret | |
| ._bytesatleast65: | |
| # bytes -= 64 | |
| sub $64,%ebx | |
| # out += 64 | |
| add $64,%edi | |
| # m += 64 | |
| add $64,%esi | |
| # goto bytesatleast1 | |
| jmp ._bytesatleast1 | |
| ENDPROC(salsa20_encrypt_bytes) | |
| # enter salsa20_keysetup | |
| ENTRY(salsa20_keysetup) | |
| mov %esp,%eax | |
| and $31,%eax | |
| add $256,%eax | |
| sub %eax,%esp | |
| # eax_stack = eax | |
| movl %eax,64(%esp) | |
| # ebx_stack = ebx | |
| movl %ebx,68(%esp) | |
| # esi_stack = esi | |
| movl %esi,72(%esp) | |
| # edi_stack = edi | |
| movl %edi,76(%esp) | |
| # ebp_stack = ebp | |
| movl %ebp,80(%esp) | |
| # k = arg2 | |
| movl 8(%esp,%eax),%ecx | |
| # kbits = arg3 | |
| movl 12(%esp,%eax),%edx | |
| # x = arg1 | |
| movl 4(%esp,%eax),%eax | |
| # in1 = *(uint32 *) (k + 0) | |
| movl 0(%ecx),%ebx | |
| # in2 = *(uint32 *) (k + 4) | |
| movl 4(%ecx),%esi | |
| # in3 = *(uint32 *) (k + 8) | |
| movl 8(%ecx),%edi | |
| # in4 = *(uint32 *) (k + 12) | |
| movl 12(%ecx),%ebp | |
| # *(uint32 *) (x + 4) = in1 | |
| movl %ebx,4(%eax) | |
| # *(uint32 *) (x + 8) = in2 | |
| movl %esi,8(%eax) | |
| # *(uint32 *) (x + 12) = in3 | |
| movl %edi,12(%eax) | |
| # *(uint32 *) (x + 16) = in4 | |
| movl %ebp,16(%eax) | |
| # kbits - 256 | |
| cmp $256,%edx | |
| # goto kbits128 if unsigned< | |
| jb ._kbits128 | |
| ._kbits256: | |
| # in11 = *(uint32 *) (k + 16) | |
| movl 16(%ecx),%edx | |
| # in12 = *(uint32 *) (k + 20) | |
| movl 20(%ecx),%ebx | |
| # in13 = *(uint32 *) (k + 24) | |
| movl 24(%ecx),%esi | |
| # in14 = *(uint32 *) (k + 28) | |
| movl 28(%ecx),%ecx | |
| # *(uint32 *) (x + 44) = in11 | |
| movl %edx,44(%eax) | |
| # *(uint32 *) (x + 48) = in12 | |
| movl %ebx,48(%eax) | |
| # *(uint32 *) (x + 52) = in13 | |
| movl %esi,52(%eax) | |
| # *(uint32 *) (x + 56) = in14 | |
| movl %ecx,56(%eax) | |
| # in0 = 1634760805 | |
| mov $1634760805,%ecx | |
| # in5 = 857760878 | |
| mov $857760878,%edx | |
| # in10 = 2036477234 | |
| mov $2036477234,%ebx | |
| # in15 = 1797285236 | |
| mov $1797285236,%esi | |
| # *(uint32 *) (x + 0) = in0 | |
| movl %ecx,0(%eax) | |
| # *(uint32 *) (x + 20) = in5 | |
| movl %edx,20(%eax) | |
| # *(uint32 *) (x + 40) = in10 | |
| movl %ebx,40(%eax) | |
| # *(uint32 *) (x + 60) = in15 | |
| movl %esi,60(%eax) | |
| # goto keysetupdone | |
| jmp ._keysetupdone | |
| ._kbits128: | |
| # in11 = *(uint32 *) (k + 0) | |
| movl 0(%ecx),%edx | |
| # in12 = *(uint32 *) (k + 4) | |
| movl 4(%ecx),%ebx | |
| # in13 = *(uint32 *) (k + 8) | |
| movl 8(%ecx),%esi | |
| # in14 = *(uint32 *) (k + 12) | |
| movl 12(%ecx),%ecx | |
| # *(uint32 *) (x + 44) = in11 | |
| movl %edx,44(%eax) | |
| # *(uint32 *) (x + 48) = in12 | |
| movl %ebx,48(%eax) | |
| # *(uint32 *) (x + 52) = in13 | |
| movl %esi,52(%eax) | |
| # *(uint32 *) (x + 56) = in14 | |
| movl %ecx,56(%eax) | |
| # in0 = 1634760805 | |
| mov $1634760805,%ecx | |
| # in5 = 824206446 | |
| mov $824206446,%edx | |
| # in10 = 2036477238 | |
| mov $2036477238,%ebx | |
| # in15 = 1797285236 | |
| mov $1797285236,%esi | |
| # *(uint32 *) (x + 0) = in0 | |
| movl %ecx,0(%eax) | |
| # *(uint32 *) (x + 20) = in5 | |
| movl %edx,20(%eax) | |
| # *(uint32 *) (x + 40) = in10 | |
| movl %ebx,40(%eax) | |
| # *(uint32 *) (x + 60) = in15 | |
| movl %esi,60(%eax) | |
| ._keysetupdone: | |
| # eax = eax_stack | |
| movl 64(%esp),%eax | |
| # ebx = ebx_stack | |
| movl 68(%esp),%ebx | |
| # esi = esi_stack | |
| movl 72(%esp),%esi | |
| # edi = edi_stack | |
| movl 76(%esp),%edi | |
| # ebp = ebp_stack | |
| movl 80(%esp),%ebp | |
| # leave | |
| add %eax,%esp | |
| ret | |
| ENDPROC(salsa20_keysetup) | |
| # enter salsa20_ivsetup | |
| ENTRY(salsa20_ivsetup) | |
| mov %esp,%eax | |
| and $31,%eax | |
| add $256,%eax | |
| sub %eax,%esp | |
| # eax_stack = eax | |
| movl %eax,64(%esp) | |
| # ebx_stack = ebx | |
| movl %ebx,68(%esp) | |
| # esi_stack = esi | |
| movl %esi,72(%esp) | |
| # edi_stack = edi | |
| movl %edi,76(%esp) | |
| # ebp_stack = ebp | |
| movl %ebp,80(%esp) | |
| # iv = arg2 | |
| movl 8(%esp,%eax),%ecx | |
| # x = arg1 | |
| movl 4(%esp,%eax),%eax | |
| # in6 = *(uint32 *) (iv + 0) | |
| movl 0(%ecx),%edx | |
| # in7 = *(uint32 *) (iv + 4) | |
| movl 4(%ecx),%ecx | |
| # in8 = 0 | |
| mov $0,%ebx | |
| # in9 = 0 | |
| mov $0,%esi | |
| # *(uint32 *) (x + 24) = in6 | |
| movl %edx,24(%eax) | |
| # *(uint32 *) (x + 28) = in7 | |
| movl %ecx,28(%eax) | |
| # *(uint32 *) (x + 32) = in8 | |
| movl %ebx,32(%eax) | |
| # *(uint32 *) (x + 36) = in9 | |
| movl %esi,36(%eax) | |
| # eax = eax_stack | |
| movl 64(%esp),%eax | |
| # ebx = ebx_stack | |
| movl 68(%esp),%ebx | |
| # esi = esi_stack | |
| movl 72(%esp),%esi | |
| # edi = edi_stack | |
| movl 76(%esp),%edi | |
| # ebp = ebp_stack | |
| movl 80(%esp),%ebp | |
| # leave | |
| add %eax,%esp | |
| ret | |
| ENDPROC(salsa20_ivsetup) |