From 3c0a38d47a890ece201dc94b42e37777dfb36a54 Mon Sep 17 00:00:00 2001 From: terminx Date: Sun, 3 Mar 2019 11:15:01 +0000 Subject: [PATCH] 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 --- source/duke3d/src/gamedef.cpp | 12 ++++++------ source/duke3d/src/gamedef.h | 9 +++++---- source/duke3d/src/gameexec.cpp | 27 ++++++++++++--------------- 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/source/duke3d/src/gamedef.cpp b/source/duke3d/src/gamedef.cpp index f06a30ee7..3b2c5a0a9 100644 --- a/source/duke3d/src/gamedef.cpp +++ b/source/duke3d/src/gamedef.cpp @@ -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); diff --git a/source/duke3d/src/gamedef.h b/source/duke3d/src/gamedef.h index eb2e567d9..548d2d071 100644 --- a/source/duke3d/src/gamedef.h +++ b/source/duke3d/src/gamedef.h @@ -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 \ diff --git a/source/duke3d/src/gameexec.cpp b/source/duke3d/src/gameexec.cpp index dc39d8550..3d49cd8d3 100644 --- a/source/duke3d/src/gameexec.cpp +++ b/source/duke3d/src/gameexec.cpp @@ -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);