OpenCores
URL https://opencores.org/ocsvn/1g_ethernet_dpi/1g_ethernet_dpi/trunk

Subversion Repositories 1g_ethernet_dpi

[/] [1g_ethernet_dpi/] [trunk/] [sw/] [dev/] [test_main/] [src/] [xil_lib/] [xil_memmove.c] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 kuzmi4
/*
2
 * tbd
3
 *
4
 */
5
 
6
void *xil_memmove(void *d, const void *s, unsigned int count)
7
{
8
        unsigned long dst, src;
9
 
10
        if (!count)
11
                return d;
12
 
13
        if (d < s) {
14
                dst = (unsigned long) d;
15
                src = (unsigned long) s;
16
 
17
                if ((count < 8) || ((dst ^ src) & 3))
18
                        goto restup;
19
 
20
                if (dst & 1) {
21
                        *(char *)dst++ = *(char *)src++;
22
                        count--;
23
                }
24
                if (dst & 2) {
25
                        *(short *)dst = *(short *)src;
26
                        src += 2;
27
                        dst += 2;
28
                        count -= 2;
29
                }
30
                while (count > 3) {
31
                        *(long *)dst = *(long *)src;
32
                        src += 4;
33
                        dst += 4;
34
                        count -= 4;
35
                }
36
restup:
37
                while (count--)
38
                        *(char *)dst++ = *(char *)src++;
39
        } else {
40
                dst = (unsigned long) d + count;
41
                src = (unsigned long) s + count;
42
 
43
                if ((count < 8) || ((dst ^ src) & 3))
44
                        goto restdown;
45
 
46
                if (dst & 1) {
47
                        src--;
48
                        dst--;
49
                        count--;
50
                        *(char *)dst = *(char *)src;
51
                }
52
                if (dst & 2) {
53
                        src -= 2;
54
                        dst -= 2;
55
                        count -= 2;
56
                        *(short *)dst = *(short *)src;
57
                }
58
                while (count > 3) {
59
                        src -= 4;
60
                        dst -= 4;
61
                        count -= 4;
62
                        *(long *)dst = *(long *)src;
63
                }
64
restdown:
65
                while (count--) {
66
                        src--;
67
                        dst--;
68
                        *(char *)dst = *(char *)src;
69
                }
70
        }
71
 
72
        return d;
73
}

powered by: WebSVN 2.1.0

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