// File: /workspace/github_cpp_makefile_star2_O1/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 0xc4e4(%rip), %rax      # 0x32870
movzbl (%r15), %ecx
addl $-0x9, %ecx
cmpl $0x2e, %ecx
ja 0x2643f
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movq 0x8(%r15), %r15
jmp 0x2638c
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2636c
movapd %xmm0, (%rsp)
callq 0x60e0
jmp 0x26793
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 0x2d721
movq 0x38(%rsp), %rdi
callq 0x2c5ae
movsd %xmm0, (%rsp)
leaq 0x18(%rsp), %rdi
callq 0x2d6a0
movsd (%rsp), %xmm0
jmp 0x26889
movsbl 0x1(%r15), %edx
movq 0x20(%r15), %rax
movl (%rax), %ecx
cmpl %edx, %ecx
jne 0x268a4
cmpb $0x2, %dl
jne 0x2643f
cmpl $0x2, %ecx
jne 0x2689a
movsd 0x10(%rax), %xmm1
jmp 0x26885
movzbl 0x1(%r15), %eax
cmpl $0x1, %eax
je 0x26834
cmpl $0x3, %eax
je 0x26804
cmpl $0x4, %eax
jne 0x268c3
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2544a
movzbl %al, %eax
cvtsi2sd %eax, %xmm1
jmp 0x26885
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2636c
movapd %xmm0, (%rsp)
movq 0x10(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2636c
movapd (%rsp), %xmm1
divsd %xmm0, %xmm1
jmp 0x26885
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 0x27cf4
movq 0x48(%rsp), %rax
subq 0x40(%rsp), %rax
sarq $0x4, %rax
jmp 0x267bc
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2636c
movapd %xmm0, %xmm1
xorpd 0xc266(%rip), %xmm1     # 0x32770
jmp 0x26885
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2636c
movsd %xmm0, (%rsp)
movq 0x10(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2636c
movapd %xmm0, %xmm1
mulsd (%rsp), %xmm1
jmp 0x26885
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 0x2d721
jmp 0x266ff
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2636c
movsd %xmm0, (%rsp)
movq 0x10(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2636c
movaps %xmm0, %xmm1
movsd (%rsp), %xmm0
addq $0x90, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
jmp 0x65d0
movsd 0x18(%r14), %xmm0
jmp 0x2671a
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2636c
movsd %xmm0, (%rsp)
movq 0x10(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2636c
movapd %xmm0, %xmm1
addsd (%rsp), %xmm1
jmp 0x26885
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 0x27cf4
movq 0x40(%rsp), %r14
cmpq 0x48(%rsp), %r14
je 0x2686e
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
leaq 0x60(%rsp), %r13
leaq 0x78(%rsp), %r15
leaq 0x58(%rsp), %r12
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 0x2d721
movq 0x78(%rsp), %rdi
callq 0x2c5ae
movapd (%rsp), %xmm1
addsd %xmm0, %xmm1
movapd %xmm1, (%rsp)
movq %r12, %rdi
callq 0x2d6a0
addq $0x10, %r14
cmpq 0x48(%rsp), %r14
jne 0x2663f
jmp 0x26876
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2636c
movapd %xmm0, (%rsp)
movq 0x10(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2636c
movapd (%rsp), %xmm1
subsd %xmm0, %xmm1
jmp 0x26885
movsd 0x20(%r15), %xmm1
jmp 0x26885
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 0x26a66
cmpb $0x1, 0x40(%rsp)
jne 0x267b2
movq 0x48(%rsp), %rax
jmp 0x267bc
movsd 0x10(%r14), %xmm0
unpcklps 0xc02f(%rip), %xmm0     # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0xc037(%rip), %xmm0     # 0x32760
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
jmp 0x26885
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2636c
ucomisd 0xc03f(%rip), %xmm0     # 0x32790
jb 0x267e7
xorpd %xmm1, %xmm1
ucomisd %xmm0, %xmm1
jb 0x267e7
addq $0x90, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
jmp 0x6770
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x2636c
movapd %xmm0, (%rsp)
callq 0x6770
movapd (%rsp), %xmm2
movapd %xmm2, %xmm1
cmpordsd %xmm2, %xmm1
andpd %xmm1, %xmm0
andnpd %xmm2, %xmm1
orpd %xmm0, %xmm1
jmp 0x26885
movq 0x38(%rsp), %rdi
callq 0x1d2a2
movq %rax, %xmm0
punpckldq 0xbf87(%rip), %xmm0 # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0xbf8f(%rip), %xmm0     # 0x32760
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
movapd %xmm1, (%rsp)
jmp 0x26876
addsd 0xbfa9(%rip), %xmm0     # 0x32798
addq $0x90, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
jmp 0x60e0
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 0x26a66
jmp 0x26862
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 0x26a66
movq 0x38(%rsp), %rdi
callq 0x2c5ae
jmp 0x26871
xorps %xmm0, %xmm0
movapd %xmm0, (%rsp)
leaq 0x18(%rsp), %rdi
callq 0x2d6a0
movapd (%rsp), %xmm1
movapd %xmm1, %xmm0
addq $0x90, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
movsd 0xbede(%rip), %xmm1     # 0x32780
jmp 0x26885
leaq 0xea9f(%rip), %rdi      # 0x3534a
leaq 0xc643(%rip), %rsi      # 0x32ef5
leaq 0xefd1(%rip), %rcx      # 0x3588a
movl $0x28a8, %edx           # imm = 0x28A8
callq 0x6120
leaq 0xf032(%rip), %rdi      # 0x358fc
leaq 0xc624(%rip), %rsi      # 0x32ef5
leaq 0xefb2(%rip), %rcx      # 0x3588a
movl $0x28c5, %edx           # imm = 0x28C5
callq 0x6120
jmp 0x268ee
jmp 0x268ee
jmp 0x268ee
jmp 0x268ee
jmp 0x268ee
jmp 0x268ee
movq %rax, %rbx
jmp 0x26900
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x2d6a0
leaq 0x18(%rsp), %rdi
callq 0x2d6a0
movq %rbx, %rdi
callq 0x6430