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
This commit is contained in:
parent
108267cd56
commit
ae740ccecd
10 changed files with 83 additions and 7 deletions
|
@ -1,3 +1,10 @@
|
|||
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):
|
||||
|
|
|
@ -7,6 +7,8 @@ program intrinsic_matmul
|
|||
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/))
|
||||
|
@ -21,4 +23,10 @@ program intrinsic_matmul
|
|||
|
||||
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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue