// File: /workspace/github_cpp_makefile_star2_O3/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 0xb894(%rip), %rax      # 0x31870
movzbl (%r15), %ecx
addl $-0x9, %ecx
cmpl $0x2e, %ecx
ja 0x263ce
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movq 0x8(%r15), %r15
jmp 0x25fdc
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x25fbc
movapd %xmm0, (%rsp)
callq 0x60e0
jmp 0x263af
movq (%rbx), %rcx
movq %rcx, 0x18(%rsp)
movupd (%rcx), %xmm0
movupd %xmm0, 0x20(%rsp)
movq 0x10(%rcx), %rax
movq %rax, 0x30(%rsp)
movq (%r14), %rsi
movq 0x8(%r14), %rdx
leaq 0x38(%rsp), %rdi
callq 0x2d2a6
movq 0x38(%rsp), %rdi
callq 0x2c042
movsd %xmm0, (%rsp)
leaq 0x18(%rsp), %rdi
callq 0x2d264
movsd (%rsp), %xmm0
jmp 0x264dc
movsbl 0x1(%r15), %eax
movq 0x20(%r15), %rcx
cmpl %eax, (%rcx)
jne 0x264ed
cmpb $0x2, %al
jne 0x263d2
movsd 0x10(%rcx), %xmm1
jmp 0x264d8
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x25fbc
movapd %xmm0, (%rsp)
movq 0x10(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x25fbc
movapd (%rsp), %xmm1
divsd %xmm0, %xmm1
jmp 0x264d8
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 0x279d6
movq 0x48(%rsp), %rax
subq 0x40(%rsp), %rax
sarq $0x4, %rax
jmp 0x2640f
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x25fbc
movapd %xmm0, %xmm1
xorpd 0xb654(%rip), %xmm1     # 0x31770
jmp 0x264d8
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x25fbc
movsd %xmm0, (%rsp)
movq 0x10(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x25fbc
movapd %xmm0, %xmm1
mulsd (%rsp), %xmm1
jmp 0x264d8
movq (%rbx), %rcx
movq %rcx, 0x18(%rsp)
movupd (%rcx), %xmm0
movupd %xmm0, 0x20(%rsp)
movq 0x10(%rcx), %rax
movq %rax, 0x30(%rsp)
movq (%r14), %rsi
movq 0x8(%r14), %rdx
leaq 0x38(%rsp), %rdi
callq 0x2d2a6
jmp 0x2631b
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x25fbc
movsd %xmm0, (%rsp)
movq 0x10(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x25fbc
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 0x26336
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x25fbc
movsd %xmm0, (%rsp)
movq 0x10(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x25fbc
movapd %xmm0, %xmm1
addsd (%rsp), %xmm1
jmp 0x264d8
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 0x279d6
movq 0x40(%rsp), %r12
cmpq 0x48(%rsp), %r12
je 0x264c1
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
leaq 0x60(%rsp), %r13
leaq 0x78(%rsp), %r14
leaq 0x58(%rsp), %r15
movq (%rbx), %rcx
movq %rcx, 0x58(%rsp)
movq 0x10(%rcx), %rax
movq %rax, 0x10(%r13)
movupd (%rcx), %xmm0
movupd %xmm0, (%r13)
movq (%r12), %rsi
movq 0x8(%r12), %rdx
movq %r14, %rdi
callq 0x2d2a6
movq 0x78(%rsp), %rdi
callq 0x2c042
movapd (%rsp), %xmm1
addsd %xmm0, %xmm1
movapd %xmm1, (%rsp)
movq %r15, %rdi
callq 0x2d264
addq $0x10, %r12
cmpq 0x48(%rsp), %r12
jne 0x26255
jmp 0x264c9
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x25fbc
movapd %xmm0, (%rsp)
movq 0x10(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x25fbc
movapd (%rsp), %xmm1
subsd %xmm0, %xmm1
jmp 0x264d8
movsd 0x20(%r15), %xmm1
jmp 0x264d8
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 0x266b0
cmpb $0x1, 0x40(%rsp)
jne 0x26405
movq 0x48(%rsp), %rax
jmp 0x2640f
movsd 0x10(%r14), %xmm0
unpcklps 0xb413(%rip), %xmm0     # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0xb41b(%rip), %xmm0     # 0x31760
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
jmp 0x264d8
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x25fbc
ucomisd 0xb423(%rip), %xmm0     # 0x31790
jb 0x2643a
xorpd %xmm1, %xmm1
ucomisd %xmm0, %xmm1
jb 0x2643a
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 0x25fbc
movapd %xmm0, (%rsp)
callq 0x6770
movapd (%rsp), %xmm2
movapd %xmm2, %xmm1
cmpordsd %xmm2, %xmm1
andpd %xmm1, %xmm0
andnpd %xmm2, %xmm1
orpd %xmm0, %xmm1
jmp 0x264d8
movb 0x1(%r15), %al
cmpb $0x1, %al
je 0x26487
movzbl %al, %eax
cmpl $0x3, %eax
je 0x26457
cmpl $0x4, %eax
jne 0x2650c
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x250c4
movzbl %al, %eax
cvtsi2sd %eax, %xmm1
jmp 0x264d8
movq 0x38(%rsp), %rdi
callq 0x1d379
movq %rax, %xmm0
punpckldq 0xb334(%rip), %xmm0 # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0xb33c(%rip), %xmm0     # 0x31760
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
movapd %xmm1, (%rsp)
jmp 0x264c9
addsd 0xb356(%rip), %xmm0     # 0x31798
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 0x266b0
jmp 0x264b5
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 0x266b0
movq 0x38(%rsp), %rdi
callq 0x2c042
jmp 0x264c4
xorps %xmm0, %xmm0
movapd %xmm0, (%rsp)
leaq 0x18(%rsp), %rdi
callq 0x2d264
movapd (%rsp), %xmm1
movapd %xmm1, %xmm0
addq $0x90, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
leaq 0xdcac(%rip), %rdi      # 0x341a0
leaq 0xba2a(%rip), %rsi      # 0x31f25
leaq 0xe1de(%rip), %rcx      # 0x346e0
movl $0x28a8, %edx           # imm = 0x28A8
callq 0x6120
leaq 0xe23f(%rip), %rdi      # 0x34752
leaq 0xba0b(%rip), %rsi      # 0x31f25
leaq 0xe1bf(%rip), %rcx      # 0x346e0
movl $0x28c5, %edx           # imm = 0x28C5
callq 0x6120
jmp 0x26537
jmp 0x26537
jmp 0x26537
jmp 0x26537
jmp 0x26537
jmp 0x26537
movq %rax, %rbx
jmp 0x26549
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x2d264
leaq 0x18(%rsp), %rdi
callq 0x2d264
movq %rbx, %rdi
callq 0x6430
nop