// File: /workspace/github_cpp_makefile_star2_O1/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 0x305e4
movl %ebp, %edi
movq %rbx, %rsi
callq 0x30190
leaq 0xc8(%rsp), %rbx
movq %rbx, %rdi
callq 0x987c
movaps 0x2a60c(%rip), %xmm0    # 0x32100
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 0x1178c
leaq 0xd8(%rsp), %rdi
movq %rbx, %rsi
movq %r14, %rdx
movq %r14, %rcx
callq 0x2831e
leaq 0x68(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x2a547(%rip), %rsi     # 0x32094
leaq 0x2a541(%rip), %rdx     # 0x32095
leaq 0x58(%rsp), %rdi
callq 0xffe2
leaq 0xd8(%rsp), %rdi
leaq 0x58(%rsp), %rsi
movl $0x1, %edx
callq 0x129f2
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0x7b84
callq 0x72a0
leaq 0x58(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x2a503(%rip), %rsi     # 0x32096
leaq 0x2a4fd(%rip), %rdx     # 0x32097
callq 0xffe2
leaq 0x80(%rsp), %rdi
leaq 0x58(%rsp), %rsi
movl $0x1, %edx
callq 0x129f2
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0x7bc5
callq 0x72a0
leaq 0x58(%rsp), %rdi
leaq 0x80(%rsp), %rdx
movq %rdx, %rsi
callq 0x1a3e4
leaq 0x18(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x2a4ac(%rip), %rsi     # 0x32096
leaq 0x2a4a6(%rip), %rdx     # 0x32097
leaq 0x8(%rsp), %rdi
callq 0xffe2
leaq 0x58(%rsp), %rdi
leaq 0x8(%rsp), %rsi
movl $0x1, %edx
callq 0x129f2
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0x7c1e
callq 0x72a0
leaq 0x80(%rsp), %rdi
movq %rdi, %rsi
callq 0x198c0
leaq 0x8(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x2a459(%rip), %rsi     # 0x32096
leaq 0x2a453(%rip), %rdx     # 0x32097
callq 0xffe2
leaq 0x80(%rsp), %rdi
leaq 0x8(%rsp), %rsi
movl $0x1, %edx
callq 0x129f2
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0x7c6f
callq 0x72a0
leaq 0x80(%rsp), %rdi
callq 0x227ca
leaq 0x8(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x2a40b(%rip), %rsi     # 0x32096
leaq 0x2a405(%rip), %rdx     # 0x32097
callq 0xffe2
leaq 0x80(%rsp), %rdi
leaq 0x8(%rsp), %rsi
movl $0x1, %edx
callq 0x129f2
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0x7cbd
callq 0x72a0
leaq 0x8(%rsp), %rdi
callq 0x11604
leaq 0xc8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0x80(%rsp), %rdx
callq 0x28d22
leaq 0x40(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x2a3a5(%rip), %rsi     # 0x32096
leaq 0x2a39f(%rip), %rdx     # 0x32097
leaq 0x30(%rsp), %rdi
callq 0xffe2
leaq 0x8(%rsp), %rdi
leaq 0x30(%rsp), %rsi
movl $0x1, %edx
callq 0x129f2
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x7d25
callq 0x72a0
leaq 0x30(%rsp), %rsi
movl $0xbf800000, (%rsi)     # imm = 0xBF800000
leaq 0x80(%rsp), %rdi
callq 0x1a6ee
leaq 0x30(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x2a34a(%rip), %rsi     # 0x32096
leaq 0x2a344(%rip), %rdx     # 0x32097
callq 0xffe2
leaq 0x80(%rsp), %rdi
leaq 0x30(%rsp), %rsi
movl $0x1, %edx
callq 0x129f2
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x7d7e
callq 0x72a0
leaq 0x30(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0x80(%rsp), %rdx
callq 0x1a3e4
leaq 0xb8(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x2a2ee(%rip), %rsi     # 0x32096
leaq 0x2a2e8(%rip), %rdx     # 0x32097
leaq 0xa8(%rsp), %rdi
callq 0xffe2
leaq 0x30(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
movl $0x1, %edx
callq 0x129f2
movq 0xa8(%rsp), %rdi
cmpq %r14, %rdi
je 0x7de5
callq 0x72a0
leaq 0x30(%rsp), %rdi
callq 0x1185a
leaq 0x8(%rsp), %rdi
callq 0x1185a
leaq 0x58(%rsp), %rdi
callq 0x1185a
leaq 0xd8(%rsp), %rdi
callq 0x1185a
leaq 0x80(%rsp), %rdi
callq 0x1185a
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 0x7e45
callq 0x72a0
jmp 0x7e45
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x1185a
jmp 0x7e72
jmp 0x7e6f
jmp 0x7e59
jmp 0x7e6f
jmp 0x7e6f
movq %rax, %rbx
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x7e72
callq 0x72a0
jmp 0x7e72
jmp 0x7e6f
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x1185a
jmp 0x7ec5
jmp 0x7ec2
jmp 0x7e88
jmp 0x7ec2
jmp 0x7e88
jmp 0x7ec2
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0x7ec5
callq 0x72a0
jmp 0x7ec5
jmp 0x7ec2
jmp 0x7eb8
jmp 0x7ea4
jmp 0x7eb8
movq %rax, %rbx
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0x7ecf
callq 0x72a0
jmp 0x7ecf
movq %rax, %rbx
jmp 0x7ecf
movq %rax, %rbx
jmp 0x7edc
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x1185a
leaq 0xd8(%rsp), %rdi
callq 0x1185a
leaq 0x80(%rsp), %rdi
callq 0x1185a
movq %rbx, %rdi
callq 0x7430
nop