// File: theolepage[P]prophecy/src/model/model.hh
// Function: Model<float>::compile(float)
void compile(T learning_rate)
    {
        learning_rate_ = learning_rate;
        compiled_ = true;

        if (layers_.size() >= 2)
        {
            int last = layers_.size() - 1;
            layers_[0]->compile(std::weak_ptr<Layer<T>>(), layers_[1]);
            layers_[last]->compile(layers_[last - 1], nullptr);
        }
        for (size_t i = 1; i < layers_.size() - 1; i++)
            layers_[i]->compile(layers_[i - 1], layers_[i + 1]);
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x100, %rsp            # imm = 0x100
movq %rdi, -0x8(%rbp)
movss %xmm0, -0xc(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x90(%rbp)
movss -0xc(%rbp), %xmm0
movss %xmm0, 0xc(%rdi)
movb $0x1, 0x8(%rdi)
addq $0x10, %rdi
callq 0x6930
cmpq $0x2, %rax
jb 0x2dd7
movq -0x90(%rbp), %rdi
addq $0x10, %rdi
movq %rdi, -0xb0(%rbp)
callq 0x6930
movq -0xb0(%rbp), %rdi
decl %eax
movl %eax, -0x10(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0x9390
movq %rax, %rdi
callq 0x7270
movq %rax, -0xa8(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x20(%rbp)
leaq -0x20(%rbp), %rdi
movq %rdi, -0xa0(%rbp)
callq 0x6fb0
movq -0xb0(%rbp), %rdi
movl $0x1, %esi
callq 0x9390
movq %rax, %rsi
leaq -0x30(%rbp), %rdi
movq %rdi, -0x98(%rbp)
callq 0x93b0
movq -0xa8(%rbp), %rdi
movq -0xa0(%rbp), %rsi
movq -0x98(%rbp), %rdx
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
jmp 0x2ce6
leaq -0x30(%rbp), %rdi
callq 0x5270
leaq -0x20(%rbp), %rdi
callq 0x7110
movq -0x90(%rbp), %rdi
addq $0x10, %rdi
movq %rdi, -0xd0(%rbp)
movslq -0x10(%rbp), %rsi
callq 0x9390
movq %rax, %rdi
callq 0x7270
movq -0xd0(%rbp), %rdi
movq %rax, -0xc8(%rbp)
movl -0x10(%rbp), %eax
decl %eax
movslq %eax, %rsi
callq 0x9390
movq %rax, %rsi
leaq -0x50(%rbp), %rdi
movq %rdi, -0xc0(%rbp)
callq 0x93e0
xorl %eax, %eax
movl %eax, %esi
leaq -0x60(%rbp), %rdi
movq %rdi, -0xb8(%rbp)
callq 0x9410
movq -0xc8(%rbp), %rdi
movq -0xc0(%rbp), %rsi
movq -0xb8(%rbp), %rdx
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
jmp 0x2d7d
leaq -0x60(%rbp), %rdi
callq 0x5270
leaq -0x50(%rbp), %rdi
callq 0x7110
jmp 0x2dd7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x5270
leaq -0x20(%rbp), %rdi
callq 0x7110
jmp 0x2efc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x5270
leaq -0x50(%rbp), %rdi
callq 0x7110
jmp 0x2efc
movq $0x1, -0x68(%rbp)
movq -0x90(%rbp), %rdi
movq -0x68(%rbp), %rax
movq %rax, -0xd8(%rbp)
addq $0x10, %rdi
callq 0x6930
movq %rax, %rcx
movq -0xd8(%rbp), %rax
subq $0x1, %rcx
cmpq %rcx, %rax
jae 0x2ef3
movq -0x90(%rbp), %rdi
addq $0x10, %rdi
movq %rdi, -0xf8(%rbp)
movq -0x68(%rbp), %rsi
callq 0x9390
movq %rax, %rdi
callq 0x7270
movq -0xf8(%rbp), %rdi
movq %rax, -0xf0(%rbp)
movq -0x68(%rbp), %rsi
decq %rsi
callq 0x9390
movq %rax, %rsi
leaq -0x78(%rbp), %rdi
movq %rdi, -0xe8(%rbp)
callq 0x93e0
movq -0xf8(%rbp), %rdi
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x9390
movq %rax, %rsi
leaq -0x88(%rbp), %rdi
movq %rdi, -0xe0(%rbp)
callq 0x93b0
movq -0xf0(%rbp), %rdi
movq -0xe8(%rbp), %rsi
movq -0xe0(%rbp), %rdx
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
jmp 0x2eaa
leaq -0x88(%rbp), %rdi
callq 0x5270
leaq -0x78(%rbp), %rdi
callq 0x7110
movq -0x68(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x68(%rbp)
jmp 0x2ddf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x5270
leaq -0x78(%rbp), %rdi
callq 0x7110
jmp 0x2efc
addq $0x100, %rsp            # imm = 0x100
popq %rbp
retq
movq -0x38(%rbp), %rdi
callq 0x2200
nopw %cs:(%rax,%rax)
nop