constify various cache1d and pragmas functions, some copybuf* -> memcpy/move.

The following functions have const qualifiers attached for the 'destination'
arguments: kdfwrite, dfwrite in cache1d.c and copybuf{byte,reverse,} in the
pragmas source or headers.  A couple uses of the latter ones were replaced
with calls to standard library functions.

git-svn-id: https://svn.eduke32.com/eduke32@2361 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
helixhorned 2012-02-18 22:14:45 +00:00
parent b51a3d91a3
commit 103a6e76f9
6 changed files with 55 additions and 39 deletions

View file

@ -62,8 +62,8 @@ CACHE1D_FIND_REC *klistpath(const char *path, const char *mask, int32_t type);
int32_t kdfread(void *buffer, bsize_t dasizeof, bsize_t count, int32_t fil); int32_t kdfread(void *buffer, bsize_t dasizeof, bsize_t count, int32_t fil);
int32_t dfread(void *buffer, bsize_t dasizeof, bsize_t count, BFILE *fil); int32_t dfread(void *buffer, bsize_t dasizeof, bsize_t count, BFILE *fil);
void kdfwrite(void *buffer, bsize_t dasizeof, bsize_t count, int32_t fil); void kdfwrite(const void *buffer, bsize_t dasizeof, bsize_t count, int32_t fil);
void dfwrite(void *buffer, bsize_t dasizeof, bsize_t count, BFILE *fil); void dfwrite(const void *buffer, bsize_t dasizeof, bsize_t count, BFILE *fil);
#ifdef __cplusplus #ifdef __cplusplus
} }

View file

