From ddd9cb627b2ad883877b3a2d937350d7e6d31e88 Mon Sep 17 00:00:00 2001 From: Julian Ventura Date: Wed, 28 Aug 2024 11:46:31 -0300 Subject: [PATCH] Optimize `retrieve_result` --- src/vm.rs | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/src/vm.rs b/src/vm.rs index 645df77e..f49cfbc5 100644 --- a/src/vm.rs +++ b/src/vm.rs @@ -342,21 +342,11 @@ fn set_pc(vm: &mut Execution, opcode: &Opcode) -> Result<(), EraVmError> { } fn retrieve_result(vm: &mut Execution) -> Result, EraVmError> { - let fat_pointer_src0 = FatPointer::decode(vm.get_register(1).value); - let range = fat_pointer_src0.start..fat_pointer_src0.start + fat_pointer_src0.len; - let mut result: Vec = vec![0; range.len()]; - let end: u32 = (range.end).min( - (vm.heaps - .get(fat_pointer_src0.page) - .ok_or(HeapError::ReadOutOfBounds)? - .len()) as u32, - ); - for (i, j) in (range.start..end).enumerate() { - let current_heap = vm - .heaps - .get(fat_pointer_src0.page) - .ok_or(HeapError::ReadOutOfBounds)?; - result[i] = current_heap.read_byte(j); - } + let ptr = FatPointer::decode(vm.get_register(1).value); + let result = vm + .heaps + .get(ptr.page) + .ok_or(HeapError::ReadOutOfBounds)? + .read_unaligned_from_pointer(&ptr)?; Ok(result) }