-branch, implemented "goto"

-branch, added a new jit opcode -- 165/op.stackadjust(1), stk = frm+n

--HG--
branch : sourcemod-1.1.0
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/branches/sourcemod-1.1.0%401937
This commit is contained in:
David Anderson
2008-03-13 17:08:05 +00:00
parent a64894bbe4
commit bb85c5eda2
6 changed files with 65 additions and 35 deletions
+3 -12
View File
@@ -854,19 +854,10 @@ SC_FUNC void modstk(int delta)
/* set the stack to a hard offset from the frame */
SC_FUNC void setstk(cell value)
{
stgwrite("\tlctrl 5\n"); /* get FRM in PRI */
stgwrite("\tstackadjust ");
assert(value<=0); /* STK should always become <= FRM */
if (value<0) {
stgwrite("\tadd.c ");
outval(value, TRUE); /* add (negative) offset */
code_idx+=opcodes(1)+opargs(1);
// ??? write zeros in the space between STK and the value in PRI (the new stk)
// get value of STK in ALT
// zero PRI
// need new FILL opcode that takes a variable size
} /* if */
stgwrite("\tsctrl 4\n"); /* store in STK */
code_idx+=opcodes(2)+opargs(2);
outval(value, TRUE); /* add (negative) offset */
code_idx+=opcodes(1)+opargs(1);
}
SC_FUNC void modheap(int delta)
+1
View File
@@ -596,6 +596,7 @@ static OPCODEC opcodelist[] = {
{ 21, "sref.s.pri", sIN_CSEG, parm1 },
{ 67, "sshr", sIN_CSEG, parm0 },
{ 44, "stack", sIN_CSEG, parm1 },
{165, "stackadjust",sIN_CSEG, parm1 },
{ 0, "stksize", 0, noop },
{ 16, "stor.alt", sIN_CSEG, parm1 },
{ 23, "stor.i", sIN_CSEG, parm0 },