// File: /workspace/github_c_makefile_star2_O0/samtools[P]htslib/hts_expr.c
// Function: and_expr
static int and_expr(hts_filter_t *filt, void *data, hts_expr_sym_func *fn,
                    char *str, char **end, hts_expr_val_t *res) {
    if (eq_expr(filt, data, fn, str, end, res)) return -1;

    for (;;) {
        hts_expr_val_t val = HTS_EXPR_VAL_INIT;
        str = ws(*end);
        if (str[0] == '&' && str[1] == '&') {
            if (eq_expr(filt, data, fn, str+2, end, &val)) return -1;
            if (!hts_expr_val_existsT(res) || !hts_expr_val_existsT(&val)) {
                hts_expr_val_undef(res);
                res->d = 0;
            } else {
                res->is_true = res->d =
                    (res->is_true || (res->is_str && res->s.s) || res->d) &&
                    (val.is_true  || (val.is_str && val.s.s) || val.d);
                res->is_str = 0;
            }
        } else if (str[0] == '|' && str[1] == '|') {
            if (eq_expr(filt, data, fn, str+2, end, &val)) return -1;
            if (!hts_expr_val_existsT(res) && !hts_expr_val_existsT(&val)) {
                // neither defined
                hts_expr_val_undef(res);
                res->d = 0;
            } else if (!hts_expr_val_existsT(res) &&
                       !(val.is_true  || (val.is_str  && val.s.s ) || val.d)) {
                // LHS undef and RHS false
                hts_expr_val_undef(res);
                res->d = 0;
            } else if (!hts_expr_val_existsT(&val) &&
                       !(res->is_true || (res->is_str && res->s.s) || res->d)){
                // RHS undef and LHS false
                hts_expr_val_undef(res);
                res->d = 0;
            } else {
                res->is_true = res->d =
                    res->is_true || (res->is_str && res->s.s) || res->d ||
                    val.is_true  || (val.is_str  && val.s.s ) || val.d;
                res->is_str = 0;
            }
        } else {
            break;
        }
        hts_expr_val_free(&val);
    }

    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %r8
movq -0x38(%rbp), %r9
callq 0x2a100
cmpl $0x0, %eax
je 0x29d9e
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x2a0f5
jmp 0x29da0
leaq -0x60(%rbp), %rdi
xorl %esi, %esi
movl $0x28, %edx
callq 0x4250
movq -0x30(%rbp), %rax
movq (%rax), %rdi
callq 0x29c80
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x26, %eax
jne 0x29ef4
movq -0x28(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x26, %eax
jne 0x29ef4
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
addq $0x2, %rcx
movq -0x30(%rbp), %r8
leaq -0x60(%rbp), %r9
callq 0x2a100
cmpl $0x0, %eax
je 0x29e13
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x2a0f5
movq -0x38(%rbp), %rdi
callq 0x2a700
cmpl $0x0, %eax
je 0x29e2f
leaq -0x60(%rbp), %rdi
callq 0x2a700
cmpl $0x0, %eax
jne 0x29e49
movq -0x38(%rbp), %rdi
callq 0x2a750
movq -0x38(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, 0x20(%rax)
jmp 0x29eef
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x0, %eax
jne 0x29e88
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
je 0x29e6d
movq -0x38(%rbp), %rax
cmpq $0x0, 0x18(%rax)
jne 0x29e88
movq -0x38(%rbp), %rax
movsd 0x20(%rax), %xmm0
xorl %eax, %eax
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
movb %al, -0x61(%rbp)
jne 0x29e88
jp 0x29e88
jmp 0x29ec8
movsbl -0x5f(%rbp), %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x62(%rbp)
jne 0x29ec2
movsbl -0x60(%rbp), %eax
cmpl $0x0, %eax
je 0x29eab
movb $0x1, %al
cmpq $0x0, -0x48(%rbp)
movb %al, -0x62(%rbp)
jne 0x29ec2
movsd -0x40(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
setne %al
setp %cl
orb %cl, %al
movb %al, -0x62(%rbp)
movb -0x62(%rbp), %al
movb %al, -0x61(%rbp)
movb -0x61(%rbp), %cl
movzbl %cl, %eax
andl $0x1, %eax
cvtsi2sd %eax, %xmm0
movq -0x38(%rbp), %rax
movsd %xmm0, 0x20(%rax)
andb $0x1, %cl
movq -0x38(%rbp), %rax
movb %cl, 0x1(%rax)
movq -0x38(%rbp), %rax
movb $0x0, (%rax)
jmp 0x2a0e0
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x7c, %eax
jne 0x2a0dc
movq -0x28(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x7c, %eax
jne 0x2a0dc
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
addq $0x2, %rcx
movq -0x30(%rbp), %r8
leaq -0x60(%rbp), %r9
callq 0x2a100
cmpl $0x0, %eax
je 0x29f47
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x2a0f5
movq -0x38(%rbp), %rdi
callq 0x2a700
cmpl $0x0, %eax
jne 0x29f7d
leaq -0x60(%rbp), %rdi
callq 0x2a700
cmpl $0x0, %eax
jne 0x29f7d
movq -0x38(%rbp), %rdi
callq 0x2a750
movq -0x38(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, 0x20(%rax)
jmp 0x2a0da
movq -0x38(%rbp), %rdi
callq 0x2a700
cmpl $0x0, %eax
jne 0x29fce
movsbl -0x5f(%rbp), %eax
cmpl $0x0, %eax
jne 0x29fce
movsbl -0x60(%rbp), %eax
cmpl $0x0, %eax
je 0x29fa4
cmpq $0x0, -0x48(%rbp)
jne 0x29fce
movsd -0x40(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x29fce
jp 0x29fce
movq -0x38(%rbp), %rdi
callq 0x2a750
movq -0x38(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, 0x20(%rax)
jmp 0x2a0d8
leaq -0x60(%rbp), %rdi
callq 0x2a700
cmpl $0x0, %eax
jne 0x2a02e
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x0, %eax
jne 0x2a02e
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
je 0x2a000
movq -0x38(%rbp), %rax
cmpq $0x0, 0x18(%rax)
jne 0x2a02e
movq -0x38(%rbp), %rax
movsd 0x20(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x2a02e
jp 0x2a02e
movq -0x38(%rbp), %rdi
callq 0x2a750
movq -0x38(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, 0x20(%rax)
jmp 0x2a0d6
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x63(%rbp)
jne 0x2a0af
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
je 0x2a05c
movq -0x38(%rbp), %rcx
movb $0x1, %al
cmpq $0x0, 0x18(%rcx)
movb %al, -0x63(%rbp)
jne 0x2a0af
movq -0x38(%rbp), %rax
movsd 0x20(%rax), %xmm0
movb $0x1, %al
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
movb %al, -0x63(%rbp)
jne 0x2a0af
jp 0x2a0af
movsbl -0x5f(%rbp), %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x63(%rbp)
jne 0x2a0af
movsbl -0x60(%rbp), %eax
cmpl $0x0, %eax
je 0x2a098
movb $0x1, %al
cmpq $0x0, -0x48(%rbp)
movb %al, -0x63(%rbp)
jne 0x2a0af
movsd -0x40(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
setne %al
setp %cl
orb %cl, %al
movb %al, -0x63(%rbp)
movb -0x63(%rbp), %cl
movzbl %cl, %eax
andl $0x1, %eax
cvtsi2sd %eax, %xmm0
movq -0x38(%rbp), %rax
movsd %xmm0, 0x20(%rax)
andb $0x1, %cl
movq -0x38(%rbp), %rax
movb %cl, 0x1(%rax)
movq -0x38(%rbp), %rax
movb $0x0, (%rax)
jmp 0x2a0d8
jmp 0x2a0da
jmp 0x2a0de
jmp 0x2a0ee
jmp 0x2a0e0
leaq -0x60(%rbp), %rdi
callq 0x2a790
jmp 0x29da0
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x70, %rsp
popq %rbp
retq
nop