// File: /workspace/github_cpp_makefile_star2_O2/besm6[P]pascal-re/pascompl.cc
// Function: Expr::p[abi:cxx11]()
std::string Expr::p()
{
    static const char * op2str[] = {
        " * ",      " /r ",     " and ",    " div ",    " mod ",
        " + ",      " - ",      " or ",     " <> ",     " = ",
        " < ",      " >= ",     " > ",      " <= ",     " in ",
        " *i ",     " /i ",     " & ",      " ^ ",      " | ",
        " \\ ",     " +i ",     " -i ",     " op27 ",   " op30 ",
        " op31 ",   " .. ",     " := ",     " elt ",    " var ",
        " op36 ",   " op37 ",   " enum ",   " field ",  " @ ",
        " @f ",     " op44 ",   " alnum ",  " pcall ",  " fcall ",
        " BOUNDS ", "(real)",   " not ",    " -i-",     " -r-",
        " proc ",   "NOP"
    };
    static const char * fn2name[] = {
        "SQRT", "SIN", "COS", "ATAN", "ASIN",
        "LN",  "EXP",  "ABS",  "TRUNC",  "ODD",
        "ORD", "CHR", "SUCC", "PRED", "EOF",
        "REF", "EOLN", "SQR", "ROUND", "CARD",
        "MINEL", "PTR", "ABSi", "SQRi"
    };

    std::ostringstream ostr;
    switch (op) {
    case NOOP:
        ostr << "(R" << val.i << ')';
        break;
    case GETVAR:
        ostr << id1->p();
        break;
    case MUL: case RDIVOP: case AMPERS: case IDIVOP: case IMODOP:
    case PLUSOP: case MINUSOP: case OROP: case NEOP: case EQOP:
    case LTOP: case GEOP: case GTOP: case LEOP: case INOP:
    case IMULOP: case IDIVROP: case SETAND: case SETXOR: case SETOR:
    case SETSUB: case INTPLUS: case INTMINUS:
        // Regular binary ops
        ostr << '(' << expr1->p() << op2str[op] << expr2->p() << ')';
        break;
    case INEGOP: case RNEGOP: case NOTOP: case TOREAL:
        // Regular unary ops
        ostr << op2str[op] << expr1->p();
        break;
    case FILEPTR: case DEREF:
        ostr << expr1->p() << '@';
        break;
    case ASSIGNOP:
        ostr << expr1->p() << op2str[op] << expr2->p();
        break;
    case GETELT:
        ostr << expr1->p() << '[' << expr2->p() << ']';
        break;
    case GETFIELD:
        ostr << expr1->p() << '.' << id2->p();
        break;
    case MKRANGE:
        ostr << '[' << expr1->p() << ".." << expr2->p() << ']';
        break;
    case GETENUM:
        if (typ == IntegerType)
            ostr << d1.i;
        else if (typ == CharType) {
            ostr << "'" << escapeChar(d1.i) << "'";
        } else if (typ == RealType)
            ostr << "real" << d1.r;
        else if (typ == BooleanType)
            ostr << (d1.ii ? "TRUE" : "FALSE");
        else if (typ == setType)
            ostr << d1.m.p();
        else if (typ == pointerType && d1.i == 074000)
            ostr << "NIL";
        else if (typ->k == kindScalar)
            ostr << "enum" << num1;
        else if (typ->k == kindArray && typ->cast<ArrayT>().base == CharType) {
            int n;
            for (n = 2; n <= 6; ++n) {
                if (typ == smallStringType[n]) {
                    ostr << "'";
                    for (int i = 1; i <= n; ++i)
                        ostr << escapeChar(d1.a[i]);
                    ostr << "'";
                    break;
                }
            }
            if (n <= 6)
                break;
            ostr << "string literal @" << d1.i;
        } else
            ostr << "(? enum: " << typ->p() << " ?)";
        break;
    case STANDPROC:
        if (typ == NULL && num2 < 30) {
            int64_t t;
            t = systemProcNames[num2];
            ostr << toAscii(t) << '(' << expr1->p() << ')';
        } else if (num2 < 24) {
            ostr << fn2name[num2] << '(' << expr1->p() << ')';
        } else if (num2 == 109) {
            ostr << '[' << expr1->p() << ']';
        } else {
            ostr << "standproc" << num2 << '(' << expr1->p() << ')';
        }
        break;
    case ALNUM:
        ostr << "call " << id2->p();
         if (expr1) {
             ostr << "(";
             Expr * t = expr1;
             do {
                 if (t != expr1) ostr << ", ";
                 ostr << t->expr2->p();
                 t = t->expr1;
             } while (t);
             ostr << ")";
         }
        break;
    case PCALL:
        ostr << "pcall " << id2->p();
        break;
    case FCALL:
        ostr << "fcall " << id2->p();
        break;
    case BOUNDS:
        ostr << "bound(" << expr1->p() << ", " << typ2->p() << ')';
        break;
    default:
        ostr << "(?" << op2str[op] << "?)";
    }
    return ostr.str();
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1b8, %rsp            # imm = 0x1B8
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x40(%rsp), %r15
movq %r15, %rdi
callq 0x3310
movl 0x8(%r14), %eax
cmpq $0x2e, %rax
ja 0x43d4
leaq 0x1515d(%rip), %rcx     # 0x19028
movslq (%rcx,%rax,4), %rdx
addq %rcx, %rdx
jmpq *%rdx
leaq 0x40(%rsp), %rdi
pushq $0x28
popq %rsi
callq 0x32b0
movq %rax, %r15
movq 0x10(%r14), %rsi
movq %rsp, %rdi
callq 0x3e92
movq %rsp, %rsi
movq %r15, %rdi
callq 0x3200
movl 0x8(%r14), %ecx
leaq 0x1e9ea(%rip), %rdx     # 0x228f0
movq (%rdx,%rcx,8), %rsi
movq %rax, %rdi
callq 0x3220
movq %rax, %r15
movq 0x18(%r14), %rsi
leaq 0x20(%rsp), %rdi
callq 0x3e92
leaq 0x20(%rsp), %rsi
movq %r15, %rdi
callq 0x3200
pushq $0x29
popq %rsi
movq %rax, %rdi
callq 0x32b0
leaq 0x20(%rsp), %rdi
callq 0x3498
movq %rsp, %rdi
callq 0x3498
leaq 0x48(%rsp), %rsi
movq %rbx, %rdi
callq 0x3380
leaq 0x40(%rsp), %rdi
callq 0x3070
movq %rbx, %rax
addq $0x1b8, %rsp            # imm = 0x1B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1e970(%rip), %rcx     # 0x228f0
movq (%rcx,%rax,8), %rsi
leaq 0x40(%rsp), %rdi
callq 0x3220
movq %rax, %r15
movq 0x10(%r14), %rsi
movq %rsp, %rdi
callq 0x3e92
movq %rsp, %rsi
movq %r15, %rdi
callq 0x3200
jmp 0x3f45
movq 0x10(%r14), %rsi
movq %rsp, %rdi
callq 0x3e92
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0x3200
pushq $0x40
popq %rsi
movq %rax, %rdi
callq 0x32b0
jmp 0x3f45
leaq 0x15cff(%rip), %rsi     # 0x19cd9
leaq 0x40(%rsp), %rdi
callq 0x3220
movq %rax, %r15
movq 0x18(%r14), %rsi
movq %rsp, %rdi
xorl %edx, %edx
callq 0x12a52
movq %rsp, %rsi
movq %r15, %rdi
callq 0x3200
jmp 0x3f45
cmpq $0x0, (%r14)
movq 0x18(%r14), %rax
je 0x4413
cmpq $0x17, %rax
jg 0x4472
leaq 0x1573c(%rip), %rcx     # 0x19760
movslq (%rcx,%rax,4), %rsi
addq %rcx, %rsi
leaq 0x40(%rsp), %rdi
callq 0x3220
pushq $0x28
popq %rsi
movq %rax, %rdi
callq 0x32b0
movq %rax, %r15
movq 0x10(%r14), %rsi
movq %rsp, %rdi
callq 0x3e92
movq %rsp, %rsi
movq %r15, %rdi
callq 0x3200
pushq $0x29
popq %rsi
movq %rax, %rdi
callq 0x32b0
jmp 0x3f45
movq (%r14), %rdi
cmpq 0x5f974(%rip), %rdi     # 0x639e8
je 0x44af
cmpq 0x5f977(%rip), %rdi     # 0x639f8
je 0x451c
cmpq 0x5f962(%rip), %rdi     # 0x639f0
je 0x455b
cmpq 0x5f93d(%rip), %rdi     # 0x639d8
je 0x4588
cmpq 0x5f928(%rip), %rdi     # 0x639d0
je 0x45ce
cmpq 0x5f913(%rip), %rdi     # 0x639c8
jne 0x45a4
movabsq $0x1ffffffffff, %rax    # imm = 0x1FFFFFFFFFF
andq 0x10(%r14), %rax
cmpq $0x7800, %rax           # imm = 0x7800
jne 0x45a4
leaq 0x15cb3(%rip), %rsi     # 0x19d8f
jmp 0x4406
movq 0x10(%r14), %rsi
movq %rsp, %rdi
xorl %edx, %edx
callq 0x12a52
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0x3200
jmp 0x3f45
leaq 0x15bd9(%rip), %rsi     # 0x19ce1
leaq 0x40(%rsp), %rdi
callq 0x3220
movq %rax, %r15
movq 0x18(%r14), %rsi
movq %rsp, %rdi
xorl %edx, %edx
callq 0x12a52
movq %rsp, %rsi
movq %r15, %rdi
callq 0x3200
jmp 0x3f45
leaq 0x15c40(%rip), %rsi     # 0x19d7a
leaq 0x40(%rsp), %rdi
callq 0x3220
movq (%r14), %rsi
shlq $0x17, %rsi
sarq $0x17, %rsi
movq %rax, %rdi
callq 0x3210
pushq $0x29
popq %rsi
movq %rax, %rdi
callq 0x32b0
jmp 0x3f4d
movq 0x10(%r14), %rsi
movq %rsp, %rdi
callq 0x3e92
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0x3200
pushq $0x5b
popq %rsi
movq %rax, %rdi
callq 0x32b0
movq %rax, %r15
movq 0x18(%r14), %rsi
leaq 0x20(%rsp), %rdi
callq 0x3e92
leaq 0x20(%rsp), %rsi
movq %r15, %rdi
callq 0x3200
pushq $0x5d
popq %rsi
movq %rax, %rdi
callq 0x32b0
jmp 0x3f3b
movq 0x10(%r14), %rsi
movq %rsp, %rdi
callq 0x3e92
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0x3200
pushq $0x2e
popq %rsi
movq %rax, %rdi
callq 0x32b0
movq %rax, %r15
movq 0x18(%r14), %rsi
leaq 0x20(%rsp), %rdi
xorl %edx, %edx
callq 0x12a52
leaq 0x20(%rsp), %rsi
movq %r15, %rdi
callq 0x3200
jmp 0x3f3b
leaq 0x40(%rsp), %rdi
pushq $0x5b
popq %rsi
callq 0x32b0
movq %rax, %r15
movq 0x10(%r14), %rsi
movq %rsp, %rdi
callq 0x3e92
movq %rsp, %rsi
movq %r15, %rdi
callq 0x3200
leaq 0x15979(%rip), %rsi     # 0x19ba9
movq %rax, %rdi
callq 0x3220
movq %rax, %r15
movq 0x18(%r14), %rsi
leaq 0x20(%rsp), %rdi
callq 0x3e92
leaq 0x20(%rsp), %rsi
movq %r15, %rdi
callq 0x3200
pushq $0x5d
popq %rsi
movq %rax, %rdi
callq 0x32b0
jmp 0x3f3b
leaq 0x15a75(%rip), %rsi     # 0x19ce2
leaq 0x40(%rsp), %rdi
callq 0x3220
movq %rax, %r15
movq 0x18(%r14), %rsi
movq %rsp, %rdi
xorl %edx, %edx
callq 0x12a52
movq %rsp, %rsi
movq %r15, %rdi
callq 0x3200
movq %rsp, %rdi
callq 0x3498
cmpq $0x0, 0x10(%r14)
je 0x3f4d
leaq 0x15b1c(%rip), %rsi     # 0x19dc9
leaq 0x40(%rsp), %rdi
callq 0x3220
movq 0x10(%r14), %rbp
movq %rsp, %r15
leaq 0x40(%rsp), %r12
leaq 0x15af7(%rip), %r13     # 0x19dc1
cmpq 0x10(%r14), %rbp
je 0x42db
movq %r12, %rdi
movq %r13, %rsi
callq 0x3220
movq 0x18(%rbp), %rsi
movq %r15, %rdi
callq 0x3e92
movq %r12, %rdi
movq %r15, %rsi
callq 0x3200
movq %r15, %rdi
callq 0x3498
movq 0x10(%rbp), %rbp
testq %rbp, %rbp
jne 0x42ca
leaq 0x164ae(%rip), %rsi     # 0x1a7b8
leaq 0x40(%rsp), %rdi
callq 0x3220
jmp 0x3f4d
movq 0x10(%r14), %rsi
movq %rsp, %rdi
callq 0x3e92
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0x3200
movl 0x8(%r14), %ecx
leaq 0x1e5b3(%rip), %rdx     # 0x228f0
movq (%rdx,%rcx,8), %rsi
movq %rax, %rdi
callq 0x3220
movq %rax, %r15
movq 0x18(%r14), %rsi
leaq 0x20(%rsp), %rdi
callq 0x3e92
leaq 0x20(%rsp), %rsi
movq %r15, %rdi
callq 0x3200
jmp 0x3f3b
leaq 0x15a51(%rip), %rsi     # 0x19dc4
leaq 0x40(%rsp), %rdi
callq 0x3220
movq %rax, %r15
movq 0x10(%r14), %rsi
movq %rsp, %rdi
callq 0x3e92
movq %rsp, %rsi
movq %r15, %rdi
callq 0x3200
leaq 0x15a23(%rip), %rsi     # 0x19dc1
movq %rax, %rdi
callq 0x3220
movq %rax, %r15
movq 0x18(%r14), %rsi
leaq 0x20(%rsp), %rdi
callq 0x3b5a
leaq 0x20(%rsp), %rsi
movq %r15, %rdi
callq 0x3200
pushq $0x29
popq %rsi
movq %rax, %rdi
callq 0x32b0
jmp 0x3f3b
leaq 0x159f0(%rip), %rsi     # 0x19dcb
leaq 0x40(%rsp), %rdi
callq 0x3220
movl 0x8(%r14), %ecx
leaq 0x1e500(%rip), %rdx     # 0x228f0
movq (%rdx,%rcx,8), %rsi
movq %rax, %rdi
callq 0x3220
movq %rax, %r15
leaq 0x159ae(%rip), %rsi     # 0x19db4
movq %r15, %rdi
callq 0x3220
jmp 0x3f4d
cmpq $0x1d, %rax
jg 0x4472
leaq 0x1ee70(%rip), %rcx     # 0x23290
movq (%rcx,%rax,8), %rsi
movq %rsp, %rdi
callq 0x47ad
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0x3200
pushq $0x28
popq %rsi
movq %rax, %rdi
callq 0x32b0
movq %rax, %r15
movq 0x10(%r14), %rsi
leaq 0x20(%rsp), %rdi
callq 0x3e92
leaq 0x20(%rsp), %rsi
movq %r15, %rdi
callq 0x3200
pushq $0x29
popq %rsi
movq %rax, %rdi
callq 0x32b0
jmp 0x3f3b
cmpq $0x6d, %rax
jne 0x44ca
leaq 0x40(%rsp), %rdi
pushq $0x5b
popq %rsi
callq 0x32b0
movq %rax, %r15
movq 0x10(%r14), %rsi
movq %rsp, %rdi
callq 0x3e92
movq %rsp, %rsi
movq %r15, %rdi
callq 0x3200
pushq $0x5d
popq %rsi
movq %rax, %rdi
callq 0x32b0
jmp 0x3f45
movq 0x10(%r14), %rsi
shlq $0x17, %rsi
sarq $0x17, %rsi
leaq 0x40(%rsp), %rdi
callq 0x3210
jmp 0x3f4d
leaq 0x158e6(%rip), %rsi     # 0x19db7
leaq 0x40(%rsp), %rdi
callq 0x3220
movq 0x18(%r14), %rsi
movq %rax, %rdi
callq 0x3210
pushq $0x28
popq %rsi
movq %rax, %rdi
callq 0x32b0
movq %rax, %r15
movq 0x10(%r14), %rsi
movq %rsp, %rdi
callq 0x3e92
movq %rsp, %rsi
movq %r15, %rdi
callq 0x3200
pushq $0x29
popq %rsi
movq %rax, %rdi
callq 0x32b0
jmp 0x3f45
leaq 0x1585a(%rip), %rsi     # 0x19d7d
leaq 0x40(%rsp), %rdi
callq 0x3220
movq %rax, %r15
movl 0x10(%r14), %esi
movq %rsp, %rdi
callq 0x4848
movq %rsp, %rsi
movq %r15, %rdi
callq 0x3200
leaq 0x1582f(%rip), %rsi     # 0x19d7d
movq %rax, %rdi
callq 0x3220
jmp 0x3f45
leaq 0x1581d(%rip), %rsi     # 0x19d7f
leaq 0x40(%rsp), %rdi
callq 0x3220
movq %rax, %r15
addq $0x10, %r14
movq %r14, %rdi
callq 0x128ea
movq %r15, %rdi
callq 0x3390
jmp 0x3f4d
cmpq $0x0, 0x10(%r14)
leaq 0x157f5(%rip), %rax     # 0x19d89
leaq 0x157e9(%rip), %rsi     # 0x19d84
cmoveq %rax, %rsi
jmp 0x4406
movl 0x10(%rdi), %eax
cmpl $0x5, %eax
je 0x45ef
cmpl $0x1, %eax
jne 0x4601
leaq 0x157db(%rip), %rsi     # 0x19d93
leaq 0x40(%rsp), %rdi
callq 0x3220
movq %rax, %rdi
movq 0x10(%r14), %rsi
jmp 0x44c0
addq $0x10, %r14
movq %rsp, %rdi
movq %r14, %rsi
callq 0x48ce
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0x3200
jmp 0x3f45
callq 0x12c02
movq 0x18(%rax), %rax
cmpq 0x5f3f9(%rip), %rax     # 0x639f8
je 0x463f
leaq 0x157a1(%rip), %rsi     # 0x19da9
leaq 0x40(%rsp), %rdi
callq 0x3220
movq %rax, %r15
movq (%r14), %rsi
movq %rsp, %rdi
callq 0x3b5a
movq %rsp, %rsi
movq %r15, %rdi
callq 0x3200
leaq 0x15781(%rip), %rsi     # 0x19db3
movq %rax, %rdi
callq 0x3220
jmp 0x3f45
movq (%r14), %rax
pushq $0x2
popq %rbp
leaq 0x5f484(%rip), %rcx     # 0x63ad0
cmpq $0x7, %rbp
je 0x465d
cmpq (%rcx,%rbp,8), %rax
je 0x4687
incq %rbp
jmp 0x464c
leaq 0x15734(%rip), %rsi     # 0x19d98
leaq 0x40(%rsp), %rdi
callq 0x3220
movq 0x10(%r14), %rsi
shlq $0x17, %rsi
sarq $0x17, %rsi
movq %rax, %rdi
callq 0x3210
jmp 0x3f4d
leaq 0x156ef(%rip), %rsi     # 0x19d7d
leaq 0x40(%rsp), %rdi
callq 0x3220
pushq $0x28
popq %r15
movq %rsp, %r12
leaq 0x40(%rsp), %r13
subq $0x1, %rbp
jb 0x46e5
movq 0x10(%r14), %rax
movabsq $0xffffffffffff, %rcx   # imm = 0xFFFFFFFFFFFF
andq %rcx, %rax
movl %r15d, %ecx
shrq %cl, %rax
movzbl %al, %esi
movq %r12, %rdi
callq 0x4848
movq %r13, %rdi
movq %r12, %rsi
callq 0x3200
movq %r12, %rdi
callq 0x3498
addq $-0x8, %r15
jmp 0x46a4
leaq 0x15691(%rip), %rsi     # 0x19d7d
leaq 0x40(%rsp), %rdi
callq 0x3220
jmp 0x3f4d
jmp 0x4798
jmp 0x4798
jmp 0x478b
jmp 0x4798
jmp 0x478b
jmp 0x4798
jmp 0x478b
jmp 0x478b
jmp 0x4798
jmp 0x4798
jmp 0x4798
jmp 0x4798
jmp 0x4798
jmp 0x477c
jmp 0x478b
jmp 0x478b
jmp 0x478b
jmp 0x478b
jmp 0x4798
jmp 0x478b
jmp 0x478b
jmp 0x477c
jmp 0x478b
jmp 0x477c
jmp 0x478b
jmp 0x478b
jmp 0x478b
jmp 0x478b
jmp 0x478b
jmp 0x478b
jmp 0x4798
jmp 0x4798
jmp 0x4798
jmp 0x4798
jmp 0x478b
jmp 0x4798
jmp 0x4798
jmp 0x4798
jmp 0x4798
jmp 0x4798
jmp 0x477c
jmp 0x477c
jmp 0x477c
jmp 0x478b
jmp 0x478b
jmp 0x478b
jmp 0x478b
jmp 0x478b
jmp 0x4798
jmp 0x478b
jmp 0x478b
jmp 0x4798
jmp 0x4798
jmp 0x4798
jmp 0x478b
jmp 0x478b
jmp 0x4798
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x3498
jmp 0x478e
movq %rax, %rbx
movq %rsp, %rdi
callq 0x3498
jmp 0x479b
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x3070
movq %rbx, %rdi
callq 0x33f0