|  | # salsa20_pm.s version 20051229 | 
|  | # D. J. Bernstein | 
|  | # Public domain. | 
|  |  | 
|  | # enter ECRYPT_encrypt_bytes | 
|  | .text | 
|  | .p2align 5 | 
|  | .globl ECRYPT_encrypt_bytes | 
|  | ECRYPT_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 | 
|  | # enter ECRYPT_keysetup | 
|  | .text | 
|  | .p2align 5 | 
|  | .globl ECRYPT_keysetup | 
|  | ECRYPT_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 | 
|  | # enter ECRYPT_ivsetup | 
|  | .text | 
|  | .p2align 5 | 
|  | .globl ECRYPT_ivsetup | 
|  | ECRYPT_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 |