Give Rust more indirect function slots and clean up the code
This commit is contained in:
parent
3bb3e21962
commit
38a84342a2
|
@ -105,7 +105,7 @@ function V86Starter(options)
|
|||
// }, this);
|
||||
//}
|
||||
|
||||
const wasm_table = new WebAssembly.Table({ element: "anyfunc", "initial": 0x10000 + 0x100 });
|
||||
const wasm_table = new WebAssembly.Table({ element: "anyfunc", "initial": WASM_TABLE_SIZE + WASM_TABLE_OFFSET });
|
||||
|
||||
var wasm_shared_funcs = {
|
||||
"__assert_fail": (condition, file, line, fun) => {
|
||||
|
|
|
@ -358,6 +358,9 @@ const P_RUN_INTERPRETED = 4;
|
|||
/** @const */
|
||||
var WASM_TABLE_SIZE = 0x10000;
|
||||
|
||||
/** @const */
|
||||
var WASM_TABLE_OFFSET = 1024;
|
||||
|
||||
/** @const */
|
||||
var JIT_CACHE_ARRAY_SIZE = 0x40000;
|
||||
|
||||
|
|
|
@ -369,7 +369,7 @@ CPU.prototype.jit_force_generate = function(addr)
|
|||
CPU.prototype.jit_clear_func = function(index)
|
||||
{
|
||||
dbg_assert(index >= 0 && index < WASM_TABLE_SIZE);
|
||||
this.wm.imports.env[WASM_EXPORT_TABLE_NAME + 0x100].set(index, null);
|
||||
this.wm.imports.env[WASM_EXPORT_TABLE_NAME].set(index + WASM_TABLE_OFFSET, null);
|
||||
};
|
||||
|
||||
CPU.prototype.get_state = function()
|
||||
|
@ -1318,7 +1318,7 @@ CPU.prototype.codegen_finalize = function(wasm_table_index, start, end, first_op
|
|||
first_opcode, state_flags);
|
||||
|
||||
// The following will throw if f isn't an exported function
|
||||
this.wm.imports["env"][WASM_EXPORT_TABLE_NAME].set(wasm_table_index + 0x100, f);
|
||||
this.wm.imports["env"][WASM_EXPORT_TABLE_NAME].set(wasm_table_index + WASM_TABLE_OFFSET, f);
|
||||
|
||||
if(this.test_hook_did_finalize_wasm)
|
||||
{
|
||||
|
@ -1498,11 +1498,10 @@ CPU.prototype.jit_clear_cache = function()
|
|||
this.jit_empty_cache();
|
||||
|
||||
const table = this.wm.exports[WASM_EXPORT_TABLE_NAME] || this.wm.imports["env"][WASM_EXPORT_TABLE_NAME];
|
||||
const offset = 0x100;
|
||||
|
||||
for(let i = 0; i < WASM_TABLE_SIZE; i++)
|
||||
{
|
||||
table.set(offset + i, null);
|
||||
table.set(WASM_TABLE_OFFSET + i, null);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -33,6 +33,10 @@ use cpu2::modrm::{resolve_modrm16, resolve_modrm32};
|
|||
use cpu2::profiler::*;
|
||||
use cpu2::profiler::{profiler_stat_increment, profiler_stat_increment_by};
|
||||
|
||||
/// The offset for our generated functions in the wasm table. Every index less than this is
|
||||
/// reserved for rustc's indirect functions
|
||||
pub const WASM_TABLE_OFFSET: u32 = 1024;
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
#[repr(C)]
|
||||
pub union reg64 {
|
||||
|
@ -777,7 +781,7 @@ pub unsafe fn cycle_internal() -> () {
|
|||
wasm_table_index = (entry & 65535i32 as u32) as u16;
|
||||
initial_state = (entry >> 16i32) as u16;
|
||||
call_indirect1(
|
||||
(wasm_table_index as u32).wrapping_add(256i32 as u32) as i32,
|
||||
(wasm_table_index as u32).wrapping_add(WASM_TABLE_OFFSET as u32) as i32,
|
||||
initial_state,
|
||||
);
|
||||
profiler_stat_increment_by(
|
||||
|
|
Loading…
Reference in a new issue