From ae740ccecdd59110782f3c0623486df14a57d7b7 Mon Sep 17 00:00:00 2001 From: Thomas Koenig Date: Tue, 7 Jun 2005 20:46:17 +0000 Subject: re PR libfortran/21926 ([4.0 only] matmul does not deal with non-packed result) 2005-06-07 Thomas Koenig 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 PR libfortran/21926 * gfortran.fortran-torture/execute/intrinsic_matmul.f90: Test case where the return array has lowest stride one, but isn't packed. From-SVN: r100721 --- libgfortran/generated/matmul_c4.c | 9 ++++++++- libgfortran/generated/matmul_c8.c | 9 ++++++++- libgfortran/generated/matmul_i4.c | 9 ++++++++- libgfortran/generated/matmul_i8.c | 9 ++++++++- libgfortran/generated/matmul_r4.c | 9 ++++++++- libgfortran/generated/matmul_r8.c | 9 ++++++++- 6 files changed, 48 insertions(+), 6 deletions(-) (limited to 'libgfortran/generated') diff --git a/libgfortran/generated/matmul_c4.c b/libgfortran/generated/matmul_c4.c index 5eb8b44..c63d343 100644 --- a/libgfortran/generated/matmul_c4.c +++ b/libgfortran/generated/matmul_c4.c @@ -178,7 +178,14 @@ matmul_c4 (gfc_array_c4 * retarray, gfc_array_c4 * a, gfc_array_c4 * b) 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++) { diff --git a/libgfortran/generated/matmul_c8.c b/libgfortran/generated/matmul_c8.c index 181f4c9..98326d1 100644 --- a/libgfortran/generated/matmul_c8.c +++ b/libgfortran/generated/matmul_c8.c @@ -178,7 +178,14 @@ matmul_c8 (gfc_array_c8 * retarray, gfc_array_c8 * a, gfc_array_c8 * b) 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++) { diff --git a/libgfortran/generated/matmul_i4.c b/libgfortran/generated/matmul_i4.c index f214ba5..9dde570 100644 --- a/libgfortran/generated/matmul_i4.c +++ b/libgfortran/generated/matmul_i4.c @@ -178,7 +178,14 @@ matmul_i4 (gfc_array_i4 * retarray, gfc_array_i4 * a, gfc_array_i4 * b) 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++) { diff --git a/libgfortran/generated/matmul_i8.c b/libgfortran/generated/matmul_i8.c index 5e0e6a7..18d877e 100644 --- a/libgfortran/generated/matmul_i8.c +++ b/libgfortran/generated/matmul_i8.c @@ -178,7 +178,14 @@ matmul_i8 (gfc_array_i8 * retarray, gfc_array_i8 * a, gfc_array_i8 * b) 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++) { diff --git a/libgfortran/generated/matmul_r4.c b/libgfortran/generated/matmul_r4.c index b6014d0..642dc94 100644 --- a/libgfortran/generated/matmul_r4.c +++ b/libgfortran/generated/matmul_r4.c @@ -178,7 +178,14 @@ matmul_r4 (gfc_array_r4 * retarray, gfc_array_r4 * a, gfc_array_r4 * b) 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++) { diff --git a/libgfortran/generated/matmul_r8.c b/libgfortran/generated/matmul_r8.c index 5bf21f6..1eb53cd 100644 --- a/libgfortran/generated/matmul_r8.c +++ b/libgfortran/generated/matmul_r8.c @@ -178,7 +178,14 @@ matmul_r8 (gfc_array_r8 * retarray, gfc_array_r8 * a, gfc_array_r8 * b) 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++) { -- cgit v1.1