// File: /workspace/github_c_makefile_star2_O0/esheldon[P]xshear/src/shear.c
// Function: get_quad_info
static int get_quad_info(const Lens* lens,
                         const Source* src,
                         int *quadrant,
                         double *r_radians,
                         double *posangle_radians)
{
    double cosradiff, sinradiff, arg, cos_r, pa;

    cosradiff = src->cosra*lens->cosra + src->sinra*lens->sinra;
    sinradiff = src->sinra*lens->cosra - src->cosra*lens->sinra;

    // cos of angle separation
    cos_r = lens->sindec*src->sindec + lens->cosdec*src->cosdec*cosradiff;

    if (cos_r < lens->cos_search_angle) {
        // outside search radius
        return 0;
    }

    if (cos_r > 1.0)
        cos_r=1.0;
    else if (cos_r < -1.0)
        cos_r=-1.0;

    // angle of separation in radians
    (*r_radians) = acos(cos_r);

    // position angle
    arg = lens->sindec*cosradiff - lens->cosdec*src->sindec/src->cosdec;

    // -pi,pi
    (*posangle_radians) = atan2(sinradiff, arg) - M_PI_2;

    // degrees -180,180
    pa = (*posangle_radians)*R2D;
    reset_longitude_bounds(&pa, -180.0, 180.0);

    (*quadrant) = quadeq_get_quadrant(pa);

    return 1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq -0x18(%rbp), %rax
movsd 0x90(%rax), %xmm0
movq -0x10(%rbp), %rax
movsd 0x30(%rax), %xmm2
movq -0x18(%rbp), %rax
movsd 0x88(%rax), %xmm1
movq -0x10(%rbp), %rax
mulsd 0x28(%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x38(%rbp)
movq -0x18(%rbp), %rax
movsd 0x88(%rax), %xmm0
movq -0x10(%rbp), %rax
movsd 0x30(%rax), %xmm2
movq -0x18(%rbp), %rax
movsd 0x90(%rax), %xmm1
movq -0x10(%rbp), %rax
mulsd 0x28(%rax), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
movq -0x10(%rbp), %rax
movsd 0x38(%rax), %xmm0
movq -0x18(%rbp), %rax
movsd 0x98(%rax), %xmm2
movq -0x10(%rbp), %rax
movsd 0x40(%rax), %xmm1
movq -0x18(%rbp), %rax
mulsd 0xa0(%rax), %xmm1
mulsd -0x38(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x50(%rbp)
movsd -0x50(%rbp), %xmm1
movq -0x10(%rbp), %rax
movsd 0x58(%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xb1bd
movl $0x0, -0x4(%rbp)
jmp 0xb2cc
movsd -0x50(%rbp), %xmm0
movsd 0x4706(%rip), %xmm1     # 0xf8d0
ucomisd %xmm1, %xmm0
jbe 0xb1df
movsd 0x46f8(%rip), %xmm0     # 0xf8d0
movsd %xmm0, -0x50(%rbp)
jmp 0xb1fd
movsd 0x4b89(%rip), %xmm0     # 0xfd70
ucomisd -0x50(%rbp), %xmm0
jbe 0xb1fb
movsd 0x4b7a(%rip), %xmm0     # 0xfd70
movsd %xmm0, -0x50(%rbp)
jmp 0xb1fd
movsd -0x50(%rbp), %xmm0
callq 0x2130
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x10(%rbp), %rax
movsd 0x38(%rax), %xmm0
movsd -0x38(%rbp), %xmm2
movq -0x10(%rbp), %rax
movsd 0x40(%rax), %xmm1
movq -0x18(%rbp), %rax
mulsd 0x98(%rax), %xmm1
movq -0x18(%rbp), %rax
divsd 0xa0(%rax), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x40(%rbp), %xmm0
movsd -0x48(%rbp), %xmm1
callq 0x21e0
movsd 0x4bbf(%rip), %xmm1     # 0xfe38
subsd %xmm1, %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x30(%rbp), %rax
movsd 0x4c97(%rip), %xmm0     # 0xff28
mulsd (%rax), %xmm0
movsd %xmm0, -0x58(%rbp)
leaq -0x58(%rbp), %rdi
movsd 0x4c8a(%rip), %xmm0     # 0xff30
movsd 0x4c8a(%rip), %xmm1     # 0xff38
callq 0xb470
movsd -0x58(%rbp), %xmm0
callq 0xe080
movl %eax, %ecx
movq -0x20(%rbp), %rax
movl %ecx, (%rax)
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x60, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)