OpenCores
URL https://opencores.org/ocsvn/hf-risc/hf-risc/trunk

Subversion Repositories hf-risc

[/] [hf-risc/] [trunk/] [tools/] [riscv-gnu-toolchain-master/] [newlib/] [newlib/] [libc/] [machine/] [riscv/] [strcpy.c] - Blame information for rev 13

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 13 serginhofr
#include <string.h>
2
#include <stdint.h>
3
 
4
char* strcpy(char* dst, const char* src)
5
{
6
  char* dst0 = dst;
7
 
8
#if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__)
9
  int misaligned = ((uintptr_t)dst | (uintptr_t)src) & (sizeof(long)-1);
10
  if (__builtin_expect(!misaligned, 1))
11
  {
12
    long* ldst = (long*)dst;
13
    const long* lsrc = (const long*)src;
14
 
15
    while (!__libc_detect_null(*lsrc))
16
      *ldst++ = *lsrc++;
17
 
18
    dst = (char*)ldst;
19
    src = (const char*)lsrc;
20
 
21
    char c0 = src[0];
22
    char c1 = src[1];
23
    char c2 = src[2];
24
    if (!(*dst++ = c0)) return dst0;
25
    if (!(*dst++ = c1)) return dst0;
26
    char c3 = src[3];
27
    if (!(*dst++ = c2)) return dst0;
28
    if (sizeof(long) == 4) goto out;
29
    char c4 = src[4];
30
    if (!(*dst++ = c3)) return dst0;
31
    char c5 = src[5];
32
    if (!(*dst++ = c4)) return dst0;
33
    char c6 = src[6];
34
    if (!(*dst++ = c5)) return dst0;
35
    if (!(*dst++ = c6)) return dst0;
36
 
37
out:
38
    *dst++ = 0;
39
    return dst0;
40
  }
41
#endif /* not PREFER_SIZE_OVER_SPEED */
42
 
43
  char ch;
44
  do
45
  {
46
    ch = *src;
47
    src++;
48
    dst++;
49
    *(dst-1) = ch;
50
  } while(ch);
51
 
52
  return dst0;
53
}

powered by: WebSVN 2.1.0

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