// File: CMU-SAFARI[P]MQSim/src/ssd/Address_Mapping_Unit_Page_Level.cpp
// Function: SSD_Components::Address_Mapping_Unit_Page_Level::Convert_ppa_to_address(unsigned long)
inline NVM::FlashMemory::Physical_Page_Address Address_Mapping_Unit_Page_Level::Convert_ppa_to_address(const PPA_type ppa)
	{
		NVM::FlashMemory::Physical_Page_Address target;
		target.ChannelID = (flash_channel_ID_type)(ppa / page_no_per_channel);
		target.ChipID = (flash_chip_ID_type)((ppa % page_no_per_channel) / page_no_per_chip);
		target.DieID = (flash_die_ID_type)(((ppa % page_no_per_channel) % page_no_per_chip) / page_no_per_die);
		target.PlaneID = (flash_plane_ID_type)((((ppa % page_no_per_channel) % page_no_per_chip) % page_no_per_die) / page_no_per_plane);
		target.BlockID = (flash_block_ID_type)(((((ppa % page_no_per_channel) % page_no_per_chip) % page_no_per_die) % page_no_per_plane) / pages_no_per_block);
		target.PageID = (flash_page_ID_type)((((((ppa % page_no_per_channel) % page_no_per_chip) % page_no_per_die) % page_no_per_plane) % pages_no_per_block) % pages_no_per_block);

		return target;
	}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x10(%rsp)
movq %rdi, %rax
movq %rax, 0x18(%rsp)
movq %rdi, 0x30(%rsp)
movq %rsi, 0x28(%rsp)
movq %rdx, 0x20(%rsp)
movq 0x28(%rsp), %rax
movq %rax, 0x8(%rsp)
xorl %r9d, %r9d
movl %r9d, %esi
movl %r9d, %edx
movl %r9d, %ecx
movl %r9d, %r8d
movl $0x0, (%rsp)
callq 0x4a220
movq 0x8(%rsp), %rcx
movq 0x10(%rsp), %rdi
movq 0x20(%rsp), %rax
movl 0x88(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movl %eax, (%rdi)
movq 0x20(%rsp), %rax
movl 0x88(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movq %rdx, %rax
movl 0x8c(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movl %eax, 0x4(%rdi)
movq 0x20(%rsp), %rax
movl 0x88(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movq %rdx, %rax
movl 0x8c(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movq %rdx, %rax
movl 0x90(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movl %eax, 0x8(%rdi)
movq 0x20(%rsp), %rax
movl 0x88(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movq %rdx, %rax
movl 0x8c(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movq %rdx, %rax
movl 0x90(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movq %rdx, %rax
movl 0x94(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movl %eax, 0xc(%rdi)
movq 0x20(%rsp), %rax
movl 0x88(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movq %rdx, %rax
movl 0x8c(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movq %rdx, %rax
movl 0x90(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movq %rdx, %rax
movl 0x94(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movq %rdx, %rax
movl 0x78(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movl %eax, 0x10(%rdi)
movq 0x20(%rsp), %rax
movl 0x88(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movq %rdx, %rax
movl 0x8c(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movq %rdx, %rax
movl 0x90(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movq %rdx, %rax
movl 0x94(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movq %rdx, %rax
movl 0x78(%rcx), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movq %rdx, %rax
movl 0x78(%rcx), %ecx
xorl %edx, %edx
divq %rcx
movq 0x18(%rsp), %rax
movl %edx, %ecx
movl %ecx, 0x14(%rdi)
addq $0x38, %rsp
retq
nopl (%rax)