From 76146a471dc385b371e92418d67506842f7dbe8b Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Sun, 13 Feb 2011 17:40:22 +0100 Subject: Commented out unsuccesfull attempts to make 64 bit transfers --- tools.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/tools.c b/tools.c index 7766c6a..9770b60 100644 --- a/tools.c +++ b/tools.c @@ -35,9 +35,77 @@ void *memcpy64(void * dst, void const * src, size_t len) { while (len >= 8) { *plDst++ = *plSrc++; - len -= 4; + len -= 8; + } + + char * pcDst = (char *) plDst; + char const * pcSrc = (char const *) plSrc; + + while (len--) { + *pcDst++ = *pcSrc++; + } + + return (dst); +} + +/* +void *memcpy128(void * dst, void const * src, size_t len) { + + long pos = - (len>>2); + char * plDst = (char *) dst - 4 * pos; + char const * plSrc = (char const *) src - 4 * pos; + + if (pos) { + __asm__ __volatile__ ( + "1: \n\t" + "mov (%0,%2,4), %%edi \n\t" + "mov %%edi, (%1,%2,4) \n\t" + "inc %2 \n\t" + "jnz 1b \n\t" + : + : "r" (plSrc), "r" (plDst), "r" (pos) + : "%edi" + ); + } + + + + long pos = - ((len>>4)<<4); + char * plDst = (char *) dst - pos; + char const * plSrc = (char const *) src - pos; + + if (pos) { + __asm__ __volatile__ ( + "1: \n\t" +// "movdqa (%0,%2), %%xmm0 \n\t" + "mov (%0,%2), %%esi \n\t" + "movd %%esi, %%xmm0 \n\t" + "mov 4(%0,%2), %%esi \n\t" + "movd %%esi, %%xmm1 \n\t" + "mov 8(%0,%2), %%esi \n\t" + "movd %%esi, %%xmm2 \n\t" + "mov 12(%0,%2), %%esi \n\t" + "movd %%esi, %%xmm3 \n\t" + "pslldq $4, %%xmm1 \n\t" + "por %%xmm1, %%xmm0 \n\t" + "pslldq $8, %%xmm2 \n\t" + "por %%xmm2, %%xmm0 \n\t" + "pslldq $12, %%xmm3 \n\t" + "por %%xmm3, %%xmm0 \n\t" + + "movntdq %%xmm0, (%1,%2) \n\t" + "add $16, %2 \n\t" + "jnz 1b \n\t" + : + : "r" (plSrc), "r" (plDst), "r" (pos) + : "%rsi" + ); } + + + len &= 0x3; + char * pcDst = (char *) plDst; char const * pcSrc = (char const *) plSrc; @@ -47,6 +115,7 @@ void *memcpy64(void * dst, void const * src, size_t len) { return (dst); } +*/ int get_page_mask() { -- cgit v1.2.3