// File: /workspace/github_cpp_makefile_star2_O1/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 0x16ff1
cmpq $0x0, 0x18(%r14)
jne 0x17003
jmp 0x172bc
cmpb $0x1, 0x9(%r14)
jne 0x17013
cmpq $0x0, 0x20(%r14)
jne 0x172bc
movq 0x10(%r14), %rax
movq %rax, 0x4daaa(%rip)     # 0x64ab8
jmp 0x172bc
movq 0x4da9e(%rip), %rax     # 0x64ab8
movq 0x18(%rax), %r13
xorl %r12d, %r12d
testl %r13d, %r13d
setns %sil
movq 0x10(%r14), %rcx
movq 0x18(%rcx), %rcx
xorl %r15d, %r15d
movq %rcx, 0x18(%rsp)
testl %ecx, %ecx
setns %r15b
movq 0x4d91b(%rip), %rcx     # 0x64960
movq %rcx, 0x8(%rsp)
incq %rcx
movq %rcx, 0x4d90c(%rip)     # 0x64960
movb $0x0, 0x4d7af(%rip)     # 0x6480a
cmpl $0x3, 0x20(%rax)
jne 0x1706f
movq 0x28(%rax), %rbp
shlq $0x17, %rbp
sarq $0x17, %rbp
jmp 0x1707a
movl %esi, %ebx
callq 0x8989
movl %ebx, %esi
xorl %ebp, %ebp
movl $0x1000001, %ecx        # imm = 0x1000001
movq 0x10(%r14), %rax
cmpl $0x3, 0x20(%rax)
jne 0x17097
movq 0x28(%rax), %rbx
shlq $0x17, %rbx
sarq $0x17, %rbx
jmp 0x17099
xorl %ebx, %ebx
xorq %rcx, %r15
movq 0x4da15(%rip), %rdx     # 0x64ab8
movq %rdx, 0x10(%rsp)
movq 0x18(%rdx), %rdx
orq 0x18(%rax), %rdx
movq %rdx, 0x20(%rsp)
testq %rbp, %rbp
je 0x170ee
testq %rbx, %rbx
je 0x17126
testl %r13d, %r13d
js 0x17156
movq %rbp, %rcx
shlq $0xc, %rcx
addq %rcx, %rbx
movq %rax, 0x4d9df(%rip)     # 0x64ab8
cmpl $0x0, 0x18(%rsp)
js 0x17210
movl $0x1000003, %edi        # imm = 0x1000003
jmp 0x17215
movb %sil, %r12b
xorq %rcx, %r12
movq %r12, %rdi
callq 0x88e5
movq 0x4d9b5(%rip), %r13     # 0x64ab8
movq (%r13), %rax
testq %rbx, %rbx
je 0x17197
cmpl $0x0, 0x18(%rsp)
movq 0x8(%rsp), %r12
js 0x171a2
movq %rbx, 0x18(%rax)
jmp 0x17184
testl %r13d, %r13d
js 0x171c0
movq %rax, 0x4d982(%rip)     # 0x64ab8
callq 0x8989
movq %r15, %rdi
callq 0x88e5
movq 0x4d96e(%rip), %rax     # 0x64ab8
movq (%rax), %rax
movq %rbp, 0x18(%rax)
jmp 0x17228
movl $0x1000002, %edi        # imm = 0x1000002
callq 0x88e5
movq 0x4d951(%rip), %r13     # 0x64ab8
movq (%r13), %rax
cmpl $0x0, 0x18(%rsp)
js 0x17232
movq %rbx, %rcx
shlq $0xc, %rcx
addq %rbp, %rcx
movq %rcx, 0x18(%rax)
movq 0x10(%r14), %rax
movq %rax, 0x4d929(%rip)     # 0x64ab8
movq %rbx, %r12
jmp 0x1726b
movq 0x8(%rsp), %r12
movq %r12, 0x18(%rax)
jmp 0x171e8
movq %r12, 0x18(%rax)
movq 0x10(%r14), %rax
movq %rax, 0x4d907(%rip)     # 0x64ab8
movq %r12, %rax
shlq $0xc, %rax
addq %rax, %rbx
jmp 0x17253
movq 0x8(%rsp), %r12
movq %r12, %rax
shlq $0xc, %rax
addq %rax, %rbp
movl $0x1000002, %edi        # imm = 0x1000002
callq 0x88e5
movq 0x4d8d8(%rip), %r13     # 0x64ab8
movq (%r13), %rax
movq %rbp, 0x18(%rax)
movq 0x10(%r14), %rax
movq %rax, 0x4d8c5(%rip)     # 0x64ab8
callq 0x8989
movq %r15, %rdi
callq 0x88e5
movq 0x4d8b1(%rip), %rax     # 0x64ab8
movq (%rax), %rax
movq %r12, 0x18(%rax)
jmp 0x1726b
movl $0x1000002, %edi        # imm = 0x1000002
callq 0x88e5
movq 0x4d897(%rip), %rax     # 0x64ab8
movq (%rax), %rax
movq %rbx, 0x18(%rax)
movq %rbp, %r12
movq 0x10(%rsp), %r13
jmp 0x1726b
movq 0x8(%rsp), %r12
movq %r12, %rcx
shlq $0xc, %rcx
addq %rcx, %rbp
movq %rbp, 0x18(%rax)
movq 0x10(%r14), %rax
movq %rax, 0x4d868(%rip)     # 0x64ab8
addq %rcx, %rbx
movl $0x1000002, %edi        # imm = 0x1000002
callq 0x88e5
movq 0x4d854(%rip), %rax     # 0x64ab8
movq (%rax), %rax
movq %rbx, 0x18(%rax)
movabsq $0xffff7fffffff, %rax   # imm = 0xFFFF7FFFFFFF
movq 0x20(%rsp), %rcx
andq %rax, %rcx
movq 0x4d834(%rip), %rax     # 0x64ab8
movq %rcx, 0x18(%rax)
movq 0x8(%rax), %rax
movq (%r13), %rcx
movq %rax, (%rcx)
movq 0x8(%r13), %rax
movq 0x4d81a(%rip), %rdi     # 0x64ab8
movq %rax, 0x8(%rdi)
movl $0x3, 0x20(%rdi)
addq $0x28, %rdi
movq %r12, %rsi
callq 0x3bf2
movb $0x1, 0x4d54e(%rip)     # 0x6480a
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop