aboutsummaryrefslogtreecommitdiff
path: root/libgfortran
diff options
context:
space:
mode:
authorThomas Koenig <Thomas.Koenig@online.de>2005-06-07 20:46:17 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2005-06-07 20:46:17 +0000
commitae740ccecdd59110782f3c0623486df14a57d7b7 (patch)
treefb2ff4924c094e8ef8e3cd32eee95a36428e940f /libgfortran
parent108267cd5609ef326744e1593f878a36e3c09675 (diff)
downloadgcc-ae740ccecdd59110782f3c0623486df14a57d7b7.zip
gcc-ae740ccecdd59110782f3c0623486df14a57d7b7.tar.gz
gcc-ae740ccecdd59110782f3c0623486df14a57d7b7.tar.bz2
re PR libfortran/21926 ([4.0 only] matmul does not deal with non-packed result)
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-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. From-SVN: r100721
Diffstat (limited to 'libgfortran')
-rw-r--r--libgfortran/ChangeLog12
-rw-r--r--libgfortran/generated/matmul_c4.c9
-rw-r--r--libgfortran/generated/matmul_c8.c9
-rw-r--r--libgfortran/generated/matmul_i4.c9
-rw-r--r--libgfortran/generated/matmul_i8.c9
-rw-r--r--libgfortran/generated/matmul_r4.c9
-rw-r--r--libgfortran/generated/matmul_r8.c9
-rw-r--r--libgfortran/m4/matmul.m49
8 files changed, 68 insertions, 7 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index b912b31..ac9fce5 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,15 @@
+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
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++)
{
diff --git a/libgfortran/m4/matmul.m4 b/libgfortran/m4/matmul.m4
index dd75cf7..1801583 100644
--- a/libgfortran/m4/matmul.m4
+++ b/libgfortran/m4/matmul.m4
@@ -180,7 +180,14 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
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++)
{