// File: /workspace/github_c_makefile_star2_O1/oreparaz[P]dudect/examples/donna/curve25519-donna.c
// Function: fproduct
static void fproduct(limb *output, const limb *in2, const limb *in) {
  output[0] =       ((limb) ((s32) in2[0])) * ((s32) in[0]);
  output[1] =       ((limb) ((s32) in2[0])) * ((s32) in[1]) +
                    ((limb) ((s32) in2[1])) * ((s32) in[0]);
  output[2] =  2 *  ((limb) ((s32) in2[1])) * ((s32) in[1]) +
                    ((limb) ((s32) in2[0])) * ((s32) in[2]) +
                    ((limb) ((s32) in2[2])) * ((s32) in[0]);
  output[3] =       ((limb) ((s32) in2[1])) * ((s32) in[2]) +
                    ((limb) ((s32) in2[2])) * ((s32) in[1]) +
                    ((limb) ((s32) in2[0])) * ((s32) in[3]) +
                    ((limb) ((s32) in2[3])) * ((s32) in[0]);
  output[4] =       ((limb) ((s32) in2[2])) * ((s32) in[2]) +
               2 * (((limb) ((s32) in2[1])) * ((s32) in[3]) +
                    ((limb) ((s32) in2[3])) * ((s32) in[1])) +
                    ((limb) ((s32) in2[0])) * ((s32) in[4]) +
                    ((limb) ((s32) in2[4])) * ((s32) in[0]);
  output[5] =       ((limb) ((s32) in2[2])) * ((s32) in[3]) +
                    ((limb) ((s32) in2[3])) * ((s32) in[2]) +
                    ((limb) ((s32) in2[1])) * ((s32) in[4]) +
                    ((limb) ((s32) in2[4])) * ((s32) in[1]) +
                    ((limb) ((s32) in2[0])) * ((s32) in[5]) +
                    ((limb) ((s32) in2[5])) * ((s32) in[0]);
  output[6] =  2 * (((limb) ((s32) in2[3])) * ((s32) in[3]) +
                    ((limb) ((s32) in2[1])) * ((s32) in[5]) +
                    ((limb) ((s32) in2[5])) * ((s32) in[1])) +
                    ((limb) ((s32) in2[2])) * ((s32) in[4]) +
                    ((limb) ((s32) in2[4])) * ((s32) in[2]) +
                    ((limb) ((s32) in2[0])) * ((s32) in[6]) +
                    ((limb) ((s32) in2[6])) * ((s32) in[0]);
  output[7] =       ((limb) ((s32) in2[3])) * ((s32) in[4]) +
                    ((limb) ((s32) in2[4])) * ((s32) in[3]) +
                    ((limb) ((s32) in2[2])) * ((s32) in[5]) +
                    ((limb) ((s32) in2[5])) * ((s32) in[2]) +
                    ((limb) ((s32) in2[1])) * ((s32) in[6]) +
                    ((limb) ((s32) in2[6])) * ((s32) in[1]) +
                    ((limb) ((s32) in2[0])) * ((s32) in[7]) +
                    ((limb) ((s32) in2[7])) * ((s32) in[0]);
  output[8] =       ((limb) ((s32) in2[4])) * ((s32) in[4]) +
               2 * (((limb) ((s32) in2[3])) * ((s32) in[5]) +
                    ((limb) ((s32) in2[5])) * ((s32) in[3]) +
                    ((limb) ((s32) in2[1])) * ((s32) in[7]) +
                    ((limb) ((s32) in2[7])) * ((s32) in[1])) +
                    ((limb) ((s32) in2[2])) * ((s32) in[6]) +
                    ((limb) ((s32) in2[6])) * ((s32) in[2]) +
                    ((limb) ((s32) in2[0])) * ((s32) in[8]) +
                    ((limb) ((s32) in2[8])) * ((s32) in[0]);
  output[9] =       ((limb) ((s32) in2[4])) * ((s32) in[5]) +
                    ((limb) ((s32) in2[5])) * ((s32) in[4]) +
                    ((limb) ((s32) in2[3])) * ((s32) in[6]) +
                    ((limb) ((s32) in2[6])) * ((s32) in[3]) +
                    ((limb) ((s32) in2[2])) * ((s32) in[7]) +
                    ((limb) ((s32) in2[7])) * ((s32) in[2]) +
                    ((limb) ((s32) in2[1])) * ((s32) in[8]) +
                    ((limb) ((s32) in2[8])) * ((s32) in[1]) +
                    ((limb) ((s32) in2[0])) * ((s32) in[9]) +
                    ((limb) ((s32) in2[9])) * ((s32) in[0]);
  output[10] = 2 * (((limb) ((s32) in2[5])) * ((s32) in[5]) +
                    ((limb) ((s32) in2[3])) * ((s32) in[7]) +
                    ((limb) ((s32) in2[7])) * ((s32) in[3]) +
                    ((limb) ((s32) in2[1])) * ((s32) in[9]) +
                    ((limb) ((s32) in2[9])) * ((s32) in[1])) +
                    ((limb) ((s32) in2[4])) * ((s32) in[6]) +
                    ((limb) ((s32) in2[6])) * ((s32) in[4]) +
                    ((limb) ((s32) in2[2])) * ((s32) in[8]) +
                    ((limb) ((s32) in2[8])) * ((s32) in[2]);
  output[11] =      ((limb) ((s32) in2[5])) * ((s32) in[6]) +
                    ((limb) ((s32) in2[6])) * ((s32) in[5]) +
                    ((limb) ((s32) in2[4])) * ((s32) in[7]) +
                    ((limb) ((s32) in2[7])) * ((s32) in[4]) +
                    ((limb) ((s32) in2[3])) * ((s32) in[8]) +
                    ((limb) ((s32) in2[8])) * ((s32) in[3]) +
                    ((limb) ((s32) in2[2])) * ((s32) in[9]) +
                    ((limb) ((s32) in2[9])) * ((s32) in[2]);
  output[12] =      ((limb) ((s32) in2[6])) * ((s32) in[6]) +
               2 * (((limb) ((s32) in2[5])) * ((s32) in[7]) +
                    ((limb) ((s32) in2[7])) * ((s32) in[5]) +
                    ((limb) ((s32) in2[3])) * ((s32) in[9]) +
                    ((limb) ((s32) in2[9])) * ((s32) in[3])) +
                    ((limb) ((s32) in2[4])) * ((s32) in[8]) +
                    ((limb) ((s32) in2[8])) * ((s32) in[4]);
  output[13] =      ((limb) ((s32) in2[6])) * ((s32) in[7]) +
                    ((limb) ((s32) in2[7])) * ((s32) in[6]) +
                    ((limb) ((s32) in2[5])) * ((s32) in[8]) +
                    ((limb) ((s32) in2[8])) * ((s32) in[5]) +
                    ((limb) ((s32) in2[4])) * ((s32) in[9]) +
                    ((limb) ((s32) in2[9])) * ((s32) in[4]);
  output[14] = 2 * (((limb) ((s32) in2[7])) * ((s32) in[7]) +
                    ((limb) ((s32) in2[5])) * ((s32) in[9]) +
                    ((limb) ((s32) in2[9])) * ((s32) in[5])) +
                    ((limb) ((s32) in2[6])) * ((s32) in[8]) +
                    ((limb) ((s32) in2[8])) * ((s32) in[6]);
  output[15] =      ((limb) ((s32) in2[7])) * ((s32) in[8]) +
                    ((limb) ((s32) in2[8])) * ((s32) in[7]) +
                    ((limb) ((s32) in2[6])) * ((s32) in[9]) +
                    ((limb) ((s32) in2[9])) * ((s32) in[6]);
  output[16] =      ((limb) ((s32) in2[8])) * ((s32) in[8]) +
               2 * (((limb) ((s32) in2[7])) * ((s32) in[9]) +
                    ((limb) ((s32) in2[9])) * ((s32) in[7]));
  output[17] =      ((limb) ((s32) in2[8])) * ((s32) in[9]) +
                    ((limb) ((s32) in2[9])) * ((s32) in[8]);
  output[18] = 2 *  ((limb) ((s32) in2[9])) * ((s32) in[9]);
}

