// File: /workspace/github_cpp_makefile_star2_O2/besm6[P]pascal-re/pascompl.cc
// Function: formOperator::formOperator(OpGen)
formOperator::formOperator(OpGen op)
{ /* formOperator */
    super.push_back(this);
    l3bool13z = true;
    if ((errors and (op != SETREG)) or curExpr == NULL)
        return;
    if (op != LOOPCOND &&
        op != STRUCTASSN &&
        op != MKINT &&
        op != FILEINIT &&
        op!=PCKUNPCK)
        (void) genFullExpr(curExpr);
    switch (op) {
    case APPLYEXPR:
        genOneOp();
        break;
    case SETREG: {
        l3int3z = insnCount();
        l3var5z = new Expr;
        l3var5z->expr1 = expr63z;
        expr63z = l3var5z;
        l3var5z->op = NOOP;
        switch (insnList->st) {
        case st0: {
            if (l3int3z == 0)  {
                l3int2z = 14;
            } else {
                l3var10z.m = set148z * set147z;
                if (l3var10z.m != Bits()) {
                    l3int2z = minel(l3var10z.m);
                } else {
                    l3int2z = 14;
                }
                if (l3int3z != 1) {
                    (void) setAddrTo(l3int2z);
                    addToInsnList(KITA + l3int2z);
                    P5117(op37);
                } else if (l3int2z != 14) {
                    (void) setAddrTo(l3int2z);
                    genOneOp();
                }
                l3var11z.m = Bits(l3int2z) - Bits(14);
                regsUsed = regsUsed - l3var11z.m;
                set147z = set147z - l3var11z.m;
                set146z = set146z + l3var11z.m;
            }
            curVal.i = l3int2z;
            l3var5z->val = curVal;
        } break;
        case st1: {
            curVal.i = 14;
            l3var5z->val = curVal;
        } break;
        case st2:
            error(errVarTooComplex);
            break;
        } /* case */
        l3var5z->expr2 = curExpr;
    } break; /* SETREG */
    case gen0: {
        prepLoad();
        if (insnCount() > 1)
            P5117(op36);
    } break;
    case STORE: {
        prepStore();
        genOneOp();
    } break;
    case LOOPCOND: {
        curInsnTemplate = curVal.i;
        (void) formOperator(LOAD);
        curInsnTemplate = InsnTemp[XTA];
    } break;
    case ADDRTOR9: {
        if (insnList->st != st0)
            error(errVarTooComplex);
        setAddrTo(9);
        genOneOp();
    } break;
    case STRUCTASSN: {
        l3int1z = curVal.i;
        (void) genFullExpr(curExpr);
        prepLoad();
        if (insnList->regsused.has(9))
            error(errVarTooComplex);
        genOneOp();
        form1Insn(KATX+I9 + l3int1z);
    } break;
    case ADDRTOR12: {
        (void) setAddrTo(12);
        genOneOp();
    } break;
    case MKINT: {
        curVal.i = curVal.ii;
        form1Insn(KXTA+I8 + getFCSToffset());
    } break;
    case MKPUSH: {
        prepLoad();
        addxToInsnList(macro + mcPUSH);
        genOneOp();
    } break;
    case gen11: case gen12: {
        setAddrTo(11);
        if (op == gen12)
            addxToInsnList(macro + mcPUSH);
        genOneOp();
        regsUsed = regsUsed + Bits(12);
    } break;
    case FILEACCESS: {
        setAddrTo(12);
        genOneOp();
        formAndAlign(jumpTarget);
    } break;
    case FILEINIT:
        formFileInit();
        break;
    case LOAD: {
        prepLoad();
        genOneOp();
    } break;
    case CONDJUMP:
        l3bool9z = jumpTarget == 0;
        l3int3z = jumpTarget;
        if (insnList->ilm == ilCONST) {
            if (insnList->ilf5.ii) {
                jumpTarget = 0;
            } else {
                if (l3bool9z) {
                    formJump(jumpTarget);
                } else {
                    form1Insn(InsnTemp[UJ] + jumpTarget);
                }
            }
        } else {
            l3var8z.ii = (insnList->regsused.has(16));
            if ((insnList->ilm == il3) and
                (insnList->ilf5.i != 0)) {
                genOneOp();
                if (l3var8z.ii) {
                    if (l3bool9z)
                        formJump(l3int3z);
                    else
                        form1Insn(InsnTemp[UJ] + l3int3z);
                    P0715(0, jumpTarget);
                    jumpTarget = l3int3z;
                } else {
                    if (not l3bool9z) {
                        if (not putLeft)
                            padToLeft();
                        P0715(l3int3z, jumpTarget);
                    }
                }
            } else {
                if (insnList->ilm == il1) {
                    bool49z = false;
                    prepLoad();
                    bool49z = true;
                }
                genOneOp();
                if (l3var8z.ii)
                    nextInsn = InsnTemp[U1A];
                else
                    nextInsn = InsnTemp[UZA];
                if (l3bool9z) {
                    jumpType = nextInsn;
                    formJump(l3int3z);
                    jumpType = InsnTemp[UJ];
                    jumpTarget = l3int3z;
                } else {
                    form1Insn(nextInsn + l3int3z);
                }
            }
        }
        break; /* CONDJUMP */
    case PCKUNPCK: {
        l3var5z = curExpr;
        curExpr = curExpr->expr1;
        (void) formOperator(gen11);
        genFullExpr(l3var5z->expr2);
        if (insnList->regsused.has(11))
            error(44); /* errIncorrectUsageOfStandProcOrFunc */
        setAddrTo(12);
        genOneOp();
        arg1Type = l3var5z->expr2->typ;
        ArrayT & array = arg1Type->cast<ArrayT>();
        l3int3z = array.range->right - array.range->left + 1;
        form2Insn((KVTM+I14) + l3int3z,
                  (KVTM+I10+64) - array.pcksize);
        l3int3z = ord(l3var5z->typ);
        l3int1z = array.perWord;
        if (l3int3z == 72)          /* P/KC */
            l3int1z = 1 - l3int1z;
        form1Insn(getValueOrAllocSymtab(l3int1z) + (KVTM+I9));
        if (typeCheck(curExpr->typ, IntegerType)) {
            l3int1z = KXTA+ZERO;
        } else {
            l3int1z = InsnTemp[XTA];
        };
        form1Insn(l3int1z);
        formAndAlign(getHelperProc(l3int3z));
   } break;
   case LITINSN:
        if (insnList->ilm != ilCONST)
            error(errNoConstant);
        if (insnList->typ->size != 1)
            error(errConstOfOtherTypeNeeded);
        curVal = insnList->ilf5;
        break;
    } /* case */
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x5a38, %rsp           # imm = 0x5A38
movl %esi, %ebp
movq %rdi, %rbx
movq %rsp, %rsi
movq %rdi, (%rsi)
leaq 0xb18ff(%rip), %rdi     # 0xbc3b8
callq 0x180d4
movb $0x1, 0x60(%rbx)
cmpl $0x4, %ebp
setne %al
andb 0x58ea8(%rip), %al      # 0x63976
movq 0x58fcb(%rip), %rsi     # 0x63aa0
testq %rsi, %rsi
sete %cl
orb %al, %cl
jne 0xb00a
cmpl $0x10, %ebp
ja 0xab5b
movl $0x14248, %eax          # imm = 0x14248
btl %ebp, %eax
jae 0xab5b
cmpl $0x11, %ebp
ja 0xb00a
movl %ebp, %eax
leaq 0xeadc(%rip), %rcx      # 0x195e0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0xf0(%rsp), %rdi
pushq $0xb
popq %rsi
callq 0x13c48
cmpl $0xc, %ebp
jne 0xab2c
movl $0x1000005, %edi        # imm = 0x1000005
callq 0x79a6
leaq 0x24b8(%rsp), %rdi
callq 0x12ed0
movabsq $0xfff7ffffffff, %rax   # imm = 0xFFF7FFFFFFFF
andq 0x58f06(%rip), %rax     # 0x63a50
btsq $0x23, %rax
movq %rax, 0x58efa(%rip)     # 0x63a50
jmp 0xb00a
leaq 0x240(%rsp), %rdi
callq 0x9738
addq $-0x8, 0xb1868(%rip)    # 0xbc3d8
jmp 0xaaf2
movq 0x58f27(%rip), %rax     # 0x63aa0
movq %rax, 0x20(%rbx)
movq 0x10(%rax), %rax
movq %rax, 0x58f18(%rip)     # 0x63aa0
leaq 0x278(%rsp), %rdi
pushq $0xb
popq %rsi
callq 0xaa9a
addq $-0x8, 0xb1820(%rip)    # 0xbc3c0
movq 0x20(%rbx), %rax
movq 0x18(%rax), %rsi
leaq 0x80(%rsp), %rdi
callq 0x9738
addq $-0x8, 0xb181b(%rip)    # 0xbc3d8
movq 0x58ee4(%rip), %rax     # 0x63aa8
testb $0x10, 0x1c(%rax)
je 0xabd2
pushq $0x2c
popq %rdi
callq 0x4f2c
leaq 0x48(%rsp), %rdi
pushq $0xc
popq %rsi
callq 0x13c48
leaq 0x348(%rsp), %rdi
callq 0x12ed0
movq 0x20(%rbx), %rax
movq 0x18(%rax), %rax
movq (%rax), %rdi
movq %rdi, 0x58e0a(%rip)     # 0x63a08
callq 0x12c02
movq %rax, %r14
movq 0x20(%rax), %rax
movq 0x30(%rax), %rdi
subq 0x28(%rax), %rdi
leaq 0x1(%rdi), %rax
movq %rax, 0x10(%rbx)
addq $0xea0001, %rdi         # imm = 0xEA0001
movl $0xaa0040, %esi         # imm = 0xAA0040
subq 0x38(%r14), %rsi
callq 0x50e3
movq 0x20(%rbx), %rax
movq (%rax), %rdi
callq 0x3a1d
movq %rax, 0x10(%rbx)
movq 0x30(%r14), %rcx
pushq $0x1
popq %rdi
subq %rcx, %rdi
cmpq $0x48, %rax
cmovneq %rcx, %rdi
movq %rdi, (%rbx)
callq 0x569a
leaq 0x9a0000(%rax), %rdi
callq 0x4fcb
movq 0x58e34(%rip), %rax     # 0x63aa0
movq (%rax), %rsi
movq 0x58d72(%rip), %rdx     # 0x639e8
movq %rsp, %r14
movq %r14, %rdi
callq 0x74d4
addq $-0x8, 0xb171f(%rip)    # 0xbc3a8
cmpb $0x0, (%r14)
movl $0x108009, %edi         # imm = 0x108009
jne 0xac9b
movq 0x5d715(%rip), %rdi     # 0x683b0
movq %rdi, (%rbx)
callq 0x4fcb
movq 0x10(%rbx), %rdi
callq 0x52d1
movq %rax, %rdi
jmp 0xafcd
callq 0xa8af
jmp 0xb00a
callq 0x7fba
movq %rax, 0x10(%rbx)
pushq $0x20
popq %rdi
callq 0x390b
movq %rax, 0x20(%rbx)
movq 0x58b7e(%rip), %rcx     # 0x63858
movq %rcx, 0x10(%rax)
movq 0x20(%rbx), %rax
movq %rax, 0x58b6f(%rip)     # 0x63858
movl $0x2e, 0x8(%rax)
movq 0x58db1(%rip), %rcx     # 0x63aa8
movl 0x40(%rcx), %ecx
cmpl $0x2, %ecx
je 0xb054
cmpl $0x1, %ecx
je 0xb02d
testl %ecx, %ecx
jne 0xb19c
movq 0x10(%rbx), %r15
testq %r15, %r15
je 0xb0df
movabsq $-0x1000000000000, %rdi # imm = 0xFFFF000000000000
orq 0x58d36(%rip), %rdi     # 0x63a68
andq 0x58d27(%rip), %rdi     # 0x63a60
movabsq $0xffffffffffff, %r14   # imm = 0xFFFFFFFFFFFF
movq %rdi, 0x48(%rbx)
movq %rdi, %rax
shlq $0x10, %rax
je 0xb0ef
callq 0x5593
movq %rax, %rsi
movq %rax, 0x8(%rbx)
cmpq $0x1, %r15
jne 0xb117
cmpq $0xe, %rsi
je 0xb13d
leaq 0x1d0(%rsp), %rdi
callq 0x13c48
leaq 0x4cd8(%rsp), %rdi
callq 0x12ed0
jmp 0xb13d
movq 0x58c96(%rip), %rsi     # 0x63a30
leaq 0x58c8f(%rip), %rdi     # 0x63a30
callq 0x381c
callq 0x554f
leaq 0x808000(%rax), %rdi
jmp 0xafa2
callq 0x79ed
leaq 0x1758(%rsp), %rdi
jmp 0xb005
movq 0x58a38(%rip), %rdi     # 0x63808
testq %rdi, %rdi
sete 0x40(%rbx)
movq %rdi, 0x10(%rbx)
movq 0x58cc6(%rip), %rax     # 0x63aa8
cmpl $0x0, 0x20(%rax)
je 0xb018
leaq 0x10(%rbx), %r14
movl 0x18(%rax), %ecx
shrl $0x1f, %ecx
movq %rcx, 0x38(%rbx)
movl 0x20(%rax), %ecx
cmpl $0x1, %ecx
je 0xb061
cmpl $0x3, %ecx
jne 0xb074
movq 0x28(%rax), %rax
shlq $0x17, %rax
je 0xb074
leaq 0x10a8(%rsp), %rdi
callq 0x12ed0
cmpq $0x0, 0x38(%rbx)
movb 0x40(%rbx), %al
je 0xb1b0
testb %al, %al
je 0xb1da
movq %r14, %rdi
callq 0x5148
jmp 0xb1e9
movq 0x58bdc(%rip), %rax     # 0x63a30
shlq $0x17, %rax
sarq $0x17, %rax
movq %rax, 0x589fd(%rip)     # 0x63860
leaq 0x2e0(%rsp), %rdi
pushq $0x2
popq %rsi
callq 0xaa9a
addq $-0x8, 0xb1545(%rip)    # 0xbc3c0
movq 0x5d52e(%rip), %rax     # 0x683b0
movq %rax, 0x589d7(%rip)     # 0x63860
jmp 0xb00a
leaq 0x5388(%rsp), %rdi
jmp 0xb005
callq 0x79ed
callq 0x7fba
cmpq $0x2, %rax
jl 0xb00a
pushq $0x1e
popq %rdi
callq 0x7f2e
jmp 0xb00a
callq 0x7cde
leaq 0x4628(%rsp), %rdi
jmp 0xb005
movq 0x58bd3(%rip), %rax     # 0x63aa8
cmpl $0x0, 0x20(%rax)
je 0xaeea
pushq $0x6
popq %rdi
callq 0x4f2c
movq 0x58bbe(%rip), %rax     # 0x63aa8
movq 0x10(%rax), %rcx
cmpq $0x1, (%rcx)
je 0xaf03
pushq $0x7
popq %rdi
callq 0x4f2c
movq 0x58ba5(%rip), %rax     # 0x63aa8
movq 0x28(%rax), %rax
movq %rax, 0x58b22(%rip)     # 0x63a30
jmp 0xb00a
movq 0x58b8e(%rip), %rax     # 0x63aa8
cmpl $0x0, 0x40(%rax)
je 0xaf28
pushq $0x30
popq %rdi
callq 0x4f2c
leaq 0x198(%rsp), %rdi
pushq $0x9
popq %rsi
callq 0x13c48
leaq 0x3f78(%rsp), %rdi
jmp 0xb005
movq 0x58ae4(%rip), %rax     # 0x63a30
shlq $0x17, %rax
sarq $0x17, %rax
movq %rax, (%rbx)
movq 0x58b42(%rip), %rsi     # 0x63aa0
leaq 0x160(%rsp), %rdi
callq 0x9738
addq $-0x8, 0xb1465(%rip)    # 0xbc3d8
callq 0x79ed
movq 0x58b29(%rip), %rax     # 0x63aa8
testb $0x40, 0x1c(%rax)
je 0xaf8d
pushq $0x30
popq %rdi
callq 0x4f2c
leaq 0x38c8(%rsp), %rdi
callq 0x12ed0
movl $0x900000, %edi         # imm = 0x900000
addq (%rbx), %rdi
callq 0x4fcb
jmp 0xb00a
leaq 0xb8(%rsp), %rdi
pushq $0xc
popq %rsi
callq 0x13c48
leaq 0x1e08(%rsp), %rdi
callq 0x12ed0
movq 0x5883b(%rip), %rdi     # 0x63808
callq 0x51c4
jmp 0xb00a
callq 0x79ed
movl $0x1000005, %edi        # imm = 0x1000005
callq 0x79a6
leaq 0x2b68(%rsp), %rdi
jmp 0xb005
leaq 0x128(%rsp), %rdi
pushq $0xc
popq %rsi
callq 0x13c48
leaq 0x3218(%rsp), %rdi
callq 0x12ed0
addq $0x5a38, %rsp           # imm = 0x5A38
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
cmpq $0x0, 0x28(%rax)
je 0xb0ce
andq $0x0, 0x587dd(%rip)     # 0x63808
jmp 0xb00a
movzwl 0x58a02(%rip), %ecx     # 0x63a36
shlq $0x30, %rcx
movabsq $0xd0000000000e, %rdx   # imm = 0xD0000000000E
orq %rcx, %rdx
movq %rdx, 0x589e4(%rip)     # 0x63a30
movq %rdx, (%rax)
jmp 0xb19c
pushq $0x30
popq %rdi
callq 0x4f2c
jmp 0xb19c
movb $0x0, 0x58792(%rip)     # 0x637fa
callq 0x79ed
movb $0x1, 0x58786(%rip)     # 0x637fa
leaq 0x9f8(%rsp), %rdi
callq 0x12ed0
xorl %eax, %eax
cmpq $0x0, 0x38(%rbx)
setne %al
leaq 0x5d2de(%rip), %rcx     # 0x68370
movq 0x158(%rcx,%rax,8), %rdi
movq %rdi, 0x18(%rbx)
cmpb $0x1, 0x40(%rbx)
jne 0xb0c6
movq %rdi, 0x58755(%rip)     # 0x63800
movq %r14, %rdi
callq 0x5148
movq 0x5d41e(%rip), %rax     # 0x684d8
movq %rax, 0x5873f(%rip)     # 0x63800
jmp 0xb1f7
addq (%r14), %rdi
jmp 0xafa2
testq %rdi, %rdi
je 0xb106
addq 0x5d3fe(%rip), %rdi     # 0x684d8
jmp 0xafa2
movq $0xe, 0x8(%rbx)
pushq $0xe
popq %rsi
jmp 0xb182
movq $0xe, 0x8(%rbx)
cmpq $0x1, %r15
je 0xb13d
leaq 0x8(%rbx), %r15
pushq $0xe
popq %rsi
jmp 0xb11b
leaq 0x586fb(%rip), %rdi     # 0x63808
callq 0x5148
jmp 0xb00a
leaq 0x8(%rbx), %r15
leaq 0x208(%rsp), %rdi
callq 0x13c48
movl $0x22000, %edi          # imm = 0x22000
addq (%r15), %rdi
callq 0x794e
pushq $0x1f
popq %rdi
callq 0x7f2e
movq 0x8(%rbx), %rsi
movb $0x2f, %cl
subb %sil, %cl
pushq $0x1
popq %rax
shlq %cl, %rax
movabsq $0xfffdffffffff, %rcx   # imm = 0xFFFDFFFFFFFF
andq %rax, %rcx
movq %rcx, 0x50(%rbx)
movq %rcx, %rax
xorq %r14, %rax
andq %rax, 0x588e6(%rip)     # 0x63a50
andq %rax, 0x588ef(%rip)     # 0x63a60
andq 0x588e0(%rip), %r14     # 0x63a58
orq %rcx, %r14
movq %r14, 0x588d6(%rip)     # 0x63a58
leaq 0x588a7(%rip), %rdi     # 0x63a30
callq 0x381c
movq 0x20(%rbx), %rax
movq 0x58897(%rip), %rcx     # 0x63a30
movq %rcx, (%rax)
movq 0x588fd(%rip), %rax     # 0x63aa0
movq 0x20(%rbx), %rcx
movq %rax, 0x18(%rcx)
jmp 0xb00a
testb %al, %al
jne 0xb00a
cmpb $0x0, 0x587b5(%rip)     # 0x63974
jne 0xb1c6
callq 0x51a1
movq (%r14), %rdi
movq 0x58638(%rip), %rsi     # 0x63808
callq 0x56f1
jmp 0xb00a
movq (%r14), %rdi
addq 0x5d2f4(%rip), %rdi     # 0x684d8
callq 0x4fcb
movq 0x58618(%rip), %rsi     # 0x63808
xorl %edi, %edi
callq 0x56f1
movq (%r14), %rax
movq %rax, 0x58607(%rip)     # 0x63808
jmp 0xb00a