]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - prvm_exec.c
use dynamic eye position-centered bouncegrid when rendering in dynamic
[xonotic/darkplaces.git] / prvm_exec.c
index a4f529c27c379f423cd470861899885f4db1d451..ca1c191cb04c6835578a2ce421aec3fe60d1e385 100644 (file)
@@ -21,7 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #include "quakedef.h"
 #include "progsvm.h"
 
-char *prvm_opnames[] =
+const char *prvm_opnames[] =
 {
 "^5DONE",
 
@@ -112,6 +112,7 @@ char *prvm_opnames[] =
 
 char *PRVM_GlobalString (int ofs);
 char *PRVM_GlobalStringNoContents (int ofs);
+extern ddef_t *PRVM_ED_FieldAtOfs(int ofs);
 
 
 //=============================================================================
@@ -122,6 +123,7 @@ PRVM_PrintStatement
 =================
 */
 extern cvar_t prvm_statementprofiling;
+extern cvar_t prvm_timeprofiling;
 void PRVM_PrintStatement (dstatement_t *s)
 {
        size_t i;
@@ -211,7 +213,7 @@ void PRVM_PrintFunctionStatements (const char *name)
                        endstatement = prog->functions[i].first_statement;
 
        // now print the range of statements
-       Con_Printf("%s progs: disassembly of function %s (statements %i-%i):\n", PRVM_NAME, name, firststatement, endstatement);
+       Con_Printf("%s progs: disassembly of function %s (statements %i-%i, locals %i-%i):\n", PRVM_NAME, name, firststatement, endstatement, func->parm_start, func->parm_start + func->locals - 1);
        for (i = firststatement;i < endstatement;i++)
        {
                PRVM_PrintStatement(prog->statements + i);
@@ -334,14 +336,21 @@ void PRVM_CallProfile (void)
        prog->starttime = Sys_DoubleTime();
 }
 
-void PRVM_Profile (int maxfunctions, int mininstructions, int sortby)
+void PRVM_Profile (int maxfunctions, double mintime, int sortby)
 {
        mfunction_t *f, *best;
        int i, num;
        double max;
 
-       Con_Printf( "%s Profile:\n[CallCount] [Statement] [BuiltinCt] [StmtTotal] [BltnTotal] [self]\n", PRVM_NAME );
-       //                        12345678901 12345678901 12345678901 12345678901 12345678901 123.45%
+       if(!prvm_timeprofiling.integer)
+               mintime *= 10000000; // count each statement as about 0.1µs
+
+       if(prvm_timeprofiling.integer)
+               Con_Printf( "%s Profile:\n[CallCount]      [Time] [BuiltinTm] [Statement] [BuiltinCt] [TimeTotal] [StmtTotal] [BltnTotal] [self]\n", PRVM_NAME );
+               //                        12345678901 12345678901 12345678901 12345678901 12345678901 12345678901 12345678901 123.45%
+       else
+               Con_Printf( "%s Profile:\n[CallCount] [Statement] [BuiltinCt] [StmtTotal] [BltnTotal] [self]\n", PRVM_NAME );
+               //                        12345678901 12345678901 12345678901 12345678901 12345678901 123.45%
 
        num = 0;
        do
@@ -351,37 +360,84 @@ void PRVM_Profile (int maxfunctions, int mininstructions, int sortby)
                for (i=0 ; i<prog->progs->numfunctions ; i++)
                {
                        f = &prog->functions[i];
-                       if(sortby)
+                       if(prvm_timeprofiling.integer)
                        {
-                               if (max < f->profile_total + f->builtinsprofile_total + f->callcount)
+                               if(sortby)
+                               {
+                                       if(f->first_statement < 0)
+                                       {
+                                               if (max < f->tprofile)
+                                               {
+                                                       max = f->tprofile;
+                                                       best = f;
+                                               }
+                                       }
+                                       else
+                                       {
+                                               if (max < f->tprofile_total)
+                                               {
+                                                       max = f->tprofile_total;
+                                                       best = f;
+                                               }
+                                       }
+                               }
+                               else
                                {
-                                       max = f->profile_total + f->builtinsprofile_total + f->callcount;
-                                       best = f;
+                                       if (max < f->tprofile + f->tbprofile)
+                                       {
+                                               max = f->tprofile + f->tbprofile;
+                                               best = f;
+                                       }
                                }
                        }
                        else
                        {
-                               if (max < f->profile + f->builtinsprofile + f->callcount)
+                               if(sortby)
                                {
-                                       max = f->profile + f->builtinsprofile + f->callcount;
-                                       best = f;
+                                       if (max < f->profile_total + f->builtinsprofile_total + f->callcount)
+                                       {
+                                               max = f->profile_total + f->builtinsprofile_total + f->callcount;
+                                               best = f;
+                                       }
+                               }
+                               else
+                               {
+                                       if (max < f->profile + f->builtinsprofile + f->callcount)
+                                       {
+                                               max = f->profile + f->builtinsprofile + f->callcount;
+                                               best = f;
+                                       }
                                }
                        }
                }
                if (best)
                {
-                       if (num < maxfunctions && max >= mininstructions)
+                       if (num < maxfunctions && max > mintime)
                        {
-                               if (best->first_statement < 0)
-                                       Con_Printf("%11.0f ----------------------- builtin ----------------------- %s\n", best->callcount, PRVM_GetString(best->s_name));
-                                       //                 12345678901 12345678901 12345678901 12345678901 123.45%
+                               if(prvm_timeprofiling.integer)
+                               {
+                                       if (best->first_statement < 0)
+                                               Con_Printf("%11.0f %11.6f ------------- builtin ------------- %11.6f ----------- builtin ----------- %s\n", best->callcount, best->tprofile, best->tprofile, PRVM_GetString(best->s_name));
+                                       //                 %11.6f 12345678901 12345678901 12345678901 %11.6f 12345678901 12345678901 123.45%
+                                       else
+                                               Con_Printf("%11.0f %11.6f %11.6f %11.0f %11.0f %11.6f %11.0f %11.0f %6.2f%% %s\n", best->callcount, best->tprofile, best->tbprofile, best->profile, best->builtinsprofile, best->tprofile_total, best->profile_total, best->builtinsprofile_total, (best->tprofile_total > 0) ? ((best->tprofile) * 100.0 / (best->tprofile_total)) : -99.99, PRVM_GetString(best->s_name));
+                               }
                                else
-                                       Con_Printf("%11.0f %11.0f %11.0f %11.0f %11.0f %6.2f%% %s\n", best->callcount, best->profile, best->builtinsprofile, best->profile_total, best->builtinsprofile_total, (best->profile + best->builtinsprofile) * 100.0 / (best->profile_total + best->builtinsprofile_total), PRVM_GetString(best->s_name));
+                               {
+                                       if (best->first_statement < 0)
+                                               Con_Printf("%11.0f ----------------------- builtin ----------------------- %s\n", best->callcount, PRVM_GetString(best->s_name));
+                                       //                 12345678901 12345678901 12345678901 12345678901 123.45%
+                                       else
+                                               Con_Printf("%11.0f %11.0f %11.0f %11.0f %11.0f %6.2f%% %s\n", best->callcount, best->profile, best->builtinsprofile, best->profile_total, best->builtinsprofile_total, (best->profile + best->builtinsprofile) * 100.0 / (best->profile_total + best->builtinsprofile_total), PRVM_GetString(best->s_name));
+                               }
                        }
                        num++;
                        best->profile = 0;
+                       best->tprofile = 0;
+                       best->tbprofile = 0;
                        best->builtinsprofile = 0;
                        best->profile_total = 0;
+                       best->tprofile_total = 0;
                        best->builtinsprofile_total = 0;
                        best->callcount = 0;
                }
@@ -434,7 +490,7 @@ void PRVM_Profile_f (void)
        if(!PRVM_SetProgFromString(Cmd_Argv(1)))
                return;
 
-       PRVM_Profile(howmany, 1, 0);
+       PRVM_Profile(howmany, 0, 0);
 
        PRVM_End;
 }
@@ -456,7 +512,7 @@ void PRVM_ChildProfile_f (void)
        if(!PRVM_SetProgFromString(Cmd_Argv(1)))
                return;
 
-       PRVM_Profile(howmany, 1, 1);
+       PRVM_Profile(howmany, 0, 1);
 
        PRVM_End;
 }
@@ -553,6 +609,7 @@ int PRVM_EnterFunction (mfunction_t *f)
        prog->stack[prog->depth].s = prog->xstatement;
        prog->stack[prog->depth].f = prog->xfunction;
        prog->stack[prog->depth].profile_acc = -f->profile;
+       prog->stack[prog->depth].tprofile_acc = -f->tprofile + -f->tbprofile;
        prog->stack[prog->depth].builtinsprofile_acc = -f->builtinsprofile;
        prog->depth++;
        if (prog->depth >=PRVM_MAX_STACK_DEPTH)
@@ -613,10 +670,12 @@ int PRVM_LeaveFunction (void)
        --f->recursion;
        prog->xfunction = prog->stack[prog->depth].f;
        prog->stack[prog->depth].profile_acc += f->profile;
+       prog->stack[prog->depth].tprofile_acc += f->tprofile + f->tbprofile;
        prog->stack[prog->depth].builtinsprofile_acc += f->builtinsprofile;
        if(prog->depth > 0)
        {
                prog->stack[prog->depth-1].profile_acc += prog->stack[prog->depth].profile_acc;
+               prog->stack[prog->depth-1].tprofile_acc += prog->stack[prog->depth].tprofile_acc;
                prog->stack[prog->depth-1].builtinsprofile_acc += prog->stack[prog->depth].builtinsprofile_acc;
        }
        if(!f->recursion)
@@ -626,6 +685,7 @@ int PRVM_LeaveFunction (void)
                // or we would add it more than once
                // so, let's only add to the function's profile if it is the outermost call
                f->profile_total += prog->stack[prog->depth].profile_acc;
+               f->tprofile_total += prog->stack[prog->depth].tprofile_acc;
                f->builtinsprofile_total += prog->stack[prog->depth].builtinsprofile_acc;
        }
        
