Files
brightstone/Common/Std/nolibc.c
T
2026-10-13 04:30:06 +03:00

52 lines
983 B
C

/*
Generic no libc std parts.
*/
#include <stddef.h>
/* Compiler depends on them with low optimization level. */
void *memcpy(void *__restrict dest, const void *__restrict src, size_t n) {
for (size_t i = 0; i < n; ++i)
((char *)dest)[i] = ((char *)src)[i];
return dest;
};
void *memset(void *__restrict dest, int s, size_t n) {
for (size_t i = 0; i < n; ++i)
((char *)dest)[i] = s;
return dest;
};
size_t strlen(char const *s) {
char const *p = s;
for (; *p != 0; ++p) {
}
return p - s;
}
double sin(double v) {
double r;
__asm__ __volatile__("fsin" : "=t"(r) : "0"(v));
return r;
}
double cos(double v) {
double r;
__asm__ __volatile__("fcos" : "=t"(r) : "0"(v));
return r;
}
void sincos(double v, double *s, double *c) {
double sv, cv;
__asm__ __volatile__("fsincos" : "=t"(cv), "=u"(sv) : "0"(v));
*s = sv;
*c = cv;
}
double sqrt(double v) {
double r;
__asm__ volatile("sqrtss %1, %0" : "=x"(r) : "x"(v));
return r;
}