|
From: <sv...@va...> - 2005-09-25 15:16:31
|
Author: sewardj
Date: 2005-09-25 16:16:25 +0100 (Sun, 25 Sep 2005)
New Revision: 4761
Log:
Vectorise and unroll VG_(memcpy).
Modified:
branches/ASPACEM/coregrind/m_libcbase.c
Modified: branches/ASPACEM/coregrind/m_libcbase.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/ASPACEM/coregrind/m_libcbase.c 2005-09-25 10:30:48 UTC (rev =
4760)
+++ branches/ASPACEM/coregrind/m_libcbase.c 2005-09-25 15:16:25 UTC (rev =
4761)
@@ -334,21 +334,33 @@
=20
void* VG_(memcpy) ( void *dest, const void *src, SizeT sz )
{
- const Char *s =3D (const Char *)src;
- Char *d =3D (Char *)dest;
+ const UChar* s =3D (const UChar*)src;
+ UChar* d =3D (UChar*)dest;
+ const UInt* sI =3D (const UInt*)src;
+ UInt* dI =3D (UInt*)dest;
=20
- while (sz >=3D 8) {
- d[0] =3D s[0];
- d[1] =3D s[1];
- d[2] =3D s[2];
- d[3] =3D s[3];
- d[4] =3D s[4];
- d[5] =3D s[5];
- d[6] =3D s[6];
- d[7] =3D s[7];
- sz -=3D 8;
- d +=3D 8;
- s +=3D 8;
+ if (VG_IS_4_ALIGNED(dI) && VG_IS_4_ALIGNED(sI)) {
+ while (sz >=3D 16) {
+ dI[0] =3D sI[0];
+ dI[1] =3D sI[1];
+ dI[2] =3D sI[2];
+ dI[3] =3D sI[3];
+ sz -=3D 16;
+ dI +=3D 4;
+ sI +=3D 4;
+ }
+ if (sz =3D=3D 0)=20
+ return;
+ while (sz >=3D 4) {
+ dI[0] =3D sI[0];
+ sz -=3D 4;
+ dI +=3D 1;
+ sI +=3D 1;
+ }
+ if (sz =3D=3D 0)=20
+ return;
+ s =3D (const UChar*)sI;
+ d =3D (UChar*)dI;
}
=20
while (sz--)
|