// File: besm6[P]pascal-re/pascompl.cc
// Function: term()
void term()
{
    Operator l4var1z;
    ExprPtr l4var2z, l4var3z;
    bool l4var4z;

    Factor();
    while (SY == MULOP) {
        l4var1z = charClass;
        inSymbol();
        l4var2z = curExpr;
        Factor();
        arg1Type = curExpr->typ;
        arg2Type = l4var2z->typ;
        l4var4z = typeCheck(arg1Type, arg2Type);
        if (not l4var4z and
            RDIVOP < l4var1z) {
L14650:
            error(errNeedOtherTypesOfOperands);
        } else {
            switch (l4var1z) {
            case MUL:
            case RDIVOP: {
                if (l4var4z) {
                    if (arg1Type == RealType) {
                        /* empty */
                    } else {
                        if (typ120z == IntegerType) {
                            if (l4var1z == MUL) {
                                arg1Type = IntegerType;
                            } else {
                                arg1Type = RealType;
                            }
                            l4var1z = iMulOpMap[l4var1z];
                        } else {
                            if (arg1Type->k == kindSet) {
                                l4var1z = setOpMap[l4var1z];
                            } else
                                goto L14650;
                        }
                    }
                } else {
                    if (areTypesCompatible(l4var2z)) {
                        arg1Type = RealType;
                    } else
                        goto L14650;
                }
            } break;
            case AMPERS: {
                if (arg1Type != BooleanType)
                    goto L14650;
            } break;
            case IDIVOP: {
                if (typ120z != IntegerType)
                    goto L14650;
                arg1Type = IntegerType;
            } break;
            case IMODOP: {
                if (typ120z == IntegerType) {
                    arg1Type = IntegerType;
                } else {
                    if (arg1Type->k == kindSet)
                        l4var1z = SETXOR;
                    else
                        goto L14650;
                }
            } break;
            default: break;
            }
            l4var3z = new Expr;
            l4var3z->op = l4var1z;
            l4var3z->expr1 = l4var2z;
            l4var3z->expr2 = curExpr;
            curExpr = l4var3z;
            l4var3z->typ = arg1Type;
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2c0, %rsp            # imm = 0x2C0
leaq -0x80(%rbp), %rdi
callq 0x220f0
cmpl $0x9, 0x6a7f1(%rip)     # 0x7fedc
jne 0x1597d
movl 0x6a7e1(%rip), %eax     # 0x7fed8
movl %eax, -0x4(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x9790
movq 0x6aa53(%rip), %rax     # 0x80160
movq %rax, -0x10(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x220f0
movq 0x6aa3c(%rip), %rax     # 0x80160
movq (%rax), %rax
movq %rax, 0x6a99a(%rip)     # 0x800c8
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, 0x6a994(%rip)     # 0x800d0
movq 0x6a985(%rip), %rsi     # 0x800c8
movq 0x6a986(%rip), %rdx     # 0x800d0
leaq -0x298(%rbp), %rdi
movq %rdi, -0x2b0(%rbp)
callq 0xb280
movq -0x2b0(%rbp), %rdi
callq 0x1e950
movb %al, -0x2a5(%rbp)
jmp 0x15771
movb -0x2a5(%rbp), %al
andb $0x1, %al
movb %al, -0x19(%rbp)
leaq -0x298(%rbp), %rdi
callq 0x1e9c0
testb $0x1, -0x19(%rbp)
jne 0x157cc
movl $0x1, %eax
cmpl -0x4(%rbp), %eax
jge 0x157cc
jmp 0x1579a
movl $0x15, %edi
callq 0x7b40
jmp 0x15978
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2a0(%rbp)
movl %eax, -0x2a4(%rbp)
leaq -0x298(%rbp), %rdi
callq 0x1e9c0
jmp 0x15986
movl -0x4(%rbp), %eax
movq %rax, -0x2b8(%rbp)
subq $0x4, %rax
ja 0x1592a
movq -0x2b8(%rbp), %rax
leaq 0x1be8e(%rip), %rcx     # 0x3167c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
testb $0x1, -0x19(%rbp)
je 0x15887
movq 0x6a8c0(%rip), %rax     # 0x800c8
cmpq 0x6a8a1(%rip), %rax     # 0x800b0
jne 0x15813
jmp 0x15885
movq 0x6a85e(%rip), %rax     # 0x80078
cmpq 0x6a887(%rip), %rax     # 0x800a8
jne 0x1585b
cmpl $0x0, -0x4(%rbp)
jne 0x15839
movq 0x6a878(%rip), %rax     # 0x800a8
movq %rax, 0x6a891(%rip)     # 0x800c8
jmp 0x15847
movq 0x6a870(%rip), %rax     # 0x800b0
movq %rax, 0x6a881(%rip)     # 0x800c8
movl -0x4(%rbp), %eax
movl %eax, %ecx
leaq 0x6e81d(%rip), %rax     # 0x84070
movl (%rax,%rcx,4), %eax
movl %eax, -0x4(%rbp)
jmp 0x15883
movq 0x6a866(%rip), %rax     # 0x800c8
cmpl $0x4, 0x10(%rax)
jne 0x1587c
movl -0x4(%rbp), %eax
movl %eax, %ecx
leaq 0x6e8bc(%rip), %rax     # 0x84130
movl (%rax,%rcx,4), %eax
movl %eax, -0x4(%rbp)
jmp 0x15881
jmp 0x1579a
jmp 0x15883
jmp 0x15885
jmp 0x158ad
leaq -0x10(%rbp), %rdi
callq 0x15140
testb $0x1, %al
jne 0x15896
jmp 0x158a6
movq 0x6a813(%rip), %rax     # 0x800b0
movq %rax, 0x6a824(%rip)     # 0x800c8
jmp 0x158ab
jmp 0x1579a
jmp 0x158ad
jmp 0x1592c
movq 0x6a812(%rip), %rax     # 0x800c8
cmpq 0x6a7db(%rip), %rax     # 0x80098
je 0x158c4
jmp 0x1579a
jmp 0x1592c
movq 0x6a7ab(%rip), %rax     # 0x80078
cmpq 0x6a7d4(%rip), %rax     # 0x800a8
je 0x158db
jmp 0x1579a
movq 0x6a7c6(%rip), %rax     # 0x800a8
movq %rax, 0x6a7df(%rip)     # 0x800c8
jmp 0x1592c
movq 0x6a786(%rip), %rax     # 0x80078
cmpq 0x6a7af(%rip), %rax     # 0x800a8
jne 0x1590b
movq 0x6a7a6(%rip), %rax     # 0x800a8
movq %rax, 0x6a7bf(%rip)     # 0x800c8
jmp 0x15928
movq 0x6a7b6(%rip), %rax     # 0x800c8
cmpl $0x4, 0x10(%rax)
jne 0x15921
movl $0x12, -0x4(%rbp)
jmp 0x15926
jmp 0x1579a
jmp 0x15928
jmp 0x1592c
jmp 0x1592c
movl $0x20, %edi
callq 0x1e2e0
movq %rax, -0x18(%rbp)
movl -0x4(%rbp), %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x10(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq 0x6a809(%rip), %rcx     # 0x80160
movq -0x18(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rax
movq %rax, 0x6a7f6(%rip)     # 0x80160
movq 0x6a757(%rip), %rcx     # 0x800c8
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
jmp 0x156e4
addq $0x2c0, %rsp            # imm = 0x2C0
popq %rbp
retq
movq -0x2a0(%rbp), %rdi
callq 0x44c0
nopw %cs:(%rax,%rax)