OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [orpmon/] [common/] [support.c] - Diff between revs 810 and 816

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 810 Rev 816
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);
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.