| Index: gcc/libgfortran/m4/matmul.m4
|
| diff --git a/gcc/libgfortran/m4/matmul.m4 b/gcc/libgfortran/m4/matmul.m4
|
| index 8ad1bd117c2ebc11a8adc7997c02073596bd69fa..bb42f2a6c47451a3f2492cfb7e8c9f3468972d99 100644
|
| --- a/gcc/libgfortran/m4/matmul.m4
|
| +++ b/gcc/libgfortran/m4/matmul.m4
|
| @@ -106,25 +106,22 @@ matmul_'rtype_code` ('rtype` * const restrict retarray,
|
| {
|
| if (GFC_DESCRIPTOR_RANK (a) == 1)
|
| {
|
| - retarray->dim[0].lbound = 0;
|
| - retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound;
|
| - retarray->dim[0].stride = 1;
|
| + GFC_DIMENSION_SET(retarray->dim[0], 0,
|
| + GFC_DESCRIPTOR_EXTENT(b,1) - 1, 1);
|
| }
|
| else if (GFC_DESCRIPTOR_RANK (b) == 1)
|
| {
|
| - retarray->dim[0].lbound = 0;
|
| - retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound;
|
| - retarray->dim[0].stride = 1;
|
| + GFC_DIMENSION_SET(retarray->dim[0], 0,
|
| + GFC_DESCRIPTOR_EXTENT(a,0) - 1, 1);
|
| }
|
| else
|
| {
|
| - retarray->dim[0].lbound = 0;
|
| - retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound;
|
| - retarray->dim[0].stride = 1;
|
| + GFC_DIMENSION_SET(retarray->dim[0], 0,
|
| + GFC_DESCRIPTOR_EXTENT(a,0) - 1, 1);
|
|
|
| - retarray->dim[1].lbound = 0;
|
| - retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound;
|
| - retarray->dim[1].stride = retarray->dim[0].ubound+1;
|
| + GFC_DIMENSION_SET(retarray->dim[1], 0,
|
| + GFC_DESCRIPTOR_EXTENT(b,1) - 1,
|
| + GFC_DESCRIPTOR_EXTENT(retarray,0));
|
| }
|
|
|
| retarray->data
|
| @@ -137,8 +134,8 @@ matmul_'rtype_code` ('rtype` * const restrict retarray,
|
|
|
| if (GFC_DESCRIPTOR_RANK (a) == 1)
|
| {
|
| - arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound;
|
| - ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
|
| + arg_extent = GFC_DESCRIPTOR_EXTENT(b,1);
|
| + ret_extent = GFC_DESCRIPTOR_EXTENT(retarray,0);
|
| if (arg_extent != ret_extent)
|
| runtime_error ("Incorrect extent in return array in"
|
| " MATMUL intrinsic: is %ld, should be %ld",
|
| @@ -146,8 +143,8 @@ matmul_'rtype_code` ('rtype` * const restrict retarray,
|
| }
|
| else if (GFC_DESCRIPTOR_RANK (b) == 1)
|
| {
|
| - arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound;
|
| - ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
|
| + arg_extent = GFC_DESCRIPTOR_EXTENT(a,0);
|
| + ret_extent = GFC_DESCRIPTOR_EXTENT(retarray,0);
|
| if (arg_extent != ret_extent)
|
| runtime_error ("Incorrect extent in return array in"
|
| " MATMUL intrinsic: is %ld, should be %ld",
|
| @@ -155,16 +152,16 @@ matmul_'rtype_code` ('rtype` * const restrict retarray,
|
| }
|
| else
|
| {
|
| - arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound;
|
| - ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound;
|
| + arg_extent = GFC_DESCRIPTOR_EXTENT(a,0);
|
| + ret_extent = GFC_DESCRIPTOR_EXTENT(retarray,0);
|
| if (arg_extent != ret_extent)
|
| runtime_error ("Incorrect extent in return array in"
|
| " MATMUL intrinsic for dimension 1:"
|
| " is %ld, should be %ld",
|
| (long int) ret_extent, (long int) arg_extent);
|
|
|
| - arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound;
|
| - ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound;
|
| + arg_extent = GFC_DESCRIPTOR_EXTENT(b,1);
|
| + ret_extent = GFC_DESCRIPTOR_EXTENT(retarray,1);
|
| if (arg_extent != ret_extent)
|
| runtime_error ("Incorrect extent in return array in"
|
| " MATMUL intrinsic for dimension 2:"
|
| @@ -180,43 +177,43 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
|
| /* One-dimensional result may be addressed in the code below
|
| either as a row or a column matrix. We want both cases to
|
| work. */
|
| - rxstride = rystride = retarray->dim[0].stride;
|
| + rxstride = rystride = GFC_DESCRIPTOR_STRIDE(retarray,0);
|
| }
|
| else
|
| {
|
| - rxstride = retarray->dim[0].stride;
|
| - rystride = retarray->dim[1].stride;
|
| + rxstride = GFC_DESCRIPTOR_STRIDE(retarray,0);
|
| + rystride = GFC_DESCRIPTOR_STRIDE(retarray,1);
|
| }
|
|
|
|
|
| if (GFC_DESCRIPTOR_RANK (a) == 1)
|
| {
|
| /* Treat it as a a row matrix A[1,count]. */
|
| - axstride = a->dim[0].stride;
|
| + axstride = GFC_DESCRIPTOR_STRIDE(a,0);
|
| aystride = 1;
|
|
|
| xcount = 1;
|
| - count = a->dim[0].ubound + 1 - a->dim[0].lbound;
|
| + count = GFC_DESCRIPTOR_EXTENT(a,0);
|
| }
|
| else
|
| {
|
| - axstride = a->dim[0].stride;
|
| - aystride = a->dim[1].stride;
|
| + axstride = GFC_DESCRIPTOR_STRIDE(a,0);
|
| + aystride = GFC_DESCRIPTOR_STRIDE(a,1);
|
|
|
| - count = a->dim[1].ubound + 1 - a->dim[1].lbound;
|
| - xcount = a->dim[0].ubound + 1 - a->dim[0].lbound;
|
| + count = GFC_DESCRIPTOR_EXTENT(a,1);
|
| + xcount = GFC_DESCRIPTOR_EXTENT(a,0);
|
| }
|
|
|
| - if (count != b->dim[0].ubound + 1 - b->dim[0].lbound)
|
| + if (count != GFC_DESCRIPTOR_EXTENT(b,0))
|
| {
|
| - if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0)
|
| + if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
|
| runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
|
| }
|
|
|
| if (GFC_DESCRIPTOR_RANK (b) == 1)
|
| {
|
| /* Treat it as a column matrix B[count,1] */
|
| - bxstride = b->dim[0].stride;
|
| + bxstride = GFC_DESCRIPTOR_STRIDE(b,0);
|
|
|
| /* bystride should never be used for 1-dimensional b.
|
| in case it is we want it to cause a segfault, rather than
|
| @@ -226,9 +223,9 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
|
| }
|
| else
|
| {
|
| - bxstride = b->dim[0].stride;
|
| - bystride = b->dim[1].stride;
|
| - ycount = b->dim[1].ubound + 1 - b->dim[1].lbound;
|
| + bxstride = GFC_DESCRIPTOR_STRIDE(b,0);
|
| + bystride = GFC_DESCRIPTOR_STRIDE(b,1);
|
| + ycount = GFC_DESCRIPTOR_EXTENT(b,1);
|
| }
|
|
|
| abase = a->data;
|
|
|