Stack optimizations

This commit is contained in:
Jeff Parsons 2015-02-01 12:48:04 -08:00 committed by jeffpar
commit 13c50f7bd0
17 changed files with 3183 additions and 3129 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -3323,7 +3323,7 @@ ChipSet.prototype.getIRRVector = function(iPIC)
var nIRQ = pic.nIRQBase + nIRL;
if (DEBUG && this.messageEnabled(this.messageBitsIRQ(nIRQ))) {
this.printMessage("getIRRVector(): IRQ " + nIRQ + " interrupting @" + str.toHexAddr(this.cpu.getIP(), this.cpu.getCS()) + " stack=" + str.toHexAddr(this.cpu.regESP, this.cpu.getSS()), true);
this.printMessage("getIRRVector(): IRQ " + nIRQ + " interrupting @" + str.toHexAddr(this.cpu.getIP(), this.cpu.getCS()) + " stack=" + str.toHexAddr(this.cpu.getSP(), this.cpu.getSS()), true);
}
if (MAXDEBUG && DEBUGGER) {
this.acInterrupts[nIRQ]++;

View file

@ -1572,7 +1572,7 @@ if (DEBUGGER) {
this.aMessageRegs[asRegs[9]] = str.toHexWord(cpu.regECX);
this.aMessageRegs[asRegs[10]] = str.toHexWord(cpu.regEDX);
this.aMessageRegs[asRegs[11]] = str.toHexWord(cpu.regEBX);
this.aMessageRegs[asRegs[12]] = str.toHexWord(cpu.regESP);
this.aMessageRegs[asRegs[12]] = str.toHexWord(cpu.getSP());
this.aMessageRegs[asRegs[13]] = str.toHexWord(cpu.regEBP);
this.aMessageRegs[asRegs[14]] = str.toHexWord(cpu.regESI);
this.aMessageRegs[asRegs[15]] = str.toHexWord(cpu.regEDI);
@ -3038,7 +3038,7 @@ if (DEBUGGER) {
" BX=" + str.toHexWord(this.cpu.regEBX) +
" CX=" + str.toHexWord(this.cpu.regECX) +
" DX=" + str.toHexWord(this.cpu.regEDX) +
" SP=" + str.toHexWord(this.cpu.regESP) +
" SP=" + str.toHexWord(this.cpu.getSP()) +
" BP=" + str.toHexWord(this.cpu.regEBP) +
" SI=" + str.toHexWord(this.cpu.regESI) +
" DI=" + str.toHexWord(this.cpu.regEDI) + '\n';
@ -3155,7 +3155,7 @@ if (DEBUGGER) {
value = this.cpu.regEBP;
break;
case "SP":
value = this.cpu.regESP;
value = this.cpu.getSP();
break;
case "CS":
value = this.cpu.getCS();
@ -4319,7 +4319,7 @@ if (DEBUGGER) {
this.cpu.regEDX = (w & 0xffff);
break;
case "SP":
this.cpu.regESP = (w & 0xffff);
this.cpu.setSP(w);
break;
case "BP":
this.cpu.regEBP = (w & 0xffff);

View file

@ -93,7 +93,7 @@ var TYPEDARRAYS = (typeof ArrayBuffer !== 'undefined');
* Enables backtracking (disabled in compiled versions). Backtracking is a mechanism that allows us to tag
* every byte of incoming data and follow the flow of that data.
*/
var BACKTRACK = DEBUG;
var BACKTRACK = !COMPILED;
/**
* @define {boolean}

View file

@ -465,7 +465,7 @@ Panel.prototype.updateRegisters = function()
this.drawText("BX", this.cpu.regEBX, 2);
this.drawText("DI", this.cpu.regEDI, 0, 1);
this.drawText("CX", this.cpu.regECX, 2);
this.drawText("SP", this.cpu.regESP, 0, 1);
this.drawText("SP", this.cpu.getSP(), 0, 1);
this.drawText("DX", this.cpu.regEDX, 2);
this.drawText("BP", this.cpu.regEBP, 0, 2);
this.drawText("CS", this.cpu.getCS(), 2);

View file

@ -813,7 +813,7 @@ X86CPU.prototype.resetRegs = function()
this.regEBX = 0;
this.regECX = 0;
this.regEDX = 0;
this.regESP = 0;
this.regESP = 0; // this isn't needed in a 16-bit environment, but we'll need it later
this.regEBP = 0;
this.regESI = 0;
this.regEDI = 0;
@ -825,7 +825,7 @@ X86CPU.prototype.resetRegs = function()
*/
this.regMSW = X86.MSW.SET;
this.addrIDT = 0; this.addrIDTLimit = 0x03FF;
this.nIOPL = 0; // this should be set before the first setPS() call
this.nIOPL = 0; // this should be set before the first setPS() call
/*
* This is set by opHelpFault() and reset (to -1) by resetRegs() and opIRET(); its initial purpose is to
@ -843,6 +843,7 @@ X86CPU.prototype.resetRegs = function()
this.segDS = new X86Seg(this, X86Seg.ID.DATA, "DS");
this.segES = new X86Seg(this, X86Seg.ID.DATA, "ES");
this.segSS = new X86Seg(this, X86Seg.ID.STACK, "SS");
this.setSP(0);
if (I386 && this.model >= X86.MODEL_80386) {
this.segFS = new X86Seg(this, X86Seg.ID.DATA, "FS");
@ -850,7 +851,7 @@ X86CPU.prototype.resetRegs = function()
}
this.segNULL = new X86Seg(this, X86Seg.ID.NULL, "NULL");
this.setCSIP(0, 0xFFFF); // this should be called before the first setPS() call
this.setCSIP(0, 0xFFFF); // this should be called before the first setPS() call
if (BACKTRACK) {
/*
@ -1048,7 +1049,7 @@ X86CPU.prototype.setOpMod = function()
*/
X86CPU.prototype.getChecksum = function()
{
var sum = (this.regEAX + this.regEBX + this.regECX + this.regEDX + this.regESP + this.regEBP + this.regESI + this.regEDI) | 0;
var sum = (this.regEAX + this.regEBX + this.regECX + this.regEDX + this.getSP() + this.regEBP + this.regESI + this.regEDI) | 0;
sum = (sum + this.getIP() + this.getCS() + this.getDS() + this.getSS() + this.getES() + this.getPS()) | 0;
return sum;
};
@ -1239,7 +1240,7 @@ X86CPU.prototype.restoreProtMode = function(a)
X86CPU.prototype.save = function()
{
var state = new State(this);
state.set(0, [this.regEAX, this.regEBX, this.regECX, this.regEDX, this.regESP, this.regEBP, this.regESI, this.regEDI, this.nIOPL]);
state.set(0, [this.regEAX, this.regEBX, this.regECX, this.regEDX, this.getSP(), this.regEBP, this.regESI, this.regEDI, this.nIOPL]);
state.set(1, [this.getIP(), this.segCS.save(), this.segDS.save(), this.segSS.save(), this.segES.save(), this.saveProtMode(), this.getPS()]);
state.set(2, [this.segData.sName, this.segStack.sName, this.opFlags, this.opPrefixes, this.intFlags, this.regEA, this.regEAWrite]);
state.set(3, [0, this.nTotalCycles, this.getSpeed()]);
@ -1264,7 +1265,7 @@ X86CPU.prototype.restore = function(data)
this.regEBX = a[1];
this.regECX = a[2];
this.regEDX = a[3];
this.regESP = a[4];
var regESP = a[4];
this.regEBP = a[5];
this.regESI = a[6];
this.regEDI = a[7];
@ -1276,7 +1277,12 @@ X86CPU.prototype.restore = function(data)
this.segES.restore(a[4]);
this.restoreProtMode(a[5]);
this.setPS(a[6]);
/*
* Since we're not using setCS() and setSS(), it's important to call setIP() and setSP() *after* the segCS
* and segSS loads, so that the CPU's linear IP and SP registers (regLIP and regLSP) will be updated properly.
*/
this.setIP(a[0]);
this.setSP(regESP);
if (I386 && this.model >= X86.MODEL_80386) {
this.segFS.restore(a[7]);
this.segGS.restore(a[8]);
@ -1398,7 +1404,10 @@ X86CPU.prototype.getSS = function()
*/
X86CPU.prototype.setSS = function(sel)
{
this.segSS.load(sel & 0xffff);
var regESP = this.getSP();
this.regLSP = this.segSS.load(sel & 0xffff) + regESP;
this.regLSPLimit = this.segSS.base + this.segSS.limit;
this.regLSPLimitLow = this.segSS.base; // TODO: Set this to the actual low limit
this.opFlags |= X86.OPFLAG.NOINTR;
};
@ -1529,6 +1538,28 @@ X86CPU.prototype.advanceIP = function(inc)
}
};
/**
* getSP()
*
* @this {X86CPU}
* @return {number}
*/
X86CPU.prototype.getSP = function()
{
return this.regLSP - this.segSS.base;
};
/**
* setSP(off)
*
* @this {X86CPU}
* @param {number} off
*/
X86CPU.prototype.setSP = function(off)
{
this.regLSP = this.segSS.base + (off & (I386? this.segSS.addrMask : 0xffff));
};
/**
* getCF()
*
@ -2575,9 +2606,10 @@ X86CPU.prototype.getSIBAddr = function(mod)
*/
X86CPU.prototype.popWord = function()
{
var regESP = this.regESP;
this.regESP = (this.regESP + (I386? this.dataSize : 2)) & (I386? this.addrMask : 0xffff);
return this.getSOWord(this.segSS, regESP);
var w = (I386? this.opMem.getWord(this.regLSP) : this.getShort(this.regLSP));
this.regLSP += (I386? this.dataSize : 2);
if (this.regLSP > this.regLSPLimit) this.setSP(this.regLSP - this.segSS.base);
return w;
};
/**
@ -2589,7 +2621,9 @@ X86CPU.prototype.popWord = function()
X86CPU.prototype.pushWord = function(w)
{
this.assert((w & this.dataMask) == w);
this.setSOWord(this.segSS, (this.regESP = (this.regESP - (I386? this.dataSize : 2)) & (I386? this.addrMask : 0xffff)), w);
this.regLSP -= (I386? this.dataSize : 2);
if (this.regLSP < this.regLSPLimitLow) this.setSP(this.regLSP - this.segSS.base);
if (!I386) this.setShort(this.regLSP, w); else this.opMem.setWord(this.regLSP, w);
};
/**
@ -2757,7 +2791,7 @@ X86CPU.prototype.updateStatus = function(fForce)
this.displayReg("BX", this.regEBX);
this.displayReg("CX", this.regECX);
this.displayReg("DX", this.regEDX);
this.displayReg("SP", this.regESP);
this.displayReg("SP", this.getSP());
this.displayReg("BP", this.regEBP);
this.displayReg("SI", this.regESI);
this.displayReg("DI", this.regEDI);

View file

@ -427,7 +427,7 @@ var X86Help = {
this.regEBX = dst;
break;
case 0x4: // SP
this.regESP = dst;
this.setSP(dst);
break;
case 0x5: // BP
this.regEBP = dst;
@ -508,9 +508,10 @@ var X86Help = {
opHelpRETF: function(n) {
var regEIP = this.popWord();
var regCS = this.popWord();
if (n) this.regESP = (this.regESP + n) & 0xffff;
n <<= (this.dataSize >> 2);
if (n) this.setSP(this.getSP() + n); // TODO: optimize
if (this.setCSIP(regEIP, regCS, false)) {
if (n) this.regESP = (this.regESP + n) & 0xffff;
if (n) this.setSP(this.getSP() + n); // TODO: optimize
/*
* As per Intel documentation: "If any of [the DS or ES] registers refer to segments whose DPL is
* less than the new CPL (excluding conforming code segments), the segment register is loaded with

View file

@ -97,7 +97,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB04(mod) {
this.segData = this.segStack;
return this.regESP + this.regEAX;
return this.getSP() + this.regEAX;
},
/**
* opModSIB05(): scale=00 (1) index=000 (EAX) base=101 (mod? EBP : disp32)
@ -170,7 +170,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB0C(mod) {
this.segData = this.segStack;
return this.regESP + this.regECX;
return this.getSP() + this.regECX;
},
/**
* opModSIB0D(): scale=00 (1) index=001 (ECX) base=101 (mod? EBP : disp32)
@ -243,7 +243,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB14(mod) {
this.segData = this.segStack;
return this.regESP + this.regEDX;
return this.getSP() + this.regEDX;
},
/**
* opModSIB15(): scale=00 (1) index=010 (EDX) base=101 (mod? EBP : disp32)
@ -316,7 +316,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB1C(mod) {
this.segData = this.segStack;
return this.regESP + this.regEBX;
return this.getSP() + this.regEBX;
},
/**
* opModSIB1D(): scale=00 (1) index=011 (EBX) base=101 (mod? EBP : disp32)
@ -389,7 +389,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB24(mod) {
this.segData = this.segStack;
return this.regESP;
return this.getSP();
},
/**
* opModSIB25(): scale=00 (1) index=100 (none) base=101 (mod? EBP : disp32)
@ -462,7 +462,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB2C(mod) {
this.segData = this.segStack;
return this.regESP + this.regEBP;
return this.getSP() + this.regEBP;
},
/**
* opModSIB2D(): scale=00 (1) index=101 (EBP) base=101 (mod? EBP : disp32)
@ -535,7 +535,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB34(mod) {
this.segData = this.segStack;
return this.regESP + this.regESI;
return this.getSP() + this.regESI;
},
/**
* opModSIB35(): scale=00 (1) index=110 (ESI) base=101 (mod? EBP : disp32)
@ -608,7 +608,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB3C(mod) {
this.segData = this.segStack;
return this.regESP + this.regEDI;
return this.getSP() + this.regEDI;
},
/**
* opModSIB3D(): scale=00 (1) index=111 (EDI) base=101 (mod? EBP : disp32)
@ -681,7 +681,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB44(mod) {
this.segData = this.segStack;
return this.regESP + (this.regEAX << 1);
return this.getSP() + (this.regEAX << 1);
},
/**
* opModSIB45(): scale=01 (2) index=000 (EAX) base=101 (mod? EBP : disp32)
@ -754,7 +754,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB4C(mod) {
this.segData = this.segStack;
return this.regESP + (this.regECX << 1);
return this.getSP() + (this.regECX << 1);
},
/**
* opModSIB4D(): scale=01 (2) index=001 (ECX) base=101 (mod? EBP : disp32)
@ -827,7 +827,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB54(mod) {
this.segData = this.segStack;
return this.regESP + (this.regEDX << 1);
return this.getSP() + (this.regEDX << 1);
},
/**
* opModSIB55(): scale=01 (2) index=010 (EDX) base=101 (mod? EBP : disp32)
@ -900,7 +900,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB5C(mod) {
this.segData = this.segStack;
return this.regESP + (this.regEBX << 1);
return this.getSP() + (this.regEBX << 1);
},
/**
* opModSIB5D(): scale=01 (2) index=011 (EBX) base=101 (mod? EBP : disp32)
@ -973,7 +973,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB64(mod) {
this.segData = this.segStack;
return this.regESP;
return this.getSP();
},
/**
* opModSIB65(): scale=01 (2) index=100 (none) base=101 (mod? EBP : disp32)
@ -1046,7 +1046,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB6C(mod) {
this.segData = this.segStack;
return this.regESP + (this.regEBP << 1);
return this.getSP() + (this.regEBP << 1);
},
/**
* opModSIB6D(): scale=01 (2) index=101 (EBP) base=101 (mod? EBP : disp32)
@ -1119,7 +1119,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB74(mod) {
this.segData = this.segStack;
return this.regESP + (this.regESI << 1);
return this.getSP() + (this.regESI << 1);
},
/**
* opModSIB75(): scale=01 (2) index=110 (ESI) base=101 (mod? EBP : disp32)
@ -1192,7 +1192,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB7C(mod) {
this.segData = this.segStack;
return this.regESP + (this.regEDI << 1);
return this.getSP() + (this.regEDI << 1);
},
/**
* opModSIB7D(): scale=01 (2) index=111 (EDI) base=101 (mod? EBP : disp32)
@ -1265,7 +1265,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB84(mod) {
this.segData = this.segStack;
return this.regESP + (this.regEAX << 2);
return this.getSP() + (this.regEAX << 2);
},
/**
* opModSIB85(): scale=10 (4) index=000 (EAX) base=101 (mod? EBP : disp32)
@ -1338,7 +1338,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB8C(mod) {
this.segData = this.segStack;
return this.regESP + (this.regECX << 2);
return this.getSP() + (this.regECX << 2);
},
/**
* opModSIB8D(): scale=10 (4) index=001 (ECX) base=101 (mod? EBP : disp32)
@ -1411,7 +1411,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB94(mod) {
this.segData = this.segStack;
return this.regESP + (this.regEDX << 2);
return this.getSP() + (this.regEDX << 2);
},
/**
* opModSIB95(): scale=10 (4) index=010 (EDX) base=101 (mod? EBP : disp32)
@ -1484,7 +1484,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIB9C(mod) {
this.segData = this.segStack;
return this.regESP + (this.regEBX << 2);
return this.getSP() + (this.regEBX << 2);
},
/**
* opModSIB9D(): scale=10 (4) index=011 (EBX) base=101 (mod? EBP : disp32)
@ -1557,7 +1557,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIBA4(mod) {
this.segData = this.segStack;
return this.regESP;
return this.getSP();
},
/**
* opModSIBA5(): scale=10 (4) index=100 (none) base=101 (mod? EBP : disp32)
@ -1630,7 +1630,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIBAC(mod) {
this.segData = this.segStack;
return this.regESP + (this.regEBP << 2);
return this.getSP() + (this.regEBP << 2);
},
/**
* opModSIBAD(): scale=10 (4) index=101 (EBP) base=101 (mod? EBP : disp32)
@ -1703,7 +1703,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIBB4(mod) {
this.segData = this.segStack;
return this.regESP + (this.regESI << 2);
return this.getSP() + (this.regESI << 2);
},
/**
* opModSIBB5(): scale=10 (4) index=110 (ESI) base=101 (mod? EBP : disp32)
@ -1776,7 +1776,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIBBC(mod) {
this.segData = this.segStack;
return this.regESP + (this.regEDI << 2);
return this.getSP() + (this.regEDI << 2);
},
/**
* opModSIBBD(): scale=10 (4) index=111 (EDI) base=101 (mod? EBP : disp32)
@ -1849,7 +1849,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIBC4(mod) {
this.segData = this.segStack;
return this.regESP + (this.regEAX << 3);
return this.getSP() + (this.regEAX << 3);
},
/**
* opModSIBC5(): scale=11 (8) index=000 (EAX) base=101 (mod? EBP : disp32)
@ -1922,7 +1922,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIBCC(mod) {
this.segData = this.segStack;
return this.regESP + (this.regECX << 3);
return this.getSP() + (this.regECX << 3);
},
/**
* opModSIBCD(): scale=11 (8) index=001 (ECX) base=101 (mod? EBP : disp32)
@ -1995,7 +1995,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIBD4(mod) {
this.segData = this.segStack;
return this.regESP + (this.regEDX << 3);
return this.getSP() + (this.regEDX << 3);
},
/**
* opModSIBD5(): scale=11 (8) index=010 (EDX) base=101 (mod? EBP : disp32)
@ -2068,7 +2068,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIBDC(mod) {
this.segData = this.segStack;
return this.regESP + (this.regEBX << 3);
return this.getSP() + (this.regEBX << 3);
},
/**
* opModSIBDD(): scale=11 (8) index=011 (EBX) base=101 (mod? EBP : disp32)
@ -2141,7 +2141,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIBE4(mod) {
this.segData = this.segStack;
return this.regESP;
return this.getSP();
},
/**
* opModSIBE5(): scale=11 (8) index=100 (none) base=101 (mod? EBP : disp32)
@ -2214,7 +2214,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIBEC(mod) {
this.segData = this.segStack;
return this.regESP + (this.regEBP << 3);
return this.getSP() + (this.regEBP << 3);
},
/**
* opModSIBED(): scale=11 (8) index=101 (EBP) base=101 (mod? EBP : disp32)
@ -2287,7 +2287,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIBF4(mod) {
this.segData = this.segStack;
return this.regESP + (this.regESI << 3);
return this.getSP() + (this.regESI << 3);
},
/**
* opModSIBF5(): scale=11 (8) index=110 (ESI) base=101 (mod? EBP : disp32)
@ -2360,7 +2360,7 @@ X86ModSIB.aOpModSIB = [
*/
function opModSIBFC(mod) {
this.segData = this.segStack;
return this.regESP + (this.regEDI << 3);
return this.getSP() + (this.regEDI << 3);
},
/**
* opModSIBFD(): scale=11 (8) index=111 (EDI) base=101 (mod? EBP : disp32)

View file

@ -462,7 +462,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWord20(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordData(this.regEBX + this.regESI));
this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX + this.regESI)));
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndex;
},
/**
@ -472,7 +472,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWord21(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordData(this.regEBX + this.regEDI));
this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX + this.regEDI)));
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexExtra;
},
/**
@ -482,7 +482,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWord22(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordStack(this.regEBP + this.regESI));
this.setSP(fn.call(this, this.getSP(), this.getEAWordStack(this.regEBP + this.regESI)));
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexExtra;
},
/**
@ -492,7 +492,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWord23(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordStack(this.regEBP + this.regEDI));
this.setSP(fn.call(this, this.getSP(), this.getEAWordStack(this.regEBP + this.regEDI)));
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndex;
},
/**
@ -502,7 +502,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWord24(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordData(this.regESI));
this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regESI)));
this.nStepCycles -= this.CYCLES.nEACyclesBase;
},
/**
@ -512,7 +512,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWord25(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordData(this.regEDI));
this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEDI)));
this.nStepCycles -= this.CYCLES.nEACyclesBase;
},
/**
@ -522,7 +522,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWord26(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordData(this.getIPWord()));
this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.getIPWord())));
this.nStepCycles -= this.CYCLES.nEACyclesDisp;
},
/**
@ -532,7 +532,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWord27(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordData(this.regEBX));
this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX)));
this.nStepCycles -= this.CYCLES.nEACyclesBase;
},
/**
@ -1270,7 +1270,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWord60(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp())));
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp;
},
/**
@ -1280,7 +1280,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWord61(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp())));
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra;
},
/**
@ -1290,7 +1290,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWord62(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
this.setSP(fn.call(this, this.getSP(), this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp())));
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra;
},
/**
@ -1300,7 +1300,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWord63(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
this.setSP(fn.call(this, this.getSP(), this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp())));
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp;
},
/**
@ -1310,7 +1310,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWord64(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordData(this.regESI + this.getIPDisp()));
this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regESI + this.getIPDisp())));
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -1320,7 +1320,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWord65(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordData(this.regEDI + this.getIPDisp()));
this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEDI + this.getIPDisp())));
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -1330,7 +1330,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWord66(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordStack(this.regEBP + this.getIPDisp()));
this.setSP(fn.call(this, this.getSP(), this.getEAWordStack(this.regEBP + this.getIPDisp())));
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -1340,7 +1340,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWord67(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordData(this.regEBX + this.getIPDisp()));
this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX + this.getIPDisp())));
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2078,7 +2078,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordA0(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordData(this.regEBX + this.regESI + this.getIPWord()));
this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX + this.regESI + this.getIPWord())));
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp;
},
/**
@ -2088,7 +2088,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordA1(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordData(this.regEBX + this.regEDI + this.getIPWord()));
this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX + this.regEDI + this.getIPWord())));
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra;
},
/**
@ -2098,7 +2098,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordA2(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordStack(this.regEBP + this.regESI + this.getIPWord()));
this.setSP(fn.call(this, this.getSP(), this.getEAWordStack(this.regEBP + this.regESI + this.getIPWord())));
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra;
},
/**
@ -2108,7 +2108,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordA3(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPWord()));
this.setSP(fn.call(this, this.getSP(), this.getEAWordStack(this.regEBP + this.regEDI + this.getIPWord())));
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp;
},
/**
@ -2118,7 +2118,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordA4(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordData(this.regESI + this.getIPWord()));
this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regESI + this.getIPWord())));
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2128,7 +2128,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordA5(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordData(this.regEDI + this.getIPWord()));
this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEDI + this.getIPWord())));
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2138,7 +2138,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordA6(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordStack(this.regEBP + this.getIPWord()));
this.setSP(fn.call(this, this.getSP(), this.getEAWordStack(this.regEBP + this.getIPWord())));
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2148,7 +2148,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordA7(fn) {
this.regESP = fn.call(this, this.regESP, this.getEAWordData(this.regEBX + this.getIPWord()));
this.setSP(fn.call(this, this.getSP(), this.getEAWordData(this.regEBX + this.getIPWord())));
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2515,7 +2515,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordC4(fn) {
this.regEAX = fn.call(this, this.regEAX, this.regESP);
this.regEAX = fn.call(this, this.regEAX, this.getSP());
if (BACKTRACK) {
this.backTrack.btiAL = X86.BACKTRACK.SP_LO; this.backTrack.btiAH = X86.BACKTRACK.SP_HI;
}
@ -2608,7 +2608,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordCC(fn) {
this.regECX = fn.call(this, this.regECX, this.regESP);
this.regECX = fn.call(this, this.regECX, this.getSP());
if (BACKTRACK) {
this.backTrack.btiCL = X86.BACKTRACK.SP_LO; this.backTrack.btiCH = X86.BACKTRACK.SP_HI;
}
@ -2701,7 +2701,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordD4(fn) {
this.regEDX = fn.call(this, this.regEDX, this.regESP);
this.regEDX = fn.call(this, this.regEDX, this.getSP());
if (BACKTRACK) {
this.backTrack.btiDL = X86.BACKTRACK.SP_LO; this.backTrack.btiDH = X86.BACKTRACK.SP_HI;
}
@ -2794,7 +2794,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordDC(fn) {
this.regEBX = fn.call(this, this.regEBX, this.regESP);
this.regEBX = fn.call(this, this.regEBX, this.getSP());
if (BACKTRACK) {
this.backTrack.btiBL = X86.BACKTRACK.SP_LO; this.backTrack.btiBH = X86.BACKTRACK.SP_HI;
}
@ -2842,7 +2842,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordE0(fn) {
this.regESP = fn.call(this, this.regESP, this.regEAX);
this.setSP(fn.call(this, this.getSP(), this.regEAX));
},
/**
* opModRegWordE1(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=001 (CX)
@ -2851,7 +2851,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordE1(fn) {
this.regESP = fn.call(this, this.regESP, this.regECX);
this.setSP(fn.call(this, this.getSP(), this.regECX));
},
/**
* opModRegWordE2(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=010 (DX)
@ -2860,7 +2860,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordE2(fn) {
this.regESP = fn.call(this, this.regESP, this.regEDX);
this.setSP(fn.call(this, this.getSP(), this.regEDX));
},
/**
* opModRegWordE3(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=011 (BX)
@ -2869,7 +2869,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordE3(fn) {
this.regESP = fn.call(this, this.regESP, this.regEBX);
this.setSP(fn.call(this, this.getSP(), this.regEBX));
},
/**
* opModRegWordE4(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=100 (SP)
@ -2878,7 +2878,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordE4(fn) {
this.regESP = fn.call(this, this.regESP, this.regESP);
this.setSP(fn.call(this, this.getSP(), this.getSP()));
},
/**
* opModRegWordE5(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=101 (BP)
@ -2887,7 +2887,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordE5(fn) {
this.regESP = fn.call(this, this.regESP, this.regEBP);
this.setSP(fn.call(this, this.getSP(), this.regEBP));
},
/**
* opModRegWordE6(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=110 (SI)
@ -2896,7 +2896,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordE6(fn) {
this.regESP = fn.call(this, this.regESP, this.regESI);
this.setSP(fn.call(this, this.getSP(), this.regESI));
},
/**
* opModRegWordE7(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=111 (DI)
@ -2905,7 +2905,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordE7(fn) {
this.regESP = fn.call(this, this.regESP, this.regEDI);
this.setSP(fn.call(this, this.getSP(), this.regEDI));
},
/**
* opModRegWordE8(fn): mod=11 (src:reg) reg=101 (dst:BP) r/m=000 (AX)
@ -2962,7 +2962,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordEC(fn) {
this.regEBP = fn.call(this, this.regEBP, this.regESP);
this.regEBP = fn.call(this, this.regEBP, this.getSP());
if (BACKTRACK) {
this.backTrack.btiBPLo = X86.BACKTRACK.SP_LO; this.backTrack.btiBPHi = X86.BACKTRACK.SP_HI;
}
@ -3055,7 +3055,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordF4(fn) {
this.regESI = fn.call(this, this.regESI, this.regESP);
this.regESI = fn.call(this, this.regESI, this.getSP());
if (BACKTRACK) {
this.backTrack.btiSILo = X86.BACKTRACK.SP_LO; this.backTrack.btiSIHi = X86.BACKTRACK.SP_HI;
}
@ -3148,7 +3148,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opModRegWordFC(fn) {
this.regEDI = fn.call(this, this.regEDI, this.regESP);
this.regEDI = fn.call(this, this.regEDI, this.getSP());
if (BACKTRACK) {
this.backTrack.btiDILo = X86.BACKTRACK.SP_LO; this.backTrack.btiDIHi = X86.BACKTRACK.SP_HI;
}
@ -3644,7 +3644,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWord20(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.regESP);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3658,7 +3658,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWord21(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.regESP);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3672,7 +3672,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWord22(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.regESP);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3686,7 +3686,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWord23(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.regESP);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3700,7 +3700,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWord24(fn) {
var w = fn.call(this, this.modEAWordData(this.regESI), this.regESP);
var w = fn.call(this, this.modEAWordData(this.regESI), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3714,7 +3714,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWord25(fn) {
var w = fn.call(this, this.modEAWordData(this.regEDI), this.regESP);
var w = fn.call(this, this.modEAWordData(this.regEDI), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3728,7 +3728,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWord26(fn) {
var w = fn.call(this, this.modEAWordData(this.getIPWord()), this.regESP);
var w = fn.call(this, this.modEAWordData(this.getIPWord()), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3742,7 +3742,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWord27(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX), this.regESP);
var w = fn.call(this, this.modEAWordData(this.regEBX), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4540,7 +4540,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWord60(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.regESP);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4554,7 +4554,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWord61(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.regESP);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4568,7 +4568,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWord62(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.regESP);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4582,7 +4582,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWord63(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regESP);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4596,7 +4596,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWord64(fn) {
var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regESP);
var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4610,7 +4610,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWord65(fn) {
var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regESP);
var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4624,7 +4624,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWord66(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regESP);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4638,7 +4638,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWord67(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regESP);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5436,7 +5436,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWordA0(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPWord()), this.regESP);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPWord()), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5450,7 +5450,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWordA1(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPWord()), this.regESP);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPWord()), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5464,7 +5464,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWordA2(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPWord()), this.regESP);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPWord()), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5478,7 +5478,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWordA3(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPWord()), this.regESP);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPWord()), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5492,7 +5492,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWordA4(fn) {
var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPWord()), this.regESP);
var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPWord()), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5506,7 +5506,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWordA5(fn) {
var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPWord()), this.regESP);
var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPWord()), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5520,7 +5520,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWordA6(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPWord()), this.regESP);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPWord()), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5534,7 +5534,7 @@ X86ModW.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opModMemWordA7(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPWord()), this.regESP);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPWord()), this.getSP());
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -8260,7 +8260,7 @@ X86ModW.aOpModGrp = [
* @param {function()} fnSrc
*/
function opModGrpWordC4(afnGrp, fnSrc) {
this.regESP = afnGrp[0].call(this, this.regESP, fnSrc.call(this));
this.setSP(afnGrp[0].call(this, this.getSP(), fnSrc.call(this)));
},
/**
* opModGrpWordC5(afnGrp, fnSrc): mod=11 (dst:reg) reg=000 (afnGrp[0]) r/m=101 (BP)
@ -8361,7 +8361,7 @@ X86ModW.aOpModGrp = [
* @param {function()} fnSrc
*/
function opModGrpWordCC(afnGrp, fnSrc) {
this.regESP = afnGrp[1].call(this, this.regESP, fnSrc.call(this));
this.setSP(afnGrp[1].call(this, this.getSP(), fnSrc.call(this)));
},
/**
* opModGrpWordCD(afnGrp, fnSrc): mod=11 (dst:reg) reg=001 (afnGrp[1]) r/m=101 (BP)
@ -8462,7 +8462,7 @@ X86ModW.aOpModGrp = [
* @param {function()} fnSrc
*/
function opModGrpWordD4(afnGrp, fnSrc) {
this.regESP = afnGrp[2].call(this, this.regESP, fnSrc.call(this));
this.setSP(afnGrp[2].call(this, this.getSP(), fnSrc.call(this)));
},
/**
* opModGrpWordD5(afnGrp, fnSrc): mod=11 (dst:reg) reg=010 (afnGrp[2]) r/m=101 (BP)
@ -8563,7 +8563,7 @@ X86ModW.aOpModGrp = [
* @param {function()} fnSrc
*/
function opModGrpWordDC(afnGrp, fnSrc) {
this.regESP = afnGrp[3].call(this, this.regESP, fnSrc.call(this));
this.setSP(afnGrp[3].call(this, this.getSP(), fnSrc.call(this)));
},
/**
* opModGrpWordDD(afnGrp, fnSrc): mod=11 (dst:reg) reg=011 (afnGrp[3]) r/m=101 (BP)
@ -8664,7 +8664,7 @@ X86ModW.aOpModGrp = [
* @param {function()} fnSrc
*/
function opModGrpWordE4(afnGrp, fnSrc) {
this.regESP = afnGrp[4].call(this, this.regESP, fnSrc.call(this));
this.setSP(afnGrp[4].call(this, this.getSP(), fnSrc.call(this)));
},
/**
* opModGrpWordE5(afnGrp, fnSrc): mod=11 (dst:reg) reg=100 (afnGrp[4]) r/m=101 (BP)
@ -8765,7 +8765,7 @@ X86ModW.aOpModGrp = [
* @param {function()} fnSrc
*/
function opModGrpWordEC(afnGrp, fnSrc) {
this.regESP = afnGrp[5].call(this, this.regESP, fnSrc.call(this));
this.setSP(afnGrp[5].call(this, this.getSP(), fnSrc.call(this)));
},
/**
* opModGrpWordED(afnGrp, fnSrc): mod=11 (dst:reg) reg=101 (afnGrp[5]) r/m=101 (BP)
@ -8866,7 +8866,7 @@ X86ModW.aOpModGrp = [
* @param {function()} fnSrc
*/
function opModGrpWordF4(afnGrp, fnSrc) {
this.regESP = afnGrp[6].call(this, this.regESP, fnSrc.call(this));
this.setSP(afnGrp[6].call(this, this.getSP(), fnSrc.call(this)));
},
/**
* opModGrpWordF5(afnGrp, fnSrc): mod=11 (dst:reg) reg=110 (afnGrp[6]) r/m=101 (BP)
@ -8967,7 +8967,7 @@ X86ModW.aOpModGrp = [
* @param {function()} fnSrc
*/
function opModGrpWordFC(afnGrp, fnSrc) {
this.regESP = afnGrp[7].call(this, this.regESP, fnSrc.call(this));
this.setSP(afnGrp[7].call(this, this.getSP(), fnSrc.call(this)));
},
/**
* opModGrpWordFD(afnGrp, fnSrc): mod=11 (dst:reg) reg=111 (afnGrp[7]) r/m=101 (BP)

View file

@ -494,8 +494,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWord20(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.regESI));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regESI));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndex;
},
/**
@ -505,8 +505,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWord21(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexExtra;
},
/**
@ -516,8 +516,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWord22(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexExtra;
},
/**
@ -527,8 +527,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWord23(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndex;
},
/**
@ -538,8 +538,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWord24(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regESI));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase;
},
/**
@ -549,8 +549,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWord25(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDI));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase;
},
/**
@ -560,8 +560,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWord26(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesDisp;
},
/**
@ -571,8 +571,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWord27(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase;
},
/**
@ -1366,8 +1366,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWord60(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp;
},
/**
@ -1377,8 +1377,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWord61(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra;
},
/**
@ -1388,8 +1388,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWord62(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra;
},
/**
@ -1399,8 +1399,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWord63(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp;
},
/**
@ -1410,8 +1410,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWord64(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -1421,8 +1421,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWord65(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -1432,8 +1432,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWord66(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -1443,8 +1443,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWord67(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2238,8 +2238,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordA0(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp;
},
/**
@ -2249,8 +2249,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordA1(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra;
},
/**
@ -2260,8 +2260,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordA2(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra;
},
/**
@ -2271,8 +2271,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordA3(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp;
},
/**
@ -2282,8 +2282,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordA4(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regESI + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI + this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2293,8 +2293,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordA5(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDI + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI + this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2304,8 +2304,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordA6(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2315,8 +2315,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordA7(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2711,7 +2711,7 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordC4(fn) {
var w = fn.call(this, this.regEAX & this.dataMask, this.regESP & this.dataMask);
var w = fn.call(this, this.regEAX & this.dataMask, this.getSP() & this.dataMask);
this.regEAX = (this.regEAX & ~this.dataMask) | w;
if (BACKTRACK) {
this.backTrack.btiAL = X86.BACKTRACK.SP_LO; this.backTrack.btiAH = X86.BACKTRACK.SP_HI;
@ -2812,7 +2812,7 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordCC(fn) {
var w = fn.call(this, this.regECX & this.dataMask, this.regESP & this.dataMask);
var w = fn.call(this, this.regECX & this.dataMask, this.getSP() & this.dataMask);
this.regECX = (this.regECX & ~this.dataMask) | w;
if (BACKTRACK) {
this.backTrack.btiCL = X86.BACKTRACK.SP_LO; this.backTrack.btiCH = X86.BACKTRACK.SP_HI;
@ -2913,7 +2913,7 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordD4(fn) {
var w = fn.call(this, this.regEDX & this.dataMask, this.regESP & this.dataMask);
var w = fn.call(this, this.regEDX & this.dataMask, this.getSP() & this.dataMask);
this.regEDX = (this.regEDX & ~this.dataMask) | w;
if (BACKTRACK) {
this.backTrack.btiDL = X86.BACKTRACK.SP_LO; this.backTrack.btiDH = X86.BACKTRACK.SP_HI;
@ -3014,7 +3014,7 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordDC(fn) {
var w = fn.call(this, this.regEBX & this.dataMask, this.regESP & this.dataMask);
var w = fn.call(this, this.regEBX & this.dataMask, this.getSP() & this.dataMask);
this.regEBX = (this.regEBX & ~this.dataMask) | w;
if (BACKTRACK) {
this.backTrack.btiBL = X86.BACKTRACK.SP_LO; this.backTrack.btiBH = X86.BACKTRACK.SP_HI;
@ -3066,8 +3066,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordE0(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEAX & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.regEAX & this.dataMask);
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod16RegWordE1(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=001 (CX)
@ -3076,8 +3076,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordE1(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regECX & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.regECX & this.dataMask);
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod16RegWordE2(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=010 (DX)
@ -3086,8 +3086,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordE2(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEDX & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.regEDX & this.dataMask);
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod16RegWordE3(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=011 (BX)
@ -3096,8 +3096,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordE3(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEBX & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.regEBX & this.dataMask);
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod16RegWordE4(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=100 (SP)
@ -3106,8 +3106,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordE4(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regESP & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getSP() & this.dataMask);
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod16RegWordE5(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=101 (BP)
@ -3116,8 +3116,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordE5(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEBP & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.regEBP & this.dataMask);
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod16RegWordE6(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=110 (SI)
@ -3126,8 +3126,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordE6(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regESI & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.regESI & this.dataMask);
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod16RegWordE7(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=111 (DI)
@ -3136,8 +3136,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordE7(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEDI & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.regEDI & this.dataMask);
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod16RegWordE8(fn): mod=11 (src:reg) reg=101 (dst:BP) r/m=000 (AX)
@ -3198,7 +3198,7 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordEC(fn) {
var w = fn.call(this, this.regEBP & this.dataMask, this.regESP & this.dataMask);
var w = fn.call(this, this.regEBP & this.dataMask, this.getSP() & this.dataMask);
this.regEBP = (this.regEBP & ~this.dataMask) | w;
if (BACKTRACK) {
this.backTrack.btiBPLo = X86.BACKTRACK.SP_LO; this.backTrack.btiBPHi = X86.BACKTRACK.SP_HI;
@ -3299,7 +3299,7 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordF4(fn) {
var w = fn.call(this, this.regESI & this.dataMask, this.regESP & this.dataMask);
var w = fn.call(this, this.regESI & this.dataMask, this.getSP() & this.dataMask);
this.regESI = (this.regESI & ~this.dataMask) | w;
if (BACKTRACK) {
this.backTrack.btiSILo = X86.BACKTRACK.SP_LO; this.backTrack.btiSIHi = X86.BACKTRACK.SP_HI;
@ -3400,7 +3400,7 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16RegWordFC(fn) {
var w = fn.call(this, this.regEDI & this.dataMask, this.regESP & this.dataMask);
var w = fn.call(this, this.regEDI & this.dataMask, this.getSP() & this.dataMask);
this.regEDI = (this.regEDI & ~this.dataMask) | w;
if (BACKTRACK) {
this.backTrack.btiDILo = X86.BACKTRACK.SP_LO; this.backTrack.btiDIHi = X86.BACKTRACK.SP_HI;
@ -3900,7 +3900,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWord20(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3914,7 +3914,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWord21(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3928,7 +3928,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWord22(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3942,7 +3942,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWord23(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3956,7 +3956,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWord24(fn) {
var w = fn.call(this, this.modEAWordData(this.regESI), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regESI), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3970,7 +3970,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWord25(fn) {
var w = fn.call(this, this.modEAWordData(this.regEDI), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEDI), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3984,7 +3984,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWord26(fn) {
var w = fn.call(this, this.modEAWordData(this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3998,7 +3998,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWord27(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEBX), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4796,7 +4796,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWord60(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPDisp()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4810,7 +4810,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWord61(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPDisp()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4824,7 +4824,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWord62(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPDisp()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4838,7 +4838,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWord63(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4852,7 +4852,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWord64(fn) {
var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4866,7 +4866,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWord65(fn) {
var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4880,7 +4880,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWord66(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4894,7 +4894,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWord67(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5692,7 +5692,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWordA0(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regESI + this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5706,7 +5706,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWordA1(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.regEDI + this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5720,7 +5720,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWordA2(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regESI + this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5734,7 +5734,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWordA3(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.regEDI + this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5748,7 +5748,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWordA4(fn) {
var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5762,7 +5762,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWordA5(fn) {
var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5776,7 +5776,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWordA6(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5790,7 +5790,7 @@ X86ModW16.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod16MemWordA7(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -8520,8 +8520,8 @@ X86ModW16.aOpModGrp = [
* @param {function()} fnSrc
*/
function opMod16GrpWordC4(afnGrp, fnSrc) {
var w = afnGrp[0].call(this, this.regESP & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = afnGrp[0].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod16GrpWordC5(afnGrp, fnSrc): mod=11 (dst:reg) reg=000 (afnGrp[0]) r/m=101 (BP)
@ -8629,8 +8629,8 @@ X86ModW16.aOpModGrp = [
* @param {function()} fnSrc
*/
function opMod16GrpWordCC(afnGrp, fnSrc) {
var w = afnGrp[1].call(this, this.regESP & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = afnGrp[1].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod16GrpWordCD(afnGrp, fnSrc): mod=11 (dst:reg) reg=001 (afnGrp[1]) r/m=101 (BP)
@ -8738,8 +8738,8 @@ X86ModW16.aOpModGrp = [
* @param {function()} fnSrc
*/
function opMod16GrpWordD4(afnGrp, fnSrc) {
var w = afnGrp[2].call(this, this.regESP & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = afnGrp[2].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod16GrpWordD5(afnGrp, fnSrc): mod=11 (dst:reg) reg=010 (afnGrp[2]) r/m=101 (BP)
@ -8847,8 +8847,8 @@ X86ModW16.aOpModGrp = [
* @param {function()} fnSrc
*/
function opMod16GrpWordDC(afnGrp, fnSrc) {
var w = afnGrp[3].call(this, this.regESP & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = afnGrp[3].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod16GrpWordDD(afnGrp, fnSrc): mod=11 (dst:reg) reg=011 (afnGrp[3]) r/m=101 (BP)
@ -8956,8 +8956,8 @@ X86ModW16.aOpModGrp = [
* @param {function()} fnSrc
*/
function opMod16GrpWordE4(afnGrp, fnSrc) {
var w = afnGrp[4].call(this, this.regESP & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = afnGrp[4].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod16GrpWordE5(afnGrp, fnSrc): mod=11 (dst:reg) reg=100 (afnGrp[4]) r/m=101 (BP)
@ -9065,8 +9065,8 @@ X86ModW16.aOpModGrp = [
* @param {function()} fnSrc
*/
function opMod16GrpWordEC(afnGrp, fnSrc) {
var w = afnGrp[5].call(this, this.regESP & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = afnGrp[5].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod16GrpWordED(afnGrp, fnSrc): mod=11 (dst:reg) reg=101 (afnGrp[5]) r/m=101 (BP)
@ -9174,8 +9174,8 @@ X86ModW16.aOpModGrp = [
* @param {function()} fnSrc
*/
function opMod16GrpWordF4(afnGrp, fnSrc) {
var w = afnGrp[6].call(this, this.regESP & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = afnGrp[6].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod16GrpWordF5(afnGrp, fnSrc): mod=11 (dst:reg) reg=110 (afnGrp[6]) r/m=101 (BP)
@ -9283,8 +9283,8 @@ X86ModW16.aOpModGrp = [
* @param {function()} fnSrc
*/
function opMod16GrpWordFC(afnGrp, fnSrc) {
var w = afnGrp[7].call(this, this.regESP & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = afnGrp[7].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod16GrpWordFD(afnGrp, fnSrc): mod=11 (dst:reg) reg=111 (afnGrp[7]) r/m=101 (BP)

View file

@ -494,8 +494,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWord20(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEAX));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEAX));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase;
},
/**
@ -505,8 +505,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWord21(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regECX));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regECX));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase;
},
/**
@ -516,8 +516,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWord22(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDX));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDX));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase;
},
/**
@ -527,8 +527,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWord23(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase;
},
/**
@ -538,8 +538,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWord24(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.getSIBAddr(0)));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.getSIBAddr(0)));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase;
},
/**
@ -549,8 +549,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWord25(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesDisp;
},
/**
@ -560,8 +560,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWord26(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regESI));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase;
},
/**
@ -571,8 +571,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWord27(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDI));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase;
},
/**
@ -1366,8 +1366,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWord60(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEAX + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEAX + this.getIPDisp()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -1377,8 +1377,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWord61(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regECX + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regECX + this.getIPDisp()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -1388,8 +1388,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWord62(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDX + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDX + this.getIPDisp()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -1399,8 +1399,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWord63(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -1410,8 +1410,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWord64(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.getSIBAddr(1) + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.getSIBAddr(1) + this.getIPDisp()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -1421,8 +1421,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWord65(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -1432,8 +1432,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWord66(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -1443,8 +1443,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWord67(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2238,8 +2238,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordA0(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEAX + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEAX + this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2249,8 +2249,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordA1(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regECX + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regECX + this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2260,8 +2260,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordA2(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDX + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDX + this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2271,8 +2271,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordA3(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2282,8 +2282,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordA4(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.getSIBAddr(2) + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.getSIBAddr(2) + this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2293,8 +2293,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordA5(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2304,8 +2304,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordA6(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regESI + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI + this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2315,8 +2315,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordA7(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDI + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI + this.getIPWord()));
this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
},
/**
@ -2711,7 +2711,7 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordC4(fn) {
var w = fn.call(this, this.regEAX & this.dataMask, this.regESP & this.dataMask);
var w = fn.call(this, this.regEAX & this.dataMask, this.getSP() & this.dataMask);
this.regEAX = (this.regEAX & ~this.dataMask) | w;
if (BACKTRACK) {
this.backTrack.btiAL = X86.BACKTRACK.SP_LO; this.backTrack.btiAH = X86.BACKTRACK.SP_HI;
@ -2812,7 +2812,7 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordCC(fn) {
var w = fn.call(this, this.regECX & this.dataMask, this.regESP & this.dataMask);
var w = fn.call(this, this.regECX & this.dataMask, this.getSP() & this.dataMask);
this.regECX = (this.regECX & ~this.dataMask) | w;
if (BACKTRACK) {
this.backTrack.btiCL = X86.BACKTRACK.SP_LO; this.backTrack.btiCH = X86.BACKTRACK.SP_HI;
@ -2913,7 +2913,7 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordD4(fn) {
var w = fn.call(this, this.regEDX & this.dataMask, this.regESP & this.dataMask);
var w = fn.call(this, this.regEDX & this.dataMask, this.getSP() & this.dataMask);
this.regEDX = (this.regEDX & ~this.dataMask) | w;
if (BACKTRACK) {
this.backTrack.btiDL = X86.BACKTRACK.SP_LO; this.backTrack.btiDH = X86.BACKTRACK.SP_HI;
@ -3014,7 +3014,7 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordDC(fn) {
var w = fn.call(this, this.regEBX & this.dataMask, this.regESP & this.dataMask);
var w = fn.call(this, this.regEBX & this.dataMask, this.getSP() & this.dataMask);
this.regEBX = (this.regEBX & ~this.dataMask) | w;
if (BACKTRACK) {
this.backTrack.btiBL = X86.BACKTRACK.SP_LO; this.backTrack.btiBH = X86.BACKTRACK.SP_HI;
@ -3066,8 +3066,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordE0(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEAX & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.regEAX & this.dataMask);
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod32RegWordE1(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=001 (ECX)
@ -3076,8 +3076,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordE1(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regECX & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.regECX & this.dataMask);
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod32RegWordE2(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=010 (EDX)
@ -3086,8 +3086,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordE2(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEDX & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.regEDX & this.dataMask);
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod32RegWordE3(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=011 (EBX)
@ -3096,8 +3096,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordE3(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEBX & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.regEBX & this.dataMask);
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod32RegWordE4(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=100 (ESP)
@ -3106,8 +3106,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordE4(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regESP & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.getSP() & this.dataMask);
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod32RegWordE5(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=101 (EBP)
@ -3116,8 +3116,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordE5(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEBP & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.regEBP & this.dataMask);
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod32RegWordE6(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=110 (ESI)
@ -3126,8 +3126,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordE6(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regESI & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.regESI & this.dataMask);
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod32RegWordE7(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=111 (EDI)
@ -3136,8 +3136,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordE7(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEDI & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = fn.call(this, this.getSP() & this.dataMask, this.regEDI & this.dataMask);
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod32RegWordE8(fn): mod=11 (src:reg) reg=101 (dst:BP) r/m=000 (EAX)
@ -3198,7 +3198,7 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordEC(fn) {
var w = fn.call(this, this.regEBP & this.dataMask, this.regESP & this.dataMask);
var w = fn.call(this, this.regEBP & this.dataMask, this.getSP() & this.dataMask);
this.regEBP = (this.regEBP & ~this.dataMask) | w;
if (BACKTRACK) {
this.backTrack.btiBPLo = X86.BACKTRACK.SP_LO; this.backTrack.btiBPHi = X86.BACKTRACK.SP_HI;
@ -3299,7 +3299,7 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordF4(fn) {
var w = fn.call(this, this.regESI & this.dataMask, this.regESP & this.dataMask);
var w = fn.call(this, this.regESI & this.dataMask, this.getSP() & this.dataMask);
this.regESI = (this.regESI & ~this.dataMask) | w;
if (BACKTRACK) {
this.backTrack.btiSILo = X86.BACKTRACK.SP_LO; this.backTrack.btiSIHi = X86.BACKTRACK.SP_HI;
@ -3400,7 +3400,7 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32RegWordFC(fn) {
var w = fn.call(this, this.regEDI & this.dataMask, this.regESP & this.dataMask);
var w = fn.call(this, this.regEDI & this.dataMask, this.getSP() & this.dataMask);
this.regEDI = (this.regEDI & ~this.dataMask) | w;
if (BACKTRACK) {
this.backTrack.btiDILo = X86.BACKTRACK.SP_LO; this.backTrack.btiDIHi = X86.BACKTRACK.SP_HI;
@ -3900,7 +3900,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWord20(fn) {
var w = fn.call(this, this.modEAWordData(this.regEAX), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEAX), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3914,7 +3914,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWord21(fn) {
var w = fn.call(this, this.modEAWordData(this.regECX), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regECX), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3928,7 +3928,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWord22(fn) {
var w = fn.call(this, this.modEAWordData(this.regEDX), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEDX), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3942,7 +3942,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWord23(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEBX), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3956,7 +3956,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWord24(fn) {
var w = fn.call(this, this.modEAWordData(this.getSIBAddr(0)), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.getSIBAddr(0)), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3970,7 +3970,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWord25(fn) {
var w = fn.call(this, this.modEAWordData(this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3984,7 +3984,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWord26(fn) {
var w = fn.call(this, this.modEAWordData(this.regESI), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regESI), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -3998,7 +3998,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWord27(fn) {
var w = fn.call(this, this.modEAWordData(this.regEDI), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEDI), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4796,7 +4796,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWord60(fn) {
var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPDisp()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4810,7 +4810,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWord61(fn) {
var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPDisp()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPDisp()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4824,7 +4824,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWord62(fn) {
var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPDisp()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4838,7 +4838,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWord63(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPDisp()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4852,7 +4852,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWord64(fn) {
var w = fn.call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.getSIBAddr(1) + this.getIPDisp()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4866,7 +4866,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWord65(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPDisp()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4880,7 +4880,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWord66(fn) {
var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPDisp()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -4894,7 +4894,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWord67(fn) {
var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPDisp()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5692,7 +5692,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWordA0(fn) {
var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEAX + this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5706,7 +5706,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWordA1(fn) {
var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regECX + this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5720,7 +5720,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWordA2(fn) {
var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEDX + this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5734,7 +5734,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWordA3(fn) {
var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEBX + this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5748,7 +5748,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWordA4(fn) {
var w = fn.call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.getSIBAddr(2) + this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5762,7 +5762,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWordA5(fn) {
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordStack(this.regEBP + this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5776,7 +5776,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWordA6(fn) {
var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regESI + this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -5790,7 +5790,7 @@ X86ModW32.aOpModMem = [
* @param {function(number,number)} fn (dst,src)
*/
function opMod32MemWordA7(fn) {
var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPWord()), this.regESP & this.dataMask);
var w = fn.call(this, this.modEAWordData(this.regEDI + this.getIPWord()), this.getSP() & this.dataMask);
if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
}
@ -8520,8 +8520,8 @@ X86ModW32.aOpModGrp = [
* @param {function()} fnSrc
*/
function opMod32GrpWordC4(afnGrp, fnSrc) {
var w = afnGrp[0].call(this, this.regESP & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = afnGrp[0].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod32GrpWordC5(afnGrp, fnSrc): mod=11 (dst:reg) reg=000 (afnGrp[0]) r/m=101 (EBP)
@ -8629,8 +8629,8 @@ X86ModW32.aOpModGrp = [
* @param {function()} fnSrc
*/
function opMod32GrpWordCC(afnGrp, fnSrc) {
var w = afnGrp[1].call(this, this.regESP & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = afnGrp[1].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod32GrpWordCD(afnGrp, fnSrc): mod=11 (dst:reg) reg=001 (afnGrp[1]) r/m=101 (EBP)
@ -8738,8 +8738,8 @@ X86ModW32.aOpModGrp = [
* @param {function()} fnSrc
*/
function opMod32GrpWordD4(afnGrp, fnSrc) {
var w = afnGrp[2].call(this, this.regESP & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = afnGrp[2].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod32GrpWordD5(afnGrp, fnSrc): mod=11 (dst:reg) reg=010 (afnGrp[2]) r/m=101 (EBP)
@ -8847,8 +8847,8 @@ X86ModW32.aOpModGrp = [
* @param {function()} fnSrc
*/
function opMod32GrpWordDC(afnGrp, fnSrc) {
var w = afnGrp[3].call(this, this.regESP & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = afnGrp[3].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod32GrpWordDD(afnGrp, fnSrc): mod=11 (dst:reg) reg=011 (afnGrp[3]) r/m=101 (EBP)
@ -8956,8 +8956,8 @@ X86ModW32.aOpModGrp = [
* @param {function()} fnSrc
*/
function opMod32GrpWordE4(afnGrp, fnSrc) {
var w = afnGrp[4].call(this, this.regESP & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = afnGrp[4].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod32GrpWordE5(afnGrp, fnSrc): mod=11 (dst:reg) reg=100 (afnGrp[4]) r/m=101 (EBP)
@ -9065,8 +9065,8 @@ X86ModW32.aOpModGrp = [
* @param {function()} fnSrc
*/
function opMod32GrpWordEC(afnGrp, fnSrc) {
var w = afnGrp[5].call(this, this.regESP & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = afnGrp[5].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod32GrpWordED(afnGrp, fnSrc): mod=11 (dst:reg) reg=101 (afnGrp[5]) r/m=101 (EBP)
@ -9174,8 +9174,8 @@ X86ModW32.aOpModGrp = [
* @param {function()} fnSrc
*/
function opMod32GrpWordF4(afnGrp, fnSrc) {
var w = afnGrp[6].call(this, this.regESP & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = afnGrp[6].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod32GrpWordF5(afnGrp, fnSrc): mod=11 (dst:reg) reg=110 (afnGrp[6]) r/m=101 (EBP)
@ -9283,8 +9283,8 @@ X86ModW32.aOpModGrp = [
* @param {function()} fnSrc
*/
function opMod32GrpWordFC(afnGrp, fnSrc) {
var w = afnGrp[7].call(this, this.regESP & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w;
var w = afnGrp[7].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.setSP((this.getSP() & ~this.dataMask) | w);
},
/**
* opMod32GrpWordFD(afnGrp, fnSrc): mod=11 (dst:reg) reg=111 (afnGrp[7]) r/m=101 (EBP)

View file

@ -132,7 +132,6 @@ var X86Op0F = {
this.regEDI = this.getShort(0x826);
this.regESI = this.getShort(0x828);
this.regEBP = this.getShort(0x82A);
this.regESP = this.getShort(0x82C);
this.regEBX = this.getShort(0x82E);
this.regEDX = this.getShort(0x830);
this.regECX = this.getShort(0x832);
@ -142,14 +141,24 @@ var X86Op0F = {
this.segSS.loadDesc6(0x842, this.getShort(0x820));
this.segDS.loadDesc6(0x848, this.getShort(0x81E));
this.setPS(this.getShort(0x818));
this.setIP(this.getShort(0x81A));
/*
* TODO: The bytes at 0x851 and 0x85D "should be zeroes", but do we rely on that, or do we load zeros ourselves?
* It's important to call setIP() and setSP() *after* the segCS and segSS loads, so that the CPU's
* linear IP and SP registers (regLIP and regLSP) will be updated properly. Ordinarily that would be
* taken care of by simply using the CPU's setCS() and setSS() functions, but those functions call the
* default descriptor load() functions, and obviously here we must use loadDesc6() instead.
*/
this.addrGDT = this.getShort(0x84E) | (this.getShort(0x850) << 16);
this.setIP(this.getShort(0x81A));
this.setSP(this.getShort(0x82C));
/*
* The bytes at 0x851 and 0x85D "should be zeroes", as per the "Undocumented iAPX 286 Test Instruction"
* document, but the LOADALL issued by RAMDRIVE in PC-DOS 7.0 contains 0xFF in both of those bytes, resulting
* in very large addrGDT and addrIDT values. Obviously, we can't have that, so we load only the low byte
* of the second word for both of those registers.
*/
this.addrGDT = this.getShort(0x84E) | (this.getByte(0x850) << 16);
this.addrGDTLimit = this.addrGDT + this.getShort(0x852);
this.segLDT.loadDesc6(0x854, this.getShort(0x81C));
this.addrIDT = this.getShort(0x85A) | (this.getShort(0x85C) << 16);
this.addrIDT = this.getShort(0x85A) | (this.getByte(0x85C) << 16);
this.addrIDTLimit = this.addrIDT + this.getShort(0x85E);
this.segTSS.loadDesc6(0x860, this.getShort(0x816));
this.nStepCycles -= 195;

View file

@ -834,9 +834,9 @@ var X86OpXX = {
* @this {X86CPU}
*/
opINCSP: function() {
this.resultAuxOverflow = this.regESP;
this.regESP = (this.regESP & ~this.dataMask) | (this.resultParitySign = this.regESP + 1) & this.dataMask;
this.resultValue = this.regESP | (((this.resultValue & this.resultSize)? 1 : 0) << 16);
this.resultAuxOverflow = this.getSP();
this.setSP((this.resultAuxOverflow & ~this.dataMask) | (this.resultParitySign = this.resultAuxOverflow + 1) & this.dataMask);
this.resultValue = this.getSP() | (((this.resultValue & this.resultSize)? 1 : 0) << 16);
this.resultSize = X86.RESULT.SIZE_WORD;
this.nStepCycles -= 2; // this form of INC takes 2 cycles on all CPUs
},
@ -930,9 +930,9 @@ var X86OpXX = {
* @this {X86CPU}
*/
opDECSP: function() {
this.resultAuxOverflow = this.regESP;
this.regESP = (this.regESP & ~this.dataMask) | (this.resultParitySign = this.regESP - 1) & this.dataMask;
this.resultValue = this.regESP | (((this.resultValue & this.resultSize)? 1 : 0) << 16);
this.resultAuxOverflow = this.getSP();
this.setSP((this.resultAuxOverflow & ~this.dataMask) | (this.resultParitySign = this.resultAuxOverflow - 1) & this.dataMask);
this.resultValue = this.getSP() | (((this.resultValue & this.resultSize)? 1 : 0) << 16);
this.resultSize = X86.RESULT.SIZE_WORD;
this.nStepCycles -= 2; // this form of DEC takes 2 cycles on all CPUs
},
@ -1026,7 +1026,7 @@ var X86OpXX = {
* @this {X86CPU}
*/
opPUSHSP8086: function() {
var w = (this.regESP - this.dataSize) & this.dataMask;
var w = (this.getSP() - this.dataSize) & this.dataMask;
this.pushWord(w);
this.nStepCycles -= this.CYCLES.nOpCyclesPushReg;
},
@ -1036,7 +1036,7 @@ var X86OpXX = {
* @this {X86CPU}
*/
opPUSHSP: function() {
this.pushWord(this.regESP & this.dataMask);
this.pushWord(this.getSP() & this.dataMask);
this.nStepCycles -= this.CYCLES.nOpCyclesPushReg;
},
/**
@ -1129,7 +1129,7 @@ var X86OpXX = {
* @this {X86CPU}
*/
opPOPSP: function() {
this.regESP = (this.regESP & ~this.dataMask) | this.popWord();
this.setSP((this.getSP() & ~this.dataMask) | this.popWord());
this.nStepCycles -= this.CYCLES.nOpCyclesPopReg;
},
/**
@ -1174,7 +1174,10 @@ var X86OpXX = {
* @this {X86CPU}
*/
opPUSHA: function() {
var temp = this.regESP & this.dataMask;
/*
* TODO: regLSP needs to be pre-bounds-checked against regLSPLimitLow
*/
var temp = this.getSP() & this.dataMask;
if (BACKTRACK) {
this.backTrack.btiMemLo = this.backTrack.btiAL; this.backTrack.btiMemHi = this.backTrack.btiAH;
}
@ -1224,7 +1227,11 @@ var X86OpXX = {
if (BACKTRACK) {
this.backTrack.btiBPLo = this.backTrack.btiMemLo; this.backTrack.btiBPHi = this.backTrack.btiMemHi;
}
this.regESP += this.dataSize;
/*
* TODO: regLSP needs to be pre-bounds-checked against regLSPLimit at the start
*/
this.setSP(this.getSP() + this.dataSize);
// this.regLSP += (I386? this.dataSize : 2);
this.regEBX = (this.regEBX & ~this.dataMask) | this.popWord();
if (BACKTRACK) {
this.backTrack.btiBL = this.backTrack.btiMemLo; this.backTrack.btiBH = this.backTrack.btiMemHi;
@ -1942,7 +1949,7 @@ var X86OpXX = {
temp = this.regECX;
break;
case 0x4: // this form of MOV to ES is undocumented on 8086/8088/80186/80188, invalid on 80286, and uses FS starting with 80386
temp = this.regESP;
temp = this.getSP();
break;
case 0x5: // this form of MOV to CS is undocumented on 8086/8088/80186/80188, invalid on 80286, and uses GS starting with 80386
temp = this.regEBP;
@ -1977,8 +1984,8 @@ var X86OpXX = {
this.regEBX = temp;
break;
case 0x4:
this.setES(this.regESP);
this.regESP = temp;
this.setES(this.getSP());
this.setSP(temp);
break;
case 0x5:
this.setCS(this.regEBP);
@ -2068,8 +2075,9 @@ var X86OpXX = {
*/
opXCHGSP: function() {
var temp = this.regEAX;
this.regEAX = (this.regEAX & ~this.dataMask) | (this.regESP & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | (temp & this.dataMask);
var regESP = this.getSP();
this.regEAX = (this.regEAX & ~this.dataMask) | (regESP & this.dataMask);
this.setSP((regESP & ~this.dataMask) | (temp & this.dataMask));
if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiAH = 0;
this.nStepCycles -= 3; // this form of XCHG takes 3 cycles on all CPUs
},
@ -2851,7 +2859,7 @@ var X86OpXX = {
* @this {X86CPU}
*/
opMOVSPw: function() {
this.regESP = (this.regESP & ~this.dataMask) | this.getIPWord();
this.setSP((this.getSP() & ~this.dataMask) | this.getIPWord());
this.nStepCycles -= this.CYCLES.nOpCyclesLAHF;
},
/**
@ -2912,9 +2920,9 @@ var X86OpXX = {
* @this {X86CPU}
*/
opRETn: function() {
var n = this.getIPWord();
var n = this.getIPWord() << (this.dataSize >> 2);
this.setIP(this.popWord());
this.regESP = (this.regESP & ~this.addrMask) | ((this.regESP + (n << (this.dataSize >> 2))) & this.addrMask);
if (n) this.setSP(this.getSP() + n); // TODO: optimize
this.nStepCycles -= this.CYCLES.nOpCyclesRetn;
},
/**
@ -3004,7 +3012,7 @@ var X86OpXX = {
*/
this.nStepCycles -= 11;
this.pushWord(this.regEBP);
var wFrame = this.regESP & this.segSS.addrMask;
var wFrame = this.getSP() & this.segSS.addrMask;
if (bLevel > 0) {
this.nStepCycles -= (bLevel << 2) + (bLevel > 1? 1 : 0);
while (--bLevel) {
@ -3014,7 +3022,7 @@ var X86OpXX = {
this.pushWord(wFrame);
}
this.regEBP = (this.regEBP & ~this.segSS.addrMask) | wFrame;
this.regESP = (this.regESP & ~this.segSS.addrMask) | ((this.regESP - wLocal) & this.segSS.addrMask);
this.setSP((this.getSP() & ~this.segSS.addrMask) | ((this.getSP() - wLocal) & this.segSS.addrMask));
},
/**
* op=0xC9 (LEAVE) (80186/80188 and up)
@ -3024,7 +3032,7 @@ var X86OpXX = {
* @this {X86CPU}
*/
opLEAVE: function() {
this.regESP = (this.regESP & ~this.segSS.addrMask) | (this.regEBP & this.segSS.addrMask);
this.setSP((this.getSP() & ~this.segSS.addrMask) | (this.regEBP & this.segSS.addrMask));
this.regEBP = (this.regEBP & ~this.dataMask) | (this.popWord() & this.dataMask);
/*
* NOTE: 5 is the cycle time for the 80286; the 80186/80188 has a cycle time of 8. However, accurate cycle

View file

@ -429,7 +429,7 @@ X86Seg.switchTSS = function switchTSS(selNew, fNest)
cpu.setShort(addrOld + X86.TSS.TASK_CX, cpu.regECX);
cpu.setShort(addrOld + X86.TSS.TASK_DX, cpu.regEDX);
cpu.setShort(addrOld + X86.TSS.TASK_BX, cpu.regEBX);
cpu.setShort(addrOld + X86.TSS.TASK_SP, cpu.regESP);
cpu.setShort(addrOld + X86.TSS.TASK_SP, cpu.getSP());
cpu.setShort(addrOld + X86.TSS.TASK_BP, cpu.regEBP);
cpu.setShort(addrOld + X86.TSS.TASK_SI, cpu.regESI);
cpu.setShort(addrOld + X86.TSS.TASK_DI, cpu.regEDI);
@ -455,8 +455,8 @@ X86Seg.switchTSS = function switchTSS(selNew, fNest)
offSP = (this.cpl << 2) + X86.TSS.CPL0_SP;
offSS = offSP + 2;
}
cpu.regESP = cpu.getShort(addrNew + offSP);
cpu.segSS.load(cpu.getShort(addrNew + offSS));
cpu.setSS(cpu.getShort(addrNew + offSS)); // TODO: Do we care that cpu.setSS() -- unlike segSS.load() -- will also set X86.OPFLAG.NOINTR?
cpu.setSP(cpu.getShort(addrNew + offSP));
cpu.segLDT.load(cpu.getShort(addrNew + X86.TSS.TASK_LDT));
if (fNest) cpu.setShort(addrNew + X86.TSS.PREV_TSS, selOld);
cpu.regMSW |= X86.MSW.TS;
@ -592,8 +592,8 @@ X86Seg.prototype.loadDesc8 = function(addrDesc, sel, fSuppress)
break;
}
regSP = cpu.popWord();
cpu.segSS.load(cpu.popWord());
cpu.regESP = regSP;
cpu.setSS(cpu.popWord()); // TODO: Do we care that cpu.setSS() -- unlike segSS.load() -- will also set X86.OPFLAG.NOINTR?
cpu.setSP(regSP);
this.fStackSwitch = true;
}
fGate = false;
@ -648,7 +648,7 @@ X86Seg.prototype.loadDesc8 = function(addrDesc, sel, fSuppress)
base = X86.ADDR_INVALID;
break;
}
regSP = cpu.regESP;
regSP = cpu.getSP();
var i = 0, nWords = (acc & 0x1f);
while (nWords--) {
this.awParms[i++] = cpu.getSOWord(cpu.segSS, regSP);
@ -657,10 +657,10 @@ X86Seg.prototype.loadDesc8 = function(addrDesc, sel, fSuppress)
addrTSS = cpu.segTSS.base;
offSP = (this.cpl << 2) + X86.TSS.CPL0_SP;
offSS = offSP + 2;
regSPPrev = cpu.regESP;
regSSPrev = cpu.segSS.sel;
cpu.regESP = cpu.getShort(addrTSS + offSP);
cpu.segSS.load(cpu.getShort(addrTSS + offSS));
regSSPrev = cpu.getSS();
regSPPrev = cpu.getSP();
cpu.setSS(cpu.getShort(addrTSS + offSS)); // TODO: Do we care that cpu.setSS() -- unlike segSS.load() -- will also set X86.OPFLAG.NOINTR?
cpu.setSP(cpu.getShort(addrTSS + offSP));
cpu.pushWord(regSSPrev);
cpu.pushWord(regSPPrev);
while (i) cpu.pushWord(this.awParms[--i]);

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff