mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-06-18 02:59:21 +00:00
Refine interpreter to improve performance (#162)
This commit is contained in:
parent
256ecdfdf9
commit
b5cbc02e90
|
@ -802,11 +802,12 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
|
||||||
WASMInterpFrame *prev_frame)
|
WASMInterpFrame *prev_frame)
|
||||||
{
|
{
|
||||||
WASMMemoryInstance *memory = module->default_memory;
|
WASMMemoryInstance *memory = module->default_memory;
|
||||||
uint32 memory_data_size = memory
|
uint32 memory_data_size = memory ? (module->module->possible_memory_grow
|
||||||
? memory->num_bytes_per_page * memory->cur_page_count : 0;
|
? DEFAULT_NUM_BYTES_PER_PAGE * memory->cur_page_count
|
||||||
|
: memory->num_bytes_per_page * memory->cur_page_count)
|
||||||
|
: 0;
|
||||||
uint32 heap_base_offset = memory ? (uint32)memory->heap_base_offset : 0;
|
uint32 heap_base_offset = memory ? (uint32)memory->heap_base_offset : 0;
|
||||||
uint32 heap_data_size = memory
|
uint32 heap_data_size = memory ? (uint32)(memory->heap_data_end - memory->heap_data) : 0;
|
||||||
? (uint32)(memory->heap_data_end - memory->heap_data) : 0;
|
|
||||||
WASMTableInstance *table = module->default_table;
|
WASMTableInstance *table = module->default_table;
|
||||||
WASMGlobalInstance *globals = module->globals;
|
WASMGlobalInstance *globals = module->globals;
|
||||||
uint8 *global_data = memory ? memory->global_data : NULL;
|
uint8 *global_data = memory ? memory->global_data : NULL;
|
||||||
|
@ -862,7 +863,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
|
||||||
HANDLE_OP (WASM_OP_BLOCK):
|
HANDLE_OP (WASM_OP_BLOCK):
|
||||||
block_ret_type = *frame_ip++;
|
block_ret_type = *frame_ip++;
|
||||||
|
|
||||||
cache_index = ((uintptr_t)frame_ip) % block_addr_cache_size;
|
cache_index = ((uintptr_t)frame_ip) & (uintptr_t)(block_addr_cache_size - 1);
|
||||||
if (block_addr_cache[cache_index].frame_ip == frame_ip) {
|
if (block_addr_cache[cache_index].frame_ip == frame_ip) {
|
||||||
end_addr = block_addr_cache[cache_index].end_addr;
|
end_addr = block_addr_cache[cache_index].end_addr;
|
||||||
}
|
}
|
||||||
|
@ -885,7 +886,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
|
||||||
HANDLE_OP (WASM_OP_LOOP):
|
HANDLE_OP (WASM_OP_LOOP):
|
||||||
block_ret_type = *frame_ip++;
|
block_ret_type = *frame_ip++;
|
||||||
|
|
||||||
cache_index = ((uintptr_t)frame_ip) % block_addr_cache_size;
|
cache_index = ((uintptr_t)frame_ip) & (uintptr_t)(block_addr_cache_size - 1);
|
||||||
if (block_addr_cache[cache_index].frame_ip == frame_ip) {
|
if (block_addr_cache[cache_index].frame_ip == frame_ip) {
|
||||||
end_addr = block_addr_cache[cache_index].end_addr;
|
end_addr = block_addr_cache[cache_index].end_addr;
|
||||||
}
|
}
|
||||||
|
@ -908,7 +909,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
|
||||||
HANDLE_OP (WASM_OP_IF):
|
HANDLE_OP (WASM_OP_IF):
|
||||||
block_ret_type = *frame_ip++;
|
block_ret_type = *frame_ip++;
|
||||||
|
|
||||||
cache_index = ((uintptr_t)frame_ip) % block_addr_cache_size;
|
cache_index = ((uintptr_t)frame_ip) & (uintptr_t)(block_addr_cache_size - 1);
|
||||||
if (block_addr_cache[cache_index].frame_ip == frame_ip) {
|
if (block_addr_cache[cache_index].frame_ip == frame_ip) {
|
||||||
else_addr = block_addr_cache[cache_index].else_addr;
|
else_addr = block_addr_cache[cache_index].else_addr;
|
||||||
end_addr = block_addr_cache[cache_index].end_addr;
|
end_addr = block_addr_cache[cache_index].end_addr;
|
||||||
|
@ -1542,7 +1543,9 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
|
||||||
PUSH_I32(prev_page_count);
|
PUSH_I32(prev_page_count);
|
||||||
/* update the memory instance ptr */
|
/* update the memory instance ptr */
|
||||||
memory = module->default_memory;
|
memory = module->default_memory;
|
||||||
memory_data_size = memory->num_bytes_per_page * memory->cur_page_count;
|
memory_data_size = module->module->possible_memory_grow
|
||||||
|
? DEFAULT_NUM_BYTES_PER_PAGE * memory->cur_page_count
|
||||||
|
: memory->num_bytes_per_page * memory->cur_page_count;
|
||||||
global_data = memory->global_data;
|
global_data = memory->global_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user