diff --git a/backend-simulators/pim/pim-simulator/src/lib/tracing/tracing_isa.rs b/backend-simulators/pim/pim-simulator/src/lib/tracing/tracing_isa.rs index 51017c2..8b54420 100644 --- a/backend-simulators/pim/pim-simulator/src/lib/tracing/tracing_isa.rs +++ b/backend-simulators/pim/pim-simulator/src/lib/tracing/tracing_isa.rs @@ -1108,41 +1108,58 @@ impl Trace { // Ok(InstructionStatus::Completed) } - pub fn pre_lmv(&mut self, cores: &mut CPU, data: InstructionData) { + fn lmv_impl (&mut self, cores: &mut CPU, data: InstructionData, prefix: &'static str) { + use crate::tracing::pretty_print; + let (core, rd, r1, _, imm_len, offset_select, offset_value) = data.get_core_rd_r1_r2_immlen_offset(); let file: &mut File = self .out_files .get_mut(core as usize) .expect("File at index not found"); - // let core = cores.core(core); - // let r1_val = core.register(r1); - // let rd_val = core.register(rd); - // let r1_val = add_offset_r1(r1_val, offset_select, offset_value); - // let rd_val = add_offset_rd(rd_val, offset_select, offset_value); - // let local_memory = core.load::(r1_val, imm_len)?; - // let tmp = local_memory[0].to_vec(); - // core.execute_store(rd_val, tmp.as_slice()); - // Ok(InstructionStatus::Completed) - writeln!(file, "\t\tLMV\t\t"); + let (host, core) = cores.host_and_cores(core); + let r1_val = core.register(r1); + let rd_val = core.register(rd); + if prefix == "Pre" { + writeln!( + file, + "Inst: lvm {} {} {} {{ {} {} }}", + rd, r1, imm_len, offset_select, offset_value + ); + } else { + writeln!(file); + } + writeln!(file, "{} Register:", prefix); + writeln!(file, "\trd({}): {}", rd, rd_val); + writeln!(file, "\trs1({}): {}", r1, r1_val); + writeln!(file, "{} Immediate:", prefix); + writeln!(file, "\timm_size: {}", imm_len); + writeln!( + file, + "\toffset_select {} offset_value {}", + offset_select, offset_value + ); + let r1_val = add_offset_r1(r1_val, offset_select, offset_value); + let rd_val = add_offset_rd(rd_val, offset_select, offset_value); + let core_memory = core.load::(r1_val, imm_len).unwrap(); + let global_memory = host.load::(rd_val, imm_len).unwrap(); + writeln!(file, "{} Memory:", prefix); + writeln!(file, "\tLocal[{}:{}]: ", r1_val, r1_val + imm_len as usize,); + pretty_print::print_slice::<_,f32>(file, core_memory[0], 30); + writeln!(file, "\tLocal[{}:{}]: ", rd_val, rd_val + imm_len as usize,); + pretty_print::print_slice::<_,f32>(file, global_memory[0], 30); + + if prefix == "Post" { + writeln!(file, "\n###############################################\n"); + } + } + + pub fn pre_lmv(&mut self, cores: &mut CPU, data: InstructionData) { + self.lmv_impl(cores, data, "Pre"); } pub fn post_lmv(&mut self, cores: &mut CPU, data: InstructionData) { - let (core, rd, r1, _, imm_len, offset_select, offset_value) = - data.get_core_rd_r1_r2_immlen_offset(); - let file: &mut File = self - .out_files - .get_mut(core as usize) - .expect("File at index not found"); - // let core = cores.core(core); - // let r1_val = core.register(r1); - // let rd_val = core.register(rd); - // let r1_val = add_offset_r1(r1_val, offset_select, offset_value); - // let rd_val = add_offset_rd(rd_val, offset_select, offset_value); - // let local_memory = core.load::(r1_val, imm_len)?; - // let tmp = local_memory[0].to_vec(); - // core.execute_store(rd_val, tmp.as_slice()); - // Ok(InstructionStatus::Completed) + self.lmv_impl(cores, data, "Post"); } pub fn pre_send(&mut self, cores: &mut CPU, data: InstructionData) {