// File: /workspace/github_cpp_makefile_star2_O2/eniac[P]Mantis/src/ast/ast_nodes_p4.cpp
// Function: TableNode::TableNode(AstNode*, AstNode*, AstNode*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
TableNode::TableNode(AstNode* name, AstNode* reads, AstNode* actions,
                     string options, string pragma) {
    nodeType_ = typeid(*this).name();
    name_ = dynamic_cast<NameNode*>(name);
    name_->parent_ = this;
    reads_ = dynamic_cast<TableReadStmtsNode*>(reads);
    if (reads_) reads_->parent_ = this;
    actions_ = dynamic_cast<TableActionStmtsNode*>(actions);
    actions_->parent_ = this;

    pragma_ = pragma;

    boost::algorithm::trim_right_if(options, boost::is_any_of("; \t\n"));
    if (options != "") {
        boost::split(options_, options, boost::is_any_of(";"));
    }
    for (int i = 0; i < options_.size(); i++){
        boost::algorithm::trim(options_[i]);
    }
    isMalleable_ = false;
    pragmaTransformed_ = false;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movq %r9, -0x40(%rbp)
movq %r8, %r12
movq %rcx, %r14
movq %rdx, %r15
movq %rsi, %r13
movq %rdi, %rbx
callq 0x448c4
leaq 0x4ca02(%rip), %rax     # 0x94c60
movq %rax, (%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x58(%rbx)
andq $0x0, 0x68(%rbx)
leaq 0x80(%rbx), %rax
movq %rax, 0x70(%rbx)
andq $0x0, 0x78(%rbx)
leaq 0x58(%rbx), %rax
movq %rax, -0x30(%rbp)
leaq 0x70(%rbx), %rax
movq %rax, -0x38(%rbp)
movb $0x0, 0x80(%rbx)
leaq 0x10(%rbx), %rdi
leaq 0x30c8f(%rip), %rsi     # 0x78f2e
callq 0x41850
leaq 0x4c3e5(%rip), %rsi     # 0x94690
leaq 0x4c78e(%rip), %rdx     # 0x94a40
movq %r13, %rdi
xorl %ecx, %ecx
callq 0x41480
movq %rax, 0x40(%rbx)
movq %rbx, 0x30(%rax)
testq %r15, %r15
je 0x482f0
leaq 0x4c3c0(%rip), %rsi     # 0x94690
leaq 0x4c991(%rip), %rdx     # 0x94c68
movq %r15, %rdi
xorl %ecx, %ecx
callq 0x41480
movq %rax, 0x48(%rbx)
testq %rax, %rax
je 0x482f5
movq %rbx, 0x30(%rax)
jmp 0x482f5
andq $0x0, 0x48(%rbx)
leaq 0x4c394(%rip), %rsi     # 0x94690
leaq 0x4c97d(%rip), %rdx     # 0x94c80
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x41480
movq %rax, 0x50(%rbx)
movq %rbx, 0x30(%rax)
movq -0x38(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x41290
leaq 0x30a78(%rip), %rsi     # 0x78da1
leaq -0x78(%rbp), %rdi
callq 0x49c3a
leaq -0x78(%rbp), %rsi
movq %r12, %rdi
callq 0x49bc6
leaq -0x78(%rbp), %rdi
callq 0x49c6c
leaq 0x3256d(%rip), %rsi     # 0x7a8bb
movq %r12, %rdi
callq 0x49aad
testb %al, %al
je 0x48386
leaq 0x313ac(%rip), %rsi     # 0x7970d
leaq -0x60(%rbp), %rdi
callq 0x49d13
leaq -0x60(%rbp), %rdx
pushq $0x1
popq %rcx
movq -0x30(%rbp), %rdi
movq %r12, %rsi
callq 0x49c87
leaq -0x60(%rbp), %rdi
callq 0x49c6c
xorl %r12d, %r12d
leaq -0x48(%rbp), %r14
xorl %r13d, %r13d
movq 0x58(%rbx), %r15
movq 0x60(%rbx), %rax
subq %r15, %rax
sarq $0x5, %rax
cmpq %r13, %rax
jbe 0x483cb
addq %r12, %r15
movq %r14, %rdi
callq 0x418a0
movq %r15, %rdi
movq %r14, %rsi
callq 0x49aca
movq %r14, %rdi
callq 0x415e0
incq %r13
addq $0x20, %r12
jmp 0x48390
andw $0x0, 0x90(%rbx)
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
leaq -0x60(%rbp), %rdi
jmp 0x483f2
movq %rax, %r14
leaq -0x78(%rbp), %rdi
callq 0x49c6c
jmp 0x4840a
movq %rax, %r14
jmp 0x4840a
movq %rax, %r14
leaq -0x48(%rbp), %rdi
callq 0x415e0
movq -0x38(%rbp), %rdi
callq 0x418c8
movq -0x30(%rbp), %rdi
callq 0x49d44
movq %rbx, %rdi
callq 0x44900
movq %r14, %rdi
callq 0x41790