This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Thanks, Andrew Pinski
* intrinsics/cshift0.c (__cshift0): Use % instead of calling div. Special case size==sizeof(int) and split the for loops into two different loops.
Attachment:
temp.diff.txt
Description: Text document
Index: intrinsics/cshift0.c =================================================================== RCS file: /cvs/gcc/gcc/libgfortran/intrinsics/cshift0.c,v retrieving revision 1.3 diff -u -p -r1.3 cshift0.c --- intrinsics/cshift0.c 4 Aug 2004 14:30:46 -0000 1.3 +++ intrinsics/cshift0.c 15 Aug 2004 01:20:25 -0000 @@ -120,7 +120,7 @@ __cshift0 (gfc_array_char * ret, const g rptr = ret->data; sptr = array->data;
- shift = (div (shift, len)).rem; + shift = shift % len; if (shift < 0) shift += len;
@@ -129,15 +129,39 @@ __cshift0 (gfc_array_char * ret, const g /* Do the shift for this dimension. */ src = &sptr[shift * soffset]; dest = rptr; - for (n = 0; n < len; n++) + if (size == sizeof (int)) { - memcpy (dest, src, size); - dest += roffset; - if (n == len - shift - 1) - src = sptr; - else - src += soffset; - } + for (n = 0; n < len - shift; n++) + { + int *dst = (int*)dest; + int *src1 = (int*)src; + *dst = *src1; + + dest += roffset; + src += soffset; + } + src = sptr; + for (; n < len; n++) + { + int *dst = (int*)dest; + int *src1 = (int*)src; + *dst = *src1; + + dest += roffset; + src += soffset; + } + } + else + for (n = 0; n < len; n++) + { + memcpy (dest, src, size); + + dest += roffset; + if (n == len - shift - 1) + src = sptr; + else + src += soffset; + }
/* Advance to the next section. */ rptr += rstride0;
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |