Line 52... |
Line 52... |
unsigned long value;
|
unsigned long value;
|
asm("l.mfspr\t\t%0,%1,0" : "=r" (value) : "r" (spr));
|
asm("l.mfspr\t\t%0,%1,0" : "=r" (value) : "r" (spr));
|
return value;
|
return value;
|
}
|
}
|
|
|
void *memcpy (void *__restrict dstvoid,
|
void *memcpy (void *dstv, const void *srcv, unsigned long length)
|
__const void *__restrict srcvoid, size_t length)
|
|
{
|
{
|
char *dst = dstvoid;
|
char *dst = dstv;
|
const char *src = (const char *) srcvoid;
|
const char *src = (const char *) srcv;
|
|
|
while (length--)
|
while (length--)
|
*dst++ = *src++;
|
*dst++ = *src++;
|
return dst;
|
return dst;
|
}
|
}
|
|
|
int memcmp (void *__restrict dstvoid,
|
void *memmove (void *dstv, const void *srcv, unsigned long length)
|
__const void *__restrict srcvoid, size_t length)
|
|
{
|
{
|
char *dst = dstvoid;
|
char *dst = dstv;
|
const char *src = (const char *) srcvoid;
|
const char *src = srcv;
|
|
|
|
/* Copy backwards? */
|
|
if (src < dst && dst < src + length) {
|
|
src += length;
|
|
dst += length;
|
|
while (length--) *--dst = *--src;
|
|
return dstv;
|
|
} else return memcpy (dstv, srcv, length);
|
|
}
|
|
|
|
int memcmp (void *dstv, const void *srcv, unsigned long length)
|
|
{
|
|
char *dst = dstv;
|
|
const char *src = (const char *) srcv;
|
|
|
while (length--)
|
while (length--)
|
if(*dst++ != *src++)
|
if(*dst++ != *src++) {
|
if(*(--dst) > *(--src))
|
if(*(--dst) > *(--src))
|
return 1;
|
return 1;
|
else
|
else
|
return -1;
|
return -1;
|
|
}
|
return 1;
|
return 1;
|
}
|
}
|
|
|
|
void *memchr (void *dstvoid, const char data, unsigned long length)
|
void *memchr (void *__restrict dstvoid,
|
|
__const char data, size_t length)
|
|
{
|
{
|
char *dst = dstvoid;
|
char *dst = dstvoid;
|
|
|
while (length--) *dst++ = data;
|
while (length--) *dst++ = data;
|
return dst;
|
return dst;
|
}
|
}
|
|
|
int strlen (__const char *srcvoid)
|
int strlen (const char *src)
|
{
|
{
|
int len = 0;
|
int len = 0;
|
while (*srcvoid++) len++;
|
while (*src++) len++;
|
return len;
|
return len;
|
}
|
}
|
|
|
int strcmp (const char *s1, const char *s2)
|
int strcmp (const char *s1, const char *s2)
|
{
|
{
|
|
|
while (*s1 != '\0' && *s1 == *s2) {
|
while (*s1 != '\0' && *s1 == *s2) {
|
s1++;
|
s1++;
|
s2++;
|
s2++;
|
}
|
}
|
|
|
return (*(unsigned char *) s1) - (*(unsigned char *) s2);
|
return (*(unsigned char *) s1) - (*(unsigned char *) s2);
|
}
|
}
|
|
|
char *strcpy (char *dst0, char *src0)
|
char *strcpy (char *dst0, char *src0)
|
{
|
{
|
char *s = dst0;
|
char *s = dst0;
|
|
|
while ((*dst0++ = *src0++));
|
while ((*dst0++ = *src0++));
|
|
|
return s;
|
return s;
|
}
|
}
|
|
|
void reset_timer (void)
|
void reset_timer (void)
|
{
|
{
|
timestamp = 0;
|
timestamp = 0;
|
}
|
}
|
|
|
|
/* Parses hex or decimal number */
|
|
unsigned long strtoul (const char *str, char **endptr, int base)
|
|
{
|
|
unsigned long number = 0;
|
|
char *pos = (char *) str;
|
|
char *fail_char = (char *) str;
|
|
|
|
while (isspace(*pos)) pos++; /* skip leading whitespace */
|
|
|
|
if ((base == 16) && (*pos == '0')) { /* handle option prefix */
|
|
++pos;
|
|
fail_char = pos;
|
|
if ((*pos == 'x') || (*pos == 'X')) ++pos;
|
|
}
|
|
|
|
if (base == 0) { /* dynamic base */
|
|
base = 10; /* default is 10 */
|
|
if (*pos == '0') {
|
|
++pos;
|
|
base -= 2; /* now base is 8 (or 16) */
|
|
fail_char = pos;
|
|
if ((*pos == 'x') || (*pos == 'X')) {
|
|
base += 8; /* base is 16 */
|
|
++pos;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ((base < 2) || (base > 36)) goto done; /* illegal base */
|
|
|
|
while (1) {
|
|
int digit = 40;
|
|
if ((*pos >= '0') && (*pos <= '9')) {
|
|
digit = (*pos - '0');
|
|
} else if (*pos >= 'a') {
|
|
digit = (*pos - 'a' + 10);
|
|
} else if (*pos >= 'A') {
|
|
digit = (*pos - 'A' + 10);
|
|
} else break;
|
|
|
|
if (digit >= base) break;
|
|
|
|
fail_char = ++pos;
|
|
number = number * base + digit;
|
|
}
|
|
|
|
done:
|
|
if (endptr) *endptr = fail_char;
|
|
return number;
|
|
}
|
|
|
unsigned long get_timer (unsigned long base)
|
unsigned long get_timer (unsigned long base)
|
{
|
{
|
return (timestamp - base);
|
return (timestamp - base);
|
}
|
}
|
|
|