diff options
Diffstat (limited to 'sysdeps/generic/pagecopy.h')
-rw-r--r-- | sysdeps/generic/pagecopy.h | 53 |
1 files changed, 8 insertions, 45 deletions
diff --git a/sysdeps/generic/pagecopy.h b/sysdeps/generic/pagecopy.h index 2c35b71b87..3c81de1b23 100644 --- a/sysdeps/generic/pagecopy.h +++ b/sysdeps/generic/pagecopy.h @@ -1,4 +1,4 @@ -/* Macros for copying by pages; used in memcpy, memmove. Generic macros. +/* Macros for copying by pages; used in memcpy, memmove. Copyright (C) 1995-2014 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -16,19 +16,15 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -/* This file defines the macro: +/* The macro PAGE_COPY_FWD_MAYBE defined in memcopy.h is used in memmove if the + PAGE_COPY_THRESHOLD macro is set to a non-zero value. The default is 0, + that is copying by pages is not implemented. - PAGE_COPY_FWD_MAYBE (dstp, srcp, nbytes_left, nbytes) - - which is invoked like WORD_COPY_FWD et al. The pointers should be at - least word aligned. This will check if virtual copying by pages can and - should be done and do it if so. - - System-specific pagecopy.h files should define these macros and then - #include this file: + System-specific pagecopy.h files that want to support page copying should + define these macros: PAGE_COPY_THRESHOLD - -- Minimum size for which virtual copying by pages is worthwhile. + -- A non-zero minimum size for which virtual copying by pages is worthwhile. PAGE_SIZE -- Size of a page. @@ -38,37 +34,4 @@ The pointers will be aligned to PAGE_SIZE bytes. */ - -#if PAGE_COPY_THRESHOLD - -#include <assert.h> - -#define PAGE_COPY_FWD_MAYBE(dstp, srcp, nbytes_left, nbytes) \ - do \ - { \ - if ((nbytes) >= PAGE_COPY_THRESHOLD && \ - PAGE_OFFSET ((dstp) - (srcp)) == 0) \ - { \ - /* The amount to copy is past the threshold for copying \ - pages virtually with kernel VM operations, and the \ - source and destination addresses have the same alignment. */ \ - size_t nbytes_before = PAGE_OFFSET (-(dstp)); \ - if (nbytes_before != 0) \ - { \ - /* First copy the words before the first page boundary. */ \ - WORD_COPY_FWD (dstp, srcp, nbytes_left, nbytes_before); \ - assert (nbytes_left == 0); \ - nbytes -= nbytes_before; \ - } \ - PAGE_COPY_FWD (dstp, srcp, nbytes_left, nbytes); \ - } \ - } while (0) - -/* The page size is always a power of two, so we can avoid modulo division. */ -#define PAGE_OFFSET(n) ((n) & (PAGE_SIZE - 1)) - -#else - -#define PAGE_COPY_FWD_MAYBE(dstp, srcp, nbytes_left, nbytes) /* nada */ - -#endif +#define PAGE_COPY_THRESHOLD 0 |