// File: /workspace/github_cpp_makefile_star2_O3/btbujiangjun[P]abcdl/example/algebra/Matrix.cpp
// Function: main
int main(int argc,char** argv){
    abcdl::utils::log::set_min_log_level(abcdl::utils::log::INFO);
    abcdl::utils::log::initialize_log(argc, argv);
    
	abcdl::algebra::MatrixHelper<real> helper;
    
	real d1[6] = {1,2,-3,4,5,6};
    Mat m1(d1, 2, 3);

	auto m = helper.dot(m1, m1);
	m.display("^");	

	m1.display();

    auto m3 = m1 * m1;
    m3.display();

    m1 += m1;
    m1.display();

    m1.sigmoid();
    m1.display();

    Mat m2;
    helper.sigmoid_derivative(m2, m1);
    m2.display();

    m1 *= -1;
    m1.display();
    auto m4 = m2 * m1;
    m4.display();
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x120, %rsp            # imm = 0x120
movq %rsi, %rbx
movl %edi, %ebp
xorl %edi, %edi
callq 0x303e0
movl %ebp, %edi
movq %rbx, %rsi
callq 0x2ff7c
leaq 0xc8(%rsp), %rbx
movq %rbx, %rdi
callq 0x97a0
movaps 0x2962c(%rip), %xmm0    # 0x31100
leaq 0x100(%rsp), %rsi
movaps %xmm0, (%rsi)
movabsq $0x40c0000040a00000, %rax # imm = 0x40C0000040A00000
movq %rax, 0x10(%rsi)
leaq 0x80(%rsp), %r14
movl $0x2, %edx
movl $0x3, %ecx
movq %r14, %rdi
callq 0x114b0
leaq 0xd8(%rsp), %rdi
movq %rbx, %rsi
movq %r14, %rdx
movq %r14, %rcx
callq 0x280e4
leaq 0x68(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x29567(%rip), %rsi     # 0x31094
leaq 0x29561(%rip), %rdx     # 0x31095
leaq 0x58(%rsp), %rdi
callq 0xfd00
leaq 0xd8(%rsp), %rdi
leaq 0x58(%rsp), %rsi
movl $0x1, %edx
callq 0x12714
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0x7b64
callq 0x72a0
leaq 0x58(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x29523(%rip), %rsi     # 0x31096
leaq 0x2951d(%rip), %rdx     # 0x31097
callq 0xfd00
leaq 0x80(%rsp), %rdi
leaq 0x58(%rsp), %rsi
movl $0x1, %edx
callq 0x12714
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0x7ba5
callq 0x72a0
leaq 0x58(%rsp), %rdi
leaq 0x80(%rsp), %rdx
movq %rdx, %rsi
callq 0x1a0fe
leaq 0x18(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x294cc(%rip), %rsi     # 0x31096
leaq 0x294c6(%rip), %rdx     # 0x31097
leaq 0x8(%rsp), %rdi
callq 0xfd00
leaq 0x58(%rsp), %rdi
leaq 0x8(%rsp), %rsi
movl $0x1, %edx
callq 0x12714
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0x7bfe
callq 0x72a0
leaq 0x80(%rsp), %rdi
movq %rdi, %rsi
callq 0x195a4
leaq 0x8(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x29479(%rip), %rsi     # 0x31096
leaq 0x29473(%rip), %rdx     # 0x31097
callq 0xfd00
leaq 0x80(%rsp), %rdi
leaq 0x8(%rsp), %rsi
movl $0x1, %edx
callq 0x12714
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0x7c4f
callq 0x72a0
leaq 0x80(%rsp), %rdi
callq 0x22604
leaq 0x8(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x2942b(%rip), %rsi     # 0x31096
leaq 0x29425(%rip), %rdx     # 0x31097
callq 0xfd00
leaq 0x80(%rsp), %rdi
leaq 0x8(%rsp), %rsi
movl $0x1, %edx
callq 0x12714
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0x7c9d
callq 0x72a0
leaq 0x8(%rsp), %rdi
callq 0x11328
leaq 0xc8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0x80(%rsp), %rdx
callq 0x28ada
leaq 0x40(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x293c5(%rip), %rsi     # 0x31096
leaq 0x293bf(%rip), %rdx     # 0x31097
leaq 0x30(%rsp), %rdi
callq 0xfd00
leaq 0x8(%rsp), %rdi
leaq 0x30(%rsp), %rsi
movl $0x1, %edx
callq 0x12714
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x7d05
callq 0x72a0
leaq 0x30(%rsp), %rsi
movl $0xbf800000, (%rsi)     # imm = 0xBF800000
leaq 0x80(%rsp), %rdi
callq 0x1a40e
leaq 0x30(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x2936a(%rip), %rsi     # 0x31096
leaq 0x29364(%rip), %rdx     # 0x31097
callq 0xfd00
leaq 0x80(%rsp), %rdi
leaq 0x30(%rsp), %rsi
movl $0x1, %edx
callq 0x12714
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x7d5e
callq 0x72a0
leaq 0x30(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0x80(%rsp), %rdx
callq 0x1a0fe
leaq 0xb8(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x2930e(%rip), %rsi     # 0x31096
leaq 0x29308(%rip), %rdx     # 0x31097
leaq 0xa8(%rsp), %rdi
callq 0xfd00
leaq 0x30(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
movl $0x1, %edx
callq 0x12714
movq 0xa8(%rsp), %rdi
cmpq %r14, %rdi
je 0x7dc5
callq 0x72a0
leaq 0x30(%rsp), %rdi
callq 0x1157e
leaq 0x8(%rsp), %rdi
callq 0x1157e
leaq 0x58(%rsp), %rdi
callq 0x1157e
leaq 0xd8(%rsp), %rdi
callq 0x1157e
leaq 0x80(%rsp), %rdi
callq 0x1157e
xorl %eax, %eax
addq $0x120, %rsp            # imm = 0x120
popq %rbx
popq %r14
popq %rbp
retq
movq %rax, %rbx
movq 0xa8(%rsp), %rdi
cmpq %r14, %rdi
je 0x7e25
callq 0x72a0
jmp 0x7e25
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x1157e
jmp 0x7e52
jmp 0x7e4f
jmp 0x7e39
jmp 0x7e4f
jmp 0x7e4f
movq %rax, %rbx
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x7e52
callq 0x72a0
jmp 0x7e52
jmp 0x7e4f
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x1157e
jmp 0x7ea5
jmp 0x7ea2
jmp 0x7e68
jmp 0x7ea2
jmp 0x7e68
jmp 0x7ea2
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0x7ea5
callq 0x72a0
jmp 0x7ea5
jmp 0x7ea2
jmp 0x7e98
jmp 0x7e84
jmp 0x7e98
movq %rax, %rbx
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0x7eaf
callq 0x72a0
jmp 0x7eaf
movq %rax, %rbx
jmp 0x7eaf
movq %rax, %rbx
jmp 0x7ebc
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x1157e
leaq 0xd8(%rsp), %rdi
callq 0x1157e
leaq 0x80(%rsp), %rdi
callq 0x1157e
movq %rbx, %rdi
callq 0x7430
nop