// File: /workspace/github_c_makefile_star2_O0/esheldon[P]xshear/src/healpix.c
// Function: hpix_in_ring
void hpix_in_ring(
        const HealPix* hpix, 
        int64 iz, 
        double phi0, 
        double dphi, 
        lvector* plist) {

    int64 nr, ir, ipix1;
    double shift=0.5;
    int64 nside = hpix->nside;

    if (iz<nside) {
        // north pole
        ir = iz;
        nr = ir*4;
        ipix1 = 2*ir*(ir-1);        //    lowest pixel number in the ring
    } else if (iz>(3*nside)) {
        // south pole
        ir = 4*nside - iz;
        nr = ir*4;
        ipix1 = hpix->npix - 2*ir*(ir+1); // lowest pixel number in the ring
    } else {
        // equatorial region
        ir = iz - nside + 1;           //    within {1, 2*nside + 1}
        nr = nside*4;
        if ((ir&1)==0) shift = 0;
        ipix1 = hpix->ncap + (ir-1)*nr; // lowest pixel number in the ring
    }

    int64 ipix2 = ipix1 + nr - 1;  //    highest pixel number in the ring
 

    if (dphi > (M_PI-1e-7)) {
        for (int64 i=ipix1; i<=ipix2; ++i) {
            vector_push(plist, i);
        }
    } else {

        // M_1_PI is 1/pi
        int64 ip_lo = (int64)( floor(nr*.5*M_1_PI*(phi0-dphi) - shift) )+1;
        int64 ip_hi = (int64)( floor(nr*.5*M_1_PI*(phi0+dphi) - shift) );
        int64 pixnum = ip_lo+ipix1;
        if (pixnum<ipix1) {
            pixnum += nr;
        }
        for (int64 i=ip_lo; i<=ip_hi; ++i, ++pixnum) {
            if (pixnum>ipix2) {
                pixnum -= nr;
            }
            vector_push(plist, pixnum);
        }
    }

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movsd %xmm0, -0x18(%rbp)
movsd %xmm1, -0x20(%rbp)
movq %rdx, -0x28(%rbp)
movsd 0xb1df(%rip), %xmm0     # 0xe068
movsd %xmm0, -0x48(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rax
cmpq -0x50(%rbp), %rax
jge 0x2ed3
movq -0x10(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
shlq $0x2, %rax
movq %rax, -0x30(%rbp)
movq -0x38(%rbp), %rax
shlq %rax
movq -0x38(%rbp), %rcx
subq $0x1, %rcx
imulq %rcx, %rax
movq %rax, -0x40(%rbp)
jmp 0x2f71
movq -0x10(%rbp), %rax
imulq $0x3, -0x50(%rbp), %rcx
cmpq %rcx, %rax
jle 0x2f21
movq -0x50(%rbp), %rax
shlq $0x2, %rax
subq -0x10(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
shlq $0x2, %rax
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x38(%rbp), %rcx
shlq %rcx
movq -0x38(%rbp), %rdx
addq $0x1, %rdx
imulq %rdx, %rcx
subq %rcx, %rax
movq %rax, -0x40(%rbp)
jmp 0x2f6f
movq -0x10(%rbp), %rax
subq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
movq -0x50(%rbp), %rax
shlq $0x2, %rax
movq %rax, -0x30(%rbp)
movq -0x38(%rbp), %rax
andq $0x1, %rax
cmpq $0x0, %rax
jne 0x2f53
xorps %xmm0, %xmm0
movsd %xmm0, -0x48(%rbp)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x38(%rbp), %rcx
subq $0x1, %rcx
imulq -0x30(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
jmp 0x2f71
movq -0x40(%rbp), %rax
addq -0x30(%rbp), %rax
subq $0x1, %rax
movq %rax, -0x58(%rbp)
movsd -0x20(%rbp), %xmm0
movsd 0xb0e2(%rip), %xmm1     # 0xe070
ucomisd %xmm1, %xmm0
jbe 0x3122
movq -0x40(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
cmpq -0x58(%rbp), %rax
jg 0x311d
jmp 0x2fb0
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x30e1
movq $0x0, -0x68(%rbp)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x2fe2
movq $0x1, -0x68(%rbp)
jmp 0x2ff1
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0x68(%rbp)
jmp 0x2ff3
movq -0x68(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x78(%rbp)
movq -0x70(%rbp), %rax
movq -0x28(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x301f
movq -0x70(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
cmpq $0x1, -0x70(%rbp)
jae 0x302e
movq $0x1, -0x70(%rbp)
movq $0x8, -0x80(%rbp)
movq -0x70(%rbp), %rax
cmpq -0x78(%rbp), %rax
je 0x30dd
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x70(%rbp), %rsi
imulq -0x80(%rbp), %rsi
callq 0x2200
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x3092
movq 0xef81(%rip), %rax      # 0x11ff8
movq (%rax), %rdi
leaq 0xb07c(%rip), %rsi      # 0xe0fd
movb $0x0, %al
callq 0x2170
movl $0x1, %edi
callq 0x2250
movq -0x70(%rbp), %rax
cmpq -0x78(%rbp), %rax
jbe 0x30d1
movq -0x70(%rbp), %rax
subq -0x78(%rbp), %rax
imulq -0x80(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x78(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x88(%rbp), %rdx
xorl %esi, %esi
callq 0x2100
movq -0x70(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x30df
jmp 0x30e1
movq -0x28(%rbp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq -0x60(%rbp), %rdx
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x28(%rbp), %rcx
movq (%rcx), %rcx
subq $0x1, %rcx
movq %rdx, (%rax,%rcx,8)
jmp 0x310c
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
jmp 0x2fa0
jmp 0x3423
cvtsi2sdq -0x30(%rbp), %xmm0
movsd 0xaf38(%rip), %xmm1     # 0xe068
mulsd %xmm1, %xmm0
movsd 0xaf3c(%rip), %xmm1     # 0xe078
mulsd %xmm1, %xmm0
movsd -0x18(%rbp), %xmm2
subsd -0x20(%rbp), %xmm2
movsd -0x48(%rbp), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
callq 0x2230
cvttsd2si %xmm0, %rax
addq $0x1, %rax
movq %rax, -0x90(%rbp)
cvtsi2sdq -0x30(%rbp), %xmm0
movsd 0xaed7(%rip), %xmm1     # 0xe068
mulsd %xmm1, %xmm0
movsd 0xaedb(%rip), %xmm1     # 0xe078
mulsd %xmm1, %xmm0
movsd -0x18(%rbp), %xmm2
addsd -0x20(%rbp), %xmm2
movsd -0x48(%rbp), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
callq 0x2230
cvttsd2si %xmm0, %rax
movq %rax, -0x98(%rbp)
movq -0x90(%rbp), %rax
addq -0x40(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0xa0(%rbp), %rax
cmpq -0x40(%rbp), %rax
jge 0x3211
movq -0x30(%rbp), %rax
addq -0xa0(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x90(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
cmpq -0x98(%rbp), %rax
jg 0x3421
movq -0xa0(%rbp), %rax
cmpq -0x58(%rbp), %rax
jle 0x3255
movq -0x30(%rbp), %rcx
movq -0xa0(%rbp), %rax
subq %rcx, %rax
movq %rax, -0xa0(%rbp)
jmp 0x3257
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x33ca
movq $0x0, -0xb0(%rbp)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x328f
movq $0x1, -0xb0(%rbp)
jmp 0x32a1
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0xb0(%rbp)
jmp 0x32a3
movq -0xb0(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0xc0(%rbp)
movq -0xb8(%rbp), %rax
movq -0x28(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x32de
movq -0xb8(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
cmpq $0x1, -0xb8(%rbp)
jae 0x32f3
movq $0x1, -0xb8(%rbp)
movq $0x8, -0xc8(%rbp)
movq -0xb8(%rbp), %rax
cmpq -0xc0(%rbp), %rax
je 0x33c6
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0xb8(%rbp), %rsi
imulq -0xc8(%rbp), %rsi
callq 0x2200
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x3366
movq 0xecad(%rip), %rax      # 0x11ff8
movq (%rax), %rdi
leaq 0xada8(%rip), %rsi      # 0xe0fd
movb $0x0, %al
callq 0x2170
movl $0x1, %edi
callq 0x2250
movq -0xb8(%rbp), %rax
cmpq -0xc0(%rbp), %rax
jbe 0x33b7
movq -0xb8(%rbp), %rax
subq -0xc0(%rbp), %rax
imulq -0xc8(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0xc0(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0xd0(%rbp), %rdx
xorl %esi, %esi
callq 0x2100
movq -0xb8(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x33c8
jmp 0x33ca
movq -0x28(%rbp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq -0xa0(%rbp), %rdx
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x28(%rbp), %rcx
movq (%rcx), %rcx
subq $0x1, %rcx
movq %rdx, (%rax,%rcx,8)
jmp 0x33f8
movq -0xa8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xa8(%rbp)
movq -0xa0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xa0(%rbp)
jmp 0x321f
jmp 0x3423
addq $0xd0, %rsp
popq %rbp
retq
nopl (%rax)