123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #include "api.h"
- #include <sysdeps/generic/memcopy.h>
- void * memcpy (void *dstpp, const void *srcpp, size_t len)
- {
- unsigned long int dstp = (long int) dstpp;
- unsigned long int srcp = (long int) srcpp;
-
-
- if (len >= OP_T_THRES) {
-
- len -= (-dstp) % OPSIZ;
- BYTE_COPY_FWD (dstp, srcp, (-dstp) % OPSIZ);
-
- WORD_COPY_FWD (dstp, srcp, len, len);
-
- }
-
- BYTE_COPY_FWD (dstp, srcp, len);
- return dstpp;
- }
- void * memmove (void * destpp, const void * srcpp, size_t len)
- {
- unsigned long int dstp = (long int) destpp;
- unsigned long int srcp = (long int) srcpp;
-
- if (dstp - srcp >= len) {
-
-
- if (len >= OP_T_THRES) {
-
- len -= (-dstp) % OPSIZ;
- BYTE_COPY_FWD (dstp, srcp, (-dstp) % OPSIZ);
-
- WORD_COPY_FWD (dstp, srcp, len, len);
-
- }
-
- BYTE_COPY_FWD (dstp, srcp, len);
- } else {
-
- srcp += len;
- dstp += len;
-
- if (len >= OP_T_THRES) {
-
- len -= dstp % OPSIZ;
- BYTE_COPY_BWD (dstp, srcp, dstp % OPSIZ);
-
- WORD_COPY_BWD (dstp, srcp, len, len);
-
- }
-
- BYTE_COPY_BWD (dstp, srcp, len);
- }
- return destpp;
- }
|