@ -60,8 +60,8 @@ static inline int32_t divscale(int32_t eax, int32_t ebx, int32_t ecx) { return d
// maybe one day I'll make these into macros // maybe one day I'll make these into macros
int32_t boundmulscale(int32_t a, int32_t b, int32_t c); int32_t boundmulscale(int32_t a, int32_t b, int32_t c);
void clearbufbyte(void *D, int32_t c, int32_t a); void clearbufbyte(void *D, int32_t c, int32_t a);
void copybufbyte(void *S, void *D, int32_t c); void copybufbyte(const void *S, void *D, int32_t c);
void copybufreverse(void *S, void *D, int32_t c); void copybufreverse(const void *S, void *D, int32_t c);
#ifdef NO_GCC_BUILTINS #ifdef NO_GCC_BUILTINS
@ -964,7 +964,7 @@ void copybufreverse(void *S, void *D, int32_t c);
: "=&D" (__D), "=&c" (__c) : "0" (__D), "1" (__c), "a" (__a) : "memory", "cc"); \ : "=&D" (__D), "=&c" (__c) : "0" (__D), "1" (__c), "a" (__a) : "memory", "cc"); \
0; }) 0; })
#define copybuf(S,D,c) \ #define copybuf(S,D,c) \
({ void *__S=(S), *__D=(D); int32_t __c=(c); \ ({ const void *__S=(S), *__D=(D); int32_t __c=(c); \
__asm__ __volatile__ ("rep; movsl" \ __asm__ __volatile__ ("rep; movsl" \
: "=&S" (__S), "=&D" (__D), "=&c" (__c) : "0" (__S), "1" (__D), "2" (__c) : "memory", "cc"); \ : "=&S" (__S), "=&D" (__D), "=&c" (__c) : "0" (__S), "1" (__D), "2" (__c) : "memory", "cc"); \
0; }) 0; })
@ -1442,7 +1442,7 @@ static __inline void clearbufbyte(void *d, int32_t c, int32_t a)
} }
} }
static __inline void copybuf(void *s, void *d, int32_t c) static __inline void copybuf(const void *s, void *d, int32_t c)
{ {
_asm { _asm {
mov esi, s mov esi, s
@ -1452,7 +1452,7 @@ static __inline void copybuf(void *s, void *d, int32_t c)
} }
} }
static __inline void copybufbyte(void *s, void *d, int32_t c) static __inline void copybufbyte(const void *s, void *d, int32_t c)
{ {
_asm { _asm {
mov esi, s mov esi, s
@ -1492,7 +1492,7 @@ static __inline void copybufbyte(void *s, void *d, int32_t c)
} }
} }
static __inline void copybufreverse(void *s, void *d, int32_t c) static __inline void copybufreverse(const void *s, void *d, int32_t c)
{ {
_asm { _asm {
mov esi, s mov esi, s
@ -1892,12 +1892,12 @@ void qinterpolatedown16 (intptr_t bufptr, int32_t num, int32_t val, int32_t add)
void qinterpolatedown16short (intptr_t bufptr, int32_t num, int32_t val, int32_t add); void qinterpolatedown16short (intptr_t bufptr, int32_t num, int32_t val, int32_t add);
void clearbuf(void* d, int32_t c, int32_t a); void clearbuf(void* d, int32_t c, int32_t a);
void copybuf(void* s, void* d, int32_t c); void copybuf(const void* s, void* d, int32_t c);
void swapbuf4(void* a, void* b, int32_t c); void swapbuf4(void* a, void* b, int32_t c);
void clearbufbyte(void *D, int32_t c, int32_t a); void clearbufbyte(void *D, int32_t c, int32_t a);
void copybufbyte(void *S, void *D, int32_t c); void copybufbyte(const void *S, void *D, int32_t c);
void copybufreverse(void *S, void *D, int32_t c); void copybufreverse(const void *S, void *D, int32_t c);
#endif #endif

View file

@ -168,7 +168,8 @@ void allocache(intptr_t *newhandle, int32_t newbytes, char *newlockptr)
//Remove all blocks except 1 //Remove all blocks except 1
suckz -= (bestz+1); cacnum -= suckz; suckz -= (bestz+1); cacnum -= suckz;
copybufbyte(&cac[bestz+suckz],&cac[bestz],(cacnum-bestz)*sizeof(cactype)); // copybufbyte(&cac[bestz+suckz],&cac[bestz],(cacnum-bestz)*sizeof(cactype));
Bmemmove(&cac[bestz], &cac[bestz+suckz], (cacnum-bestz)*sizeof(cactype));
cac[bestz].hand = newhandle; *newhandle = cachestart+(intptr_t)besto; cac[bestz].hand = newhandle; *newhandle = cachestart+(intptr_t)besto;
cac[bestz].leng = newbytes; cac[bestz].leng = newbytes;
cac[bestz].lock = newlockptr; cac[bestz].lock = newlockptr;
@ -213,12 +214,16 @@ void suckcache(intptr_t *suckptr)
if ((i > 0) && (*cac[i-1].lock == 0)) if ((i > 0) && (*cac[i-1].lock == 0))
{ {
cac[i-1].leng += cac[i].leng; cac[i-1].leng += cac[i].leng;
cacnum--; copybuf(&cac[i+1],&cac[i],(cacnum-i)*sizeof(cactype)); // XXX: this looks suspicious, copybuf already multiplies by 4... cacnum--;
//copybuf(&cac[i+1],&cac[i],(cacnum-i)*sizeof(cactype)); // this looks suspicious, copybuf already multiplies by 4...
Bmemmove(&cac[i], &cac[i+1], (cacnum-i)*sizeof(cactype));
} }
else if ((i < cacnum-1) && (*cac[i+1].lock == 0)) else if ((i < cacnum-1) && (*cac[i+1].lock == 0))
{ {
cac[i+1].leng += cac[i].leng; cac[i+1].leng += cac[i].leng;
cacnum--; copybuf(&cac[i+1],&cac[i],(cacnum-i)*sizeof(cactype)); // XXX: see above cacnum--;
//copybuf(&cac[i+1],&cac[i],(cacnum-i)*sizeof(cactype)); // see above
Bmemmove(&cac[i], &cac[i+1], (cacnum-i)*sizeof(cactype));
} }
} }
} }
@ -1166,8 +1171,8 @@ failure:
static char *lzwbuf1, *lzwbuf4, *lzwbuf5, lzwbuflock[5]; static char *lzwbuf1, *lzwbuf4, *lzwbuf5, lzwbuflock[5];
static int16_t *lzwbuf2, *lzwbuf3; static int16_t *lzwbuf2, *lzwbuf3;
static int32_t lzwcompress(char *lzwinbuf, int32_t uncompleng, char *lzwoutbuf); static int32_t lzwcompress(const char *lzwinbuf, int32_t uncompleng, char *lzwoutbuf);
static int32_t lzwuncompress(char *lzwinbuf, int32_t compleng, char *lzwoutbuf); static int32_t lzwuncompress(const char *lzwinbuf, int32_t compleng, char *lzwoutbuf);
int32_t kdfread(void *buffer, bsize_t dasizeof, bsize_t count, int32_t fil) int32_t kdfread(void *buffer, bsize_t dasizeof, bsize_t count, int32_t fil)
{ {
@ -1247,11 +1252,11 @@ int32_t dfread(void *buffer, bsize_t dasizeof, bsize_t count, BFILE *fil)
return count; return count;
} }
void kdfwrite(void *buffer, bsize_t dasizeof, bsize_t count, int32_t fil) void kdfwrite(const void *buffer, bsize_t dasizeof, bsize_t count, int32_t fil)
{ {
uint32_t i, j, k; uint32_t i, j, k;
int16_t leng, swleng; int16_t leng, swleng;
char *ptr; const char *ptr;
lzwbuflock[0] = lzwbuflock[1] = lzwbuflock[2] = lzwbuflock[3] = lzwbuflock[4] = 200; lzwbuflock[0] = lzwbuflock[1] = lzwbuflock[2] = lzwbuflock[3] = lzwbuflock[4] = 200;
if (lzwbuf1 == NULL) allocache((intptr_t *)&lzwbuf1,LZWSIZE+(LZWSIZE>>4),&lzwbuflock[0]); if (lzwbuf1 == NULL) allocache((intptr_t *)&lzwbuf1,LZWSIZE+(LZWSIZE>>4),&lzwbuflock[0]);
@ -1261,7 +1266,7 @@ void kdfwrite(void *buffer, bsize_t dasizeof, bsize_t count, int32_t fil)
if (lzwbuf5 == NULL) allocache((intptr_t *)&lzwbuf5,LZWSIZE+(LZWSIZE>>4),&lzwbuflock[4]); if (lzwbuf5 == NULL) allocache((intptr_t *)&lzwbuf5,LZWSIZE+(LZWSIZE>>4),&lzwbuflock[4]);
if (dasizeof > LZWSIZE) { count *= dasizeof; dasizeof = 1; } if (dasizeof > LZWSIZE) { count *= dasizeof; dasizeof = 1; }
ptr = (char *)buffer; ptr = buffer;
copybufbyte(ptr,lzwbuf4,(int32_t)dasizeof); copybufbyte(ptr,lzwbuf4,(int32_t)dasizeof);
k = dasizeof; k = dasizeof;
@ -1291,11 +1296,11 @@ void kdfwrite(void *buffer, bsize_t dasizeof, bsize_t count, int32_t fil)
lzwbuflock[0] = lzwbuflock[1] = lzwbuflock[2] = lzwbuflock[3] = lzwbuflock[4] = 1; lzwbuflock[0] = lzwbuflock[1] = lzwbuflock[2] = lzwbuflock[3] = lzwbuflock[4] = 1;
} }
void dfwrite(void *buffer, bsize_t dasizeof, bsize_t count, BFILE *fil) void dfwrite(const void *buffer, bsize_t dasizeof, bsize_t count, BFILE *fil)
{ {
uint32_t i, j, k; uint32_t i, j, k;
int16_t leng, swleng; int16_t leng, swleng;
char *ptr; const char *ptr;
lzwbuflock[0] = lzwbuflock[1] = lzwbuflock[2] = lzwbuflock[3] = lzwbuflock[4] = 200; lzwbuflock[0] = lzwbuflock[1] = lzwbuflock[2] = lzwbuflock[3] = lzwbuflock[4] = 200;
if (lzwbuf1 == NULL) allocache((intptr_t *)&lzwbuf1,LZWSIZE+(LZWSIZE>>4),&lzwbuflock[0]); if (lzwbuf1 == NULL) allocache((intptr_t *)&lzwbuf1,LZWSIZE+(LZWSIZE>>4),&lzwbuflock[0]);
@ -1305,7 +1310,7 @@ void dfwrite(void *buffer, bsize_t dasizeof, bsize_t count, BFILE *fil)
if (lzwbuf5 == NULL) allocache((intptr_t *)&lzwbuf5,LZWSIZE+(LZWSIZE>>4),&lzwbuflock[4]); if (lzwbuf5 == NULL) allocache((intptr_t *)&lzwbuf5,LZWSIZE+(LZWSIZE>>4),&lzwbuflock[4]);
if (dasizeof > LZWSIZE) { count *= dasizeof; dasizeof = 1; } if (dasizeof > LZWSIZE) { count *= dasizeof; dasizeof = 1; }
ptr = (char *)buffer; ptr = buffer;
copybufbyte(ptr,lzwbuf4,(int32_t)dasizeof); copybufbyte(ptr,lzwbuf4,(int32_t)dasizeof);
k = dasizeof; k = dasizeof;
@ -1335,7 +1340,7 @@ void dfwrite(void *buffer, bsize_t dasizeof, bsize_t count, BFILE *fil)
lzwbuflock[0] = lzwbuflock[1] = lzwbuflock[2] = lzwbuflock[3] = lzwbuflock[4] = 1; lzwbuflock[0] = lzwbuflock[1] = lzwbuflock[2] = lzwbuflock[3] = lzwbuflock[4] = 1;
} }
static int32_t lzwcompress(char *lzwinbuf, int32_t uncompleng, char *lzwoutbuf) static int32_t lzwcompress(const char *lzwinbuf, int32_t uncompleng, char *lzwoutbuf)
{ {
int32_t i, addr, newaddr, addrcnt, zx, *intptr; int32_t i, addr, newaddr, addrcnt, zx, *intptr;
int32_t bytecnt1, bitcnt, numbits, oneupnumbits; int32_t bytecnt1, bitcnt, numbits, oneupnumbits;
@ -1399,13 +1404,14 @@ static int32_t lzwcompress(char *lzwinbuf, int32_t uncompleng, char *lzwoutbuf)
return(uncompleng+4); return(uncompleng+4);
} }
static int32_t lzwuncompress(char *lzwinbuf, int32_t compleng, char *lzwoutbuf) static int32_t lzwuncompress(const char *lzwinbuf, int32_t compleng, char *lzwoutbuf)
{ {
int32_t strtot, currstr, numbits, oneupnumbits; int32_t strtot, currstr, numbits, oneupnumbits;
int32_t i, dat, leng, bitcnt, outbytecnt, *intptr; int32_t i, dat, leng, bitcnt, outbytecnt;
int16_t *shortptr; const int32_t *intptr;
const int16_t *shortptr;
shortptr = (int16_t *)lzwinbuf; shortptr = (const int16_t *)lzwinbuf;
strtot = (int32_t)B_LITTLE16(shortptr[1]); strtot = (int32_t)B_LITTLE16(shortptr[1]);
if (strtot == 0) if (strtot == 0)
{ {
@ -1417,7 +1423,7 @@ static int32_t lzwuncompress(char *lzwinbuf, int32_t compleng, char *lzwoutbuf)
numbits = 8; oneupnumbits = (1<<8); numbits = 8; oneupnumbits = (1<<8);
do do
{ {
intptr = (int32_t *)&lzwinbuf[bitcnt>>3]; intptr = (const int32_t *)&lzwinbuf[bitcnt>>3];
dat = ((B_LITTLE32(intptr[0])>>(bitcnt&7)) & (oneupnumbits-1)); dat = ((B_LITTLE32(intptr[0])>>(bitcnt&7)) & (oneupnumbits-1));
bitcnt += numbits; bitcnt += numbits;
if ((dat&((oneupnumbits>>1)-1)) > ((currstr-1)&((oneupnumbits>>1)-1))) if ((dat&((oneupnumbits>>1)-1)) > ((currstr-1)&((oneupnumbits>>1)-1)))

View file

@ -3445,7 +3445,9 @@ static inline void polymer_scansprites(int16_t sectnum, spritetype* localtsprit
(spr->xrepeat > 0) && (spr->yrepeat > 0) && (spr->xrepeat > 0) && (spr->yrepeat > 0) &&
(*localspritesortcnt < MAXSPRITESONSCREEN)) (*localspritesortcnt < MAXSPRITESONSCREEN))
{ {
copybufbyte(spr,&localtsprite[*localspritesortcnt],sizeof(spritetype)); // this function's localtsprite is either the tsprite global or
// polymer_drawroom's locattsprite, so no aliasing
Bmemcpy(&localtsprite[*localspritesortcnt], spr, sizeof(spritetype));
localtsprite[(*localspritesortcnt)++].owner = i; localtsprite[(*localspritesortcnt)++].owner = i;
} }
} }

View file

@ -88,7 +88,7 @@ void clearbufbyte(void *D, int32_t c, int32_t a)
); );
} }
void copybufbyte(void *S, void *D, int32_t c) void copybufbyte(const void *S, void *D, int32_t c)
{ {
ASM( ASM(
"cmpl $4, %%ecx\n\t" // cmp ecx, 4 "cmpl $4, %%ecx\n\t" // cmp ecx, 4
@ -129,7 +129,7 @@ void copybufbyte(void *S, void *D, int32_t c)
); );
} }
void copybufreverse(void *S, void *D, int32_t c) void copybufreverse(const void *S, void *D, int32_t c)
{ {
ASM( ASM(
"shrl $1, %%ecx\n\t" "shrl $1, %%ecx\n\t"
@ -191,13 +191,16 @@ void qinterpolatedown16short(intptr_t bufptr, int32_t num, int32_t val, int32_t
void clearbuf(void *d, int32_t c, int32_t a) void clearbuf(void *d, int32_t c, int32_t a)
{ {
int32_t *p = (int32_t *)d; int32_t *p = d;
while ((c--) > 0) *(p++) = a; while ((c--) > 0) *(p++) = a;
} }
void copybuf(void *s, void *d, int32_t c) void copybuf(const void *s, void *d, int32_t c)
{ {
int32_t *p = (int32_t *)s, *q = (int32_t *)d; const int32_t *p = s;
int32_t *q = (int32_t *)d;
while ((c--) > 0) *(q++) = *(p++); while ((c--) > 0) *(q++) = *(p++);
} }
@ -228,15 +231,19 @@ void clearbufbyte(void *D, int32_t c, int32_t a)
} }
} }
void copybufbyte(void *S, void *D, int32_t c) void copybufbyte(const void *S, void *D, int32_t c)
{ {
char *p = (char *)S, *q = (char *)D; const char *p = S;
char *q = D;
while ((c--) > 0) *(q++) = *(p++); while ((c--) > 0) *(q++) = *(p++);
} }
void copybufreverse(void *S, void *D, int32_t c) void copybufreverse(const void *S, void *D, int32_t c)
{ {
char *p = (char *)S, *q = (char *)D; const char *p = S;
char *q = D;
while ((c--) > 0) *(q++) = *(p--); while ((c--) > 0) *(q++) = *(p--);
} }

View file

@ -10734,7 +10734,8 @@ int32_t G_DoMoveThings(void)
randomseed = ticrandomseed; randomseed = ticrandomseed;
TRAVERSE_CONNECT(i) TRAVERSE_CONNECT(i)
copybufbyte(&inputfifo[(g_netServer && myconnectindex == i) ? 1 : 0][i],g_player[i].sync,sizeof(input_t)); Bmemcpy(g_player[i].sync, &inputfifo[(g_netServer && myconnectindex == i) ? 1 : 0][i],
sizeof(input_t));
G_UpdateInterpolations(); G_UpdateInterpolations();