disable resolve_modrm patch
This commit is contained in:
parent
705f59773a
commit
fd7aed1821
|
@ -58,50 +58,6 @@ var ASYNC_SAFE = false;
|
|||
});
|
||||
};
|
||||
|
||||
v86util.add_download_button = function(data, filename)
|
||||
{
|
||||
let b = document.createElement("button");
|
||||
b.textContent = "download";
|
||||
document.body.appendChild(b);
|
||||
b.onclick = function()
|
||||
{
|
||||
dump_file(data, filename);
|
||||
};
|
||||
};
|
||||
|
||||
function dump_file(ab, name)
|
||||
{
|
||||
if(!(ab instanceof Array))
|
||||
{
|
||||
ab = [ab];
|
||||
}
|
||||
|
||||
var blob = new Blob(ab);
|
||||
download(blob, name);
|
||||
}
|
||||
|
||||
function download(file_or_blob, name)
|
||||
{
|
||||
var a = document.createElement("a");
|
||||
a["download"] = name;
|
||||
a.href = window.URL.createObjectURL(file_or_blob);
|
||||
a.dataset["downloadurl"] = ["application/octet-stream", a["download"], a.href].join(":");
|
||||
|
||||
if(document.createEvent)
|
||||
{
|
||||
var ev = document.createEvent("MouseEvent");
|
||||
ev.initMouseEvent("click", true, true, window,
|
||||
0, 0, 0, 0, 0, false, false, false, false, 0, null);
|
||||
a.dispatchEvent(ev);
|
||||
}
|
||||
else
|
||||
{
|
||||
a.click();
|
||||
}
|
||||
|
||||
window.URL.revokeObjectURL(a.href);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} filename
|
||||
* @param {Object} options
|
||||
|
|
|
@ -134,10 +134,6 @@ function V86Starter(options)
|
|||
"_iret32": function() { return cpu.iret32(); },
|
||||
"_handle_irqs": function() { return cpu.handle_irqs(); },
|
||||
|
||||
//XXX: These are temporary for as long as we are testing the JIT
|
||||
"_resolve_modrm16": function(modrm_byte) { return cpu.resolve_modrm16(modrm_byte); },
|
||||
"_resolve_modrm32": function(modrm_byte) { return cpu.resolve_modrm32(modrm_byte); },
|
||||
|
||||
"_io_port_read8": function(addr) { return cpu.io.port_read8(addr); },
|
||||
"_io_port_read16": function(addr) { return cpu.io.port_read16(addr); },
|
||||
"_io_port_read32": function(addr) { return cpu.io.port_read32(addr); },
|
||||
|
|
|
@ -62,12 +62,12 @@ Codegen.prototype.modrm_fn0 = function(fn, modrm_byte)
|
|||
this.wm.funcs["_gen_modrm_fn1"](Codegen.STR_INPUT_OFFSET, fn.length, modrm_byte);
|
||||
};
|
||||
|
||||
Codegen.prototype.jit_resolve_modrm16 = function(modrm_byte)
|
||||
Codegen.prototype.resolve_modrm16 = function(modrm_byte)
|
||||
{
|
||||
this.wm.funcs["_gen_resolve_modrm16"](modrm_byte);
|
||||
};
|
||||
|
||||
Codegen.prototype.jit_resolve_modrm32 = function(modrm_byte)
|
||||
Codegen.prototype.resolve_modrm32 = function(modrm_byte)
|
||||
{
|
||||
this.wm.funcs["_gen_resolve_modrm32"](modrm_byte);
|
||||
};
|
||||
|
|
82
src/cpu.js
82
src/cpu.js
|
@ -377,88 +377,6 @@ CPU.prototype.wasm_patch = function(wm)
|
|||
this.fxrstor = this.wm.funcs['_fxrstor'];
|
||||
};
|
||||
|
||||
//*
|
||||
CPU.prototype.resolve_modrm16 = function(modrm_byte)
|
||||
{
|
||||
dbg_log("resolve_modrm16, modrm_byte=" + h(modrm_byte));
|
||||
|
||||
let buf;
|
||||
const RESULT_LOC = 1600;
|
||||
|
||||
try {
|
||||
const gen = this.codegen;
|
||||
gen.reset();
|
||||
gen.jit_resolve_modrm16(modrm_byte);
|
||||
gen.finish();
|
||||
buf = gen.get_module_code();
|
||||
|
||||
//XXX: move the following logic to a separate function
|
||||
const module = new WebAssembly.Module(buf);
|
||||
const imports = { "e": {
|
||||
"get_seg": v => this.get_seg(v),
|
||||
"get_reg": v => v, //XXX: no get_reg on CPU :|
|
||||
"get_seg_prefix_ds": v => this.get_seg_prefix_ds(v),
|
||||
"get_seg_prefix_ss": v => this.get_seg_prefix_ss(v),
|
||||
"get_seg_prefix": v => this.get_seg_prefix(v),
|
||||
"m": this.wm.mem,
|
||||
} };
|
||||
const o = new WebAssembly.Instance(module, imports);
|
||||
o.exports["f"]();
|
||||
const view = new Int32Array(this.wm.mem.buffer, RESULT_LOC, 4);
|
||||
return view[0];
|
||||
}
|
||||
catch(err)
|
||||
{
|
||||
if (typeof buf !== "undefined")
|
||||
{
|
||||
v86util.add_download_button(buf, "myjit.wasm");
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
//*/
|
||||
|
||||
//*
|
||||
CPU.prototype.resolve_modrm32 = function(modrm_byte)
|
||||
{
|
||||
dbg_log("resolve_modrm32, modrm_byte=" + h(modrm_byte));
|
||||
|
||||
let buf;
|
||||
const RESULT_LOC = 1600;
|
||||
|
||||
try {
|
||||
const gen = this.codegen;
|
||||
gen.reset();
|
||||
gen.jit_resolve_modrm32(modrm_byte);
|
||||
gen.finish();
|
||||
buf = gen.get_module_code();
|
||||
|
||||
//XXX: move the following logic to a separate function
|
||||
const module = new WebAssembly.Module(buf);
|
||||
const imports = { "e": {
|
||||
"get_seg": v => this.get_seg(v),
|
||||
"get_reg": v => v, //XXX: no get_reg on CPU :|
|
||||
"get_seg_prefix_ds": v => this.get_seg_prefix_ds(v),
|
||||
"get_seg_prefix_ss": v => this.get_seg_prefix_ss(v),
|
||||
"get_seg_prefix": v => this.get_seg_prefix(v),
|
||||
"m": this.wm.mem,
|
||||
} };
|
||||
const o = new WebAssembly.Instance(module, imports);
|
||||
o.exports["f"]();
|
||||
const view = new Int32Array(this.wm.mem.buffer, RESULT_LOC, 4);
|
||||
return view[0];
|
||||
}
|
||||
catch(err)
|
||||
{
|
||||
if (typeof buf !== "undefined")
|
||||
{
|
||||
v86util.add_download_button(buf, "myjit.wasm");
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
//*/
|
||||
|
||||
CPU.prototype.get_state = function()
|
||||
{
|
||||
var state = [];
|
||||
|
|
|
@ -31,9 +31,6 @@ static int32_t resolve_sib(bool);
|
|||
MODRM_ENTRY(0x40 | row, seg(((value) + read_imm8s() & 0xFFFF)))\
|
||||
MODRM_ENTRY(0x80 | row, seg(((value) + read_imm16() & 0xFFFF)))\
|
||||
|
||||
extern int32_t resolve_modrm16(int32_t modrm_byte);
|
||||
|
||||
/*
|
||||
static int32_t resolve_modrm16(int32_t modrm_byte)
|
||||
{
|
||||
switch(modrm_byte)
|
||||
|
@ -58,7 +55,6 @@ static int32_t resolve_modrm16(int32_t modrm_byte)
|
|||
|
||||
return 0;
|
||||
}
|
||||
//*/
|
||||
|
||||
#undef MODRM_ENTRY16
|
||||
|
||||
|
@ -67,9 +63,6 @@ static int32_t resolve_modrm16(int32_t modrm_byte)
|
|||
MODRM_ENTRY(0x40 | row, seg((value) + read_imm8s()))\
|
||||
MODRM_ENTRY(0x80 | row, seg((value) + read_imm32s()))\
|
||||
|
||||
extern int32_t resolve_modrm32(int32_t modrm_byte);
|
||||
|
||||
/*
|
||||
static int32_t resolve_modrm32(int32_t modrm_byte)
|
||||
{
|
||||
switch(modrm_byte)
|
||||
|
@ -96,7 +89,6 @@ static int32_t resolve_modrm32(int32_t modrm_byte)
|
|||
|
||||
return 0;
|
||||
}
|
||||
//*/
|
||||
|
||||
#undef MODRM_ENTRY32
|
||||
#undef MODRM_ENTRY
|
||||
|
|
Loading…
Reference in a new issue