// File: theolepage[P]prophecy/src/layer_implem/dense_layer.hh
// Function: DenseLayer<float>::compile(std::weak_ptr<Layer<float>>, std::shared_ptr<Layer<float>>)
void compile(std::weak_ptr<Layer<T>> prev,
                 std::shared_ptr<Layer<T>> next)
    {
        // Initialize weights and biases
        this->weights_ = Matrix<T>(this->nb_neurons_, prev.lock()->get_nb_neurons());
        this->biases_ = Matrix<T>(this->nb_neurons_, 1);
        this->weights_.fill(fill_type::RANDOM_FLOAT);
        this->biases_.fill(fill_type::RANDOM_FLOAT);

        // Initialize delta_weights_ and delta_biases_
        this->delta_weights_ = Matrix<T>(this->nb_neurons_, prev.lock()->get_nb_neurons());
        this->delta_biases_ = Matrix<T>(this->nb_neurons_, 1);

        this->compiled_ = true;
        this->prev_ = prev;
        this->next_ = next;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x130, %rsp            # imm = 0x130
movq %rsi, -0xf8(%rbp)
movq %rdx, -0xf0(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xe8(%rbp)
movl 0xc(%rax), %eax
movl %eax, -0xdc(%rbp)
leaq -0x48(%rbp), %rdi
movq %rdi, -0xd8(%rbp)
callq 0x8d10
movq -0xd8(%rbp), %rdi
callq 0x7270
movq %rax, %rdi
callq 0x9100
movl %eax, -0xcc(%rbp)
jmp 0x7b55
movl -0xcc(%rbp), %edx
movl -0xdc(%rbp), %esi
leaq -0x38(%rbp), %rdi
callq 0x3710
jmp 0x7b6c
movq -0xe8(%rbp), %rdi
addq $0x90, %rdi
movq %rdi, -0x120(%rbp)
leaq -0x38(%rbp), %rsi
movq %rsi, -0x130(%rbp)
callq 0x7220
movq -0x130(%rbp), %rdi
callq 0x34d0
leaq -0x48(%rbp), %rdi
callq 0x5270
movq -0xe8(%rbp), %rax
movl 0xc(%rax), %esi
leaq -0x78(%rbp), %rdi
movq %rdi, -0x128(%rbp)
movl $0x1, %edx
callq 0x3710
movq -0x128(%rbp), %rsi
movq -0xe8(%rbp), %rdi
addq $0xb0, %rdi
movq %rdi, -0x118(%rbp)
callq 0x7220
movq -0x128(%rbp), %rdi
callq 0x34d0
movq -0x120(%rbp), %rdi
xorl %esi, %esi
movl %esi, -0x110(%rbp)
callq 0x9120
movq -0x118(%rbp), %rdi
movl -0x110(%rbp), %esi
callq 0x9120
movq -0xe8(%rbp), %rax
movq -0xf8(%rbp), %rsi
movl 0xc(%rax), %eax
movl %eax, -0x10c(%rbp)
leaq -0xa8(%rbp), %rdi
movq %rdi, -0x108(%rbp)
callq 0x8d10
movq -0x108(%rbp), %rdi
callq 0x7270
movq %rax, %rdi
callq 0x9100
movl %eax, -0xfc(%rbp)
jmp 0x7c5e
movl -0xfc(%rbp), %edx
movl -0x10c(%rbp), %esi
leaq -0x98(%rbp), %rdi
callq 0x3710
jmp 0x7c78
movq -0xe8(%rbp), %rdi
addq $0xd0, %rdi
leaq -0x98(%rbp), %rsi
callq 0x7220
leaq -0x98(%rbp), %rdi
callq 0x34d0
leaq -0xa8(%rbp), %rdi
callq 0x5270
movq -0xe8(%rbp), %rax
movl 0xc(%rax), %esi
leaq -0xc8(%rbp), %rdi
movl $0x1, %edx
callq 0x3710
movq -0xe8(%rbp), %rdi
addq $0xf0, %rdi
leaq -0xc8(%rbp), %rsi
callq 0x7220
leaq -0xc8(%rbp), %rdi
callq 0x34d0
movq -0xf8(%rbp), %rsi
movq -0xe8(%rbp), %rdi
movb $0x1, 0x8(%rdi)
addq $0x70, %rdi
callq 0x72d0
movq -0xe8(%rbp), %rdi
movq -0xf0(%rbp), %rsi
addq $0x80, %rdi
callq 0x7300
addq $0x130, %rsp            # imm = 0x130
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x5270
jmp 0x7d58
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x5270
movq -0x50(%rbp), %rdi
callq 0x2200
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)