mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-11 15:22:16 +00:00
This commit is contained in:
commit
fb301d5996
2 changed files with 26 additions and 20 deletions
|
@ -11,21 +11,21 @@
|
||||||
|
|
||||||
#if COMPGOTO
|
#if COMPGOTO
|
||||||
#define OP(x) x
|
#define OP(x) x
|
||||||
#define NEXTOP do { unsigned op = pc->op; a = pc->a; pc++; goto *ops[op]; } while(0)
|
#define NEXTOP do { pc++; unsigned op = pc->op; a = pc->a; goto *ops[op]; } while(0)
|
||||||
#else
|
#else
|
||||||
#define OP(x) case OP_##x
|
#define OP(x) case OP_##x
|
||||||
#define NEXTOP break
|
#define NEXTOP pc++; break
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define luai_nummod(a,b) ((a) - floor((a)/(b))*(b))
|
#define luai_nummod(a,b) ((a) - floor((a)/(b))*(b))
|
||||||
|
|
||||||
#define A (pc[-1].a)
|
#define A (pc[0].a)
|
||||||
#define B (pc[-1].b)
|
#define B (pc[0].b)
|
||||||
#define C (pc[-1].c)
|
#define C (pc[0].c)
|
||||||
#define Cs (pc[-1].cs)
|
#define Cs (pc[0].cs)
|
||||||
#define BC (pc[-1].i16u)
|
#define BC (pc[0].i16u)
|
||||||
#define BCs (pc[-1].i16)
|
#define BCs (pc[0].i16)
|
||||||
#define ABCs (pc[-1].i24)
|
#define ABCs (pc[0].i24)
|
||||||
#define JMPOFS(x) ((x)->i24)
|
#define JMPOFS(x) ((x)->i24)
|
||||||
|
|
||||||
#define KC (konstd[C])
|
#define KC (konstd[C])
|
||||||
|
@ -48,8 +48,8 @@
|
||||||
|
|
||||||
#define CMPJMP(test) \
|
#define CMPJMP(test) \
|
||||||
if ((test) == (a & CMP_CHECK)) { \
|
if ((test) == (a & CMP_CHECK)) { \
|
||||||
assert(pc->op == OP_JMP); \
|
assert(pc[1].op == OP_JMP); \
|
||||||
pc += 1 + JMPOFS(pc); \
|
pc += 1 + JMPOFS(pc+1); \
|
||||||
} else { \
|
} else { \
|
||||||
pc += 1; \
|
pc += 1; \
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,11 +52,17 @@ begin:
|
||||||
{
|
{
|
||||||
#if !COMPGOTO
|
#if !COMPGOTO
|
||||||
VM_UBYTE op;
|
VM_UBYTE op;
|
||||||
for(;;) switch(op = pc->op, a = pc->a, pc++, op)
|
for(;;) switch(op = pc->op, a = pc->a, op)
|
||||||
#else
|
#else
|
||||||
|
pc--;
|
||||||
NEXTOP;
|
NEXTOP;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
#if !COMPGOTO
|
||||||
|
default:
|
||||||
|
assert(0 && "Undefined opcode hit");
|
||||||
|
NEXTOP;
|
||||||
|
#endif
|
||||||
OP(LI):
|
OP(LI):
|
||||||
ASSERTD(a);
|
ASSERTD(a);
|
||||||
reg.d[a] = BCs;
|
reg.d[a] = BCs;
|
||||||
|
@ -367,13 +373,13 @@ begin:
|
||||||
}
|
}
|
||||||
NEXTOP;
|
NEXTOP;
|
||||||
OP(JMP):
|
OP(JMP):
|
||||||
pc += JMPOFS(pc - 1);
|
pc += JMPOFS(pc);
|
||||||
NEXTOP;
|
NEXTOP;
|
||||||
OP(IJMP):
|
OP(IJMP):
|
||||||
ASSERTD(a);
|
ASSERTD(a);
|
||||||
pc += (BCs + reg.d[a]);
|
pc += (BCs + reg.d[a]);
|
||||||
assert(pc->op == OP_JMP);
|
assert(pc[1].op == OP_JMP);
|
||||||
pc += 1 + JMPOFS(pc);
|
pc += 1 + JMPOFS(pc+1);
|
||||||
NEXTOP;
|
NEXTOP;
|
||||||
OP(PARAMI):
|
OP(PARAMI):
|
||||||
assert(f->NumParam < sfunc->MaxParam);
|
assert(f->NumParam < sfunc->MaxParam);
|
||||||
|
@ -490,7 +496,7 @@ begin:
|
||||||
VMReturn returns[MAX_RETURNS];
|
VMReturn returns[MAX_RETURNS];
|
||||||
int numret;
|
int numret;
|
||||||
|
|
||||||
FillReturns(reg, f, returns, pc, C);
|
FillReturns(reg, f, returns, pc+1, C);
|
||||||
if (call->Native)
|
if (call->Native)
|
||||||
{
|
{
|
||||||
numret = static_cast<VMNativeFunction *>(call)->NativeCall(stack, reg.param + f->NumParam - B, B, returns, C);
|
numret = static_cast<VMNativeFunction *>(call)->NativeCall(stack, reg.param + f->NumParam - B, B, returns, C);
|
||||||
|
@ -603,8 +609,8 @@ begin:
|
||||||
{
|
{
|
||||||
THROW(X_TOO_MANY_TRIES);
|
THROW(X_TOO_MANY_TRIES);
|
||||||
}
|
}
|
||||||
assert((pc + JMPOFS(pc - 1))->op == OP_CATCH);
|
assert((pc + JMPOFS(pc) + 1)->op == OP_CATCH);
|
||||||
exception_frames[try_depth++] = pc + JMPOFS(pc - 1);
|
exception_frames[try_depth++] = pc + JMPOFS(pc) + 1;
|
||||||
NEXTOP;
|
NEXTOP;
|
||||||
OP(UNTRY):
|
OP(UNTRY):
|
||||||
assert(a <= try_depth);
|
assert(a <= try_depth);
|
||||||
|
@ -704,8 +710,8 @@ begin:
|
||||||
}
|
}
|
||||||
if (cmp == (a & CMP_CHECK))
|
if (cmp == (a & CMP_CHECK))
|
||||||
{
|
{
|
||||||
assert(pc->op == OP_JMP);
|
assert(pc[1].op == OP_JMP);
|
||||||
pc += 1 + JMPOFS(pc);
|
pc += 1 + JMPOFS(pc+1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue