// File: syusui-s[P]old_rpn_language/./element.h
// Function: calc_elements(Element**, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
Element* calc_elements(Element** elementarray, std::string op){
	Element* rtn;
	if(op=="+") rtn = op_plus(elementarray[0],elementarray[1]);
	else if(op=="-") rtn = op_minus(elementarray[0],elementarray[1]);
	else if(op=="*") rtn = op_multiply(elementarray[0],elementarray[1]);
	else if(op=="/") rtn = op_divide(elementarray[0],elementarray[1]);
	else if(op=="mod") rtn = op_modulo(elementarray[0],elementarray[1]);
	else if(op=="abs") rtn = fn_absolute(elementarray[0]);
	else if(op=="pm") rtn = fn_pm(elementarray[0]);
	else if(op=="1/x" || op=="inv") rtn = fn_inverse(elementarray[0]);
	else if(op=="pow") rtn = fn_pow(elementarray[0],elementarray[1]);
	else if(op=="^2") rtn = fn_square(elementarray[0]);
	else if(op=="^3") rtn = fn_cube(elementarray[0]);
	else if(op=="sqrt") rtn = fn_sqrt(elementarray[0]);
	else if(op=="cbrt") rtn = fn_cbrt(elementarray[0]);
	else if(op=="print") rtn = fn_print(elementarray[0]);
	else throw((std::string)"この演算子、もしくは関数はまだ定義されていません。");

	return rtn;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rsi, -0x40(%rbp)
movq %rdi, %rax
movq -0x40(%rbp), %rdi
movq %rdi, -0x38(%rbp)
movq %rax, -0x8(%rbp)
movq %rdi, -0x10(%rbp)
leaq 0x1de1(%rip), %rsi      # 0xa107
callq 0x9340
testb $0x1, %al
jne 0x8331
jmp 0x834e
movq -0x8(%rbp), %rax
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x6180
movq %rax, -0x18(%rbp)
jmp 0x864e
movq -0x38(%rbp), %rdi
leaq 0x1db0(%rip), %rsi      # 0xa109
callq 0x9340
testb $0x1, %al
jne 0x8364
jmp 0x8381
movq -0x8(%rbp), %rax
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x6650
movq %rax, -0x18(%rbp)
jmp 0x864c
movq -0x38(%rbp), %rdi
leaq 0x1d7f(%rip), %rsi      # 0xa10b
callq 0x9340
testb $0x1, %al
jne 0x8397
jmp 0x83b4
movq -0x8(%rbp), %rax
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x6b20
movq %rax, -0x18(%rbp)
jmp 0x864a
movq -0x38(%rbp), %rdi
leaq 0x1d4e(%rip), %rsi      # 0xa10d
callq 0x9340
testb $0x1, %al
jne 0x83ca
jmp 0x83e7
movq -0x8(%rbp), %rax
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x6ff0
movq %rax, -0x18(%rbp)
jmp 0x8648
movq -0x38(%rbp), %rdi
leaq 0x1d1d(%rip), %rsi      # 0xa10f
callq 0x9340
testb $0x1, %al
jne 0x83fd
jmp 0x841a
movq -0x8(%rbp), %rax
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x7160
movq %rax, -0x18(%rbp)
jmp 0x8646
movq -0x38(%rbp), %rdi
leaq 0x1cee(%rip), %rsi      # 0xa113
callq 0x9340
testb $0x1, %al
jne 0x8430
jmp 0x8445
movq -0x8(%rbp), %rax
movq (%rax), %rdi
callq 0x7630
movq %rax, -0x18(%rbp)
jmp 0x8644
movq -0x38(%rbp), %rdi
leaq 0x1cc7(%rip), %rsi      # 0xa117
callq 0x9340
testb $0x1, %al
jne 0x845b
jmp 0x8470
movq -0x8(%rbp), %rax
movq (%rax), %rdi
callq 0x7900
movq %rax, -0x18(%rbp)
jmp 0x8642
movq -0x38(%rbp), %rdi
leaq 0x1c9f(%rip), %rsi      # 0xa11a
callq 0x9340
testb $0x1, %al
jne 0x849a
movq -0x38(%rbp), %rdi
leaq 0x1c8f(%rip), %rsi      # 0xa11e
callq 0x9340
testb $0x1, %al
jne 0x849a
jmp 0x84af
movq -0x8(%rbp), %rax
movq (%rax), %rdi
callq 0x7bd0
movq %rax, -0x18(%rbp)
jmp 0x8640
movq -0x38(%rbp), %rdi
leaq 0x1c68(%rip), %rsi      # 0xa122
callq 0x9340
testb $0x1, %al
jne 0x84c5
jmp 0x84e2
movq -0x8(%rbp), %rax
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x7cc0
movq %rax, -0x18(%rbp)
jmp 0x863e
movq -0x38(%rbp), %rdi
leaq 0x1c39(%rip), %rsi      # 0xa126
callq 0x9340
testb $0x1, %al
jne 0x84f8
jmp 0x850d
movq -0x8(%rbp), %rax
movq (%rax), %rdi
callq 0x7e30
movq %rax, -0x18(%rbp)
jmp 0x863c
movq -0x38(%rbp), %rdi
leaq 0x1c11(%rip), %rsi      # 0xa129
callq 0x9340
testb $0x1, %al
jne 0x8523
jmp 0x8538
movq -0x8(%rbp), %rax
movq (%rax), %rdi
callq 0x7f20
movq %rax, -0x18(%rbp)
jmp 0x863a
movq -0x38(%rbp), %rdi
leaq 0x1be9(%rip), %rsi      # 0xa12c
callq 0x9340
testb $0x1, %al
jne 0x854e
jmp 0x8563
movq -0x8(%rbp), %rax
movq (%rax), %rdi
callq 0x8010
movq %rax, -0x18(%rbp)
jmp 0x8638
movq -0x38(%rbp), %rdi
leaq 0x1bc3(%rip), %rsi      # 0xa131
callq 0x9340
testb $0x1, %al
jne 0x8579
jmp 0x858e
movq -0x8(%rbp), %rax
movq (%rax), %rdi
callq 0x80f0
movq %rax, -0x18(%rbp)
jmp 0x8636
movq -0x38(%rbp), %rdi
leaq 0x1bbf(%rip), %rsi      # 0xa158
callq 0x9340
testb $0x1, %al
jne 0x85a4
jmp 0x85b6
movq -0x8(%rbp), %rax
movq (%rax), %rdi
callq 0x81c0
movq %rax, -0x18(%rbp)
jmp 0x8634
movb $0x1, -0x2d(%rbp)
movl $0x20, %edi
callq 0x3130
movq %rax, -0x50(%rbp)
movq %rax, -0x58(%rbp)
leaq -0x19(%rbp), %rdi
movq %rdi, -0x48(%rbp)
callq 0x33c0
movq -0x50(%rbp), %rdi
movq -0x48(%rbp), %rdx
leaq 0x1c18(%rip), %rsi      # 0xa200
callq 0x9180
jmp 0x85ef
movq -0x58(%rbp), %rdi
movb $0x0, -0x2d(%rbp)
leaq 0x578a(%rip), %rsi      # 0xdd88
movq 0x59b3(%rip), %rdx      # 0xdfb8
callq 0x3390
jmp 0x8661
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x19(%rbp), %rdi
callq 0x3280
testb $0x1, -0x2d(%rbp)
jne 0x8629
jmp 0x8632
movq -0x58(%rbp), %rdi
callq 0x3190
jmp 0x8658
jmp 0x8636
jmp 0x8638
jmp 0x863a
jmp 0x863c
jmp 0x863e
jmp 0x8640
jmp 0x8642
jmp 0x8644
jmp 0x8646
jmp 0x8648
jmp 0x864a
jmp 0x864c
jmp 0x864e
movq -0x18(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq
movq -0x28(%rbp), %rdi
callq 0x33b0
nopw %cs:(%rax,%rax)