// File: /workspace/github_cpp_makefile_star2_O3/marxn[P]pupp/3rdparty/gmp/mpn/toom_interpolate_8pts.c
// Function: _gmpn_toom_interpolate_8pts
void
mpn_toom_interpolate_8pts (mp_ptr pp, mp_size_t n,
			   mp_ptr r3, mp_ptr r7,
			   mp_size_t spt, mp_ptr ws)
{
  mp_limb_signed_t cy;
  mp_ptr r5, r1;
  r5 = (pp + 3 * n);			/* 3n+1 */
  r1 = (pp + 7 * n);			/* spt */

  /******************************* interpolation *****************************/

  DO_mpn_subrsh(r3+n, 2 * n + 1, pp, 2 * n, 4, ws);
  cy = DO_mpn_sublsh_n (r3, r1, spt, 12, ws);
  MPN_DECR_U (r3 + spt, 3 * n + 1 - spt, cy);

  DO_mpn_subrsh(r5+n, 2 * n + 1, pp, 2 * n, 2, ws);
  cy = DO_mpn_sublsh_n (r5, r1, spt, 6, ws);
  MPN_DECR_U (r5 + spt, 3 * n + 1 - spt, cy);

  r7[3*n] -= mpn_sub_n (r7+n, r7+n, pp, 2 * n);
  cy = mpn_sub_n (r7, r7, r1, spt);
  MPN_DECR_U (r7 + spt, 3 * n + 1 - spt, cy);

  ASSERT_NOCARRY(mpn_sub_n (r3, r3, r5, 3 * n + 1));
  ASSERT_NOCARRY(mpn_rshift(r3, r3, 3 * n + 1, 2));

  ASSERT_NOCARRY(mpn_sub_n (r5, r5, r7, 3 * n + 1));

  ASSERT_NOCARRY(mpn_sub_n (r3, r3, r5, 3 * n + 1));

  mpn_divexact_by45 (r3, r3, 3 * n + 1);

  ASSERT_NOCARRY(mpn_divexact_by3 (r5, r5, 3 * n + 1));

  ASSERT_NOCARRY(DO_mpn_sublsh2_n (r5, r3, 3 * n + 1, ws));

  /* last interpolation steps... */
  /* ... are mixed with recomposition */

  /***************************** recomposition *******************************/
  /*
    pp[] prior to operations:
     |_H r1|_L r1|____||_H r5|_M_r5|_L r5|_____|_H r8|_L r8|pp

    summation scheme for remaining operations:
     |____8|n___7|n___6|n___5|n___4|n___3|n___2|n____|n____|pp
     |_H r1|_L r1|____||_H*r5|_M r5|_L r5|_____|_H_r8|_L r8|pp
	  ||_H r3|_M r3|_L*r3|
				  ||_H_r7|_M_r7|_L_r7|
		      ||-H r3|-M r3|-L*r3|
				  ||-H*r5|-M_r5|-L_r5|
  */

  cy = mpn_add_n (pp + n, pp + n, r7, n); /* Hr8+Lr7-Lr5 */
  cy-= mpn_sub_n (pp + n, pp + n, r5, n);
  if (0 > cy)
    MPN_DECR_U (r7 + n, 2*n + 1, 1);
  else
    MPN_INCR_U (r7 + n, 2*n + 1, cy);

  cy = mpn_sub_n (pp + 2*n, r7 + n, r5 + n, n); /* Mr7-Mr5 */
  MPN_DECR_U (r7 + 2*n, n + 1, cy);

  cy = mpn_add_n (pp + 3*n, r5, r7+ 2*n, n+1); /* Hr7+Lr5 */
  r5[3*n]+= mpn_add_n (r5 + 2*n, r5 + 2*n, r3, n); /* Hr5+Lr3 */
  cy-= mpn_sub_n (pp + 3*n, pp + 3*n, r5 + 2*n, n+1); /* Hr7-Hr5+Lr5-Lr3 */
  if (UNLIKELY(0 > cy))
    MPN_DECR_U (r5 + n + 1, 2*n, 1);
  else
    MPN_INCR_U (r5 + n + 1, 2*n, cy);

  ASSERT_NOCARRY(mpn_sub_n(pp + 4*n, r5 + n, r3 + n, 2*n +1)); /* Mr5-Mr3,Hr5-Hr3 */

  cy = mpn_add_1 (pp + 6*n, r3 + n, n, pp[6*n]);
  MPN_INCR_U (r3 + 2*n, n + 1, cy);
  cy = mpn_add_n (pp + 7*n, pp + 7*n, r3 + 2*n, n);
  if (LIKELY(spt != n))
    MPN_INCR_U (pp + 8*n, spt - n, cy + r3[3*n]);
  else
    ASSERT (r3[3*n] + cy == 0);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
movq %r9, %r12
movq %r8, 0x40(%rsp)
movq %rcx, 0x30(%rsp)
movq %rdx, %r15
movq %rsi, %r14
movq %rdi, 0x18(%rsp)
leaq (%rsi,%rsi,2), %rax
movq %rax, 0x28(%rsp)
leaq (%rdi,%rax,8), %r13
imulq $0x38, %rsi, %rax
addq %rdi, %rax
movq %rax, 0x20(%rsp)
movq (%rdi), %rax
shrq $0x4, %rax
leaq (%rdx,%rsi,8), %rbp
movq %rbp, %rcx
subq %rax, (%rcx)
jae 0x6eeb
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x6ee0
leaq 0x8(%rdi), %rsi
movq %rsi, 0x8(%rsp)
leaq (%r14,%r14), %rax
movq %rax, 0x38(%rsp)
leaq -0x1(%r14,%r14), %rbx
pushq $0x3c
popq %rcx
movq %r9, %rdi
movq %rbx, %rdx
movq %rbx, 0x58(%rsp)
callq 0x1bf80
movq %rax, 0x10(%rsp)
movq %rbp, %rdi
movq %rbp, %rsi
movq %r12, %rdx
movq %rbx, %rcx
callq 0x1bca0
addq 0x10(%rsp), %rax
movq %r14, %rcx
shlq $0x4, %rcx
movq %rcx, 0x10(%rsp)
addq %rbp, %rcx
addq $-0x8, %rcx
subq %rax, (%rcx)
jae 0x6f53
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x6f48
pushq $0xc
popq %rcx
movq %r12, %rdi
movq 0x20(%rsp), %rsi
movq 0x40(%rsp), %rbx
movq %rbx, %rdx
callq 0x1bf80
movq %rax, 0x50(%rsp)
movq %r15, %rdi
movq %r15, %rsi
movq %r15, 0x48(%rsp)
movq %r12, %rdx
movq %rbx, %rcx
callq 0x1bca0
addq 0x50(%rsp), %rax
leaq (%r15,%rbx,8), %rcx
subq %rax, (%rcx)
jae 0x6f9f
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x6f94
movq 0x18(%rsp), %rax
movq (%rax), %rax
shrq $0x2, %rax
leaq (,%r14,8), %rbx
addq %r13, %rbx
movq %rbx, %rcx
subq %rax, (%rcx)
jae 0x6fc9
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x6fbe
pushq $0x3e
popq %rcx
movq %r12, %rdi
movq %r12, %r15
movq 0x8(%rsp), %rsi
movq 0x58(%rsp), %r12
movq %r12, %rdx
callq 0x1bf80
movq %rax, 0x8(%rsp)
movq %rbx, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x1bca0
addq 0x8(%rsp), %rax
movq %rbx, 0x8(%rsp)
movq 0x10(%rsp), %rcx
addq %rbx, %rcx
addq $-0x8, %rcx
subq %rax, (%rcx)
jae 0x7020
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x7015
pushq $0x6
popq %rcx
movq %r15, %rbx
movq %r15, 0x60(%rsp)
movq %r15, %rdi
movq 0x20(%rsp), %rsi
movq 0x40(%rsp), %r12
movq %r12, %rdx
callq 0x1bf80
movq %rax, %r15
movq %r13, %rdi
movq %r13, %rsi
movq %rbx, %rdx
movq %r12, %rcx
callq 0x1bca0
addq %r15, %rax
leaq (,%r12,8), %rdx
addq %r13, %rdx
movq %r12, %rbx
subq %rax, (%rdx)
jae 0x7075
subq $0x1, 0x8(%rdx)
leaq 0x8(%rdx), %rdx
jb 0x706a
movq 0x30(%rsp), %r12
leaq (%r12,%r14,8), %rdi
movq %rdi, 0x10(%rsp)
movq %rdi, %rsi
movq 0x18(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0x1bca0
movq %r12, %rdi
movq 0x28(%rsp), %rcx
subq %rax, (%r12,%rcx,8)
movq %r12, %rsi
movq 0x20(%rsp), %rdx
movq %rbx, %rcx
callq 0x1bca0
leaq (%r12,%rbx,8), %rcx
subq %rax, (%rcx)
jae 0x70c5
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x70ba
leaq (%r14,%r14,2), %rbx
incq %rbx
movq 0x48(%rsp), %r15
movq %r15, %rdi
movq %r15, %rsi
movq %r13, %rdx
movq %rbx, %rcx
callq 0x1bca0
pushq $0x2
popq %rcx
movq %r15, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0x300c0
movq %r13, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %rbx, %rcx
callq 0x1bca0
movq %r15, %rdi
movq %r15, %rsi
movq %r13, %rdx
movq %rbx, %rcx
callq 0x1bca0
pushq $0x2d
popq %rcx
movabsq $0x4fa4fa4fa4fa4fa5, %r8 # imm = 0x4FA4FA4FA4FA4FA5
movq %r15, %rdi
movq %r15, %rsi
movq %rbx, %rdx
xorl %r9d, %r9d
callq 0x2efe8
movabsq $0x5555555555555555, %rcx # imm = 0x5555555555555555
movq %r13, %rdi
movq %r13, %rsi
movq %rbx, %rdx
xorl %r8d, %r8d
callq 0x2f070
movq 0x60(%rsp), %r12
movq %r12, %rdi
movq %r15, %rsi
movq %rbx, %rdx
pushq $0x2
popq %rcx
callq 0x1bf80
movq %r13, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %rbx, %rcx
callq 0x1bca0
movq 0x18(%rsp), %rax
leaq (%rax,%r14,8), %r15
movq %r15, %rdi
movq %r15, %rsi
movq 0x30(%rsp), %rdx
movq %r14, %rcx
callq 0x1ba80
movq %rax, %rbx
movq %r15, %rdi
movq %r15, %rsi
movq %r13, %rdx
movq %r14, %rcx
callq 0x1bca0
subq %rax, %rbx
js 0x71c4
movq 0x10(%rsp), %rsi
movq %rsi, %rax
addq %rbx, (%rax)
jae 0x71c2
addq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x71b7
jmp 0x71d6
movq 0x10(%rsp), %rsi
movq %rsi, %rax
subq $0x1, (%rax)
leaq 0x8(%rax), %rax
jb 0x71cc
movq 0x38(%rsp), %r12
movq 0x18(%rsp), %rax
leaq (%rax,%r12,8), %rdi
movq 0x8(%rsp), %rdx
movq %r14, %rcx
callq 0x1bca0
movq 0x30(%rsp), %rcx
leaq (%rcx,%r12,8), %rdx
movq %rdx, %rcx
subq %rax, (%rcx)
jae 0x720d
subq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x7202
leaq 0x1(%r14), %r15
movq %r13, %rdi
movq %r13, %rsi
movq %r15, %rcx
callq 0x1ba80
movq %rax, %rbx
leaq (,%r12,8), %r12
addq %r13, %r12
movq %r12, %rdi
movq %r12, %rsi
movq 0x48(%rsp), %rdx
movq %r14, %rcx
callq 0x1ba80
movq 0x28(%rsp), %rcx
addq %rax, (%r13,%rcx,8)
movq %r13, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r15, %rcx
callq 0x1bca0
movq 0x8(%rsp), %rcx
addq $0x8, %rcx
subq %rax, %rbx
js 0x739a
addq %rbx, (%rcx)
jae 0x727d
addq $0x1, 0x8(%rcx)
leaq 0x8(%rcx), %rcx
jb 0x7272
movq %r14, %rdi
shlq $0x5, %rdi
movq 0x18(%rsp), %rbx
addq %rbx, %rdi
movq 0x38(%rsp), %r12
movq %r12, %rcx
orq $0x1, %rcx
movq 0x8(%rsp), %rsi
movq %rbp, %rdx
callq 0x1bca0
imulq $0x30, %r14, %rcx
leaq (%rbx,%rcx), %rax
movq (%rbp), %rdx
addq %rdx, (%rbx,%rcx)
movq 0x48(%rsp), %r15
jae 0x7312
cmpq $0x2, %r14
pushq $0x1
popq %rcx
movq %rcx, %rsi
cmovgeq %r14, %rsi
movq %rcx, %rdi
cmpq %rdi, %rsi
je 0x733d
movq (%rbp,%rdi,8), %r8
leaq 0x1(%rdi), %rdx
incq %r8
movq %r8, (%rax,%rdi,8)
movq %rdx, %rdi
je 0x72cd
cmpq %rax, %rbp
setne %cl
cmpq %r14, %rdx
setl %sil
andb %cl, %sil
cmpb $0x1, %sil
jne 0x733b
xorl %ecx, %ecx
movq (%rbp,%rdx,8), %rsi
movq %rsi, (%rax,%rdx,8)
incq %rdx
cmpq %r14, %rdx
jl 0x72ff
jmp 0x733d
cmpq %rax, %rbp
sete %cl
cmpq $0x2, %r14
setl %dl
orb %cl, %dl
jne 0x733b
pushq $0x1
popq %rdx
xorl %ecx, %ecx
movq (%rbp,%rdx,8), %rsi
movq %rsi, (%rax,%rdx,8)
incq %rdx
cmpq %rdx, %r14
jne 0x7328
jmp 0x733d
xorl %ecx, %ecx
leaq (%r15,%r12,8), %rdx
movq %rdx, %rax
addq %rcx, (%rax)
jae 0x7354
addq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x7349
movq 0x20(%rsp), %rdi
movq %rdi, %rsi
movq %r14, %rcx
callq 0x1ba80
cmpq %r14, 0x40(%rsp)
je 0x738b
movq 0x28(%rsp), %rcx
addq (%r15,%rcx,8), %rax
shlq $0x6, %r14
addq %r14, %rbx
addq %rax, (%rbx)
jae 0x738b
addq $0x1, 0x8(%rbx)
leaq 0x8(%rbx), %rbx
jb 0x7380
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
subq $0x1, (%rcx)
leaq 0x8(%rcx), %rcx
jb 0x739a
jmp 0x727d