52 lines
983 B
C
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;
|
|
}
|