// File: CMU-SAFARI[P]MQSim/src/host/IO_Flow_Synthetic.cpp
// Function: Host_Components::IO_Flow_Synthetic::Get_statistics(Utils::Workload_Statistics&, unsigned long (*)(unsigned long), unsigned long (*)(unsigned long))
void IO_Flow_Synthetic::Get_statistics(Utils::Workload_Statistics& stats, LPA_type(*Convert_host_logical_address_to_device_address)(LHA_type lha),
		page_status_type(*Find_NVM_subunit_access_bitmap)(LHA_type lha))
	{
		stats.Type = Utils::Workload_Type::SYNTHETIC;
		stats.generator_type = generator_type;
		stats.Stream_id = io_queue_id - 1;
		stats.Initial_occupancy_ratio = initial_occupancy_ratio;
		stats.Working_set_ratio = working_set_ratio;
		stats.Read_ratio = read_ratio;
		stats.random_request_type_generator_seed = random_request_type_generator_seed;
		stats.Address_distribution_type = address_distribution;
		stats.Ratio_of_hot_addresses_to_whole_working_set = hot_region_ratio;
		stats.Ratio_of_traffic_accessing_hot_region = 1 - hot_region_ratio;
		stats.random_address_generator_seed = random_address_generator_seed;
		stats.random_hot_address_generator_seed = random_hot_address_generator_seed;
		stats.random_hot_cold_generator_seed = random_hot_cold_generator_seed;
		stats.generate_aligned_addresses = generate_aligned_addresses;
		stats.alignment_value = alignment_value;
		stats.Request_size_distribution_type = request_size_distribution;
		stats.Average_request_size_sector = average_request_size;
		stats.STDEV_reuqest_size = variance_request_size;
		stats.random_request_size_generator_seed = random_request_size_generator_seed;
		stats.Request_queue_depth = average_number_of_enqueued_requests;
		stats.random_time_interval_generator_seed = random_time_interval_generator_seed;
		stats.Average_inter_arrival_time_nano_sec = Average_inter_arrival_time_nano_sec;
		stats.Min_LHA = start_lsa_on_device;
		stats.Max_LHA = end_lsa_on_device;
	}

// Assembly:
movq %rdi, -0x8(%rsp)
movq %rsi, -0x10(%rsp)
movq %rdx, -0x18(%rsp)
movq %rcx, -0x20(%rsp)
movq -0x8(%rsp), %rax
movq -0x10(%rsp), %rcx
movl $0x0, (%rcx)
movl 0x4f4(%rax), %edx
movq -0x10(%rsp), %rcx
movl %edx, 0x158(%rcx)
movzwl 0xb0(%rax), %ecx
subl $0x1, %ecx
movw %cx, %dx
movq -0x10(%rsp), %rcx
movw %dx, 0x4(%rcx)
movsd 0x40(%rax), %xmm0
movq -0x10(%rsp), %rcx
movsd %xmm0, 0x8(%rcx)
movsd 0x478(%rax), %xmm0
movq -0x10(%rsp), %rcx
movsd %xmm0, 0x60(%rcx)
movsd 0x470(%rax), %xmm0
movq -0x10(%rsp), %rcx
movsd %xmm0, 0x20(%rcx)
movl 0x488(%rax), %edx
movq -0x10(%rsp), %rcx
movl %edx, 0x18(%rcx)
movl 0x48c(%rax), %edx
movq -0x10(%rsp), %rcx
movl %edx, 0x58(%rcx)
movsd 0x490(%rax), %xmm0
movq -0x10(%rsp), %rcx
movsd %xmm0, 0x70(%rcx)
movsd 0x72c9c(%rip), %xmm0    # 0xabcc0
subsd 0x490(%rax), %xmm0
movq -0x10(%rsp), %rcx
movsd %xmm0, 0x78(%rcx)
movl 0x4a0(%rax), %edx
movq -0x10(%rsp), %rcx
movl %edx, 0x80(%rcx)
movl 0x4c0(%rax), %edx
movq -0x10(%rsp), %rcx
movl %edx, 0x88(%rcx)
movl 0x4b0(%rax), %edx
movq -0x10(%rsp), %rcx
movl %edx, 0x84(%rcx)
movb 0x514(%rax), %dl
movq -0x10(%rsp), %rcx
andb $0x1, %dl
movb %dl, 0x150(%rcx)
movl 0x518(%rax), %edx
movq -0x10(%rsp), %rcx
movl %edx, 0x154(%rcx)
movl 0x4d8(%rax), %edx
movq -0x10(%rsp), %rcx
movl %edx, 0x170(%rcx)
movl 0x4dc(%rax), %edx
movq -0x10(%rsp), %rcx
movl %edx, 0x178(%rcx)
movl 0x4e0(%rax), %edx
movq -0x10(%rsp), %rcx
movl %edx, 0x17c(%rcx)
movl 0x4f0(%rax), %edx
movq -0x10(%rsp), %rcx
movl %edx, 0x174(%rcx)
movl 0x510(%rax), %edx
movq -0x10(%rsp), %rcx
movl %edx, 0x15c(%rcx)
movl 0x500(%rax), %edx
movq -0x10(%rsp), %rcx
movl %edx, 0x160(%rcx)
movq 0x508(%rax), %rdx
movq -0x10(%rsp), %rcx
movq %rdx, 0x168(%rcx)
movq 0x68(%rax), %rdx
movq -0x10(%rsp), %rcx
movq %rdx, 0x130(%rcx)
movq 0x70(%rax), %rcx
movq -0x10(%rsp), %rax
movq %rcx, 0x138(%rax)
retq
nopl (%rax,%rax)