mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-13 10:50:22 +08:00
re PR libfortran/27895 (problem with RESHAPE and zero-sized arrays)
PR libfortran/27895 * intrinsics/reshape_generic.c (reshape_internal): Fix so that it works correctly for zero-sized arrays. * m4/reshape.m4: Likewise. * generated/reshape_r16.c: Regenerate. * generated/reshape_c4.c: Regenerate. * generated/reshape_i4.c: Regenerate. * generated/reshape_c16.c: Regenerate. * generated/reshape_r10.c: Regenerate. * generated/reshape_r8.c: Regenerate. * generated/reshape_c10.c: Regenerate. * generated/reshape_c8.c: Regenerate. * generated/reshape_i8.c: Regenerate. * generated/reshape_i16.c: Regenerate. * generated/reshape_r4.c: Regenerate. * gcc/testsuite/gfortran.dg/zero_sized_1.f90: Uncomment checks for RESHAPE. From-SVN: r118455
This commit is contained in:
parent
54f9963a20
commit
47c07d96b1
@ -1,3 +1,9 @@
|
||||
2006-11-03 Francois-Xavier Coudert <coudert@clipper.ens.fr>
|
||||
|
||||
PR libfortran/27895
|
||||
* gcc/testsuite/gfortran.dg/zero_sized_1.f90: Uncomment checks
|
||||
for RESHAPE.
|
||||
|
||||
2006-11-02 Brooks Moses <brooks.moses@codesourcery.com>
|
||||
|
||||
* lib/gfortran-dg.exp (gfortran-dg-test): Remove expected "In file"
|
||||
|
@ -193,5 +193,5 @@ program test
|
||||
call test_unpack
|
||||
call test_spread
|
||||
call test_pack
|
||||
! call test_reshape
|
||||
call test_reshape
|
||||
end
|
||||
|
@ -1,3 +1,21 @@
|
||||
2006-11-03 Francois-Xavier Coudert <coudert@clipper.ens.fr>
|
||||
|
||||
PR libfortran/27895
|
||||
* intrinsics/reshape_generic.c (reshape_internal): Fix so that it
|
||||
works correctly for zero-sized arrays.
|
||||
* m4/reshape.m4: Likewise.
|
||||
* generated/reshape_r16.c: Regenerate.
|
||||
* generated/reshape_c4.c: Regenerate.
|
||||
* generated/reshape_i4.c: Regenerate.
|
||||
* generated/reshape_c16.c: Regenerate.
|
||||
* generated/reshape_r10.c: Regenerate.
|
||||
* generated/reshape_r8.c: Regenerate.
|
||||
* generated/reshape_c10.c: Regenerate.
|
||||
* generated/reshape_c8.c: Regenerate.
|
||||
* generated/reshape_i8.c: Regenerate.
|
||||
* generated/reshape_i16.c: Regenerate.
|
||||
* generated/reshape_r4.c: Regenerate.
|
||||
|
||||
2006-10-31 Thomas Koenig <Thomas.Koenig@online.de>
|
||||
|
||||
PR libfortran/29627
|
||||
|
@ -37,8 +37,6 @@ Boston, MA 02110-1301, USA. */
|
||||
|
||||
typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type;
|
||||
|
||||
/* The shape parameter is ignored. We can currently deduce the shape from the
|
||||
return array. */
|
||||
|
||||
extern void reshape_c10 (gfc_array_c10 * const restrict,
|
||||
gfc_array_c10 * const restrict,
|
||||
@ -83,12 +81,13 @@ reshape_c10 (gfc_array_c10 * const restrict ret,
|
||||
const GFC_COMPLEX_10 *src;
|
||||
int n;
|
||||
int dim;
|
||||
int sempty, pempty;
|
||||
|
||||
if (ret->data == NULL)
|
||||
{
|
||||
rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1;
|
||||
rs = 1;
|
||||
for (n=0; n < rdim; n++)
|
||||
for (n = 0; n < rdim; n++)
|
||||
{
|
||||
ret->dim[n].lbound = 0;
|
||||
rex = shape->data[n * shape->dim[0].stride];
|
||||
@ -130,13 +129,17 @@ reshape_c10 (gfc_array_c10 * const restrict ret,
|
||||
|
||||
sdim = GFC_DESCRIPTOR_RANK (source);
|
||||
ssize = 1;
|
||||
sempty = 0;
|
||||
for (n = 0; n < sdim; n++)
|
||||
{
|
||||
scount[n] = 0;
|
||||
sstride[n] = source->dim[n].stride;
|
||||
sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound;
|
||||
if (sextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
sempty = 1;
|
||||
sextent[n] = 0;
|
||||
}
|
||||
|
||||
if (ssize == sstride[n])
|
||||
ssize *= sextent[n];
|
||||
@ -148,13 +151,18 @@ reshape_c10 (gfc_array_c10 * const restrict ret,
|
||||
{
|
||||
pdim = GFC_DESCRIPTOR_RANK (pad);
|
||||
psize = 1;
|
||||
pempty = 0;
|
||||
for (n = 0; n < pdim; n++)
|
||||
{
|
||||
pcount[n] = 0;
|
||||
pstride[n] = pad->dim[n].stride;
|
||||
pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound;
|
||||
if (pextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
pempty = 1;
|
||||
pextent[n] = 0;
|
||||
}
|
||||
|
||||
if (psize == pstride[n])
|
||||
psize *= pextent[n];
|
||||
else
|
||||
@ -166,6 +174,7 @@ reshape_c10 (gfc_array_c10 * const restrict ret,
|
||||
{
|
||||
pdim = 0;
|
||||
psize = 1;
|
||||
pempty = 1;
|
||||
pptr = NULL;
|
||||
}
|
||||
|
||||
@ -183,6 +192,24 @@ reshape_c10 (gfc_array_c10 * const restrict ret,
|
||||
rstride0 = rstride[0];
|
||||
sstride0 = sstride[0];
|
||||
|
||||
if (sempty && pempty)
|
||||
abort ();
|
||||
|
||||
if (sempty)
|
||||
{
|
||||
/* Switch immediately to the pad array. */
|
||||
src = pptr;
|
||||
sptr = NULL;
|
||||
sdim = pdim;
|
||||
for (dim = 0; dim < pdim; dim++)
|
||||
{
|
||||
scount[dim] = pcount[dim];
|
||||
sextent[dim] = pextent[dim];
|
||||
sstride[dim] = pstride[dim];
|
||||
sstride0 = sstride[0] * sizeof (GFC_COMPLEX_10);
|
||||
}
|
||||
}
|
||||
|
||||
while (rptr)
|
||||
{
|
||||
/* Select between the source and pad arrays. */
|
||||
@ -192,6 +219,7 @@ reshape_c10 (gfc_array_c10 * const restrict ret,
|
||||
src += sstride0;
|
||||
rcount[0]++;
|
||||
scount[0]++;
|
||||
|
||||
/* Advance to the next destination element. */
|
||||
n = 0;
|
||||
while (rcount[n] == rextent[n])
|
||||
|
@ -37,8 +37,6 @@ Boston, MA 02110-1301, USA. */
|
||||
|
||||
typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type;
|
||||
|
||||
/* The shape parameter is ignored. We can currently deduce the shape from the
|
||||
return array. */
|
||||
|
||||
extern void reshape_c16 (gfc_array_c16 * const restrict,
|
||||
gfc_array_c16 * const restrict,
|
||||
@ -83,12 +81,13 @@ reshape_c16 (gfc_array_c16 * const restrict ret,
|
||||
const GFC_COMPLEX_16 *src;
|
||||
int n;
|
||||
int dim;
|
||||
int sempty, pempty;
|
||||
|
||||
if (ret->data == NULL)
|
||||
{
|
||||
rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1;
|
||||
rs = 1;
|
||||
for (n=0; n < rdim; n++)
|
||||
for (n = 0; n < rdim; n++)
|
||||
{
|
||||
ret->dim[n].lbound = 0;
|
||||
rex = shape->data[n * shape->dim[0].stride];
|
||||
@ -130,13 +129,17 @@ reshape_c16 (gfc_array_c16 * const restrict ret,
|
||||
|
||||
sdim = GFC_DESCRIPTOR_RANK (source);
|
||||
ssize = 1;
|
||||
sempty = 0;
|
||||
for (n = 0; n < sdim; n++)
|
||||
{
|
||||
scount[n] = 0;
|
||||
sstride[n] = source->dim[n].stride;
|
||||
sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound;
|
||||
if (sextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
sempty = 1;
|
||||
sextent[n] = 0;
|
||||
}
|
||||
|
||||
if (ssize == sstride[n])
|
||||
ssize *= sextent[n];
|
||||
@ -148,13 +151,18 @@ reshape_c16 (gfc_array_c16 * const restrict ret,
|
||||
{
|
||||
pdim = GFC_DESCRIPTOR_RANK (pad);
|
||||
psize = 1;
|
||||
pempty = 0;
|
||||
for (n = 0; n < pdim; n++)
|
||||
{
|
||||
pcount[n] = 0;
|
||||
pstride[n] = pad->dim[n].stride;
|
||||
pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound;
|
||||
if (pextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
pempty = 1;
|
||||
pextent[n] = 0;
|
||||
}
|
||||
|
||||
if (psize == pstride[n])
|
||||
psize *= pextent[n];
|
||||
else
|
||||
@ -166,6 +174,7 @@ reshape_c16 (gfc_array_c16 * const restrict ret,
|
||||
{
|
||||
pdim = 0;
|
||||
psize = 1;
|
||||
pempty = 1;
|
||||
pptr = NULL;
|
||||
}
|
||||
|
||||
@ -183,6 +192,24 @@ reshape_c16 (gfc_array_c16 * const restrict ret,
|
||||
rstride0 = rstride[0];
|
||||
sstride0 = sstride[0];
|
||||
|
||||
if (sempty && pempty)
|
||||
abort ();
|
||||
|
||||
if (sempty)
|
||||
{
|
||||
/* Switch immediately to the pad array. */
|
||||
src = pptr;
|
||||
sptr = NULL;
|
||||
sdim = pdim;
|
||||
for (dim = 0; dim < pdim; dim++)
|
||||
{
|
||||
scount[dim] = pcount[dim];
|
||||
sextent[dim] = pextent[dim];
|
||||
sstride[dim] = pstride[dim];
|
||||
sstride0 = sstride[0] * sizeof (GFC_COMPLEX_16);
|
||||
}
|
||||
}
|
||||
|
||||
while (rptr)
|
||||
{
|
||||
/* Select between the source and pad arrays. */
|
||||
@ -192,6 +219,7 @@ reshape_c16 (gfc_array_c16 * const restrict ret,
|
||||
src += sstride0;
|
||||
rcount[0]++;
|
||||
scount[0]++;
|
||||
|
||||
/* Advance to the next destination element. */
|
||||
n = 0;
|
||||
while (rcount[n] == rextent[n])
|
||||
|
@ -37,8 +37,6 @@ Boston, MA 02110-1301, USA. */
|
||||
|
||||
typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type;
|
||||
|
||||
/* The shape parameter is ignored. We can currently deduce the shape from the
|
||||
return array. */
|
||||
|
||||
extern void reshape_c4 (gfc_array_c4 * const restrict,
|
||||
gfc_array_c4 * const restrict,
|
||||
@ -83,12 +81,13 @@ reshape_c4 (gfc_array_c4 * const restrict ret,
|
||||
const GFC_COMPLEX_4 *src;
|
||||
int n;
|
||||
int dim;
|
||||
int sempty, pempty;
|
||||
|
||||
if (ret->data == NULL)
|
||||
{
|
||||
rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1;
|
||||
rs = 1;
|
||||
for (n=0; n < rdim; n++)
|
||||
for (n = 0; n < rdim; n++)
|
||||
{
|
||||
ret->dim[n].lbound = 0;
|
||||
rex = shape->data[n * shape->dim[0].stride];
|
||||
@ -130,13 +129,17 @@ reshape_c4 (gfc_array_c4 * const restrict ret,
|
||||
|
||||
sdim = GFC_DESCRIPTOR_RANK (source);
|
||||
ssize = 1;
|
||||
sempty = 0;
|
||||
for (n = 0; n < sdim; n++)
|
||||
{
|
||||
scount[n] = 0;
|
||||
sstride[n] = source->dim[n].stride;
|
||||
sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound;
|
||||
if (sextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
sempty = 1;
|
||||
sextent[n] = 0;
|
||||
}
|
||||
|
||||
if (ssize == sstride[n])
|
||||
ssize *= sextent[n];
|
||||
@ -148,13 +151,18 @@ reshape_c4 (gfc_array_c4 * const restrict ret,
|
||||
{
|
||||
pdim = GFC_DESCRIPTOR_RANK (pad);
|
||||
psize = 1;
|
||||
pempty = 0;
|
||||
for (n = 0; n < pdim; n++)
|
||||
{
|
||||
pcount[n] = 0;
|
||||
pstride[n] = pad->dim[n].stride;
|
||||
pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound;
|
||||
if (pextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
pempty = 1;
|
||||
pextent[n] = 0;
|
||||
}
|
||||
|
||||
if (psize == pstride[n])
|
||||
psize *= pextent[n];
|
||||
else
|
||||
@ -166,6 +174,7 @@ reshape_c4 (gfc_array_c4 * const restrict ret,
|
||||
{
|
||||
pdim = 0;
|
||||
psize = 1;
|
||||
pempty = 1;
|
||||
pptr = NULL;
|
||||
}
|
||||
|
||||
@ -183,6 +192,24 @@ reshape_c4 (gfc_array_c4 * const restrict ret,
|
||||
rstride0 = rstride[0];
|
||||
sstride0 = sstride[0];
|
||||
|
||||
if (sempty && pempty)
|
||||
abort ();
|
||||
|
||||
if (sempty)
|
||||
{
|
||||
/* Switch immediately to the pad array. */
|
||||
src = pptr;
|
||||
sptr = NULL;
|
||||
sdim = pdim;
|
||||
for (dim = 0; dim < pdim; dim++)
|
||||
{
|
||||
scount[dim] = pcount[dim];
|
||||
sextent[dim] = pextent[dim];
|
||||
sstride[dim] = pstride[dim];
|
||||
sstride0 = sstride[0] * sizeof (GFC_COMPLEX_4);
|
||||
}
|
||||
}
|
||||
|
||||
while (rptr)
|
||||
{
|
||||
/* Select between the source and pad arrays. */
|
||||
@ -192,6 +219,7 @@ reshape_c4 (gfc_array_c4 * const restrict ret,
|
||||
src += sstride0;
|
||||
rcount[0]++;
|
||||
scount[0]++;
|
||||
|
||||
/* Advance to the next destination element. */
|
||||
n = 0;
|
||||
while (rcount[n] == rextent[n])
|
||||
|
@ -37,8 +37,6 @@ Boston, MA 02110-1301, USA. */
|
||||
|
||||
typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type;
|
||||
|
||||
/* The shape parameter is ignored. We can currently deduce the shape from the
|
||||
return array. */
|
||||
|
||||
extern void reshape_c8 (gfc_array_c8 * const restrict,
|
||||
gfc_array_c8 * const restrict,
|
||||
@ -83,12 +81,13 @@ reshape_c8 (gfc_array_c8 * const restrict ret,
|
||||
const GFC_COMPLEX_8 *src;
|
||||
int n;
|
||||
int dim;
|
||||
int sempty, pempty;
|
||||
|
||||
if (ret->data == NULL)
|
||||
{
|
||||
rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1;
|
||||
rs = 1;
|
||||
for (n=0; n < rdim; n++)
|
||||
for (n = 0; n < rdim; n++)
|
||||
{
|
||||
ret->dim[n].lbound = 0;
|
||||
rex = shape->data[n * shape->dim[0].stride];
|
||||
@ -130,13 +129,17 @@ reshape_c8 (gfc_array_c8 * const restrict ret,
|
||||
|
||||
sdim = GFC_DESCRIPTOR_RANK (source);
|
||||
ssize = 1;
|
||||
sempty = 0;
|
||||
for (n = 0; n < sdim; n++)
|
||||
{
|
||||
scount[n] = 0;
|
||||
sstride[n] = source->dim[n].stride;
|
||||
sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound;
|
||||
if (sextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
sempty = 1;
|
||||
sextent[n] = 0;
|
||||
}
|
||||
|
||||
if (ssize == sstride[n])
|
||||
ssize *= sextent[n];
|
||||
@ -148,13 +151,18 @@ reshape_c8 (gfc_array_c8 * const restrict ret,
|
||||
{
|
||||
pdim = GFC_DESCRIPTOR_RANK (pad);
|
||||
psize = 1;
|
||||
pempty = 0;
|
||||
for (n = 0; n < pdim; n++)
|
||||
{
|
||||
pcount[n] = 0;
|
||||
pstride[n] = pad->dim[n].stride;
|
||||
pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound;
|
||||
if (pextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
pempty = 1;
|
||||
pextent[n] = 0;
|
||||
}
|
||||
|
||||
if (psize == pstride[n])
|
||||
psize *= pextent[n];
|
||||
else
|
||||
@ -166,6 +174,7 @@ reshape_c8 (gfc_array_c8 * const restrict ret,
|
||||
{
|
||||
pdim = 0;
|
||||
psize = 1;
|
||||
pempty = 1;
|
||||
pptr = NULL;
|
||||
}
|
||||
|
||||
@ -183,6 +192,24 @@ reshape_c8 (gfc_array_c8 * const restrict ret,
|
||||
rstride0 = rstride[0];
|
||||
sstride0 = sstride[0];
|
||||
|
||||
if (sempty && pempty)
|
||||
abort ();
|
||||
|
||||
if (sempty)
|
||||
{
|
||||
/* Switch immediately to the pad array. */
|
||||
src = pptr;
|
||||
sptr = NULL;
|
||||
sdim = pdim;
|
||||
for (dim = 0; dim < pdim; dim++)
|
||||
{
|
||||
scount[dim] = pcount[dim];
|
||||
sextent[dim] = pextent[dim];
|
||||
sstride[dim] = pstride[dim];
|
||||
sstride0 = sstride[0] * sizeof (GFC_COMPLEX_8);
|
||||
}
|
||||
}
|
||||
|
||||
while (rptr)
|
||||
{
|
||||
/* Select between the source and pad arrays. */
|
||||
@ -192,6 +219,7 @@ reshape_c8 (gfc_array_c8 * const restrict ret,
|
||||
src += sstride0;
|
||||
rcount[0]++;
|
||||
scount[0]++;
|
||||
|
||||
/* Advance to the next destination element. */
|
||||
n = 0;
|
||||
while (rcount[n] == rextent[n])
|
||||
|
@ -37,8 +37,6 @@ Boston, MA 02110-1301, USA. */
|
||||
|
||||
typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type;
|
||||
|
||||
/* The shape parameter is ignored. We can currently deduce the shape from the
|
||||
return array. */
|
||||
|
||||
extern void reshape_16 (gfc_array_i16 * const restrict,
|
||||
gfc_array_i16 * const restrict,
|
||||
@ -83,12 +81,13 @@ reshape_16 (gfc_array_i16 * const restrict ret,
|
||||
const GFC_INTEGER_16 *src;
|
||||
int n;
|
||||
int dim;
|
||||
int sempty, pempty;
|
||||
|
||||
if (ret->data == NULL)
|
||||
{
|
||||
rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1;
|
||||
rs = 1;
|
||||
for (n=0; n < rdim; n++)
|
||||
for (n = 0; n < rdim; n++)
|
||||
{
|
||||
ret->dim[n].lbound = 0;
|
||||
rex = shape->data[n * shape->dim[0].stride];
|
||||
@ -130,13 +129,17 @@ reshape_16 (gfc_array_i16 * const restrict ret,
|
||||
|
||||
sdim = GFC_DESCRIPTOR_RANK (source);
|
||||
ssize = 1;
|
||||
sempty = 0;
|
||||
for (n = 0; n < sdim; n++)
|
||||
{
|
||||
scount[n] = 0;
|
||||
sstride[n] = source->dim[n].stride;
|
||||
sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound;
|
||||
if (sextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
sempty = 1;
|
||||
sextent[n] = 0;
|
||||
}
|
||||
|
||||
if (ssize == sstride[n])
|
||||
ssize *= sextent[n];
|
||||
@ -148,13 +151,18 @@ reshape_16 (gfc_array_i16 * const restrict ret,
|
||||
{
|
||||
pdim = GFC_DESCRIPTOR_RANK (pad);
|
||||
psize = 1;
|
||||
pempty = 0;
|
||||
for (n = 0; n < pdim; n++)
|
||||
{
|
||||
pcount[n] = 0;
|
||||
pstride[n] = pad->dim[n].stride;
|
||||
pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound;
|
||||
if (pextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
pempty = 1;
|
||||
pextent[n] = 0;
|
||||
}
|
||||
|
||||
if (psize == pstride[n])
|
||||
psize *= pextent[n];
|
||||
else
|
||||
@ -166,6 +174,7 @@ reshape_16 (gfc_array_i16 * const restrict ret,
|
||||
{
|
||||
pdim = 0;
|
||||
psize = 1;
|
||||
pempty = 1;
|
||||
pptr = NULL;
|
||||
}
|
||||
|
||||
@ -183,6 +192,24 @@ reshape_16 (gfc_array_i16 * const restrict ret,
|
||||
rstride0 = rstride[0];
|
||||
sstride0 = sstride[0];
|
||||
|
||||
if (sempty && pempty)
|
||||
abort ();
|
||||
|
||||
if (sempty)
|
||||
{
|
||||
/* Switch immediately to the pad array. */
|
||||
src = pptr;
|
||||
sptr = NULL;
|
||||
sdim = pdim;
|
||||
for (dim = 0; dim < pdim; dim++)
|
||||
{
|
||||
scount[dim] = pcount[dim];
|
||||
sextent[dim] = pextent[dim];
|
||||
sstride[dim] = pstride[dim];
|
||||
sstride0 = sstride[0] * sizeof (GFC_INTEGER_16);
|
||||
}
|
||||
}
|
||||
|
||||
while (rptr)
|
||||
{
|
||||
/* Select between the source and pad arrays. */
|
||||
@ -192,6 +219,7 @@ reshape_16 (gfc_array_i16 * const restrict ret,
|
||||
src += sstride0;
|
||||
rcount[0]++;
|
||||
scount[0]++;
|
||||
|
||||
/* Advance to the next destination element. */
|
||||
n = 0;
|
||||
while (rcount[n] == rextent[n])
|
||||
|
@ -37,8 +37,6 @@ Boston, MA 02110-1301, USA. */
|
||||
|
||||
typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type;
|
||||
|
||||
/* The shape parameter is ignored. We can currently deduce the shape from the
|
||||
return array. */
|
||||
|
||||
extern void reshape_4 (gfc_array_i4 * const restrict,
|
||||
gfc_array_i4 * const restrict,
|
||||
@ -83,12 +81,13 @@ reshape_4 (gfc_array_i4 * const restrict ret,
|
||||
const GFC_INTEGER_4 *src;
|
||||
int n;
|
||||
int dim;
|
||||
int sempty, pempty;
|
||||
|
||||
if (ret->data == NULL)
|
||||
{
|
||||
rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1;
|
||||
rs = 1;
|
||||
for (n=0; n < rdim; n++)
|
||||
for (n = 0; n < rdim; n++)
|
||||
{
|
||||
ret->dim[n].lbound = 0;
|
||||
rex = shape->data[n * shape->dim[0].stride];
|
||||
@ -130,13 +129,17 @@ reshape_4 (gfc_array_i4 * const restrict ret,
|
||||
|
||||
sdim = GFC_DESCRIPTOR_RANK (source);
|
||||
ssize = 1;
|
||||
sempty = 0;
|
||||
for (n = 0; n < sdim; n++)
|
||||
{
|
||||
scount[n] = 0;
|
||||
sstride[n] = source->dim[n].stride;
|
||||
sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound;
|
||||
if (sextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
sempty = 1;
|
||||
sextent[n] = 0;
|
||||
}
|
||||
|
||||
if (ssize == sstride[n])
|
||||
ssize *= sextent[n];
|
||||
@ -148,13 +151,18 @@ reshape_4 (gfc_array_i4 * const restrict ret,
|
||||
{
|
||||
pdim = GFC_DESCRIPTOR_RANK (pad);
|
||||
psize = 1;
|
||||
pempty = 0;
|
||||
for (n = 0; n < pdim; n++)
|
||||
{
|
||||
pcount[n] = 0;
|
||||
pstride[n] = pad->dim[n].stride;
|
||||
pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound;
|
||||
if (pextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
pempty = 1;
|
||||
pextent[n] = 0;
|
||||
}
|
||||
|
||||
if (psize == pstride[n])
|
||||
psize *= pextent[n];
|
||||
else
|
||||
@ -166,6 +174,7 @@ reshape_4 (gfc_array_i4 * const restrict ret,
|
||||
{
|
||||
pdim = 0;
|
||||
psize = 1;
|
||||
pempty = 1;
|
||||
pptr = NULL;
|
||||
}
|
||||
|
||||
@ -183,6 +192,24 @@ reshape_4 (gfc_array_i4 * const restrict ret,
|
||||
rstride0 = rstride[0];
|
||||
sstride0 = sstride[0];
|
||||
|
||||
if (sempty && pempty)
|
||||
abort ();
|
||||
|
||||
if (sempty)
|
||||
{
|
||||
/* Switch immediately to the pad array. */
|
||||
src = pptr;
|
||||
sptr = NULL;
|
||||
sdim = pdim;
|
||||
for (dim = 0; dim < pdim; dim++)
|
||||
{
|
||||
scount[dim] = pcount[dim];
|
||||
sextent[dim] = pextent[dim];
|
||||
sstride[dim] = pstride[dim];
|
||||
sstride0 = sstride[0] * sizeof (GFC_INTEGER_4);
|
||||
}
|
||||
}
|
||||
|
||||
while (rptr)
|
||||
{
|
||||
/* Select between the source and pad arrays. */
|
||||
@ -192,6 +219,7 @@ reshape_4 (gfc_array_i4 * const restrict ret,
|
||||
src += sstride0;
|
||||
rcount[0]++;
|
||||
scount[0]++;
|
||||
|
||||
/* Advance to the next destination element. */
|
||||
n = 0;
|
||||
while (rcount[n] == rextent[n])
|
||||
|
@ -37,8 +37,6 @@ Boston, MA 02110-1301, USA. */
|
||||
|
||||
typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type;
|
||||
|
||||
/* The shape parameter is ignored. We can currently deduce the shape from the
|
||||
return array. */
|
||||
|
||||
extern void reshape_8 (gfc_array_i8 * const restrict,
|
||||
gfc_array_i8 * const restrict,
|
||||
@ -83,12 +81,13 @@ reshape_8 (gfc_array_i8 * const restrict ret,
|
||||
const GFC_INTEGER_8 *src;
|
||||
int n;
|
||||
int dim;
|
||||
int sempty, pempty;
|
||||
|
||||
if (ret->data == NULL)
|
||||
{
|
||||
rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1;
|
||||
rs = 1;
|
||||
for (n=0; n < rdim; n++)
|
||||
for (n = 0; n < rdim; n++)
|
||||
{
|
||||
ret->dim[n].lbound = 0;
|
||||
rex = shape->data[n * shape->dim[0].stride];
|
||||
@ -130,13 +129,17 @@ reshape_8 (gfc_array_i8 * const restrict ret,
|
||||
|
||||
sdim = GFC_DESCRIPTOR_RANK (source);
|
||||
ssize = 1;
|
||||
sempty = 0;
|
||||
for (n = 0; n < sdim; n++)
|
||||
{
|
||||
scount[n] = 0;
|
||||
sstride[n] = source->dim[n].stride;
|
||||
sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound;
|
||||
if (sextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
sempty = 1;
|
||||
sextent[n] = 0;
|
||||
}
|
||||
|
||||
if (ssize == sstride[n])
|
||||
ssize *= sextent[n];
|
||||
@ -148,13 +151,18 @@ reshape_8 (gfc_array_i8 * const restrict ret,
|
||||
{
|
||||
pdim = GFC_DESCRIPTOR_RANK (pad);
|
||||
psize = 1;
|
||||
pempty = 0;
|
||||
for (n = 0; n < pdim; n++)
|
||||
{
|
||||
pcount[n] = 0;
|
||||
pstride[n] = pad->dim[n].stride;
|
||||
pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound;
|
||||
if (pextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
pempty = 1;
|
||||
pextent[n] = 0;
|
||||
}
|
||||
|
||||
if (psize == pstride[n])
|
||||
psize *= pextent[n];
|
||||
else
|
||||
@ -166,6 +174,7 @@ reshape_8 (gfc_array_i8 * const restrict ret,
|
||||
{
|
||||
pdim = 0;
|
||||
psize = 1;
|
||||
pempty = 1;
|
||||
pptr = NULL;
|
||||
}
|
||||
|
||||
@ -183,6 +192,24 @@ reshape_8 (gfc_array_i8 * const restrict ret,
|
||||
rstride0 = rstride[0];
|
||||
sstride0 = sstride[0];
|
||||
|
||||
if (sempty && pempty)
|
||||
abort ();
|
||||
|
||||
if (sempty)
|
||||
{
|
||||
/* Switch immediately to the pad array. */
|
||||
src = pptr;
|
||||
sptr = NULL;
|
||||
sdim = pdim;
|
||||
for (dim = 0; dim < pdim; dim++)
|
||||
{
|
||||
scount[dim] = pcount[dim];
|
||||
sextent[dim] = pextent[dim];
|
||||
sstride[dim] = pstride[dim];
|
||||
sstride0 = sstride[0] * sizeof (GFC_INTEGER_8);
|
||||
}
|
||||
}
|
||||
|
||||
while (rptr)
|
||||
{
|
||||
/* Select between the source and pad arrays. */
|
||||
@ -192,6 +219,7 @@ reshape_8 (gfc_array_i8 * const restrict ret,
|
||||
src += sstride0;
|
||||
rcount[0]++;
|
||||
scount[0]++;
|
||||
|
||||
/* Advance to the next destination element. */
|
||||
n = 0;
|
||||
while (rcount[n] == rextent[n])
|
||||
|
@ -37,8 +37,6 @@ Boston, MA 02110-1301, USA. */
|
||||
|
||||
typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type;
|
||||
|
||||
/* The shape parameter is ignored. We can currently deduce the shape from the
|
||||
return array. */
|
||||
|
||||
extern void reshape_r10 (gfc_array_r10 * const restrict,
|
||||
gfc_array_r10 * const restrict,
|
||||
@ -83,12 +81,13 @@ reshape_r10 (gfc_array_r10 * const restrict ret,
|
||||
const GFC_REAL_10 *src;
|
||||
int n;
|
||||
int dim;
|
||||
int sempty, pempty;
|
||||
|
||||
if (ret->data == NULL)
|
||||
{
|
||||
rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1;
|
||||
rs = 1;
|
||||
for (n=0; n < rdim; n++)
|
||||
for (n = 0; n < rdim; n++)
|
||||
{
|
||||
ret->dim[n].lbound = 0;
|
||||
rex = shape->data[n * shape->dim[0].stride];
|
||||
@ -130,13 +129,17 @@ reshape_r10 (gfc_array_r10 * const restrict ret,
|
||||
|
||||
sdim = GFC_DESCRIPTOR_RANK (source);
|
||||
ssize = 1;
|
||||
sempty = 0;
|
||||
for (n = 0; n < sdim; n++)
|
||||
{
|
||||
scount[n] = 0;
|
||||
sstride[n] = source->dim[n].stride;
|
||||
sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound;
|
||||
if (sextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
sempty = 1;
|
||||
sextent[n] = 0;
|
||||
}
|
||||
|
||||
if (ssize == sstride[n])
|
||||
ssize *= sextent[n];
|
||||
@ -148,13 +151,18 @@ reshape_r10 (gfc_array_r10 * const restrict ret,
|
||||
{
|
||||
pdim = GFC_DESCRIPTOR_RANK (pad);
|
||||
psize = 1;
|
||||
pempty = 0;
|
||||
for (n = 0; n < pdim; n++)
|
||||
{
|
||||
pcount[n] = 0;
|
||||
pstride[n] = pad->dim[n].stride;
|
||||
pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound;
|
||||
if (pextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
pempty = 1;
|
||||
pextent[n] = 0;
|
||||
}
|
||||
|
||||
if (psize == pstride[n])
|
||||
psize *= pextent[n];
|
||||
else
|
||||
@ -166,6 +174,7 @@ reshape_r10 (gfc_array_r10 * const restrict ret,
|
||||
{
|
||||
pdim = 0;
|
||||
psize = 1;
|
||||
pempty = 1;
|
||||
pptr = NULL;
|
||||
}
|
||||
|
||||
@ -183,6 +192,24 @@ reshape_r10 (gfc_array_r10 * const restrict ret,
|
||||
rstride0 = rstride[0];
|
||||
sstride0 = sstride[0];
|
||||
|
||||
if (sempty && pempty)
|
||||
abort ();
|
||||
|
||||
if (sempty)
|
||||
{
|
||||
/* Switch immediately to the pad array. */
|
||||
src = pptr;
|
||||
sptr = NULL;
|
||||
sdim = pdim;
|
||||
for (dim = 0; dim < pdim; dim++)
|
||||
{
|
||||
scount[dim] = pcount[dim];
|
||||
sextent[dim] = pextent[dim];
|
||||
sstride[dim] = pstride[dim];
|
||||
sstride0 = sstride[0] * sizeof (GFC_REAL_10);
|
||||
}
|
||||
}
|
||||
|
||||
while (rptr)
|
||||
{
|
||||
/* Select between the source and pad arrays. */
|
||||
@ -192,6 +219,7 @@ reshape_r10 (gfc_array_r10 * const restrict ret,
|
||||
src += sstride0;
|
||||
rcount[0]++;
|
||||
scount[0]++;
|
||||
|
||||
/* Advance to the next destination element. */
|
||||
n = 0;
|
||||
while (rcount[n] == rextent[n])
|
||||
|
@ -37,8 +37,6 @@ Boston, MA 02110-1301, USA. */
|
||||
|
||||
typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type;
|
||||
|
||||
/* The shape parameter is ignored. We can currently deduce the shape from the
|
||||
return array. */
|
||||
|
||||
extern void reshape_r16 (gfc_array_r16 * const restrict,
|
||||
gfc_array_r16 * const restrict,
|
||||
@ -83,12 +81,13 @@ reshape_r16 (gfc_array_r16 * const restrict ret,
|
||||
const GFC_REAL_16 *src;
|
||||
int n;
|
||||
int dim;
|
||||
int sempty, pempty;
|
||||
|
||||
if (ret->data == NULL)
|
||||
{
|
||||
rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1;
|
||||
rs = 1;
|
||||
for (n=0; n < rdim; n++)
|
||||
for (n = 0; n < rdim; n++)
|
||||
{
|
||||
ret->dim[n].lbound = 0;
|
||||
rex = shape->data[n * shape->dim[0].stride];
|
||||
@ -130,13 +129,17 @@ reshape_r16 (gfc_array_r16 * const restrict ret,
|
||||
|
||||
sdim = GFC_DESCRIPTOR_RANK (source);
|
||||
ssize = 1;
|
||||
sempty = 0;
|
||||
for (n = 0; n < sdim; n++)
|
||||
{
|
||||
scount[n] = 0;
|
||||
sstride[n] = source->dim[n].stride;
|
||||
sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound;
|
||||
if (sextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
sempty = 1;
|
||||
sextent[n] = 0;
|
||||
}
|
||||
|
||||
if (ssize == sstride[n])
|
||||
ssize *= sextent[n];
|
||||
@ -148,13 +151,18 @@ reshape_r16 (gfc_array_r16 * const restrict ret,
|
||||
{
|
||||
pdim = GFC_DESCRIPTOR_RANK (pad);
|
||||
psize = 1;
|
||||
pempty = 0;
|
||||
for (n = 0; n < pdim; n++)
|
||||
{
|
||||
pcount[n] = 0;
|
||||
pstride[n] = pad->dim[n].stride;
|
||||
pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound;
|
||||
if (pextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
pempty = 1;
|
||||
pextent[n] = 0;
|
||||
}
|
||||
|
||||
if (psize == pstride[n])
|
||||
psize *= pextent[n];
|
||||
else
|
||||
@ -166,6 +174,7 @@ reshape_r16 (gfc_array_r16 * const restrict ret,
|
||||
{
|
||||
pdim = 0;
|
||||
psize = 1;
|
||||
pempty = 1;
|
||||
pptr = NULL;
|
||||
}
|
||||
|
||||
@ -183,6 +192,24 @@ reshape_r16 (gfc_array_r16 * const restrict ret,
|
||||
rstride0 = rstride[0];
|
||||
sstride0 = sstride[0];
|
||||
|
||||
if (sempty && pempty)
|
||||
abort ();
|
||||
|
||||
if (sempty)
|
||||
{
|
||||
/* Switch immediately to the pad array. */
|
||||
src = pptr;
|
||||
sptr = NULL;
|
||||
sdim = pdim;
|
||||
for (dim = 0; dim < pdim; dim++)
|
||||
{
|
||||
scount[dim] = pcount[dim];
|
||||
sextent[dim] = pextent[dim];
|
||||
sstride[dim] = pstride[dim];
|
||||
sstride0 = sstride[0] * sizeof (GFC_REAL_16);
|
||||
}
|
||||
}
|
||||
|
||||
while (rptr)
|
||||
{
|
||||
/* Select between the source and pad arrays. */
|
||||
@ -192,6 +219,7 @@ reshape_r16 (gfc_array_r16 * const restrict ret,
|
||||
src += sstride0;
|
||||
rcount[0]++;
|
||||
scount[0]++;
|
||||
|
||||
/* Advance to the next destination element. */
|
||||
n = 0;
|
||||
while (rcount[n] == rextent[n])
|
||||
|
@ -37,8 +37,6 @@ Boston, MA 02110-1301, USA. */
|
||||
|
||||
typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type;
|
||||
|
||||
/* The shape parameter is ignored. We can currently deduce the shape from the
|
||||
return array. */
|
||||
|
||||
extern void reshape_r4 (gfc_array_r4 * const restrict,
|
||||
gfc_array_r4 * const restrict,
|
||||
@ -83,12 +81,13 @@ reshape_r4 (gfc_array_r4 * const restrict ret,
|
||||
const GFC_REAL_4 *src;
|
||||
int n;
|
||||
int dim;
|
||||
int sempty, pempty;
|
||||
|
||||
if (ret->data == NULL)
|
||||
{
|
||||
rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1;
|
||||
rs = 1;
|
||||
for (n=0; n < rdim; n++)
|
||||
for (n = 0; n < rdim; n++)
|
||||
{
|
||||
ret->dim[n].lbound = 0;
|
||||
rex = shape->data[n * shape->dim[0].stride];
|
||||
@ -130,13 +129,17 @@ reshape_r4 (gfc_array_r4 * const restrict ret,
|
||||
|
||||
sdim = GFC_DESCRIPTOR_RANK (source);
|
||||
ssize = 1;
|
||||
sempty = 0;
|
||||
for (n = 0; n < sdim; n++)
|
||||
{
|
||||
scount[n] = 0;
|
||||
sstride[n] = source->dim[n].stride;
|
||||
sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound;
|
||||
if (sextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
sempty = 1;
|
||||
sextent[n] = 0;
|
||||
}
|
||||
|
||||
if (ssize == sstride[n])
|
||||
ssize *= sextent[n];
|
||||
@ -148,13 +151,18 @@ reshape_r4 (gfc_array_r4 * const restrict ret,
|
||||
{
|
||||
pdim = GFC_DESCRIPTOR_RANK (pad);
|
||||
psize = 1;
|
||||
pempty = 0;
|
||||
for (n = 0; n < pdim; n++)
|
||||
{
|
||||
pcount[n] = 0;
|
||||
pstride[n] = pad->dim[n].stride;
|
||||
pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound;
|
||||
if (pextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
pempty = 1;
|
||||
pextent[n] = 0;
|
||||
}
|
||||
|
||||
if (psize == pstride[n])
|
||||
psize *= pextent[n];
|
||||
else
|
||||
@ -166,6 +174,7 @@ reshape_r4 (gfc_array_r4 * const restrict ret,
|
||||
{
|
||||
pdim = 0;
|
||||
psize = 1;
|
||||
pempty = 1;
|
||||
pptr = NULL;
|
||||
}
|
||||
|
||||
@ -183,6 +192,24 @@ reshape_r4 (gfc_array_r4 * const restrict ret,
|
||||
rstride0 = rstride[0];
|
||||
sstride0 = sstride[0];
|
||||
|
||||
if (sempty && pempty)
|
||||
abort ();
|
||||
|
||||
if (sempty)
|
||||
{
|
||||
/* Switch immediately to the pad array. */
|
||||
src = pptr;
|
||||
sptr = NULL;
|
||||
sdim = pdim;
|
||||
for (dim = 0; dim < pdim; dim++)
|
||||
{
|
||||
scount[dim] = pcount[dim];
|
||||
sextent[dim] = pextent[dim];
|
||||
sstride[dim] = pstride[dim];
|
||||
sstride0 = sstride[0] * sizeof (GFC_REAL_4);
|
||||
}
|
||||
}
|
||||
|
||||
while (rptr)
|
||||
{
|
||||
/* Select between the source and pad arrays. */
|
||||
@ -192,6 +219,7 @@ reshape_r4 (gfc_array_r4 * const restrict ret,
|
||||
src += sstride0;
|
||||
rcount[0]++;
|
||||
scount[0]++;
|
||||
|
||||
/* Advance to the next destination element. */
|
||||
n = 0;
|
||||
while (rcount[n] == rextent[n])
|
||||
|
@ -37,8 +37,6 @@ Boston, MA 02110-1301, USA. */
|
||||
|
||||
typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type;
|
||||
|
||||
/* The shape parameter is ignored. We can currently deduce the shape from the
|
||||
return array. */
|
||||
|
||||
extern void reshape_r8 (gfc_array_r8 * const restrict,
|
||||
gfc_array_r8 * const restrict,
|
||||
@ -83,12 +81,13 @@ reshape_r8 (gfc_array_r8 * const restrict ret,
|
||||
const GFC_REAL_8 *src;
|
||||
int n;
|
||||
int dim;
|
||||
int sempty, pempty;
|
||||
|
||||
if (ret->data == NULL)
|
||||
{
|
||||
rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1;
|
||||
rs = 1;
|
||||
for (n=0; n < rdim; n++)
|
||||
for (n = 0; n < rdim; n++)
|
||||
{
|
||||
ret->dim[n].lbound = 0;
|
||||
rex = shape->data[n * shape->dim[0].stride];
|
||||
@ -130,13 +129,17 @@ reshape_r8 (gfc_array_r8 * const restrict ret,
|
||||
|
||||
sdim = GFC_DESCRIPTOR_RANK (source);
|
||||
ssize = 1;
|
||||
sempty = 0;
|
||||
for (n = 0; n < sdim; n++)
|
||||
{
|
||||
scount[n] = 0;
|
||||
sstride[n] = source->dim[n].stride;
|
||||
sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound;
|
||||
if (sextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
sempty = 1;
|
||||
sextent[n] = 0;
|
||||
}
|
||||
|
||||
if (ssize == sstride[n])
|
||||
ssize *= sextent[n];
|
||||
@ -148,13 +151,18 @@ reshape_r8 (gfc_array_r8 * const restrict ret,
|
||||
{
|
||||
pdim = GFC_DESCRIPTOR_RANK (pad);
|
||||
psize = 1;
|
||||
pempty = 0;
|
||||
for (n = 0; n < pdim; n++)
|
||||
{
|
||||
pcount[n] = 0;
|
||||
pstride[n] = pad->dim[n].stride;
|
||||
pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound;
|
||||
if (pextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
pempty = 1;
|
||||
pextent[n] = 0;
|
||||
}
|
||||
|
||||
if (psize == pstride[n])
|
||||
psize *= pextent[n];
|
||||
else
|
||||
@ -166,6 +174,7 @@ reshape_r8 (gfc_array_r8 * const restrict ret,
|
||||
{
|
||||
pdim = 0;
|
||||
psize = 1;
|
||||
pempty = 1;
|
||||
pptr = NULL;
|
||||
}
|
||||
|
||||
@ -183,6 +192,24 @@ reshape_r8 (gfc_array_r8 * const restrict ret,
|
||||
rstride0 = rstride[0];
|
||||
sstride0 = sstride[0];
|
||||
|
||||
if (sempty && pempty)
|
||||
abort ();
|
||||
|
||||
if (sempty)
|
||||
{
|
||||
/* Switch immediately to the pad array. */
|
||||
src = pptr;
|
||||
sptr = NULL;
|
||||
sdim = pdim;
|
||||
for (dim = 0; dim < pdim; dim++)
|
||||
{
|
||||
scount[dim] = pcount[dim];
|
||||
sextent[dim] = pextent[dim];
|
||||
sstride[dim] = pstride[dim];
|
||||
sstride0 = sstride[0] * sizeof (GFC_REAL_8);
|
||||
}
|
||||
}
|
||||
|
||||
while (rptr)
|
||||
{
|
||||
/* Select between the source and pad arrays. */
|
||||
@ -192,6 +219,7 @@ reshape_r8 (gfc_array_r8 * const restrict ret,
|
||||
src += sstride0;
|
||||
rcount[0]++;
|
||||
scount[0]++;
|
||||
|
||||
/* Advance to the next destination element. */
|
||||
n = 0;
|
||||
while (rcount[n] == rextent[n])
|
||||
|
@ -37,9 +37,6 @@ Boston, MA 02110-1301, USA. */
|
||||
typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type;
|
||||
typedef GFC_ARRAY_DESCRIPTOR(GFC_MAX_DIMENSIONS, char) parray;
|
||||
|
||||
/* The shape parameter is ignored. We can currently deduce the shape from the
|
||||
return array. */
|
||||
|
||||
static void
|
||||
reshape_internal (parray *ret, parray *source, shape_type *shape,
|
||||
parray *pad, shape_type *order, index_type size)
|
||||
@ -73,12 +70,13 @@ reshape_internal (parray *ret, parray *source, shape_type *shape,
|
||||
const char *src;
|
||||
int n;
|
||||
int dim;
|
||||
int sempty, pempty;
|
||||
|
||||
if (ret->data == NULL)
|
||||
{
|
||||
rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1;
|
||||
rs = 1;
|
||||
for (n=0; n < rdim; n++)
|
||||
for (n = 0; n < rdim; n++)
|
||||
{
|
||||
ret->dim[n].lbound = 0;
|
||||
rex = shape->data[n * shape->dim[0].stride];
|
||||
@ -120,13 +118,17 @@ reshape_internal (parray *ret, parray *source, shape_type *shape,
|
||||
|
||||
sdim = GFC_DESCRIPTOR_RANK (source);
|
||||
ssize = 1;
|
||||
sempty = 0;
|
||||
for (n = 0; n < sdim; n++)
|
||||
{
|
||||
scount[n] = 0;
|
||||
sstride[n] = source->dim[n].stride;
|
||||
sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound;
|
||||
if (sextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
sempty = 1;
|
||||
sextent[n] = 0;
|
||||
}
|
||||
|
||||
if (ssize == sstride[n])
|
||||
ssize *= sextent[n];
|
||||
@ -138,13 +140,18 @@ reshape_internal (parray *ret, parray *source, shape_type *shape,
|
||||
{
|
||||
pdim = GFC_DESCRIPTOR_RANK (pad);
|
||||
psize = 1;
|
||||
pempty = 0;
|
||||
for (n = 0; n < pdim; n++)
|
||||
{
|
||||
pcount[n] = 0;
|
||||
pstride[n] = pad->dim[n].stride;
|
||||
pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound;
|
||||
if (pextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
pempty = 1;
|
||||
pextent[n] = 0;
|
||||
}
|
||||
|
||||
if (psize == pstride[n])
|
||||
psize *= pextent[n];
|
||||
else
|
||||
@ -156,6 +163,7 @@ reshape_internal (parray *ret, parray *source, shape_type *shape,
|
||||
{
|
||||
pdim = 0;
|
||||
psize = 1;
|
||||
pempty = 1;
|
||||
pptr = NULL;
|
||||
}
|
||||
|
||||
@ -173,6 +181,24 @@ reshape_internal (parray *ret, parray *source, shape_type *shape,
|
||||
rstride0 = rstride[0] * size;
|
||||
sstride0 = sstride[0] * size;
|
||||
|
||||
if (sempty && pempty)
|
||||
abort ();
|
||||
|
||||
if (sempty)
|
||||
{
|
||||
/* Switch immediately to the pad array. */
|
||||
src = pptr;
|
||||
sptr = NULL;
|
||||
sdim = pdim;
|
||||
for (dim = 0; dim < pdim; dim++)
|
||||
{
|
||||
scount[dim] = pcount[dim];
|
||||
sextent[dim] = pextent[dim];
|
||||
sstride[dim] = pstride[dim];
|
||||
sstride0 = sstride[0] * size;
|
||||
}
|
||||
}
|
||||
|
||||
while (rptr)
|
||||
{
|
||||
/* Select between the source and pad arrays. */
|
||||
@ -182,6 +208,7 @@ reshape_internal (parray *ret, parray *source, shape_type *shape,
|
||||
src += sstride0;
|
||||
rcount[0]++;
|
||||
scount[0]++;
|
||||
|
||||
/* Advance to the next destination element. */
|
||||
n = 0;
|
||||
while (rcount[n] == rextent[n])
|
||||
@ -204,7 +231,8 @@ reshape_internal (parray *ret, parray *source, shape_type *shape,
|
||||
rcount[n]++;
|
||||
rptr += rstride[n] * size;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Advance to the next source element. */
|
||||
n = 0;
|
||||
while (scount[n] == sextent[n])
|
||||
|
@ -38,9 +38,9 @@ include(iparm.m4)dnl
|
||||
|
||||
typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type;
|
||||
|
||||
/* The shape parameter is ignored. We can currently deduce the shape from the
|
||||
return array. */
|
||||
dnl Only the kind (ie size) is used to name the function.
|
||||
dnl For integer routines, only the kind (ie size) is used to name the
|
||||
dnl function. The same function will be used for integer and logical
|
||||
dnl arrays of the same kind.
|
||||
|
||||
extern void reshape_`'rtype_ccode (rtype * const restrict,
|
||||
rtype * const restrict,
|
||||
@ -85,12 +85,13 @@ reshape_`'rtype_ccode (rtype * const restrict ret,
|
||||
const rtype_name *src;
|
||||
int n;
|
||||
int dim;
|
||||
int sempty, pempty;
|
||||
|
||||
if (ret->data == NULL)
|
||||
{
|
||||
rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1;
|
||||
rs = 1;
|
||||
for (n=0; n < rdim; n++)
|
||||
for (n = 0; n < rdim; n++)
|
||||
{
|
||||
ret->dim[n].lbound = 0;
|
||||
rex = shape->data[n * shape->dim[0].stride];
|
||||
@ -132,13 +133,17 @@ reshape_`'rtype_ccode (rtype * const restrict ret,
|
||||
|
||||
sdim = GFC_DESCRIPTOR_RANK (source);
|
||||
ssize = 1;
|
||||
sempty = 0;
|
||||
for (n = 0; n < sdim; n++)
|
||||
{
|
||||
scount[n] = 0;
|
||||
sstride[n] = source->dim[n].stride;
|
||||
sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound;
|
||||
if (sextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
sempty = 1;
|
||||
sextent[n] = 0;
|
||||
}
|
||||
|
||||
if (ssize == sstride[n])
|
||||
ssize *= sextent[n];
|
||||
@ -150,13 +155,18 @@ reshape_`'rtype_ccode (rtype * const restrict ret,
|
||||
{
|
||||
pdim = GFC_DESCRIPTOR_RANK (pad);
|
||||
psize = 1;
|
||||
pempty = 0;
|
||||
for (n = 0; n < pdim; n++)
|
||||
{
|
||||
pcount[n] = 0;
|
||||
pstride[n] = pad->dim[n].stride;
|
||||
pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound;
|
||||
if (pextent[n] <= 0)
|
||||
abort ();
|
||||
{
|
||||
pempty = 1;
|
||||
pextent[n] = 0;
|
||||
}
|
||||
|
||||
if (psize == pstride[n])
|
||||
psize *= pextent[n];
|
||||
else
|
||||
@ -168,6 +178,7 @@ reshape_`'rtype_ccode (rtype * const restrict ret,
|
||||
{
|
||||
pdim = 0;
|
||||
psize = 1;
|
||||
pempty = 1;
|
||||
pptr = NULL;
|
||||
}
|
||||
|
||||
@ -185,6 +196,24 @@ reshape_`'rtype_ccode (rtype * const restrict ret,
|
||||
rstride0 = rstride[0];
|
||||
sstride0 = sstride[0];
|
||||
|
||||
if (sempty && pempty)
|
||||
abort ();
|
||||
|
||||
if (sempty)
|
||||
{
|
||||
/* Switch immediately to the pad array. */
|
||||
src = pptr;
|
||||
sptr = NULL;
|
||||
sdim = pdim;
|
||||
for (dim = 0; dim < pdim; dim++)
|
||||
{
|
||||
scount[dim] = pcount[dim];
|
||||
sextent[dim] = pextent[dim];
|
||||
sstride[dim] = pstride[dim];
|
||||
sstride0 = sstride[0] * sizeof (rtype_name);
|
||||
}
|
||||
}
|
||||
|
||||
while (rptr)
|
||||
{
|
||||
/* Select between the source and pad arrays. */
|
||||
@ -194,6 +223,7 @@ reshape_`'rtype_ccode (rtype * const restrict ret,
|
||||
src += sstride0;
|
||||
rcount[0]++;
|
||||
scount[0]++;
|
||||
|
||||
/* Advance to the next destination element. */
|
||||
n = 0;
|
||||
while (rcount[n] == rextent[n])
|
||||
|
Loading…
Reference in New Issue
Block a user