PR libfortran/21926
* m4/matmul.m4: Correct zeroing of result for non-packed
arrays with lowest stride is one.
* generated/matmul_c4.c: Regenerated.
* generated/matmul_c8.c: Regenerated.
* generated/matmul_i4.c: Regenerated.
* generated/matmul_i8.c: Regenerated.
* generated/matmul_r4.c: Regenerated.
* generated/matmul_r8.c: Regenerated.
2005-06-07 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/21926
* gfortran.fortran-torture/execute/intrinsic_matmul.f90:
Test case where the return array has lowest stride one,
but isn't packed.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@100721
138bc75d-0d04-0410-961f-
82ee72b054a4
+2005-06-07 Thomas Koenig <Thomas.Koenig@online.de>
+
+ PR libfortran/21926
+ * gfortran.fortran-torture/execute/intrinsic_matmul.f90:
+ Test case where the return array has lowest stride one,
+ but isn't packed.
+
2005-06-07 Adrian Straetling <straetling@de.ibm.com>
* lib/target-supports.exp (check_effective_target_sync_int_long):
integer, dimension(3) :: y
integer, dimension(2, 2) :: r
integer, dimension(3) :: v
+ real, dimension (2,2) :: aa
+ real, dimension (4,2) :: cc
a = reshape((/1, 2, 2, 3, 3, 4/), (/2, 3/))
b = reshape((/1, 2, 3, 3, 4, 5/), (/3, 2/))
v(1:2) = matmul(a, y)
if (any(v(1:2) .ne. (/14, 20/))) call abort
+
+ aa = reshape((/ 1.0, 1.0, 0.0, 1.0/), shape(aa))
+ cc = 42.
+ cc(1:2,1:2) = matmul(aa, transpose(aa))
+ if (any(cc(1:2,1:2) .ne. reshape((/ 1.0, 1.0, 1.0, 2.0 /), (/2,2/)))) call abort
+ if (any(cc(3:4,1:2) .ne. 42.)) call abort
end program
+2005-06-07 Thomas Koenig <Thomas.Koenig@online.de>
+
+ PR libfortran/21926
+ * m4/matmul.m4: Correct zeroing of result for non-packed
+ arrays with lowest stride is one.
+ * generated/matmul_c4.c: Regenerated.
+ * generated/matmul_c8.c: Regenerated.
+ * generated/matmul_i4.c: Regenerated.
+ * generated/matmul_i8.c: Regenerated.
+ * generated/matmul_r4.c: Regenerated.
+ * generated/matmul_r8.c: Regenerated.
+
2005-05-30 Francois-Xavier Coudert <coudert@clipper.ens.fr>
PR libfortran/20179
GFC_COMPLEX_4 *abase_n;
GFC_COMPLEX_4 bbase_yn;
- memset (dest, 0, (sizeof (GFC_COMPLEX_4) * size0((array_t *) retarray)));
+ if (rystride == ycount)
+ memset (dest, 0, (sizeof (GFC_COMPLEX_4) * size0((array_t *) retarray)));
+ else
+ {
+ for (y = 0; y < ycount; y++)
+ for (x = 0; x < xcount; x++)
+ dest[x + y*rystride] = (GFC_COMPLEX_4)0;
+ }
for (y = 0; y < ycount; y++)
{
GFC_COMPLEX_8 *abase_n;
GFC_COMPLEX_8 bbase_yn;
- memset (dest, 0, (sizeof (GFC_COMPLEX_8) * size0((array_t *) retarray)));
+ if (rystride == ycount)
+ memset (dest, 0, (sizeof (GFC_COMPLEX_8) * size0((array_t *) retarray)));
+ else
+ {
+ for (y = 0; y < ycount; y++)
+ for (x = 0; x < xcount; x++)
+ dest[x + y*rystride] = (GFC_COMPLEX_8)0;
+ }
for (y = 0; y < ycount; y++)
{
GFC_INTEGER_4 *abase_n;
GFC_INTEGER_4 bbase_yn;
- memset (dest, 0, (sizeof (GFC_INTEGER_4) * size0((array_t *) retarray)));
+ if (rystride == ycount)
+ memset (dest, 0, (sizeof (GFC_INTEGER_4) * size0((array_t *) retarray)));
+ else
+ {
+ for (y = 0; y < ycount; y++)
+ for (x = 0; x < xcount; x++)
+ dest[x + y*rystride] = (GFC_INTEGER_4)0;
+ }
for (y = 0; y < ycount; y++)
{
GFC_INTEGER_8 *abase_n;
GFC_INTEGER_8 bbase_yn;
- memset (dest, 0, (sizeof (GFC_INTEGER_8) * size0((array_t *) retarray)));
+ if (rystride == ycount)
+ memset (dest, 0, (sizeof (GFC_INTEGER_8) * size0((array_t *) retarray)));
+ else
+ {
+ for (y = 0; y < ycount; y++)
+ for (x = 0; x < xcount; x++)
+ dest[x + y*rystride] = (GFC_INTEGER_8)0;
+ }
for (y = 0; y < ycount; y++)
{
GFC_REAL_4 *abase_n;
GFC_REAL_4 bbase_yn;
- memset (dest, 0, (sizeof (GFC_REAL_4) * size0((array_t *) retarray)));
+ if (rystride == ycount)
+ memset (dest, 0, (sizeof (GFC_REAL_4) * size0((array_t *) retarray)));
+ else
+ {
+ for (y = 0; y < ycount; y++)
+ for (x = 0; x < xcount; x++)
+ dest[x + y*rystride] = (GFC_REAL_4)0;
+ }
for (y = 0; y < ycount; y++)
{
GFC_REAL_8 *abase_n;
GFC_REAL_8 bbase_yn;
- memset (dest, 0, (sizeof (GFC_REAL_8) * size0((array_t *) retarray)));
+ if (rystride == ycount)
+ memset (dest, 0, (sizeof (GFC_REAL_8) * size0((array_t *) retarray)));
+ else
+ {
+ for (y = 0; y < ycount; y++)
+ for (x = 0; x < xcount; x++)
+ dest[x + y*rystride] = (GFC_REAL_8)0;
+ }
for (y = 0; y < ycount; y++)
{
rtype_name *abase_n;
rtype_name bbase_yn;
- memset (dest, 0, (sizeof (rtype_name) * size0((array_t *) retarray)));
+ if (rystride == ycount)
+ memset (dest, 0, (sizeof (rtype_name) * size0((array_t *) retarray)));
+ else
+ {
+ for (y = 0; y < ycount; y++)
+ for (x = 0; x < xcount; x++)
+ dest[x + y*rystride] = (rtype_name)0;
+ }
for (y = 0; y < ycount; y++)
{