// File: /workspace/github_c_makefile_star2_O0/gplessis[P]dotdeb-redis/deps/geohash-int/geohash.c
// Function: geohashEncode
int geohashEncode(const GeoHashRange *long_range, const GeoHashRange *lat_range,
                  double longitude, double latitude, uint8_t step,
                  GeoHashBits *hash) {
    /* Check basic arguments sanity. */
    if (hash == NULL || step > 32 || step == 0 ||
        RANGEPISZERO(lat_range) || RANGEPISZERO(long_range)) return 0;

    /* Return an error when trying to index outside the supported
     * constraints. */
    if (longitude > 180 || longitude < -180 ||
        latitude > 85.05112878 || latitude < -85.05112878) return 0;

    hash->bits = 0;
    hash->step = step;

    if (latitude < lat_range->min || latitude > lat_range->max ||
        longitude < long_range->min || longitude > long_range->max) {
        return 0;
    }

    double lat_offset =
        (latitude - lat_range->min) / (lat_range->max - lat_range->min);
    double long_offset =
        (longitude - long_range->min) / (long_range->max - long_range->min);

    /* convert to fixed point based on the step size */
    lat_offset *= (1 << step);
    long_offset *= (1 << step);
    hash->bits = interleave64(lat_offset, long_offset);
    return 1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movb %dl, %al
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movsd %xmm0, -0x20(%rbp)
movsd %xmm1, -0x28(%rbp)
movb %al, -0x29(%rbp)
movq %rcx, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0xd365a
movzbl -0x29(%rbp), %eax
cmpl $0x20, %eax
jg 0xd365a
movzbl -0x29(%rbp), %eax
cmpl $0x0, %eax
je 0xd365a
cmpq $0x0, -0x18(%rbp)
je 0xd365a
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0xd362c
jp 0xd362c
movq -0x18(%rbp), %rax
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0xd362c
jp 0xd362c
jmp 0xd365a
cmpq $0x0, -0x10(%rbp)
je 0xd365a
movq -0x10(%rbp), %rax
movsd 0x8(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0xd3666
jp 0xd3666
movq -0x10(%rbp), %rax
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0xd3666
jp 0xd3666
movl $0x0, -0x4(%rbp)
jmp 0xd37c0
movsd -0x20(%rbp), %xmm0
movsd 0x75cad(%rip), %xmm1    # 0x149320
ucomisd %xmm1, %xmm0
ja 0xd36aa
movsd 0x75c97(%rip), %xmm0    # 0x149318
ucomisd -0x20(%rbp), %xmm0
ja 0xd36aa
movsd -0x28(%rbp), %xmm0
movsd 0x75c9b(%rip), %xmm1    # 0x149330
ucomisd %xmm1, %xmm0
ja 0xd36aa
movsd 0x75c85(%rip), %xmm0    # 0x149328
ucomisd -0x28(%rbp), %xmm0
jbe 0xd36b6
movl $0x0, -0x4(%rbp)
jmp 0xd37c0
movq -0x38(%rbp), %rax
movq $0x0, (%rax)
movb -0x29(%rbp), %cl
movq -0x38(%rbp), %rax
movb %cl, 0x8(%rax)
movsd -0x28(%rbp), %xmm1
movq -0x18(%rbp), %rax
movsd (%rax), %xmm0
ucomisd %xmm1, %xmm0
ja 0xd3711
movsd -0x28(%rbp), %xmm0
movq -0x18(%rbp), %rax
ucomisd 0x8(%rax), %xmm0
ja 0xd3711
movsd -0x20(%rbp), %xmm1
movq -0x10(%rbp), %rax
movsd (%rax), %xmm0
ucomisd %xmm1, %xmm0
ja 0xd3711
movsd -0x20(%rbp), %xmm0
movq -0x10(%rbp), %rax
ucomisd 0x8(%rax), %xmm0
jbe 0xd371d
movl $0x0, -0x4(%rbp)
jmp 0xd37c0
movsd -0x28(%rbp), %xmm0
movq -0x18(%rbp), %rax
movsd (%rax), %xmm2
movsd 0x8(%rax), %xmm1
subsd %xmm2, %xmm0
subsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
movsd -0x20(%rbp), %xmm0
movq -0x10(%rbp), %rax
movsd (%rax), %xmm2
movsd 0x8(%rax), %xmm1
subsd %xmm2, %xmm0
subsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x48(%rbp)
movb -0x29(%rbp), %cl
movl $0x1, %eax
movl %eax, %edx
shll %cl, %edx
movl %edx, %ecx
cvtsi2sd %ecx, %xmm1
movsd -0x40(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
movb -0x29(%rbp), %cl
shll %cl, %eax
cvtsi2sd %eax, %xmm1
movsd -0x48(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x48(%rbp)
cvttsd2si -0x40(%rbp), %rax
movl %eax, %edi
cvttsd2si -0x48(%rbp), %rax
movl %eax, %esi
callq 0xd37d0
movq %rax, %rcx
movq -0x38(%rbp), %rax
movq %rcx, (%rax)
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax)