// File: narges64[P]SIMBA/ssd.cpp
// Function: find_nearest_event(ssd_info*)
int64_t find_nearest_event(ssd_info *ssd) {
	unsigned int i,j;
	int64_t time=MAX_INT64;
	int64_t time1=MAX_INT64;
	int64_t time2=MAX_INT64;



	for (i=0;i<ssd->parameter->channel_number;i++)
	{
		if (ssd->channel_head[i]->next_state==CHANNEL_MODE_IDLE)
			if(time1>ssd->channel_head[i]->next_state_predict_time)
				if (ssd->channel_head[i]->next_state_predict_time > ssd->current_time)
					time1=ssd->channel_head[i]->next_state_predict_time;
		for (j=0;j<ssd->parameter->lun_channel[i];j++)
		{
			if (ssd->channel_head[i]->lun_head[j]->next_state==LUN_MODE_IDLE)
				if(time2>ssd->channel_head[i]->lun_head[j]->next_state_predict_time)
					if (ssd->channel_head[i]->lun_head[j]->next_state_predict_time>ssd->current_time)
						time2=ssd->channel_head[i]->lun_head[j]->next_state_predict_time;

		}
	}


	time=(time1>time2)?time2:time1;


	return time;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movabsq $0x7fffffffffffffff, %rax # imm = 0x7FFFFFFFFFFFFFFF
movq %rax, -0x18(%rbp)
movabsq $0x7fffffffffffffff, %rax # imm = 0x7FFFFFFFFFFFFFFF
movq %rax, -0x20(%rbp)
movabsq $0x7fffffffffffffff, %rax # imm = 0x7FFFFFFFFFFFFFFF
movq %rax, -0x28(%rbp)
movl $0x0, -0xc(%rbp)
movl -0xc(%rbp), %eax
movq -0x8(%rbp), %rcx
movq 0x58(%rcx), %rcx
cmpl 0x98(%rcx), %eax
jae 0xd7f0
movq -0x8(%rbp), %rax
movq 0x90(%rax), %rax
movl -0xc(%rbp), %ecx
movq (%rax,%rcx,8), %rax
cmpl $0x0, 0x3c(%rax)
jne 0xd711
movq -0x20(%rbp), %rax
movq -0x8(%rbp), %rcx
movq 0x90(%rcx), %rcx
movl -0xc(%rbp), %edx
movq (%rcx,%rdx,8), %rcx
cmpq 0x48(%rcx), %rax
jle 0xd70f
movq -0x8(%rbp), %rax
movq 0x90(%rax), %rax
movl -0xc(%rbp), %ecx
movq (%rax,%rcx,8), %rax
movq 0x48(%rax), %rax
movq -0x8(%rbp), %rcx
cmpq (%rcx), %rax
jle 0xd70d
movq -0x8(%rbp), %rax
movq 0x90(%rax), %rax
movl -0xc(%rbp), %ecx
movq (%rax,%rcx,8), %rax
movq 0x48(%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0xd70f
jmp 0xd711
movl $0x0, -0x10(%rbp)
movl -0x10(%rbp), %eax
movq -0x8(%rbp), %rcx
movq 0x58(%rcx), %rcx
movl -0xc(%rbp), %edx
cmpl 0x9c(%rcx,%rdx,4), %eax
jae 0xd7e0
movq -0x8(%rbp), %rax
movq 0x90(%rax), %rax
movl -0xc(%rbp), %ecx
movq (%rax,%rcx,8), %rax
movq 0x50(%rax), %rax
movl -0x10(%rbp), %ecx
movq (%rax,%rcx,8), %rax
cmpl $0x0, 0x20(%rax)
jne 0xd7d0
movq -0x28(%rbp), %rax
movq -0x8(%rbp), %rcx
movq 0x90(%rcx), %rcx
movl -0xc(%rbp), %edx
movq (%rcx,%rdx,8), %rcx
movq 0x50(%rcx), %rcx
movl -0x10(%rbp), %edx
movq (%rcx,%rdx,8), %rcx
cmpq 0x28(%rcx), %rax
jle 0xd7ce
movq -0x8(%rbp), %rax
movq 0x90(%rax), %rax
movl -0xc(%rbp), %ecx
movq (%rax,%rcx,8), %rax
movq 0x50(%rax), %rax
movl -0x10(%rbp), %ecx
movq (%rax,%rcx,8), %rax
movq 0x28(%rax), %rax
movq -0x8(%rbp), %rcx
cmpq (%rcx), %rax
jle 0xd7cc
movq -0x8(%rbp), %rax
movq 0x90(%rax), %rax
movl -0xc(%rbp), %ecx
movq (%rax,%rcx,8), %rax
movq 0x50(%rax), %rax
movl -0x10(%rbp), %ecx
movq (%rax,%rcx,8), %rax
movq 0x28(%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0xd7ce
jmp 0xd7d0
jmp 0xd7d2
movl -0x10(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10(%rbp)
jmp 0xd718
jmp 0xd7e2
movl -0xc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc(%rbp)
jmp 0xd689
movq -0x20(%rbp), %rax
cmpq -0x28(%rbp), %rax
jle 0xd804
movq -0x28(%rbp), %rax
movq %rax, -0x30(%rbp)
jmp 0xd80c
movq -0x20(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
popq %rbp
retq
nopw (%rax,%rax)