// File: /workspace/github_cpp_makefile_star2_O3/btbujiangjun[P]abcdl/src/cnn/Layer.cpp
// Function: abcdl::cnn::OutputLayer::initialize(abcdl::cnn::Layer*)
void OutputLayer::initialize(Layer* pre_layer){
    this->_cols = pre_layer->get_rows() * pre_layer->get_cols() * pre_layer->get_out_channel_size();
    this->_in_channel_size = pre_layer->get_out_channel_size();

    this->_weights.push_back(new abcdl::algebra::RandomMatrix<real>(this->_rows, this->_cols, 0.0, 0.5));
    this->_bias = new abcdl::algebra::Mat(0.0, _rows, 1);
    this->_activations.push_back(new abcdl::algebra::Mat());
    this->_deltas.push_back(new abcdl::algebra::Mat());

    this->_delta_weights.push_back(new abcdl::algebra::Mat(this->_rows, this->_cols));
    this->_delta_bias = new abcdl::algebra::Mat(0.0, _rows, 1);
    this->_batch_weights.push_back(new abcdl::algebra::Mat(this->_rows, this->_cols));
    this->_batch_bias = new abcdl::algebra::Mat(0.0, _rows, 1);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x20, %rsp
movq %rdi, %rbx
movq 0x10(%rsi), %r15
imulq 0x8(%rsi), %r15
movq 0x20(%rsi), %rax
imulq %rax, %r15
movq %r15, 0x10(%rdi)
movq %rax, 0x18(%rdi)
movl $0x38, %edi
callq 0x8320
movq %rax, %r14
movq 0x8(%rbx), %rsi
xorl %eax, %eax
leaq 0x1c(%rsp), %rcx
movl %eax, (%rcx)
leaq 0x18(%rsp), %r8
movl $0x3f000000, (%r8)      # imm = 0x3F000000
leaq 0x14(%rsp), %r9
movl %eax, (%r9)
leaq 0x10(%rsp), %rdx
movl %eax, (%rdx)
movq %rdx, (%rsp)
movq %r14, %rdi
movq %r15, %rdx
callq 0x1c276
movq %r14, 0x8(%rsp)
movq 0x48(%rbx), %rsi
cmpq 0x50(%rbx), %rsi
je 0x14884
movq %r14, (%rsi)
addq $0x8, 0x48(%rbx)
jmp 0x14892
leaq 0x40(%rbx), %rdi
leaq 0x8(%rsp), %rdx
callq 0x15530
movl $0x28, %edi
callq 0x8320
movq %rax, %r14
leaq 0x8(%rsp), %rsi
movl $0x0, (%rsi)
movq 0x8(%rbx), %rdx
movl $0x1, %ecx
movq %rax, %rdi
callq 0x1822a
movq %r14, 0x58(%rbx)
movl $0x28, %edi
callq 0x8320
movq %rax, %r14
movq %rax, %rdi
callq 0x181b8
movq %r14, 0x8(%rsp)
movq 0x68(%rbx), %rsi
cmpq 0x70(%rbx), %rsi
je 0x148ed
movq %r14, (%rsi)
addq $0x8, 0x68(%rbx)
jmp 0x148fb
leaq 0x60(%rbx), %rdi
leaq 0x8(%rsp), %rdx
callq 0x10156
movl $0x28, %edi
callq 0x8320
movq %rax, %r14
movq %rax, %rdi
callq 0x181b8
movq %r14, 0x8(%rsp)
movq 0xc0(%rbx), %rsi
cmpq 0xc8(%rbx), %rsi
je 0x14932
movq %r14, (%rsi)
addq $0x8, 0xc0(%rbx)
jmp 0x14943
leaq 0xb8(%rbx), %rdi
leaq 0x8(%rsp), %rdx
callq 0x10156
movl $0x28, %edi
callq 0x8320
movq %rax, %r14
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movq %rax, %rdi
callq 0x181d6
movq %r14, 0x8(%rsp)
movq 0x80(%rbx), %rsi
cmpq 0x88(%rbx), %rsi
je 0x14982
movq %r14, (%rsi)
addq $0x8, 0x80(%rbx)
jmp 0x14990
leaq 0x78(%rbx), %rdi
leaq 0x8(%rsp), %rdx
callq 0x10156
movl $0x28, %edi
callq 0x8320
movq %rax, %r14
leaq 0x8(%rsp), %rsi
movl $0x0, (%rsi)
movq 0x8(%rbx), %rdx
movl $0x1, %ecx
movq %rax, %rdi
callq 0x1822a
movq %r14, 0x90(%rbx)
movl $0x28, %edi
callq 0x8320
movq %rax, %r14
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movq %rax, %rdi
callq 0x181d6
movq %r14, 0x8(%rsp)
movq 0xa0(%rbx), %rsi
cmpq 0xa8(%rbx), %rsi
je 0x149ff
movq %r14, (%rsi)
addq $0x8, 0xa0(%rbx)
jmp 0x14a10
leaq 0x98(%rbx), %rdi
leaq 0x8(%rsp), %rdx
callq 0x10156
movl $0x28, %edi
callq 0x8320
movq %rax, %r14
leaq 0x8(%rsp), %rsi
movl $0x0, (%rsi)
movq 0x8(%rbx), %rdx
movl $0x1, %ecx
movq %rax, %rdi
callq 0x1822a
movq %r14, 0xb0(%rbx)
addq $0x20, %rsp
popq %rbx
popq %r14
popq %r15
retq
movq %rax, %rbx
jmp 0x14a68
jmp 0x14a5d
jmp 0x14a5d
jmp 0x14a5d
jmp 0x14a5d
jmp 0x14a5d
jmp 0x14a5d
jmp 0x14a5d
movq %rax, %rbx
movq %r14, %rdi
callq 0x8300
movq %rbx, %rdi
callq 0x8500