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

Subversion Repositories hf-risc

[/] [hf-risc/] [trunk/] [tools/] [riscv-gnu-toolchain-master/] [glibc/] [sysdeps/] [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
#undef strcpy
5
 
6
char* strcpy(char* dst, const char* src)
7
{
8
  char* dst0 = dst;
9
 
10
  int misaligned = ((uintptr_t)dst | (uintptr_t)src) & (sizeof(long)-1);
11
  if (__builtin_expect(!misaligned, 1))
12
  {
13
    long* ldst = (long*)dst;
14
    const long* lsrc = (const long*)src;
15
 
16
    while (!__libc_detect_null(*lsrc))
17
      *ldst++ = *lsrc++;
18
 
19
    dst = (char*)ldst;
20
    src = (const char*)lsrc;
21
 
22
    char c0 = src[0];
23
    char c1 = src[1];
24
    char c2 = src[2];
25
    if (!(*dst++ = c0)) return dst0;
26
    if (!(*dst++ = c1)) return dst0;
27
    char c3 = src[3];
28
    if (!(*dst++ = c2)) return dst0;
29
    if (sizeof(long) == 4) goto out;
30
    char c4 = src[4];
31
    if (!(*dst++ = c3)) return dst0;
32
    char c5 = src[5];
33
    if (!(*dst++ = c4)) return dst0;
34
    char c6 = src[6];
35
    if (!(*dst++ = c5)) return dst0;
36
    if (!(*dst++ = c6)) return dst0;
37
 
38
out:
39
    *dst++ = 0;
40
    return dst0;
41
  }
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
}
54
libc_hidden_def(strcpy)

powered by: WebSVN 2.1.0

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