// File: markondej[P]phase_correl/phase_correl.cpp
// Function: PhaseCorrelation::ComputeNormalized(std::complex<double> const&, std::complex<double> const&, std::complex<double>&)
static void ComputeNormalized(const std::complex<double> &input1, const std::complex<double> &input2, std::complex<double> &output) {
        double a1 = (input1.imag() != 0.0) ? ((input1.real() != 0.0) ? atan(input1.imag() / input1.real()) : std::copysign(M_PI, input1.imag()) / 2.0) : 0.0;
        if (input1.real() < 0.0) {
            a1 = std::copysign(M_PI, input1.imag()) + a1;
        }

        double a2 = (input2.imag() != 0.0) ? ((input2.real() != 0.0) ? atan(input2.imag() / input2.real()) : std::copysign(M_PI, input2.imag()) / 2.0) : 0.0;
        if (input2.real() < 0.0) {
            a2 = std::copysign(M_PI, input2.imag()) + a2;
        }

        output.real(cos(a1 - a2));
        output.imag(sin(a1 - a2));
    }

// Assembly:
subq $0x68, %rsp
movq %rdi, 0x60(%rsp)
movq %rsi, 0x58(%rsp)
movq %rdx, 0x50(%rsp)
movq 0x60(%rsp), %rdi
callq 0x2140
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x1efd
jp 0x1efd
jmp 0x1f88
movq 0x60(%rsp), %rdi
callq 0x2130
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x1f14
jp 0x1f14
jmp 0x1f48
movq 0x60(%rsp), %rdi
callq 0x2140
movsd %xmm0, 0x30(%rsp)
movq 0x60(%rsp), %rdi
callq 0x2130
movaps %xmm0, %xmm1
movsd 0x30(%rsp), %xmm0
divsd %xmm1, %xmm0
callq 0x10f0
movsd %xmm0, 0x38(%rsp)
jmp 0x1f7a
movq 0x60(%rsp), %rdi
callq 0x2140
movaps 0x30c7(%rip), %xmm1     # 0x5020
pand %xmm1, %xmm0
movaps 0x30cc(%rip), %xmm1     # 0x5030
por %xmm1, %xmm0
movsd 0x3098(%rip), %xmm1     # 0x5008
divsd %xmm1, %xmm0
movsd %xmm0, 0x38(%rsp)
movsd 0x38(%rsp), %xmm0
movsd %xmm0, 0x28(%rsp)
jmp 0x1f93
xorps %xmm0, %xmm0
movsd %xmm0, 0x28(%rsp)
jmp 0x1f93
movsd 0x28(%rsp), %xmm0
movsd %xmm0, 0x48(%rsp)
movq 0x60(%rsp), %rdi
callq 0x2130
movaps %xmm0, %xmm1
xorps %xmm0, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x1fe1
movq 0x60(%rsp), %rdi
callq 0x2140
movaps 0x305a(%rip), %xmm1     # 0x5020
pand %xmm1, %xmm0
movaps 0x305f(%rip), %xmm1     # 0x5030
por %xmm1, %xmm0
addsd 0x48(%rsp), %xmm0
movsd %xmm0, 0x48(%rsp)
movq 0x58(%rsp), %rdi
callq 0x2140
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x1ffb
jp 0x1ffb
jmp 0x2086
movq 0x58(%rsp), %rdi
callq 0x2130
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x2012
jp 0x2012
jmp 0x2046
movq 0x58(%rsp), %rdi
callq 0x2140
movsd %xmm0, 0x18(%rsp)
movq 0x58(%rsp), %rdi
callq 0x2130
movaps %xmm0, %xmm1
movsd 0x18(%rsp), %xmm0
divsd %xmm1, %xmm0
callq 0x10f0
movsd %xmm0, 0x20(%rsp)
jmp 0x2078
movq 0x58(%rsp), %rdi
callq 0x2140
movaps 0x2fc9(%rip), %xmm1     # 0x5020
pand %xmm1, %xmm0
movaps 0x2fce(%rip), %xmm1     # 0x5030
por %xmm1, %xmm0
movsd 0x2f9a(%rip), %xmm1     # 0x5008
divsd %xmm1, %xmm0
movsd %xmm0, 0x20(%rsp)
movsd 0x20(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
jmp 0x2091
xorps %xmm0, %xmm0
movsd %xmm0, 0x10(%rsp)
jmp 0x2091
movsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x40(%rsp)
movq 0x58(%rsp), %rdi
callq 0x2130
movaps %xmm0, %xmm1
xorps %xmm0, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x20df
movq 0x58(%rsp), %rdi
callq 0x2140
movaps 0x2f5c(%rip), %xmm1     # 0x5020
pand %xmm1, %xmm0
movaps 0x2f61(%rip), %xmm1     # 0x5030
por %xmm1, %xmm0
addsd 0x40(%rsp), %xmm0
movsd %xmm0, 0x40(%rsp)
movq 0x50(%rsp), %rax
movq %rax, (%rsp)
movsd 0x48(%rsp), %xmm0
subsd 0x40(%rsp), %xmm0
callq 0x11d0
movq (%rsp), %rdi
callq 0x4820
movq 0x50(%rsp), %rax
movq %rax, 0x8(%rsp)
movsd 0x48(%rsp), %xmm0
subsd 0x40(%rsp), %xmm0
callq 0x1040
movq 0x8(%rsp), %rdi
callq 0x4840
addq $0x68, %rsp
retq
nopl (%rax)