X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=pr_comp.h;h=d1643b628e15be619dc3b02115222b0e4c2852ce;hb=21d5a2cb164f12c5a56fbf1a4953306b7988071c;hp=879999970d1fceb5004919cbed28a4276ebc0caf;hpb=0256e57e16a302ad45090618b8d6eb5930788809;p=xonotic%2Fdarkplaces.git diff --git a/pr_comp.h b/pr_comp.h index 87999997..d1643b62 100644 --- a/pr_comp.h +++ b/pr_comp.h @@ -8,7 +8,7 @@ of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -23,10 +23,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef PR_COMP_H #define PR_COMP_H -typedef int func_t; +typedef unsigned int func_t; typedef int string_t; -typedef enum {ev_void, ev_string, ev_float, ev_vector, ev_entity, ev_field, ev_function, ev_pointer} etype_t; +typedef enum etype_e {ev_void, ev_string, ev_float, ev_vector, ev_entity, ev_field, ev_function, ev_pointer} etype_t; #define OFS_NULL 0 @@ -42,7 +42,8 @@ typedef enum {ev_void, ev_string, ev_float, ev_vector, ev_entity, ev_field, ev_f #define RESERVED_OFS 28 -enum { +typedef enum opcode_e +{ OP_DONE, OP_MUL_F, OP_MUL_V, @@ -53,19 +54,19 @@ enum { OP_ADD_V, OP_SUB_F, OP_SUB_V, - + OP_EQ_F, OP_EQ_V, OP_EQ_S, OP_EQ_E, OP_EQ_FNC, - + OP_NE_F, OP_NE_V, OP_NE_S, OP_NE_E, OP_NE_FNC, - + OP_LE, OP_GE, OP_LT, @@ -115,71 +116,110 @@ enum { OP_GOTO, OP_AND, OP_OR, - + OP_BITAND, OP_BITOR -}; +} +opcode_t; typedef struct statement_s { unsigned short op; signed short a,b,c; -} dstatement_t; +} +dstatement_t; -typedef struct +typedef struct ddef_s { unsigned short type; // if DEF_SAVEGLOBGAL bit is set // the variable needs to be saved in savegames unsigned short ofs; int s_name; -} ddef_t; +} +ddef_t; #define DEF_SAVEGLOBAL (1<<15) #define MAX_PARMS 8 -typedef struct +typedef struct dfunction_s { int first_statement; // negative numbers are builtins int parm_start; int locals; // total ints of parms + locals - + int profile; // runtime - + + int s_name; + int s_file; // source file defined in + + int numparms; + unsigned char parm_size[MAX_PARMS]; +} +dfunction_t; + +typedef struct mfunction_s +{ + int first_statement; // negative numbers are builtins + int parm_start; + int locals; // total ints of parms + locals + + // these are doubles so that they can count up to 54bits or so rather than 32bit + double tprofile; // realtime in this function + double tbprofile; // realtime in builtins called by this function (NOTE: builtins also have a tprofile!) + double profile; // runtime + double builtinsprofile; // cost of builtin functions called by this function + double callcount; // times the functions has been called since the last profile call + double totaltime; // total execution time of this function DIRECTLY FROM THE ENGINE + double tprofile_total; // runtime (NOTE: tbprofile_total makes no real sense, so not accumulating that) + double profile_total; // runtime + double builtinsprofile_total; // cost of builtin functions called by this function + int recursion; + int s_name; int s_file; // source file defined in - + int numparms; - qbyte parm_size[MAX_PARMS]; -} dfunction_t; + unsigned char parm_size[MAX_PARMS]; +} +mfunction_t; + +typedef struct mstatement_s +{ + opcode_t op; + int operand[3]; // always a global or -1 for unused + int jumpabsolute; // only used by IF, IFNOT, GOTO +} +mstatement_t; #define PROG_VERSION 6 -typedef struct +typedef struct dprograms_s { int version; int crc; // check of header file - + int ofs_statements; int numstatements; // statement 0 is an error int ofs_globaldefs; int numglobaldefs; - + int ofs_fielddefs; int numfielddefs; - + int ofs_functions; int numfunctions; // function 0 is an empty - + int ofs_strings; int numstrings; // first string is a null string int ofs_globals; int numglobals; - + int entityfields; -} dprograms_t; +} +dprograms_t; #endif