14
* A copy optimized for DESTINATIONS in shared memory that
15
* are aligned and data is to be read by other processes.
17
* Both prefetch and poststore the destination.
19
void copyto(const unsigned char *src, unsigned char *dest, long n)
21
if (n < 128 || (dest - src) & 7) {
24
not possible to get src and dest even word aligned */
26
memcpy(dest, src, (size_t) n);
30
/* Read ahead so that dest is aligned on a page boundary */
33
register long nbytes = (127 & (unsigned long) dest);
34
if (nbytes > 0) nbytes = 128 - nbytes;
35
if (nbytes > n) nbytes = n;
45
/* src is at least word aligned and dest is subpage aligned */
47
register long npage = n>>7;
48
register const unsigned long *from = (unsigned long *) src;
49
register unsigned long *to = (unsigned long *) dest;
50
register unsigned long a, b, c, d, e, f, g, h;
56
/* _pcsp(to+16, "ex", "nbl");
57
_pcsp(to+32, "ex", "nbl");
58
_pcsp(to+48, "ex", "nbl"); */
62
/* _pcsp(to+64, "ex", "nbl"); */
98
/* _pstsp((char *) to); */
105
register long nbytes = n;
106
register const unsigned char *from = (unsigned char *) src;
107
register unsigned char *to = (unsigned char *) dest;
116
* A copy optimized for SOURCES in shared memory that are aligned.
118
* Prefetch sources only.
120
void copyfrom(const unsigned char *src, unsigned char *dest, long n)
122
if (n < 128 || (dest - src) & 7) {
125
not possible to get src and dest even word aligned */
127
memcpy(dest, src, (size_t) n);
131
/* Read ahead so that src is aligned on a page boundary */
134
register long nbytes = (127 & (unsigned long) src);
135
if (nbytes > 0) nbytes = 128 - nbytes;
136
if (nbytes > n) nbytes = n;
146
/* dest is at least word aligned and src is subpage aligned */
148
register long npage = n>>7;
149
register const unsigned long *from = (unsigned long *) src;
150
register unsigned long *to = (unsigned long *) dest;
151
register unsigned long a, b, c, d, e, f, g, h;
157
/* _pcsp(from+16, "ro", "nbl");
158
_pcsp(from+32, "ro", "nbl");
159
_pcsp(from+48, "ro", "nbl"); */
163
/* _pcsp(from+64, "ro", "nbl"); */
199
/* _pstsp((char *) to); */
206
register long nbytes = n;
207
register const unsigned char *from = (unsigned char *) src;
208
register unsigned char *to = (unsigned char *) dest;