// File: /workspace/github_cpp_makefile_star2_O3/besm6[P]pascal-re/pascompl.cc
// Function: genFullExpr::genBoolAnd()
void genBoolAnd() {
        bool arg1Neg, arg2Neg;
        int64_t l5var3z, l5var4z, l5var5z, l5var6z, l5var7z;
        InsnList * l5ins8z;
        Word l5var9z;

        if (arg1Const) {
            if (arg1Val.ii)
              insnList = otherIns;
        } else if (arg2Const) {
            if (not arg2Val.ii)
                insnList = otherIns;
        } else {
            arg1Neg = insnList->regsused.has(16);
            arg2Neg = otherIns->regsused.has(16);
            l5var5z = int94z;
            int94z = int94z + 1;
            bool49z = false;
            l5var6z = arg1Neg + macro;
            l5var7z = arg2Neg + macro;
            if (insnList->ilm == il3) {
                l5var3z = insnList->ilf5.i;
            } else {
                l5var3z = 0;
                prepLoad();
            }
            if (otherIns->ilm == il3) {
                l5var4z = otherIns->ilf5.i;
            } else {
                l5var4z = 0;
            }
            l5var9z.m = (insnList->regsused + otherIns->regsused);
            if (l5var3z == 0) {
                if (l5var4z == 0) {
                    addInsnAndOffset(l5var6z, l5var5z);
                    l5ins8z = insnList;
                    insnList = otherIns;
                    prepLoad();
                    addInsnAndOffset(l5var7z, l5var5z);
                } else {
                    if (arg2Neg) {
                        addInsnAndOffset(l5var6z, l5var5z);
                        l5ins8z = insnList;
                        insnList = otherIns;
                        addInsnAndOffset(macro + 2,
                                         010000 * l5var5z + l5var4z);
                    } else {
                        addInsnAndOffset(l5var6z, l5var4z);
                        l5var5z = l5var4z;
                        l5ins8z = insnList;
                        insnList = otherIns;
                    }
                }
            } else {
                if (l5var4z == 0) {
                    if (arg1Neg) {
                        addInsnAndOffset(macro + 2,
                                         010000 * l5var5z + l5var3z);
                        l5ins8z = insnList;
                        insnList = otherIns;
                        prepLoad();
                        addInsnAndOffset(l5var7z, l5var5z);
                    } else {
                        l5ins8z = insnList;
                        insnList = otherIns;
                        prepLoad();
                        addInsnAndOffset(l5var7z, l5var3z);
                        l5var5z = l5var3z;
                    }
                } else {
                    if (arg1Neg) {
                        if (arg2Neg) {
                            addInsnAndOffset(macro + 2,
                                             010000 * l5var5z + l5var3z);
                            l5ins8z = insnList;
                            insnList = otherIns;
                            addInsnAndOffset(macro + 2,
                                             010000 * l5var5z + l5var4z);
                        } else {
                            addInsnAndOffset(macro + 2,
                                             010000 * l5var4z + l5var3z);
                            l5ins8z = insnList;
                            insnList = otherIns;
                            l5var5z = l5var4z;
                        }
                    } else {
                        l5ins8z = insnList;
                        insnList = otherIns;
                        l5var5z = l5var3z;
                        if (arg2Neg)
                            addInsnAndOffset(macro + 2,
                                             010000 * l5var3z + l5var4z);
                        else
                            addInsnAndOffset(macro + 3,
                                             010000 * l5var3z + l5var4z);
                    }
                }
            }
            insnList->regsused = l5var9z.m - Bits(16);
            l5ins8z->next->next = insnList->next2;
            insnList->next2 = l5ins8z->next2;
            insnList->ilm = il3;
            insnList->ilf5.i = l5var5z;
            bool49z = true;
        }
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rdi, %r14
cmpb $0x1, 0x8(%rdi)
jne 0x17341
cmpq $0x0, 0x18(%r14)
jne 0x17353
jmp 0x17671
cmpb $0x1, 0x9(%r14)
jne 0x17363
cmpq $0x0, 0x20(%r14)
jne 0x17671
movq 0x10(%r14), %rax
movq %rax, 0x4d74a(%rip)     # 0x64aa8
jmp 0x17671
movq 0x4d73e(%rip), %rcx     # 0x64aa8
movq 0x18(%rcx), %r13
xorl %r12d, %r12d
testl %r13d, %r13d
setns %r12b
movq 0x10(%r14), %rax
movq 0x18(%rax), %rdx
xorl %r15d, %r15d
movq %rdx, 0x20(%rsp)
testl %edx, %edx
setns %r15b
movq 0x4d5bb(%rip), %rdx     # 0x64950
movq %rdx, 0x18(%rsp)
incq %rdx
movq %rdx, 0x4d5ac(%rip)     # 0x64950
movb $0x0, 0x4d44f(%rip)     # 0x647fa
movl $0x1000001, %ebp        # imm = 0x1000001
cmpl $0x3, 0x20(%rcx)
jne 0x173c4
movq 0x28(%rcx), %rbx
shlq $0x17, %rbx
sarq $0x17, %rbx
jmp 0x173cf
callq 0x899b
movq 0x10(%r14), %rax
xorl %ebx, %ebx
xorq %rbp, %r12
xorq %rbp, %r15
cmpl $0x3, 0x20(%rax)
jne 0x17448
movq 0x28(%rax), %rbp
shlq $0x17, %rbp
movq %rbp, %rdx
sarq $0x17, %rdx
movq 0x4d6b7(%rip), %rcx     # 0x64aa8
movq %rcx, 0x10(%rsp)
movq 0x18(%rcx), %rcx
orq 0x18(%rax), %rcx
movq %rcx, 0x8(%rsp)
testq %rbx, %rbx
je 0x17466
testq %rbp, %rbp
je 0x174ac
testl %r13d, %r13d
js 0x17507
movq %rbx, %rcx
shlq $0xc, %rcx
addq %rcx, %rdx
movq %rax, 0x4d67d(%rip)     # 0x64aa8
cmpl $0x0, 0x20(%rsp)
movq 0x8(%rsp), %rbp
movq %rdx, %r14
js 0x175cc
movl $0x1000003, %edi        # imm = 0x1000003
jmp 0x175d1
movq 0x4d659(%rip), %rcx     # 0x64aa8
movq %rcx, 0x10(%rsp)
movq 0x18(%rcx), %rbp
orq 0x18(%rax), %rbp
testq %rbx, %rbx
jne 0x174b1
jmp 0x1754d
testq %rbp, %rbp
je 0x17548
movq %rdx, %rbx
movq %r12, %rdi
callq 0x88f7
movq 0x4d627(%rip), %r13     # 0x64aa8
movq (%r13), %rax
cmpl $0x0, 0x20(%rsp)
movq 0x8(%rsp), %rbp
js 0x17594
movq %rbx, %r12
movq %rbx, 0x18(%rax)
movq 0x10(%r14), %rax
movq %rax, 0x4d601(%rip)     # 0x64aa8
jmp 0x1762c
movq 0x8(%rsp), %rbp
testl %r13d, %r13d
js 0x174dd
movq %rax, 0x4d5eb(%rip)     # 0x64aa8
callq 0x899b
movq %r15, %rdi
callq 0x88f7
movq 0x4d5d7(%rip), %rax     # 0x64aa8
movq (%rax), %rcx
movq %rbx, 0x18(%rcx)
jmp 0x175e4
movq 0x18(%rsp), %r12
movq %r12, %rax
shlq $0xc, %rax
addq %rax, %rbx
movl $0x1000002, %edi        # imm = 0x1000002
callq 0x88f7
movq 0x4d5ab(%rip), %r13     # 0x64aa8
movq (%r13), %rax
movq %rbx, 0x18(%rax)
jmp 0x17569
movq %rdx, %r15
movl $0x1000002, %edi        # imm = 0x1000002
callq 0x88f7
movq 0x4d58d(%rip), %r13     # 0x64aa8
movq (%r13), %rax
cmpl $0x0, 0x20(%rsp)
js 0x175ee
sarq $0xb, %rbp
addq %rbx, %rbp
movq %rbp, 0x18(%rax)
movq 0x10(%r14), %rax
movq %rax, 0x4d568(%rip)     # 0x64aa8
movq %r15, %r12
jmp 0x17627
movq 0x8(%rsp), %rbp
movq %r12, %rdi
callq 0x88f7
movq 0x4d54c(%rip), %r13     # 0x64aa8
movq (%r13), %rax
movq 0x18(%rsp), %r12
movq %r12, 0x18(%rax)
movq 0x10(%r14), %rax
movq %rax, 0x4d534(%rip)     # 0x64aa8
callq 0x899b
movq %r15, %rdi
callq 0x88f7
movq 0x4d520(%rip), %rax     # 0x64aa8
movq (%rax), %rcx
movq %r12, 0x18(%rcx)
jmp 0x1762c
movq 0x18(%rsp), %r12
movq %r12, 0x18(%rax)
movq 0x10(%r14), %rax
movq %rax, 0x4d500(%rip)     # 0x64aa8
movq %r12, %rax
shlq $0xc, %rax
addq %rax, %rbx
movl $0x1000002, %edi        # imm = 0x1000002
callq 0x88f7
movq 0x4d4e5(%rip), %rax     # 0x64aa8
movq (%rax), %rcx
movq %rbx, 0x18(%rcx)
jmp 0x1762c
movl $0x1000002, %edi        # imm = 0x1000002
callq 0x88f7
movq 0x4d4cb(%rip), %rax     # 0x64aa8
movq (%rax), %rcx
movq %r14, 0x18(%rcx)
movq %rbx, %r12
movq 0x10(%rsp), %r13
jmp 0x1762c
movq 0x18(%rsp), %r12
movq %r12, %rcx
shlq $0xc, %rcx
addq %rcx, %rbx
movq %rbx, 0x18(%rax)
movq 0x10(%r14), %rax
movq %rax, 0x4d49c(%rip)     # 0x64aa8
addq %rcx, %r15
movl $0x1000002, %edi        # imm = 0x1000002
callq 0x88f7
movq 0x4d488(%rip), %rax     # 0x64aa8
movq (%rax), %rcx
movq %r15, 0x18(%rcx)
movq 0x8(%rsp), %rbp
movabsq $0xffff7fffffff, %rcx   # imm = 0xFFFF7FFFFFFF
andq %rbp, %rcx
movq %rcx, 0x18(%rax)
movq 0x8(%rax), %rax
movq (%r13), %rcx
movq %rax, (%rcx)
movq 0x8(%r13), %rax
movq 0x4d455(%rip), %rdi     # 0x64aa8
movq %rax, 0x8(%rdi)
movl $0x3, 0x20(%rdi)
addq $0x28, %rdi
movq %r12, %rsi
callq 0x3c48
movb $0x1, 0x4d189(%rip)     # 0x647fa
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq