// File: /workspace/github_c_makefile_star2_O0/oreparaz[P]dudect/examples/donna/curve25519-donna.c
// Function: freduce_degree
static void freduce_degree(limb *output) {
  /* Each of these shifts and adds ends up multiplying the value by 19.
   *
   * For output[0..8], the absolute entry value is < 14*2^54 and we add, at
   * most, 19*14*2^54 thus, on exit, |output[0..8]| < 280*2^54. */
  output[8] += output[18] << 4;
  output[8] += output[18] << 1;
  output[8] += output[18];
  output[7] += output[17] << 4;
  output[7] += output[17] << 1;
  output[7] += output[17];
  output[6] += output[16] << 4;
  output[6] += output[16] << 1;
  output[6] += output[16];
  output[5] += output[15] << 4;
  output[5] += output[15] << 1;
  output[5] += output[15];
  output[4] += output[14] << 4;
  output[4] += output[14] << 1;
  output[4] += output[14];
  output[3] += output[13] << 4;
  output[3] += output[13] << 1;
  output[3] += output[13];
  output[2] += output[12] << 4;
  output[2] += output[12] << 1;
  output[2] += output[12];
  output[1] += output[11] << 4;
  output[1] += output[11] << 1;
  output[1] += output[11];
  output[0] += output[10] << 4;
  output[0] += output[10] << 1;
  output[0] += output[10];
}

// Assembly:
movq %rdi, -0x8(%rsp)
movq -0x8(%rsp), %rax
movq 0x90(%rax), %rcx
shlq $0x4, %rcx
movq -0x8(%rsp), %rax
addq 0x40(%rax), %rcx
movq %rcx, 0x40(%rax)
movq -0x8(%rsp), %rax
movq 0x90(%rax), %rcx
shlq %rcx
movq -0x8(%rsp), %rax
addq 0x40(%rax), %rcx
movq %rcx, 0x40(%rax)
movq -0x8(%rsp), %rax
movq 0x90(%rax), %rcx
movq -0x8(%rsp), %rax
addq 0x40(%rax), %rcx
movq %rcx, 0x40(%rax)
movq -0x8(%rsp), %rax
movq 0x88(%rax), %rcx
shlq $0x4, %rcx
movq -0x8(%rsp), %rax
addq 0x38(%rax), %rcx
movq %rcx, 0x38(%rax)
movq -0x8(%rsp), %rax
movq 0x88(%rax), %rcx
shlq %rcx
movq -0x8(%rsp), %rax
addq 0x38(%rax), %rcx
movq %rcx, 0x38(%rax)
movq -0x8(%rsp), %rax
movq 0x88(%rax), %rcx
movq -0x8(%rsp), %rax
addq 0x38(%rax), %rcx
movq %rcx, 0x38(%rax)
movq -0x8(%rsp), %rax
movq 0x80(%rax), %rcx
shlq $0x4, %rcx
movq -0x8(%rsp), %rax
addq 0x30(%rax), %rcx
movq %rcx, 0x30(%rax)
movq -0x8(%rsp), %rax
movq 0x80(%rax), %rcx
shlq %rcx
movq -0x8(%rsp), %rax
addq 0x30(%rax), %rcx
movq %rcx, 0x30(%rax)
movq -0x8(%rsp), %rax
movq 0x80(%rax), %rcx
movq -0x8(%rsp), %rax
addq 0x30(%rax), %rcx
movq %rcx, 0x30(%rax)
movq -0x8(%rsp), %rax
movq 0x78(%rax), %rcx
shlq $0x4, %rcx
movq -0x8(%rsp), %rax
addq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x8(%rsp), %rax
movq 0x78(%rax), %rcx
shlq %rcx
movq -0x8(%rsp), %rax
addq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x8(%rsp), %rax
movq 0x78(%rax), %rcx
movq -0x8(%rsp), %rax
addq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x8(%rsp), %rax
movq 0x70(%rax), %rcx
shlq $0x4, %rcx
movq -0x8(%rsp), %rax
addq 0x20(%rax), %rcx
movq %rcx, 0x20(%rax)
movq -0x8(%rsp), %rax
movq 0x70(%rax), %rcx
shlq %rcx
movq -0x8(%rsp), %rax
addq 0x20(%rax), %rcx
movq %rcx, 0x20(%rax)
movq -0x8(%rsp), %rax
movq 0x70(%rax), %rcx
movq -0x8(%rsp), %rax
addq 0x20(%rax), %rcx
movq %rcx, 0x20(%rax)
movq -0x8(%rsp), %rax
movq 0x68(%rax), %rcx
shlq $0x4, %rcx
movq -0x8(%rsp), %rax
addq 0x18(%rax), %rcx
movq %rcx, 0x18(%rax)
movq -0x8(%rsp), %rax
movq 0x68(%rax), %rcx
shlq %rcx
movq -0x8(%rsp), %rax
addq 0x18(%rax), %rcx
movq %rcx, 0x18(%rax)
movq -0x8(%rsp), %rax
movq 0x68(%rax), %rcx
movq -0x8(%rsp), %rax
addq 0x18(%rax), %rcx
movq %rcx, 0x18(%rax)
movq -0x8(%rsp), %rax
movq 0x60(%rax), %rcx
shlq $0x4, %rcx
movq -0x8(%rsp), %rax
addq 0x10(%rax), %rcx
movq %rcx, 0x10(%rax)
movq -0x8(%rsp), %rax
movq 0x60(%rax), %rcx
shlq %rcx
movq -0x8(%rsp), %rax
addq 0x10(%rax), %rcx
movq %rcx, 0x10(%rax)
movq -0x8(%rsp), %rax
movq 0x60(%rax), %rcx
movq -0x8(%rsp), %rax
addq 0x10(%rax), %rcx
movq %rcx, 0x10(%rax)
movq -0x8(%rsp), %rax
movq 0x58(%rax), %rcx
shlq $0x4, %rcx
movq -0x8(%rsp), %rax
addq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x8(%rsp), %rax
movq 0x58(%rax), %rcx
shlq %rcx
movq -0x8(%rsp), %rax
addq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x8(%rsp), %rax
movq 0x58(%rax), %rcx
movq -0x8(%rsp), %rax
addq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x8(%rsp), %rax
movq 0x50(%rax), %rcx
shlq $0x4, %rcx
movq -0x8(%rsp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
movq -0x8(%rsp), %rax
movq 0x50(%rax), %rcx
shlq %rcx
movq -0x8(%rsp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
movq -0x8(%rsp), %rax
movq 0x50(%rax), %rcx
movq -0x8(%rsp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
retq
nopl (%rax)