@@ -641,12 +701,6 @@ void PRVM_Init_Exec(void)
        // nothing here yet
 }
 
-/*
-====================
-MVM_ExecuteProgram
-====================
-*/
-// LordHavoc: optimized
 #define OPA ((prvm_eval_t *)&prog->globals.generic[(unsigned short) st->a])
 #define OPB ((prvm_eval_t *)&prog->globals.generic[(unsigned short) st->b])
 #define OPC ((prvm_eval_t *)&prog->globals.generic[(unsigned short) st->c])
@@ -654,7 +708,13 @@ extern cvar_t prvm_traceqc;
 extern cvar_t prvm_statementprofiling;
 extern sizebuf_t vm_tempstringsbuf;
 extern qboolean prvm_runawaycheck;
-extern qboolean prvm_boundscheck;
+
+#ifdef PROFILING
+/*
+====================
+MVM_ExecuteProgram
+====================
+*/
 void MVM_ExecuteProgram (func_t fnum, const char *errormessage)
 {
        dstatement_t    *st, *startst;
@@ -664,6 +724,7 @@ void MVM_ExecuteProgram (func_t fnum, const char *errormessage)
        int             jumpcount, cachedpr_trace, exitdepth;
        int             restorevm_tempstringsbuf_cursize;
        double  calltime;
+       double tm, starttm;
 
        calltime = Sys_DoubleTime();
 
@@ -690,6 +751,7 @@ void MVM_ExecuteProgram (func_t fnum, const char *errormessage)
        // (when the function exits or jumps, the (st - startst) integer value is
        // added to the function's profile counter)
        startst = st;
+       starttm = calltime;
        // instead of counting instructions, we count jumps
        jumpcount = 0;
        // add one to the callcount of this function because otherwise engine-called functions aren't counted
@@ -697,146 +759,38 @@ void MVM_ExecuteProgram (func_t fnum, const char *errormessage)
 
 chooseexecprogram:
        cachedpr_trace = prog->trace;
-       if (prvm_runawaycheck)
+       if (prvm_statementprofiling.integer || prog->trace)
        {
-#define PRVMRUNAWAYCHECK 1
-               if (prvm_statementprofiling.integer)
+#define PRVMSLOWINTERPRETER 1
+               if (prvm_timeprofiling.integer)
                {
-#define PRVMSTATEMENTPROFILING 1
-                       if (prvm_boundscheck)
-                       {
-#define PRVMBOUNDSCHECK 1
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-#undef PRVMBOUNDSCHECK
-                       }
-                       else
-                       {
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
+#define PRVMTIMEPROFILING 1
 #include "prvm_execprogram.h"
-                               }
-                       }
-#undef PRVMSTATEMENTPROFILING
+#undef PRVMTIMEPROFILING
                }
                else
                {
-                       if (prvm_boundscheck)
-                       {
-#define PRVMBOUNDSCHECK 1
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
 #include "prvm_execprogram.h"
-                               }
-#undef PRVMBOUNDSCHECK
-                       }
-                       else
-                       {
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-                       }
                }
