// File: /workspace/github_c_makefile_star2_O0/agl[P]obstcp/salsa208.c
// Function: salsa208
void salsa208(
        unsigned char *out,
  const unsigned char *in,
  const unsigned char *k,
  const unsigned char *c
)
{
  uint32 x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15;
  uint32 j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15;
  int i;

  j0 = x0 = load_littleendian(c + 0);
  j1 = x1 = load_littleendian(k + 0);
  j2 = x2 = load_littleendian(k + 4);
  j3 = x3 = load_littleendian(k + 8);
  j4 = x4 = load_littleendian(k + 12);
  j5 = x5 = load_littleendian(c + 4);
  j6 = x6 = load_littleendian(in + 0);
  j7 = x7 = load_littleendian(in + 4);
  j8 = x8 = load_littleendian(in + 8);
  j9 = x9 = load_littleendian(in + 12);
  j10 = x10 = load_littleendian(c + 8);
  j11 = x11 = load_littleendian(k + 16);
  j12 = x12 = load_littleendian(k + 20);
  j13 = x13 = load_littleendian(k + 24);
  j14 = x14 = load_littleendian(k + 28);
  j15 = x15 = load_littleendian(c + 12);

  for (i = ROUNDS;i > 0;i -= 2) {
     x4 ^= rotate( x0+x12, 7);
     x8 ^= rotate( x4+ x0, 9);
    x12 ^= rotate( x8+ x4,13);
     x0 ^= rotate(x12+ x8,18);
     x9 ^= rotate( x5+ x1, 7);
    x13 ^= rotate( x9+ x5, 9);
     x1 ^= rotate(x13+ x9,13);
     x5 ^= rotate( x1+x13,18);
    x14 ^= rotate(x10+ x6, 7);
     x2 ^= rotate(x14+x10, 9);
     x6 ^= rotate( x2+x14,13);
    x10 ^= rotate( x6+ x2,18);
     x3 ^= rotate(x15+x11, 7);
     x7 ^= rotate( x3+x15, 9);
    x11 ^= rotate( x7+ x3,13);
    x15 ^= rotate(x11+ x7,18);
     x1 ^= rotate( x0+ x3, 7);
     x2 ^= rotate( x1+ x0, 9);
     x3 ^= rotate( x2+ x1,13);
     x0 ^= rotate( x3+ x2,18);
     x6 ^= rotate( x5+ x4, 7);
     x7 ^= rotate( x6+ x5, 9);
     x4 ^= rotate( x7+ x6,13);
     x5 ^= rotate( x4+ x7,18);
    x11 ^= rotate(x10+ x9, 7);
     x8 ^= rotate(x11+x10, 9);
     x9 ^= rotate( x8+x11,13);
    x10 ^= rotate( x9+ x8,18);
    x12 ^= rotate(x15+x14, 7);
    x13 ^= rotate(x12+x15, 9);
    x14 ^= rotate(x13+x12,13);
    x15 ^= rotate(x14+x13,18);
  }

  x0 += j0;
  x1 += j1;
  x2 += j2;
  x3 += j3;
  x4 += j4;
  x5 += j5;
  x6 += j6;
  x7 += j7;
  x8 += j8;
  x9 += j9;
  x10 += j10;
  x11 += j11;
  x12 += j12;
  x13 += j13;
  x14 += j14;
  x15 += j15;

  store_littleendian(out + 0,x0);
  store_littleendian(out + 4,x1);
  store_littleendian(out + 8,x2);
  store_littleendian(out + 12,x3);
  store_littleendian(out + 16,x4);
  store_littleendian(out + 20,x5);
  store_littleendian(out + 24,x6);
  store_littleendian(out + 28,x7);
  store_littleendian(out + 32,x8);
  store_littleendian(out + 36,x9);
  store_littleendian(out + 40,x10);
  store_littleendian(out + 44,x11);
  store_littleendian(out + 48,x12);
  store_littleendian(out + 52,x13);
  store_littleendian(out + 56,x14);
  store_littleendian(out + 60,x15);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x20(%rbp), %rdi
callq 0x5a10
movl %eax, -0x24(%rbp)
movl %eax, -0x64(%rbp)
movq -0x18(%rbp), %rdi
callq 0x5a10
movl %eax, -0x28(%rbp)
movl %eax, -0x68(%rbp)
movq -0x18(%rbp), %rdi
addq $0x4, %rdi
callq 0x5a10
movl %eax, -0x2c(%rbp)
movl %eax, -0x6c(%rbp)
movq -0x18(%rbp), %rdi
addq $0x8, %rdi
callq 0x5a10
movl %eax, -0x30(%rbp)
movl %eax, -0x70(%rbp)
movq -0x18(%rbp), %rdi
addq $0xc, %rdi
callq 0x5a10
movl %eax, -0x34(%rbp)
movl %eax, -0x74(%rbp)
movq -0x20(%rbp), %rdi
addq $0x4, %rdi
callq 0x5a10
movl %eax, -0x38(%rbp)
movl %eax, -0x78(%rbp)
movq -0x10(%rbp), %rdi
callq 0x5a10
movl %eax, -0x3c(%rbp)
movl %eax, -0x7c(%rbp)
movq -0x10(%rbp), %rdi
addq $0x4, %rdi
callq 0x5a10
movl %eax, -0x40(%rbp)
movl %eax, -0x80(%rbp)
movq -0x10(%rbp), %rdi
addq $0x8, %rdi
callq 0x5a10
movl %eax, -0x44(%rbp)
movl %eax, -0x84(%rbp)
movq -0x10(%rbp), %rdi
addq $0xc, %rdi
callq 0x5a10
movl %eax, -0x48(%rbp)
movl %eax, -0x88(%rbp)
movq -0x20(%rbp), %rdi
addq $0x8, %rdi
callq 0x5a10
movl %eax, -0x4c(%rbp)
movl %eax, -0x8c(%rbp)
movq -0x18(%rbp), %rdi
addq $0x10, %rdi
callq 0x5a10
movl %eax, -0x50(%rbp)
movl %eax, -0x90(%rbp)
movq -0x18(%rbp), %rdi
addq $0x14, %rdi
callq 0x5a10
movl %eax, -0x54(%rbp)
movl %eax, -0x94(%rbp)
movq -0x18(%rbp), %rdi
addq $0x18, %rdi
callq 0x5a10
movl %eax, -0x58(%rbp)
movl %eax, -0x98(%rbp)
movq -0x18(%rbp), %rdi
addq $0x1c, %rdi
callq 0x5a10
movl %eax, -0x5c(%rbp)
movl %eax, -0x9c(%rbp)
movq -0x20(%rbp), %rdi
addq $0xc, %rdi
callq 0x5a10
movl %eax, -0x60(%rbp)
movl %eax, -0xa0(%rbp)
movl $0x8, -0xa4(%rbp)
cmpl $0x0, -0xa4(%rbp)
jle 0x5862
movl -0x24(%rbp), %edi
addl -0x54(%rbp), %edi
movl $0x7, %esi
callq 0x5a50
xorl -0x34(%rbp), %eax
movl %eax, -0x34(%rbp)
movl -0x34(%rbp), %edi
addl -0x24(%rbp), %edi
movl $0x9, %esi
callq 0x5a50
xorl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movl -0x44(%rbp), %edi
addl -0x34(%rbp), %edi
movl $0xd, %esi
callq 0x5a50
xorl -0x54(%rbp), %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %edi
addl -0x44(%rbp), %edi
movl $0x12, %esi
callq 0x5a50
xorl -0x24(%rbp), %eax
movl %eax, -0x24(%rbp)
movl -0x38(%rbp), %edi
addl -0x28(%rbp), %edi
movl $0x7, %esi
callq 0x5a50
xorl -0x48(%rbp), %eax
movl %eax, -0x48(%rbp)
movl -0x48(%rbp), %edi
addl -0x38(%rbp), %edi
movl $0x9, %esi
callq 0x5a50
xorl -0x58(%rbp), %eax
movl %eax, -0x58(%rbp)
movl -0x58(%rbp), %edi
addl -0x48(%rbp), %edi
movl $0xd, %esi
callq 0x5a50
xorl -0x28(%rbp), %eax
movl %eax, -0x28(%rbp)
movl -0x28(%rbp), %edi
addl -0x58(%rbp), %edi
movl $0x12, %esi
callq 0x5a50
xorl -0x38(%rbp), %eax
movl %eax, -0x38(%rbp)
movl -0x4c(%rbp), %edi
addl -0x3c(%rbp), %edi
movl $0x7, %esi
callq 0x5a50
xorl -0x5c(%rbp), %eax
movl %eax, -0x5c(%rbp)
movl -0x5c(%rbp), %edi
addl -0x4c(%rbp), %edi
movl $0x9, %esi
callq 0x5a50
xorl -0x2c(%rbp), %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %edi
addl -0x5c(%rbp), %edi
movl $0xd, %esi
callq 0x5a50
xorl -0x3c(%rbp), %eax
movl %eax, -0x3c(%rbp)
movl -0x3c(%rbp), %edi
addl -0x2c(%rbp), %edi
movl $0x12, %esi
callq 0x5a50
xorl -0x4c(%rbp), %eax
movl %eax, -0x4c(%rbp)
movl -0x60(%rbp), %edi
addl -0x50(%rbp), %edi
movl $0x7, %esi
callq 0x5a50
xorl -0x30(%rbp), %eax
movl %eax, -0x30(%rbp)
movl -0x30(%rbp), %edi
addl -0x60(%rbp), %edi
movl $0x9, %esi
callq 0x5a50
xorl -0x40(%rbp), %eax
movl %eax, -0x40(%rbp)
movl -0x40(%rbp), %edi
addl -0x30(%rbp), %edi
movl $0xd, %esi
callq 0x5a50
xorl -0x50(%rbp), %eax
movl %eax, -0x50(%rbp)
movl -0x50(%rbp), %edi
addl -0x40(%rbp), %edi
movl $0x12, %esi
callq 0x5a50
xorl -0x60(%rbp), %eax
movl %eax, -0x60(%rbp)
movl -0x24(%rbp), %edi
addl -0x30(%rbp), %edi
movl $0x7, %esi
callq 0x5a50
xorl -0x28(%rbp), %eax
movl %eax, -0x28(%rbp)
movl -0x28(%rbp), %edi
addl -0x24(%rbp), %edi
movl $0x9, %esi
callq 0x5a50
xorl -0x2c(%rbp), %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %edi
addl -0x28(%rbp), %edi
movl $0xd, %esi
callq 0x5a50
xorl -0x30(%rbp), %eax
movl %eax, -0x30(%rbp)
movl -0x30(%rbp), %edi
addl -0x2c(%rbp), %edi
movl $0x12, %esi
callq 0x5a50
xorl -0x24(%rbp), %eax
movl %eax, -0x24(%rbp)
movl -0x38(%rbp), %edi
addl -0x34(%rbp), %edi
movl $0x7, %esi
callq 0x5a50
xorl -0x3c(%rbp), %eax
movl %eax, -0x3c(%rbp)
movl -0x3c(%rbp), %edi
addl -0x38(%rbp), %edi
movl $0x9, %esi
callq 0x5a50
xorl -0x40(%rbp), %eax
movl %eax, -0x40(%rbp)
movl -0x40(%rbp), %edi
addl -0x3c(%rbp), %edi
movl $0xd, %esi
callq 0x5a50
xorl -0x34(%rbp), %eax
movl %eax, -0x34(%rbp)
movl -0x34(%rbp), %edi
addl -0x40(%rbp), %edi
movl $0x12, %esi
callq 0x5a50
xorl -0x38(%rbp), %eax
movl %eax, -0x38(%rbp)
movl -0x4c(%rbp), %edi
addl -0x48(%rbp), %edi
movl $0x7, %esi
callq 0x5a50
xorl -0x50(%rbp), %eax
movl %eax, -0x50(%rbp)
movl -0x50(%rbp), %edi
addl -0x4c(%rbp), %edi
movl $0x9, %esi
callq 0x5a50
xorl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movl -0x44(%rbp), %edi
addl -0x50(%rbp), %edi
movl $0xd, %esi
callq 0x5a50
xorl -0x48(%rbp), %eax
movl %eax, -0x48(%rbp)
movl -0x48(%rbp), %edi
addl -0x44(%rbp), %edi
movl $0x12, %esi
callq 0x5a50
xorl -0x4c(%rbp), %eax
movl %eax, -0x4c(%rbp)
movl -0x60(%rbp), %edi
addl -0x5c(%rbp), %edi
movl $0x7, %esi
callq 0x5a50
xorl -0x54(%rbp), %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %edi
addl -0x60(%rbp), %edi
movl $0x9, %esi
callq 0x5a50
xorl -0x58(%rbp), %eax
movl %eax, -0x58(%rbp)
movl -0x58(%rbp), %edi
addl -0x54(%rbp), %edi
movl $0xd, %esi
callq 0x5a50
xorl -0x5c(%rbp), %eax
movl %eax, -0x5c(%rbp)
movl -0x5c(%rbp), %edi
addl -0x58(%rbp), %edi
movl $0x12, %esi
callq 0x5a50
xorl -0x60(%rbp), %eax
movl %eax, -0x60(%rbp)
movl -0xa4(%rbp), %eax
subl $0x2, %eax
movl %eax, -0xa4(%rbp)
jmp 0x5581
movl -0x64(%rbp), %eax
addl -0x24(%rbp), %eax
movl %eax, -0x24(%rbp)
movl -0x68(%rbp), %eax
addl -0x28(%rbp), %eax
movl %eax, -0x28(%rbp)
movl -0x6c(%rbp), %eax
addl -0x2c(%rbp), %eax
movl %eax, -0x2c(%rbp)
movl -0x70(%rbp), %eax
addl -0x30(%rbp), %eax
movl %eax, -0x30(%rbp)
movl -0x74(%rbp), %eax
addl -0x34(%rbp), %eax
movl %eax, -0x34(%rbp)
movl -0x78(%rbp), %eax
addl -0x38(%rbp), %eax
movl %eax, -0x38(%rbp)
movl -0x7c(%rbp), %eax
addl -0x3c(%rbp), %eax
movl %eax, -0x3c(%rbp)
movl -0x80(%rbp), %eax
addl -0x40(%rbp), %eax
movl %eax, -0x40(%rbp)
movl -0x84(%rbp), %eax
addl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movl -0x88(%rbp), %eax
addl -0x48(%rbp), %eax
movl %eax, -0x48(%rbp)
movl -0x8c(%rbp), %eax
addl -0x4c(%rbp), %eax
movl %eax, -0x4c(%rbp)
movl -0x90(%rbp), %eax
addl -0x50(%rbp), %eax
movl %eax, -0x50(%rbp)
movl -0x94(%rbp), %eax
addl -0x54(%rbp), %eax
movl %eax, -0x54(%rbp)
movl -0x98(%rbp), %eax
addl -0x58(%rbp), %eax
movl %eax, -0x58(%rbp)
movl -0x9c(%rbp), %eax
addl -0x5c(%rbp), %eax
movl %eax, -0x5c(%rbp)
movl -0xa0(%rbp), %eax
addl -0x60(%rbp), %eax
movl %eax, -0x60(%rbp)
movq -0x8(%rbp), %rdi
movl -0x24(%rbp), %esi
callq 0x5a80
movq -0x8(%rbp), %rdi
addq $0x4, %rdi
movl -0x28(%rbp), %esi
callq 0x5a80
movq -0x8(%rbp), %rdi
addq $0x8, %rdi
movl -0x2c(%rbp), %esi
callq 0x5a80
movq -0x8(%rbp), %rdi
addq $0xc, %rdi
movl -0x30(%rbp), %esi
callq 0x5a80
movq -0x8(%rbp), %rdi
addq $0x10, %rdi
movl -0x34(%rbp), %esi
callq 0x5a80
movq -0x8(%rbp), %rdi
addq $0x14, %rdi
movl -0x38(%rbp), %esi
callq 0x5a80
movq -0x8(%rbp), %rdi
addq $0x18, %rdi
movl -0x3c(%rbp), %esi
callq 0x5a80
movq -0x8(%rbp), %rdi
addq $0x1c, %rdi
movl -0x40(%rbp), %esi
callq 0x5a80
movq -0x8(%rbp), %rdi
addq $0x20, %rdi
movl -0x44(%rbp), %esi
callq 0x5a80
movq -0x8(%rbp), %rdi
addq $0x24, %rdi
movl -0x48(%rbp), %esi
callq 0x5a80
movq -0x8(%rbp), %rdi
addq $0x28, %rdi
movl -0x4c(%rbp), %esi
callq 0x5a80
movq -0x8(%rbp), %rdi
addq $0x2c, %rdi
movl -0x50(%rbp), %esi
callq 0x5a80
movq -0x8(%rbp), %rdi
addq $0x30, %rdi
movl -0x54(%rbp), %esi
callq 0x5a80
movq -0x8(%rbp), %rdi
addq $0x34, %rdi
movl -0x58(%rbp), %esi
callq 0x5a80
movq -0x8(%rbp), %rdi
addq $0x38, %rdi
movl -0x5c(%rbp), %esi
callq 0x5a80
movq -0x8(%rbp), %rdi
addq $0x3c, %rdi
movl -0x60(%rbp), %esi
callq 0x5a80
addq $0xb0, %rsp
popq %rbp
retq
nop