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 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 dfwrite(void *buffer, bsize_t dasizeof, bsize_t count, BFILE *fil);
void kdfwrite(const void *buffer, bsize_t dasizeof, bsize_t count, int32_t fil);
void dfwrite(const void *buffer, bsize_t dasizeof, bsize_t count, BFILE *fil);
#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
int32_t boundmulscale(int32_t a, int32_t b, int32_t c);
void clearbufbyte(void *D, int32_t c, int32_t a);
void copybufbyte(void *S, void *D, int32_t c);
void copybufreverse(void *S, void *D, int32_t c);
void copybufbyte(const void *S, void *D, int32_t c);
void copybufreverse(const void *S, void *D, int32_t c);
#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"); \
0; })
#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" \
: "=&S" (__S), "=&D" (__D), "=&c" (__c) : "0" (__S), "1" (__D), "2" (__c) : "memory", "cc"); \
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 {
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 {
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 {
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 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 clearbufbyte(void *D, int32_t c, int32_t a);
void copybufbyte(void *S, void *D, int32_t c);
void copybufreverse(void *S, void *D, int32_t c);
void copybufbyte(const void *S, void *D, int32_t c);
void copybufreverse(const void *S, void *D, int32_t c);
#endif

View file

@ -168,7 +168,8 @@ void allocache(intptr_t *newhandle, int32_t newbytes, char *newlockptr)
//Remove all blocks except 1
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].leng = newbytes;
cac[bestz].lock = newlockptr;
@ -213,12 +214,16 @@ void suckcache(intptr_t *suckptr)
if ((i > 0) && (*cac[i-1].lock == 0))
{
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))
{
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 int16_t *lzwbuf2, *lzwbuf3;
static int32_t lzwcompress(char *lzwinbuf, int32_t uncompleng, char *lzwoutbuf);
static int32_t lzwuncompress(char *lzwinbuf, int32_t compleng, char *lzwoutbuf);
static int32_t lzwcompress(const char *lzwinbuf, int32_t uncompleng, 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)
{
@ -1247,11 +1252,11 @@ int32_t dfread(void *buffer, bsize_t dasizeof, bsize_t count, BFILE *fil)
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;
int16_t leng, swleng;
char *ptr;
const char *ptr;
lzwbuflock[0] = lzwbuflock[1] = lzwbuflock[2] = lzwbuflock[3] = lzwbuflock[4] = 200;
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 (dasizeof > LZWSIZE) { count *= dasizeof; dasizeof = 1; }
ptr = (char *)buffer;
ptr = buffer;
copybufbyte(ptr,lzwbuf4,(int32_t)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;
}
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;
int16_t leng, swleng;
char *ptr;
const char *ptr;
lzwbuflock[0] = lzwbuflock[1] = lzwbuflock[2] = lzwbuflock[3] = lzwbuflock[4] = 200;
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 (dasizeof > LZWSIZE) { count *= dasizeof; dasizeof = 1; }
ptr = (char *)buffer;
ptr = buffer;
copybufbyte(ptr,lzwbuf4,(int32_t)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;
}
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 bytecnt1, bitcnt, numbits, oneupnumbits;
@ -1399,13 +1404,14 @@ static int32_t lzwcompress(char *lzwinbuf, int32_t uncompleng, char *lzwoutbuf)
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 i, dat, leng, bitcnt, outbytecnt, *intptr;
int16_t *shortptr;
int32_t i, dat, leng, bitcnt, outbytecnt;
const int32_t *intptr;
const int16_t *shortptr;
shortptr = (int16_t *)lzwinbuf;
shortptr = (const int16_t *)lzwinbuf;
strtot = (int32_t)B_LITTLE16(shortptr[1]);
if (strtot == 0)
{
@ -1417,7 +1423,7 @@ static int32_t lzwuncompress(char *lzwinbuf, int32_t compleng, char *lzwoutbuf)
numbits = 8; oneupnumbits = (1<<8);
do
{
intptr = (int32_t *)&lzwinbuf[bitcnt>>3];
intptr = (const int32_t *)&lzwinbuf[bitcnt>>3];
dat = ((B_LITTLE32(intptr[0])>>(bitcnt&7)) & (oneupnumbits-1));
bitcnt += numbits;
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) &&
(*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;
}
}

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(
"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(
"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)
{
int32_t *p = (int32_t *)d;
int32_t *p = d;
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++);
}
@ -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++);
}
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--);
}

View file

@ -10734,7 +10734,8 @@ int32_t G_DoMoveThings(void)
randomseed = ticrandomseed;
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();