-#undef PRVMRUNAWAYCHECK
+#undef PRVMSLOWINTERPRETER
        }
        else
        {
-               if (prvm_statementprofiling.integer)
+               if (prvm_timeprofiling.integer)
                {
-#define PRVMSTATEMENTPROFILING 1
-                       if (prvm_boundscheck)
-                       {
-#define PRVMBOUNDSCHECK 1
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
+#define PRVMTIMEPROFILING 1
 #include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-#undef PRVMBOUNDSCHECK
-                       }
-                       else
-                       {
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-                       }
-#undef PRVMSTATEMENTPROFILING
+#undef PRVMTIMEPROFILING
                }
                else
                {
-                       if (prvm_boundscheck)
-                       {
-#define PRVMBOUNDSCHECK 1
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
 #include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-#undef PRVMBOUNDSCHECK
-                       }
-                       else
-                       {
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-                       }
                }
        }
 
 cleanup:
-       if (developer.integer >= 200 && vm_tempstringsbuf.cursize > restorevm_tempstringsbuf_cursize)
-               Con_Printf("MVM_ExecuteProgram: %s used %i bytes of tempstrings\n", PRVM_GetString(prog->functions[fnum].s_name), vm_tempstringsbuf.cursize - restorevm_tempstringsbuf_cursize);
+       if (developer_insane.integer && vm_tempstringsbuf.cursize > restorevm_tempstringsbuf_cursize)
+               Con_DPrintf("MVM_ExecuteProgram: %s used %i bytes of tempstrings\n", PRVM_GetString(prog->functions[fnum].s_name), vm_tempstringsbuf.cursize - restorevm_tempstringsbuf_cursize);
        // delete tempstrings created by this function
        vm_tempstringsbuf.cursize = restorevm_tempstringsbuf_cursize;
 
@@ -850,15 +804,6 @@ cleanup:
 CLVM_ExecuteProgram
 ====================
 */
-// LordHavoc: optimized
-#define OPA ((prvm_eval_t *)&prog->globals.generic[(unsigned short) st->a])
-#define OPB ((prvm_eval_t *)&prog->globals.generic[(unsigned short) st->b])
-#define OPC ((prvm_eval_t *)&prog->globals.generic[(unsigned short) st->c])
-extern cvar_t prvm_traceqc;
-extern cvar_t prvm_statementprofiling;
-extern sizebuf_t vm_tempstringsbuf;
-extern qboolean prvm_runawaycheck;
-extern qboolean prvm_boundscheck;
 void CLVM_ExecuteProgram (func_t fnum, const char *errormessage)
 {
        dstatement_t    *st, *startst;
@@ -868,6 +813,7 @@ void CLVM_ExecuteProgram (func_t fnum, const char *errormessage)
        int             jumpcount, cachedpr_trace, exitdepth;
        int             restorevm_tempstringsbuf_cursize;
        double  calltime;
+       double tm, starttm;
 
        calltime = Sys_DoubleTime();
 
@@ -894,6 +840,7 @@ void CLVM_ExecuteProgram (func_t fnum, const char *errormessage)
        // (when the function exits or jumps, the (st - startst) integer value is
        // added to the function's profile counter)
        startst = st;
+       starttm = calltime;
        // instead of counting instructions, we count jumps
        jumpcount = 0;
        // add one to the callcount of this function because otherwise engine-called functions aren't counted
@@ -901,146 +848,38 @@ void CLVM_ExecuteProgram (func_t fnum, const char *errormessage)
 
 chooseexecprogram:
        cachedpr_trace = prog->trace;
-       if (prvm_runawaycheck)
+       if (prvm_statementprofiling.integer || prog->trace)
        {
-#define PRVMRUNAWAYCHECK 1
-               if (prvm_statementprofiling.integer)
+#define PRVMSLOWINTERPRETER 1
+               if (prvm_timeprofiling.integer)
                {
-#define PRVMSTATEMENTPROFILING 1
-                       if (prvm_boundscheck)
-                       {
-#define PRVMBOUNDSCHECK 1
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
+#define PRVMTIMEPROFILING 1
 #include "prvm_execprogram.h"
-                               }
-#undef PRVMBOUNDSCHECK
-                       }
-                       else
-                       {
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-                       }
-#undef PRVMSTATEMENTPROFILING
+#undef PRVMTIMEPROFILING
                }
                else
                {
-                       if (prvm_boundscheck)
-                       {
-#define PRVMBOUNDSCHECK 1
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
 #include "prvm_execprogram.h"
-                               }
-#undef PRVMBOUNDSCHECK
-                       }
-                       else
-                       {
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-                       }
                }
