// File: /workspace/github_cpp_makefile_star2_O2/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
pushq %rax
movq %rdi, %r14
cmpb $0x1, 0x8(%rdi)
jne 0x141f2
cmpq $0x0, 0x18(%r14)
jne 0x14204
jmp 0x14434
cmpb $0x1, 0x9(%r14)
jne 0x14214
cmpq $0x0, 0x20(%r14)
jne 0x14434
movq 0x10(%r14), %rax
movq %rax, 0x4f899(%rip)     # 0x63aa8
jmp 0x14434
movq 0x4f88d(%rip), %rcx     # 0x63aa8
movq 0x18(%rcx), %r8
xorl %edi, %edi
testl %r8d, %r8d
setns %r9b
movq 0x10(%r14), %rax
movq 0x18(%rax), %rsi
xorl %r13d, %r13d
testl %esi, %esi
setns %r13b
movq 0x4f710(%rip), %rdx     # 0x63950
movq %rdx, (%rsp)
incq %rdx
movq %rdx, 0x4f702(%rip)     # 0x63950
movb $0x0, 0x4f5a5(%rip)     # 0x637fa
cmpl $0x3, 0x20(%rcx)
jne 0x14269
movq 0x28(%rcx), %r12
shlq $0x17, %r12
sarq $0x17, %r12
jmp 0x14289
movq %rsi, %rbx
movq %r8, %r15
movl %r9d, %ebp
callq 0x79ed
movl %ebp, %r9d
movq %r15, %r8
xorl %edi, %edi
movq %rbx, %rsi
movq 0x10(%r14), %rax
xorl %r12d, %r12d
movl $0x1000001, %ecx        # imm = 0x1000001
cmpl $0x3, 0x20(%rax)
jne 0x142a2
movq 0x28(%rax), %r15
shlq $0x17, %r15
sarq $0x17, %r15
jmp 0x142a5
xorl %r15d, %r15d
xorq %rcx, %r13
movq 0x4f7f9(%rip), %rbp     # 0x63aa8
movq 0x18(%rbp), %rbx
orq 0x18(%rax), %rbx
testq %r12, %r12
je 0x142e9
testq %r15, %r15
je 0x14305
testl %r8d, %r8d
js 0x14325
movq %r12, %rcx
shlq $0xc, %rcx
addq %rcx, %r15
movq %rax, 0x4f7d1(%rip)     # 0x63aa8
testl %esi, %esi
js 0x143db
movl $0x1000003, %edi        # imm = 0x1000003
jmp 0x143e0
movb %r9b, %dil
xorq %rcx, %rdi
testq %r15, %r15
je 0x14357
testl %esi, %esi
movq (%rsp), %r12
js 0x14382
movq %r15, %rsi
jmp 0x14338
testl %r8d, %r8d
jns 0x1436e
movq (%rsp), %rcx
movq %rcx, %rax
shlq $0xc, %rax
addq %rax, %r12
movl $0x1000002, %edi        # imm = 0x1000002
movq %r12, %rsi
movq %rcx, %r12
jmp 0x1435e
testl %esi, %esi
js 0x143a8
movq %r15, %rsi
shlq $0xc, %rsi
addq %r12, %rsi
movl $0x1000002, %edi        # imm = 0x1000002
callq 0x798d
movq 0x4f764(%rip), %rbp     # 0x63aa8
movq 0x10(%r14), %rax
movq %rax, 0x4f759(%rip)     # 0x63aa8
movq %r15, %r12
jmp 0x143e8
movq (%rsp), %r12
movq %r12, %rsi
callq 0x798d
movq 0x4f73e(%rip), %rbp     # 0x63aa8
movq 0x10(%r14), %rax
movq %rax, 0x4f733(%rip)     # 0x63aa8
callq 0x79ed
movq %r13, %rdi
movq %r12, %rsi
jmp 0x143e3
movq %r12, %rsi
callq 0x798d
movq 0x4f717(%rip), %rbp     # 0x63aa8
movq 0x10(%r14), %rax
movq %rax, 0x4f70c(%rip)     # 0x63aa8
movq %r12, %rax
shlq $0xc, %rax
addq %rax, %r15
jmp 0x143db
movq (%rsp), %rax
movq %rax, %r13
shlq $0xc, %r13
addq %r13, %r12
movl $0x1000002, %edi        # imm = 0x1000002
movq %r12, %rsi
movq %rax, %r12
callq 0x798d
movq 0x4f6db(%rip), %rbp     # 0x63aa8
movq 0x10(%r14), %rax
movq %rax, 0x4f6d0(%rip)     # 0x63aa8
addq %r13, %r15
movl $0x1000002, %edi        # imm = 0x1000002
movq %r15, %rsi
callq 0x798d
movabsq $0xffff7fffffff, %rax   # imm = 0xFFFF7FFFFFFF
andq %rax, %rbx
movq 0x4f6ac(%rip), %rax     # 0x63aa8
movq %rbx, 0x18(%rax)
movq 0x8(%rax), %rax
movq (%rbp), %rcx
movq %rax, (%rcx)
movq 0x8(%rbp), %rax
movq 0x4f692(%rip), %rdi     # 0x63aa8
movq %rax, 0x8(%rdi)
movl $0x3, 0x20(%rdi)
addq $0x28, %rdi
movq %r12, %rsi
callq 0x381c
movb $0x1, 0x4f3c6(%rip)     # 0x637fa
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop