mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-27 05:49:08 +00:00
wasm_interp: use copy_from_slice instead of write_all
This commit is contained in:
parent
54305dd182
commit
a593d19b2d
1 changed files with 19 additions and 22 deletions
|
@ -1,6 +1,5 @@
|
||||||
use bumpalo::{collections::Vec, Bump};
|
use bumpalo::{collections::Vec, Bump};
|
||||||
use std::fmt;
|
use std::fmt::{self, Write};
|
||||||
use std::io::Write;
|
|
||||||
use std::iter;
|
use std::iter;
|
||||||
|
|
||||||
use roc_wasm_module::opcodes::OpCode;
|
use roc_wasm_module::opcodes::OpCode;
|
||||||
|
@ -124,7 +123,6 @@ impl<'a> ExecutionState<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fetch_immediate_u32(&mut self, module: &WasmModule<'a>) -> u32 {
|
fn fetch_immediate_u32(&mut self, module: &WasmModule<'a>) -> u32 {
|
||||||
use std::fmt::Write;
|
|
||||||
let x = u32::parse((), &module.code.bytes, &mut self.program_counter).unwrap();
|
let x = u32::parse((), &module.code.bytes, &mut self.program_counter).unwrap();
|
||||||
if let Some(debug_string) = self.debug_string.as_mut() {
|
if let Some(debug_string) = self.debug_string.as_mut() {
|
||||||
write!(debug_string, "{}", x).unwrap();
|
write!(debug_string, "{}", x).unwrap();
|
||||||
|
@ -171,7 +169,6 @@ impl<'a> ExecutionState<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_debug<T: fmt::Debug>(&mut self, value: T) {
|
fn write_debug<T: fmt::Debug>(&mut self, value: T) {
|
||||||
use fmt::Write;
|
|
||||||
if let Some(debug_string) = self.debug_string.as_mut() {
|
if let Some(debug_string) = self.debug_string.as_mut() {
|
||||||
std::write!(debug_string, "{:?} ", value).unwrap();
|
std::write!(debug_string, "{:?} ", value).unwrap();
|
||||||
}
|
}
|
||||||
|
@ -376,56 +373,56 @@ impl<'a> ExecutionState<'a> {
|
||||||
I32STORE => {
|
I32STORE => {
|
||||||
let (addr, value) = self.get_store_addr_value(module);
|
let (addr, value) = self.get_store_addr_value(module);
|
||||||
let unwrapped = value.unwrap_i32();
|
let unwrapped = value.unwrap_i32();
|
||||||
let mut target = &mut self.memory[addr..][..4];
|
let target = &mut self.memory[addr..][..4];
|
||||||
target.write_all(&unwrapped.to_le_bytes()).unwrap();
|
target.copy_from_slice(&unwrapped.to_le_bytes());
|
||||||
}
|
}
|
||||||
I64STORE => {
|
I64STORE => {
|
||||||
let (addr, value) = self.get_store_addr_value(module);
|
let (addr, value) = self.get_store_addr_value(module);
|
||||||
let unwrapped = value.unwrap_i64();
|
let unwrapped = value.unwrap_i64();
|
||||||
let mut target = &mut self.memory[addr..][..8];
|
let target = &mut self.memory[addr..][..8];
|
||||||
target.write_all(&unwrapped.to_le_bytes()).unwrap();
|
target.copy_from_slice(&unwrapped.to_le_bytes());
|
||||||
}
|
}
|
||||||
F32STORE => {
|
F32STORE => {
|
||||||
let (addr, value) = self.get_store_addr_value(module);
|
let (addr, value) = self.get_store_addr_value(module);
|
||||||
let unwrapped = value.unwrap_f32();
|
let unwrapped = value.unwrap_f32();
|
||||||
let mut target = &mut self.memory[addr..][..4];
|
let target = &mut self.memory[addr..][..4];
|
||||||
target.write_all(&unwrapped.to_le_bytes()).unwrap();
|
target.copy_from_slice(&unwrapped.to_le_bytes());
|
||||||
}
|
}
|
||||||
F64STORE => {
|
F64STORE => {
|
||||||
let (addr, value) = self.get_store_addr_value(module);
|
let (addr, value) = self.get_store_addr_value(module);
|
||||||
let unwrapped = value.unwrap_f64();
|
let unwrapped = value.unwrap_f64();
|
||||||
let mut target = &mut self.memory[addr..][..8];
|
let target = &mut self.memory[addr..][..8];
|
||||||
target.write_all(&unwrapped.to_le_bytes()).unwrap();
|
target.copy_from_slice(&unwrapped.to_le_bytes());
|
||||||
}
|
}
|
||||||
I32STORE8 => {
|
I32STORE8 => {
|
||||||
let (addr, value) = self.get_store_addr_value(module);
|
let (addr, value) = self.get_store_addr_value(module);
|
||||||
let unwrapped = value.unwrap_i32();
|
let unwrapped = value.unwrap_i32();
|
||||||
let mut target = &mut self.memory[addr..][..1];
|
let target = &mut self.memory[addr..][..1];
|
||||||
target.write_all(&unwrapped.to_le_bytes()[..1]).unwrap();
|
target.copy_from_slice(&unwrapped.to_le_bytes()[..1]);
|
||||||
}
|
}
|
||||||
I32STORE16 => {
|
I32STORE16 => {
|
||||||
let (addr, value) = self.get_store_addr_value(module);
|
let (addr, value) = self.get_store_addr_value(module);
|
||||||
let unwrapped = value.unwrap_i32();
|
let unwrapped = value.unwrap_i32();
|
||||||
let mut target = &mut self.memory[addr..][..2];
|
let target = &mut self.memory[addr..][..2];
|
||||||
target.write_all(&unwrapped.to_le_bytes()[..2]).unwrap();
|
target.copy_from_slice(&unwrapped.to_le_bytes()[..2]);
|
||||||
}
|
}
|
||||||
I64STORE8 => {
|
I64STORE8 => {
|
||||||
let (addr, value) = self.get_store_addr_value(module);
|
let (addr, value) = self.get_store_addr_value(module);
|
||||||
let unwrapped = value.unwrap_i64();
|
let unwrapped = value.unwrap_i64();
|
||||||
let mut target = &mut self.memory[addr..][..1];
|
let target = &mut self.memory[addr..][..1];
|
||||||
target.write_all(&unwrapped.to_le_bytes()[..1]).unwrap();
|
target.copy_from_slice(&unwrapped.to_le_bytes()[..1]);
|
||||||
}
|
}
|
||||||
I64STORE16 => {
|
I64STORE16 => {
|
||||||
let (addr, value) = self.get_store_addr_value(module);
|
let (addr, value) = self.get_store_addr_value(module);
|
||||||
let unwrapped = value.unwrap_i64();
|
let unwrapped = value.unwrap_i64();
|
||||||
let mut target = &mut self.memory[addr..][..2];
|
let target = &mut self.memory[addr..][..2];
|
||||||
target.write_all(&unwrapped.to_le_bytes()[..2]).unwrap();
|
target.copy_from_slice(&unwrapped.to_le_bytes()[..2]);
|
||||||
}
|
}
|
||||||
I64STORE32 => {
|
I64STORE32 => {
|
||||||
let (addr, value) = self.get_store_addr_value(module);
|
let (addr, value) = self.get_store_addr_value(module);
|
||||||
let unwrapped = value.unwrap_i64();
|
let unwrapped = value.unwrap_i64();
|
||||||
let mut target = &mut self.memory[addr..][..4];
|
let target = &mut self.memory[addr..][..4];
|
||||||
target.write_all(&unwrapped.to_le_bytes()[..4]).unwrap();
|
target.copy_from_slice(&unwrapped.to_le_bytes()[..4]);
|
||||||
}
|
}
|
||||||
CURRENTMEMORY => {
|
CURRENTMEMORY => {
|
||||||
let size = self.memory.len() as i32 / MemorySection::PAGE_SIZE as i32;
|
let size = self.memory.len() as i32 / MemorySection::PAGE_SIZE as i32;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue