From 7659e816fa746318fae1693a4a1fa5df9341d4c3 Mon Sep 17 00:00:00 2001 From: terminx Date: Sun, 19 May 2019 03:54:56 +0000 Subject: [PATCH] CON_USE_COMPUTED_GOTO eval macro micro-optimization This is almost as fast as ditching the bounds check here entirely. git-svn-id: https://svn.eduke32.com/eduke32@7657 1a8010ca-5511-0410-912e-c29ae57300e0 --- source/duke3d/src/gameexec.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/duke3d/src/gameexec.cpp b/source/duke3d/src/gameexec.cpp index c48e7f5fc..69d8a167e 100644 --- a/source/duke3d/src/gameexec.cpp +++ b/source/duke3d/src/gameexec.cpp @@ -1264,7 +1264,7 @@ void Screen_Play(void) #ifdef CON_USE_COMPUTED_GOTO # define vInstruction(KEYWORDID) VINST_ ## KEYWORDID # define vmErrorCase VINST_CON_OPCODE_END -# define eval(INSTRUCTION) { if ((unsigned)INSTRUCTION < CON_OPCODE_END) goto *jumpTable[INSTRUCTION]; else goto vmErrorCase; } +# define eval(INSTRUCTION) { goto *jumpTable[min((unsigned)INSTRUCTION, CON_OPCODE_END)]; } # define dispatch_unconditionally(...) { tw = *insptr; g_errorLineNum = tw >> 12; g_tw = tw &= VM_INSTMASK; eval(tw) } # define dispatch(...) { if (vm_execution_depth && (vm.flags & (VM_RETURN|VM_KILL|VM_NOEXECUTE)) == 0) dispatch_unconditionally(__VA_ARGS__); return; } # define abort_after_error(...) return