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; var nIRQ = pic.nIRQBase + nIRL;
if (DEBUG && this.messageEnabled(this.messageBitsIRQ(nIRQ))) { 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) { if (MAXDEBUG && DEBUGGER) {
this.acInterrupts[nIRQ]++; this.acInterrupts[nIRQ]++;

View file

@ -1572,7 +1572,7 @@ if (DEBUGGER) {
this.aMessageRegs[asRegs[9]] = str.toHexWord(cpu.regECX); this.aMessageRegs[asRegs[9]] = str.toHexWord(cpu.regECX);
this.aMessageRegs[asRegs[10]] = str.toHexWord(cpu.regEDX); this.aMessageRegs[asRegs[10]] = str.toHexWord(cpu.regEDX);
this.aMessageRegs[asRegs[11]] = str.toHexWord(cpu.regEBX); 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[13]] = str.toHexWord(cpu.regEBP);
this.aMessageRegs[asRegs[14]] = str.toHexWord(cpu.regESI); this.aMessageRegs[asRegs[14]] = str.toHexWord(cpu.regESI);
this.aMessageRegs[asRegs[15]] = str.toHexWord(cpu.regEDI); this.aMessageRegs[asRegs[15]] = str.toHexWord(cpu.regEDI);
@ -3038,7 +3038,7 @@ if (DEBUGGER) {
" BX=" + str.toHexWord(this.cpu.regEBX) + " BX=" + str.toHexWord(this.cpu.regEBX) +
" CX=" + str.toHexWord(this.cpu.regECX) + " CX=" + str.toHexWord(this.cpu.regECX) +
" DX=" + str.toHexWord(this.cpu.regEDX) + " DX=" + str.toHexWord(this.cpu.regEDX) +
" SP=" + str.toHexWord(this.cpu.regESP) + " SP=" + str.toHexWord(this.cpu.getSP()) +
" BP=" + str.toHexWord(this.cpu.regEBP) + " BP=" + str.toHexWord(this.cpu.regEBP) +
" SI=" + str.toHexWord(this.cpu.regESI) + " SI=" + str.toHexWord(this.cpu.regESI) +
" DI=" + str.toHexWord(this.cpu.regEDI) + '\n'; " DI=" + str.toHexWord(this.cpu.regEDI) + '\n';
@ -3155,7 +3155,7 @@ if (DEBUGGER) {
value = this.cpu.regEBP; value = this.cpu.regEBP;
break; break;
case "SP": case "SP":
value = this.cpu.regESP; value = this.cpu.getSP();
break; break;
case "CS": case "CS":
value = this.cpu.getCS(); value = this.cpu.getCS();
@ -4319,7 +4319,7 @@ if (DEBUGGER) {
this.cpu.regEDX = (w & 0xffff); this.cpu.regEDX = (w & 0xffff);
break; break;
case "SP": case "SP":
this.cpu.regESP = (w & 0xffff); this.cpu.setSP(w);
break; break;
case "BP": case "BP":
this.cpu.regEBP = (w & 0xffff); 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 * 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. * every byte of incoming data and follow the flow of that data.
*/ */
var BACKTRACK = DEBUG; var BACKTRACK = !COMPILED;
/** /**
* @define {boolean} * @define {boolean}

View file

@ -465,7 +465,7 @@ Panel.prototype.updateRegisters = function()
this.drawText("BX", this.cpu.regEBX, 2); this.drawText("BX", this.cpu.regEBX, 2);
this.drawText("DI", this.cpu.regEDI, 0, 1); this.drawText("DI", this.cpu.regEDI, 0, 1);
this.drawText("CX", this.cpu.regECX, 2); 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("DX", this.cpu.regEDX, 2);
this.drawText("BP", this.cpu.regEBP, 0, 2); this.drawText("BP", this.cpu.regEBP, 0, 2);
this.drawText("CS", this.cpu.getCS(), 2); this.drawText("CS", this.cpu.getCS(), 2);

View file

@ -813,7 +813,7 @@ X86CPU.prototype.resetRegs = function()
this.regEBX = 0; this.regEBX = 0;
this.regECX = 0; this.regECX = 0;
this.regEDX = 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.regEBP = 0;
this.regESI = 0; this.regESI = 0;
this.regEDI = 0; this.regEDI = 0;
@ -825,7 +825,7 @@ X86CPU.prototype.resetRegs = function()
*/ */
this.regMSW = X86.MSW.SET; this.regMSW = X86.MSW.SET;
this.addrIDT = 0; this.addrIDTLimit = 0x03FF; 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 * 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.segDS = new X86Seg(this, X86Seg.ID.DATA, "DS");
this.segES = new X86Seg(this, X86Seg.ID.DATA, "ES"); this.segES = new X86Seg(this, X86Seg.ID.DATA, "ES");
this.segSS = new X86Seg(this, X86Seg.ID.STACK, "SS"); this.segSS = new X86Seg(this, X86Seg.ID.STACK, "SS");
this.setSP(0);
if (I386 && this.model >= X86.MODEL_80386) { if (I386 && this.model >= X86.MODEL_80386) {
this.segFS = new X86Seg(this, X86Seg.ID.DATA, "FS"); 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.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) { if (BACKTRACK) {
/* /*
@ -1048,7 +1049,7 @@ X86CPU.prototype.setOpMod = function()
*/ */
X86CPU.prototype.getChecksum = 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; sum = (sum + this.getIP() + this.getCS() + this.getDS() + this.getSS() + this.getES() + this.getPS()) | 0;
return sum; return sum;
}; };
@ -1239,7 +1240,7 @@ X86CPU.prototype.restoreProtMode = function(a)
X86CPU.prototype.save = function() X86CPU.prototype.save = function()
{ {
var state = new State(this); 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(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(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()]); state.set(3, [0, this.nTotalCycles, this.getSpeed()]);
@ -1264,7 +1265,7 @@ X86CPU.prototype.restore = function(data)
this.regEBX = a[1]; this.regEBX = a[1];
this.regECX = a[2]; this.regECX = a[2];
this.regEDX = a[3]; this.regEDX = a[3];
this.regESP = a[4]; var regESP = a[4];
this.regEBP = a[5]; this.regEBP = a[5];
this.regESI = a[6]; this.regESI = a[6];
this.regEDI = a[7]; this.regEDI = a[7];
@ -1276,7 +1277,12 @@ X86CPU.prototype.restore = function(data)
this.segES.restore(a[4]); this.segES.restore(a[4]);
this.restoreProtMode(a[5]); this.restoreProtMode(a[5]);
this.setPS(a[6]); 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.setIP(a[0]);
this.setSP(regESP);
if (I386 && this.model >= X86.MODEL_80386) { if (I386 && this.model >= X86.MODEL_80386) {
this.segFS.restore(a[7]); this.segFS.restore(a[7]);
this.segGS.restore(a[8]); this.segGS.restore(a[8]);
@ -1398,7 +1404,10 @@ X86CPU.prototype.getSS = function()
*/ */
X86CPU.prototype.setSS = function(sel) 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; 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() * getCF()
* *
@ -2575,9 +2606,10 @@ X86CPU.prototype.getSIBAddr = function(mod)
*/ */
X86CPU.prototype.popWord = function() X86CPU.prototype.popWord = function()
{ {
var regESP = this.regESP; var w = (I386? this.opMem.getWord(this.regLSP) : this.getShort(this.regLSP));
this.regESP = (this.regESP + (I386? this.dataSize : 2)) & (I386? this.addrMask : 0xffff); this.regLSP += (I386? this.dataSize : 2);
return this.getSOWord(this.segSS, regESP); 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) X86CPU.prototype.pushWord = function(w)
{ {
this.assert((w & this.dataMask) == 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("BX", this.regEBX);
this.displayReg("CX", this.regECX); this.displayReg("CX", this.regECX);
this.displayReg("DX", this.regEDX); this.displayReg("DX", this.regEDX);
this.displayReg("SP", this.regESP); this.displayReg("SP", this.getSP());
this.displayReg("BP", this.regEBP); this.displayReg("BP", this.regEBP);
this.displayReg("SI", this.regESI); this.displayReg("SI", this.regESI);
this.displayReg("DI", this.regEDI); this.displayReg("DI", this.regEDI);

View file

@ -427,7 +427,7 @@ var X86Help = {
this.regEBX = dst; this.regEBX = dst;
break; break;
case 0x4: // SP case 0x4: // SP
this.regESP = dst; this.setSP(dst);
break; break;
case 0x5: // BP case 0x5: // BP
this.regEBP = dst; this.regEBP = dst;
@ -508,9 +508,10 @@ var X86Help = {
opHelpRETF: function(n) { opHelpRETF: function(n) {
var regEIP = this.popWord(); var regEIP = this.popWord();
var regCS = 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 (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 * 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 * 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) { function opModSIB04(mod) {
this.segData = this.segStack; 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) * opModSIB05(): scale=00 (1) index=000 (EAX) base=101 (mod? EBP : disp32)
@ -170,7 +170,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB0C(mod) { function opModSIB0C(mod) {
this.segData = this.segStack; 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) * opModSIB0D(): scale=00 (1) index=001 (ECX) base=101 (mod? EBP : disp32)
@ -243,7 +243,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB14(mod) { function opModSIB14(mod) {
this.segData = this.segStack; 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) * opModSIB15(): scale=00 (1) index=010 (EDX) base=101 (mod? EBP : disp32)
@ -316,7 +316,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB1C(mod) { function opModSIB1C(mod) {
this.segData = this.segStack; 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) * opModSIB1D(): scale=00 (1) index=011 (EBX) base=101 (mod? EBP : disp32)
@ -389,7 +389,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB24(mod) { function opModSIB24(mod) {
this.segData = this.segStack; this.segData = this.segStack;
return this.regESP; return this.getSP();
}, },
/** /**
* opModSIB25(): scale=00 (1) index=100 (none) base=101 (mod? EBP : disp32) * opModSIB25(): scale=00 (1) index=100 (none) base=101 (mod? EBP : disp32)
@ -462,7 +462,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB2C(mod) { function opModSIB2C(mod) {
this.segData = this.segStack; 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) * opModSIB2D(): scale=00 (1) index=101 (EBP) base=101 (mod? EBP : disp32)
@ -535,7 +535,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB34(mod) { function opModSIB34(mod) {
this.segData = this.segStack; 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) * opModSIB35(): scale=00 (1) index=110 (ESI) base=101 (mod? EBP : disp32)
@ -608,7 +608,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB3C(mod) { function opModSIB3C(mod) {
this.segData = this.segStack; 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) * opModSIB3D(): scale=00 (1) index=111 (EDI) base=101 (mod? EBP : disp32)
@ -681,7 +681,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB44(mod) { function opModSIB44(mod) {
this.segData = this.segStack; 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) * opModSIB45(): scale=01 (2) index=000 (EAX) base=101 (mod? EBP : disp32)
@ -754,7 +754,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB4C(mod) { function opModSIB4C(mod) {
this.segData = this.segStack; 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) * opModSIB4D(): scale=01 (2) index=001 (ECX) base=101 (mod? EBP : disp32)
@ -827,7 +827,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB54(mod) { function opModSIB54(mod) {
this.segData = this.segStack; 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) * opModSIB55(): scale=01 (2) index=010 (EDX) base=101 (mod? EBP : disp32)
@ -900,7 +900,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB5C(mod) { function opModSIB5C(mod) {
this.segData = this.segStack; 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) * opModSIB5D(): scale=01 (2) index=011 (EBX) base=101 (mod? EBP : disp32)
@ -973,7 +973,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB64(mod) { function opModSIB64(mod) {
this.segData = this.segStack; this.segData = this.segStack;
return this.regESP; return this.getSP();
}, },
/** /**
* opModSIB65(): scale=01 (2) index=100 (none) base=101 (mod? EBP : disp32) * opModSIB65(): scale=01 (2) index=100 (none) base=101 (mod? EBP : disp32)
@ -1046,7 +1046,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB6C(mod) { function opModSIB6C(mod) {
this.segData = this.segStack; 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) * opModSIB6D(): scale=01 (2) index=101 (EBP) base=101 (mod? EBP : disp32)
@ -1119,7 +1119,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB74(mod) { function opModSIB74(mod) {
this.segData = this.segStack; 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) * opModSIB75(): scale=01 (2) index=110 (ESI) base=101 (mod? EBP : disp32)
@ -1192,7 +1192,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB7C(mod) { function opModSIB7C(mod) {
this.segData = this.segStack; 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) * opModSIB7D(): scale=01 (2) index=111 (EDI) base=101 (mod? EBP : disp32)
@ -1265,7 +1265,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB84(mod) { function opModSIB84(mod) {
this.segData = this.segStack; 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) * opModSIB85(): scale=10 (4) index=000 (EAX) base=101 (mod? EBP : disp32)
@ -1338,7 +1338,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB8C(mod) { function opModSIB8C(mod) {
this.segData = this.segStack; 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) * opModSIB8D(): scale=10 (4) index=001 (ECX) base=101 (mod? EBP : disp32)
@ -1411,7 +1411,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB94(mod) { function opModSIB94(mod) {
this.segData = this.segStack; 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) * opModSIB95(): scale=10 (4) index=010 (EDX) base=101 (mod? EBP : disp32)
@ -1484,7 +1484,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIB9C(mod) { function opModSIB9C(mod) {
this.segData = this.segStack; 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) * opModSIB9D(): scale=10 (4) index=011 (EBX) base=101 (mod? EBP : disp32)
@ -1557,7 +1557,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIBA4(mod) { function opModSIBA4(mod) {
this.segData = this.segStack; this.segData = this.segStack;
return this.regESP; return this.getSP();
}, },
/** /**
* opModSIBA5(): scale=10 (4) index=100 (none) base=101 (mod? EBP : disp32) * opModSIBA5(): scale=10 (4) index=100 (none) base=101 (mod? EBP : disp32)
@ -1630,7 +1630,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIBAC(mod) { function opModSIBAC(mod) {
this.segData = this.segStack; 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) * opModSIBAD(): scale=10 (4) index=101 (EBP) base=101 (mod? EBP : disp32)
@ -1703,7 +1703,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIBB4(mod) { function opModSIBB4(mod) {
this.segData = this.segStack; 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) * opModSIBB5(): scale=10 (4) index=110 (ESI) base=101 (mod? EBP : disp32)
@ -1776,7 +1776,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIBBC(mod) { function opModSIBBC(mod) {
this.segData = this.segStack; 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) * opModSIBBD(): scale=10 (4) index=111 (EDI) base=101 (mod? EBP : disp32)
@ -1849,7 +1849,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIBC4(mod) { function opModSIBC4(mod) {
this.segData = this.segStack; 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) * opModSIBC5(): scale=11 (8) index=000 (EAX) base=101 (mod? EBP : disp32)
@ -1922,7 +1922,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIBCC(mod) { function opModSIBCC(mod) {
this.segData = this.segStack; 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) * opModSIBCD(): scale=11 (8) index=001 (ECX) base=101 (mod? EBP : disp32)
@ -1995,7 +1995,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIBD4(mod) { function opModSIBD4(mod) {
this.segData = this.segStack; 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) * opModSIBD5(): scale=11 (8) index=010 (EDX) base=101 (mod? EBP : disp32)
@ -2068,7 +2068,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIBDC(mod) { function opModSIBDC(mod) {
this.segData = this.segStack; 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) * opModSIBDD(): scale=11 (8) index=011 (EBX) base=101 (mod? EBP : disp32)
@ -2141,7 +2141,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIBE4(mod) { function opModSIBE4(mod) {
this.segData = this.segStack; this.segData = this.segStack;
return this.regESP; return this.getSP();
}, },
/** /**
* opModSIBE5(): scale=11 (8) index=100 (none) base=101 (mod? EBP : disp32) * opModSIBE5(): scale=11 (8) index=100 (none) base=101 (mod? EBP : disp32)
@ -2214,7 +2214,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIBEC(mod) { function opModSIBEC(mod) {
this.segData = this.segStack; 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) * opModSIBED(): scale=11 (8) index=101 (EBP) base=101 (mod? EBP : disp32)
@ -2287,7 +2287,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIBF4(mod) { function opModSIBF4(mod) {
this.segData = this.segStack; 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) * opModSIBF5(): scale=11 (8) index=110 (ESI) base=101 (mod? EBP : disp32)
@ -2360,7 +2360,7 @@ X86ModSIB.aOpModSIB = [
*/ */
function opModSIBFC(mod) { function opModSIBFC(mod) {
this.segData = this.segStack; 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) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWord20(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndex;
}, },
/** /**
@ -472,7 +472,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWord21(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexExtra;
}, },
/** /**
@ -482,7 +482,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWord22(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexExtra;
}, },
/** /**
@ -492,7 +492,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWord23(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndex;
}, },
/** /**
@ -502,7 +502,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWord24(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBase;
}, },
/** /**
@ -512,7 +512,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWord25(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBase;
}, },
/** /**
@ -522,7 +522,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWord26(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesDisp;
}, },
/** /**
@ -532,7 +532,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWord27(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBase;
}, },
/** /**
@ -1270,7 +1270,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWord60(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp;
}, },
/** /**
@ -1280,7 +1280,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWord61(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra;
}, },
/** /**
@ -1290,7 +1290,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWord62(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra;
}, },
/** /**
@ -1300,7 +1300,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWord63(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp;
}, },
/** /**
@ -1310,7 +1310,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWord64(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -1320,7 +1320,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWord65(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -1330,7 +1330,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWord66(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -1340,7 +1340,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWord67(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2078,7 +2078,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordA0(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp;
}, },
/** /**
@ -2088,7 +2088,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordA1(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra;
}, },
/** /**
@ -2098,7 +2098,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordA2(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra;
}, },
/** /**
@ -2108,7 +2108,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordA3(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp;
}, },
/** /**
@ -2118,7 +2118,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordA4(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2128,7 +2128,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordA5(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2138,7 +2138,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordA6(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2148,7 +2148,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordA7(fn) { 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; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2515,7 +2515,7 @@ X86ModW.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordC4(fn) { function opModRegWordC4(fn) {
this.regEAX = fn.call(this, this.regEAX, this.regESP); this.regEAX = fn.call(this, this.regEAX, this.getSP());
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiAL = X86.BACKTRACK.SP_LO; this.backTrack.btiAH = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordCC(fn) { function opModRegWordCC(fn) {
this.regECX = fn.call(this, this.regECX, this.regESP); this.regECX = fn.call(this, this.regECX, this.getSP());
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiCL = X86.BACKTRACK.SP_LO; this.backTrack.btiCH = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordD4(fn) { function opModRegWordD4(fn) {
this.regEDX = fn.call(this, this.regEDX, this.regESP); this.regEDX = fn.call(this, this.regEDX, this.getSP());
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiDL = X86.BACKTRACK.SP_LO; this.backTrack.btiDH = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordDC(fn) { function opModRegWordDC(fn) {
this.regEBX = fn.call(this, this.regEBX, this.regESP); this.regEBX = fn.call(this, this.regEBX, this.getSP());
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiBL = X86.BACKTRACK.SP_LO; this.backTrack.btiBH = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordE0(fn) { 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) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordE1(fn) { 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) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordE2(fn) { 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) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordE3(fn) { 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) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordE4(fn) { 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) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordE5(fn) { 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) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordE6(fn) { 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) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordE7(fn) { 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) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordEC(fn) { function opModRegWordEC(fn) {
this.regEBP = fn.call(this, this.regEBP, this.regESP); this.regEBP = fn.call(this, this.regEBP, this.getSP());
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiBPLo = X86.BACKTRACK.SP_LO; this.backTrack.btiBPHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordF4(fn) { function opModRegWordF4(fn) {
this.regESI = fn.call(this, this.regESI, this.regESP); this.regESI = fn.call(this, this.regESI, this.getSP());
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiSILo = X86.BACKTRACK.SP_LO; this.backTrack.btiSIHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModRegWordFC(fn) { function opModRegWordFC(fn) {
this.regEDI = fn.call(this, this.regEDI, this.regESP); this.regEDI = fn.call(this, this.regEDI, this.getSP());
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiDILo = X86.BACKTRACK.SP_LO; this.backTrack.btiDIHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWord20(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWord21(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWord22(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWord23(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWord24(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWord25(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWord26(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWord27(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWord60(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWord61(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWord62(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWord63(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWord64(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWord65(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWord66(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWord67(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWordA0(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWordA1(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWordA2(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWordA3(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWordA4(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWordA5(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWordA6(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opModMemWordA7(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
} }
@ -8260,7 +8260,7 @@ X86ModW.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opModGrpWordC4(afnGrp, 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) * opModGrpWordC5(afnGrp, fnSrc): mod=11 (dst:reg) reg=000 (afnGrp[0]) r/m=101 (BP)
@ -8361,7 +8361,7 @@ X86ModW.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opModGrpWordCC(afnGrp, 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) * opModGrpWordCD(afnGrp, fnSrc): mod=11 (dst:reg) reg=001 (afnGrp[1]) r/m=101 (BP)
@ -8462,7 +8462,7 @@ X86ModW.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opModGrpWordD4(afnGrp, 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) * opModGrpWordD5(afnGrp, fnSrc): mod=11 (dst:reg) reg=010 (afnGrp[2]) r/m=101 (BP)
@ -8563,7 +8563,7 @@ X86ModW.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opModGrpWordDC(afnGrp, 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) * opModGrpWordDD(afnGrp, fnSrc): mod=11 (dst:reg) reg=011 (afnGrp[3]) r/m=101 (BP)
@ -8664,7 +8664,7 @@ X86ModW.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opModGrpWordE4(afnGrp, 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) * opModGrpWordE5(afnGrp, fnSrc): mod=11 (dst:reg) reg=100 (afnGrp[4]) r/m=101 (BP)
@ -8765,7 +8765,7 @@ X86ModW.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opModGrpWordEC(afnGrp, 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) * opModGrpWordED(afnGrp, fnSrc): mod=11 (dst:reg) reg=101 (afnGrp[5]) r/m=101 (BP)
@ -8866,7 +8866,7 @@ X86ModW.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opModGrpWordF4(afnGrp, 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) * opModGrpWordF5(afnGrp, fnSrc): mod=11 (dst:reg) reg=110 (afnGrp[6]) r/m=101 (BP)
@ -8967,7 +8967,7 @@ X86ModW.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opModGrpWordFC(afnGrp, 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) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWord20(fn) { function opMod16RegWord20(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.regESI)); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regESI));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndex; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndex;
}, },
/** /**
@ -505,8 +505,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWord21(fn) { function opMod16RegWord21(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI)); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexExtra; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexExtra;
}, },
/** /**
@ -516,8 +516,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWord22(fn) { function opMod16RegWord22(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI)); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexExtra; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexExtra;
}, },
/** /**
@ -527,8 +527,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWord23(fn) { function opMod16RegWord23(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI)); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndex; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndex;
}, },
/** /**
@ -538,8 +538,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWord24(fn) { function opMod16RegWord24(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regESI)); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase; this.nStepCycles -= this.CYCLES.nEACyclesBase;
}, },
/** /**
@ -549,8 +549,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWord25(fn) { function opMod16RegWord25(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDI)); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase; this.nStepCycles -= this.CYCLES.nEACyclesBase;
}, },
/** /**
@ -560,8 +560,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWord26(fn) { function opMod16RegWord26(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesDisp; this.nStepCycles -= this.CYCLES.nEACyclesDisp;
}, },
/** /**
@ -571,8 +571,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWord27(fn) { function opMod16RegWord27(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX)); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase; this.nStepCycles -= this.CYCLES.nEACyclesBase;
}, },
/** /**
@ -1366,8 +1366,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWord60(fn) { function opMod16RegWord60(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp;
}, },
/** /**
@ -1377,8 +1377,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWord61(fn) { function opMod16RegWord61(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra;
}, },
/** /**
@ -1388,8 +1388,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWord62(fn) { function opMod16RegWord62(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra;
}, },
/** /**
@ -1399,8 +1399,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWord63(fn) { function opMod16RegWord63(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp;
}, },
/** /**
@ -1410,8 +1410,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWord64(fn) { function opMod16RegWord64(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -1421,8 +1421,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWord65(fn) { function opMod16RegWord65(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -1432,8 +1432,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWord66(fn) { function opMod16RegWord66(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -1443,8 +1443,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWord67(fn) { function opMod16RegWord67(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2238,8 +2238,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordA0(fn) { function opMod16RegWordA0(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regESI + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp;
}, },
/** /**
@ -2249,8 +2249,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordA1(fn) { function opMod16RegWordA1(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.regEDI + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra;
}, },
/** /**
@ -2260,8 +2260,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordA2(fn) { function opMod16RegWordA2(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regESI + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDispExtra;
}, },
/** /**
@ -2271,8 +2271,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordA3(fn) { function opMod16RegWordA3(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.regEDI + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseIndexDisp;
}, },
/** /**
@ -2282,8 +2282,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordA4(fn) { function opMod16RegWordA4(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regESI + this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2293,8 +2293,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordA5(fn) { function opMod16RegWordA5(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDI + this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2304,8 +2304,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordA6(fn) { function opMod16RegWordA6(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2315,8 +2315,8 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordA7(fn) { function opMod16RegWordA7(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2711,7 +2711,7 @@ X86ModW16.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordC4(fn) { 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; this.regEAX = (this.regEAX & ~this.dataMask) | w;
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiAL = X86.BACKTRACK.SP_LO; this.backTrack.btiAH = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordCC(fn) { 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; this.regECX = (this.regECX & ~this.dataMask) | w;
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiCL = X86.BACKTRACK.SP_LO; this.backTrack.btiCH = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordD4(fn) { 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; this.regEDX = (this.regEDX & ~this.dataMask) | w;
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiDL = X86.BACKTRACK.SP_LO; this.backTrack.btiDH = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordDC(fn) { 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; this.regEBX = (this.regEBX & ~this.dataMask) | w;
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiBL = X86.BACKTRACK.SP_LO; this.backTrack.btiBH = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordE0(fn) { function opMod16RegWordE0(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEAX & this.dataMask); var w = fn.call(this, this.getSP() & this.dataMask, this.regEAX & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod16RegWordE1(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=001 (CX) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordE1(fn) { function opMod16RegWordE1(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regECX & this.dataMask); var w = fn.call(this, this.getSP() & this.dataMask, this.regECX & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod16RegWordE2(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=010 (DX) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordE2(fn) { function opMod16RegWordE2(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEDX & this.dataMask); var w = fn.call(this, this.getSP() & this.dataMask, this.regEDX & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod16RegWordE3(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=011 (BX) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordE3(fn) { function opMod16RegWordE3(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEBX & this.dataMask); var w = fn.call(this, this.getSP() & this.dataMask, this.regEBX & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod16RegWordE4(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=100 (SP) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordE4(fn) { function opMod16RegWordE4(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regESP & this.dataMask); var w = fn.call(this, this.getSP() & this.dataMask, this.getSP() & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod16RegWordE5(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=101 (BP) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordE5(fn) { function opMod16RegWordE5(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEBP & this.dataMask); var w = fn.call(this, this.getSP() & this.dataMask, this.regEBP & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod16RegWordE6(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=110 (SI) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordE6(fn) { function opMod16RegWordE6(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regESI & this.dataMask); var w = fn.call(this, this.getSP() & this.dataMask, this.regESI & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod16RegWordE7(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=111 (DI) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordE7(fn) { function opMod16RegWordE7(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEDI & this.dataMask); var w = fn.call(this, this.getSP() & this.dataMask, this.regEDI & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod16RegWordE8(fn): mod=11 (src:reg) reg=101 (dst:BP) r/m=000 (AX) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordEC(fn) { 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; this.regEBP = (this.regEBP & ~this.dataMask) | w;
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiBPLo = X86.BACKTRACK.SP_LO; this.backTrack.btiBPHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordF4(fn) { 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; this.regESI = (this.regESI & ~this.dataMask) | w;
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiSILo = X86.BACKTRACK.SP_LO; this.backTrack.btiSIHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16RegWordFC(fn) { 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; this.regEDI = (this.regEDI & ~this.dataMask) | w;
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiDILo = X86.BACKTRACK.SP_LO; this.backTrack.btiDIHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWord20(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWord21(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWord22(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWord23(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWord24(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWord25(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWord26(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWord27(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWord60(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWord61(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWord62(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWord63(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWord64(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWord65(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWord66(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWord67(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWordA0(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWordA1(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWordA2(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWordA3(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWordA4(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWordA5(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWordA6(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod16MemWordA7(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
} }
@ -8520,8 +8520,8 @@ X86ModW16.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opMod16GrpWordC4(afnGrp, fnSrc) { function opMod16GrpWordC4(afnGrp, fnSrc) {
var w = afnGrp[0].call(this, this.regESP & this.dataMask, fnSrc.call(this)); var w = afnGrp[0].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod16GrpWordC5(afnGrp, fnSrc): mod=11 (dst:reg) reg=000 (afnGrp[0]) r/m=101 (BP) * opMod16GrpWordC5(afnGrp, fnSrc): mod=11 (dst:reg) reg=000 (afnGrp[0]) r/m=101 (BP)
@ -8629,8 +8629,8 @@ X86ModW16.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opMod16GrpWordCC(afnGrp, fnSrc) { function opMod16GrpWordCC(afnGrp, fnSrc) {
var w = afnGrp[1].call(this, this.regESP & this.dataMask, fnSrc.call(this)); var w = afnGrp[1].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod16GrpWordCD(afnGrp, fnSrc): mod=11 (dst:reg) reg=001 (afnGrp[1]) r/m=101 (BP) * opMod16GrpWordCD(afnGrp, fnSrc): mod=11 (dst:reg) reg=001 (afnGrp[1]) r/m=101 (BP)
@ -8738,8 +8738,8 @@ X86ModW16.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opMod16GrpWordD4(afnGrp, fnSrc) { function opMod16GrpWordD4(afnGrp, fnSrc) {
var w = afnGrp[2].call(this, this.regESP & this.dataMask, fnSrc.call(this)); var w = afnGrp[2].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod16GrpWordD5(afnGrp, fnSrc): mod=11 (dst:reg) reg=010 (afnGrp[2]) r/m=101 (BP) * opMod16GrpWordD5(afnGrp, fnSrc): mod=11 (dst:reg) reg=010 (afnGrp[2]) r/m=101 (BP)
@ -8847,8 +8847,8 @@ X86ModW16.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opMod16GrpWordDC(afnGrp, fnSrc) { function opMod16GrpWordDC(afnGrp, fnSrc) {
var w = afnGrp[3].call(this, this.regESP & this.dataMask, fnSrc.call(this)); var w = afnGrp[3].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod16GrpWordDD(afnGrp, fnSrc): mod=11 (dst:reg) reg=011 (afnGrp[3]) r/m=101 (BP) * opMod16GrpWordDD(afnGrp, fnSrc): mod=11 (dst:reg) reg=011 (afnGrp[3]) r/m=101 (BP)
@ -8956,8 +8956,8 @@ X86ModW16.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opMod16GrpWordE4(afnGrp, fnSrc) { function opMod16GrpWordE4(afnGrp, fnSrc) {
var w = afnGrp[4].call(this, this.regESP & this.dataMask, fnSrc.call(this)); var w = afnGrp[4].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod16GrpWordE5(afnGrp, fnSrc): mod=11 (dst:reg) reg=100 (afnGrp[4]) r/m=101 (BP) * opMod16GrpWordE5(afnGrp, fnSrc): mod=11 (dst:reg) reg=100 (afnGrp[4]) r/m=101 (BP)
@ -9065,8 +9065,8 @@ X86ModW16.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opMod16GrpWordEC(afnGrp, fnSrc) { function opMod16GrpWordEC(afnGrp, fnSrc) {
var w = afnGrp[5].call(this, this.regESP & this.dataMask, fnSrc.call(this)); var w = afnGrp[5].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod16GrpWordED(afnGrp, fnSrc): mod=11 (dst:reg) reg=101 (afnGrp[5]) r/m=101 (BP) * opMod16GrpWordED(afnGrp, fnSrc): mod=11 (dst:reg) reg=101 (afnGrp[5]) r/m=101 (BP)
@ -9174,8 +9174,8 @@ X86ModW16.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opMod16GrpWordF4(afnGrp, fnSrc) { function opMod16GrpWordF4(afnGrp, fnSrc) {
var w = afnGrp[6].call(this, this.regESP & this.dataMask, fnSrc.call(this)); var w = afnGrp[6].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod16GrpWordF5(afnGrp, fnSrc): mod=11 (dst:reg) reg=110 (afnGrp[6]) r/m=101 (BP) * opMod16GrpWordF5(afnGrp, fnSrc): mod=11 (dst:reg) reg=110 (afnGrp[6]) r/m=101 (BP)
@ -9283,8 +9283,8 @@ X86ModW16.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opMod16GrpWordFC(afnGrp, fnSrc) { function opMod16GrpWordFC(afnGrp, fnSrc) {
var w = afnGrp[7].call(this, this.regESP & this.dataMask, fnSrc.call(this)); var w = afnGrp[7].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod16GrpWordFD(afnGrp, fnSrc): mod=11 (dst:reg) reg=111 (afnGrp[7]) r/m=101 (BP) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWord20(fn) { function opMod32RegWord20(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEAX)); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEAX));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase; this.nStepCycles -= this.CYCLES.nEACyclesBase;
}, },
/** /**
@ -505,8 +505,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWord21(fn) { function opMod32RegWord21(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regECX)); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regECX));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase; this.nStepCycles -= this.CYCLES.nEACyclesBase;
}, },
/** /**
@ -516,8 +516,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWord22(fn) { function opMod32RegWord22(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDX)); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDX));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase; this.nStepCycles -= this.CYCLES.nEACyclesBase;
}, },
/** /**
@ -527,8 +527,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWord23(fn) { function opMod32RegWord23(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX)); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase; this.nStepCycles -= this.CYCLES.nEACyclesBase;
}, },
/** /**
@ -538,8 +538,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWord24(fn) { function opMod32RegWord24(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.getSIBAddr(0))); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.getSIBAddr(0)));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase; this.nStepCycles -= this.CYCLES.nEACyclesBase;
}, },
/** /**
@ -549,8 +549,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWord25(fn) { function opMod32RegWord25(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesDisp; this.nStepCycles -= this.CYCLES.nEACyclesDisp;
}, },
/** /**
@ -560,8 +560,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWord26(fn) { function opMod32RegWord26(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regESI)); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase; this.nStepCycles -= this.CYCLES.nEACyclesBase;
}, },
/** /**
@ -571,8 +571,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWord27(fn) { function opMod32RegWord27(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDI)); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBase; this.nStepCycles -= this.CYCLES.nEACyclesBase;
}, },
/** /**
@ -1366,8 +1366,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWord60(fn) { function opMod32RegWord60(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEAX + this.getIPDisp())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEAX + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -1377,8 +1377,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWord61(fn) { function opMod32RegWord61(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regECX + this.getIPDisp())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regECX + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -1388,8 +1388,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWord62(fn) { function opMod32RegWord62(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDX + this.getIPDisp())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDX + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -1399,8 +1399,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWord63(fn) { function opMod32RegWord63(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -1410,8 +1410,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWord64(fn) { function opMod32RegWord64(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.getSIBAddr(1) + this.getIPDisp())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.getSIBAddr(1) + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -1421,8 +1421,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWord65(fn) { function opMod32RegWord65(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -1432,8 +1432,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWord66(fn) { function opMod32RegWord66(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -1443,8 +1443,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWord67(fn) { function opMod32RegWord67(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI + this.getIPDisp()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2238,8 +2238,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordA0(fn) { function opMod32RegWordA0(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEAX + this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEAX + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2249,8 +2249,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordA1(fn) { function opMod32RegWordA1(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regECX + this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regECX + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2260,8 +2260,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordA2(fn) { function opMod32RegWordA2(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDX + this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDX + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2271,8 +2271,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordA3(fn) { function opMod32RegWordA3(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEBX + this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEBX + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2282,8 +2282,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordA4(fn) { function opMod32RegWordA4(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.getSIBAddr(2) + this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.getSIBAddr(2) + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2293,8 +2293,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordA5(fn) { function opMod32RegWordA5(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordStack(this.regEBP + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2304,8 +2304,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordA6(fn) { function opMod32RegWordA6(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regESI + this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regESI + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2315,8 +2315,8 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordA7(fn) { function opMod32RegWordA7(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.getEAWordData(this.regEDI + this.getIPWord())); var w = fn.call(this, this.getSP() & this.dataMask, this.getEAWordData(this.regEDI + this.getIPWord()));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp; this.nStepCycles -= this.CYCLES.nEACyclesBaseDisp;
}, },
/** /**
@ -2711,7 +2711,7 @@ X86ModW32.aOpModReg = [
* @param {function(number,number)} fn (dst,src) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordC4(fn) { 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; this.regEAX = (this.regEAX & ~this.dataMask) | w;
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiAL = X86.BACKTRACK.SP_LO; this.backTrack.btiAH = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordCC(fn) { 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; this.regECX = (this.regECX & ~this.dataMask) | w;
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiCL = X86.BACKTRACK.SP_LO; this.backTrack.btiCH = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordD4(fn) { 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; this.regEDX = (this.regEDX & ~this.dataMask) | w;
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiDL = X86.BACKTRACK.SP_LO; this.backTrack.btiDH = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordDC(fn) { 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; this.regEBX = (this.regEBX & ~this.dataMask) | w;
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiBL = X86.BACKTRACK.SP_LO; this.backTrack.btiBH = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordE0(fn) { function opMod32RegWordE0(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEAX & this.dataMask); var w = fn.call(this, this.getSP() & this.dataMask, this.regEAX & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod32RegWordE1(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=001 (ECX) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordE1(fn) { function opMod32RegWordE1(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regECX & this.dataMask); var w = fn.call(this, this.getSP() & this.dataMask, this.regECX & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod32RegWordE2(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=010 (EDX) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordE2(fn) { function opMod32RegWordE2(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEDX & this.dataMask); var w = fn.call(this, this.getSP() & this.dataMask, this.regEDX & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod32RegWordE3(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=011 (EBX) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordE3(fn) { function opMod32RegWordE3(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEBX & this.dataMask); var w = fn.call(this, this.getSP() & this.dataMask, this.regEBX & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod32RegWordE4(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=100 (ESP) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordE4(fn) { function opMod32RegWordE4(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regESP & this.dataMask); var w = fn.call(this, this.getSP() & this.dataMask, this.getSP() & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod32RegWordE5(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=101 (EBP) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordE5(fn) { function opMod32RegWordE5(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEBP & this.dataMask); var w = fn.call(this, this.getSP() & this.dataMask, this.regEBP & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod32RegWordE6(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=110 (ESI) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordE6(fn) { function opMod32RegWordE6(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regESI & this.dataMask); var w = fn.call(this, this.getSP() & this.dataMask, this.regESI & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod32RegWordE7(fn): mod=11 (src:reg) reg=100 (dst:SP) r/m=111 (EDI) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordE7(fn) { function opMod32RegWordE7(fn) {
var w = fn.call(this, this.regESP & this.dataMask, this.regEDI & this.dataMask); var w = fn.call(this, this.getSP() & this.dataMask, this.regEDI & this.dataMask);
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod32RegWordE8(fn): mod=11 (src:reg) reg=101 (dst:BP) r/m=000 (EAX) * 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordEC(fn) { 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; this.regEBP = (this.regEBP & ~this.dataMask) | w;
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiBPLo = X86.BACKTRACK.SP_LO; this.backTrack.btiBPHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordF4(fn) { 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; this.regESI = (this.regESI & ~this.dataMask) | w;
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiSILo = X86.BACKTRACK.SP_LO; this.backTrack.btiSIHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32RegWordFC(fn) { 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; this.regEDI = (this.regEDI & ~this.dataMask) | w;
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiDILo = X86.BACKTRACK.SP_LO; this.backTrack.btiDIHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWord20(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWord21(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWord22(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWord23(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWord24(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWord25(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWord26(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWord27(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWord60(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWord61(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWord62(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWord63(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWord64(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWord65(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWord66(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWord67(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWordA0(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWordA1(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWordA2(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWordA3(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWordA4(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWordA5(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWordA6(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; 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) * @param {function(number,number)} fn (dst,src)
*/ */
function opMod32MemWordA7(fn) { 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) { if (BACKTRACK) {
this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI; this.backTrack.btiEALo = X86.BACKTRACK.SP_LO; this.backTrack.btiEAHi = X86.BACKTRACK.SP_HI;
} }
@ -8520,8 +8520,8 @@ X86ModW32.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opMod32GrpWordC4(afnGrp, fnSrc) { function opMod32GrpWordC4(afnGrp, fnSrc) {
var w = afnGrp[0].call(this, this.regESP & this.dataMask, fnSrc.call(this)); var w = afnGrp[0].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod32GrpWordC5(afnGrp, fnSrc): mod=11 (dst:reg) reg=000 (afnGrp[0]) r/m=101 (EBP) * opMod32GrpWordC5(afnGrp, fnSrc): mod=11 (dst:reg) reg=000 (afnGrp[0]) r/m=101 (EBP)
@ -8629,8 +8629,8 @@ X86ModW32.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opMod32GrpWordCC(afnGrp, fnSrc) { function opMod32GrpWordCC(afnGrp, fnSrc) {
var w = afnGrp[1].call(this, this.regESP & this.dataMask, fnSrc.call(this)); var w = afnGrp[1].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod32GrpWordCD(afnGrp, fnSrc): mod=11 (dst:reg) reg=001 (afnGrp[1]) r/m=101 (EBP) * opMod32GrpWordCD(afnGrp, fnSrc): mod=11 (dst:reg) reg=001 (afnGrp[1]) r/m=101 (EBP)
@ -8738,8 +8738,8 @@ X86ModW32.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opMod32GrpWordD4(afnGrp, fnSrc) { function opMod32GrpWordD4(afnGrp, fnSrc) {
var w = afnGrp[2].call(this, this.regESP & this.dataMask, fnSrc.call(this)); var w = afnGrp[2].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod32GrpWordD5(afnGrp, fnSrc): mod=11 (dst:reg) reg=010 (afnGrp[2]) r/m=101 (EBP) * opMod32GrpWordD5(afnGrp, fnSrc): mod=11 (dst:reg) reg=010 (afnGrp[2]) r/m=101 (EBP)
@ -8847,8 +8847,8 @@ X86ModW32.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opMod32GrpWordDC(afnGrp, fnSrc) { function opMod32GrpWordDC(afnGrp, fnSrc) {
var w = afnGrp[3].call(this, this.regESP & this.dataMask, fnSrc.call(this)); var w = afnGrp[3].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod32GrpWordDD(afnGrp, fnSrc): mod=11 (dst:reg) reg=011 (afnGrp[3]) r/m=101 (EBP) * opMod32GrpWordDD(afnGrp, fnSrc): mod=11 (dst:reg) reg=011 (afnGrp[3]) r/m=101 (EBP)
@ -8956,8 +8956,8 @@ X86ModW32.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opMod32GrpWordE4(afnGrp, fnSrc) { function opMod32GrpWordE4(afnGrp, fnSrc) {
var w = afnGrp[4].call(this, this.regESP & this.dataMask, fnSrc.call(this)); var w = afnGrp[4].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod32GrpWordE5(afnGrp, fnSrc): mod=11 (dst:reg) reg=100 (afnGrp[4]) r/m=101 (EBP) * opMod32GrpWordE5(afnGrp, fnSrc): mod=11 (dst:reg) reg=100 (afnGrp[4]) r/m=101 (EBP)
@ -9065,8 +9065,8 @@ X86ModW32.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opMod32GrpWordEC(afnGrp, fnSrc) { function opMod32GrpWordEC(afnGrp, fnSrc) {
var w = afnGrp[5].call(this, this.regESP & this.dataMask, fnSrc.call(this)); var w = afnGrp[5].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod32GrpWordED(afnGrp, fnSrc): mod=11 (dst:reg) reg=101 (afnGrp[5]) r/m=101 (EBP) * opMod32GrpWordED(afnGrp, fnSrc): mod=11 (dst:reg) reg=101 (afnGrp[5]) r/m=101 (EBP)
@ -9174,8 +9174,8 @@ X86ModW32.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opMod32GrpWordF4(afnGrp, fnSrc) { function opMod32GrpWordF4(afnGrp, fnSrc) {
var w = afnGrp[6].call(this, this.regESP & this.dataMask, fnSrc.call(this)); var w = afnGrp[6].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod32GrpWordF5(afnGrp, fnSrc): mod=11 (dst:reg) reg=110 (afnGrp[6]) r/m=101 (EBP) * opMod32GrpWordF5(afnGrp, fnSrc): mod=11 (dst:reg) reg=110 (afnGrp[6]) r/m=101 (EBP)
@ -9283,8 +9283,8 @@ X86ModW32.aOpModGrp = [
* @param {function()} fnSrc * @param {function()} fnSrc
*/ */
function opMod32GrpWordFC(afnGrp, fnSrc) { function opMod32GrpWordFC(afnGrp, fnSrc) {
var w = afnGrp[7].call(this, this.regESP & this.dataMask, fnSrc.call(this)); var w = afnGrp[7].call(this, this.getSP() & this.dataMask, fnSrc.call(this));
this.regESP = (this.regESP & ~this.dataMask) | w; this.setSP((this.getSP() & ~this.dataMask) | w);
}, },
/** /**
* opMod32GrpWordFD(afnGrp, fnSrc): mod=11 (dst:reg) reg=111 (afnGrp[7]) r/m=101 (EBP) * 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.regEDI = this.getShort(0x826);
this.regESI = this.getShort(0x828); this.regESI = this.getShort(0x828);
this.regEBP = this.getShort(0x82A); this.regEBP = this.getShort(0x82A);
this.regESP = this.getShort(0x82C);
this.regEBX = this.getShort(0x82E); this.regEBX = this.getShort(0x82E);
this.regEDX = this.getShort(0x830); this.regEDX = this.getShort(0x830);
this.regECX = this.getShort(0x832); this.regECX = this.getShort(0x832);
@ -142,14 +141,24 @@ var X86Op0F = {
this.segSS.loadDesc6(0x842, this.getShort(0x820)); this.segSS.loadDesc6(0x842, this.getShort(0x820));
this.segDS.loadDesc6(0x848, this.getShort(0x81E)); this.segDS.loadDesc6(0x848, this.getShort(0x81E));
this.setPS(this.getShort(0x818)); 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.addrGDTLimit = this.addrGDT + this.getShort(0x852);
this.segLDT.loadDesc6(0x854, this.getShort(0x81C)); 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.addrIDTLimit = this.addrIDT + this.getShort(0x85E);
this.segTSS.loadDesc6(0x860, this.getShort(0x816)); this.segTSS.loadDesc6(0x860, this.getShort(0x816));
this.nStepCycles -= 195; this.nStepCycles -= 195;

View file

@ -834,9 +834,9 @@ var X86OpXX = {
* @this {X86CPU} * @this {X86CPU}
*/ */
opINCSP: function() { opINCSP: function() {
this.resultAuxOverflow = this.regESP; this.resultAuxOverflow = this.getSP();
this.regESP = (this.regESP & ~this.dataMask) | (this.resultParitySign = this.regESP + 1) & this.dataMask; this.setSP((this.resultAuxOverflow & ~this.dataMask) | (this.resultParitySign = this.resultAuxOverflow + 1) & this.dataMask);
this.resultValue = this.regESP | (((this.resultValue & this.resultSize)? 1 : 0) << 16); this.resultValue = this.getSP() | (((this.resultValue & this.resultSize)? 1 : 0) << 16);
this.resultSize = X86.RESULT.SIZE_WORD; this.resultSize = X86.RESULT.SIZE_WORD;
this.nStepCycles -= 2; // this form of INC takes 2 cycles on all CPUs this.nStepCycles -= 2; // this form of INC takes 2 cycles on all CPUs
}, },
@ -930,9 +930,9 @@ var X86OpXX = {
* @this {X86CPU} * @this {X86CPU}
*/ */
opDECSP: function() { opDECSP: function() {
this.resultAuxOverflow = this.regESP; this.resultAuxOverflow = this.getSP();
this.regESP = (this.regESP & ~this.dataMask) | (this.resultParitySign = this.regESP - 1) & this.dataMask; this.setSP((this.resultAuxOverflow & ~this.dataMask) | (this.resultParitySign = this.resultAuxOverflow - 1) & this.dataMask);
this.resultValue = this.regESP | (((this.resultValue & this.resultSize)? 1 : 0) << 16); this.resultValue = this.getSP() | (((this.resultValue & this.resultSize)? 1 : 0) << 16);
this.resultSize = X86.RESULT.SIZE_WORD; this.resultSize = X86.RESULT.SIZE_WORD;
this.nStepCycles -= 2; // this form of DEC takes 2 cycles on all CPUs this.nStepCycles -= 2; // this form of DEC takes 2 cycles on all CPUs
}, },
@ -1026,7 +1026,7 @@ var X86OpXX = {
* @this {X86CPU} * @this {X86CPU}
*/ */
opPUSHSP8086: function() { opPUSHSP8086: function() {
var w = (this.regESP - this.dataSize) & this.dataMask; var w = (this.getSP() - this.dataSize) & this.dataMask;
this.pushWord(w); this.pushWord(w);
this.nStepCycles -= this.CYCLES.nOpCyclesPushReg; this.nStepCycles -= this.CYCLES.nOpCyclesPushReg;
}, },
@ -1036,7 +1036,7 @@ var X86OpXX = {
* @this {X86CPU} * @this {X86CPU}
*/ */
opPUSHSP: function() { opPUSHSP: function() {
this.pushWord(this.regESP & this.dataMask); this.pushWord(this.getSP() & this.dataMask);
this.nStepCycles -= this.CYCLES.nOpCyclesPushReg; this.nStepCycles -= this.CYCLES.nOpCyclesPushReg;
}, },
/** /**
@ -1129,7 +1129,7 @@ var X86OpXX = {
* @this {X86CPU} * @this {X86CPU}
*/ */
opPOPSP: function() { opPOPSP: function() {
this.regESP = (this.regESP & ~this.dataMask) | this.popWord(); this.setSP((this.getSP() & ~this.dataMask) | this.popWord());
this.nStepCycles -= this.CYCLES.nOpCyclesPopReg; this.nStepCycles -= this.CYCLES.nOpCyclesPopReg;
}, },
/** /**
@ -1174,7 +1174,10 @@ var X86OpXX = {
* @this {X86CPU} * @this {X86CPU}
*/ */
opPUSHA: function() { 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) { if (BACKTRACK) {
this.backTrack.btiMemLo = this.backTrack.btiAL; this.backTrack.btiMemHi = this.backTrack.btiAH; this.backTrack.btiMemLo = this.backTrack.btiAL; this.backTrack.btiMemHi = this.backTrack.btiAH;
} }
@ -1224,7 +1227,11 @@ var X86OpXX = {
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiBPLo = this.backTrack.btiMemLo; this.backTrack.btiBPHi = this.backTrack.btiMemHi; 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(); this.regEBX = (this.regEBX & ~this.dataMask) | this.popWord();
if (BACKTRACK) { if (BACKTRACK) {
this.backTrack.btiBL = this.backTrack.btiMemLo; this.backTrack.btiBH = this.backTrack.btiMemHi; this.backTrack.btiBL = this.backTrack.btiMemLo; this.backTrack.btiBH = this.backTrack.btiMemHi;
@ -1942,7 +1949,7 @@ var X86OpXX = {
temp = this.regECX; temp = this.regECX;
break; 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 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; 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 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; temp = this.regEBP;
@ -1977,8 +1984,8 @@ var X86OpXX = {
this.regEBX = temp; this.regEBX = temp;
break; break;
case 0x4: case 0x4:
this.setES(this.regESP); this.setES(this.getSP());
this.regESP = temp; this.setSP(temp);
break; break;
case 0x5: case 0x5:
this.setCS(this.regEBP); this.setCS(this.regEBP);
@ -2068,8 +2075,9 @@ var X86OpXX = {
*/ */
opXCHGSP: function() { opXCHGSP: function() {
var temp = this.regEAX; var temp = this.regEAX;
this.regEAX = (this.regEAX & ~this.dataMask) | (this.regESP & this.dataMask); var regESP = this.getSP();
this.regESP = (this.regESP & ~this.dataMask) | (temp & this.dataMask); 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; if (BACKTRACK) this.backTrack.btiAL = this.backTrack.btiAH = 0;
this.nStepCycles -= 3; // this form of XCHG takes 3 cycles on all CPUs this.nStepCycles -= 3; // this form of XCHG takes 3 cycles on all CPUs
}, },
@ -2851,7 +2859,7 @@ var X86OpXX = {
* @this {X86CPU} * @this {X86CPU}
*/ */
opMOVSPw: function() { opMOVSPw: function() {
this.regESP = (this.regESP & ~this.dataMask) | this.getIPWord(); this.setSP((this.getSP() & ~this.dataMask) | this.getIPWord());
this.nStepCycles -= this.CYCLES.nOpCyclesLAHF; this.nStepCycles -= this.CYCLES.nOpCyclesLAHF;
}, },
/** /**
@ -2912,9 +2920,9 @@ var X86OpXX = {
* @this {X86CPU} * @this {X86CPU}
*/ */
opRETn: function() { opRETn: function() {
var n = this.getIPWord(); var n = this.getIPWord() << (this.dataSize >> 2);
this.setIP(this.popWord()); 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; this.nStepCycles -= this.CYCLES.nOpCyclesRetn;
}, },
/** /**
@ -3004,7 +3012,7 @@ var X86OpXX = {
*/ */
this.nStepCycles -= 11; this.nStepCycles -= 11;
this.pushWord(this.regEBP); this.pushWord(this.regEBP);
var wFrame = this.regESP & this.segSS.addrMask; var wFrame = this.getSP() & this.segSS.addrMask;
if (bLevel > 0) { if (bLevel > 0) {
this.nStepCycles -= (bLevel << 2) + (bLevel > 1? 1 : 0); this.nStepCycles -= (bLevel << 2) + (bLevel > 1? 1 : 0);
while (--bLevel) { while (--bLevel) {
@ -3014,7 +3022,7 @@ var X86OpXX = {
this.pushWord(wFrame); this.pushWord(wFrame);
} }
this.regEBP = (this.regEBP & ~this.segSS.addrMask) | 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) * op=0xC9 (LEAVE) (80186/80188 and up)
@ -3024,7 +3032,7 @@ var X86OpXX = {
* @this {X86CPU} * @this {X86CPU}
*/ */
opLEAVE: function() { 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); 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 * 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_CX, cpu.regECX);
cpu.setShort(addrOld + X86.TSS.TASK_DX, cpu.regEDX); cpu.setShort(addrOld + X86.TSS.TASK_DX, cpu.regEDX);
cpu.setShort(addrOld + X86.TSS.TASK_BX, cpu.regEBX); 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_BP, cpu.regEBP);
cpu.setShort(addrOld + X86.TSS.TASK_SI, cpu.regESI); cpu.setShort(addrOld + X86.TSS.TASK_SI, cpu.regESI);
cpu.setShort(addrOld + X86.TSS.TASK_DI, cpu.regEDI); 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; offSP = (this.cpl << 2) + X86.TSS.CPL0_SP;
offSS = offSP + 2; offSS = offSP + 2;
} }
cpu.regESP = cpu.getShort(addrNew + offSP); cpu.setSS(cpu.getShort(addrNew + offSS)); // TODO: Do we care that cpu.setSS() -- unlike segSS.load() -- will also set X86.OPFLAG.NOINTR?
cpu.segSS.load(cpu.getShort(addrNew + offSS)); cpu.setSP(cpu.getShort(addrNew + offSP));
cpu.segLDT.load(cpu.getShort(addrNew + X86.TSS.TASK_LDT)); cpu.segLDT.load(cpu.getShort(addrNew + X86.TSS.TASK_LDT));
if (fNest) cpu.setShort(addrNew + X86.TSS.PREV_TSS, selOld); if (fNest) cpu.setShort(addrNew + X86.TSS.PREV_TSS, selOld);
cpu.regMSW |= X86.MSW.TS; cpu.regMSW |= X86.MSW.TS;
@ -592,8 +592,8 @@ X86Seg.prototype.loadDesc8 = function(addrDesc, sel, fSuppress)
break; break;
} }
regSP = cpu.popWord(); regSP = cpu.popWord();
cpu.segSS.load(cpu.popWord()); cpu.setSS(cpu.popWord()); // TODO: Do we care that cpu.setSS() -- unlike segSS.load() -- will also set X86.OPFLAG.NOINTR?
cpu.regESP = regSP; cpu.setSP(regSP);
this.fStackSwitch = true; this.fStackSwitch = true;
} }
fGate = false; fGate = false;
@ -648,7 +648,7 @@ X86Seg.prototype.loadDesc8 = function(addrDesc, sel, fSuppress)
base = X86.ADDR_INVALID; base = X86.ADDR_INVALID;
break; break;
} }
regSP = cpu.regESP; regSP = cpu.getSP();
var i = 0, nWords = (acc & 0x1f); var i = 0, nWords = (acc & 0x1f);
while (nWords--) { while (nWords--) {
this.awParms[i++] = cpu.getSOWord(cpu.segSS, regSP); this.awParms[i++] = cpu.getSOWord(cpu.segSS, regSP);
@ -657,10 +657,10 @@ X86Seg.prototype.loadDesc8 = function(addrDesc, sel, fSuppress)
addrTSS = cpu.segTSS.base; addrTSS = cpu.segTSS.base;
offSP = (this.cpl << 2) + X86.TSS.CPL0_SP; offSP = (this.cpl << 2) + X86.TSS.CPL0_SP;
offSS = offSP + 2; offSS = offSP + 2;
regSPPrev = cpu.regESP; regSSPrev = cpu.getSS();
regSSPrev = cpu.segSS.sel; regSPPrev = cpu.getSP();
cpu.regESP = cpu.getShort(addrTSS + offSP); cpu.setSS(cpu.getShort(addrTSS + offSS)); // TODO: Do we care that cpu.setSS() -- unlike segSS.load() -- will also set X86.OPFLAG.NOINTR?
cpu.segSS.load(cpu.getShort(addrTSS + offSS)); cpu.setSP(cpu.getShort(addrTSS + offSP));
cpu.pushWord(regSSPrev); cpu.pushWord(regSSPrev);
cpu.pushWord(regSPPrev); cpu.pushWord(regSPPrev);
while (i) cpu.pushWord(this.awParms[--i]); 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