Coverage Report

Created: 2017-10-25 09:10

/root/src/xen/xen/arch/x86/string.c
Line
Count
Source
1
/******************************************************************************
2
 * string.c
3
 *
4
 * These provide something for compiler-emitted string operations to link
5
 * against.
6
 */
7
8
#include <xen/lib.h>
9
10
void *(memcpy)(void *dest, const void *src, size_t n)
11
897k
{
12
897k
    long d0, d1, d2;
13
897k
14
897k
    asm volatile (
15
897k
        "   rep ; movs"__OS" ; "
16
897k
        "   mov %k4,%k3      ; "
17
897k
        "   rep ; movsb        "
18
897k
        : "=&c" (d0), "=&D" (d1), "=&S" (d2)
19
897k
        : "0" (n/BYTES_PER_LONG), "r" (n%BYTES_PER_LONG), "1" (dest), "2" (src)
20
897k
        : "memory" );
21
897k
22
897k
    return dest;
23
897k
}
24
25
void *(memset)(void *s, int c, size_t n)
26
108k
{
27
108k
    long d0, d1;
28
108k
29
108k
    asm volatile (
30
108k
        "rep stosb"
31
108k
        : "=&c" (d0), "=&D" (d1)
32
108k
        : "a" (c), "1" (s), "0" (n)
33
108k
        : "memory");
34
108k
35
108k
    return s;
36
108k
}
37
38
void *(memmove)(void *dest, const void *src, size_t n)
39
273
{
40
273
    long d0, d1, d2;
41
273
42
273
    if ( unlikely(!n) )
43
15
        return dest;
44
273
45
258
    if ( dest < src )
46
251
        return memcpy(dest, src, n);
47
258
48
7
    asm volatile (
49
7
        "   std         ; "
50
7
        "   rep movsb   ; "
51
7
        "   cld           "
52
7
        : "=&c" (d0), "=&S" (d1), "=&D" (d2)
53
7
        : "0" (n), "1" (n-1+(const char *)src), "2" (n-1+(char *)dest)
54
7
        : "memory");
55
7
56
7
    return dest;
57
258
}
58
59
/*
60
 * Local variables:
61
 * mode: C
62
 * c-file-style: "BSD"
63
 * c-basic-offset: 4
64
 * tab-width: 4
65
 * indent-tabs-mode: nil
66
 * End:
67
 */