// File: /workspace/github_cpp_makefile_star2_O2/jliesch[P]ofxget/pugixml/pugixml.cpp
// Function: pugi::impl::(anonymous namespace)::xpath_ast_node::eval_number(pugi::impl::(anonymous namespace)::xpath_context const&, pugi::impl::(anonymous namespace)::xpath_stack const&)
double eval_number(const xpath_context& c, const xpath_stack& stack)
		{
			switch (_type)
			{
			case ast_op_add:
				return _left->eval_number(c, stack) + _right->eval_number(c, stack);

			case ast_op_subtract:
				return _left->eval_number(c, stack) - _right->eval_number(c, stack);

			case ast_op_multiply:
				return _left->eval_number(c, stack) * _right->eval_number(c, stack);

			case ast_op_divide:
				return _left->eval_number(c, stack) / _right->eval_number(c, stack);

			case ast_op_mod:
				return fmod(_left->eval_number(c, stack), _right->eval_number(c, stack));

			case ast_op_negate:
				return -_left->eval_number(c, stack);

			case ast_number_constant:
				return _data.number;

			case ast_func_last:
				return static_cast<double>(c.size);

			case ast_func_position:
				return static_cast<double>(c.position);

			case ast_func_count:
			{
				xpath_allocator_capture cr(stack.result);

				return static_cast<double>(_left->eval_node_set(c, stack, nodeset_eval_all).size());
			}

			case ast_func_string_length_0:
			{
				xpath_allocator_capture cr(stack.result);

				return static_cast<double>(string_value(c.n, stack.result).length());
			}

			case ast_func_string_length_1:
			{
				xpath_allocator_capture cr(stack.result);

				return static_cast<double>(_left->eval_string(c, stack).length());
			}

			case ast_func_number_0:
			{
				xpath_allocator_capture cr(stack.result);

				return convert_string_to_number(string_value(c.n, stack.result).c_str());
			}

			case ast_func_number_1:
				return _left->eval_number(c, stack);

			case ast_func_sum:
			{
				xpath_allocator_capture cr(stack.result);

				double r = 0;

				xpath_node_set_raw ns = _left->eval_node_set(c, stack, nodeset_eval_all);

				for (const xpath_node* it = ns.begin(); it != ns.end(); ++it)
				{
					xpath_allocator_capture cri(stack.result);

					r += convert_string_to_number(string_value(*it, stack.result).c_str());
				}

				return r;
			}

			case ast_func_floor:
			{
				double r = _left->eval_number(c, stack);

				return r == r ? floor(r) : r;
			}

			case ast_func_ceiling:
			{
				double r = _left->eval_number(c, stack);

				return r == r ? ceil(r) : r;
			}

			case ast_func_round:
				return round_nearest_nzero(_left->eval_number(c, stack));

			case ast_variable:
			{
				assert(_rettype == _data.variable->type());

				if (_rettype == xpath_type_number)
					return _data.variable->get_number();
			}

			// fallthrough
			default:
			{
				switch (_rettype)
				{
				case xpath_type_boolean:
					return eval_boolean(c, stack) ? 1 : 0;

				case xpath_type_string:
				{
					xpath_allocator_capture cr(stack.result);

					return convert_string_to_number(eval_string(c, stack).c_str());
				}

				case xpath_type_node_set:
				{
					xpath_allocator_capture cr(stack.result);

					return convert_string_to_number(eval_string(c, stack).c_str());
				}

				default:
					assert(false && "Wrong expression for return type number"); // unreachable
					return 0;
				}

			}
			}
		}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x90, %rsp
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
leaq 0xb8a8(%rip), %rax      # 0x2b880
movzbl (%r15), %ecx
addl $-0x9, %ecx
cmpl $0x2e, %ecx
ja 0x203d2
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movq 0x8(%r15), %r15
jmp 0x1ffd8
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x1ffb8
movapd %xmm0, (%rsp)
callq 0x60d0
jmp 0x203b3
movq (%rbx), %rdx
movq %rdx, 0x18(%rsp)
movupd (%rdx), %xmm0
movupd %xmm0, 0x20(%rsp)
movq 0x10(%rdx), %rax
movq %rax, 0x30(%rsp)
leaq 0x38(%rsp), %rdi
movq %r14, %rsi
callq 0x27c4d
movq 0x38(%rsp), %rdi
callq 0x26cda
movsd %xmm0, (%rsp)
leaq 0x18(%rsp), %rdi
callq 0x27be6
movsd (%rsp), %xmm0
jmp 0x204a2
movsbl 0x1(%r15), %eax
movq 0x20(%r15), %rcx
cmpl %eax, (%rcx)
jne 0x204b3
cmpb $0x2, %al
jne 0x203d6
movsd 0x10(%rcx), %xmm1
jmp 0x2049e
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x1ffb8
movapd %xmm0, (%rsp)
movq 0x10(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x1ffb8
movapd (%rsp), %xmm1
divsd %xmm0, %xmm1
jmp 0x2049e
movq (%rbx), %rax
movq %rax, 0x18(%rsp)
movupd (%rax), %xmm0
movupd %xmm0, 0x20(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x30(%rsp)
movq 0x8(%r15), %rsi
leaq 0x38(%rsp), %rdi
movq %r14, %rdx
movq %rbx, %rcx
xorl %r8d, %r8d
callq 0x217e0
movq 0x48(%rsp), %rax
subq 0x40(%rsp), %rax
sarq $0x4, %rax
jmp 0x20309
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x1ffb8
movapd %xmm0, %xmm1
xorpd 0xb66c(%rip), %xmm1     # 0x2b780
jmp 0x2049e
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x1ffb8
movsd %xmm0, (%rsp)
movq 0x10(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x1ffb8
movapd %xmm0, %xmm1
mulsd (%rsp), %xmm1
jmp 0x2049e
movq (%rbx), %rdx
movq %rdx, 0x18(%rsp)
movupd (%rdx), %xmm0
movupd %xmm0, 0x20(%rsp)
movq 0x10(%rdx), %rax
movq %rax, 0x30(%rsp)
leaq 0x38(%rsp), %rdi
movq %r14, %rsi
callq 0x27c4d
jmp 0x202ff
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x1ffb8
movsd %xmm0, (%rsp)
movq 0x10(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x1ffb8
movaps %xmm0, %xmm1
movsd (%rsp), %xmm0
addq $0x90, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
jmp 0x6600
movsd 0x18(%r14), %xmm0
jmp 0x2033a
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x1ffb8
movsd %xmm0, (%rsp)
movq 0x10(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x1ffb8
movapd %xmm0, %xmm1
addsd (%rsp), %xmm1
jmp 0x2049e
movq (%rbx), %rax
movq %rax, 0x18(%rsp)
movups (%rax), %xmm0
movups %xmm0, 0x20(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x30(%rsp)
movq 0x8(%r15), %rsi
leaq 0x38(%rsp), %rdi
movq %r14, %rdx
movq %rbx, %rcx
xorl %r8d, %r8d
callq 0x217e0
movq 0x40(%rsp), %r14
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
leaq 0x60(%rsp), %r13
leaq 0x78(%rsp), %r15
leaq 0x58(%rsp), %r12
cmpq 0x48(%rsp), %r14
je 0x2048f
movq (%rbx), %rdx
movq %rdx, 0x58(%rsp)
movq 0x10(%rdx), %rax
movq %rax, 0x10(%r13)
movupd (%rdx), %xmm0
movupd %xmm0, (%r13)
movq %r15, %rdi
movq %r14, %rsi
callq 0x27c4d
movq 0x78(%rsp), %rdi
callq 0x26cda
movapd (%rsp), %xmm1
addsd %xmm0, %xmm1
movapd %xmm1, (%rsp)
movq %r12, %rdi
callq 0x27be6
addq $0x10, %r14
jmp 0x2023e
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x1ffb8
movapd %xmm0, (%rsp)
movq 0x10(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x1ffb8
movapd (%rsp), %xmm1
subsd %xmm0, %xmm1
jmp 0x2049e
movsd 0x20(%r15), %xmm1
jmp 0x2049e
movq (%rbx), %rax
movq %rax, 0x18(%rsp)
movupd (%rax), %xmm0
movupd %xmm0, 0x20(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x30(%rsp)
movq 0x8(%r15), %rsi
leaq 0x38(%rsp), %rdi
movq %r14, %rdx
movq %rbx, %rcx
callq 0x20660
leaq 0x38(%rsp), %rdi
callq 0x214ba
movq %rax, %xmm0
punpckldq 0xb44a(%rip), %xmm0 # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0xb452(%rip), %xmm0     # 0x2b770
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
movapd %xmm1, (%rsp)
jmp 0x2048f
movsd 0x10(%r14), %xmm0
unpcklps 0xb41f(%rip), %xmm0     # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0xb427(%rip), %xmm0     # 0x2b770
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
jmp 0x2049e
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x1ffb8
ucomisd 0xb42f(%rip), %xmm0     # 0x2b7a0
jb 0x20405
xorpd %xmm1, %xmm1
ucomisd %xmm0, %xmm1
jb 0x20405
addq $0x90, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
jmp 0x6780
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x1ffb8
movapd %xmm0, (%rsp)
callq 0x6780
movapd (%rsp), %xmm2
movapd %xmm2, %xmm1
cmpordsd %xmm2, %xmm1
andpd %xmm1, %xmm0
andnpd %xmm2, %xmm1
orpd %xmm0, %xmm1
jmp 0x2049e
movb 0x1(%r15), %al
cmpb $0x1, %al
je 0x20452
movzbl %al, %eax
cmpl $0x3, %eax
je 0x20422
cmpl $0x4, %eax
jne 0x204d2
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x1f176
movzbl %al, %eax
cvtsi2sd %eax, %xmm1
jmp 0x2049e
addsd 0xb39b(%rip), %xmm0     # 0x2b7a8
addq $0x90, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
jmp 0x60d0
movq (%rbx), %rax
movq %rax, 0x18(%rsp)
movupd (%rax), %xmm0
movupd %xmm0, 0x20(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x30(%rsp)
leaq 0x38(%rsp), %rdi
movq %r15, %rsi
movq %r14, %rdx
movq %rbx, %rcx
callq 0x20660
jmp 0x20480
movq (%rbx), %rax
movq %rax, 0x18(%rsp)
movupd (%rax), %xmm0
movupd %xmm0, 0x20(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x30(%rsp)
leaq 0x38(%rsp), %rdi
movq %r15, %rsi
movq %r14, %rdx
movq %rbx, %rcx
callq 0x20660
movq 0x38(%rsp), %rdi
callq 0x26cda
movapd %xmm0, (%rsp)
leaq 0x18(%rsp), %rdi
callq 0x27be6
movapd (%rsp), %xmm1
movapd %xmm1, %xmm0
addq $0x90, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
leaq 0xdee9(%rip), %rdi      # 0x2e3a3
leaq 0xba74(%rip), %rsi      # 0x2bf35
leaq 0xe41b(%rip), %rcx      # 0x2e8e3
movl $0x28a8, %edx           # imm = 0x28A8
callq 0x6100
leaq 0xe47c(%rip), %rdi      # 0x2e955
leaq 0xba55(%rip), %rsi      # 0x2bf35
leaq 0xe3fc(%rip), %rcx      # 0x2e8e3
movl $0x28c5, %edx           # imm = 0x28C5
callq 0x6100
jmp 0x204fd
jmp 0x204fd
jmp 0x204fd
jmp 0x204fd
jmp 0x204fd
jmp 0x204fd
movq %rax, %rbx
jmp 0x2050f
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x27be6
leaq 0x18(%rsp), %rdi
callq 0x27be6
movq %rbx, %rdi
callq 0x6460
nop