// File: /workspace/github_cpp_makefile_star2_O2/CMU-SAFARI[P]ramulator/src/MemoryFactory.cpp
// Function: ramulator::MemoryFactory<ramulator::SALP>::create(ramulator::Config const&, int)
MemoryBase *MemoryFactory<SALP>::create(const Config& configs, int cacheline) {
    int channels = stoi(configs["channels"], NULL, 0);
    int ranks = stoi(configs["ranks"], NULL, 0);
    int subarrays = stoi(configs["subarrays"], NULL, 0);
    validate(channels, ranks, configs);

    const string& std_name = configs["standard"];
    const string& org_name = configs["org"];
    const string& speed_name = configs["speed"];

    SALP *spec = new SALP(org_name, speed_name, std_name, subarrays);

    extend_channel_width(spec, cacheline);

    return (MemoryBase *)populate_memory(configs, spec, channels, ranks);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x88, %rsp
movl %esi, %ebp
movq %rdi, %rbx
leaq 0x26933(%rip), %rsi     # 0xdc900
leaq 0x8(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
movq %rbx, %rsi
callq 0x10f26
leaq 0x28(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x1e04b
movl %eax, %r14d
leaq 0x28(%rsp), %rdi
callq 0xb568
leaq 0x8(%rsp), %rdi
callq 0xb568
leaq 0x268ef(%rip), %rsi     # 0xdc909
leaq 0x8(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
movq %rbx, %rsi
callq 0x10f26
leaq 0x28(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x1e04b
movl %eax, %r15d
leaq 0x28(%rsp), %rdi
callq 0xb568
leaq 0x8(%rsp), %rdi
callq 0xb568
leaq 0x268a8(%rip), %rsi     # 0xdc90f
leaq 0x8(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
movq %rbx, %rsi
callq 0x10f26
leaq 0x28(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x1e04b
movl %eax, %r12d
leaq 0x28(%rsp), %rdi
callq 0xb568
leaq 0x8(%rsp), %rdi
callq 0xb568
movl %r14d, %edi
movl %r15d, %esi
movq %rbx, %rdx
callq 0xb644c
leaq 0x1b232(%rip), %rsi     # 0xd12f4
leaq 0x8(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0x10eea
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
movq %rbx, %rsi
callq 0x10f26
leaq 0x8(%rsp), %rdi
callq 0xb568
leaq 0x1b293(%rip), %rsi     # 0xd1387
leaq 0x48(%rsp), %rdi
leaq 0x68(%rsp), %rdx
callq 0x10eea
leaq 0x8(%rsp), %rdi
leaq 0x48(%rsp), %rdx
movq %rbx, %rsi
callq 0x10f26
leaq 0x48(%rsp), %rdi
callq 0xb568
leaq 0x1b265(%rip), %rsi     # 0xd138b
leaq 0x68(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x10eea
leaq 0x48(%rsp), %rdi
leaq 0x68(%rsp), %rdx
movq %rbx, %rsi
callq 0x10f26
leaq 0x68(%rsp), %rdi
callq 0xb568
movl $0x3dc8, %edi           # imm = 0x3DC8
callq 0xb2d0
movq %rax, %r13
leaq 0x8(%rsp), %rsi
leaq 0x48(%rsp), %rdx
leaq 0x28(%rsp), %rcx
movq %rax, %rdi
movl %r12d, %r8d
callq 0xc046a
movq %r13, %rdi
movl %ebp, %esi
callq 0xb6474
movq %rbx, %rdi
movq %r13, %rsi
movl %r14d, %edx
movl %r15d, %ecx
callq 0xb64e0
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0xb568
leaq 0x8(%rsp), %rdi
callq 0xb568
leaq 0x28(%rsp), %rdi
callq 0xb568
movq %rbx, %rax
addq $0x88, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movl $0x3dc8, %esi           # imm = 0x3DC8
movq %r13, %rdi
callq 0xb2e0
jmp 0xb622a
movq %rax, %rbx
leaq 0x68(%rsp), %rdi
jmp 0xb622f
movq %rax, %rbx
jmp 0xb6234
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
jmp 0xb6239
movq %rax, %rbx
jmp 0xb623e
jmp 0xb6218
jmp 0xb6222
jmp 0xb6209
jmp 0xb6218
jmp 0xb6222
jmp 0xb6209
jmp 0xb6218
jmp 0xb6222
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0xb568
jmp 0xb621b
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
jmp 0xb6243
movq %rax, %rbx
jmp 0xb6248
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0xb568
leaq 0x8(%rsp), %rdi
callq 0xb568
leaq 0x28(%rsp), %rdi
callq 0xb568
movq %rbx, %rdi
callq 0xb4d0