-#undef PRVMRUNAWAYCHECK
+#undef PRVMSLOWINTERPRETER
        }
        else
        {
-               if (prvm_statementprofiling.integer)
+               if (prvm_timeprofiling.integer)
                {
-#define PRVMSTATEMENTPROFILING 1
-                       if (prvm_boundscheck)
-                       {
-#define PRVMBOUNDSCHECK 1
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-#undef PRVMBOUNDSCHECK
-                       }
-                       else
-                       {
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
+#define PRVMTIMEPROFILING 1
 #include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-                       }
-#undef PRVMSTATEMENTPROFILING
+#undef PRVMTIMEPROFILING
                }
                else
                {
-                       if (prvm_boundscheck)
-                       {
-#define PRVMBOUNDSCHECK 1
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
 #include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-#undef PRVMBOUNDSCHECK
-                       }
-                       else
-                       {
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-                       }
                }
        }
 
 cleanup:
-       if (developer.integer >= 200 && vm_tempstringsbuf.cursize > restorevm_tempstringsbuf_cursize)
-               Con_Printf("CLVM_ExecuteProgram: %s used %i bytes of tempstrings\n", PRVM_GetString(prog->functions[fnum].s_name), vm_tempstringsbuf.cursize - restorevm_tempstringsbuf_cursize);
+       if (developer_insane.integer && vm_tempstringsbuf.cursize > restorevm_tempstringsbuf_cursize)
+               Con_DPrintf("CLVM_ExecuteProgram: %s used %i bytes of tempstrings\n", PRVM_GetString(prog->functions[fnum].s_name), vm_tempstringsbuf.cursize - restorevm_tempstringsbuf_cursize);
        // delete tempstrings created by this function
        vm_tempstringsbuf.cursize = restorevm_tempstringsbuf_cursize;
 
@@ -1048,21 +887,13 @@ cleanup:
 
        SV_FlushBroadcastMessages();
 }
+#endif
 
 /*
 ====================
 SVVM_ExecuteProgram
 ====================
 */
