Rename "INCOMPLETE_STRUCT_ACCESS" to CON_DISCRETE_VAR_ACCESS as it was neither incomplete nor anything to do with access to structs

However, it's remaining disabled because even with the new dispatch method it still doesn't improve performance any.

git-svn-id: https://svn.eduke32.com/eduke32@7382 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
terminx 2019-03-03 11:15:01 +00:00
parent 35b208eeab
commit 3c0a38d47a
3 changed files with 23 additions and 25 deletions

View file

@ -676,6 +676,7 @@ static const vec2_t varvartable[] =
{ CON_XORVARVAR, CON_XORVAR },
};
#ifdef CON_DISCRETE_VAR_ACCESS
static const vec2_t globalvartable[] =
{
{ CON_IFVARA, CON_IFVARA_GLOBAL },
@ -710,7 +711,6 @@ static const vec2_t globalvartable[] =
{ CON_XORVAR, CON_XORVAR_GLOBAL },
};
#ifdef INCOMPLETE_STRUCT_ACCESS
static const vec2_t playervartable[] =
{
{ CON_IFVARA, CON_IFVARA_PLAYER },
@ -781,16 +781,16 @@ static const vec2_t actorvartable[] =
#endif
static inthashtable_t h_varvar = { NULL, INTHASH_SIZE(ARRAY_SIZE(varvartable)) };
#ifdef CON_DISCRETE_VAR_ACCESS
static inthashtable_t h_globalvar = { NULL, INTHASH_SIZE(ARRAY_SIZE(globalvartable)) };
#ifdef INCOMPLETE_STRUCT_ACCESS
static inthashtable_t h_playervar = { NULL, INTHASH_SIZE(ARRAY_SIZE(playervartable)) };
static inthashtable_t h_actorvar = { NULL, INTHASH_SIZE(ARRAY_SIZE(actorvartable)) };
#endif
static inthashtable_t *const inttables[] = {
&h_varvar,
#ifdef CON_DISCRETE_VAR_ACCESS
&h_globalvar,
#ifdef INCOMPLETE_STRUCT_ACCESS
&h_playervar,
&h_actorvar,
#endif
@ -2442,6 +2442,7 @@ static void scriptUpdateOpcodeForVariableType(intptr_t *ins)
{
int opcode = -1;
#ifdef CON_DISCRETE_VAR_ACCESS
if (ins[1] < MAXGAMEVARS)
{
switch (aGameVars[ins[1] & (MAXGAMEVARS - 1)].flags & (GAMEVAR_USER_MASK | GAMEVAR_PTR_MASK))
@ -2449,16 +2450,15 @@ static void scriptUpdateOpcodeForVariableType(intptr_t *ins)
case 0:
opcode = inthash_find(&h_globalvar, *ins & VM_INSTMASK);
break;
#ifdef INCOMPLETE_STRUCT_ACCESS
case GAMEVAR_PERACTOR:
opcode = inthash_find(&h_actorvar, *ins & VM_INSTMASK);
break;
case GAMEVAR_PERPLAYER:
opcode = inthash_find(&h_playervar, *ins & VM_INSTMASK);
break;
#endif
}
}
#endif
if (opcode != -1)
{
@ -6158,10 +6158,10 @@ void scriptInitTables()
for (auto &varvar : varvartable)
inthash_add(&h_varvar, varvar.x, varvar.y, 0);
#ifdef CON_DISCRETE_VAR_ACCESS
for (auto &globalvar : globalvartable)
inthash_add(&h_globalvar, globalvar.x, globalvar.y, 0);
#ifdef INCOMPLETE_STRUCT_ACCESS
for (auto &playervar : playervartable)
inthash_add(&h_playervar, playervar.x, playervar.y, 0);

View file

@ -23,6 +23,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#ifndef gamedef_h_
#define gamedef_h_
// #define CON_DISCRETE_VAR_ACCESS
#include "actors.h"
#include "build.h" // hashtable_t
#include "cheats.h"
@ -846,7 +848,8 @@ enum IterationTypes_t
// most keywords have opcodes but some opcodes don't have keywords
#define TRANSFORM_SCRIPT_KEYWORDS_LIST(TRANSFORM, DELIMITER) \
\
/* CON_DISCRETE_VAR_ACCESS \
TRANSFORM(CON_IFVARA_GLOBAL) DELIMITER \
TRANSFORM(CON_IFVARAE_GLOBAL) DELIMITER \
TRANSFORM(CON_IFVARAND_GLOBAL) DELIMITER \
@ -878,7 +881,6 @@ enum IterationTypes_t
TRANSFORM(CON_WHILEVARN_GLOBAL) DELIMITER \
TRANSFORM(CON_XORVAR_GLOBAL) DELIMITER \
\
/* INCOMPLETE_STRUCT_ACCESS
TRANSFORM(CON_IFVARA_PLAYER) DELIMITER \
TRANSFORM(CON_IFVARAE_PLAYER) DELIMITER \
TRANSFORM(CON_IFVARAND_PLAYER) DELIMITER \
@ -940,8 +942,7 @@ enum IterationTypes_t
TRANSFORM(CON_WHILEVARL_ACTOR) DELIMITER \
TRANSFORM(CON_WHILEVARN_ACTOR) DELIMITER \
TRANSFORM(CON_XORVAR_ACTOR) DELIMITER \
*/ \
\
*/ \
TRANSFORM(CON_IFVARVARA) DELIMITER \
TRANSFORM(CON_IFVARVARAE) DELIMITER \
TRANSFORM(CON_IFVARVARAND) DELIMITER \

View file

@ -1270,6 +1270,7 @@ void Screen_Play(void)
#if defined __GNUC__ || defined __clang__
# define CON_DIRECT_THREADING_DISPATCH
#endif
#ifdef CON_DIRECT_THREADING_DISPATCH
# define vInstruction(KEYWORDID) VINST_ ## KEYWORDID
# define eval(INSTRUCTION) {if ((unsigned)INSTRUCTION <= CON_OPCODE_END) {goto *jumpTable[INSTRUCTION];} goto VINST_CON_OPCODE_END;}
@ -1343,7 +1344,16 @@ GAMEEXEC_STATIC void VM_Execute(native_t const poop)
dispatch_unconditionally();
}
#endif
vInstruction(CON_STATE):
{
auto tempscrptr = &insptr[2];
insptr = (intptr_t *)insptr[1];
VM_Execute(1);
insptr = tempscrptr;
}
dispatch();
#ifdef CON_DISCRETE_VAR_ACCESS
vInstruction(CON_IFVARE_GLOBAL):
insptr++;
tw = aGameVars[*insptr++].global;
@ -1465,16 +1475,7 @@ GAMEEXEC_STATIC void VM_Execute(native_t const poop)
aGameVars[*insptr].global >>= insptr[1];
insptr += 2;
dispatch();
vInstruction(CON_STATE):
{
auto tempscrptr = &insptr[2];
insptr = (intptr_t *)insptr[1];
VM_Execute(1);
insptr = tempscrptr;
}
dispatch();
#ifdef INCOMPLETE_STRUCT_ACCESS
vInstruction(CON_IFVARE_ACTOR):
insptr++;
tw = aGameVars[*insptr++].pValues[vm.spriteNum & (MAXSPRITES-1)];
@ -1718,7 +1719,6 @@ GAMEEXEC_STATIC void VM_Execute(native_t const poop)
aGameVars[*insptr].pValues[vm.playerNum & (MAXPLAYERS-1)] >>= insptr[1];
insptr += 2;
dispatch();
#endif
vInstruction(CON_WHILEVARN_GLOBAL):
{
@ -1744,7 +1744,6 @@ GAMEEXEC_STATIC void VM_Execute(native_t const poop)
dispatch();
}
#ifdef INCOMPLETE_STRUCT_ACCESS
vInstruction(CON_WHILEVARN_ACTOR):
{
auto const savedinsptr = &insptr[2];
@ -1800,14 +1799,12 @@ GAMEEXEC_STATIC void VM_Execute(native_t const poop)
dispatch();
}
#endif
vInstruction(CON_MODVAR_GLOBAL):
insptr++;
aGameVars[*insptr].global %= insptr[1];
insptr += 2;
dispatch();
#ifdef INCOMPLETE_STRUCT_ACCESS
vInstruction(CON_MODVAR_ACTOR):
insptr++;
aGameVars[*insptr].pValues[vm.spriteNum & (MAXSPRITES-1)] %= insptr[1];
@ -1963,13 +1960,13 @@ GAMEEXEC_STATIC void VM_Execute(native_t const poop)
Gv_MulVar(tw, Gv_GetVarX(*insptr++));
dispatch();
#ifdef CON_DISCRETE_VAR_ACCESS
vInstruction(CON_DIVVAR_GLOBAL):
insptr++;
aGameVars[*insptr].global = tabledivide32(aGameVars[*insptr].global, insptr[1]);
insptr += 2;
dispatch();
#ifdef INCOMPLETE_STRUCT_ACCESS
vInstruction(CON_DIVVAR_PLAYER):
{
insptr++;
@ -2281,13 +2278,13 @@ GAMEEXEC_STATIC void VM_Execute(native_t const poop)
insptr += 2;
dispatch();
#ifdef CON_DISCRETE_VAR_ACCESS
vInstruction(CON_RANDVAR_GLOBAL):
insptr++;
aGameVars[*insptr].global = mulscale16(krand(), insptr[1] + 1);
insptr += 2;
dispatch();
#ifdef INCOMPLETE_STRUCT_ACCESS
vInstruction(CON_RANDVAR_PLAYER):
insptr++;
aGameVars[*insptr].pValues[vm.playerNum & (MAXPLAYERS-1)] = mulscale16(krand(), insptr[1] + 1);