// File: /workspace/github_c_makefile_star2_O0/generot[P]VM-0/src/lang/vc.cc
// Function: inpout(lexer&)
void inpout(lexer& lx) {
    if(!(EXPECT("?") || EXPECT("!")))
        return;

    instr in = instr();

    string op = lx.accept();
    string ident = lx.accept();

    symbol sym = symbol_table[ident];
    if(!sym.addr)
        ISSUE_ERROR("Undefined reference to variable \"%s\".", ident.c_str());

    if(op == "?") {
        in = { INST_ADDR, OPC_SYSCALL, SC_READ };
        in.addr = sym.addr;

        bytecode.push_back(in);
    }
    else if(op == "!") {
        in = { INST_ADDR, OPC_PUSH, SC_INVALID };
        in.addr = sym.addr;

        bytecode.push_back(in);
        bytecode.push_back({ INST_NOARGS, OPC_DEREF, SC_INVALID });
        bytecode.push_back({ INST_NOARGS, OPC_SYSCALL, SC_WRITELN });
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1a0, %rsp            # imm = 0x1A0
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x160(%rbp)
leaq -0x29(%rbp), %rdi
movq %rdi, -0x158(%rbp)
callq 0x56e0
movq -0x158(%rbp), %rdx
movb $0x0, -0x62(%rbp)
movb $0x0, -0x63(%rbp)
leaq 0x63aa(%rip), %rsi      # 0x3a17a
leaq -0x28(%rbp), %rdi
callq 0x6b50
jmp 0x33ddb
movq -0x160(%rbp), %rdi
leaq -0x28(%rbp), %rsi
xorl %edx, %edx
callq 0x5a00
movb %al, -0x161(%rbp)
jmp 0x33df5
movb -0x161(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x162(%rbp)
jne 0x33e6e
jmp 0x33e0a
movq -0x8(%rbp), %rax
movq %rax, -0x178(%rbp)
leaq -0x61(%rbp), %rdi
movq %rdi, -0x170(%rbp)
callq 0x56e0
movq -0x170(%rbp), %rdx
movb $0x1, -0x62(%rbp)
leaq 0x6345(%rip), %rsi      # 0x3a17c
leaq -0x60(%rbp), %rdi
callq 0x6b50
jmp 0x33e42
movq -0x178(%rbp), %rdi
movb $0x1, -0x63(%rbp)
leaq -0x60(%rbp), %rsi
xorl %edx, %edx
callq 0x5a00
movb %al, -0x179(%rbp)
jmp 0x33e60
movb -0x179(%rbp), %al
movb %al, -0x162(%rbp)
jmp 0x33e6e
movb -0x162(%rbp), %al
xorb $-0x1, %al
movb %al, -0x17a(%rbp)
testb $0x1, -0x63(%rbp)
jne 0x33e84
jmp 0x33e8d
leaq -0x60(%rbp), %rdi
callq 0x5260
testb $0x1, -0x62(%rbp)
jne 0x33e95
jmp 0x33e9e
leaq -0x61(%rbp), %rdi
callq 0x5460
leaq -0x28(%rbp), %rdi
callq 0x5260
leaq -0x29(%rbp), %rdi
callq 0x5460
movb -0x17a(%rbp), %al
testb $0x1, %al
jne 0x33ebc
jmp 0x33f34
jmp 0x341d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x33f26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x33f1d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x33f0a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
testb $0x1, -0x63(%rbp)
jne 0x33eff
jmp 0x33f08
leaq -0x60(%rbp), %rdi
callq 0x5260
jmp 0x33f0a
testb $0x1, -0x62(%rbp)
jne 0x33f12
jmp 0x33f1b
leaq -0x61(%rbp), %rdi
callq 0x5460
jmp 0x33f1d
leaq -0x28(%rbp), %rdi
callq 0x5260
leaq -0x29(%rbp), %rdi
callq 0x5460
jmp 0x341f1
xorps %xmm0, %xmm0
movaps %xmm0, -0x80(%rbp)
movq $0x0, -0x70(%rbp)
movq -0x8(%rbp), %rsi
leaq -0xa0(%rbp), %rdi
callq 0x5c20
movq -0x8(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x5c20
jmp 0x33f65
leaq 0x208bc(%rip), %rdi     # 0x54828
leaq -0xc0(%rbp), %rsi
callq 0x35910
movq %rax, -0x188(%rbp)
jmp 0x33f81
movq -0x188(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0x35a90
jmp 0x33f96
cmpq $0x0, -0xc8(%rbp)
jne 0x34001
movq 0x20019(%rip), %rax     # 0x53fc0
movq (%rax), %rax
movq %rax, -0x190(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0x5170
movq -0x190(%rbp), %rdi
movq %rax, %rdx
leaq 0x61b0(%rip), %rsi      # 0x3a17e
movb $0x0, %al
callq 0x55e0
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x54f0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x341e5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x341d9
leaq 0x6172(%rip), %rsi      # 0x3a17a
leaq -0xa0(%rbp), %rdi
callq 0x6ad0
movb %al, -0x191(%rbp)
jmp 0x3401c
movb -0x191(%rbp), %al
testb $0x1, %al
jne 0x34028
jmp 0x340a6
movl $0x1, -0x108(%rbp)
movl $0x25, -0x104(%rbp)
movl $0x2, -0x100(%rbp)
movq $0x0, -0xf8(%rbp)
movq -0xf8(%rbp), %rax
movq %rax, -0x70(%rbp)
movups -0x108(%rbp), %xmm0
movaps %xmm0, -0x80(%rbp)
movq -0xc8(%rbp), %rax
movq %rax, -0x70(%rbp)
leaq 0x207df(%rip), %rdi     # 0x54858
leaq -0x80(%rbp), %rsi
callq 0x35b00
jmp 0x34084
jmp 0x341ac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0x35a40
jmp 0x341d9
leaq 0x60cf(%rip), %rsi      # 0x3a17c
leaq -0xa0(%rbp), %rdi
callq 0x6ad0
movb %al, -0x192(%rbp)
jmp 0x340c1
movb -0x192(%rbp), %al
testb $0x1, %al
jne 0x340d0
jmp 0x341aa
movl $0x1, -0x120(%rbp)
movl $0x10, -0x11c(%rbp)
movl $0x3, -0x118(%rbp)
movq $0x0, -0x110(%rbp)
movq -0x110(%rbp), %rax
movq %rax, -0x70(%rbp)
movups -0x120(%rbp), %xmm0
movaps %xmm0, -0x80(%rbp)
movq -0xc8(%rbp), %rax
movq %rax, -0x70(%rbp)
leaq 0x20737(%rip), %rdi     # 0x54858
leaq -0x80(%rbp), %rsi
callq 0x35b00
jmp 0x3412c
movl $0x2, -0x138(%rbp)
movl $0x12, -0x134(%rbp)
movl $0x3, -0x130(%rbp)
movq $0x0, -0x128(%rbp)
leaq 0x206fc(%rip), %rdi     # 0x54858
leaq -0x138(%rbp), %rsi
callq 0x35a60
jmp 0x3416a
movl $0x2, -0x150(%rbp)
movl $0x25, -0x14c(%rbp)
movl $0x1, -0x148(%rbp)
movq $0x0, -0x140(%rbp)
leaq 0x206be(%rip), %rdi     # 0x54858
leaq -0x150(%rbp), %rsi
callq 0x35a60
jmp 0x341a8
jmp 0x341aa
jmp 0x341ac
leaq -0xf0(%rbp), %rdi
callq 0x35a40
leaq -0xc0(%rbp), %rdi
callq 0x5260
leaq -0xa0(%rbp), %rdi
callq 0x5260
addq $0x1a0, %rsp            # imm = 0x1A0
popq %rbp
retq
leaq -0xc0(%rbp), %rdi
callq 0x5260
leaq -0xa0(%rbp), %rdi
callq 0x5260
movq -0x38(%rbp), %rdi
callq 0x56d0
nopw (%rax,%rax)