// File: /workspace/github_cpp_makefile_star2_O3/toxaart[P]hierarchical_block_sparse_lib/source/HierarchicalBlockSparseMatrix.h
// Function: hbsm::HierarchicalBlockSparseMatrix<double>::get_single_value(int, int) const
Treal HierarchicalBlockSparseMatrix<Treal>::get_single_value(int row, int col) const {


			if ( empty() )
			  throw std::runtime_error("Error in HierarchicalBlockSparseMatrix<Treal>::get_single_value: empty matrix occured.");


			if(!(0 <= row && row < nRows_orig && 0 <= col && col < nCols_orig ))
			  throw std::runtime_error("Error in HierarchicalBlockSparseMatrix<Treal>::get_single_value: bad index at highest level.");




			if(!(0 <= row && row < nRows && 0 <= col && col < nCols ) ){
				throw std::runtime_error("Error in HierarchicalBlockSparseMatrix<Treal>::get_single_value: bad index.");
			}

			if(lowest_level()){
				return submatrix[col*nRows + row];
			}


			int offset = nRows/2;

			// this part goes to child0
			if(row < offset && col < offset){
				if(children[0] == NULL) return 0.0;
				else return children[0]->get_single_value(row,col);
			}

			// this part goes to child1
			if(offset <= row && row < nRows && col < offset){
				if(children[1] == NULL) return 0.0;
				else return children[1]->get_single_value(row-offset,col);
			}

			// this part goes to child2
			if(row < offset && offset <= col && col < nCols){
				if(children[2] == NULL) return 0.0;
				else return children[2]->get_single_value(row,col-offset);
			}

			// this part goes to child3
			if(offset <= row && row < nRows && offset <= col && col < nCols){
				if(children[3] == NULL) return 0.0;
				else return children[3]->get_single_value(row-offset,col-offset);
			}

			throw std::runtime_error("Error in HierarchicalBlockSparseMatrix<Treal>::get_single_value: reached impossible point.");
			return 0.0;

		}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movl %esi, %r14d
movq %rdi, %rbx
movq %rbx, %rdi
callq 0x42c4
testb %al, %al
jne 0x8246
testl %r14d, %r14d
js 0x820a
testl %ebp, %ebp
js 0x820a
cmpl %r14d, 0x8(%rbx)
jle 0x820a
cmpl %ebp, 0xc(%rbx)
jle 0x820a
cmpl %r14d, (%rbx)
jle 0x8228
cmpl %ebp, 0x4(%rbx)
jle 0x8228
movq %rbx, %rdi
callq 0x6b0e
testb %al, %al
jne 0x81ee
movl (%rbx), %edx
movl %edx, %ecx
shrl $0x1f, %ecx
addl %edx, %ecx
sarl %ecx
cmpl %ecx, %r14d
jge 0x8176
cmpl %ecx, %ebp
jge 0x8176
movq 0x28(%rbx), %rbx
testq %rbx, %rbx
jne 0x80fe
jmp 0x8202
movl %r14d, %eax
subl %ecx, %eax
setge %dil
cmpl %r14d, %edx
setg %sil
andb %dil, %sil
cmpl %ecx, %ebp
jge 0x8192
testb %sil, %sil
jne 0x81bb
movl %ebp, %edx
subl %ecx, %edx
setge %r8b
movl 0x4(%rbx), %edi
cmpl %ecx, %r14d
jge 0x81c6
testb %r8b, %r8b
je 0x81c6
cmpl %ebp, %edi
jle 0x81c6
movq 0x48(%rbx), %rbx
testq %rbx, %rbx
je 0x8202
subl %ecx, %ebp
jmp 0x80fe
movq 0x38(%rbx), %rbx
testq %rbx, %rbx
jne 0x81e6
jmp 0x8202
andb %r8b, %sil
cmpb $0x1, %sil
jne 0x8278
cmpl %ebp, %edi
jle 0x8278
movq 0x58(%rbx), %rbx
testq %rbx, %rbx
je 0x8202
movl %edx, %ebp
movl %eax, %r14d
jmp 0x80fe
imull (%rbx), %ebp
addl %r14d, %ebp
movslq %ebp, %rax
movq 0x70(%rbx), %rcx
movsd (%rcx,%rax,8), %xmm0
jmp 0x8205
xorps %xmm0, %xmm0
popq %rbx
popq %r14
popq %rbp
retq
movl $0x10, %edi
callq 0x2070
movq %rax, %rbx
leaq 0x29cb(%rip), %rsi      # 0xabe9
movq %rax, %rdi
callq 0x2060
jmp 0x8262
movl $0x10, %edi
callq 0x2070
movq %rax, %rbx
leaq 0x2a0a(%rip), %rsi      # 0xac46
movq %rax, %rdi
callq 0x2060
jmp 0x8262
movl $0x10, %edi
callq 0x2070
movq %rax, %rbx
leaq 0x2938(%rip), %rsi      # 0xab92
movq %rax, %rdi
callq 0x2060
movq 0x5d87(%rip), %rsi      # 0xdff0
movq 0x5d50(%rip), %rdx      # 0xdfc0
movq %rbx, %rdi
callq 0x21a0
movl $0x10, %edi
callq 0x2070
movq %rax, %rbx
leaq 0x2a06(%rip), %rsi      # 0xac92
movq %rax, %rdi
callq 0x2060
jmp 0x8262
jmp 0x829c
jmp 0x829c
jmp 0x829c
movq %rax, %r14
movq %rbx, %rdi
callq 0x20e0
movq %r14, %rdi
callq 0x21c0
nop