// File: prippa[P]Abstract-VM/source/CommandsExecutor.class.cpp
// Function: CommandsExecutor::CommandsExecutor()
CommandsExecutor::CommandsExecutor(void)
{
	type_.emplace(TP_INT8, Int8);
	type_.emplace(TP_INT16, Int16);
	type_.emplace(TP_INT32, Int32);
	type_.emplace(TP_FLOAT, Float);
	type_.emplace(TP_DOUBLE, Double);

	cmd_.emplace(CM_POP, &CommandsExecutor::ce_pop);
	cmd_.emplace(CM_DUMP, &CommandsExecutor::ce_dump);
	cmd_.emplace(CM_ADD, &CommandsExecutor::ce_add);
	cmd_.emplace(CM_SUB, &CommandsExecutor::ce_sub);
	cmd_.emplace(CM_MUL, &CommandsExecutor::ce_mul);
	cmd_.emplace(CM_DIV, &CommandsExecutor::ce_div);
	cmd_.emplace(CM_MOD, &CommandsExecutor::ce_mod);
	cmd_.emplace(CM_PRINT, &CommandsExecutor::ce_print);
	cmd_.emplace(CM_EXIT, &CommandsExecutor::ce_exit);

	// Bonus
	cmd_.emplace(CM_MORE, &CommandsExecutor::ce_more);
	cmd_.emplace(CM_LESS, &CommandsExecutor::ce_less);
	cmd_.emplace(CM_MAX, &CommandsExecutor::ce_max);
	cmd_.emplace(CM_MIN, &CommandsExecutor::ce_min);
	cmd_.emplace(CM_DEBUG, &CommandsExecutor::ce_debug);


	cmd_.emplace(CM_PUSH, &CommandsExecutor::ce_push);
	cmd_.emplace(CM_ASSERT, &CommandsExecutor::ce_assert);

	left_ = nullptr;
	right_ = nullptr;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x400, %rsp            # imm = 0x400
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x2a8(%rbp)
movq %rdi, %rax
movq %rax, -0x2b8(%rbp)
callq 0x3cb10
movq -0x2a8(%rbp), %rdi
addq $0x30, %rdi
movq %rdi, -0x2b0(%rbp)
callq 0x3cb30
movq -0x2a8(%rbp), %rdi
movl $0x0, -0xc(%rbp)
leaq 0x6334(%rip), %rsi      # 0x42149
leaq -0xc(%rbp), %rdx
callq 0x3cb50
movb %dl, -0x299(%rbp)
movq %rax, -0x298(%rbp)
jmp 0x3be2d
movq -0x2b8(%rbp), %rdi
movb -0x299(%rbp), %al
movq -0x298(%rbp), %rcx
movq %rcx, -0x30(%rbp)
movb %al, -0x28(%rbp)
movl $0x1, -0x34(%rbp)
leaq 0x761d(%rip), %rsi      # 0x43473
leaq -0x34(%rbp), %rdx
callq 0x3cba0
movb %dl, -0x2c1(%rbp)
movq %rax, -0x2c0(%rbp)
jmp 0x3be6e
movq -0x2b8(%rbp), %rdi
movb -0x2c1(%rbp), %al
movq -0x2c0(%rbp), %rcx
movq %rcx, -0x48(%rbp)
movb %al, -0x40(%rbp)
movl $0x2, -0x4c(%rbp)
leaq 0x75d6(%rip), %rsi      # 0x4346d
leaq -0x4c(%rbp), %rdx
callq 0x3cba0
movb %dl, -0x2d1(%rbp)
movq %rax, -0x2d0(%rbp)
jmp 0x3beaf
movq -0x2b8(%rbp), %rdi
movb -0x2d1(%rbp), %al
movq -0x2d0(%rbp), %rcx
movq %rcx, -0x60(%rbp)
movb %al, -0x58(%rbp)
movl $0x3, -0x64(%rbp)
leaq 0x758f(%rip), %rsi      # 0x43467
leaq -0x64(%rbp), %rdx
callq 0x3cba0
movb %dl, -0x2e1(%rbp)
movq %rax, -0x2e0(%rbp)
jmp 0x3bef0
movq -0x2b8(%rbp), %rdi
movb -0x2e1(%rbp), %al
movq -0x2e0(%rbp), %rcx
movq %rcx, -0x78(%rbp)
movb %al, -0x70(%rbp)
movl $0x4, -0x7c(%rbp)
leaq 0x7547(%rip), %rsi      # 0x43460
leaq -0x7c(%rbp), %rdx
callq 0x3cbf0
movb %dl, -0x2f1(%rbp)
movq %rax, -0x2f0(%rbp)
jmp 0x3bf31
movq -0x2b8(%rbp), %rdi
movb -0x2f1(%rbp), %al
movq -0x2f0(%rbp), %rcx
movq %rcx, -0x90(%rbp)
movb %al, -0x88(%rbp)
addq $0x30, %rdi
leaq -0x1bdd(%rip), %rax     # 0x3a380
movq %rax, -0xa0(%rbp)
movq $0x0, -0x98(%rbp)
leaq 0x7675(%rip), %rsi      # 0x435eb
leaq -0xa0(%rbp), %rdx
callq 0x3cc40
movb %dl, -0x301(%rbp)
movq %rax, -0x300(%rbp)
jmp 0x3bf91
movq -0x2b8(%rbp), %rdi
movb -0x301(%rbp), %al
movq -0x300(%rbp), %rcx
movq %rcx, -0xb0(%rbp)
movb %al, -0xa8(%rbp)
addq $0x30, %rdi
leaq -0x1b1d(%rip), %rax     # 0x3a4a0
movq %rax, -0xc0(%rbp)
movq $0x0, -0xb8(%rbp)
leaq 0x7619(%rip), %rsi      # 0x435ef
leaq -0xc0(%rbp), %rdx
callq 0x3cc90
movb %dl, -0x311(%rbp)
movq %rax, -0x310(%rbp)
jmp 0x3bff1
movq -0x2b8(%rbp), %rdi
movb -0x311(%rbp), %al
movq -0x310(%rbp), %rcx
movq %rcx, -0xd0(%rbp)
movb %al, -0xc8(%rbp)
addq $0x30, %rdi
leaq -0x1aed(%rip), %rax     # 0x3a530
movq %rax, -0xe0(%rbp)
movq $0x0, -0xd8(%rbp)
leaq 0x75be(%rip), %rsi      # 0x435f4
leaq -0xe0(%rbp), %rdx
callq 0x3cc40
movb %dl, -0x321(%rbp)
movq %rax, -0x320(%rbp)
jmp 0x3c051
movq -0x2b8(%rbp), %rdi
movb -0x321(%rbp), %al
movq -0x320(%rbp), %rcx
movq %rcx, -0xf0(%rbp)
movb %al, -0xe8(%rbp)
addq $0x30, %rdi
leaq -0x1a2d(%rip), %rax     # 0x3a650
movq %rax, -0x100(%rbp)
movq $0x0, -0xf8(%rbp)
leaq 0x7562(%rip), %rsi      # 0x435f8
leaq -0x100(%rbp), %rdx
callq 0x3cc40
movb %dl, -0x331(%rbp)
movq %rax, -0x330(%rbp)
jmp 0x3c0b1
movq -0x2b8(%rbp), %rdi
movb -0x331(%rbp), %al
movq -0x330(%rbp), %rcx
movq %rcx, -0x110(%rbp)
movb %al, -0x108(%rbp)
addq $0x30, %rdi
leaq -0x196d(%rip), %rax     # 0x3a770
movq %rax, -0x120(%rbp)
movq $0x0, -0x118(%rbp)
leaq 0x7506(%rip), %rsi      # 0x435fc
leaq -0x120(%rbp), %rdx
callq 0x3cc40
movb %dl, -0x341(%rbp)
movq %rax, -0x340(%rbp)
jmp 0x3c111
movq -0x2b8(%rbp), %rdi
movb -0x341(%rbp), %al
movq -0x340(%rbp), %rcx
movq %rcx, -0x130(%rbp)
movb %al, -0x128(%rbp)
addq $0x30, %rdi
leaq -0x18ad(%rip), %rax     # 0x3a890
movq %rax, -0x140(%rbp)
movq $0x0, -0x138(%rbp)
leaq 0x74aa(%rip), %rsi      # 0x43600
leaq -0x140(%rbp), %rdx
callq 0x3cc40
movb %dl, -0x351(%rbp)
movq %rax, -0x350(%rbp)
jmp 0x3c171
movq -0x2b8(%rbp), %rdi
movb -0x351(%rbp), %al
movq -0x350(%rbp), %rcx
movq %rcx, -0x150(%rbp)
movb %al, -0x148(%rbp)
addq $0x30, %rdi
leaq -0x17ed(%rip), %rax     # 0x3a9b0
movq %rax, -0x160(%rbp)
movq $0x0, -0x158(%rbp)
leaq 0x744e(%rip), %rsi      # 0x43604
leaq -0x160(%rbp), %rdx
callq 0x3cc40
movb %dl, -0x361(%rbp)
movq %rax, -0x360(%rbp)
jmp 0x3c1d1
movq -0x2b8(%rbp), %rdi
movb -0x361(%rbp), %al
movq -0x360(%rbp), %rcx
movq %rcx, -0x170(%rbp)
movb %al, -0x168(%rbp)
addq $0x30, %rdi
leaq -0x172d(%rip), %rax     # 0x3aad0
movq %rax, -0x180(%rbp)
movq $0x0, -0x178(%rbp)
leaq 0x639b(%rip), %rsi      # 0x425b1
leaq -0x180(%rbp), %rdx
callq 0x3cce0
movb %dl, -0x371(%rbp)
movq %rax, -0x370(%rbp)
jmp 0x3c231
movq -0x2b8(%rbp), %rdi
movb -0x371(%rbp), %al
movq -0x370(%rbp), %rcx
movq %rcx, -0x190(%rbp)
movb %al, -0x188(%rbp)
addq $0x30, %rdi
leaq -0x15dd(%rip), %rax     # 0x3ac80
movq %rax, -0x1a0(%rbp)
movq $0x0, -0x198(%rbp)
leaq 0x61f9(%rip), %rsi      # 0x4246f
leaq -0x1a0(%rbp), %rdx
callq 0x3cc90
movb %dl, -0x381(%rbp)
movq %rax, -0x380(%rbp)
jmp 0x3c291
movq -0x2b8(%rbp), %rdi
movb -0x381(%rbp), %al
movq -0x380(%rbp), %rcx
movq %rcx, -0x1b0(%rbp)
movb %al, -0x1a8(%rbp)
addq $0x30, %rdi
leaq -0x95d(%rip), %rax      # 0x3b960
movq %rax, -0x1c0(%rbp)
movq $0x0, -0x1b8(%rbp)
leaq 0x7332(%rip), %rsi      # 0x43608
leaq -0x1c0(%rbp), %rdx
callq 0x3cc90
movb %dl, -0x391(%rbp)
movq %rax, -0x390(%rbp)
jmp 0x3c2f1
movq -0x2b8(%rbp), %rdi
movb -0x391(%rbp), %al
movq -0x390(%rbp), %rcx
movq %rcx, -0x1d0(%rbp)
movb %al, -0x1c8(%rbp)
addq $0x30, %rdi
leaq -0xccd(%rip), %rax      # 0x3b650
movq %rax, -0x1e0(%rbp)
movq $0x0, -0x1d8(%rbp)
leaq 0x72d7(%rip), %rsi      # 0x4360d
leaq -0x1e0(%rbp), %rdx
callq 0x3cc90
movb %dl, -0x3a1(%rbp)
movq %rax, -0x3a0(%rbp)
jmp 0x3c351
movq -0x2b8(%rbp), %rdi
movb -0x3a1(%rbp), %al
movq -0x3a0(%rbp), %rcx
movq %rcx, -0x1f0(%rbp)
movb %al, -0x1e8(%rbp)
addq $0x30, %rdi
leaq -0x16dd(%rip), %rax     # 0x3aca0
movq %rax, -0x200(%rbp)
movq $0x0, -0x1f8(%rbp)
leaq 0x727c(%rip), %rsi      # 0x43612
leaq -0x200(%rbp), %rdx
callq 0x3cc40
movb %dl, -0x3b1(%rbp)
movq %rax, -0x3b0(%rbp)
jmp 0x3c3b1
movq -0x2b8(%rbp), %rdi
movb -0x3b1(%rbp), %al
movq -0x3b0(%rbp), %rcx
movq %rcx, -0x210(%rbp)
movb %al, -0x208(%rbp)
addq $0x30, %rdi
leaq -0x157d(%rip), %rax     # 0x3ae60
movq %rax, -0x220(%rbp)
movq $0x0, -0x218(%rbp)
leaq 0x7220(%rip), %rsi      # 0x43616
leaq -0x220(%rbp), %rdx
callq 0x3cc40
movb %dl, -0x3c1(%rbp)
movq %rax, -0x3c0(%rbp)
jmp 0x3c411
movq -0x2b8(%rbp), %rdi
movb -0x3c1(%rbp), %al
movq -0x3c0(%rbp), %rcx
movq %rcx, -0x230(%rbp)
movb %al, -0x228(%rbp)
addq $0x30, %rdi
leaq -0x141d(%rip), %rax     # 0x3b020
movq %rax, -0x240(%rbp)
movq $0x0, -0x238(%rbp)
leaq 0x71c4(%rip), %rsi      # 0x4361a
leaq -0x240(%rbp), %rdx
callq 0x3cce0
movb %dl, -0x3d1(%rbp)
movq %rax, -0x3d0(%rbp)
jmp 0x3c471
movq -0x2b8(%rbp), %rdi
movb -0x3d1(%rbp), %al
movq -0x3d0(%rbp), %rcx
movq %rcx, -0x250(%rbp)
movb %al, -0x248(%rbp)
addq $0x30, %rdi
leaq -0x128d(%rip), %rax     # 0x3b210
movq %rax, -0x260(%rbp)
movq $0x0, -0x258(%rbp)
leaq 0x716a(%rip), %rsi      # 0x43620
leaq -0x260(%rbp), %rdx
callq 0x3cc90
movb %dl, -0x3e1(%rbp)
movq %rax, -0x3e0(%rbp)
jmp 0x3c4d1
movq -0x2b8(%rbp), %rdi
movb -0x3e1(%rbp), %al
movq -0x3e0(%rbp), %rcx
movq %rcx, -0x270(%rbp)
movb %al, -0x268(%rbp)
addq $0x30, %rdi
leaq -0x11bd(%rip), %rax     # 0x3b340
movq %rax, -0x280(%rbp)
movq $0x0, -0x278(%rbp)
leaq 0x710f(%rip), %rsi      # 0x43625
leaq -0x280(%rbp), %rdx
callq 0x3cd30
movb %dl, -0x3f1(%rbp)
movq %rax, -0x3f0(%rbp)
jmp 0x3c531
movq -0x2b8(%rbp), %rax
movb -0x3f1(%rbp), %cl
movq -0x3f0(%rbp), %rdx
movq %rdx, -0x290(%rbp)
movb %cl, -0x288(%rbp)
movq $0x0, 0x68(%rax)
movq $0x0, 0x60(%rax)
addq $0x400, %rsp            # imm = 0x400
popq %rbp
retq
movq -0x2b0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
callq 0x3cd80
movq -0x2a8(%rbp), %rdi
callq 0x3cda0
movq -0x18(%rbp), %rdi
callq 0x7730
nopl (%rax,%rax)