From 26e512a540ca49d640b06899f4acc7a76e44f8db Mon Sep 17 00:00:00 2001 From: Fabian Date: Thu, 31 Dec 2020 19:14:34 -0600 Subject: [PATCH] Faster way of zeroing memory --- src/cpu.js | 4 ++-- src/rust/cpu/memory.rs | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cpu.js b/src/cpu.js index c04fc592..f9d20818 100644 --- a/src/cpu.js +++ b/src/cpu.js @@ -277,6 +277,7 @@ CPU.prototype.wasm_patch = function() this.codegen_finalize_finished = get_import("codegen_finalize_finished"); this.allocate_memory = get_import("allocate_memory"); + this.zero_memory = get_import("zero_memory"); this.zstd_create_ctx = get_import("zstd_create_ctx"); this.zstd_get_src_ptr = get_import("zstd_get_src_ptr"); @@ -534,8 +535,7 @@ CPU.prototype.pack_memory = function() CPU.prototype.unpack_memory = function(bitmap, packed_memory) { - // TODO: Skip zeroing memory if the memory has just been allocated - this.mem8.fill(0); + this.zero_memory(this.memory_size[0]); const page_count = this.memory_size[0] >> 12; let packed_page = 0; diff --git a/src/rust/cpu/memory.rs b/src/rust/cpu/memory.rs index bcbbacff..ee9ea451 100644 --- a/src/rust/cpu/memory.rs +++ b/src/rust/cpu/memory.rs @@ -33,6 +33,9 @@ pub fn allocate_memory(size: u32) -> u32 { ptr } +#[no_mangle] +pub unsafe fn zero_memory(size: u32) { ptr::write_bytes(mem8, 0, size as usize); } + #[no_mangle] pub fn in_mapped_range(addr: u32) -> bool { return addr >= 0xA0000 && addr < 0xC0000 || addr >= unsafe { *memory_size };