-// LordHavoc: optimized
-#define OPA ((prvm_eval_t *)&prog->globals.generic[(unsigned short) st->a])
-#define OPB ((prvm_eval_t *)&prog->globals.generic[(unsigned short) st->b])
-#define OPC ((prvm_eval_t *)&prog->globals.generic[(unsigned short) st->c])
-extern cvar_t prvm_traceqc;
-extern cvar_t prvm_statementprofiling;
-extern sizebuf_t vm_tempstringsbuf;
-extern qboolean prvm_runawaycheck;
-extern qboolean prvm_boundscheck;
 void SVVM_ExecuteProgram (func_t fnum, const char *errormessage)
 {
        dstatement_t    *st, *startst;
@@ -1072,6 +903,7 @@ void SVVM_ExecuteProgram (func_t fnum, const char *errormessage)
        int             jumpcount, cachedpr_trace, exitdepth;
        int             restorevm_tempstringsbuf_cursize;
        double  calltime;
+       double tm, starttm;
 
        calltime = Sys_DoubleTime();
 
@@ -1098,6 +930,7 @@ void SVVM_ExecuteProgram (func_t fnum, const char *errormessage)
        // (when the function exits or jumps, the (st - startst) integer value is
        // added to the function's profile counter)
        startst = st;
+       starttm = calltime;
        // instead of counting instructions, we count jumps
        jumpcount = 0;
        // add one to the callcount of this function because otherwise engine-called functions aren't counted
@@ -1105,146 +938,38 @@ void SVVM_ExecuteProgram (func_t fnum, const char *errormessage)
 
 chooseexecprogram:
        cachedpr_trace = prog->trace;
-       if (prvm_runawaycheck)
+       if (prvm_statementprofiling.integer || prog->trace)
        {
-#define PRVMRUNAWAYCHECK 1
-               if (prvm_statementprofiling.integer)
+#define PRVMSLOWINTERPRETER 1
+               if (prvm_timeprofiling.integer)
                {
-#define PRVMSTATEMENTPROFILING 1
-                       if (prvm_boundscheck)
-                       {
-#define PRVMBOUNDSCHECK 1
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
+#define PRVMTIMEPROFILING 1
 #include "prvm_execprogram.h"
-                               }
-#undef PRVMBOUNDSCHECK
-                       }
-                       else
-                       {
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-                       }
-#undef PRVMSTATEMENTPROFILING
+#undef PRVMTIMEPROFILING
                }
                else
                {
-                       if (prvm_boundscheck)
-                       {
-#define PRVMBOUNDSCHECK 1
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-#undef PRVMBOUNDSCHECK
-                       }
-                       else
-                       {
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
 #include "prvm_execprogram.h"
-                               }
-                       }
                }
-#undef PRVMRUNAWAYCHECK
+#undef PRVMSLOWINTERPRETER
        }
        else
        {
-               if (prvm_statementprofiling.integer)
+               if (prvm_timeprofiling.integer)
                {
-#define PRVMSTATEMENTPROFILING 1
-                       if (prvm_boundscheck)
-                       {
-#define PRVMBOUNDSCHECK 1
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
+#define PRVMTIMEPROFILING 1
 #include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-#undef PRVMBOUNDSCHECK
-                       }
-                       else
-                       {
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-                       }
-#undef PRVMSTATEMENTPROFILING
+#undef PRVMTIMEPROFILING
                }
                else
                {
-                       if (prvm_boundscheck)
-                       {
-#define PRVMBOUNDSCHECK 1
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
 #include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-#undef PRVMBOUNDSCHECK
-                       }
-                       else
-                       {
-                               if (prog->trace)
-                               {
-#define PRVMTRACE 1
-#include "prvm_execprogram.h"
-#undef PRVMTRACE
-                               }
-                               else
-                               {
-#include "prvm_execprogram.h"
-                               }
-                       }
                }
        }
 
 cleanup:
-       if (developer.integer >= 200 && vm_tempstringsbuf.cursize > restorevm_tempstringsbuf_cursize)
-               Con_Printf("SVVM_ExecuteProgram: %s used %i bytes of tempstrings\n", PRVM_GetString(prog->functions[fnum].s_name), vm_tempstringsbuf.cursize - restorevm_tempstringsbuf_cursize);
+       if (developer_insane.integer && vm_tempstringsbuf.cursize > restorevm_tempstringsbuf_cursize)
+               Con_DPrintf("SVVM_ExecuteProgram: %s used %i bytes of tempstrings\n", PRVM_GetString(prog->functions[fnum].s_name), vm_tempstringsbuf.cursize - restorevm_tempstringsbuf_cursize);
        // delete tempstrings created by this function
        vm_tempstringsbuf.cursize = restorevm_tempstringsbuf_cursize;