// File: /workspace/github_cpp_makefile_star2_O1/xdsopl[P]FEC/./forney.hh
// Function: Forney<16, 0, GF::Types<8, 285, unsigned char>>::compute_magnitudes(GF::Value<8, 285, unsigned char>*, GF::Index<8, 285, unsigned char>*, int, GF::Value<8, 285, unsigned char>*, int, GF::Value<8, 285, unsigned char>*)
static void compute_magnitudes(ValueType *locator, IndexType *locations, int count, ValueType *evaluator, int evaluator_degree, ValueType *magnitudes)
	{
		// $magnitude = root^{FCR-1} * \frac{evaluator(root)}{locator'(root)}$
		for (int i = 0; i < count; ++i) {
			IndexType root(locations[i] * IndexType(1)), tmp(root);
			ValueType eval(evaluator[0]);
			for (int j = 1; j <= evaluator_degree; ++j) {
				eval += evaluator[j] * tmp;
				tmp *= root;
			}
			if (!eval) {
				magnitudes[i] = ValueType(0);
				continue;
			}
			ValueType deriv(locator[1]);
			IndexType root2(root * root), tmp2(root2);
			for (int j = 3; j <= count; j += 2) {
				deriv += locator[j] * tmp2;
				tmp2 *= root2;
			}
			IndexType magnitude(index(eval) / index(deriv));
			if (FCR == 0)
				magnitude /= root;
			if (FCR > 1)
				for (int j = 1; j < FCR; ++j)
					magnitude *= root;
			magnitudes[i] = value(magnitude);
		}
	}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movq %r9, 0x20(%rsp)
movq %r8, 0x28(%rsp)
movq %rsi, 0x50(%rsp)
movq %rdi, 0x18(%rsp)
movl %edx, 0xc(%rsp)
testl %edx, %edx
jle 0xb2a1
movq %rcx, %r15
movq 0x28(%rsp), %rax
leal 0x1(%rax), %r14d
movl 0xc(%rsp), %eax
movq %rax, 0x48(%rsp)
xorl %ecx, %ecx
movq %r15, 0x38(%rsp)
movq %r14, 0x40(%rsp)
movq 0x50(%rsp), %rax
movq %rcx, 0x30(%rsp)
movzbl (%rax,%rcx), %edi
movl $0x1, %esi
callq 0xa0b4
movb %al, 0xb(%rsp)
movb (%r15), %r13b
movzbl %al, %eax
movl %eax, 0x10(%rsp)
cmpl $0x0, 0x28(%rsp)
jle 0xb1b0
movl $0x1, %ebx
leaq 0xb(%rsp), %r12
movl 0x10(%rsp), %ebp
movzbl (%r15,%rbx), %edi
movzbl 0xb(%rsp), %esi
callq 0xa12f
xorb %al, %r13b
movq %r12, %rdi
movl %ebp, %esi
callq 0xa056
incq %rbx
cmpq %rbx, %r14
jne 0xb18c
testb %r13b, %r13b
je 0xb285
movq 0x18(%rsp), %r12
movb 0x1(%r12), %r12b
movl 0x10(%rsp), %edi
movl %edi, %esi
callq 0xa0b4
movb %al, 0xa(%rsp)
cmpl $0x3, 0xc(%rsp)
jl 0xb21b
movl $0x3, %ebp
movzbl %al, %eax
movl %eax, 0x14(%rsp)
movl 0xc(%rsp), %r15d
movq 0x18(%rsp), %r14
leaq 0xa(%rsp), %rbx
movzbl (%r14,%rbp), %edi
movzbl 0xa(%rsp), %esi
callq 0xa12f
xorb %al, %r12b
movq %rbx, %rdi
movl 0x14(%rsp), %esi
callq 0xa056
addq $0x2, %rbp
cmpl %r15d, %ebp
jle 0xb1f4
testb %r12b, %r12b
je 0xb2b0
movzbl %r13b, %eax
movzbl %r12b, %ecx
leaq 0x5ebd(%rip), %rdx      # 0x110f0
movzbl (%rax,%rdx), %edi
movzbl (%rcx,%rdx), %esi
callq 0xaa0d
movb %al, 0x9(%rsp)
leaq 0x9(%rsp), %rdi
movl 0x10(%rsp), %esi
callq 0xb2ee
movzbl 0x9(%rsp), %eax
cmpq $0xff, %rax
movq 0x40(%rsp), %r14
je 0xb2cf
leaq 0x5d85(%rip), %rcx      # 0x10ff0
movb (%rax,%rcx), %al
movq 0x20(%rsp), %rcx
movq 0x30(%rsp), %rdx
movb %al, (%rcx,%rdx)
movq %rdx, %rcx
movq 0x38(%rsp), %r15
jmp 0xb293
movq 0x20(%rsp), %rax
movq 0x30(%rsp), %rcx
movb $0x0, (%rax,%rcx)
incq %rcx
cmpq 0x48(%rsp), %rcx
jne 0xb151
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x35c4(%rip), %rdi      # 0xe87b
leaq 0x31f8(%rip), %rsi      # 0xe4b6
leaq 0x468f(%rip), %rcx      # 0xf954
movl $0x61, %edx
callq 0x20c0
leaq 0x33ba(%rip), %rdi      # 0xe690
leaq 0x31d9(%rip), %rsi      # 0xe4b6
leaq 0x441b(%rip), %rcx      # 0xf6ff
movl $0x67, %edx
callq 0x20c0