marioparty4/src/Runtime.PPCEABI.H/__mem.c
2024-11-19 12:10:20 +01:00

91 lines
2.2 KiB
C

#include "dol2asm.h"
#include "stddef.h"
#include <dolphin.h>
/* 80003540-80003590 000440 0050+00 1/1 63/63 6/6 .init memcpy */
SECTION_INIT void* memcpy(void* dst, const void* src, size_t n) {
const unsigned char* s;
unsigned char* d;
if ((unsigned long)src >= (unsigned long)dst) {
s = (const unsigned char*)src - 1;
d = (unsigned char*)dst - 1;
n++;
while (--n != 0)
*++d = *++s;
} else {
s = (const unsigned char*)src + n;
d = (unsigned char*)dst + n;
n++;
while (--n != 0)
*--d = *--s;
}
return dst;
}
/* 80003488-80003540 000388 00B8+00 1/1 0/0 0/0 .init __fill_mem */
SECTION_INIT void __fill_mem(void* dst, int val, size_t n) {
unsigned long v = (unsigned char)val;
unsigned long i;
((unsigned char*)dst) = ((unsigned char*)dst) - 1;
if (n >= 32) {
i = (~(unsigned long)dst) & 3;
if (i) {
n -= i;
do {
*++(((unsigned char*)dst)) = v;
} while (--i);
}
if (v)
v |= v << 24 | v << 16 | v << 8;
((unsigned long*)dst) = ((unsigned long*)(((unsigned char*)dst) + 1)) - 1;
i = n >> 5;
if (i) {
do {
*++((unsigned long*)dst) = v;
*++((unsigned long*)dst) = v;
*++((unsigned long*)dst) = v;
*++((unsigned long*)dst) = v;
*++((unsigned long*)dst) = v;
*++((unsigned long*)dst) = v;
*++((unsigned long*)dst) = v;
*++((unsigned long*)dst) = v;
} while (--i);
}
i = (n & 31) >> 2;
if (i) {
do {
*++((unsigned long*)dst) = v;
} while (--i);
}
((unsigned char*)dst) = ((unsigned char*)(((unsigned long*)dst) + 1)) - 1;
n &= 3;
}
if (n)
do {
*++((unsigned char*)dst) = v;
} while (--n);
return;
}
/* 80003458-80003488 000358 0030+00 1/1 55/55 137/137 .init memset */
SECTION_INIT void* memset(void* dst, int val, size_t n) {
__fill_mem(dst, val, n);
return dst;
}