From: warp Date: Mon, 27 Jan 2003 09:38:31 +0000 (+0000) Subject: The gcc 2.95 problem was in fact OP_STORE_V doing nasty things to numbers that were... X-Git-Tag: RELEASE_0_2_0_RC1~4 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=65c5c9c594e16a38c8eae6107ea2b93237a9367f;p=xonotic%2Fdarkplaces.git The gcc 2.95 problem was in fact OP_STORE_V doing nasty things to numbers that were not quite 'valid' floats, so we now just copy as ints. This allows us to make the string handling /much/ cleaner again. git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@2704 d7cf8633-e32d-0410-b094-e92efae38249 --- diff --git a/pr_exec.c b/pr_exec.c index 259b5cbd..640140f2 100644 --- a/pr_exec.c +++ b/pr_exec.c @@ -427,34 +427,6 @@ chooseexecprogram: } } -// LordHavoc: grabbed these from QWSV, works around a gcc 2.95.3 compiler bug -#define MAX_PRSTR 65536 -static char *pr_strtbl[MAX_PRSTR]; -static int num_prstr; - -char *PR_GetString (int num) -{ - return num >= 0 ? pr_strings + num : pr_strtbl[-num]; -} - -int PR_SetString (char *s) -{ - if (s >= pr_strings) - return (int) (s - pr_strings); - else - { - int i; - for (i = 0; i <= num_prstr; i++) - if (pr_strtbl[i] == s) - return -i; - if (num_prstr >= (MAX_PRSTR - 1)) - Host_Error ("PR_Setstring: ran out of string table slots"); - pr_strtbl[++num_prstr] = s; - return -num_prstr; - } -} - void PR_ReInitStrings (void) { - num_prstr = 0; } diff --git a/pr_execprogram.h b/pr_execprogram.h index 33dc3e0a..f421e22c 100644 --- a/pr_execprogram.h +++ b/pr_execprogram.h @@ -130,9 +130,9 @@ OPB->_int = OPA->_int; break; case OP_STORE_V: - OPB->vector[0] = OPA->vector[0]; - OPB->vector[1] = OPA->vector[1]; - OPB->vector[2] = OPA->vector[2]; + OPB->ivector[0] = OPA->ivector[0]; + OPB->ivector[1] = OPA->ivector[1]; + OPB->ivector[2] = OPA->ivector[2]; break; case OP_STOREP_F: diff --git a/progs.h b/progs.h index f08a73fc..7ba47c30 100644 --- a/progs.h +++ b/progs.h @@ -30,6 +30,7 @@ typedef union eval_s float _float; float vector[3]; func_t function; + int ivector[3]; int _int; int edict; } eval_t; @@ -183,8 +184,8 @@ void PR_Execute_ProgsLoaded(void); void ED_PrintEdicts (void); void ED_PrintNum (int ent); -char *PR_GetString (int num); -int PR_SetString (char *s); +#define PR_GetString(num) (pr_strings + num) +#define PR_SetString(s) ((int) (s - pr_strings)) #endif