// File: /workspace/github_c_makefile_star2_O0/oreparaz[P]dudect/examples/donna/curve25519-donna.c
// Function: fexpand
static void
fexpand(limb *output, const u8 *input) {
#define F(n,start,shift,mask) \
  output[n] = ((((limb) input[start + 0]) | \
                ((limb) input[start + 1]) << 8 | \
                ((limb) input[start + 2]) << 16 | \
                ((limb) input[start + 3]) << 24) >> shift) & mask;
  F(0, 0, 0, 0x3ffffff);
  F(1, 3, 2, 0x1ffffff);
  F(2, 6, 3, 0x3ffffff);
  F(3, 9, 5, 0x1ffffff);
  F(4, 12, 6, 0x3ffffff);
  F(5, 16, 0, 0x1ffffff);
  F(6, 19, 1, 0x3ffffff);
  F(7, 22, 3, 0x1ffffff);
  F(8, 25, 4, 0x3ffffff);
  F(9, 28, 6, 0x1ffffff);
#undef F
}

// Assembly:
movq %rdi, -0x8(%rsp)
movq %rsi, -0x10(%rsp)
movq -0x10(%rsp), %rax
movzbl (%rax), %eax
movl %eax, %ecx
movq -0x10(%rsp), %rax
movzbl 0x1(%rax), %eax
shlq $0x8, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0x2(%rax), %eax
shlq $0x10, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0x3(%rax), %eax
shlq $0x18, %rax
orq %rax, %rcx
sarq $0x0, %rcx
andq $0x3ffffff, %rcx        # imm = 0x3FFFFFF
movq -0x8(%rsp), %rax
movq %rcx, (%rax)
movq -0x10(%rsp), %rax
movzbl 0x3(%rax), %eax
movl %eax, %ecx
movq -0x10(%rsp), %rax
movzbl 0x4(%rax), %eax
shlq $0x8, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0x5(%rax), %eax
shlq $0x10, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0x6(%rax), %eax
shlq $0x18, %rax
orq %rax, %rcx
sarq $0x2, %rcx
andq $0x1ffffff, %rcx        # imm = 0x1FFFFFF
movq -0x8(%rsp), %rax
movq %rcx, 0x8(%rax)
movq -0x10(%rsp), %rax
movzbl 0x6(%rax), %eax
movl %eax, %ecx
movq -0x10(%rsp), %rax
movzbl 0x7(%rax), %eax
shlq $0x8, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0x8(%rax), %eax
shlq $0x10, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0x9(%rax), %eax
shlq $0x18, %rax
orq %rax, %rcx
sarq $0x3, %rcx
andq $0x3ffffff, %rcx        # imm = 0x3FFFFFF
movq -0x8(%rsp), %rax
movq %rcx, 0x10(%rax)
movq -0x10(%rsp), %rax
movzbl 0x9(%rax), %eax
movl %eax, %ecx
movq -0x10(%rsp), %rax
movzbl 0xa(%rax), %eax
shlq $0x8, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0xb(%rax), %eax
shlq $0x10, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0xc(%rax), %eax
shlq $0x18, %rax
orq %rax, %rcx
sarq $0x5, %rcx
andq $0x1ffffff, %rcx        # imm = 0x1FFFFFF
movq -0x8(%rsp), %rax
movq %rcx, 0x18(%rax)
movq -0x10(%rsp), %rax
movzbl 0xc(%rax), %eax
movl %eax, %ecx
movq -0x10(%rsp), %rax
movzbl 0xd(%rax), %eax
shlq $0x8, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0xe(%rax), %eax
shlq $0x10, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0xf(%rax), %eax
shlq $0x18, %rax
orq %rax, %rcx
sarq $0x6, %rcx
andq $0x3ffffff, %rcx        # imm = 0x3FFFFFF
movq -0x8(%rsp), %rax
movq %rcx, 0x20(%rax)
movq -0x10(%rsp), %rax
movzbl 0x10(%rax), %eax
movl %eax, %ecx
movq -0x10(%rsp), %rax
movzbl 0x11(%rax), %eax
shlq $0x8, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0x12(%rax), %eax
shlq $0x10, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0x13(%rax), %eax
shlq $0x18, %rax
orq %rax, %rcx
sarq $0x0, %rcx
andq $0x1ffffff, %rcx        # imm = 0x1FFFFFF
movq -0x8(%rsp), %rax
movq %rcx, 0x28(%rax)
movq -0x10(%rsp), %rax
movzbl 0x13(%rax), %eax
movl %eax, %ecx
movq -0x10(%rsp), %rax
movzbl 0x14(%rax), %eax
shlq $0x8, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0x15(%rax), %eax
shlq $0x10, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0x16(%rax), %eax
shlq $0x18, %rax
orq %rax, %rcx
sarq %rcx
andq $0x3ffffff, %rcx        # imm = 0x3FFFFFF
movq -0x8(%rsp), %rax
movq %rcx, 0x30(%rax)
movq -0x10(%rsp), %rax
movzbl 0x16(%rax), %eax
movl %eax, %ecx
movq -0x10(%rsp), %rax
movzbl 0x17(%rax), %eax
shlq $0x8, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0x18(%rax), %eax
shlq $0x10, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0x19(%rax), %eax
shlq $0x18, %rax
orq %rax, %rcx
sarq $0x3, %rcx
andq $0x1ffffff, %rcx        # imm = 0x1FFFFFF
movq -0x8(%rsp), %rax
movq %rcx, 0x38(%rax)
movq -0x10(%rsp), %rax
movzbl 0x19(%rax), %eax
movl %eax, %ecx
movq -0x10(%rsp), %rax
movzbl 0x1a(%rax), %eax
shlq $0x8, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0x1b(%rax), %eax
shlq $0x10, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0x1c(%rax), %eax
shlq $0x18, %rax
orq %rax, %rcx
sarq $0x4, %rcx
andq $0x3ffffff, %rcx        # imm = 0x3FFFFFF
movq -0x8(%rsp), %rax
movq %rcx, 0x40(%rax)
movq -0x10(%rsp), %rax
movzbl 0x1c(%rax), %eax
movl %eax, %ecx
movq -0x10(%rsp), %rax
movzbl 0x1d(%rax), %eax
shlq $0x8, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0x1e(%rax), %eax
shlq $0x10, %rax
orq %rax, %rcx
movq -0x10(%rsp), %rax
movzbl 0x1f(%rax), %eax
shlq $0x18, %rax
orq %rax, %rcx
sarq $0x6, %rcx
andq $0x1ffffff, %rcx        # imm = 0x1FFFFFF
movq -0x8(%rsp), %rax
movq %rcx, 0x48(%rax)
retq
nop