// File: besm6[P]pascal-re/pascompl.cc
// Function: assignStatement(bool)
void assignStatement(bool doLHS)
{
    ExprPtr lhsExpr, assnExpr;
    int64_t indCnt;
    TypesPtr srcType, targType;
    bool &l3bool5z = Statement::super.back()->l3bool5z;

    if (doLHS)
        parseLval();
    else {
        curExpr = new Expr;
        curExpr->typ = hashTravPtr->typ;
        curExpr->op = GETVAR;
        curExpr->id1 = hashTravPtr;
        inSymbol();
    }
    checkSymAndRead(BECOMES);
    bool102z = false;
    targType = curExpr->typ;
    if (targType->k == kindRecord and
        SY == LBRACK) {
        (void) formOperator(ADDRTOR9);
        indCnt = 0;
        inSymbol();
        l3bool5z = false;

        do {
            if (SY == COMMA) {
                indCnt = indCnt + 1;
                inSymbol();
            } else if (SY == RBRACK) {
                inSymbol();
                break;
            } else {
                bool102z = false;
                expression();
                curVal.i = indCnt;
                (void) formOperator(STRUCTASSN);
            } /* 16270 */
        } while(true);
        curExpr = NULL;
    } else if (SY == SEMICOLON and allowCompat) {
        (void) formOperator(STORE);
        bool102z = true;
        curExpr = NULL;
    } else /* 16303 */ {
        lhsExpr = curExpr;
        expression();
        srcType = curExpr->typ;
        if (typeCheck(targType, srcType)) {
            if (srcType->k == kindFile)
                error(75); /*errCannotAssignFiles*/
            else {
                if (rangeMismatch and targType->k == kindRange) {
                    assnExpr = new Expr;
                    assnExpr->typ = srcType;
                    assnExpr->op = BOUNDS;
                    assnExpr->expr1 = curExpr;
                    assnExpr->typ2 = targType;
                    curExpr = assnExpr;
                }
L16332:
                assnExpr = new Expr;
                assnExpr->typ = targType;
                assnExpr->op = ASSIGNOP;
                assnExpr->expr1 = lhsExpr;
                assnExpr->expr2 = curExpr;
                curExpr = assnExpr;
            }
        } else if (targType == RealType and
                   typeCheck(IntegerType, srcType)) {
            castToReal(curExpr);
            goto L16332;
        } else {
            error(33); /*errIllegalTypesForAssignment*/
        }
    }
    /* 16356 */
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x800, %rsp            # imm = 0x800
movb %dil, %al
andb $0x1, %al
movb %al, -0x1(%rbp)
leaq 0xc1bf6(%rip), %rdi     # 0xd8ae0
callq 0x22a10
movq (%rax), %rax
addq $0x20, %rax
movq %rax, -0x38(%rbp)
testb $0x1, -0x1(%rbp)
je 0x16f07
callq 0x14ae0
jmp 0x16f59
movl $0x20, %edi
callq 0x1e2e0
movq %rax, 0x69248(%rip)     # 0x80160
movq 0x69141(%rip), %rax     # 0x80060
movq 0x18(%rax), %rcx
movq 0x69236(%rip), %rax     # 0x80160
movq %rcx, (%rax)
movq 0x6922c(%rip), %rax     # 0x80160
movl $0x1d, 0x8(%rax)
movq 0x6911e(%rip), %rcx     # 0x80060
movq 0x69217(%rip), %rax     # 0x80160
movq %rcx, 0x10(%rax)
leaq -0x1a8(%rbp), %rdi
callq 0x9790
movl $0x13, %edi
callq 0xb110
movb $0x0, 0x690cb(%rip)     # 0x80035
movq 0x691ef(%rip), %rax     # 0x80160
movq (%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
cmpl $0x6, 0x10(%rax)
jne 0x1705a
cmpl $0x8, 0x68f4f(%rip)     # 0x7fedc
jne 0x1705a
leaq -0x210(%rbp), %rdi
movl $0x5, %esi
callq 0x112d0
leaq -0x210(%rbp), %rdi
callq 0x21850
movq $0x0, -0x20(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x9790
movq -0x38(%rbp), %rax
movb $0x0, (%rax)
cmpl $0xe, 0x68f0a(%rip)     # 0x7fedc
jne 0x16fee
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
leaq -0x4f0(%rbp), %rdi
callq 0x9790
jmp 0x17040
cmpl $0xd, 0x68ee7(%rip)     # 0x7fedc
jne 0x17005
leaq -0x660(%rbp), %rdi
callq 0x9790
jmp 0x1704a
movb $0x0, 0x69029(%rip)     # 0x80035
callq 0x14e90
movq -0x20(%rbp), %rsi
leaq 0x690d4(%rip), %rdi     # 0x800f0
callq 0x4ad0
leaq -0x6c8(%rbp), %rdi
movl $0x6, %esi
callq 0x112d0
leaq -0x6c8(%rbp), %rdi
callq 0x21850
jmp 0x17040
jmp 0x17042
movb $0x1, %al
testb $0x1, %al
jne 0x16fcb
jmp 0x1704a
movq $0x0, 0x6910b(%rip) # 0x80160
jmp 0x172d3
cmpl $0xf, 0x68e7b(%rip)     # 0x7fedc
jne 0x170a0
testb $0x1, 0x68fd5(%rip)     # 0x8003f
je 0x170a0
leaq -0x730(%rbp), %rdi
movl $0x1, %esi
callq 0x112d0
leaq -0x730(%rbp), %rdi
callq 0x21850
movb $0x1, 0x68fa5(%rip)     # 0x80035
movq $0x0, 0x690c5(%rip) # 0x80160
jmp 0x172d1
movq 0x690b9(%rip), %rax     # 0x80160
movq %rax, -0x10(%rbp)
callq 0x14e90
movq 0x690a9(%rip), %rax     # 0x80160
movq (%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x30(%rbp), %rsi
movq -0x28(%rbp), %rdx
leaq -0x778(%rbp), %rdi
movq %rdi, -0x7e0(%rbp)
callq 0xb280
movq -0x7e0(%rbp), %rdi
callq 0x1e950
movb %al, -0x7d2(%rbp)
jmp 0x170ed
leaq -0x778(%rbp), %rdi
callq 0x1e9c0
movb -0x7d2(%rbp), %al
testb $0x1, %al
jne 0x17108
jmp 0x171f2
movq -0x28(%rbp), %rax
cmpl $0x7, 0x10(%rax)
jne 0x17144
movl $0x4b, %edi
callq 0x7b40
jmp 0x171ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x780(%rbp)
movl %eax, -0x784(%rbp)
leaq -0x778(%rbp), %rdi
callq 0x1e9c0
jmp 0x172dc
testb $0x1, 0x68eed(%rip)     # 0x80038
je 0x171a1
movq -0x30(%rbp), %rax
cmpl $0x2, 0x10(%rax)
jne 0x171a1
movl $0x20, %edi
callq 0x1e2e0
movq %rax, -0x18(%rbp)
movq -0x28(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x18(%rbp), %rax
movl $0x28, 0x8(%rax)
movq 0x68fde(%rip), %rcx     # 0x80160
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x30(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rax
movq %rax, 0x68fbf(%rip)     # 0x80160
jmp 0x171a3
movl $0x20, %edi
callq 0x1e2e0
movq %rax, -0x18(%rbp)
movq -0x30(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x18(%rbp), %rax
movl $0x1b, 0x8(%rax)
movq -0x10(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq 0x68f86(%rip), %rcx     # 0x80160
movq -0x18(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rax
movq %rax, 0x68f73(%rip)     # 0x80160
jmp 0x172cf
movq -0x30(%rbp), %rcx
movq 0x68eb3(%rip), %rdx     # 0x800b0
movb $0x0, -0x7d1(%rbp)
xorl %eax, %eax
cmpq %rdx, %rcx
movb %al, -0x7e1(%rbp)
jne 0x17258
movq 0x68e90(%rip), %rsi     # 0x800a8
movq -0x28(%rbp), %rdx
leaq -0x7d0(%rbp), %rdi
movq %rdi, -0x7f0(%rbp)
callq 0xb280
movq -0x7f0(%rbp), %rdi
movb $0x1, -0x7d1(%rbp)
callq 0x1e950
movb %al, -0x7e2(%rbp)
jmp 0x1724a
movb -0x7e2(%rbp), %al
movb %al, -0x7e1(%rbp)
jmp 0x17258
movb -0x7e1(%rbp), %al
movb %al, -0x7f1(%rbp)
testb $0x1, -0x7d1(%rbp)
jne 0x1726f
jmp 0x1727b
leaq -0x7d0(%rbp), %rdi
callq 0x1e9c0
movb -0x7f1(%rbp), %al
testb $0x1, %al
jne 0x17287
jmp 0x172c3
leaq 0x68ed2(%rip), %rdi     # 0x80160
callq 0x150e0
jmp 0x171a3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x780(%rbp)
movl %eax, -0x784(%rbp)
testb $0x1, -0x7d1(%rbp)
jne 0x172b5
jmp 0x172c1
leaq -0x7d0(%rbp), %rdi
callq 0x1e9c0
jmp 0x172dc
movl $0x21, %edi
callq 0x7b40
jmp 0x172cf
jmp 0x172d1
jmp 0x172d3
addq $0x800, %rsp            # imm = 0x800
popq %rbp
retq
movq -0x780(%rbp), %rdi
callq 0x44c0
nopl (%rax,%rax)