[gcc(refs/users/mikael/heads/refactor_descriptor_v08)] Introduction macro PTR_INCREMENT_BYTES
Mikael Morin
mikael@gcc.gnu.org
Sat Sep 20 13:19:47 GMT 2025
https://gcc.gnu.org/g:76e30b3152edc0a486839b18307ebf92b8e74911
commit 76e30b3152edc0a486839b18307ebf92b8e74911
Author: Mikael Morin <mikael@gcc.gnu.org>
Date: Mon Sep 15 14:26:15 2025 +0200
Introduction macro PTR_INCREMENT_BYTES
Correction m4/minloc1
Correction matmul_logical
Introduction macro PTR_DECREMENT_BYTES
Correction ; manquant ifindloc1.m4
Correction matmul
Correction matmul
Correction m4/maxloc2s.m4
Correction m4/minloc2s.m4
Correction m4/ifunction.m4
Correction gmtime
Correction findloc2s.m4, ifindloc2.m4
Correction in_pack.m4 et in_unpack.m4
Correction matmul.m4
Correction matmul.m4
Correction cshift0.m4
Correction ifindloc1.m4
Correction ifindloc1.m4
Correction pack.m4
Correction spread.m4
Correction spread.m4
Correction ifunction-s.m4
Correction cshift1a.m4
Correction maxval.m4
Correction minloc1.m4
Correction minloc1.m4
Correction minloc1.m4
Correction ifindloc0.m4
Correction ifindloc0.m4
Correction iforeach-s2.m4
Correction ifunction-s2.m4
Correction iforeach-s.m4
Correction ifunction-s.m4
Correction ifindloc0.m4
Correction ifindloc0.m4
Correction ifindloc1.m4
Correction maxloc1.m4
Revert partiel
Utilisation PTR_ADD_OFFSET matmull.m4
Utilisation PTR_INCREMENT_BYTES findloc2
Diff:
---
libgfortran/intrinsics/date_and_time.c | 108 +++++++++++++++++++++------------
libgfortran/intrinsics/dtime.c | 2 +-
libgfortran/intrinsics/etime.c | 2 +-
libgfortran/intrinsics/random.c | 72 +++++++++++-----------
libgfortran/io/read.c | 2 +-
libgfortran/io/transfer.c | 12 ++--
libgfortran/libgfortran.h | 5 ++
libgfortran/m4/cshift0.m4 | 52 ++++++++--------
libgfortran/m4/cshift1.m4 | 10 +--
libgfortran/m4/cshift1a.m4 | 50 +++++++--------
libgfortran/m4/eoshift1.m4 | 10 +--
libgfortran/m4/eoshift3.m4 | 10 +--
libgfortran/m4/findloc2s.m4 | 1 -
libgfortran/m4/ifindloc0.m4 | 28 ++++-----
libgfortran/m4/ifindloc1.m4 | 66 +++++++++++---------
libgfortran/m4/ifindloc2.m4 | 12 ++--
libgfortran/m4/iforeach-s.m4 | 18 +++---
libgfortran/m4/iforeach-s2.m4 | 16 ++---
libgfortran/m4/iforeach.m4 | 16 ++---
libgfortran/m4/ifunction-s.m4 | 63 ++++++++++---------
libgfortran/m4/ifunction-s2.m4 | 63 ++++++++++---------
libgfortran/m4/ifunction.m4 | 63 ++++++++++---------
libgfortran/m4/ifunction_logical.m4 | 17 +++---
libgfortran/m4/in_pack.m4 | 10 +--
libgfortran/m4/in_unpack.m4 | 12 ++--
libgfortran/m4/matmul_internal.m4 | 7 ++-
libgfortran/m4/matmull.m4 | 10 +--
libgfortran/m4/maxloc0.m4 | 8 +--
libgfortran/m4/maxloc1.m4 | 29 +++++----
libgfortran/m4/maxloc1s.m4 | 4 +-
libgfortran/m4/maxloc2s.m4 | 8 +--
libgfortran/m4/maxval.m4 | 7 ++-
libgfortran/m4/maxval1s.m4 | 4 +-
libgfortran/m4/minloc0.m4 | 8 +--
libgfortran/m4/minloc1.m4 | 34 +++++++----
libgfortran/m4/minloc1s.m4 | 4 +-
libgfortran/m4/minloc2s.m4 | 10 +--
libgfortran/m4/minval.m4 | 7 ++-
libgfortran/m4/minval1s.m4 | 4 +-
libgfortran/m4/pack.m4 | 26 ++++----
libgfortran/m4/reshape.m4 | 26 ++++----
libgfortran/m4/spread.m4 | 38 ++++++------
libgfortran/m4/unpack.m4 | 44 +++++++-------
43 files changed, 541 insertions(+), 457 deletions(-)
diff --git a/libgfortran/intrinsics/date_and_time.c b/libgfortran/intrinsics/date_and_time.c
index a5042cb2bcf8..47f1946f8e47 100644
--- a/libgfortran/intrinsics/date_and_time.c
+++ b/libgfortran/intrinsics/date_and_time.c
@@ -202,11 +202,11 @@ date_and_time (char *__date, char *__time, char *__zone,
{
index_type len, delta, elt_size;
- elt_size = GFC_DESCRIPTOR_SIZE (__values);
+ elt_size = GFC_DESCRIPTOR_SIZE(__values);
len = GFC_DESCRIPTOR_EXTENT(__values,0);
- delta = GFC_DESCRIPTOR_STRIDE(__values,0);
+ delta = GFC_DESCRIPTOR_STRIDE_BYTES(__values,0);
if (delta == 0)
- delta = 1;
+ delta = GFC_DESCRIPTOR_SIZE (__values);
if (unlikely (len < VALUES_SIZE))
runtime_error ("Incorrect extent in VALUES argument to"
@@ -218,31 +218,36 @@ date_and_time (char *__date, char *__time, char *__zone,
{
GFC_INTEGER_4 *vptr4 = __values->base_addr;
- for (i = 0; i < VALUES_SIZE; i++, vptr4 += delta)
- *vptr4 = values[i];
+ for (i = 0; i < VALUES_SIZE; i++)
+ {
+ *vptr4 = values[i];
+ PTR_INCREMENT_BYTES (vptr4, delta);
+ }
}
else if (elt_size == 8)
{
GFC_INTEGER_8 *vptr8 = (GFC_INTEGER_8 *)__values->base_addr;
- for (i = 0; i < VALUES_SIZE; i++, vptr8 += delta)
+ for (i = 0; i < VALUES_SIZE; i++)
{
if (values[i] == - GFC_INTEGER_4_HUGE)
*vptr8 = - GFC_INTEGER_8_HUGE;
else
*vptr8 = values[i];
+ PTR_INCREMENT_BYTES (vptr8, delta);
}
}
else if (elt_size == 2)
{
GFC_INTEGER_2 *vptr2 = (GFC_INTEGER_2 *)__values->base_addr;
- for (i = 0; i < VALUES_SIZE; i++, vptr2 += delta)
+ for (i = 0; i < VALUES_SIZE; i++)
{
if (values[i] == - GFC_INTEGER_4_HUGE)
*vptr2 = - GFC_INTEGER_2_HUGE;
else
*vptr2 = (GFC_INTEGER_2) values[i];
+ PTR_INCREMENT_BYTES (vptr2, delta);
}
}
#if defined (HAVE_GFC_INTEGER_16)
@@ -250,12 +255,13 @@ date_and_time (char *__date, char *__time, char *__zone,
{
GFC_INTEGER_16 *vptr16 = (GFC_INTEGER_16 *)__values->base_addr;
- for (i = 0; i < VALUES_SIZE; i++, vptr16 += delta)
+ for (i = 0; i < VALUES_SIZE; i++)
{
if (values[i] == - GFC_INTEGER_4_HUGE)
*vptr16 = - GFC_INTEGER_16_HUGE;
else
*vptr16 = values[i];
+ PTR_INCREMENT_BYTES (vptr16, delta);
}
}
#endif
@@ -367,13 +373,16 @@ itime_i4 (gfc_array_i4 *__values)
/* Copy the value into the array. */
len = GFC_DESCRIPTOR_EXTENT(__values,0);
assert (len >= 3);
- delta = GFC_DESCRIPTOR_STRIDE(__values,0);
+ delta = GFC_DESCRIPTOR_STRIDE_BYTES(__values,0);
if (delta == 0)
- delta = 1;
+ delta = GFC_DESCRIPTOR_SIZE(__values);
vptr = __values->base_addr;
- for (i = 0; i < 3; i++, vptr += delta)
- *vptr = x[i];
+ for (i = 0; i < 3; i++)
+ {
+ *vptr = x[i];
+ PTR_INCREMENT_BYTES (vptr, delta);
+ }
}
@@ -393,13 +402,16 @@ itime_i8 (gfc_array_i8 *__values)
/* Copy the value into the array. */
len = GFC_DESCRIPTOR_EXTENT(__values,0);
assert (len >= 3);
- delta = GFC_DESCRIPTOR_STRIDE(__values,0);
+ delta = GFC_DESCRIPTOR_STRIDE_BYTES(__values,0);
if (delta == 0)
- delta = 1;
+ delta = GFC_DESCRIPTOR_SIZE(__values);
vptr = __values->base_addr;
- for (i = 0; i < 3; i++, vptr += delta)
- *vptr = x[i];
+ for (i = 0; i < 3; i++)
+ {
+ *vptr = x[i];
+ PTR_INCREMENT_BYTES (vptr, delta);
+ }
}
@@ -445,13 +457,16 @@ idate_i4 (gfc_array_i4 *__values)
/* Copy the value into the array. */
len = GFC_DESCRIPTOR_EXTENT(__values,0);
assert (len >= 3);
- delta = GFC_DESCRIPTOR_STRIDE(__values,0);
+ delta = GFC_DESCRIPTOR_STRIDE_BYTES(__values,0);
if (delta == 0)
- delta = 1;
+ delta = GFC_DESCRIPTOR_SIZE(__values);
vptr = __values->base_addr;
- for (i = 0; i < 3; i++, vptr += delta)
- *vptr = x[i];
+ for (i = 0; i < 3; i++)
+ {
+ *vptr = x[i];
+ PTR_INCREMENT_BYTES (vptr, delta);
+ }
}
@@ -471,13 +486,16 @@ idate_i8 (gfc_array_i8 *__values)
/* Copy the value into the array. */
len = GFC_DESCRIPTOR_EXTENT(__values,0);
assert (len >= 3);
- delta = GFC_DESCRIPTOR_STRIDE(__values,0);
+ delta = GFC_DESCRIPTOR_STRIDE_BYTES(__values,0);
if (delta == 0)
- delta = 1;
+ delta = GFC_DESCRIPTOR_SIZE(__values);
vptr = __values->base_addr;
- for (i = 0; i < 3; i++, vptr += delta)
- *vptr = x[i];
+ for (i = 0; i < 3; i++)
+ {
+ *vptr = x[i];
+ PTR_INCREMENT_BYTES (vptr, delta);
+ }
}
@@ -535,13 +553,16 @@ gmtime_i4 (GFC_INTEGER_4 * t, gfc_array_i4 * tarray)
/* Copy the values into the array. */
len = GFC_DESCRIPTOR_EXTENT(tarray,0);
assert (len >= 9);
- delta = GFC_DESCRIPTOR_STRIDE(tarray,0);
+ delta = GFC_DESCRIPTOR_STRIDE_BYTES(tarray,0);
if (delta == 0)
- delta = 1;
+ delta = GFC_DESCRIPTOR_SIZE(tarray);
vptr = tarray->base_addr;
- for (i = 0; i < 9; i++, vptr += delta)
- *vptr = x[i];
+ for (i = 0; i < 9; i++)
+ {
+ *vptr = x[i];
+ PTR_INCREMENT_BYTES (vptr, delta);
+ }
}
extern void gmtime_i8 (GFC_INTEGER_8 *, gfc_array_i8 *);
@@ -562,13 +583,16 @@ gmtime_i8 (GFC_INTEGER_8 * t, gfc_array_i8 * tarray)
/* Copy the values into the array. */
len = GFC_DESCRIPTOR_EXTENT(tarray,0);
assert (len >= 9);
- delta = GFC_DESCRIPTOR_STRIDE(tarray,0);
+ delta = GFC_DESCRIPTOR_STRIDE_BYTES(tarray,0);
if (delta == 0)
delta = 1;
vptr = tarray->base_addr;
- for (i = 0; i < 9; i++, vptr += delta)
- *vptr = x[i];
+ for (i = 0; i < 9; i++)
+ {
+ *vptr = x[i];
+ PTR_INCREMENT_BYTES (vptr, delta);
+ }
}
@@ -627,13 +651,16 @@ ltime_i4 (GFC_INTEGER_4 * t, gfc_array_i4 * tarray)
/* Copy the values into the array. */
len = GFC_DESCRIPTOR_EXTENT(tarray,0);
assert (len >= 9);
- delta = GFC_DESCRIPTOR_STRIDE(tarray,0);
+ delta = GFC_DESCRIPTOR_STRIDE_BYTES(tarray,0);
if (delta == 0)
- delta = 1;
+ delta = GFC_DESCRIPTOR_SIZE(tarray);
vptr = tarray->base_addr;
- for (i = 0; i < 9; i++, vptr += delta)
- *vptr = x[i];
+ for (i = 0; i < 9; i++)
+ {
+ *vptr = x[i];
+ PTR_INCREMENT_BYTES (vptr, delta);
+ }
}
extern void ltime_i8 (GFC_INTEGER_8 *, gfc_array_i8 *);
@@ -654,13 +681,16 @@ ltime_i8 (GFC_INTEGER_8 * t, gfc_array_i8 * tarray)
/* Copy the values into the array. */
len = GFC_DESCRIPTOR_EXTENT(tarray,0);
assert (len >= 9);
- delta = GFC_DESCRIPTOR_STRIDE(tarray,0);
+ delta = GFC_DESCRIPTOR_STRIDE_BYTES(tarray,0);
if (delta == 0)
- delta = 1;
+ delta = GFC_DESCRIPTOR_SIZE(tarray);
vptr = tarray->base_addr;
- for (i = 0; i < 9; i++, vptr += delta)
- *vptr = x[i];
+ for (i = 0; i < 9; i++)
+ {
+ *vptr = x[i];
+ PTR_INCREMENT_BYTES (vptr, delta);
+ }
}
diff --git a/libgfortran/intrinsics/dtime.c b/libgfortran/intrinsics/dtime.c
index c33373cf1f22..1599201fa493 100644
--- a/libgfortran/intrinsics/dtime.c
+++ b/libgfortran/intrinsics/dtime.c
@@ -67,7 +67,7 @@ dtime_sub (gfc_array_r4 *t, GFC_REAL_4 *result)
tp = t->base_addr;
*tp = tu;
- tp += GFC_DESCRIPTOR_STRIDE(t,0);
+ PTR_INCREMENT_BYTES (tp, GFC_DESCRIPTOR_STRIDE_BYTES(t,0));
*tp = ts;
*result = tt;
__gthread_mutex_unlock (&dtime_update_lock);
diff --git a/libgfortran/intrinsics/etime.c b/libgfortran/intrinsics/etime.c
index a608ad2c9556..fa3f64fb4e26 100644
--- a/libgfortran/intrinsics/etime.c
+++ b/libgfortran/intrinsics/etime.c
@@ -54,7 +54,7 @@ etime_sub (gfc_array_r4 *t, GFC_REAL_4 *result)
tp = t->base_addr;
*tp = tu;
- tp += GFC_DESCRIPTOR_STRIDE(t,0);
+ PTR_INCREMENT_BYTES (tp, GFC_DESCRIPTOR_STRIDE_BYTES(t,0));
*tp = ts;
*result = tt;
}
diff --git a/libgfortran/intrinsics/random.c b/libgfortran/intrinsics/random.c
index 4ff57de9413e..c5e86dc45051 100644
--- a/libgfortran/intrinsics/random.c
+++ b/libgfortran/intrinsics/random.c
@@ -631,7 +631,7 @@ arandom_r4 (gfc_array_r4 *x)
for (index_type n = 0; n < dim; n++)
{
count[n] = 0;
- stride[n] = GFC_DESCRIPTOR_STRIDE(x,n);
+ stride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(x,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(x,n);
if (extent[n] <= 0)
return;
@@ -650,7 +650,7 @@ arandom_r4 (gfc_array_r4 *x)
rnumber_4 (dest, high);
/* Advance to the next element. */
- dest += stride0;
+ PTR_INCREMENT_BYTES (dest, stride0);
count[0]++;
/* Advance to the next source element. */
index_type n = 0;
@@ -661,7 +661,7 @@ arandom_r4 (gfc_array_r4 *x)
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- dest -= stride[n] * extent[n];
+ PTR_DECREMENT_BYTES (dest, stride[n] * extent[n]);
n++;
if (n == dim)
{
@@ -671,7 +671,7 @@ arandom_r4 (gfc_array_r4 *x)
else
{
count[n]++;
- dest += stride[n];
+ PTR_INCREMENT_BYTES (dest, stride[n]);
}
}
}
@@ -698,7 +698,7 @@ arandom_r8 (gfc_array_r8 *x)
for (index_type n = 0; n < dim; n++)
{
count[n] = 0;
- stride[n] = GFC_DESCRIPTOR_STRIDE(x,n);
+ stride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(x,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(x,n);
if (extent[n] <= 0)
return;
@@ -716,7 +716,7 @@ arandom_r8 (gfc_array_r8 *x)
rnumber_8 (dest, r);
/* Advance to the next element. */
- dest += stride0;
+ PTR_INCREMENT_BYTES (dest, stride0);
count[0]++;
/* Advance to the next source element. */
index_type n = 0;
@@ -727,7 +727,7 @@ arandom_r8 (gfc_array_r8 *x)
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- dest -= stride[n] * extent[n];
+ PTR_DECREMENT_BYTES (dest, stride[n] * extent[n]);
n++;
if (n == dim)
{
@@ -737,7 +737,7 @@ arandom_r8 (gfc_array_r8 *x)
else
{
count[n]++;
- dest += stride[n];
+ PTR_INCREMENT_BYTES (dest, stride[n]);
}
}
}
@@ -766,7 +766,7 @@ arandom_r10 (gfc_array_r10 *x)
for (index_type n = 0; n < dim; n++)
{
count[n] = 0;
- stride[n] = GFC_DESCRIPTOR_STRIDE(x,n);
+ stride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(x,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(x,n);
if (extent[n] <= 0)
return;
@@ -784,7 +784,7 @@ arandom_r10 (gfc_array_r10 *x)
rnumber_10 (dest, r);
/* Advance to the next element. */
- dest += stride0;
+ PTR_INCREMENT_BYTES (dest, stride0);
count[0]++;
/* Advance to the next source element. */
index_type n = 0;
@@ -795,7 +795,7 @@ arandom_r10 (gfc_array_r10 *x)
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- dest -= stride[n] * extent[n];
+ PTR_DECREMENT_BYTES (dest, stride[n] * extent[n]);
n++;
if (n == dim)
{
@@ -805,7 +805,7 @@ arandom_r10 (gfc_array_r10 *x)
else
{
count[n]++;
- dest += stride[n];
+ PTR_INCREMENT_BYTES (dest, stride[n]);
}
}
}
@@ -836,7 +836,7 @@ arandom_r16 (gfc_array_r16 *x)
for (index_type n = 0; n < dim; n++)
{
count[n] = 0;
- stride[n] = GFC_DESCRIPTOR_STRIDE(x,n);
+ stride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(x,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(x,n);
if (extent[n] <= 0)
return;
@@ -855,7 +855,7 @@ arandom_r16 (gfc_array_r16 *x)
rnumber_16 (dest, r1, r2);
/* Advance to the next element. */
- dest += stride0;
+ PTR_INCREMENT_BYTES (dest, stride0);
count[0]++;
/* Advance to the next source element. */
index_type n = 0;
@@ -866,7 +866,7 @@ arandom_r16 (gfc_array_r16 *x)
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- dest -= stride[n] * extent[n];
+ PTR_DECREMENT_BYTES (dest, stride[n] * extent[n]);
n++;
if (n == dim)
{
@@ -876,7 +876,7 @@ arandom_r16 (gfc_array_r16 *x)
else
{
count[n]++;
- dest += stride[n];
+ PTR_INCREMENT_BYTES (dest, stride[n]);
}
}
}
@@ -907,7 +907,7 @@ arandom_r17 (gfc_array_r17 *x)
for (index_type n = 0; n < dim; n++)
{
count[n] = 0;
- stride[n] = GFC_DESCRIPTOR_STRIDE(x,n);
+ stride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(x,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(x,n);
if (extent[n] <= 0)
return;
@@ -926,7 +926,7 @@ arandom_r17 (gfc_array_r17 *x)
rnumber_17 (dest, r1, r2);
/* Advance to the next element. */
- dest += stride0;
+ PTR_INCREMENT_BYTES (dest, stride0);
count[0]++;
/* Advance to the next source element. */
index_type n = 0;
@@ -937,7 +937,7 @@ arandom_r17 (gfc_array_r17 *x)
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- dest -= stride[n] * extent[n];
+ PTR_DECREMENT_BYTES (dest, stride[n] * extent[n]);
n++;
if (n == dim)
{
@@ -947,7 +947,7 @@ arandom_r17 (gfc_array_r17 *x)
else
{
count[n]++;
- dest += stride[n];
+ PTR_INCREMENT_BYTES (dest, stride[n]);
}
}
}
@@ -1040,7 +1040,7 @@ arandom_m2 (gfc_array_m2 *x)
for (index_type n = 0; n < dim; n++)
{
count[n] = 0;
- stride[n] = GFC_DESCRIPTOR_STRIDE(x,n);
+ stride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(x,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(x,n);
if (extent[n] <= 0)
return;
@@ -1058,7 +1058,7 @@ arandom_m2 (gfc_array_m2 *x)
*dest = r >> 48;
/* Advance to the next element. */
- dest += stride0;
+ PTR_INCREMENT_BYTES (dest, stride0);
count[0]++;
/* Advance to the next source element. */
index_type n = 0;
@@ -1069,7 +1069,7 @@ arandom_m2 (gfc_array_m2 *x)
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- dest -= stride[n] * extent[n];
+ PTR_DECREMENT_BYTES (dest, stride[n] * extent[n]);
n++;
if (n == dim)
{
@@ -1079,7 +1079,7 @@ arandom_m2 (gfc_array_m2 *x)
else
{
count[n]++;
- dest += stride[n];
+ PTR_INCREMENT_BYTES (dest, stride[n]);
}
}
}
@@ -1105,7 +1105,7 @@ arandom_m4 (gfc_array_m4 *x)
for (index_type n = 0; n < dim; n++)
{
count[n] = 0;
- stride[n] = GFC_DESCRIPTOR_STRIDE(x,n);
+ stride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(x,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(x,n);
if (extent[n] <= 0)
return;
@@ -1123,7 +1123,7 @@ arandom_m4 (gfc_array_m4 *x)
*dest = r >> 32;
/* Advance to the next element. */
- dest += stride0;
+ PTR_INCREMENT_BYTES (dest, stride0);
count[0]++;
/* Advance to the next source element. */
index_type n = 0;
@@ -1134,7 +1134,7 @@ arandom_m4 (gfc_array_m4 *x)
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- dest -= stride[n] * extent[n];
+ PTR_DECREMENT_BYTES (dest, stride[n] * extent[n]);
n++;
if (n == dim)
{
@@ -1144,7 +1144,7 @@ arandom_m4 (gfc_array_m4 *x)
else
{
count[n]++;
- dest += stride[n];
+ PTR_INCREMENT_BYTES(dest, stride[n]);
}
}
}
@@ -1170,7 +1170,7 @@ arandom_m8 (gfc_array_m8 *x)
for (index_type n = 0; n < dim; n++)
{
count[n] = 0;
- stride[n] = GFC_DESCRIPTOR_STRIDE(x,n);
+ stride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(x,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(x,n);
if (extent[n] <= 0)
return;
@@ -1188,7 +1188,7 @@ arandom_m8 (gfc_array_m8 *x)
*dest = r;
/* Advance to the next element. */
- dest += stride0;
+ PTR_INCREMENT_BYTES (dest, stride0);
count[0]++;
/* Advance to the next source element. */
index_type n = 0;
@@ -1199,7 +1199,7 @@ arandom_m8 (gfc_array_m8 *x)
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- dest -= stride[n] * extent[n];
+ PTR_DECREMENT_BYTES (dest, stride[n] * extent[n]);
n++;
if (n == dim)
{
@@ -1209,7 +1209,7 @@ arandom_m8 (gfc_array_m8 *x)
else
{
count[n]++;
- dest += stride[n];
+ PTR_INCREMENT_BYTES (dest, stride[n]);
}
}
}
@@ -1237,7 +1237,7 @@ arandom_m16 (gfc_array_m16 *x)
for (index_type n = 0; n < dim; n++)
{
count[n] = 0;
- stride[n] = GFC_DESCRIPTOR_STRIDE(x,n);
+ stride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(x,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(x,n);
if (extent[n] <= 0)
return;
@@ -1255,7 +1255,7 @@ arandom_m16 (gfc_array_m16 *x)
*dest = (((GFC_UINTEGER_16) r1) << 64) | (GFC_UINTEGER_16) r2;
/* Advance to the next element. */
- dest += stride0;
+ PTR_INCREMENT_BYTES (dest, stride0);
count[0]++;
/* Advance to the next source element. */
index_type n = 0;
@@ -1266,7 +1266,7 @@ arandom_m16 (gfc_array_m16 *x)
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- dest -= stride[n] * extent[n];
+ PTR_DECREMENT_BYTES (dest, stride[n] * extent[n]);
n++;
if (n == dim)
{
@@ -1276,7 +1276,7 @@ arandom_m16 (gfc_array_m16 *x)
else
{
count[n]++;
- dest += stride[n];
+ PTR_INCREMENT_BYTES (dest, stride[n]);
}
}
}
diff --git a/libgfortran/io/read.c b/libgfortran/io/read.c
index e34d31b02e90..79b45be4e924 100644
--- a/libgfortran/io/read.c
+++ b/libgfortran/io/read.c
@@ -600,7 +600,7 @@ read_default_char4 (st_parameter_dt *dtp, char *p, size_t len, size_t width)
if (s4 == NULL)
return;
if (width > len)
- s4 += (width - len);
+ s4 += (width - len);
m = (width > len) ? len : width;
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index 7f4941271836..a3573d0dad88 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -2843,13 +2843,13 @@ transfer_array_inner (st_parameter_dt *dtp, gfc_array_char *desc, int kind,
return;
dtp->u.p.transfer (dtp, iotype, data, kind, size, tsize);
- data += stride0 * tsize;
+ PTR_INCREMENT_BYTES (data, stride0 * tsize);
count[0] += tsize;
n = 0;
while (count[n] == extent[n])
{
count[n] = 0;
- data -= stride[n] * extent[n];
+ PTR_DECREMENT_BYTES (data, stride[n] * extent[n]);
n++;
if (n == rank)
{
@@ -2859,7 +2859,7 @@ transfer_array_inner (st_parameter_dt *dtp, gfc_array_char *desc, int kind,
else
{
count[n]++;
- data += stride[n];
+ PTR_INCREMENT_BYTES (data, stride[n]);
}
}
}
@@ -2869,13 +2869,13 @@ transfer_array_inner (st_parameter_dt *dtp, gfc_array_char *desc, int kind,
while (data)
{
dtp->u.p.transfer (dtp, iotype, data, kind, size, tsize);
- data += stride0 * tsize;
+ PTR_INCREMENT_BYTES (data, stride0 * tsize);
count[0] += tsize;
n = 0;
while (count[n] == extent[n])
{
count[n] = 0;
- data -= stride[n] * extent[n];
+ PTR_DECREMENT_BYTES (data, stride[n] * extent[n]);
n++;
if (n == rank)
{
@@ -2885,7 +2885,7 @@ transfer_array_inner (st_parameter_dt *dtp, gfc_array_char *desc, int kind,
else
{
count[n]++;
- data += stride[n];
+ PTR_INCREMENT_BYTES (data, stride[n]);
}
}
}
diff --git a/libgfortran/libgfortran.h b/libgfortran/libgfortran.h
index fd6b57700a1b..0e523bb6d60c 100644
--- a/libgfortran/libgfortran.h
+++ b/libgfortran/libgfortran.h
@@ -603,6 +603,11 @@ typedef GFC_FULL_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_4) gfc_full_a
#define GFC_DESCRIPTOR2_ELEM_ADDRESS(descr, idx1, idx2) \
(&GFC_DESCRIPTOR2_ELEM((descr),(idx1),(idx2))
+
+#define PTR_INCREMENT_BYTES(ptr,bytes) ptr = (typeof (ptr)) (((char*) ptr) + (bytes))
+#define PTR_DECREMENT_BYTES(ptr,bytes) ptr = (typeof (ptr)) (((char*) ptr) - (bytes))
+
+
/* Generic vtab structure. */
typedef struct
{
diff --git a/libgfortran/m4/cshift0.m4 b/libgfortran/m4/cshift0.m4
index 6ca3db403ce1..650703cf1253 100644
--- a/libgfortran/m4/cshift0.m4
+++ b/libgfortran/m4/cshift0.m4
@@ -112,10 +112,10 @@ cshift0_'rtype_code` ('rtype` *ret, const 'rtype` *array, ptrdiff_t shift,
bn = cshift(a,sh*n1*n2,1)
we can used a more blocked algorithm for dim>1. */
- sstride[0] = 1;
- rstride[0] = 1;
- roffset = 1;
- soffset = 1;
+ sstride[0] = sizeof ('rtype_name`);
+ rstride[0] = sizeof ('rtype_name`);
+ roffset = sizeof ('rtype_name`);
+ soffset = sizeof ('rtype_name`);
len = GFC_DESCRIPTOR_STRIDE(array, which)
* GFC_DESCRIPTOR_EXTENT(array, which);
shift *= GFC_DESCRIPTOR_STRIDE(array, which);
@@ -123,8 +123,8 @@ cshift0_'rtype_code` ('rtype` *ret, const 'rtype` *array, ptrdiff_t shift,
{
count[n] = 0;
extent[n] = GFC_DESCRIPTOR_EXTENT(array,dim);
- rstride[n] = GFC_DESCRIPTOR_STRIDE(ret,dim);
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,dim);
+ rstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(ret,dim);
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
n++;
}
dim = GFC_DESCRIPTOR_RANK (array) - which;
@@ -135,27 +135,27 @@ cshift0_'rtype_code` ('rtype` *ret, const 'rtype` *array, ptrdiff_t shift,
{
if (dim == which)
{
- roffset = GFC_DESCRIPTOR_STRIDE(ret,dim);
+ roffset = GFC_DESCRIPTOR_STRIDE_BYTES(ret,dim);
if (roffset == 0)
- roffset = 1;
- soffset = GFC_DESCRIPTOR_STRIDE(array,dim);
+ roffset = sizeof ('rtype_name`);
+ soffset = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
if (soffset == 0)
- soffset = 1;
+ soffset = sizeof ('rtype_name`);
len = GFC_DESCRIPTOR_EXTENT(array,dim);
}
else
{
count[n] = 0;
extent[n] = GFC_DESCRIPTOR_EXTENT(array,dim);
- rstride[n] = GFC_DESCRIPTOR_STRIDE(ret,dim);
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,dim);
+ rstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(ret,dim);
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
n++;
}
}
if (sstride[0] == 0)
- sstride[0] = 1;
+ sstride[0] = sizeof ('rtype_name`);
if (rstride[0] == 0)
- rstride[0] = 1;
+ rstride[0] = sizeof ('rtype_name`);
dim = GFC_DESCRIPTOR_RANK (array);
}
@@ -179,7 +179,7 @@ cshift0_'rtype_code` ('rtype` *ret, const 'rtype` *array, ptrdiff_t shift,
/* If elements are contiguous, perform the operation
in two block moves. */
- if (soffset == 1 && roffset == 1)
+ if (soffset == sizeof ('rtype_name`) && roffset == sizeof ('rtype_name`))
{
size_t len1 = shift * sizeof ('rtype_name`);
size_t len2 = (len - shift) * sizeof ('rtype_name`);
@@ -191,25 +191,25 @@ cshift0_'rtype_code` ('rtype` *ret, const 'rtype` *array, ptrdiff_t shift,
/* Otherwise, we will have to perform the copy one element at
a time. */
'rtype_name` *dest = rptr;
- const 'rtype_name` *src = &sptr[shift * soffset];
+ const 'rtype_name` *src = (const 'rtype_name` *) (((char*)sptr) + shift * soffset);
for (n = 0; n < len - shift; n++)
{
*dest = *src;
- dest += roffset;
- src += soffset;
+ PTR_INCREMENT_BYTES (dest, roffset);
+ PTR_INCREMENT_BYTES (src, soffset);
}
for (src = sptr, n = 0; n < shift; n++)
{
*dest = *src;
- dest += roffset;
- src += soffset;
+ PTR_INCREMENT_BYTES (dest, roffset);
+ PTR_INCREMENT_BYTES (src, soffset);
}
}
/* Advance to the next section. */
- rptr += rstride0;
- sptr += sstride0;
+ PTR_INCREMENT_BYTES (rptr, rstride0);
+ PTR_INCREMENT_BYTES (sptr, sstride0);
count[0]++;
n = 0;
while (count[n] == extent[n])
@@ -219,8 +219,8 @@ cshift0_'rtype_code` ('rtype` *ret, const 'rtype` *array, ptrdiff_t shift,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- rptr -= rstride[n] * extent[n];
- sptr -= sstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (rptr, rstride[n] * extent[n]);
+ PTR_DECREMENT_BYTES (sptr, sstride[n] * extent[n]);
n++;
if (n >= dim - 1)
{
@@ -231,8 +231,8 @@ cshift0_'rtype_code` ('rtype` *ret, const 'rtype` *array, ptrdiff_t shift,
else
{
count[n]++;
- rptr += rstride[n];
- sptr += sstride[n];
+ PTR_INCREMENT_BYTES (rptr, rstride[n]);
+ PTR_INCREMENT_BYTES (sptr, sstride[n]);
}
}
}
diff --git a/libgfortran/m4/cshift1.m4 b/libgfortran/m4/cshift1.m4
index d954b6ca70b1..bbb521c3a240 100644
--- a/libgfortran/m4/cshift1.m4
+++ b/libgfortran/m4/cshift1.m4
@@ -230,7 +230,7 @@ cshift1 (gfc_array_char * const restrict ret,
rstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(ret,dim);
sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
- hstride[n] = GFC_DESCRIPTOR_STRIDE(h,n);
+ hstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(h,n);
n++;
}
}
@@ -239,7 +239,7 @@ cshift1 (gfc_array_char * const restrict ret,
if (rstride[0] == 0)
rstride[0] = size;
if (hstride[0] == 0)
- hstride[0] = 1;
+ hstride[0] = sizeof ('atype_name`);
dim = GFC_DESCRIPTOR_RANK (array);
rstride0 = rstride[0];
@@ -292,7 +292,7 @@ cshift1 (gfc_array_char * const restrict ret,
/* Advance to the next section. */
rptr += rstride0;
sptr += sstride0;
- hptr += hstride0;
+ PTR_INCREMENT_BYTES (hptr, hstride0);
count[0]++;
n = 0;
while (count[n] == extent[n])
@@ -302,9 +302,9 @@ cshift1 (gfc_array_char * const restrict ret,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
+ PTR_DECREMENT_BYTES (hptr, hstride[n] * extent[n]);
rptr -= rstride[n] * extent[n];
sptr -= sstride[n] * extent[n];
- hptr -= hstride[n] * extent[n];
n++;
if (n >= dim - 1)
{
@@ -317,7 +317,7 @@ cshift1 (gfc_array_char * const restrict ret,
count[n]++;
rptr += rstride[n];
sptr += sstride[n];
- hptr += hstride[n];
+ PTR_INCREMENT_BYTES (hptr, hstride[n]);
}
}
}
diff --git a/libgfortran/m4/cshift1a.m4 b/libgfortran/m4/cshift1a.m4
index b78d16aaa72d..1b5f983a2404 100644
--- a/libgfortran/m4/cshift1a.m4
+++ b/libgfortran/m4/cshift1a.m4
@@ -84,21 +84,21 @@ cshift1'rtype_qual`_'atype_code` ('atype` * const restrict ret,
{
if (dim == which)
{
- roffset = GFC_DESCRIPTOR_STRIDE(ret,dim);
+ roffset = GFC_DESCRIPTOR_STRIDE_BYTES(ret,dim);
if (roffset == 0)
- roffset = 1;
- soffset = GFC_DESCRIPTOR_STRIDE(array,dim);
+ roffset = sizeof ('atype_name`);
+ soffset = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
if (soffset == 0)
- soffset = 1;
+ soffset = sizeof ('atype_name`);
len = GFC_DESCRIPTOR_EXTENT(array,dim);
}
else
{
count[n] = 0;
extent[n] = GFC_DESCRIPTOR_EXTENT(array,dim);
- rstride[n] = GFC_DESCRIPTOR_STRIDE(ret,dim);
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,dim);
- hstride[n] = GFC_DESCRIPTOR_STRIDE(h,n);
+ rstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(ret,dim);
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
+ hstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(h,n);
rs_ex[n] = rstride[n] * extent[n];
ss_ex[n] = sstride[n] * extent[n];
hs_ex[n] = hstride[n] * extent[n];
@@ -106,11 +106,11 @@ cshift1'rtype_qual`_'atype_code` ('atype` * const restrict ret,
}
}
if (sstride[0] == 0)
- sstride[0] = 1;
+ sstride[0] = sizeof ('atype_name`);
if (rstride[0] == 0)
- rstride[0] = 1;
+ rstride[0] = sizeof ('atype_name`);
if (hstride[0] == 0)
- hstride[0] = 1;
+ hstride[0] = sizeof ('rtype_name`);
dim = GFC_DESCRIPTOR_RANK (array);
rstride0 = rstride[0];
@@ -134,9 +134,9 @@ cshift1'rtype_qual`_'atype_code` ('atype` * const restrict ret,
if (sh < 0)
sh += len;
}
- src = &sptr[sh * soffset];
+ src = (const 'atype_name` *) (((char*)sptr) + sh * soffset);
dest = rptr;
- if (soffset == 1 && roffset == 1)
+ if (soffset == sizeof ('atype_name`) && roffset == sizeof ('atype_name`))
{
size_t len1 = sh * sizeof ('atype_name`);
size_t len2 = (len - sh) * sizeof ('atype_name`);
@@ -148,21 +148,21 @@ cshift1'rtype_qual`_'atype_code` ('atype` * const restrict ret,
for (n = 0; n < len - sh; n++)
{
*dest = *src;
- dest += roffset;
- src += soffset;
+ PTR_INCREMENT_BYTES (dest, roffset);
+ PTR_INCREMENT_BYTES (src, soffset);
}
for (src = sptr, n = 0; n < sh; n++)
{
*dest = *src;
- dest += roffset;
- src += soffset;
+ PTR_INCREMENT_BYTES (dest, roffset);
+ PTR_INCREMENT_BYTES (src, soffset);
}
}
/* Advance to the next section. */
- rptr += rstride0;
- sptr += sstride0;
- hptr += hstride0;
+ PTR_INCREMENT_BYTES (rptr, rstride0);
+ PTR_INCREMENT_BYTES (sptr, sstride0);
+ PTR_INCREMENT_BYTES (hptr, hstride0);
count[0]++;
n = 0;
while (count[n] == extent[n])
@@ -170,9 +170,9 @@ cshift1'rtype_qual`_'atype_code` ('atype` * const restrict ret,
/* When we get to the end of a dimension, reset it and increment
the next dimension. */
count[n] = 0;
- rptr -= rs_ex[n];
- sptr -= ss_ex[n];
- hptr -= hs_ex[n];
+ PTR_DECREMENT_BYTES (rptr, rs_ex[n]);
+ PTR_DECREMENT_BYTES (sptr, ss_ex[n]);
+ PTR_DECREMENT_BYTES (hptr, hs_ex[n]);
n++;
if (n >= dim - 1)
{
@@ -183,9 +183,9 @@ cshift1'rtype_qual`_'atype_code` ('atype` * const restrict ret,
else
{
count[n]++;
- rptr += rstride[n];
- sptr += sstride[n];
- hptr += hstride[n];
+ PTR_INCREMENT_BYTES (rptr, rstride[n]);
+ PTR_INCREMENT_BYTES (sptr, sstride[n]);
+ PTR_INCREMENT_BYTES (hptr, hstride[n]);
}
}
}
diff --git a/libgfortran/m4/eoshift1.m4 b/libgfortran/m4/eoshift1.m4
index f878894c6240..7de92f2054e2 100644
--- a/libgfortran/m4/eoshift1.m4
+++ b/libgfortran/m4/eoshift1.m4
@@ -140,7 +140,7 @@ eoshift1 (gfc_array_char * const restrict ret,
rstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(ret,dim);
sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
- hstride[n] = GFC_DESCRIPTOR_STRIDE(h,n);
+ hstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(h,n);
n++;
}
}
@@ -149,7 +149,7 @@ eoshift1 (gfc_array_char * const restrict ret,
if (rstride[0] == 0)
rstride[0] = size;
if (hstride[0] == 0)
- hstride[0] = 1;
+ hstride[0] = GFC_DESCRIPTOR_SIZE(h);
dim = GFC_DESCRIPTOR_RANK (array);
rstride0 = rstride[0];
@@ -225,7 +225,7 @@ eoshift1 (gfc_array_char * const restrict ret,
/* Advance to the next section. */
rptr += rstride0;
sptr += sstride0;
- hptr += hstride0;
+ PTR_INCREMENT_BYTES (hptr, hstride0);
count[0]++;
n = 0;
while (count[n] == extent[n])
@@ -235,9 +235,9 @@ eoshift1 (gfc_array_char * const restrict ret,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
+ PTR_DECREMENT_BYTES (hptr, hstride[n] * extent[n]);
rptr -= rstride[n] * extent[n];
sptr -= sstride[n] * extent[n];
- hptr -= hstride[n] * extent[n];
n++;
if (n >= dim - 1)
{
@@ -250,7 +250,7 @@ eoshift1 (gfc_array_char * const restrict ret,
count[n]++;
rptr += rstride[n];
sptr += sstride[n];
- hptr += hstride[n];
+ PTR_INCREMENT_BYTES (hptr, hstride[n]);
}
}
}
diff --git a/libgfortran/m4/eoshift3.m4 b/libgfortran/m4/eoshift3.m4
index 6e877e82f910..28706a998194 100644
--- a/libgfortran/m4/eoshift3.m4
+++ b/libgfortran/m4/eoshift3.m4
@@ -144,7 +144,7 @@ eoshift3 (gfc_array_char * const restrict ret,
rstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(ret,dim);
sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
- hstride[n] = GFC_DESCRIPTOR_STRIDE(h,n);
+ hstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(h,n);
if (bound)
bstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(bound,n);
else
@@ -157,7 +157,7 @@ eoshift3 (gfc_array_char * const restrict ret,
if (rstride[0] == 0)
rstride[0] = size;
if (hstride[0] == 0)
- hstride[0] = 1;
+ hstride[0] = GFC_DESCRIPTOR_SIZE(h);
if (bound && bstride[0] == 0)
bstride[0] = size;
@@ -239,9 +239,9 @@ eoshift3 (gfc_array_char * const restrict ret,
}
/* Advance to the next section. */
+ PTR_INCREMENT_BYTES (hptr, hstride0);
rptr += rstride0;
sptr += sstride0;
- hptr += hstride0;
bptr += bstride0;
count[0]++;
n = 0;
@@ -252,9 +252,9 @@ eoshift3 (gfc_array_char * const restrict ret,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
+ PTR_DECREMENT_BYTES (hptr, hstride[n] * extent[n]);
rptr -= rstride[n] * extent[n];
sptr -= sstride[n] * extent[n];
- hptr -= hstride[n] * extent[n];
bptr -= bstride[n] * extent[n];
n++;
if (n >= dim - 1)
@@ -266,9 +266,9 @@ eoshift3 (gfc_array_char * const restrict ret,
else
{
count[n]++;
+ PTR_INCREMENT_BYTES (hptr, hstride[n]);
rptr += rstride[n];
sptr += sstride[n];
- hptr += hstride[n];
bptr += bstride[n];
}
}
diff --git a/libgfortran/m4/findloc2s.m4 b/libgfortran/m4/findloc2s.m4
index a0f13f8cadb2..1508355c1512 100644
--- a/libgfortran/m4/findloc2s.m4
+++ b/libgfortran/m4/findloc2s.m4
@@ -40,5 +40,4 @@ define(comparison,ifelse(atype_kind,4,dnl
`compare_string_char4 (len_array, src, len_value, value) == 0',dnl
`compare_string (len_array, (char *) src, len_value, (char *) value) == 0'))dnl
define(len_arg,`len_array, len_value')dnl
-define(base_mult,`len_array')dnl
include(ifindloc2.m4)dnl
diff --git a/libgfortran/m4/ifindloc0.m4 b/libgfortran/m4/ifindloc0.m4
index d47c1c8f7a02..1fb5f169fdc0 100644
--- a/libgfortran/m4/ifindloc0.m4
+++ b/libgfortran/m4/ifindloc0.m4
@@ -62,7 +62,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
sz = 1;
for (n = 0; n < rank; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n);
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
sz *= extent[n];
if (extent[n] <= 0)
@@ -87,7 +87,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
return;
}
- base -= sstride[0] * 'base_mult`;
+ PTR_DECREMENT_BYTES (base, sstride[0]);
} while(++count[0] != extent[0]);
n = 0;
@@ -98,14 +98,14 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- base += sstride[n] * extent[n] * 'base_mult`;
+ PTR_INCREMENT_BYTES (base, sstride[n] * extent[n]);
n++;
if (n >= rank)
return;
else
{
count[n]++;
- base -= sstride[n] * 'base_mult`;
+ PTR_DECREMENT_BYTES (base, sstride[n]);
}
} while (count[n] == extent[n]);
}
@@ -124,7 +124,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
return;
}
- base += sstride[0] * 'base_mult`;
+ PTR_INCREMENT_BYTES (base, sstride[0]);
} while(++count[0] != extent[0]);
n = 0;
@@ -135,14 +135,14 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- base -= sstride[n] * extent[n] * 'base_mult`;
+ PTR_DECREMENT_BYTES (base, sstride[n] * extent[n]);
n++;
if (n >= rank)
return;
else
{
count[n]++;
- base += sstride[n] * 'base_mult`;
+ PTR_INCREMENT_BYTES (base, sstride[n]);
}
} while (count[n] == extent[n]);
}
@@ -205,7 +205,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
sz = 1;
for (n = 0; n < rank; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n);
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
sz *= extent[n];
@@ -231,7 +231,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
return;
}
- base -= sstride[0] * 'base_mult`;
+ PTR_DECREMENT_BYTES (base, sstride[0]);
mbase -= mstride[0];
} while(++count[0] != extent[0]);
@@ -243,7 +243,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- base += sstride[n] * extent[n] * 'base_mult`;
+ PTR_INCREMENT_BYTES (base, sstride[n] * extent[n]);
mbase -= mstride[n] * extent[n];
n++;
if (n >= rank)
@@ -251,7 +251,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
else
{
count[n]++;
- base -= sstride[n] * 'base_mult`;
+ PTR_DECREMENT_BYTES (base, sstride[n]);
mbase += mstride[n];
}
} while (count[n] == extent[n]);
@@ -271,7 +271,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
return;
}
- base += sstride[0] * 'base_mult`;
+ PTR_INCREMENT_BYTES (base, sstride[0]);
mbase += mstride[0];
} while(++count[0] != extent[0]);
@@ -283,7 +283,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- base -= sstride[n] * extent[n] * 'base_mult`;
+ PTR_DECREMENT_BYTES (base, sstride[n] * extent[n]);
mbase -= mstride[n] * extent[n];
n++;
if (n >= rank)
@@ -291,7 +291,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
else
{
count[n]++;
- base += sstride[n]* 'base_mult`;
+ PTR_INCREMENT_BYTES (base, sstride[n]);
mbase += mstride[n];
}
} while (count[n] == extent[n]);
diff --git a/libgfortran/m4/ifindloc1.m4 b/libgfortran/m4/ifindloc1.m4
index 7b2c2d2a6557..8e2eb95df7f4 100644
--- a/libgfortran/m4/ifindloc1.m4
+++ b/libgfortran/m4/ifindloc1.m4
@@ -56,11 +56,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
len = 0;
- delta = GFC_DESCRIPTOR_STRIDE(array,dim);
+ delta = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
for (n = 0; n < dim; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n);
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
if (extent[n] < 0)
@@ -68,7 +68,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
}
for (n = dim; n < rank; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array, n + 1);
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array, n + 1);
extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1);
if (extent[n] < 0)
@@ -114,7 +114,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
for (n = 0; n < rank; n++)
{
count[n] = 0;
- dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
+ dstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,n);
if (extent[n] <= 0)
return;
}
@@ -131,39 +131,41 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
result = 0;
if (back)
{
- src = base + (len - 1) * delta * 'base_mult`;
- for (n = len; n > 0; n--, src -= delta * 'base_mult`)
+ src = (const 'atype_name` * restrict) (((char*) base) + (len - 1) * delta);
+ for (n = len; n > 0; n--)
{
if ('comparison`)
{
result = n;
break;
}
+ PTR_DECREMENT_BYTES (src, delta);
}
}
else
{
src = base;
- for (n = 1; n <= len; n++, src += delta * 'base_mult`)
+ for (n = 1; n <= len; n++)
{
if ('comparison`)
{
result = n;
break;
}
+ PTR_INCREMENT_BYTES (src, delta);
}
}
*dest = result;
count[0]++;
- base += sstride[0] * 'base_mult`;
- dest += dstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
+ PTR_INCREMENT_BYTES (dest, dstride[0]);
n = 0;
while (count[n] == extent[n])
{
count[n] = 0;
- base -= sstride[n] * extent[n] * 'base_mult`;
- dest -= dstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (base, sstride[n] * extent[n]);
+ PTR_DECREMENT_BYTES (dest, dstride[n] * extent[n]);
n++;
if (n >= rank)
{
@@ -173,8 +175,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
else
{
count[n]++;
- base += sstride[n] * 'base_mult`;
- dest += dstride[n];
+ PTR_INCREMENT_BYTES (base, sstride[n]);
+ PTR_INCREMENT_BYTES (dest, dstride[n]);
}
}
}
@@ -213,7 +215,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
if (len < 0)
len = 0;
- delta = GFC_DESCRIPTOR_STRIDE(array,dim);
+ delta = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
mdelta = GFC_DESCRIPTOR_STRIDE_BYTES(mask,dim);
mbase = mask->base_addr;
@@ -231,7 +233,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
for (n = 0; n < dim; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n);
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
@@ -240,7 +242,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
}
for (n = dim; n < rank; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array, n + 1);
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array, n + 1);
mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask, n + 1);
extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1);
@@ -287,7 +289,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
for (n = 0; n < rank; n++)
{
count[n] = 0;
- dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
+ dstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,n);
if (extent[n] <= 0)
return;
}
@@ -305,43 +307,47 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
result = 0;
if (back)
{
- src = base + (len - 1) * delta * 'base_mult`;
+ src = (const 'atype_name` * restrict) (((char*)base) + (len - 1) * delta);
msrc = mbase + (len - 1) * mdelta;
- for (n = len; n > 0; n--, src -= delta * 'base_mult`, msrc -= mdelta)
+ for (n = len; n > 0; n--)
{
if (*msrc && 'comparison`)
{
result = n;
break;
}
+ PTR_DECREMENT_BYTES (src, delta);
+ msrc -= mdelta;
}
}
else
{
src = base;
msrc = mbase;
- for (n = 1; n <= len; n++, src += delta * 'base_mult`, msrc += mdelta)
+ for (n = 1; n <= len; n++)
{
if (*msrc && 'comparison`)
{
result = n;
break;
}
+ PTR_INCREMENT_BYTES (src, delta);
+ msrc += mdelta;
}
}
*dest = result;
count[0]++;
- base += sstride[0] * 'base_mult`;
+ PTR_INCREMENT_BYTES (base, sstride[0]);
+ PTR_INCREMENT_BYTES (dest, dstride[0]);
mbase += mstride[0];
- dest += dstride[0];
n = 0;
while (count[n] == extent[n])
{
count[n] = 0;
- base -= sstride[n] * extent[n] * 'base_mult`;
+ PTR_DECREMENT_BYTES (base, sstride[n] * extent[n]);
+ PTR_DECREMENT_BYTES (dest, dstride[n] * extent[n]);
mbase -= mstride[n] * extent[n];
- dest -= dstride[n] * extent[n];
n++;
if (n >= rank)
{
@@ -351,8 +357,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
else
{
count[n]++;
- base += sstride[n] * 'base_mult`;
- dest += dstride[n];
+ PTR_INCREMENT_BYTES (base, sstride[n]);
+ PTR_INCREMENT_BYTES (dest, dstride[n]);
}
}
}
@@ -446,7 +452,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
for (n = 0; n < rank; n++)
{
count[n] = 0;
- dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
+ dstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,n);
if (extent[n] <= 0)
return;
}
@@ -458,12 +464,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
*dest = 0;
count[0]++;
- dest += dstride[0];
+ PTR_INCREMENT_BYTES (dest, dstride[0]);
n = 0;
while (count[n] == extent[n])
{
count[n] = 0;
- dest -= dstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (dest, dstride[n] * extent[n]);
n++;
if (n >= rank)
{
@@ -473,7 +479,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
else
{
count[n]++;
- dest += dstride[n];
+ PTR_INCREMENT_BYTES (dest, dstride[n]);
}
}
}
diff --git a/libgfortran/m4/ifindloc2.m4 b/libgfortran/m4/ifindloc2.m4
index 35bdc43babff..d01e770287f3 100644
--- a/libgfortran/m4/ifindloc2.m4
+++ b/libgfortran/m4/ifindloc2.m4
@@ -37,7 +37,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
if (extent <= 0)
return 0;
- sstride = GFC_DESCRIPTOR_STRIDE(array,0) * 'base_mult`;
+ sstride = GFC_DESCRIPTOR_STRIDE_BYTES(array,0);
if (back)
{
src = GFC_DESCRIPTOR1_ELEM_ADDRESS (array, extent - 1);
@@ -45,7 +45,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
{
if ('comparison`)
return i;
- src -= sstride;
+ PTR_DECREMENT_BYTES (src, sstride);
}
}
else
@@ -55,7 +55,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
{
if ('comparison`)
return i;
- src += sstride;
+ PTR_INCREMENT_BYTES (src, sstride);
}
}
return 0;
@@ -87,7 +87,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
else
internal_error (NULL, "Funny sized logical array");
- sstride = GFC_DESCRIPTOR_STRIDE(array,0) * 'base_mult`;
+ sstride = GFC_DESCRIPTOR_STRIDE_BYTES(array,0);
mstride = GFC_DESCRIPTOR_STRIDE_BYTES(mask,0);
if (back)
@@ -98,7 +98,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
{
if (*mbase && ('comparison`))
return i;
- src -= sstride;
+ PTR_DECREMENT_BYTES (src, sstride);
mbase -= mstride;
}
}
@@ -109,7 +109,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
{
if (*mbase && ('comparison`))
return i;
- src += sstride;
+ PTR_INCREMENT_BYTES (src, sstride);
mbase += mstride;
}
}
diff --git a/libgfortran/m4/iforeach-s.m4 b/libgfortran/m4/iforeach-s.m4
index 22db8306bdc6..ae6cf656e269 100644
--- a/libgfortran/m4/iforeach-s.m4
+++ b/libgfortran/m4/iforeach-s.m4
@@ -48,7 +48,7 @@ void
for (n = 0; n < rank; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n) * len;
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
count[n] = 0;
if (extent[n] <= 0)
@@ -77,7 +77,7 @@ define(START_FOREACH_BLOCK,
define(FINISH_FOREACH_FUNCTION,
` /* Implementation end. */
/* Advance to the next element. */
- base += sstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
}
while (++count[0] != extent[0]);
n = 0;
@@ -88,7 +88,7 @@ define(FINISH_FOREACH_FUNCTION,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- base -= sstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (base, sstride[n] * extent[n]);
n++;
if (n >= rank)
{
@@ -99,7 +99,7 @@ define(FINISH_FOREACH_FUNCTION,
else
{
count[n]++;
- base += sstride[n];
+ PTR_INCREMENT_BYTES (base, sstride[n]);
}
}
while (count[n] == extent[n]);
@@ -177,7 +177,7 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
for (n = 0; n < rank; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n) * len;
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
count[n] = 0;
@@ -201,7 +201,7 @@ define(START_MASKED_FOREACH_BLOCK, `START_FOREACH_BLOCK')dnl
define(FINISH_MASKED_FOREACH_FUNCTION,
` /* Implementation end. */
/* Advance to the next element. */
- base += sstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
mbase += mstride[0];
}
while (++count[0] != extent[0]);
@@ -213,7 +213,7 @@ define(FINISH_MASKED_FOREACH_FUNCTION,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- base -= sstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (base, sstride[n] * extent[n]);
mbase -= mstride[n] * extent[n];
n++;
if (n >= rank)
@@ -225,7 +225,7 @@ define(FINISH_MASKED_FOREACH_FUNCTION,
else
{
count[n]++;
- base += sstride[n];
+ PTR_INCREMENT_BYTES (base, sstride[n]);
mbase += mstride[n];
}
}
@@ -281,7 +281,7 @@ s'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
GFC_DESCRIPTOR_DIMENSION_SET(retarray, 0, 0, rank-1, 1);
retarray->dtype.rank = 1;
retarray->offset = 0;
- retarray->base_addr = xmallocarray (rank, sizeof (rtype_name));
+ retarray->base_addr = xmallocarray (rank, sizeof ('rtype_name`));
}
else if (unlikely (compile_options.bounds_check))
{
diff --git a/libgfortran/m4/iforeach-s2.m4 b/libgfortran/m4/iforeach-s2.m4
index c2248f312754..3c3236c3a425 100644
--- a/libgfortran/m4/iforeach-s2.m4
+++ b/libgfortran/m4/iforeach-s2.m4
@@ -43,7 +43,7 @@ void
for (n = 0; n < rank; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n) * len;
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
count[n] = 0;
if (extent[n] <= 0)
@@ -64,7 +64,7 @@ define(START_FOREACH_BLOCK,
define(FINISH_FOREACH_FUNCTION,
` /* Implementation end. */
/* Advance to the next element. */
- base += sstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
}
while (++count[0] != extent[0]);
n = 0;
@@ -75,7 +75,7 @@ define(FINISH_FOREACH_FUNCTION,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- base -= sstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (base, sstride[n] * extent[n]);
n++;
if (n >= rank)
{
@@ -86,7 +86,7 @@ define(FINISH_FOREACH_FUNCTION,
else
{
count[n]++;
- base += sstride[n];
+ PTR_INCREMENT_BYTES (base, sstride[n]);
}
}
while (count[n] == extent[n]);
@@ -146,7 +146,7 @@ m'name`'rtype_qual`_'atype_code` ('atype_name` * const restrict ret,
for (n = 0; n < rank; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n) * len;
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
count[n] = 0;
@@ -161,7 +161,7 @@ define(START_MASKED_FOREACH_BLOCK, `START_FOREACH_BLOCK')dnl
define(FINISH_MASKED_FOREACH_FUNCTION,
` /* Implementation end. */
/* Advance to the next element. */
- base += sstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
mbase += mstride[0];
}
while (++count[0] != extent[0]);
@@ -173,7 +173,7 @@ define(FINISH_MASKED_FOREACH_FUNCTION,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- base -= sstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (base, sstride[n] * extent[n]);
mbase -= mstride[n] * extent[n];
n++;
if (n >= rank)
@@ -185,7 +185,7 @@ define(FINISH_MASKED_FOREACH_FUNCTION,
else
{
count[n]++;
- base += sstride[n];
+ PTR_INCREMENT_BYTES (base, sstride[n]);
mbase += mstride[n];
}
}
diff --git a/libgfortran/m4/iforeach.m4 b/libgfortran/m4/iforeach.m4
index 65461df66aed..2a88bd3affad 100644
--- a/libgfortran/m4/iforeach.m4
+++ b/libgfortran/m4/iforeach.m4
@@ -39,7 +39,7 @@ void
for (n = 0; n < rank; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n);
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
count[n] = 0;
if (extent[n] <= 0)
@@ -66,7 +66,7 @@ define(START_FOREACH_BLOCK,
define(FINISH_FOREACH_FUNCTION,
` /* Implementation end. */
/* Advance to the next element. */
- base += sstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
}
while (++count[0] != extent[0]);
n = 0;
@@ -77,7 +77,7 @@ define(FINISH_FOREACH_FUNCTION,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- base -= sstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (base, sstride[n] * extent[n]);
n++;
if (n >= rank)
{
@@ -88,7 +88,7 @@ define(FINISH_FOREACH_FUNCTION,
else
{
count[n]++;
- base += sstride[n];
+ PTR_INCREMENT_BYTES (base, sstride[n]);
}
}
while (count[n] == extent[n]);
@@ -162,7 +162,7 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
for (n = 0; n < rank; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n);
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
count[n] = 0;
@@ -186,7 +186,7 @@ define(START_MASKED_FOREACH_BLOCK, `START_FOREACH_BLOCK')dnl
define(FINISH_MASKED_FOREACH_FUNCTION,
` /* Implementation end. */
/* Advance to the next element. */
- base += sstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
mbase += mstride[0];
}
while (++count[0] != extent[0]);
@@ -198,7 +198,7 @@ define(FINISH_MASKED_FOREACH_FUNCTION,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- base -= sstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (base, sstride[n] * extent[n]);
mbase -= mstride[n] * extent[n];
n++;
if (n >= rank)
@@ -210,7 +210,7 @@ define(FINISH_MASKED_FOREACH_FUNCTION,
else
{
count[n]++;
- base += sstride[n];
+ PTR_INCREMENT_BYTES (base, sstride[n]);
mbase += mstride[n];
}
}
diff --git a/libgfortran/m4/ifunction-s.m4 b/libgfortran/m4/ifunction-s.m4
index 61cc898c3e5d..e5a4d6e3a829 100644
--- a/libgfortran/m4/ifunction-s.m4
+++ b/libgfortran/m4/ifunction-s.m4
@@ -68,11 +68,11 @@ void
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
len = 0;
- delta = GFC_DESCRIPTOR_STRIDE(array,dim) * string_len;
+ delta = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
for (n = 0; n < dim; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n) * string_len;
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
if (extent[n] < 0)
@@ -80,7 +80,7 @@ void
}
for (n = dim; n < rank; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array, n + 1) * string_len;
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array, n + 1);
extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1);
if (extent[n] < 0)
@@ -106,7 +106,7 @@ void
alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
- retarray->base_addr = xmallocarray (alloc_size, sizeof (rtype_name));
+ retarray->base_addr = xmallocarray (alloc_size, sizeof ('rtype_name`));
if (alloc_size == 0)
return;
}
@@ -126,7 +126,7 @@ void
for (n = 0; n < rank; n++)
{
count[n] = 0;
- dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
+ dstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,n);
if (extent[n] <= 0)
return;
}
@@ -147,10 +147,11 @@ define(START_ARRAY_BLOCK,
*dest = '$1`;
else
{
- for (n = 0; n < len; n++, src += delta)
+ for (n = 0; n < len; n++)
{
')dnl
define(FINISH_ARRAY_FUNCTION,
+ PTR_INCREMENT_BYTES (src, delta);
` }
'$1`
*dest = result;
@@ -158,8 +159,8 @@ define(FINISH_ARRAY_FUNCTION,
}
/* Advance to the next element. */
count[0]++;
- base += sstride[0];
- dest += dstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
+ PTR_INCREMENT_BYTES (dest, dstride[0]);
n = 0;
while (count[n] == extent[n])
{
@@ -168,8 +169,8 @@ define(FINISH_ARRAY_FUNCTION,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- base -= sstride[n] * extent[n];
- dest -= dstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (base, sstride[n] * extent[n]);
+ PTR_DECREMENT_BYTES (dest, dstride[n] * extent[n]);
n++;
if (n >= rank)
{
@@ -180,8 +181,8 @@ define(FINISH_ARRAY_FUNCTION,
else
{
count[n]++;
- base += sstride[n];
- dest += dstride[n];
+ PTR_INCREMENT_BYTES (base, sstride[n]);
+ PTR_INCREMENT_BYTES (dest, dstride[n]);
}
}
}
@@ -254,12 +255,12 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
else
runtime_error ("Funny sized logical array");
- delta = GFC_DESCRIPTOR_STRIDE(array,dim) * string_len;
+ delta = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
mdelta = GFC_DESCRIPTOR_STRIDE_BYTES(mask,dim);
for (n = 0; n < dim; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n) * string_len;
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
@@ -269,7 +270,7 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
}
for (n = dim; n < rank; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n + 1) * string_len;
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n + 1);
mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask, n + 1);
extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1);
@@ -296,7 +297,7 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
retarray->offset = 0;
retarray->dtype.rank = rank;
- retarray->base_addr = xmallocarray (alloc_size, sizeof (rtype_name));
+ retarray->base_addr = xmallocarray (alloc_size, sizeof ('rtype_name`));
if (alloc_size == 0)
return;
}
@@ -317,7 +318,7 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
for (n = 0; n < rank; n++)
{
count[n] = 0;
- dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
+ dstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,n);
if (extent[n] <= 0)
return;
}
@@ -335,18 +336,20 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
{
')dnl
define(START_MASKED_ARRAY_BLOCK,
-` for (n = 0; n < len; n++, src += delta, msrc += mdelta)
+` for (n = 0; n < len; n++)
{
')dnl
define(FINISH_MASKED_ARRAY_FUNCTION,
-` }
+` PTR_INCREMENT_BYTES (src, delta);
+ msrc += mdelta;
+ }
*dest = result;
}
/* Advance to the next element. */
count[0]++;
- base += sstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
+ PTR_INCREMENT_BYTES (dest, dstride[0]);
mbase += mstride[0];
- dest += dstride[0];
n = 0;
while (count[n] == extent[n])
{
@@ -355,9 +358,9 @@ define(FINISH_MASKED_ARRAY_FUNCTION,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- base -= sstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (base, sstride[n] * extent[n]);
+ PTR_DECREMENT_BYTES (dest, dstride[n] * extent[n]);
mbase -= mstride[n] * extent[n];
- dest -= dstride[n] * extent[n];
n++;
if (n >= rank)
{
@@ -368,9 +371,9 @@ define(FINISH_MASKED_ARRAY_FUNCTION,
else
{
count[n]++;
- base += sstride[n];
+ PTR_INCREMENT_BYTES (base, sstride[n]);
+ PTR_INCREMENT_BYTES (dest, dstride[n]);
mbase += mstride[n];
- dest += dstride[n];
}
}
}
@@ -452,7 +455,7 @@ s'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
- retarray->base_addr = xmallocarray (alloc_size, sizeof (rtype_name));
+ retarray->base_addr = xmallocarray (alloc_size, sizeof ('rtype_name`));
if (alloc_size == 0)
return;
}
@@ -483,7 +486,7 @@ s'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
for (n = 0; n < rank; n++)
{
count[n] = 0;
- dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
+ dstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,n);
}
dest = retarray->base_addr;
@@ -492,7 +495,7 @@ s'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
{
*dest = '$1`;
count[0]++;
- dest += dstride[0];
+ PTR_INCREMENT_BYTES (dest, dstride[0]);
n = 0;
while (count[n] == extent[n])
{
@@ -501,14 +504,14 @@ s'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- dest -= dstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (dest, dstride[n] * extent[n]);
n++;
if (n >= rank)
return;
else
{
count[n]++;
- dest += dstride[n];
+ PTR_INCREMENT_BYTES (dest, dstride[n]);
}
}
}
diff --git a/libgfortran/m4/ifunction-s2.m4 b/libgfortran/m4/ifunction-s2.m4
index a41f54d8513d..c5bc2ef590e7 100644
--- a/libgfortran/m4/ifunction-s2.m4
+++ b/libgfortran/m4/ifunction-s2.m4
@@ -69,11 +69,11 @@ void
if (len < 0)
len = 0;
- delta = GFC_DESCRIPTOR_STRIDE(array,dim) * string_len;
+ delta = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
for (n = 0; n < dim; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n) * string_len;
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
if (extent[n] < 0)
@@ -81,7 +81,7 @@ void
}
for (n = dim; n < rank; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array, n + 1) * string_len;
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array, n + 1);
extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1);
if (extent[n] < 0)
@@ -128,7 +128,7 @@ void
for (n = 0; n < rank; n++)
{
count[n] = 0;
- dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n) * string_len;
+ dstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,n);
if (extent[n] <= 0)
return;
}
@@ -148,10 +148,11 @@ define(START_ARRAY_BLOCK,
memset (dest, '$1`, sizeof (*dest) * string_len);
else
{
- for (n = 0; n < len; n++, src += delta)
+ for (n = 0; n < len; n++)
{
')dnl
define(FINISH_ARRAY_FUNCTION,
+ PTR_INCREMENT_BYTES (src, delta);
` }
'$1`
memcpy (dest, retval, sizeof (*dest) * string_len);
@@ -159,8 +160,8 @@ define(FINISH_ARRAY_FUNCTION,
}
/* Advance to the next element. */
count[0]++;
- base += sstride[0];
- dest += dstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
+ PTR_INCREMENT_BYTES (dest, dstride[0]);
n = 0;
while (count[n] == extent[n])
{
@@ -169,8 +170,8 @@ define(FINISH_ARRAY_FUNCTION,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- base -= sstride[n] * extent[n];
- dest -= dstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (base, sstride[n] * extent[n]);
+ PTR_DECREMENT_BYTES (dest, dstride[n] * extent[n]);
n++;
if (n >= rank)
{
@@ -181,8 +182,8 @@ define(FINISH_ARRAY_FUNCTION,
else
{
count[n]++;
- base += sstride[n];
- dest += dstride[n];
+ PTR_INCREMENT_BYTES (base, sstride[n]);
+ PTR_INCREMENT_BYTES (dest, dstride[n]);
}
}
}
@@ -254,12 +255,12 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
else
runtime_error ("Funny sized logical array");
- delta = GFC_DESCRIPTOR_STRIDE(array,dim) * string_len;
+ delta = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
mdelta = GFC_DESCRIPTOR_STRIDE_BYTES(mask,dim);
for (n = 0; n < dim; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n) * string_len;
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
@@ -269,7 +270,7 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
}
for (n = dim; n < rank; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n + 1) * string_len;
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n + 1);
mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask, n + 1);
extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1);
@@ -297,7 +298,7 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
retarray->offset = 0;
retarray->dtype.rank = rank;
- retarray->base_addr = xmallocarray (alloc_size, sizeof (rtype_name));
+ retarray->base_addr = xmallocarray (alloc_size, sizeof ('rtype_name`));
if (alloc_size == 0)
return;
}
@@ -318,7 +319,7 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
for (n = 0; n < rank; n++)
{
count[n] = 0;
- dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n) * string_len;
+ dstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,n);
if (extent[n] <= 0)
return;
}
@@ -328,7 +329,7 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
while (base)
{
- const atype_name * restrict src;
+ const 'atype_name` * restrict src;
const GFC_LOGICAL_1 * restrict msrc;
src = base;
@@ -336,18 +337,20 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
{
')dnl
define(START_MASKED_ARRAY_BLOCK,
-` for (n = 0; n < len; n++, src += delta, msrc += mdelta)
+` for (n = 0; n < len; n++)
{
')dnl
define(FINISH_MASKED_ARRAY_FUNCTION,
-` }
+` PTR_INCREMENT_BYTES (src, delta);
+ msrc += mdelta;
+ }
memcpy (dest, retval, sizeof (*dest) * string_len);
}
/* Advance to the next element. */
count[0]++;
- base += sstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
+ PTR_INCREMENT_BYTES (dest, dstride[0]);
mbase += mstride[0];
- dest += dstride[0];
n = 0;
while (count[n] == extent[n])
{
@@ -356,9 +359,9 @@ define(FINISH_MASKED_ARRAY_FUNCTION,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- base -= sstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (base, sstride[n] * extent[n]);
+ PTR_DECREMENT_BYTES (dest, dstride[n] * extent[n]);
mbase -= mstride[n] * extent[n];
- dest -= dstride[n] * extent[n];
n++;
if (n >= rank)
{
@@ -369,9 +372,9 @@ define(FINISH_MASKED_ARRAY_FUNCTION,
else
{
count[n]++;
- base += sstride[n];
+ PTR_INCREMENT_BYTES (base, sstride[n]);
+ PTR_INCREMENT_BYTES (dest, dstride[n]);
mbase += mstride[n];
- dest += dstride[n];
}
}
}
@@ -454,7 +457,7 @@ s'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1]
* string_len;
- retarray->base_addr = xmallocarray (alloc_size, sizeof (rtype_name));
+ retarray->base_addr = xmallocarray (alloc_size, sizeof ('rtype_name`));
if (alloc_size == 0)
return;
}
@@ -485,7 +488,7 @@ s'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
for (n = 0; n < rank; n++)
{
count[n] = 0;
- dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n) * string_len;
+ dstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,n);
}
dest = retarray->base_addr;
@@ -494,7 +497,7 @@ s'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
{
memset (dest, '$1`, sizeof (*dest) * string_len);
count[0]++;
- dest += dstride[0];
+ PTR_INCREMENT_BYTES (dest, dstride[0]);
n = 0;
while (count[n] == extent[n])
{
@@ -503,14 +506,14 @@ s'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- dest -= dstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (dest, dstride[n] * extent[n]);
n++;
if (n >= rank)
return;
else
{
count[n]++;
- dest += dstride[n];
+ PTR_INCREMENT_BYTES (dest, dstride[n]);
}
}
}
diff --git a/libgfortran/m4/ifunction.m4 b/libgfortran/m4/ifunction.m4
index 39963bf2dfc1..079e3f1ef99e 100644
--- a/libgfortran/m4/ifunction.m4
+++ b/libgfortran/m4/ifunction.m4
@@ -55,11 +55,11 @@ void
len = GFC_DESCRIPTOR_EXTENT(array,dim);
if (len < 0)
len = 0;
- delta = GFC_DESCRIPTOR_STRIDE(array,dim);
+ delta = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
for (n = 0; n < dim; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n);
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
if (extent[n] < 0)
@@ -67,7 +67,7 @@ void
}
for (n = dim; n < rank; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array, n + 1);
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array, n + 1);
extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1);
if (extent[n] < 0)
@@ -90,6 +90,8 @@ void
retarray->offset = 0;
retarray->dtype.rank = rank;
+ retarray->dtype.elem_len = sizeof ('rtype_name`);
+ retarray->span = sizeof ('rtype_name`);
alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
@@ -113,7 +115,7 @@ void
for (n = 0; n < rank; n++)
{
count[n] = 0;
- dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
+ dstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,n);
if (extent[n] <= 0)
return;
}
@@ -135,20 +137,21 @@ define(START_ARRAY_BLOCK,
else
{
#if ! defined HAVE_BACK_ARG
- for (n = 0; n < len; n++, src += delta)
+ for (n = 0; n < len; n++)
{
#endif
')dnl
define(FINISH_ARRAY_FUNCTION,
-` }
+` PTR_INCREMENT_BYTES (src, delta);
+ }
'$1`
*dest = result;
}
}
/* Advance to the next element. */
count[0]++;
- base += sstride[0];
- dest += dstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
+ PTR_INCREMENT_BYTES (dest, dstride[0]);
n = 0;
while (count[n] == extent[n])
{
@@ -157,8 +160,8 @@ define(FINISH_ARRAY_FUNCTION,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- base -= sstride[n] * extent[n];
- dest -= dstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (base, sstride[n] * extent[n]);
+ PTR_DECREMENT_BYTES (dest, dstride[n] * extent[n]);
n++;
if (n >= rank)
{
@@ -169,8 +172,8 @@ define(FINISH_ARRAY_FUNCTION,
else
{
count[n]++;
- base += sstride[n];
- dest += dstride[n];
+ PTR_INCREMENT_BYTES (base, sstride[n]);
+ PTR_INCREMENT_BYTES (dest, dstride[n]);
}
}
}
@@ -242,12 +245,12 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
else
runtime_error ("Funny sized logical array");
- delta = GFC_DESCRIPTOR_STRIDE(array,dim);
+ delta = GFC_DESCRIPTOR_STRIDE_BYTES(array,dim);
mdelta = GFC_DESCRIPTOR_STRIDE_BYTES(mask,dim);
for (n = 0; n < dim; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n);
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
@@ -257,7 +260,7 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
}
for (n = dim; n < rank; n++)
{
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n + 1);
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n + 1);
mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask, n + 1);
extent[n] = GFC_DESCRIPTOR_EXTENT(array, n + 1);
@@ -283,6 +286,8 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
retarray->offset = 0;
retarray->dtype.rank = rank;
+ retarray->dtype.elem_len = sizeof ('rtype_name`);
+ retarray->span = sizeof ('rtype_name`);
retarray->base_addr = xmallocarray (alloc_size, sizeof (rtype_name));
if (alloc_size == 0)
@@ -305,7 +310,7 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
for (n = 0; n < rank; n++)
{
count[n] = 0;
- dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
+ dstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,n);
if (extent[n] <= 0)
return;
}
@@ -323,18 +328,20 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
{
')dnl
define(START_MASKED_ARRAY_BLOCK,
-` for (n = 0; n < len; n++, src += delta, msrc += mdelta)
+` for (n = 0; n < len; n++)
{
')dnl
define(FINISH_MASKED_ARRAY_FUNCTION,
-` }
+` PTR_INCREMENT_BYTES (src, delta);
+ msrc += mdelta;
+ }
*dest = result;
}
/* Advance to the next element. */
count[0]++;
- base += sstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
+ PTR_INCREMENT_BYTES (dest, dstride[0]);
mbase += mstride[0];
- dest += dstride[0];
n = 0;
while (count[n] == extent[n])
{
@@ -343,9 +350,9 @@ define(FINISH_MASKED_ARRAY_FUNCTION,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- base -= sstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (base, sstride[n] * extent[n]);
+ PTR_DECREMENT_BYTES (dest, dstride[n] * extent[n]);
mbase -= mstride[n] * extent[n];
- dest -= dstride[n] * extent[n];
n++;
if (n >= rank)
{
@@ -356,9 +363,9 @@ define(FINISH_MASKED_ARRAY_FUNCTION,
else
{
count[n]++;
- base += sstride[n];
+ PTR_INCREMENT_BYTES (base, sstride[n]);
+ PTR_INCREMENT_BYTES (dest, dstride[n]);
mbase += mstride[n];
- dest += dstride[n];
}
}
}
@@ -472,7 +479,7 @@ s'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
for (n = 0; n < rank; n++)
{
count[n] = 0;
- dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
+ dstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,n);
}
dest = retarray->base_addr;
@@ -481,7 +488,7 @@ s'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
{
*dest = '$1`;
count[0]++;
- dest += dstride[0];
+ PTR_INCREMENT_BYTES (dest, dstride[0]);
n = 0;
while (count[n] == extent[n])
{
@@ -490,14 +497,14 @@ s'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- dest -= dstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (dest, dstride[n] * extent[n]);
n++;
if (n >= rank)
return;
else
{
count[n]++;
- dest += dstride[n];
+ PTR_INCREMENT_BYTES (dest, dstride[n]);
}
}
}
diff --git a/libgfortran/m4/ifunction_logical.m4 b/libgfortran/m4/ifunction_logical.m4
index ebf6520ea532..b6d7e616d546 100644
--- a/libgfortran/m4/ifunction_logical.m4
+++ b/libgfortran/m4/ifunction_logical.m4
@@ -121,7 +121,7 @@ void
for (n = 0; n < rank; n++)
{
count[n] = 0;
- dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
+ dstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,n);
if (extent[n] <= 0)
return;
}
@@ -155,18 +155,19 @@ define(START_ARRAY_BLOCK,
*dest = '$1`;
else
{
- for (n = 0; n < len; n++, src += delta)
+ for (n = 0; n < len; n++)
{
')dnl
define(FINISH_ARRAY_FUNCTION,
- ` }
+` PTR_INCREMENT_BYTES (src, delta);
+ }
*dest = result;
}
}
/* Advance to the next element. */
count[0]++;
- base += sstride[0];
- dest += dstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
+ PTR_INCREMENT_BYTES (dest, dstride[0]);
n = 0;
while (count[n] == extent[n])
{
@@ -175,8 +176,8 @@ define(FINISH_ARRAY_FUNCTION,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
+ PTR_DECREMENT_BYTES (dest, dstride[n] * extent[n]);
base -= sstride[n] * extent[n];
- dest -= dstride[n] * extent[n];
n++;
if (n >= rank)
{
@@ -187,8 +188,8 @@ define(FINISH_ARRAY_FUNCTION,
else
{
count[n]++;
- base += sstride[n];
- dest += dstride[n];
+ PTR_INCREMENT_BYTES (base, sstride[n]);
+ PTR_INCREMENT_BYTES (dest, dstride[n]);
}
}
}
diff --git a/libgfortran/m4/in_pack.m4 b/libgfortran/m4/in_pack.m4
index 5e35d3301516..b6c7c3562f5f 100644
--- a/libgfortran/m4/in_pack.m4
+++ b/libgfortran/m4/in_pack.m4
@@ -52,12 +52,12 @@ internal_pack_'rtype_ccode` ('rtype` * source)
since the stride=0 thing has been removed from the frontend. */
dim = GFC_DESCRIPTOR_RANK (source);
- ssize = 1;
+ ssize = sizeof ('rtype_name`);
packed = 1;
for (index_type n = 0; n < dim; n++)
{
count[n] = 0;
- stride[n] = GFC_DESCRIPTOR_STRIDE(source,n);
+ stride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(source,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(source,n);
if (extent[n] <= 0)
{
@@ -87,7 +87,7 @@ internal_pack_'rtype_ccode` ('rtype` * source)
/* Copy the data. */
*(dest++) = *src;
/* Advance to the next element. */
- src += stride0;
+ PTR_INCREMENT_BYTES (src, stride0);
count[0]++;
/* Advance to the next source element. */
index_type n = 0;
@@ -98,7 +98,7 @@ internal_pack_'rtype_ccode` ('rtype` * source)
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- src -= stride[n] * extent[n];
+ PTR_DECREMENT_BYTES (src, stride[n] * extent[n]);
n++;
if (n == dim)
{
@@ -108,7 +108,7 @@ internal_pack_'rtype_ccode` ('rtype` * source)
else
{
count[n]++;
- src += stride[n];
+ PTR_INCREMENT_BYTES (src, stride[n]);
}
}
}
diff --git a/libgfortran/m4/in_unpack.m4 b/libgfortran/m4/in_unpack.m4
index d71371c4d880..ff1d86dbb582 100644
--- a/libgfortran/m4/in_unpack.m4
+++ b/libgfortran/m4/in_unpack.m4
@@ -48,11 +48,11 @@ internal_unpack_'rtype_ccode` ('rtype` * d, const 'rtype_name` * src)
return;
dim = GFC_DESCRIPTOR_RANK (d);
- dsize = 1;
+ dsize = sizeof ('rtype_name`);
for (index_type n = 0; n < dim; n++)
{
count[n] = 0;
- stride[n] = GFC_DESCRIPTOR_STRIDE(d,n);
+ stride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(d,n);
extent[n] = GFC_DESCRIPTOR_EXTENT(d,n);
if (extent[n] <= 0)
return;
@@ -65,7 +65,7 @@ internal_unpack_'rtype_ccode` ('rtype` * d, const 'rtype_name` * src)
if (dsize != 0)
{
- memcpy (dest, src, dsize * sizeof ('rtype_name`));
+ memcpy (dest, src, dsize);
return;
}
@@ -76,7 +76,7 @@ internal_unpack_'rtype_ccode` ('rtype` * d, const 'rtype_name` * src)
/* Copy the data. */
*dest = *(src++);
/* Advance to the next element. */
- dest += stride0;
+ PTR_INCREMENT_BYTES (dest, stride0);
count[0]++;
/* Advance to the next source element. */
index_type n = 0;
@@ -87,7 +87,7 @@ internal_unpack_'rtype_ccode` ('rtype` * d, const 'rtype_name` * src)
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- dest -= stride[n] * extent[n];
+ PTR_DECREMENT_BYTES (dest, stride[n] * extent[n]);
n++;
if (n == dim)
{
@@ -97,7 +97,7 @@ internal_unpack_'rtype_ccode` ('rtype` * d, const 'rtype_name` * src)
else
{
count[n]++;
- dest += stride[n];
+ PTR_INCREMENT_BYTES (dest, stride[n]);
}
}
}
diff --git a/libgfortran/m4/matmul_internal.m4 b/libgfortran/m4/matmul_internal.m4
index e0d91a70de8e..d41a27110151 100644
--- a/libgfortran/m4/matmul_internal.m4
+++ b/libgfortran/m4/matmul_internal.m4
@@ -9,6 +9,7 @@
index_type rxstride, rystride, axstride, aystride, bxstride, bystride;
index_type x, y, n, count, xcount, ycount;
+ index_type aystride_bytes, bystride_bytes, rystride_bytes;
assert (GFC_DESCRIPTOR_RANK (a) == 2
|| GFC_DESCRIPTOR_RANK (b) == 2);
@@ -98,19 +99,21 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
either as a row or a column matrix. We want both cases to
work. */
rxstride = rystride = GFC_DESCRIPTOR_STRIDE(retarray,0);
+ rystride_bytes = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,0);
}
else
{
rxstride = GFC_DESCRIPTOR_STRIDE(retarray,0);
rystride = GFC_DESCRIPTOR_STRIDE(retarray,1);
+ rystride_bytes = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,1);
}
-
if (GFC_DESCRIPTOR_RANK (a) == 1)
{
/* Treat it as a a row matrix A[1,count]. */
axstride = GFC_DESCRIPTOR_STRIDE(a,0);
aystride = 1;
+ aystride_bytes = sizeof ('rtype_name`);
xcount = 1;
count = GFC_DESCRIPTOR_EXTENT(a,0);
@@ -119,6 +122,7 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
{
axstride = GFC_DESCRIPTOR_STRIDE(a,0);
aystride = GFC_DESCRIPTOR_STRIDE(a,1);
+ aystride_bytes = GFC_DESCRIPTOR_STRIDE_BYTES(a,1);
count = GFC_DESCRIPTOR_EXTENT(a,1);
xcount = GFC_DESCRIPTOR_EXTENT(a,0);
@@ -147,6 +151,7 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
{
bxstride = GFC_DESCRIPTOR_STRIDE(b,0);
bystride = GFC_DESCRIPTOR_STRIDE(b,1);
+ bystride_bytes = GFC_DESCRIPTOR_STRIDE_BYTES(b,1);
ycount = GFC_DESCRIPTOR_EXTENT(b,1);
}
diff --git a/libgfortran/m4/matmull.m4 b/libgfortran/m4/matmull.m4
index 52134a347479..609d6c4d4ecd 100644
--- a/libgfortran/m4/matmull.m4
+++ b/libgfortran/m4/matmull.m4
@@ -163,13 +163,13 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
`
if (GFC_DESCRIPTOR_RANK (retarray) == 1)
{
- rxstride = GFC_DESCRIPTOR_STRIDE(retarray,0);
+ rxstride = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,0);
rystride = rxstride;
}
else
{
- rxstride = GFC_DESCRIPTOR_STRIDE(retarray,0);
- rystride = GFC_DESCRIPTOR_STRIDE(retarray,1);
+ rxstride = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,0);
+ rystride = GFC_DESCRIPTOR_STRIDE_BYTES(retarray,1);
}
/* If we have rank 1 parameters, zero the absent stride, and set the size to
@@ -227,12 +227,12 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
pb += bstride;
}
- dest += rxstride;
+ PTR_INCREMENT_BYTES (dest, rxstride);
abase += xstride;
}
abase -= xstride * xcount;
bbase += ystride;
- dest += rystride - (rxstride * xcount);
+ PTR_INCREMENT_BYTES (dest, rystride - (rxstride * xcount));
}
}
diff --git a/libgfortran/m4/maxloc0.m4 b/libgfortran/m4/maxloc0.m4
index 5aef384bb8db..ce5cc0b88cef 100644
--- a/libgfortran/m4/maxloc0.m4
+++ b/libgfortran/m4/maxloc0.m4
@@ -55,7 +55,7 @@ FOREACH_FUNCTION(
GFC_DESCRIPTOR1_ELEM (retarray, n) = count[n] + 1;
break;
}
- base += sstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
}
while (++count[0] != extent[0]);
if (likely (fast))
@@ -72,7 +72,7 @@ FOREACH_FUNCTION(
for (n = 0; n < rank; n++)
GFC_DESCRIPTOR1_ELEM (retarray, n) = count[n] + 1;
}
- base += sstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
}
while (++count[0] != extent[0]);
else
@@ -113,7 +113,7 @@ MASKED_FOREACH_FUNCTION(
break;
}
}
- base += sstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
mbase += mstride[0];
}
while (++count[0] != extent[0]);
@@ -130,7 +130,7 @@ MASKED_FOREACH_FUNCTION(
for (n = 0; n < rank; n++)
GFC_DESCRIPTOR1_ELEM (retarray, n) = count[n] + 1;
}
- base += sstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
}
while (++count[0] != extent[0]);
else
diff --git a/libgfortran/m4/maxloc1.m4 b/libgfortran/m4/maxloc1.m4
index 924b6d61b81c..f5f66cd1a119 100644
--- a/libgfortran/m4/maxloc1.m4
+++ b/libgfortran/m4/maxloc1.m4
@@ -42,19 +42,20 @@ ARRAY_FUNCTION(0,
#endif
result = 1;',
`#if defined ('atype_nan`)
- for (n = 0; n < len; n++, src += delta)
- {
- if (*src >= maxval)
- {
- maxval = *src;
- result = (rtype_name)n + 1;
- break;
- }
- }
+ for (n = 0; n < len; n++)
+ {
+ if (*src >= maxval)
+ {
+ maxval = *src;
+ result = (rtype_name)n + 1;
+ break;
+ }
+ PTR_INCREMENT_BYTES (src, delta);
+ }
#else
n = 0;
#endif
- for (; n < len; n++, src += delta)
+ for (; n < len; n++)
{
if (back ? *src >= maxval : *src > maxval)
{
@@ -86,6 +87,8 @@ MASKED_ARRAY_FUNCTION(0,
break;
}
}
+ PTR_INCREMENT_BYTES (src, delta);
+ msrc += mdelta;
}
#if defined ('atype_nan`)
if (unlikely (n >= len))
@@ -93,16 +96,18 @@ MASKED_ARRAY_FUNCTION(0,
else
#endif
if (back)
- for (; n < len; n++, src += delta, msrc += mdelta)
+ for (; n < len; n++)
{
if (*msrc && unlikely (*src >= maxval))
{
maxval = *src;
result = (rtype_name)n + 1;
}
+ PTR_INCREMENT_BYTES (src, delta);
+ msrc += mdelta;
}
else
- for (; n < len; n++, src += delta, msrc += mdelta)
+ for (; n < len; n++)
{
if (*msrc && unlikely (*src > maxval))
{
diff --git a/libgfortran/m4/maxloc1s.m4 b/libgfortran/m4/maxloc1s.m4
index 762862280120..c5760a3eee36 100644
--- a/libgfortran/m4/maxloc1s.m4
+++ b/libgfortran/m4/maxloc1s.m4
@@ -53,8 +53,10 @@ MASKED_ARRAY_FUNCTION(0,
result = (rtype_name)n + 1;
break;
}
+ PTR_INCREMENT_BYTES (src, delta);
+ msrc += mdelta;
}
- for (; n < len; n++, src += delta, msrc += mdelta)
+ for (; n < len; n++)
{
if (*msrc && (back ? compare_fcn (src, maxval, string_len) >= 0 :
compare_fcn (src, maxval, string_len) > 0))
diff --git a/libgfortran/m4/maxloc2s.m4 b/libgfortran/m4/maxloc2s.m4
index a0359dfeb86f..6def7dc86fa7 100644
--- a/libgfortran/m4/maxloc2s.m4
+++ b/libgfortran/m4/maxloc2s.m4
@@ -58,7 +58,7 @@ export_proto('name`'rtype_qual`_'atype_code`);
if (extent <= 0)
return 0;
- sstride = GFC_DESCRIPTOR_STRIDE(array,0) * len;
+ sstride = GFC_DESCRIPTOR_STRIDE_BYTES(array,0);
ret = 1;
src = array->base_addr;
@@ -71,7 +71,7 @@ export_proto('name`'rtype_qual`_'atype_code`);
ret = i;
maxval = src;
}
- src += sstride;
+ PTR_INCREMENT_BYTES (src, sstride);
}
return ret;
}
@@ -100,7 +100,7 @@ m'name`'rtype_qual`_'atype_code` ('atype` * const restrict array,
if (extent <= 0)
return 0;
- sstride = GFC_DESCRIPTOR_STRIDE(array,0) * len;
+ sstride = GFC_DESCRIPTOR_STRIDE_BYTES(array,0);
mask_kind = GFC_DESCRIPTOR_SIZE (mask);
mbase = mask->base_addr;
@@ -139,7 +139,7 @@ m'name`'rtype_qual`_'atype_code` ('atype` * const restrict array,
ret = i;
maxval = src;
}
- src += sstride;
+ PTR_INCREMENT_BYTES (src, sstride);
mbase += mstride;
}
return ret;
diff --git a/libgfortran/m4/maxval.m4 b/libgfortran/m4/maxval.m4
index a60a21ac31b6..db0316301672 100644
--- a/libgfortran/m4/maxval.m4
+++ b/libgfortran/m4/maxval.m4
@@ -39,10 +39,11 @@ ARRAY_FUNCTION(atype_min,
`#if defined ('atype_nan`)
if (*src >= result)
break;
+ PTR_INCREMENT_BYTES (src, delta);
}
if (unlikely (n >= len))
result = 'atype_nan`;
- else for (; n < len; n++, src += delta)
+ else for (; n < len; n++)
{
#endif
if (*src > result)
@@ -66,6 +67,8 @@ MASKED_ARRAY_FUNCTION(atype_min,
#endif
break;
}
+ PTR_INCREMENT_BYTES (src, delta);
+ msrc += mdelta;
}
if (unlikely (n >= len))
{
@@ -75,7 +78,7 @@ MASKED_ARRAY_FUNCTION(atype_min,
result = 'atype_min`;
#endif
}
- else for (; n < len; n++, src += delta, msrc += mdelta)
+ else for (; n < len; n++)
{
#endif
if (*msrc && *src > result)
diff --git a/libgfortran/m4/maxval1s.m4 b/libgfortran/m4/maxval1s.m4
index 3759754dc0d5..a6126eb985c7 100644
--- a/libgfortran/m4/maxval1s.m4
+++ b/libgfortran/m4/maxval1s.m4
@@ -47,8 +47,10 @@ MASKED_ARRAY_FUNCTION(0,
retval = src;
break;
}
+ PTR_INCREMENT_BYTES (src, delta);
+ msrc += mdelta;
}
- for (; n < len; n++, src += delta, msrc += mdelta)
+ for (; n < len; n++)
{
if (*msrc && compare_fcn (src, retval, string_len) > 0)
{
diff --git a/libgfortran/m4/minloc0.m4 b/libgfortran/m4/minloc0.m4
index e4a53331ab6f..23b668ac9937 100644
--- a/libgfortran/m4/minloc0.m4
+++ b/libgfortran/m4/minloc0.m4
@@ -55,7 +55,7 @@ FOREACH_FUNCTION(
GFC_DESCRIPTOR1_ELEM (retarray, n) = count[n] + 1;
break;
}
- base += sstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
}
while (++count[0] != extent[0]);
if (likely (fast))
@@ -72,7 +72,7 @@ FOREACH_FUNCTION(
for (n = 0; n < rank; n++)
GFC_DESCRIPTOR1_ELEM (retarray, n) = count[n] + 1;
}
- base += sstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
}
while (++count[0] != extent[0]);
else
@@ -113,7 +113,7 @@ MASKED_FOREACH_FUNCTION(
break;
}
}
- base += sstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
mbase += mstride[0];
}
while (++count[0] != extent[0]);
@@ -130,7 +130,7 @@ MASKED_FOREACH_FUNCTION(
for (n = 0; n < rank; n++)
GFC_DESCRIPTOR1_ELEM (retarray, n) = count[n] + 1;
}
- base += sstride[0];
+ PTR_INCREMENT_BYTES (base, sstride[0]);
}
while (++count[0] != extent[0]);
else
diff --git a/libgfortran/m4/minloc1.m4 b/libgfortran/m4/minloc1.m4
index b678145b51c4..3e4359c113b4 100644
--- a/libgfortran/m4/minloc1.m4
+++ b/libgfortran/m4/minloc1.m4
@@ -42,7 +42,7 @@ ARRAY_FUNCTION(0,
#endif
result = 1;',
`#if defined ('atype_nan`)
- for (n = 0; n < len; n++, src += delta)
+ for (n = 0; n < len; n++)
{
if (*src <= minval)
{
@@ -50,21 +50,25 @@ ARRAY_FUNCTION(0,
result = (rtype_name)n + 1;
break;
}
- }
+ PTR_INCREMENT_BYTES (src, delta);
+ }
#else
n = 0;
#endif
if (back)
- for (; n < len; n++, src += delta)
- {
- if (unlikely (*src <= minval))
- {
- minval = *src;
- result = ('rtype_name`)n + 1;
- }
- }
+ {
+ for (; n < len; n++)
+ {
+ if (unlikely (*src <= minval))
+ {
+ minval = *src;
+ result = ('rtype_name`)n + 1;
+ }
+ PTR_INCREMENT_BYTES (src, delta);
+ }
+ }
else
- for (; n < len; n++, src += delta)
+ for (; n < len; n++)
{
if (unlikely (*src < minval))
{
@@ -96,6 +100,8 @@ MASKED_ARRAY_FUNCTION(0,
break;
}
}
+ PTR_INCREMENT_BYTES (src, delta);
+ msrc += mdelta;
}
#if defined ('atype_nan`)
if (unlikely (n >= len))
@@ -103,16 +109,18 @@ MASKED_ARRAY_FUNCTION(0,
else
#endif
if (back)
- for (; n < len; n++, src += delta, msrc += mdelta)
+ for (; n < len; n++)
{
if (*msrc && unlikely (*src <= minval))
{
minval = *src;
result = (rtype_name)n + 1;
}
+ PTR_INCREMENT_BYTES (src, delta);
+ msrc += mdelta;
}
else
- for (; n < len; n++, src += delta, msrc += mdelta)
+ for (; n < len; n++)
{
if (*msrc && unlikely (*src < minval))
{
diff --git a/libgfortran/m4/minloc1s.m4 b/libgfortran/m4/minloc1s.m4
index f24318e4c56e..caa39b5c05db 100644
--- a/libgfortran/m4/minloc1s.m4
+++ b/libgfortran/m4/minloc1s.m4
@@ -53,8 +53,10 @@ MASKED_ARRAY_FUNCTION(0,
result = (rtype_name)n + 1;
break;
}
+ PTR_INCREMENT_BYTES (src, delta);
+ msrc += mdelta;
}
- for (; n < len; n++, src += delta, msrc += mdelta)
+ for (; n < len; n++)
{
if (*msrc && (back ? compare_fcn (src, minval, string_len) <= 0 :
compare_fcn (src, minval, string_len) < 0))
diff --git a/libgfortran/m4/minloc2s.m4 b/libgfortran/m4/minloc2s.m4
index d9674ae88ac1..65a200664c62 100644
--- a/libgfortran/m4/minloc2s.m4
+++ b/libgfortran/m4/minloc2s.m4
@@ -59,7 +59,7 @@ export_proto('name`'rtype_qual`_'atype_code`);
if (extent <= 0)
return 0;
- sstride = GFC_DESCRIPTOR_STRIDE(array,0) * len;
+ sstride = GFC_DESCRIPTOR_STRIDE_BYTES(array,0);
ret = 1;
src = array->base_addr;
@@ -72,7 +72,7 @@ export_proto('name`'rtype_qual`_'atype_code`);
ret = i;
minval = src;
}
- src += sstride;
+ PTR_INCREMENT_BYTES (src, sstride);
}
return ret;
}
@@ -101,7 +101,7 @@ m'name`'rtype_qual`_'atype_code` ('atype` * const restrict array,
if (extent <= 0)
return 0;
- sstride = GFC_DESCRIPTOR_STRIDE(array,0) * len;
+ sstride = GFC_DESCRIPTOR_STRIDE_BYTES(array,0);
mask_kind = GFC_DESCRIPTOR_SIZE (mask);
mbase = mask->base_addr;
@@ -122,7 +122,7 @@ m'name`'rtype_qual`_'atype_code` ('atype` * const restrict array,
{
if (*mbase)
break;
- mbase += mstride;
+ PTR_INCREMENT_BYTES (mbase, mstride);
}
if (j == extent)
@@ -141,7 +141,7 @@ m'name`'rtype_qual`_'atype_code` ('atype` * const restrict array,
ret = i;
maxval = src;
}
- src += sstride;
+ PTR_INCREMENT_BYTES (src, sstride);
mbase += mstride;
}
return ret;
diff --git a/libgfortran/m4/minval.m4 b/libgfortran/m4/minval.m4
index ec6ad8d93b24..855f21bbc2ae 100644
--- a/libgfortran/m4/minval.m4
+++ b/libgfortran/m4/minval.m4
@@ -39,10 +39,11 @@ ARRAY_FUNCTION(atype_max,
`#if defined ('atype_nan`)
if (*src <= result)
break;
+ PTR_INCREMENT_BYTES (src, delta);
}
if (unlikely (n >= len))
result = 'atype_nan`;
- else for (; n < len; n++, src += delta)
+ else for (; n < len; n++)
{
#endif
if (*src < result)
@@ -66,6 +67,8 @@ MASKED_ARRAY_FUNCTION(atype_max,
#endif
break;
}
+ PTR_INCREMENT_BYTES (src, delta);
+ msrc += mdelta;
}
if (unlikely (n >= len))
{
@@ -75,7 +78,7 @@ MASKED_ARRAY_FUNCTION(atype_max,
result = 'atype_max`;
#endif
}
- else for (; n < len; n++, src += delta, msrc += mdelta)
+ else for (; n < len; n++)
{
#endif
if (*msrc && *src < result)
diff --git a/libgfortran/m4/minval1s.m4 b/libgfortran/m4/minval1s.m4
index 30ac98674a55..b50b9decdaa5 100644
--- a/libgfortran/m4/minval1s.m4
+++ b/libgfortran/m4/minval1s.m4
@@ -47,8 +47,10 @@ MASKED_ARRAY_FUNCTION(255,
retval = src;
break;
}
+ PTR_INCREMENT_BYTES (src, delta);
+ msrc += mdelta;
}
- for (; n < len; n++, src += delta, msrc += mdelta)
+ for (; n < len; n++)
{
if (*msrc && compare_fcn (src, retval, string_len) < 0)
{
diff --git a/libgfortran/m4/pack.m4 b/libgfortran/m4/pack.m4
index 43589b87e859..abbcd2e92700 100644
--- a/libgfortran/m4/pack.m4
+++ b/libgfortran/m4/pack.m4
@@ -127,11 +127,11 @@ pack_'rtype_code` ('rtype` *ret, const 'rtype` *array,
extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
if (extent[n] <= 0)
zero_sized = 1;
- sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n);
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask,n);
}
if (sstride[0] == 0)
- sstride[0] = 1;
+ sstride[0] = sizeof ('rtype_name`);
if (mstride[0] == 0)
mstride[0] = mask_kind;
@@ -188,9 +188,9 @@ pack_'rtype_code` ('rtype` *ret, const 'rtype` *array,
}
}
- rstride0 = GFC_DESCRIPTOR_STRIDE(ret,0);
+ rstride0 = GFC_DESCRIPTOR_STRIDE_BYTES(ret,0);
if (rstride0 == 0)
- rstride0 = 1;
+ rstride0 = sizeof ('rtype_name`);
sstride0 = sstride[0];
mstride0 = mstride[0];
rptr = ret->base_addr;
@@ -202,10 +202,10 @@ pack_'rtype_code` ('rtype` *ret, const 'rtype` *array,
{
/* Add it. */
*rptr = *sptr;
- rptr += rstride0;
+ PTR_INCREMENT_BYTES (rptr, rstride0);
}
/* Advance to the next element. */
- sptr += sstride0;
+ PTR_INCREMENT_BYTES (sptr, sstride0);
mptr += mstride0;
count[0]++;
n = 0;
@@ -216,7 +216,7 @@ pack_'rtype_code` ('rtype` *ret, const 'rtype` *array,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- sptr -= sstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (sptr, sstride[n] * extent[n]);
mptr -= mstride[n] * extent[n];
n++;
if (n >= dim)
@@ -228,7 +228,7 @@ pack_'rtype_code` ('rtype` *ret, const 'rtype` *array,
else
{
count[n]++;
- sptr += sstride[n];
+ PTR_INCREMENT_BYTES (sptr, sstride[n]);
mptr += mstride[n];
}
}
@@ -238,20 +238,20 @@ pack_'rtype_code` ('rtype` *ret, const 'rtype` *array,
if (vector)
{
n = GFC_DESCRIPTOR_EXTENT(vector,0);
- nelem = ((rptr - ret->base_addr) / rstride0);
+ nelem = ((char*)rptr - (char*)ret->base_addr) / rstride0;
if (n > nelem)
{
- sstride0 = GFC_DESCRIPTOR_STRIDE(vector,0);
+ sstride0 = GFC_DESCRIPTOR_STRIDE_BYTES(vector,0);
if (sstride0 == 0)
- sstride0 = 1;
+ sstride0 = sizeof ('rtype_name`);
sptr = (const 'rtype_name` *) GFC_DESCRIPTOR1_ELEM_ADDRESS (vector, nelem);
n -= nelem;
while (n--)
{
*rptr = *sptr;
- rptr += rstride0;
- sptr += sstride0;
+ PTR_INCREMENT_BYTES (rptr, rstride0);
+ PTR_INCREMENT_BYTES (sptr, sstride0);
}
}
}
diff --git a/libgfortran/m4/reshape.m4 b/libgfortran/m4/reshape.m4
index 3daa6f1230f3..10bc787b6074 100644
--- a/libgfortran/m4/reshape.m4
+++ b/libgfortran/m4/reshape.m4
@@ -129,12 +129,12 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
if (pad)
{
pdim = GFC_DESCRIPTOR_RANK (pad);
- psize = 1;
+ psize = GFC_DESCRIPTOR_SIZE(pad);
pempty = 0;
for (index_type n = 0; n < pdim; n++)
{
pcount[n] = 0;
- pstride[n] = GFC_DESCRIPTOR_STRIDE(pad,n);
+ pstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(pad,n);
pextent[n] = GFC_DESCRIPTOR_EXTENT(pad,n);
if (pextent[n] <= 0)
{
@@ -212,7 +212,7 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
}
}
- rsize = 1;
+ rsize = GFC_DESCRIPTOR_SIZE(ret);
for (index_type n = 0; n < rdim; n++)
{
index_type dim;
@@ -222,7 +222,7 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
dim = n;
rcount[n] = 0;
- rstride[n] = GFC_DESCRIPTOR_STRIDE(ret,dim);
+ rstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(ret,dim);
rextent[n] = GFC_DESCRIPTOR_EXTENT(ret,dim);
if (rextent[n] < 0)
rextent[n] = 0;
@@ -244,12 +244,12 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
avoids a warning. */
GFC_ASSERT(sdim>0);
- ssize = 1;
+ ssize = GFC_DESCRIPTOR_SIZE(source);
sempty = 0;
for (index_type n = 0; n < sdim; n++)
{
scount[n] = 0;
- sstride[n] = GFC_DESCRIPTOR_STRIDE(source,n);
+ sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(source,n);
sextent[n] = GFC_DESCRIPTOR_EXTENT(source,n);
if (sextent[n] <= 0)
{
@@ -265,8 +265,6 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
if (rsize != 0 && ssize != 0 && psize != 0)
{
- rsize *= sizeof ('rtype_name`);
- ssize *= sizeof ('rtype_name`);
psize *= sizeof ('rtype_name`);
reshape_packed ((char *)ret->base_addr, rsize, (char *)source->base_addr,
ssize, pad ? (char *)pad->base_addr : NULL, psize);
@@ -300,8 +298,8 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
/* Select between the source and pad arrays. */
*rptr = *src;
/* Advance to the next element. */
- rptr += rstride0;
- src += sstride0;
+ PTR_INCREMENT_BYTES (rptr, rstride0);
+ PTR_INCREMENT_BYTES (src, sstride0);
rcount[0]++;
scount[0]++;
@@ -314,7 +312,7 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
rcount[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- rptr -= rstride[n] * rextent[n];
+ PTR_DECREMENT_BYTES (rptr, rstride[n] * rextent[n]);
n++;
if (n == rdim)
{
@@ -325,7 +323,7 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
else
{
rcount[n]++;
- rptr += rstride[n];
+ PTR_INCREMENT_BYTES (rptr, rstride[n]);
}
}
/* Advance to the next source element. */
@@ -337,7 +335,7 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
scount[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- src -= sstride[n] * sextent[n];
+ PTR_DECREMENT_BYTES (src, sstride[n] * sextent[n]);
n++;
if (n == sdim)
{
@@ -361,7 +359,7 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
else
{
scount[n]++;
- src += sstride[n];
+ PTR_INCREMENT_BYTES (src, sstride[n]);
}
}
}
diff --git a/libgfortran/m4/spread.m4 b/libgfortran/m4/spread.m4
index d8ca85ed2894..fbf26958cae0 100644
--- a/libgfortran/m4/spread.m4
+++ b/libgfortran/m4/spread.m4
@@ -85,15 +85,15 @@ spread_'rtype_code` ('rtype` *ret, const 'rtype` *source,
if (n == along - 1)
{
ub = ncopies - 1;
- rdelta = rs;
+ rdelta = rs * sizeof ('rtype_name`);
rs *= ncopies;
}
else
{
count[dim] = 0;
extent[dim] = GFC_DESCRIPTOR_EXTENT(source,dim);
- sstride[dim] = GFC_DESCRIPTOR_STRIDE(source,dim);
- rstride[dim] = rs;
+ sstride[dim] = GFC_DESCRIPTOR_STRIDE_BYTES(source,dim);
+ rstride[dim] = rs * sizeof ('rtype_name`);
ub = extent[dim] - 1;
rs *= extent[dim];
@@ -127,7 +127,7 @@ spread_'rtype_code` ('rtype` *ret, const 'rtype` *source,
ret_extent = GFC_DESCRIPTOR_EXTENT(ret,n);
if (n == along - 1)
{
- rdelta = GFC_DESCRIPTOR_STRIDE(ret,n);
+ rdelta = GFC_DESCRIPTOR_STRIDE_BYTES(ret,n);
if (ret_extent != ncopies)
runtime_error("Incorrect extent in return value of SPREAD"
@@ -148,8 +148,8 @@ spread_'rtype_code` ('rtype` *ret, const 'rtype` *source,
if (extent[dim] <= 0)
zero_sized = 1;
- sstride[dim] = GFC_DESCRIPTOR_STRIDE(source,dim);
- rstride[dim] = GFC_DESCRIPTOR_STRIDE(ret,n);
+ sstride[dim] = GFC_DESCRIPTOR_STRIDE_BYTES(source,dim);
+ rstride[dim] = GFC_DESCRIPTOR_STRIDE_BYTES(ret,n);
dim++;
}
}
@@ -160,7 +160,7 @@ spread_'rtype_code` ('rtype` *ret, const 'rtype` *source,
{
if (n == along - 1)
{
- rdelta = GFC_DESCRIPTOR_STRIDE(ret,n);
+ rdelta = GFC_DESCRIPTOR_STRIDE_BYTES(ret,n);
}
else
{
@@ -168,8 +168,8 @@ spread_'rtype_code` ('rtype` *ret, const 'rtype` *source,
extent[dim] = GFC_DESCRIPTOR_EXTENT(source,dim);
if (extent[dim] <= 0)
zero_sized = 1;
- sstride[dim] = GFC_DESCRIPTOR_STRIDE(source,dim);
- rstride[dim] = GFC_DESCRIPTOR_STRIDE(ret,n);
+ sstride[dim] = GFC_DESCRIPTOR_STRIDE_BYTES(source,dim);
+ rstride[dim] = GFC_DESCRIPTOR_STRIDE_BYTES(ret,n);
dim++;
}
}
@@ -179,7 +179,7 @@ spread_'rtype_code` ('rtype` *ret, const 'rtype` *source,
return;
if (sstride[0] == 0)
- sstride[0] = 1;
+ sstride[0] = GFC_DESCRIPTOR_SIZE(source);
}
sstride0 = sstride[0];
rstride0 = rstride[0];
@@ -193,11 +193,11 @@ spread_'rtype_code` ('rtype` *ret, const 'rtype` *source,
for (n = 0; n < ncopies; n++)
{
*dest = *sptr;
- dest += rdelta;
+ PTR_INCREMENT_BYTES (dest, rdelta);
}
/* Advance to the next element. */
- sptr += sstride0;
- rptr += rstride0;
+ PTR_INCREMENT_BYTES (sptr, sstride0);
+ PTR_INCREMENT_BYTES (rptr, rstride0);
count[0]++;
n = 0;
while (count[n] == extent[n])
@@ -207,8 +207,8 @@ spread_'rtype_code` ('rtype` *ret, const 'rtype` *source,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- sptr -= sstride[n] * extent[n];
- rptr -= rstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (sptr, sstride[n] * extent[n]);
+ PTR_DECREMENT_BYTES (rptr, rstride[n] * extent[n]);
n++;
if (n >= srank)
{
@@ -219,8 +219,8 @@ spread_'rtype_code` ('rtype` *ret, const 'rtype` *source,
else
{
count[n]++;
- sptr += sstride[n];
- rptr += rstride[n];
+ PTR_INCREMENT_BYTES (sptr, sstride[n]);
+ PTR_INCREMENT_BYTES (rptr, rstride[n]);
}
}
}
@@ -256,12 +256,12 @@ spread_scalar_'rtype_code` ('rtype` *ret, const 'rtype_name` *source,
}
dest = ret->base_addr;
- stride = GFC_DESCRIPTOR_STRIDE(ret,0);
+ stride = GFC_DESCRIPTOR_STRIDE_BYTES(ret,0);
for (index_type n = 0; n < ncopies; n++)
{
*dest = *source;
- dest += stride;
+ PTR_INCREMENT_BYTES (dest, stride);
}
}
diff --git a/libgfortran/m4/unpack.m4 b/libgfortran/m4/unpack.m4
index 16b0066e5200..5aa923abadd7 100644
--- a/libgfortran/m4/unpack.m4
+++ b/libgfortran/m4/unpack.m4
@@ -95,7 +95,7 @@ unpack0_'rtype_code` ('rtype` *ret, const 'rtype` *vector,
GFC_DESCRIPTOR_EXTENT(mask,n) - 1, rs);
extent[n] = GFC_DESCRIPTOR_EXTENT(ret,n);
empty = empty || extent[n] <= 0;
- rstride[n] = GFC_DESCRIPTOR_STRIDE(ret,n);
+ rstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(ret,n);
mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask,n);
rs *= extent[n];
}
@@ -110,7 +110,7 @@ unpack0_'rtype_code` ('rtype` *ret, const 'rtype` *vector,
count[n] = 0;
extent[n] = GFC_DESCRIPTOR_EXTENT(ret,n);
empty = empty || extent[n] <= 0;
- rstride[n] = GFC_DESCRIPTOR_STRIDE(ret,n);
+ rstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(ret,n);
mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask,n);
}
if (rstride[0] == 0)
@@ -123,9 +123,9 @@ unpack0_'rtype_code` ('rtype` *ret, const 'rtype` *vector,
if (mstride[0] == 0)
mstride[0] = 1;
- vstride0 = GFC_DESCRIPTOR_STRIDE(vector,0);
+ vstride0 = GFC_DESCRIPTOR_STRIDE_BYTES(vector,0);
if (vstride0 == 0)
- vstride0 = 1;
+ vstride0 = GFC_DESCRIPTOR_SIZE(vector);
rstride0 = rstride[0];
mstride0 = mstride[0];
rptr = ret->base_addr;
@@ -137,7 +137,7 @@ unpack0_'rtype_code` ('rtype` *ret, const 'rtype` *vector,
{
/* From vector. */
*rptr = *vptr;
- vptr += vstride0;
+ PTR_INCREMENT_BYTES (vptr, vstride0);
}
else
{
@@ -145,7 +145,7 @@ unpack0_'rtype_code` ('rtype` *ret, const 'rtype` *vector,
*rptr = fval;
}
/* Advance to the next element. */
- rptr += rstride0;
+ PTR_INCREMENT_BYTES (rptr, rstride0);
mptr += mstride0;
count[0]++;
n = 0;
@@ -156,7 +156,7 @@ unpack0_'rtype_code` ('rtype` *ret, const 'rtype` *vector,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- rptr -= rstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (rptr, rstride[n] * extent[n]);
mptr -= mstride[n] * extent[n];
n++;
if (n >= dim)
@@ -168,7 +168,7 @@ unpack0_'rtype_code` ('rtype` *ret, const 'rtype` *vector,
else
{
count[n]++;
- rptr += rstride[n];
+ PTR_INCREMENT_BYTES (rptr, rstride[n]);
mptr += mstride[n];
}
}
@@ -241,8 +241,8 @@ unpack1_'rtype_code` ('rtype` *ret, const 'rtype` *vector,
GFC_DESCRIPTOR_EXTENT(mask,n) - 1, rs);
extent[n] = GFC_DESCRIPTOR_EXTENT(ret,n);
empty = empty || extent[n] <= 0;
- rstride[n] = GFC_DESCRIPTOR_STRIDE(ret,n);
- fstride[n] = GFC_DESCRIPTOR_STRIDE(field,n);
+ rstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(ret,n);
+ fstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(field,n);
mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask,n);
rs *= extent[n];
}
@@ -257,8 +257,8 @@ unpack1_'rtype_code` ('rtype` *ret, const 'rtype` *vector,
count[n] = 0;
extent[n] = GFC_DESCRIPTOR_EXTENT(ret,n);
empty = empty || extent[n] <= 0;
- rstride[n] = GFC_DESCRIPTOR_STRIDE(ret,n);
- fstride[n] = GFC_DESCRIPTOR_STRIDE(field,n);
+ rstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(ret,n);
+ fstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(field,n);
mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask,n);
}
if (rstride[0] == 0)
@@ -269,13 +269,13 @@ unpack1_'rtype_code` ('rtype` *ret, const 'rtype` *vector,
return;
if (fstride[0] == 0)
- fstride[0] = 1;
+ fstride[0] = GFC_DESCRIPTOR_SIZE(field);
if (mstride[0] == 0)
mstride[0] = 1;
- vstride0 = GFC_DESCRIPTOR_STRIDE(vector,0);
+ vstride0 = GFC_DESCRIPTOR_STRIDE_BYTES(vector,0);
if (vstride0 == 0)
- vstride0 = 1;
+ vstride0 = GFC_DESCRIPTOR_SIZE(vector);
rstride0 = rstride[0];
fstride0 = fstride[0];
mstride0 = mstride[0];
@@ -289,7 +289,7 @@ unpack1_'rtype_code` ('rtype` *ret, const 'rtype` *vector,
{
/* From vector. */
*rptr = *vptr;
- vptr += vstride0;
+ PTR_INCREMENT_BYTES (vptr, vstride0);
}
else
{
@@ -297,8 +297,8 @@ unpack1_'rtype_code` ('rtype` *ret, const 'rtype` *vector,
*rptr = *fptr;
}
/* Advance to the next element. */
- rptr += rstride0;
- fptr += fstride0;
+ PTR_INCREMENT_BYTES (rptr, rstride0);
+ PTR_INCREMENT_BYTES (fptr, fstride0);
mptr += mstride0;
count[0]++;
n = 0;
@@ -309,8 +309,8 @@ unpack1_'rtype_code` ('rtype` *ret, const 'rtype` *vector,
count[n] = 0;
/* We could precalculate these products, but this is a less
frequently used path so probably not worth it. */
- rptr -= rstride[n] * extent[n];
- fptr -= fstride[n] * extent[n];
+ PTR_DECREMENT_BYTES (rptr, rstride[n] * extent[n]);
+ PTR_DECREMENT_BYTES (fptr, fstride[n] * extent[n]);
mptr -= mstride[n] * extent[n];
n++;
if (n >= dim)
@@ -322,8 +322,8 @@ unpack1_'rtype_code` ('rtype` *ret, const 'rtype` *vector,
else
{
count[n]++;
- rptr += rstride[n];
- fptr += fstride[n];
+ PTR_INCREMENT_BYTES (rptr, rstride[n]);
+ PTR_INCREMENT_BYTES (fptr, fstride[n]);
mptr += mstride[n];
}
}
More information about the Gcc-cvs
mailing list