/* Generic no libc std parts. */ #include /* 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; }