mirror of
https://github.com/zeldaret/st
synced 2026-07-04 13:20:04 -04:00
c98c03de39
* match wstring.c * match math_api.c, mbstring.c, mem.c and mem_funcs.c * more progress * build issues * fix non-matching issues * reorganise files * match fdlibm (+ libc progress) * fix jp build * solved some non-matchings and progress * removed types.h usage in libc * match data and add missing delinks for jp
60 lines
1.2 KiB
C
60 lines
1.2 KiB
C
#include <mem_funcs.h>
|
|
|
|
#define cps ((unsigned char *) src)
|
|
#define cpd ((unsigned char *) dst)
|
|
#define lps ((unsigned int *) src)
|
|
#define lpd ((unsigned int *) dst)
|
|
|
|
#define deref_auto_inc(p) *(p)++
|
|
|
|
void __fill_mem(void *dst, int val, unsigned int n) {
|
|
unsigned int v = (unsigned char) val;
|
|
unsigned int i;
|
|
|
|
if (n >= 32) {
|
|
i = (-(unsigned int) dst) & 3;
|
|
|
|
if (i) {
|
|
n -= i;
|
|
do {
|
|
deref_auto_inc(cpd) = v;
|
|
} while (--i);
|
|
}
|
|
|
|
if (v) {
|
|
v |= v << 24 | v << 16 | v << 8;
|
|
}
|
|
|
|
i = n >> 5;
|
|
|
|
if (i) {
|
|
do {
|
|
deref_auto_inc(lpd) = v;
|
|
deref_auto_inc(lpd) = v;
|
|
deref_auto_inc(lpd) = v;
|
|
deref_auto_inc(lpd) = v;
|
|
deref_auto_inc(lpd) = v;
|
|
deref_auto_inc(lpd) = v;
|
|
deref_auto_inc(lpd) = v;
|
|
deref_auto_inc(lpd) = v;
|
|
} while (--i);
|
|
}
|
|
|
|
i = (n & 31) >> 2;
|
|
|
|
if (i) {
|
|
do {
|
|
deref_auto_inc(lpd) = v;
|
|
} while (--i);
|
|
}
|
|
|
|
n &= 3;
|
|
}
|
|
|
|
if (n) {
|
|
do {
|
|
deref_auto_inc(cpd) = v;
|
|
} while (--n);
|
|
}
|
|
}
|