Merge pull request #2821 from alexcrichton/faster-vmoffsets

Precompute fields in `VMOffsets`
This commit is contained in:
Nick Fitzgerald
2021-04-08 14:17:11 -07:00
committed by GitHub
4 changed files with 221 additions and 199 deletions

View File

@@ -1156,7 +1156,7 @@ mod tests {
let actual_offset = (next_ptr as usize) - (table_ptr as usize);
let offsets = wasmtime_environ::VMOffsets {
let offsets = wasmtime_environ::VMOffsets::from(wasmtime_environ::VMOffsetsFields {
pointer_size: 8,
num_signature_ids: 0,
num_imported_functions: 0,
@@ -1167,7 +1167,7 @@ mod tests {
num_defined_tables: 0,
num_defined_memories: 0,
num_defined_globals: 0,
};
});
assert_eq!(
offsets.vm_extern_ref_activation_table_next() as usize,
actual_offset
@@ -1183,7 +1183,7 @@ mod tests {
let actual_offset = (end_ptr as usize) - (table_ptr as usize);
let offsets = wasmtime_environ::VMOffsets {
let offsets = wasmtime_environ::VMOffsets::from(wasmtime_environ::VMOffsetsFields {
pointer_size: 8,
num_signature_ids: 0,
num_imported_functions: 0,
@@ -1194,7 +1194,7 @@ mod tests {
num_defined_tables: 0,
num_defined_memories: 0,
num_defined_globals: 0,
};
});
assert_eq!(
offsets.vm_extern_ref_activation_table_end() as usize,
actual_offset

View File

@@ -21,7 +21,7 @@ use std::mem;
use std::sync::{Arc, Mutex};
use wasmtime_environ::{
entity::{EntitySet, PrimaryMap},
MemoryStyle, Module, Tunables, VMOffsets, WASM_PAGE_SIZE,
MemoryStyle, Module, Tunables, VMOffsets, VMOffsetsFields, WASM_PAGE_SIZE,
};
cfg_if::cfg_if! {
@@ -302,7 +302,7 @@ impl InstancePool {
let page_size = region::page::size();
// Calculate the maximum size of an Instance structure given the limits
let offsets = VMOffsets {
let offsets = VMOffsets::from(VMOffsetsFields {
pointer_size: std::mem::size_of::<*const u8>() as u8,
num_signature_ids: module_limits.types,
num_imported_functions: module_limits.imported_functions,
@@ -313,7 +313,7 @@ impl InstancePool {
num_defined_tables: module_limits.tables,
num_defined_memories: module_limits.memories,
num_defined_globals: module_limits.globals,
};
});
let instance_size = round_up_to_pow2(
mem::size_of::<Instance>()