// File: besm6[P]pascal-re/pascompl.cc
// Function: genComparison()
void genComparison()
{
    bool hasEq;
    Bitset l5set2z;
    int64_t mode, size;

    int64_t &l3int3z = formOperator::super.back()->l3int3z;
    Operator &curOP = genFullExpr::super.back()->curOP;
    bool &arg1Const = genFullExpr::super.back()->arg1Const;
    bool &arg2Const = genFullExpr::super.back()->arg2Const;
    Word &arg1Val = genFullExpr::super.back()->arg1Val;
    Word &arg2Val = genFullExpr::super.back()->arg2Val;
    InsnList * &otherIns = genFullExpr::super.back()->otherIns;
    InsnList * &saved = formOperator::super.back()->saved;
    int64_t &nextInsn = formOperator::super.back()->nextInsn;
    int64_t &work = genFullExpr::super.back()->work;
    TypesPtr &l2typ13z = programme::super.back()->l2typ13z;

    l3int3z = curOP - NEOP;
    hasEq = l3int3z & 1;
    if (l3int3z == 6) {     /* IN */
        if (arg1Const) {
            if (arg2Const) {
                insnList->ilf5.ii = arg2Val.m.has(arg1Val.i);
            } else {
                l5set2z = Bits(arg1Val.i);
                if (l5set2z == Bits()) {
                    insnList->ilf5.ii = false;
                } else {
                    insnList = otherIns;
                    prepLoad();
                    curVal.m = l5set2z;
                    addToInsnList(KAAX+I8 + getFCSToffset());
                    insnList->ilf5.i = 0;
                    insnList->ilm = il3;
                }
            } /* 7412 */
        } else { /* 7413 */
            saved = insnList;
            insnList = otherIns;
            otherIns = saved;
            nextInsn = 66;      /* P/IN */
            genFullExpr::super.back()->genHelper();
            insnList->ilm = il2;
        }
    } else { /* 7423 */
        if (hasEq)
            l3int3z = l3int3z - 1;
        l2typ13z = insnList->typ;
        curVarKind = l2typ13z->k;
        size = l2typ13z->size;
        if (l2typ13z == RealType) {
            if (fuzzReals)
                work = 0;
            else
                work = 1;
        } else if (curVarKind == kindSet)
            work = 2;
        else if (curVarKind == kindScalar || curVarKind == kindRange)
            work = 3;
        else {
            work = 4;
        }
        if (size != 1) {
            genFullExpr::super.back()->prepMultiWord();
            addInsnAndOffset(KVTM+I11, 1 - size);
            addToInsnList(getHelperProc(89 + l3int3z)); /* P/EQ */
            insnList->ilm = il2;
            hasEq = not hasEq;
        } else if (l3int3z == 0) {
            if (work == 0) {
                nextInsn = 15;         /* P/CP */
L7475:
                genFullExpr::super.back()->genHelper();
                insnList->ilm = il2;
            } else { /* 7501 */
                nextInsn = InsnTemp[AEX];
                genFullExpr::super.back()->tryFlip(true);
L7504:
                insnList->ilm = il3;
                insnList->ilf5.i = 0;
            }
        } else { /* 7510 */
            switch (work) {
            case 0: { /*7511*/
                nextInsn = 16;         /* P/AB */
                goto L7475;
            } break;
            case 1: { /*7513*/
                mode = 3;
L7514:
                nextInsn = InsnTemp[SUB];
                genFullExpr::super.back()->tryFlip(false);
                insnList->next->mode = mode;
                if (mode == 3) {
                    addToInsnList(KNTR+023);
                    insnList->next->mode = 2;
                }
                goto L7504;
            } break;
            case 2: { /*7527*/
                nextInsn = InsnTemp[AAX];
L7530:
                prepLoad();
                addToInsnList(KAEX+ALLONES);
                genFullExpr::super.back()->tryFlip(true);
                goto L7504;
            } break;
            case 3: { /*7536*/
                mode = 1;
                goto L7514;
            } break;
            case 4: { /*7540*/
                nextInsn = InsnTemp[ARX];
                goto L7530;
            } break;
            }; /* case */
        }; /* 7554 */
        insnList->regsused = insnList->regsused - Bits(16);
        if (hasEq)
            genFullExpr::super.back()->negateCond();
    } /* 7562 */
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb0, %rsp
leaq 0xca406(%rip), %rdi     # 0xd8a78
callq 0x203f0
movq (%rax), %rax
addq $0x10, %rax
movq %rax, -0x28(%rbp)
leaq 0xca407(%rip), %rdi     # 0xd8a90
callq 0x203b0
movq (%rax), %rax
addq $0x28, %rax
movq %rax, -0x30(%rbp)
leaq 0xca3f0(%rip), %rdi     # 0xd8a90
callq 0x203b0
movq (%rax), %rax
addq $0x8, %rax
movq %rax, -0x38(%rbp)
leaq 0xca3d9(%rip), %rdi     # 0xd8a90
callq 0x203b0
movq (%rax), %rax
addq $0x9, %rax
movq %rax, -0x40(%rbp)
leaq 0xca3c2(%rip), %rdi     # 0xd8a90
callq 0x203b0
movq (%rax), %rax
addq $0x18, %rax
movq %rax, -0x48(%rbp)
leaq 0xca3ab(%rip), %rdi     # 0xd8a90
callq 0x203b0
movq (%rax), %rax
addq $0x20, %rax
movq %rax, -0x50(%rbp)
leaq 0xca394(%rip), %rdi     # 0xd8a90
callq 0x203b0
movq (%rax), %rax
addq $0x10, %rax
movq %rax, -0x58(%rbp)
leaq 0xca365(%rip), %rdi     # 0xd8a78
callq 0x203f0
movq (%rax), %rax
addq $0x58, %rax
movq %rax, -0x60(%rbp)
leaq 0xca34e(%rip), %rdi     # 0xd8a78
callq 0x203f0
movq (%rax), %rax
addq $0x18, %rax
movq %rax, -0x68(%rbp)
leaq 0xca34f(%rip), %rdi     # 0xd8a90
callq 0x203b0
movq (%rax), %rax
addq $0x30, %rax
movq %rax, -0x70(%rbp)
leaq 0xca2d8(%rip), %rdi     # 0xd8a30
callq 0x1e890
movq (%rax), %rax
addq $0x58, %rax
movq %rax, -0x78(%rbp)
movq -0x30(%rbp), %rax
movl (%rax), %eax
subl $0x8, %eax
movslq %eax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq (%rax), %rax
andq $0x1, %rax
cmpq $0x0, %rax
setne %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movq -0x28(%rbp), %rax
cmpq $0x6, (%rax)
jne 0xe8f4
movq -0x38(%rbp), %rax
testb $0x1, (%rax)
je 0xe898
movq -0x40(%rbp), %rax
testb $0x1, (%rax)
je 0xe7f0
movq -0x50(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x48(%rbp), %rdi
callq 0x1dfb0
movq -0xa0(%rbp), %rdi
movq %rax, %rsi
callq 0x1e5f0
andb $0x1, %al
movzbl %al, %eax
movl %eax, %ecx
movq 0x71981(%rip), %rax     # 0x80168
movq %rcx, 0x28(%rax)
jmp 0xe896
movq -0x48(%rbp), %rdi
callq 0x1dfb0
movq %rax, %rdi
callq 0x48e0
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
movq %rax, -0x10(%rbp)
callq 0x48c0
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rsi
leaq -0x10(%rbp), %rdi
callq 0x1e420
testb $0x1, %al
jne 0xe82f
jmp 0xe840
movq 0x71932(%rip), %rax     # 0x80168
movq $0x0, 0x28(%rax)
jmp 0xe894
movq -0x58(%rbp), %rax
movq (%rax), %rax
movq %rax, 0x7191a(%rip)     # 0x80168
callq 0xbd10
movq -0x10(%rbp), %rax
movq %rax, 0x71892(%rip)     # 0x800f0
callq 0x8580
movq %rax, %rdi
addq $0x809000, %rdi         # imm = 0x809000
callq 0xbbb0
movq 0x718ef(%rip), %rdi     # 0x80168
addq $0x28, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4ad0
movq 0x718db(%rip), %rax     # 0x80168
movl $0x3, 0x20(%rax)
jmp 0xe896
jmp 0xe8ef
movq 0x718c9(%rip), %rcx     # 0x80168
movq -0x60(%rbp), %rax
movq %rcx, (%rax)
movq -0x58(%rbp), %rax
movq (%rax), %rax
movq %rax, 0x718b4(%rip)     # 0x80168
movq -0x60(%rbp), %rax
movq (%rax), %rcx
movq -0x58(%rbp), %rax
movq %rcx, (%rax)
movq -0x68(%rbp), %rax
movq $0x42, (%rax)
leaq 0xca1bc(%rip), %rdi     # 0xd8a90
callq 0x203b0
movq (%rax), %rdi
callq 0x20ad0
movq 0x71880(%rip), %rax     # 0x80168
movl $0x2, 0x20(%rax)
jmp 0xec17
testb $0x1, -0x1(%rbp)
je 0xe90c
movq -0x28(%rbp), %rax
movq (%rax), %rcx
subq $0x1, %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq 0x71855(%rip), %rax     # 0x80168
movq 0x10(%rax), %rcx
movq -0x78(%rbp), %rax
movq %rcx, (%rax)
movq -0x78(%rbp), %rax
movq (%rax), %rax
movl 0x10(%rax), %eax
movl %eax, 0x7169a(%rip)     # 0x7ffc8
movq -0x78(%rbp), %rax
movq (%rax), %rax
movq (%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x78(%rbp), %rax
movq (%rax), %rax
cmpq 0x71766(%rip), %rax     # 0x800b0
jne 0xe96f
testb $0x1, 0x716e8(%rip)     # 0x8003b
je 0xe962
movq -0x70(%rbp), %rax
movq $0x0, (%rax)
jmp 0xe96d
movq -0x70(%rbp), %rax
movq $0x1, (%rax)
jmp 0xe9b3
cmpl $0x4, 0x71652(%rip)     # 0x7ffc8
jne 0xe985
movq -0x70(%rbp), %rax
movq $0x2, (%rax)
jmp 0xe9b1
cmpl $0x1, 0x7163c(%rip)     # 0x7ffc8
je 0xe997
cmpl $0x2, 0x71633(%rip)     # 0x7ffc8
jne 0xe9a4
movq -0x70(%rbp), %rax
movq $0x3, (%rax)
jmp 0xe9af
movq -0x70(%rbp), %rax
movq $0x4, (%rax)
jmp 0xe9b1
jmp 0xe9b3
cmpq $0x1, -0x20(%rbp)
je 0xea16
leaq 0xca0cf(%rip), %rdi     # 0xd8a90
callq 0x203b0
movq (%rax), %rdi
callq 0x209b0
movl $0x1, %esi
subq -0x20(%rbp), %rsi
movl $0xba0000, %edi         # imm = 0xBA0000
callq 0xbc40
movq -0x28(%rbp), %rax
movq (%rax), %rdi
addq $0x59, %rdi
callq 0x80d0
movq %rax, %rdi
callq 0xbbb0
movq 0x71768(%rip), %rax     # 0x80168
movl $0x2, 0x20(%rax)
movb -0x1(%rbp), %al
xorb $-0x1, %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0xebac
movq -0x28(%rbp), %rax
cmpq $0x0, (%rax)
jne 0xeaab
movq -0x70(%rbp), %rax
cmpq $0x0, (%rax)
jne 0xea5d
movq -0x68(%rbp), %rax
movq $0xf, (%rax)
leaq 0xca050(%rip), %rdi     # 0xd8a90
callq 0x203b0
movq (%rax), %rdi
callq 0x20ad0
movq 0x71714(%rip), %rax     # 0x80168
movl $0x2, 0x20(%rax)
jmp 0xeaa6
movq 0x7601c(%rip), %rcx     # 0x84a80
movq -0x68(%rbp), %rax
movq %rcx, (%rax)
leaq 0xca01e(%rip), %rdi     # 0xd8a90
callq 0x203b0
movq (%rax), %rdi
movl $0x1, %esi
callq 0x20bd0
movq 0x716dd(%rip), %rax     # 0x80168
movl $0x3, 0x20(%rax)
movq 0x716cf(%rip), %rdi     # 0x80168
addq $0x28, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4ad0
jmp 0xebaa
movq -0x70(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xa8(%rbp)
subq $0x4, %rax
ja 0xeba8
movq -0xa8(%rbp), %rax
leaq 0x22a47(%rip), %rcx     # 0x31518
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x68(%rbp), %rax
movq $0x10, (%rax)
jmp 0xea39
movq $0x3, -0x18(%rbp)
movq 0x75f5f(%rip), %rcx     # 0x84a58
movq -0x68(%rbp), %rax
movq %rcx, (%rax)
leaq 0xc9f89(%rip), %rdi     # 0xd8a90
callq 0x203b0
movq (%rax), %rdi
xorl %esi, %esi
callq 0x20bd0
movq -0x18(%rbp), %rcx
movq 0x71647(%rip), %rax     # 0x80168
movq (%rax), %rax
movq %rcx, 0x8(%rax)
cmpq $0x3, -0x18(%rbp)
jne 0xeb4b
movl $0x1f013, %edi          # imm = 0x1F013
callq 0xbbb0
movq 0x71628(%rip), %rax     # 0x80168
movq (%rax), %rax
movq $0x2, 0x8(%rax)
jmp 0xea84
movq 0x75f21(%rip), %rcx     # 0x84a78
movq -0x68(%rbp), %rax
movq %rcx, (%rax)
callq 0xbd10
movl $0x10a014, %edi         # imm = 0x10A014
callq 0xbbb0
leaq 0xc9f1c(%rip), %rdi     # 0xd8a90
callq 0x203b0
movq (%rax), %rdi
movl $0x1, %esi
callq 0x20bd0
jmp 0xea84
movq $0x1, -0x18(%rbp)
jmp 0xeaf2
movq 0x75ee9(%rip), %rcx     # 0x84a88
movq -0x68(%rbp), %rax
movq %rcx, (%rax)
jmp 0xeb5e
jmp 0xebaa
jmp 0xebac
movq 0x715b5(%rip), %rax     # 0x80168
addq $0x18, %rax
movq %rax, -0xb0(%rbp)
movl $0x10, %edi
callq 0x48e0
movq -0xb0(%rbp), %rdi
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rsi
callq 0x1e4e0
movq %rax, -0x90(%rbp)
movq 0x71578(%rip), %rax     # 0x80168
movq -0x90(%rbp), %rcx
movq %rcx, 0x18(%rax)
testb $0x1, -0x1(%rbp)
je 0xec15
leaq 0xc9e88(%rip), %rdi     # 0xd8a90
callq 0x203b0
movq (%rax), %rdi
callq 0x20e10
jmp 0xec17
addq $0xb0, %rsp
popq %rbp
retq