* Match mtx and Padclamp.c * Match the rest of GX * Import TRK 2.6 * Import MSL headers and files * Merge some MSL headers into ours
83 lines
1.7 KiB
C
83 lines
1.7 KiB
C
#include "TRK_MINNOW_DOLPHIN/MetroTRK/Portable/mem_TRK.h"
|
|
#include "dolphin/types.h"
|
|
|
|
void TRK_fill_mem(void *dest, int value, unsigned long length)
|
|
{
|
|
#define cDest ((unsigned char *)dest)
|
|
#define lDest ((unsigned long *)dest)
|
|
unsigned long val = (unsigned char)value;
|
|
unsigned long i;
|
|
lDest = (unsigned long *)dest;
|
|
cDest = (unsigned char *)dest;
|
|
|
|
cDest--;
|
|
|
|
if (length >= 32) {
|
|
i = ~(unsigned long)dest & 3;
|
|
|
|
if (i) {
|
|
length -= i;
|
|
do {
|
|
*++cDest = val;
|
|
} while (--i);
|
|
}
|
|
|
|
if (val) {
|
|
val |= val << 24 | val << 16 | val << 8;
|
|
}
|
|
|
|
lDest = (unsigned long *)(cDest + 1) - 1;
|
|
|
|
i = length >> 5;
|
|
if (i) {
|
|
do {
|
|
*++lDest = val;
|
|
*++lDest = val;
|
|
*++lDest = val;
|
|
*++lDest = val;
|
|
*++lDest = val;
|
|
*++lDest = val;
|
|
*++lDest = val;
|
|
*++lDest = val;
|
|
} while (--i);
|
|
}
|
|
|
|
i = (length & 31) >> 2;
|
|
|
|
if (i) {
|
|
do {
|
|
*++lDest = val;
|
|
} while (--i);
|
|
}
|
|
|
|
cDest = (unsigned char *)(lDest + 1) - 1;
|
|
|
|
length &= 3;
|
|
}
|
|
|
|
if (length) {
|
|
do {
|
|
*++cDest = val;
|
|
} while (--length);
|
|
}
|
|
|
|
#undef cDest
|
|
#undef lDest
|
|
}
|
|
|
|
__declspec(section ".init") void *TRK_memcpy(void *dst, const void *src, size_t n)
|
|
{
|
|
const char *p;
|
|
char *q;
|
|
|
|
for (p = (const char *)src - 1, q = (char *)dst - 1, n++; --n;)
|
|
*++q = *++p;
|
|
|
|
return dst;
|
|
}
|
|
|
|
__declspec(section ".init") void *TRK_memset(void *dst, int val, size_t n)
|
|
{
|
|
TRK_fill_mem(dst, val, n);
|
|
return dst;
|
|
}
|