Files
st/libs/c/src/mem_funcs.c
T
Yanis c98c03de39 Match MSL_C (#8)
* 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
2025-12-17 14:08:53 +01:00

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);
}
}