// Assembly:
movslq (%rsi), %rax
movslq (%rdx), %rcx
imulq %rax, %rcx
movq %rcx, (%rdi)
movslq (%rsi), %rax
movslq 0x8(%rdx), %rcx
imulq %rax, %rcx
movslq 0x8(%rsi), %rax
movslq (%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
movq %r8, 0x8(%rdi)
movslq 0x8(%rsi), %rax
movslq 0x8(%rdx), %rcx
imulq %rax, %rcx
movslq (%rsi), %rax
movslq 0x10(%rdx), %r8
imulq %rax, %r8
leaq (%r8,%rcx,2), %rax
movslq 0x10(%rsi), %rcx
movslq (%rdx), %r8
imulq %rcx, %r8
addq %rax, %r8
movq %r8, 0x10(%rdi)
movslq 0x8(%rsi), %rax
movslq 0x10(%rdx), %rcx
imulq %rax, %rcx
movslq 0x10(%rsi), %rax
movslq 0x8(%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
movslq (%rsi), %rax
movslq 0x18(%rdx), %rcx
imulq %rax, %rcx
movslq 0x18(%rsi), %rax
movslq (%rdx), %r9
imulq %rax, %r9
addq %rcx, %r9
addq %r8, %r9
movq %r9, 0x18(%rdi)
movslq 0x10(%rsi), %rax
movslq 0x10(%rdx), %rcx
imulq %rax, %rcx
movslq 0x8(%rsi), %rax
movslq 0x18(%rdx), %r8
imulq %rax, %r8
movslq 0x18(%rsi), %rax
movslq 0x8(%rdx), %r9
imulq %rax, %r9
addq %r8, %r9
leaq (%rcx,%r9,2), %rax
movslq (%rsi), %rcx
movslq 0x20(%rdx), %r8
imulq %rcx, %r8
movslq 0x20(%rsi), %rcx
movslq (%rdx), %r9
imulq %rcx, %r9
addq %r8, %r9
addq %rax, %r9
movq %r9, 0x20(%rdi)
movslq 0x10(%rsi), %rax
movslq 0x18(%rdx), %rcx
imulq %rax, %rcx
movslq 0x18(%rsi), %rax
movslq 0x10(%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
movslq 0x8(%rsi), %rax
movslq 0x20(%rdx), %rcx
imulq %rax, %rcx
movslq 0x20(%rsi), %rax
movslq 0x8(%rdx), %r9
imulq %rax, %r9
addq %rcx, %r9
addq %r8, %r9
movslq (%rsi), %rax
movslq 0x28(%rdx), %rcx
imulq %rax, %rcx
movslq 0x28(%rsi), %rax
movslq (%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
addq %r9, %r8
movq %r8, 0x28(%rdi)
movslq 0x18(%rsi), %rax
movslq 0x18(%rdx), %rcx
imulq %rax, %rcx
movslq 0x8(%rsi), %rax
movslq 0x28(%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
movslq 0x28(%rsi), %rax
movslq 0x8(%rdx), %rcx
imulq %rax, %rcx
addq %r8, %rcx
movslq 0x10(%rsi), %rax
movslq 0x20(%rdx), %r8
imulq %rax, %r8
leaq (%r8,%rcx,2), %rax
movslq 0x20(%rsi), %rcx
movslq 0x10(%rdx), %r8
imulq %rcx, %r8
movslq (%rsi), %rcx
movslq 0x30(%rdx), %r9
imulq %rcx, %r9
addq %r8, %r9
movslq 0x30(%rsi), %rcx
movslq (%rdx), %r8
imulq %rcx, %r8
addq %r9, %r8
addq %rax, %r8
movq %r8, 0x30(%rdi)
movslq 0x18(%rsi), %rax
movslq 0x20(%rdx), %rcx
imulq %rax, %rcx
movslq 0x20(%rsi), %rax
movslq 0x18(%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
movslq 0x10(%rsi), %rax
movslq 0x28(%rdx), %rcx
imulq %rax, %rcx
movslq 0x28(%rsi), %rax
movslq 0x10(%rdx), %r9
imulq %rax, %r9
addq %rcx, %r9
addq %r8, %r9
movslq 0x8(%rsi), %rax
movslq 0x30(%rdx), %rcx
imulq %rax, %rcx
movslq 0x30(%rsi), %rax
movslq 0x8(%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
movslq (%rsi), %rax
movslq 0x38(%rdx), %rcx
imulq %rax, %rcx
addq %r8, %rcx
addq %r9, %rcx
movslq 0x38(%rsi), %rax
movslq (%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
movq %r8, 0x38(%rdi)
movslq 0x20(%rsi), %rax
movslq 0x20(%rdx), %rcx
imulq %rax, %rcx
movslq 0x18(%rsi), %rax
movslq 0x28(%rdx), %r8
imulq %rax, %r8
movslq 0x28(%rsi), %rax
movslq 0x18(%rdx), %r9
imulq %rax, %r9
addq %r8, %r9
movslq 0x8(%rsi), %rax
movslq 0x38(%rdx), %r8
imulq %rax, %r8
movslq 0x38(%rsi), %rax
movslq 0x8(%rdx), %r10
imulq %rax, %r10
addq %r8, %r10
addq %r9, %r10
leaq (%rcx,%r10,2), %rax
movslq 0x10(%rsi), %rcx
movslq 0x30(%rdx), %r8
imulq %rcx, %r8
movslq 0x30(%rsi), %rcx
movslq 0x10(%rdx), %r9
imulq %rcx, %r9
addq %r8, %r9
movslq (%rsi), %rcx
movslq 0x40(%rdx), %r8
imulq %rcx, %r8
addq %r9, %r8
movslq 0x40(%rsi), %rcx
movslq (%rdx), %r9
imulq %rcx, %r9
addq %r8, %r9
addq %rax, %r9
movq %r9, 0x40(%rdi)
movslq 0x20(%rsi), %rax
movslq 0x28(%rdx), %rcx
imulq %rax, %rcx
movslq 0x28(%rsi), %rax
movslq 0x20(%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
movslq 0x18(%rsi), %rax
movslq 0x30(%rdx), %rcx
imulq %rax, %rcx
movslq 0x30(%rsi), %rax
movslq 0x18(%rdx), %r9
imulq %rax, %r9
addq %rcx, %r9
addq %r8, %r9
movslq 0x10(%rsi), %rax
movslq 0x38(%rdx), %rcx
imulq %rax, %rcx
movslq 0x38(%rsi), %rax
movslq 0x10(%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
movslq 0x8(%rsi), %rax
movslq 0x40(%rdx), %rcx
imulq %rax, %rcx
addq %r8, %rcx
addq %r9, %rcx
movslq 0x40(%rsi), %rax
movslq 0x8(%rdx), %r8
imulq %rax, %r8
movslq (%rsi), %rax
movslq 0x48(%rdx), %r9
imulq %rax, %r9
addq %r8, %r9
movslq 0x48(%rsi), %rax
movslq (%rdx), %r8
imulq %rax, %r8
addq %r9, %r8
addq %rcx, %r8
movq %r8, 0x48(%rdi)
movslq 0x28(%rsi), %rax
movslq 0x28(%rdx), %rcx
imulq %rax, %rcx
movslq 0x18(%rsi), %rax
movslq 0x38(%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
movslq 0x38(%rsi), %rax
movslq 0x18(%rdx), %rcx
imulq %rax, %rcx
movslq 0x8(%rsi), %rax
movslq 0x48(%rdx), %r9
imulq %rax, %r9
addq %rcx, %r9
addq %r8, %r9
movslq 0x48(%rsi), %rax
movslq 0x8(%rdx), %rcx
imulq %rax, %rcx
addq %r9, %rcx
movslq 0x20(%rsi), %rax
movslq 0x30(%rdx), %r8
imulq %rax, %r8
leaq (%r8,%rcx,2), %rax
movslq 0x30(%rsi), %rcx
movslq 0x20(%rdx), %r8
imulq %rcx, %r8
movslq 0x10(%rsi), %rcx
movslq 0x40(%rdx), %r9
imulq %rcx, %r9
addq %r8, %r9
movslq 0x40(%rsi), %rcx
movslq 0x10(%rdx), %r8
imulq %rcx, %r8
addq %r9, %r8
addq %rax, %r8
movq %r8, 0x50(%rdi)
movslq 0x28(%rsi), %rax
movslq 0x30(%rdx), %rcx
imulq %rax, %rcx
movslq 0x30(%rsi), %rax
movslq 0x28(%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
movslq 0x20(%rsi), %rax
movslq 0x38(%rdx), %rcx
imulq %rax, %rcx
movslq 0x38(%rsi), %rax
movslq 0x20(%rdx), %r9
imulq %rax, %r9
addq %rcx, %r9
addq %r8, %r9
movslq 0x18(%rsi), %rax
movslq 0x40(%rdx), %rcx
imulq %rax, %rcx
movslq 0x40(%rsi), %rax
movslq 0x18(%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
movslq 0x10(%rsi), %rax
movslq 0x48(%rdx), %rcx
imulq %rax, %rcx
addq %r8, %rcx
addq %r9, %rcx
movslq 0x48(%rsi), %rax
movslq 0x10(%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
movq %r8, 0x58(%rdi)
movslq 0x30(%rsi), %rax
movslq 0x30(%rdx), %rcx
imulq %rax, %rcx
movslq 0x28(%rsi), %rax
movslq 0x38(%rdx), %r8
imulq %rax, %r8
movslq 0x38(%rsi), %rax
movslq 0x28(%rdx), %r9
imulq %rax, %r9
addq %r8, %r9
movslq 0x18(%rsi), %rax
movslq 0x48(%rdx), %r8
imulq %rax, %r8
movslq 0x48(%rsi), %rax
movslq 0x18(%rdx), %r10
imulq %rax, %r10
addq %r8, %r10
addq %r9, %r10
leaq (%rcx,%r10,2), %rax
movslq 0x20(%rsi), %rcx
movslq 0x40(%rdx), %r8
imulq %rcx, %r8
movslq 0x40(%rsi), %rcx
movslq 0x20(%rdx), %r9
imulq %rcx, %r9
addq %r8, %r9
addq %rax, %r9
movq %r9, 0x60(%rdi)
movslq 0x30(%rsi), %rax
movslq 0x38(%rdx), %rcx
imulq %rax, %rcx
movslq 0x38(%rsi), %rax
movslq 0x30(%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
movslq 0x28(%rsi), %rax
movslq 0x40(%rdx), %rcx
imulq %rax, %rcx
movslq 0x40(%rsi), %rax
movslq 0x28(%rdx), %r9
imulq %rax, %r9
addq %rcx, %r9
addq %r8, %r9
movslq 0x20(%rsi), %rax
movslq 0x48(%rdx), %rcx
imulq %rax, %rcx
movslq 0x48(%rsi), %rax
movslq 0x20(%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
addq %r9, %r8
movq %r8, 0x68(%rdi)
movslq 0x38(%rsi), %rax
movslq 0x38(%rdx), %rcx
imulq %rax, %rcx
movslq 0x28(%rsi), %rax
movslq 0x48(%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
movslq 0x48(%rsi), %rax
movslq 0x28(%rdx), %rcx
imulq %rax, %rcx
addq %r8, %rcx
movslq 0x30(%rsi), %rax
movslq 0x40(%rdx), %r8
imulq %rax, %r8
leaq (%r8,%rcx,2), %rax
movslq 0x40(%rsi), %rcx
movslq 0x30(%rdx), %r8
imulq %rcx, %r8
addq %rax, %r8
movq %r8, 0x70(%rdi)
movslq 0x38(%rsi), %rax
movslq 0x40(%rdx), %rcx
imulq %rax, %rcx
movslq 0x40(%rsi), %rax
movslq 0x38(%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
movslq 0x30(%rsi), %rax
movslq 0x48(%rdx), %rcx
imulq %rax, %rcx
movslq 0x48(%rsi), %rax
movslq 0x30(%rdx), %r9
imulq %rax, %r9
addq %rcx, %r9
addq %r8, %r9
movq %r9, 0x78(%rdi)
movslq 0x40(%rsi), %rax
movslq 0x40(%rdx), %rcx
imulq %rax, %rcx
movslq 0x38(%rsi), %rax
movslq 0x48(%rdx), %r8
imulq %rax, %r8
movslq 0x48(%rsi), %rax
movslq 0x38(%rdx), %r9
imulq %rax, %r9
addq %r8, %r9
leaq (%rcx,%r9,2), %rax
movq %rax, 0x80(%rdi)
movslq 0x40(%rsi), %rax
movslq 0x48(%rdx), %rcx
imulq %rax, %rcx
movslq 0x48(%rsi), %rax
movslq 0x40(%rdx), %r8
imulq %rax, %r8
addq %rcx, %r8
movq %r8, 0x88(%rdi)
movslq 0x48(%rsi), %rax
movslq 0x48(%rdx), %rcx
imulq %rax, %rcx
addq %rcx, %rcx
movq %rcx, 0x90(%rdi)
retq