]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2018-09-16 Thomas Koenig <tkoenig@gcc.gnu.org>
authortkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 16 Sep 2018 19:37:44 +0000 (19:37 +0000)
committertkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 16 Sep 2018 19:37:44 +0000 (19:37 +0000)
PR fortran/37802
* frontend-passes.c (B_ERROR): New macro for matmul bounds
checking error messages.
(C_ERROR): Likewise.
(inline_matmul_assign): Reorganize bounds checking, use B_ERROR
and C_ERROR macros.

2018-09-16  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/37802
* gfortran.dg/matmul_bounds_13.f90: New test case.
* gfortran.dg/inline_matmul_15.f90:  Adjust test for runtime
error.
* gfortran.dg/matmul_5.f90: Likewise.
* gfortran.dg/matmul_bounds_10.f90: Likewise.
* gfortran.dg/matmul_bounds_11.f90: Likewise.
* gfortran.dg/matmul_bounds_2.f90: Likewise.
* gfortran.dg/matmul_bounds_4.f90: Likewise.
* gfortran.dg/matmul_bounds_5.f90: Likewise.

2018-09-16  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/37802
* m4/matmul_internal.m4: Adjust error messages.
        * generated/matmul_c10.c: Regenerated.
        * generated/matmul_c16.c: Regenerated.
        * generated/matmul_c4.c: Regenerated.
        * generated/matmul_c8.c: Regenerated.
        * generated/matmul_i1.c: Regenerated.
        * generated/matmul_i16.c: Regenerated.
        * generated/matmul_i2.c: Regenerated.
        * generated/matmul_i4.c: Regenerated.
        * generated/matmul_i8.c: Regenerated.
        * generated/matmul_r10.c: Regenerated.
        * generated/matmul_r16.c: Regenerated.
        * generated/matmul_r4.c: Regenerated.
        * generated/matmul_r8.c: Regenerated.
        * generated/matmulavx128_c10.c: Regenerated.
        * generated/matmulavx128_c16.c: Regenerated.
        * generated/matmulavx128_c4.c: Regenerated.
        * generated/matmulavx128_c8.c: Regenerated.
        * generated/matmulavx128_i1.c: Regenerated.
        * generated/matmulavx128_i16.c: Regenerated.
        * generated/matmulavx128_i2.c: Regenerated.
        * generated/matmulavx128_i4.c: Regenerated.
        * generated/matmulavx128_i8.c: Regenerated.
        * generated/matmulavx128_r10.c: Regenerated.
        * generated/matmulavx128_r16.c: Regenerated.
        * generated/matmulavx128_r4.c: Regenerated.
        * generated/matmulavx128_r8.c: Regenerated.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@264349 138bc75d-0d04-0410-961f-82ee72b054a4

41 files changed:
gcc/fortran/ChangeLog
gcc/fortran/frontend-passes.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/inline_matmul_15.f90
gcc/testsuite/gfortran.dg/matmul_5.f90
gcc/testsuite/gfortran.dg/matmul_bounds_10.f90
gcc/testsuite/gfortran.dg/matmul_bounds_11.f90
gcc/testsuite/gfortran.dg/matmul_bounds_13.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/matmul_bounds_2.f90
gcc/testsuite/gfortran.dg/matmul_bounds_3.f90
gcc/testsuite/gfortran.dg/matmul_bounds_4.f90
gcc/testsuite/gfortran.dg/matmul_bounds_5.f90
gcc/testsuite/gfortran.dg/matmul_bounds_8.f90
libgfortran/ChangeLog
libgfortran/generated/matmul_c10.c
libgfortran/generated/matmul_c16.c
libgfortran/generated/matmul_c4.c
libgfortran/generated/matmul_c8.c
libgfortran/generated/matmul_i1.c
libgfortran/generated/matmul_i16.c
libgfortran/generated/matmul_i2.c
libgfortran/generated/matmul_i4.c
libgfortran/generated/matmul_i8.c
libgfortran/generated/matmul_r10.c
libgfortran/generated/matmul_r16.c
libgfortran/generated/matmul_r4.c
libgfortran/generated/matmul_r8.c
libgfortran/generated/matmulavx128_c10.c
libgfortran/generated/matmulavx128_c16.c
libgfortran/generated/matmulavx128_c4.c
libgfortran/generated/matmulavx128_c8.c
libgfortran/generated/matmulavx128_i1.c
libgfortran/generated/matmulavx128_i16.c
libgfortran/generated/matmulavx128_i2.c
libgfortran/generated/matmulavx128_i4.c
libgfortran/generated/matmulavx128_i8.c
libgfortran/generated/matmulavx128_r10.c
libgfortran/generated/matmulavx128_r16.c
libgfortran/generated/matmulavx128_r4.c
libgfortran/generated/matmulavx128_r8.c
libgfortran/m4/matmul_internal.m4

index becc184828c4c9ea5e284b95ef5df902602e86ca..6f4872e65d690c8784f85475a18411be27792f98 100644 (file)
@@ -1,3 +1,12 @@
+2018-09-16  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/37802
+       * frontend-passes.c (B_ERROR): New macro for matmul bounds
+       checking error messages.
+       (C_ERROR): Likewise.
+       (inline_matmul_assign): Reorganize bounds checking, use B_ERROR
+       and C_ERROR macros.
+
 2018-09-13  Bernd Edlinger  <bernd.edlinger@hotmail.de>
 
        * trans-array.c (gfc_conv_array_initializer): Remove excess precision
index 0a5e8937015e87eac93ba0a4c945d676734747cd..80a65fc9a214765b23e3574b70c889ebaf2f168d 100644 (file)
@@ -3748,6 +3748,15 @@ check_conjg_transpose_variable (gfc_expr *e, bool *conjg, bool *transpose)
   return NULL;
 }
 
+/* Macros for unified error messages.  */
+
+#define B_ERROR(n) _("Incorrect extent in argument B in MATMUL intrinsic in " \
+                    "dimension " #n ": is %ld, should be %ld")
+
+#define C_ERROR(n) _("Array bound mismatch for dimension " #n " of array " \
+                    "(%ld/%ld)")
+
+
 /* Inline assignments of the form c = matmul(a,b).
    Handle only the cases currently where b and c are rank-two arrays.
 
@@ -3793,6 +3802,7 @@ inline_matmul_assign (gfc_code **c, int *walk_subtrees,
   gfc_code *if_limit = NULL;
   gfc_code **next_code_point;
   bool conjg_a, conjg_b, transpose_a, transpose_b;
+  bool realloc_c;
 
   if (co->op != EXEC_ASSIGN)
     return 0;
@@ -3958,169 +3968,140 @@ inline_matmul_assign (gfc_code **c, int *walk_subtrees,
   assign_zero->expr1->no_bounds_check = 1;
   assign_zero->expr2 = zero_e;
 
-  /* Handle the reallocation, if needed.  */
-  if (flag_realloc_lhs && gfc_is_reallocatable_lhs (expr1))
-    {
-      gfc_code *lhs_alloc;
+  realloc_c = flag_realloc_lhs && gfc_is_reallocatable_lhs (expr1);
 
-      /* Only need to check a single dimension for the A2B2 case for
-        bounds checking, the rest will be allocated.  Also check this
-        for A2B1.   */
+  if (gfc_option.rtcheck & GFC_RTCHECK_BOUNDS)
+    {
+      gfc_code *test;
+      gfc_expr *a2, *b1, *c1, *c2, *a1, *b2;
 
-      if (gfc_option.rtcheck & GFC_RTCHECK_BOUNDS)
+      switch (m_case)
        {
-         gfc_code *test;
-         if (m_case == A2B2 || m_case == A2B1)
-           {
-             gfc_expr *a2, *b1;
+       case A2B1:
 
-             a2 = get_array_inq_function (GFC_ISYM_SIZE, matrix_a, 2);
-             b1 = get_array_inq_function (GFC_ISYM_SIZE, matrix_b, 1);
-             test = runtime_error_ne (b1, a2, "Dimension of array B incorrect "
-                                      "in MATMUL intrinsic: Is %ld, should be %ld");
-             *next_code_point = test;
-             next_code_point = &test->next;
-           }
-         else if (m_case == A1B2)
-           {
-             gfc_expr *a1, *b1;
+         b1 = get_array_inq_function (GFC_ISYM_SIZE, matrix_b, 1);
+         a2 = get_array_inq_function (GFC_ISYM_SIZE, matrix_a, 2);
+         test = runtime_error_ne (b1, a2, B_ERROR(1));
+         *next_code_point = test;
+         next_code_point = &test->next;
 
+         if (!realloc_c)
+           {
+             c1 = get_array_inq_function (GFC_ISYM_SIZE, expr1, 1);
              a1 = get_array_inq_function (GFC_ISYM_SIZE, matrix_a, 1);
-             b1 = get_array_inq_function (GFC_ISYM_SIZE, matrix_b, 1);
-             test = runtime_error_ne (b1, a1, "Dimension of array B incorrect "
-                                      "in MATMUL intrinsic: Is %ld, should be %ld");
+             test = runtime_error_ne (c1, a1, C_ERROR(1));
              *next_code_point = test;
              next_code_point = &test->next;
            }
-       }
-
-      lhs_alloc = matmul_lhs_realloc (expr1, matrix_a, matrix_b, m_case);
-
-      *next_code_point = lhs_alloc;
-      next_code_point = &lhs_alloc->next;
+         break;
 
-    }
-  else if (gfc_option.rtcheck & GFC_RTCHECK_BOUNDS)
-    {
-      gfc_code *test;
-      gfc_expr *a2, *b1, *c1, *c2, *a1, *b2;
+       case A1B2:
 
-      if (m_case == A2B2 || m_case == A2B1)
-       {
-         a2 = get_array_inq_function (GFC_ISYM_SIZE, matrix_a, 2);
          b1 = get_array_inq_function (GFC_ISYM_SIZE, matrix_b, 1);
-         test = runtime_error_ne (b1, a2, "Dimension of array B incorrect "
-                                  "in MATMUL intrinsic: Is %ld, should be %ld");
+         a1 = get_array_inq_function (GFC_ISYM_SIZE, matrix_a, 1);
+         test = runtime_error_ne (b1, a1, B_ERROR(1));
          *next_code_point = test;
          next_code_point = &test->next;
 
-         c1 = get_array_inq_function (GFC_ISYM_SIZE, expr1, 1);
-         a1 = get_array_inq_function (GFC_ISYM_SIZE, matrix_a, 1);
-
-         if (m_case == A2B2)
-           test = runtime_error_ne (c1, a1, "Incorrect extent in return array in "
-                                    "MATMUL intrinsic for dimension 1: "
-                                    "is %ld, should be %ld");
-         else if (m_case == A2B1)
-           test = runtime_error_ne (c1, a1, "Incorrect extent in return array in "
-                                    "MATMUL intrinsic: "
-                                    "is %ld, should be %ld");
+         if (!realloc_c)
+           {
+             c1 = get_array_inq_function (GFC_ISYM_SIZE, expr1, 1);
+             b2 = get_array_inq_function (GFC_ISYM_SIZE, matrix_b, 2);
+             test = runtime_error_ne (c1, b2, C_ERROR(1));
+             *next_code_point = test;
+             next_code_point = &test->next;
+           }
+         break;
 
+       case A2B2:
 
-         *next_code_point = test;
-         next_code_point = &test->next;
-       }
-      else if (m_case == A1B2)
-       {
-         a1 = get_array_inq_function (GFC_ISYM_SIZE, matrix_a, 1);
          b1 = get_array_inq_function (GFC_ISYM_SIZE, matrix_b, 1);
-         test = runtime_error_ne (b1, a1, "Dimension of array B incorrect "
-                                  "in MATMUL intrinsic: Is %ld, should be %ld");
+         a2 = get_array_inq_function (GFC_ISYM_SIZE, matrix_a, 2);
+         test = runtime_error_ne (b1, a2, B_ERROR(1));
          *next_code_point = test;
          next_code_point = &test->next;
 
-         c1 = get_array_inq_function (GFC_ISYM_SIZE, expr1, 1);
-         b2 = get_array_inq_function (GFC_ISYM_SIZE, matrix_b, 2);
+         if (!realloc_c)
+           {
+             c1 = get_array_inq_function (GFC_ISYM_SIZE, expr1, 1);
+             a1 = get_array_inq_function (GFC_ISYM_SIZE, matrix_a, 1);
+             test = runtime_error_ne (c1, a1, C_ERROR(1));
+             *next_code_point = test;
+             next_code_point = &test->next;
 
-         test = runtime_error_ne (c1, b2, "Incorrect extent in return array in "
-                                  "MATMUL intrinsic: "
-                                  "is %ld, should be %ld");
+             c2 = get_array_inq_function (GFC_ISYM_SIZE, expr1, 2);
+             b2 = get_array_inq_function (GFC_ISYM_SIZE, matrix_b, 2);
+             test = runtime_error_ne (c2, b2, C_ERROR(2));
+             *next_code_point = test;
+             next_code_point = &test->next;
+           }
+         break;
 
-         *next_code_point = test;
-         next_code_point = &test->next;
-       }
+       case A2B2T:
 
-      if (m_case == A2B2)
-       {
-         c2 = get_array_inq_function (GFC_ISYM_SIZE, expr1, 2);
          b2 = get_array_inq_function (GFC_ISYM_SIZE, matrix_b, 2);
-         test = runtime_error_ne (c2, b2, "Incorrect extent in return array in "
-                                  "MATMUL intrinsic for dimension 2: is %ld, should be %ld");
-
+         a2 = get_array_inq_function (GFC_ISYM_SIZE, matrix_a, 2);
+         /* matrix_b is transposed, hence dimension 1 for the error message.  */
+         test = runtime_error_ne (b2, a2, B_ERROR(1));
          *next_code_point = test;
          next_code_point = &test->next;
-       }
 
-      if (m_case == A2B2T)
-       {
-         c1 = get_array_inq_function (GFC_ISYM_SIZE, expr1, 1);
-         a1 = get_array_inq_function (GFC_ISYM_SIZE, matrix_a, 1);
-         test = runtime_error_ne (c1, a1, "Incorrect extent in return array in "
-                                  "MATMUL intrinsic for dimension 1: "
-                                  "is %ld, should be %ld");
+         if (!realloc_c)
+           {
+             c1 = get_array_inq_function (GFC_ISYM_SIZE, expr1, 1);
+             a1 = get_array_inq_function (GFC_ISYM_SIZE, matrix_a, 1);
+             test = runtime_error_ne (c1, a1, C_ERROR(1));
+             *next_code_point = test;
+             next_code_point = &test->next;
 
-         *next_code_point = test;
-         next_code_point = &test->next;
+             c2 = get_array_inq_function (GFC_ISYM_SIZE, expr1, 2);
+             b1 = get_array_inq_function (GFC_ISYM_SIZE, matrix_b, 1);
+             test = runtime_error_ne (c2, b1, C_ERROR(2));
+             *next_code_point = test;
+             next_code_point = &test->next;
+           }
+         break;
+
+       case A2TB2:
 
-         c2 = get_array_inq_function (GFC_ISYM_SIZE, expr1, 2);
          b1 = get_array_inq_function (GFC_ISYM_SIZE, matrix_b, 1);
-         test = runtime_error_ne (c2, b1, "Incorrect extent in return array in "
-                                  "MATMUL intrinsic for dimension 2: "
-                                  "is %ld, should be %ld");
+         a1 = get_array_inq_function (GFC_ISYM_SIZE, matrix_a, 1);
+         test = runtime_error_ne (b1, a1, B_ERROR(1));
          *next_code_point = test;
          next_code_point = &test->next;
 
-         a2 = get_array_inq_function (GFC_ISYM_SIZE, matrix_a, 2);
-         b2 = get_array_inq_function (GFC_ISYM_SIZE, matrix_b, 2);
+         if (!realloc_c)
+           {
+             c1 = get_array_inq_function (GFC_ISYM_SIZE, expr1, 1);
+             a2 = get_array_inq_function (GFC_ISYM_SIZE, matrix_a, 2);
+             test = runtime_error_ne (c1, a2, C_ERROR(1));
+             *next_code_point = test;
+             next_code_point = &test->next;
 
-         test = runtime_error_ne (b2, a2, "Incorrect extent in argument B in "
-                                  "MATMUL intrnisic for dimension 2: "
-                                  "is %ld, should be %ld");
-         *next_code_point = test;
-         next_code_point = &test->next;
+             c2 = get_array_inq_function (GFC_ISYM_SIZE, expr1, 2);
+             b2 = get_array_inq_function (GFC_ISYM_SIZE, matrix_b, 2);
+             test = runtime_error_ne (c2, b2, C_ERROR(2));
+             *next_code_point = test;
+             next_code_point = &test->next;
+           }
+         break;
 
+       default:
+         gcc_unreachable ();
        }
+    }
 
-      if (m_case == A2TB2)
-       {
-         c1 = get_array_inq_function (GFC_ISYM_SIZE, expr1, 1);
-         a2 = get_array_inq_function (GFC_ISYM_SIZE, matrix_a, 2);
-
-         test = runtime_error_ne (c1, a2, "Incorrect extent in return array in "
-                                  "MATMUL intrinsic for dimension 1: "
-                                  "is %ld, should be %ld");
-
-         *next_code_point = test;
-         next_code_point = &test->next;
+  /* Handle the reallocation, if needed.  */
 
-         c2 = get_array_inq_function (GFC_ISYM_SIZE, expr1, 2);
-         b2 = get_array_inq_function (GFC_ISYM_SIZE, matrix_b, 2);
-         test = runtime_error_ne (c2, b2, "Incorrect extent in return array in "
-                                  "MATMUL intrinsic for dimension 2: "
-                                  "is %ld, should be %ld");
-         *next_code_point = test;
-         next_code_point = &test->next;
+  if (realloc_c)
+    {
+      gfc_code *lhs_alloc;
 
-         a1 = get_array_inq_function (GFC_ISYM_SIZE, matrix_a, 1);
-         b1 = get_array_inq_function (GFC_ISYM_SIZE, matrix_b, 1);
+      lhs_alloc = matmul_lhs_realloc (expr1, matrix_a, matrix_b, m_case);
 
-         test = runtime_error_ne (b1, a1, "Incorrect extent in argument B in "
-                                  "MATMUL intrnisic for dimension 2: "
-                                  "is %ld, should be %ld");
-         *next_code_point = test;
-         next_code_point = &test->next;
+      *next_code_point = lhs_alloc;
+      next_code_point = &lhs_alloc->next;
 
-       }
     }
 
   *next_code_point = assign_zero;
index 847f57ba95c3b72ab1ab149b51189790c2f98b49..e37c1773bffd489be99f8d014812a954854174e2 100644 (file)
@@ -1,3 +1,16 @@
+2018-09-16  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/37802
+       * gfortran.dg/matmul_bounds_13.f90: New test case.
+       * gfortran.dg/inline_matmul_15.f90:  Adjust test for runtime
+       error.
+       * gfortran.dg/matmul_5.f90: Likewise.
+       * gfortran.dg/matmul_bounds_10.f90: Likewise.
+       * gfortran.dg/matmul_bounds_11.f90: Likewise.
+       * gfortran.dg/matmul_bounds_2.f90: Likewise.
+       * gfortran.dg/matmul_bounds_4.f90: Likewise.
+       * gfortran.dg/matmul_bounds_5.f90: Likewise.
+
 2018-09-15  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc.c-torture/compile/20180915-1.c: New test.
index c822248c49a371213149717e9765d86970bf0248..47da01c2b9f75375ed8b78f59c395430fbb3a187 100644 (file)
@@ -9,4 +9,4 @@ program main
   call random_number(b)
   print *,matmul(a,b)
 end program main
-! { dg-output "Fortran runtime error: Dimension of array B incorrect in MATMUL intrinsic.*" }
+! { dg-output "Fortran runtime error: Incorrect extent in argument B in MATMUL intrinsic in dimension 1" }
index 5f1402889d315542b26640314381dc5966862745..79de7bf8079ff1b35e81ef4bf52c78c3c6ec24c2 100644 (file)
@@ -9,4 +9,4 @@ program main
   call random_number(b)
   print *,matmul(a,b)
 end program main
-! { dg-output "Fortran runtime error: dimension of array B incorrect in MATMUL intrinsic.*" }
+! { dg-output "Fortran runtime error: Incorrect extent in argument B in MATMUL intrinsic in dimension 1" }
index 6608b49dae9b1b483a4af27d5ee356b10896dca6..38992460adda335b34aa6fa331011061e59cd400 100644 (file)
@@ -13,4 +13,4 @@ program main
   allocate(ret(4,3))
   ret = matmul(a,transpose(b))  ! This should throw an error.
 end program main
-! { dg-output "Fortran runtime error: Incorrect extent in return array in MATMUL intrinsic for dimension 1: is 4, should be 3" }
+! { dg-output "Fortran runtime error: Array bound mismatch for dimension 1 of array.*" }
index 9209760e50b445034adff337201581e521a77eeb..ee52a7b1ead7045798b7c579d1adc2202ddf8a8e 100644 (file)
@@ -11,5 +11,5 @@ program main
   res = matmul(a,b)
   print *,res
 end program main
-! { dg-output "Fortran runtime error: Dimension of array B incorrect in MATMUL intrinsic.*" }
+! { dg-output "Fortran runtime error: Incorrect extent in argument B in MATMUL intrinsic in dimension 1: is 3, should be 2" }
 
diff --git a/gcc/testsuite/gfortran.dg/matmul_bounds_13.f90 b/gcc/testsuite/gfortran.dg/matmul_bounds_13.f90
new file mode 100644 (file)
index 0000000..154b133
--- /dev/null
@@ -0,0 +1,13 @@
+! { dg-do run }
+! { dg-options "-fcheck=bounds" }
+! { dg-shouldfail "Fortran runtime error: Incorrect extent in argument B in MATMUL intrinsic in dimension 1" }
+program main
+  real, dimension(:,:), allocatable :: a, b, c
+  character(len=100) :: line
+  allocate (a(3,2))
+  allocate (b(2,4))
+  call random_number(a)
+  call random_number(b)
+  write (unit=line, fmt=*) matmul(a,transpose(b))
+end program main
+! { dg-output "Fortran runtime error: Incorrect extent in argument B in MATMUL intrinsic in dimension 1" }
index 978751e70e6845d9922ee90111796dece3d2462c..7a1deb35ff25a0d6a443ea3f05ce1073271a5e3e 100644 (file)
@@ -13,4 +13,4 @@ program main
   allocate(ret(3,2))
   ret = matmul(a,b)  ! This should throw an error.
 end program main
-! { dg-output "Fortran runtime error: Incorrect extent in return array in MATMUL intrinsic for dimension 2: is 2, should be 3" }
+! { dg-output "Fortran runtime error: Array bound mismatch for dimension 2 of array.*" }
index 4b80f8c2be88a77d36dec3498f5fe95450f0bb50..8c8ae4340f6c5db9356f04f94dc05885b2025eb8 100644 (file)
@@ -13,4 +13,4 @@ program main
   allocate(ret(2,3))
   ret = matmul(a,b)  ! This should throw an error.
 end program main
-! { dg-output "Fortran runtime error: Incorrect extent in return array in MATMUL intrinsic for dimension 1: is 2, should be 3" }
+! { dg-output "Fortran runtime error: Array bound mismatch for dimension 1 of array" }
index 94add6ce8e7f4cd6f184ca4238cf522f3acb17be..2dac29fe6e3af0310c287072eb4655bd12112e98 100644 (file)
@@ -13,4 +13,4 @@ program main
   allocate(ret(3))
   ret = matmul(a,b)  ! This should throw an error.
 end program main
-! { dg-output "Fortran runtime error: Incorrect extent in return array in MATMUL intrinsic: is 3, should be 2" }
+! { dg-output "Fortran runtime error: Array bound mismatch for dimension 1 of array" }
index 5261e8e443a8c680e4e3756583a7b94e00968bb0..d2013ea906c255d26bf7c8e6cd3ba78e4894e249 100644 (file)
@@ -13,4 +13,4 @@ program main
   allocate(ret(3))
   ret = matmul(a,b)  ! This should throw an error.
 end program main
-! { dg-output "Fortran runtime error: Incorrect extent in return array in MATMUL intrinsic: is 3, should be 2" }
+! { dg-output "Fortran runtime error: Array bound mismatch for dimension 1 of array" }
index 2764cf38adfbf1413044fd7253727f768dfea4fe..11f58870f1039f85b5d01cf70bc8352d38abda72 100644 (file)
@@ -13,4 +13,4 @@ program main
   allocate(ret(3,2))
   ret = matmul(a,transpose(b))  ! This should throw an error.
 end program main
-! { dg-output "Fortran runtime error: Incorrect extent in return array in MATMUL intrinsic for dimension 2: is 2, should be 3" }
+! { dg-output "Fortran runtime error: Array bound mismatch for dimension 2 of array" }
index 56828b1bee5c8cdb056f39709ac1d518e7c7c23d..4c20390656f44572ba22051152a75b2236a2ba9f 100644 (file)
@@ -1,3 +1,34 @@
+2018-09-16  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/37802
+       * m4/matmul_internal.m4: Adjust error messages.
+        * generated/matmul_c10.c: Regenerated.
+        * generated/matmul_c16.c: Regenerated.
+        * generated/matmul_c4.c: Regenerated.
+        * generated/matmul_c8.c: Regenerated.
+        * generated/matmul_i1.c: Regenerated.
+        * generated/matmul_i16.c: Regenerated.
+        * generated/matmul_i2.c: Regenerated.
+        * generated/matmul_i4.c: Regenerated.
+        * generated/matmul_i8.c: Regenerated.
+        * generated/matmul_r10.c: Regenerated.
+        * generated/matmul_r16.c: Regenerated.
+        * generated/matmul_r4.c: Regenerated.
+        * generated/matmul_r8.c: Regenerated.
+        * generated/matmulavx128_c10.c: Regenerated.
+        * generated/matmulavx128_c16.c: Regenerated.
+        * generated/matmulavx128_c4.c: Regenerated.
+        * generated/matmulavx128_c8.c: Regenerated.
+        * generated/matmulavx128_i1.c: Regenerated.
+        * generated/matmulavx128_i16.c: Regenerated.
+        * generated/matmulavx128_i2.c: Regenerated.
+        * generated/matmulavx128_i4.c: Regenerated.
+        * generated/matmulavx128_i8.c: Regenerated.
+        * generated/matmulavx128_r10.c: Regenerated.
+        * generated/matmulavx128_r16.c: Regenerated.
+        * generated/matmulavx128_r4.c: Regenerated.
+        * generated/matmulavx128_r8.c: Regenerated.
+
 2018-09-14  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * io/unix.c (fallback_access): Avoid calling close on
index 462d71e23f5aa95d656aee8771f2aa9327964406..ac42158a2c10109841f39e463abc831bb8fe8c39 100644 (file)
@@ -144,8 +144,8 @@ matmul_c10_avx (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -153,8 +153,8 @@ matmul_c10_avx (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -162,17 +162,15 @@ matmul_c10_avx (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -213,7 +211,9 @@ matmul_c10_avx (gfc_array_c10 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -258,7 +258,18 @@ matmul_c10_avx (gfc_array_c10 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -701,8 +712,8 @@ matmul_c10_avx2 (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -710,8 +721,8 @@ matmul_c10_avx2 (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -719,17 +730,15 @@ matmul_c10_avx2 (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -770,7 +779,9 @@ matmul_c10_avx2 (gfc_array_c10 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -815,7 +826,18 @@ matmul_c10_avx2 (gfc_array_c10 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1258,8 +1280,8 @@ matmul_c10_avx512f (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1267,8 +1289,8 @@ matmul_c10_avx512f (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1276,17 +1298,15 @@ matmul_c10_avx512f (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1327,7 +1347,9 @@ matmul_c10_avx512f (gfc_array_c10 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1372,7 +1394,18 @@ matmul_c10_avx512f (gfc_array_c10 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1829,8 +1862,8 @@ matmul_c10_vanilla (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1838,8 +1871,8 @@ matmul_c10_vanilla (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1847,17 +1880,15 @@ matmul_c10_vanilla (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1898,7 +1929,9 @@ matmul_c10_vanilla (gfc_array_c10 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1943,7 +1976,18 @@ matmul_c10_vanilla (gfc_array_c10 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -2460,8 +2504,8 @@ matmul_c10 (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2469,8 +2513,8 @@ matmul_c10 (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -2478,17 +2522,15 @@ matmul_c10 (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -2529,7 +2571,9 @@ matmul_c10 (gfc_array_c10 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2574,7 +2618,18 @@ matmul_c10 (gfc_array_c10 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 2062739ce1f440e4dd4fc8662118198be35556e7..ad2246c43b01aba276d534b4b62c226458a9be84 100644 (file)
@@ -144,8 +144,8 @@ matmul_c16_avx (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -153,8 +153,8 @@ matmul_c16_avx (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -162,17 +162,15 @@ matmul_c16_avx (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -213,7 +211,9 @@ matmul_c16_avx (gfc_array_c16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -258,7 +258,18 @@ matmul_c16_avx (gfc_array_c16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -701,8 +712,8 @@ matmul_c16_avx2 (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -710,8 +721,8 @@ matmul_c16_avx2 (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -719,17 +730,15 @@ matmul_c16_avx2 (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -770,7 +779,9 @@ matmul_c16_avx2 (gfc_array_c16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -815,7 +826,18 @@ matmul_c16_avx2 (gfc_array_c16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1258,8 +1280,8 @@ matmul_c16_avx512f (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1267,8 +1289,8 @@ matmul_c16_avx512f (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1276,17 +1298,15 @@ matmul_c16_avx512f (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1327,7 +1347,9 @@ matmul_c16_avx512f (gfc_array_c16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1372,7 +1394,18 @@ matmul_c16_avx512f (gfc_array_c16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1829,8 +1862,8 @@ matmul_c16_vanilla (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1838,8 +1871,8 @@ matmul_c16_vanilla (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1847,17 +1880,15 @@ matmul_c16_vanilla (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1898,7 +1929,9 @@ matmul_c16_vanilla (gfc_array_c16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1943,7 +1976,18 @@ matmul_c16_vanilla (gfc_array_c16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -2460,8 +2504,8 @@ matmul_c16 (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2469,8 +2513,8 @@ matmul_c16 (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -2478,17 +2522,15 @@ matmul_c16 (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -2529,7 +2571,9 @@ matmul_c16 (gfc_array_c16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2574,7 +2618,18 @@ matmul_c16 (gfc_array_c16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 91d193dca375398157876f24d742f4b435e0beda..7793fc1b5471c722164f7f48c8edf32017ede283 100644 (file)
@@ -144,8 +144,8 @@ matmul_c4_avx (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -153,8 +153,8 @@ matmul_c4_avx (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -162,17 +162,15 @@ matmul_c4_avx (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -213,7 +211,9 @@ matmul_c4_avx (gfc_array_c4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -258,7 +258,18 @@ matmul_c4_avx (gfc_array_c4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -701,8 +712,8 @@ matmul_c4_avx2 (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -710,8 +721,8 @@ matmul_c4_avx2 (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -719,17 +730,15 @@ matmul_c4_avx2 (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -770,7 +779,9 @@ matmul_c4_avx2 (gfc_array_c4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -815,7 +826,18 @@ matmul_c4_avx2 (gfc_array_c4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1258,8 +1280,8 @@ matmul_c4_avx512f (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1267,8 +1289,8 @@ matmul_c4_avx512f (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1276,17 +1298,15 @@ matmul_c4_avx512f (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1327,7 +1347,9 @@ matmul_c4_avx512f (gfc_array_c4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1372,7 +1394,18 @@ matmul_c4_avx512f (gfc_array_c4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1829,8 +1862,8 @@ matmul_c4_vanilla (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1838,8 +1871,8 @@ matmul_c4_vanilla (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1847,17 +1880,15 @@ matmul_c4_vanilla (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1898,7 +1929,9 @@ matmul_c4_vanilla (gfc_array_c4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1943,7 +1976,18 @@ matmul_c4_vanilla (gfc_array_c4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -2460,8 +2504,8 @@ matmul_c4 (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2469,8 +2513,8 @@ matmul_c4 (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -2478,17 +2522,15 @@ matmul_c4 (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -2529,7 +2571,9 @@ matmul_c4 (gfc_array_c4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2574,7 +2618,18 @@ matmul_c4 (gfc_array_c4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 425af85d1bba34b4ec2887acd987ac15e0a82475..8525dc853aae6a6033522463aa2e64fb167948a3 100644 (file)
@@ -144,8 +144,8 @@ matmul_c8_avx (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -153,8 +153,8 @@ matmul_c8_avx (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -162,17 +162,15 @@ matmul_c8_avx (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -213,7 +211,9 @@ matmul_c8_avx (gfc_array_c8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -258,7 +258,18 @@ matmul_c8_avx (gfc_array_c8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -701,8 +712,8 @@ matmul_c8_avx2 (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -710,8 +721,8 @@ matmul_c8_avx2 (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -719,17 +730,15 @@ matmul_c8_avx2 (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -770,7 +779,9 @@ matmul_c8_avx2 (gfc_array_c8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -815,7 +826,18 @@ matmul_c8_avx2 (gfc_array_c8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1258,8 +1280,8 @@ matmul_c8_avx512f (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1267,8 +1289,8 @@ matmul_c8_avx512f (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1276,17 +1298,15 @@ matmul_c8_avx512f (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1327,7 +1347,9 @@ matmul_c8_avx512f (gfc_array_c8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1372,7 +1394,18 @@ matmul_c8_avx512f (gfc_array_c8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1829,8 +1862,8 @@ matmul_c8_vanilla (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1838,8 +1871,8 @@ matmul_c8_vanilla (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1847,17 +1880,15 @@ matmul_c8_vanilla (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1898,7 +1929,9 @@ matmul_c8_vanilla (gfc_array_c8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1943,7 +1976,18 @@ matmul_c8_vanilla (gfc_array_c8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -2460,8 +2504,8 @@ matmul_c8 (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2469,8 +2513,8 @@ matmul_c8 (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -2478,17 +2522,15 @@ matmul_c8 (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -2529,7 +2571,9 @@ matmul_c8 (gfc_array_c8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2574,7 +2618,18 @@ matmul_c8 (gfc_array_c8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 0c9335d4322fe36965f9ee215b1da02fe520df7d..bb5bddba4c3f1161601e6dad1324fce61f8024bc 100644 (file)
@@ -144,8 +144,8 @@ matmul_i1_avx (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -153,8 +153,8 @@ matmul_i1_avx (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -162,17 +162,15 @@ matmul_i1_avx (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -213,7 +211,9 @@ matmul_i1_avx (gfc_array_i1 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -258,7 +258,18 @@ matmul_i1_avx (gfc_array_i1 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -701,8 +712,8 @@ matmul_i1_avx2 (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -710,8 +721,8 @@ matmul_i1_avx2 (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -719,17 +730,15 @@ matmul_i1_avx2 (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -770,7 +779,9 @@ matmul_i1_avx2 (gfc_array_i1 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -815,7 +826,18 @@ matmul_i1_avx2 (gfc_array_i1 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1258,8 +1280,8 @@ matmul_i1_avx512f (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1267,8 +1289,8 @@ matmul_i1_avx512f (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1276,17 +1298,15 @@ matmul_i1_avx512f (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1327,7 +1347,9 @@ matmul_i1_avx512f (gfc_array_i1 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1372,7 +1394,18 @@ matmul_i1_avx512f (gfc_array_i1 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1829,8 +1862,8 @@ matmul_i1_vanilla (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1838,8 +1871,8 @@ matmul_i1_vanilla (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1847,17 +1880,15 @@ matmul_i1_vanilla (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1898,7 +1929,9 @@ matmul_i1_vanilla (gfc_array_i1 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1943,7 +1976,18 @@ matmul_i1_vanilla (gfc_array_i1 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -2460,8 +2504,8 @@ matmul_i1 (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2469,8 +2513,8 @@ matmul_i1 (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -2478,17 +2522,15 @@ matmul_i1 (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -2529,7 +2571,9 @@ matmul_i1 (gfc_array_i1 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2574,7 +2618,18 @@ matmul_i1 (gfc_array_i1 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index b9334b3278fd70777dfd501984196cb064db2988..4f36a5b96cee5212f638a08f2bb5e77305b81074 100644 (file)
@@ -144,8 +144,8 @@ matmul_i16_avx (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -153,8 +153,8 @@ matmul_i16_avx (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -162,17 +162,15 @@ matmul_i16_avx (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -213,7 +211,9 @@ matmul_i16_avx (gfc_array_i16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -258,7 +258,18 @@ matmul_i16_avx (gfc_array_i16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -701,8 +712,8 @@ matmul_i16_avx2 (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -710,8 +721,8 @@ matmul_i16_avx2 (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -719,17 +730,15 @@ matmul_i16_avx2 (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -770,7 +779,9 @@ matmul_i16_avx2 (gfc_array_i16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -815,7 +826,18 @@ matmul_i16_avx2 (gfc_array_i16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1258,8 +1280,8 @@ matmul_i16_avx512f (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1267,8 +1289,8 @@ matmul_i16_avx512f (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1276,17 +1298,15 @@ matmul_i16_avx512f (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1327,7 +1347,9 @@ matmul_i16_avx512f (gfc_array_i16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1372,7 +1394,18 @@ matmul_i16_avx512f (gfc_array_i16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1829,8 +1862,8 @@ matmul_i16_vanilla (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1838,8 +1871,8 @@ matmul_i16_vanilla (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1847,17 +1880,15 @@ matmul_i16_vanilla (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1898,7 +1929,9 @@ matmul_i16_vanilla (gfc_array_i16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1943,7 +1976,18 @@ matmul_i16_vanilla (gfc_array_i16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -2460,8 +2504,8 @@ matmul_i16 (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2469,8 +2513,8 @@ matmul_i16 (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -2478,17 +2522,15 @@ matmul_i16 (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -2529,7 +2571,9 @@ matmul_i16 (gfc_array_i16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2574,7 +2618,18 @@ matmul_i16 (gfc_array_i16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index e4246e948df61d393a2ddd5536b6bce1ec20418e..2aea3b4a60513a1702ea3c214519ae801a6fb025 100644 (file)
@@ -144,8 +144,8 @@ matmul_i2_avx (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -153,8 +153,8 @@ matmul_i2_avx (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -162,17 +162,15 @@ matmul_i2_avx (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -213,7 +211,9 @@ matmul_i2_avx (gfc_array_i2 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -258,7 +258,18 @@ matmul_i2_avx (gfc_array_i2 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -701,8 +712,8 @@ matmul_i2_avx2 (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -710,8 +721,8 @@ matmul_i2_avx2 (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -719,17 +730,15 @@ matmul_i2_avx2 (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -770,7 +779,9 @@ matmul_i2_avx2 (gfc_array_i2 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -815,7 +826,18 @@ matmul_i2_avx2 (gfc_array_i2 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1258,8 +1280,8 @@ matmul_i2_avx512f (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1267,8 +1289,8 @@ matmul_i2_avx512f (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1276,17 +1298,15 @@ matmul_i2_avx512f (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1327,7 +1347,9 @@ matmul_i2_avx512f (gfc_array_i2 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1372,7 +1394,18 @@ matmul_i2_avx512f (gfc_array_i2 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1829,8 +1862,8 @@ matmul_i2_vanilla (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1838,8 +1871,8 @@ matmul_i2_vanilla (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1847,17 +1880,15 @@ matmul_i2_vanilla (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1898,7 +1929,9 @@ matmul_i2_vanilla (gfc_array_i2 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1943,7 +1976,18 @@ matmul_i2_vanilla (gfc_array_i2 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -2460,8 +2504,8 @@ matmul_i2 (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2469,8 +2513,8 @@ matmul_i2 (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -2478,17 +2522,15 @@ matmul_i2 (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -2529,7 +2571,9 @@ matmul_i2 (gfc_array_i2 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2574,7 +2618,18 @@ matmul_i2 (gfc_array_i2 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 78cf27c4fcdbc1e93a70441c8a4f3f6b111991ee..4ef9a0a7c7437a9b8a919be58116f6203535670f 100644 (file)
@@ -144,8 +144,8 @@ matmul_i4_avx (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -153,8 +153,8 @@ matmul_i4_avx (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -162,17 +162,15 @@ matmul_i4_avx (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -213,7 +211,9 @@ matmul_i4_avx (gfc_array_i4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -258,7 +258,18 @@ matmul_i4_avx (gfc_array_i4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -701,8 +712,8 @@ matmul_i4_avx2 (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -710,8 +721,8 @@ matmul_i4_avx2 (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -719,17 +730,15 @@ matmul_i4_avx2 (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -770,7 +779,9 @@ matmul_i4_avx2 (gfc_array_i4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -815,7 +826,18 @@ matmul_i4_avx2 (gfc_array_i4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1258,8 +1280,8 @@ matmul_i4_avx512f (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1267,8 +1289,8 @@ matmul_i4_avx512f (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1276,17 +1298,15 @@ matmul_i4_avx512f (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1327,7 +1347,9 @@ matmul_i4_avx512f (gfc_array_i4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1372,7 +1394,18 @@ matmul_i4_avx512f (gfc_array_i4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1829,8 +1862,8 @@ matmul_i4_vanilla (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1838,8 +1871,8 @@ matmul_i4_vanilla (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1847,17 +1880,15 @@ matmul_i4_vanilla (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1898,7 +1929,9 @@ matmul_i4_vanilla (gfc_array_i4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1943,7 +1976,18 @@ matmul_i4_vanilla (gfc_array_i4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -2460,8 +2504,8 @@ matmul_i4 (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2469,8 +2513,8 @@ matmul_i4 (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -2478,17 +2522,15 @@ matmul_i4 (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -2529,7 +2571,9 @@ matmul_i4 (gfc_array_i4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2574,7 +2618,18 @@ matmul_i4 (gfc_array_i4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index cf8c401400dfba144fdb37113f3b26a4fe32e6bb..e0c93ce3e7e8ad5ff048edaa2d5a12a98ea8caed 100644 (file)
@@ -144,8 +144,8 @@ matmul_i8_avx (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -153,8 +153,8 @@ matmul_i8_avx (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -162,17 +162,15 @@ matmul_i8_avx (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -213,7 +211,9 @@ matmul_i8_avx (gfc_array_i8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -258,7 +258,18 @@ matmul_i8_avx (gfc_array_i8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -701,8 +712,8 @@ matmul_i8_avx2 (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -710,8 +721,8 @@ matmul_i8_avx2 (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -719,17 +730,15 @@ matmul_i8_avx2 (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -770,7 +779,9 @@ matmul_i8_avx2 (gfc_array_i8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -815,7 +826,18 @@ matmul_i8_avx2 (gfc_array_i8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1258,8 +1280,8 @@ matmul_i8_avx512f (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1267,8 +1289,8 @@ matmul_i8_avx512f (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1276,17 +1298,15 @@ matmul_i8_avx512f (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1327,7 +1347,9 @@ matmul_i8_avx512f (gfc_array_i8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1372,7 +1394,18 @@ matmul_i8_avx512f (gfc_array_i8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1829,8 +1862,8 @@ matmul_i8_vanilla (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1838,8 +1871,8 @@ matmul_i8_vanilla (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1847,17 +1880,15 @@ matmul_i8_vanilla (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1898,7 +1929,9 @@ matmul_i8_vanilla (gfc_array_i8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1943,7 +1976,18 @@ matmul_i8_vanilla (gfc_array_i8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -2460,8 +2504,8 @@ matmul_i8 (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2469,8 +2513,8 @@ matmul_i8 (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -2478,17 +2522,15 @@ matmul_i8 (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -2529,7 +2571,9 @@ matmul_i8 (gfc_array_i8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2574,7 +2618,18 @@ matmul_i8 (gfc_array_i8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index e4309c80a6b4fbcb74f98646083be9df78b73dc3..5d90454a9e602f24fc79b5744712e6d6c0d777b7 100644 (file)
@@ -144,8 +144,8 @@ matmul_r10_avx (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -153,8 +153,8 @@ matmul_r10_avx (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -162,17 +162,15 @@ matmul_r10_avx (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -213,7 +211,9 @@ matmul_r10_avx (gfc_array_r10 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -258,7 +258,18 @@ matmul_r10_avx (gfc_array_r10 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -701,8 +712,8 @@ matmul_r10_avx2 (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -710,8 +721,8 @@ matmul_r10_avx2 (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -719,17 +730,15 @@ matmul_r10_avx2 (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -770,7 +779,9 @@ matmul_r10_avx2 (gfc_array_r10 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -815,7 +826,18 @@ matmul_r10_avx2 (gfc_array_r10 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1258,8 +1280,8 @@ matmul_r10_avx512f (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1267,8 +1289,8 @@ matmul_r10_avx512f (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1276,17 +1298,15 @@ matmul_r10_avx512f (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1327,7 +1347,9 @@ matmul_r10_avx512f (gfc_array_r10 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1372,7 +1394,18 @@ matmul_r10_avx512f (gfc_array_r10 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1829,8 +1862,8 @@ matmul_r10_vanilla (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1838,8 +1871,8 @@ matmul_r10_vanilla (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1847,17 +1880,15 @@ matmul_r10_vanilla (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1898,7 +1929,9 @@ matmul_r10_vanilla (gfc_array_r10 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1943,7 +1976,18 @@ matmul_r10_vanilla (gfc_array_r10 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -2460,8 +2504,8 @@ matmul_r10 (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2469,8 +2513,8 @@ matmul_r10 (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -2478,17 +2522,15 @@ matmul_r10 (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -2529,7 +2571,9 @@ matmul_r10 (gfc_array_r10 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2574,7 +2618,18 @@ matmul_r10 (gfc_array_r10 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 1ab554660d7d4f09bb9bc3aa4947fc5506e65e24..dab10b06b4bbd51c86209f8c369e73cbaca411b9 100644 (file)
@@ -144,8 +144,8 @@ matmul_r16_avx (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -153,8 +153,8 @@ matmul_r16_avx (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -162,17 +162,15 @@ matmul_r16_avx (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -213,7 +211,9 @@ matmul_r16_avx (gfc_array_r16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -258,7 +258,18 @@ matmul_r16_avx (gfc_array_r16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -701,8 +712,8 @@ matmul_r16_avx2 (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -710,8 +721,8 @@ matmul_r16_avx2 (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -719,17 +730,15 @@ matmul_r16_avx2 (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -770,7 +779,9 @@ matmul_r16_avx2 (gfc_array_r16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -815,7 +826,18 @@ matmul_r16_avx2 (gfc_array_r16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1258,8 +1280,8 @@ matmul_r16_avx512f (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1267,8 +1289,8 @@ matmul_r16_avx512f (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1276,17 +1298,15 @@ matmul_r16_avx512f (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1327,7 +1347,9 @@ matmul_r16_avx512f (gfc_array_r16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1372,7 +1394,18 @@ matmul_r16_avx512f (gfc_array_r16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1829,8 +1862,8 @@ matmul_r16_vanilla (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1838,8 +1871,8 @@ matmul_r16_vanilla (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1847,17 +1880,15 @@ matmul_r16_vanilla (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1898,7 +1929,9 @@ matmul_r16_vanilla (gfc_array_r16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1943,7 +1976,18 @@ matmul_r16_vanilla (gfc_array_r16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -2460,8 +2504,8 @@ matmul_r16 (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2469,8 +2513,8 @@ matmul_r16 (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -2478,17 +2522,15 @@ matmul_r16 (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -2529,7 +2571,9 @@ matmul_r16 (gfc_array_r16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2574,7 +2618,18 @@ matmul_r16 (gfc_array_r16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 97dba9825b1f366e8b21265aaee4a92d11258f36..c9c31df0756a180b0ca47f67e0db66a96c739082 100644 (file)
@@ -144,8 +144,8 @@ matmul_r4_avx (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -153,8 +153,8 @@ matmul_r4_avx (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -162,17 +162,15 @@ matmul_r4_avx (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -213,7 +211,9 @@ matmul_r4_avx (gfc_array_r4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -258,7 +258,18 @@ matmul_r4_avx (gfc_array_r4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -701,8 +712,8 @@ matmul_r4_avx2 (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -710,8 +721,8 @@ matmul_r4_avx2 (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -719,17 +730,15 @@ matmul_r4_avx2 (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -770,7 +779,9 @@ matmul_r4_avx2 (gfc_array_r4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -815,7 +826,18 @@ matmul_r4_avx2 (gfc_array_r4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1258,8 +1280,8 @@ matmul_r4_avx512f (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1267,8 +1289,8 @@ matmul_r4_avx512f (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1276,17 +1298,15 @@ matmul_r4_avx512f (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1327,7 +1347,9 @@ matmul_r4_avx512f (gfc_array_r4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1372,7 +1394,18 @@ matmul_r4_avx512f (gfc_array_r4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1829,8 +1862,8 @@ matmul_r4_vanilla (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1838,8 +1871,8 @@ matmul_r4_vanilla (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1847,17 +1880,15 @@ matmul_r4_vanilla (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1898,7 +1929,9 @@ matmul_r4_vanilla (gfc_array_r4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1943,7 +1976,18 @@ matmul_r4_vanilla (gfc_array_r4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -2460,8 +2504,8 @@ matmul_r4 (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2469,8 +2513,8 @@ matmul_r4 (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -2478,17 +2522,15 @@ matmul_r4 (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -2529,7 +2571,9 @@ matmul_r4 (gfc_array_r4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2574,7 +2618,18 @@ matmul_r4 (gfc_array_r4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 5e4c9500260fb3ffabb8da37ff965a0820c58562..4c5823f82426cae04a33dba01a723356bae5345d 100644 (file)
@@ -144,8 +144,8 @@ matmul_r8_avx (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -153,8 +153,8 @@ matmul_r8_avx (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -162,17 +162,15 @@ matmul_r8_avx (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -213,7 +211,9 @@ matmul_r8_avx (gfc_array_r8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -258,7 +258,18 @@ matmul_r8_avx (gfc_array_r8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -701,8 +712,8 @@ matmul_r8_avx2 (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -710,8 +721,8 @@ matmul_r8_avx2 (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -719,17 +730,15 @@ matmul_r8_avx2 (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -770,7 +779,9 @@ matmul_r8_avx2 (gfc_array_r8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -815,7 +826,18 @@ matmul_r8_avx2 (gfc_array_r8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1258,8 +1280,8 @@ matmul_r8_avx512f (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1267,8 +1289,8 @@ matmul_r8_avx512f (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1276,17 +1298,15 @@ matmul_r8_avx512f (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1327,7 +1347,9 @@ matmul_r8_avx512f (gfc_array_r8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1372,7 +1394,18 @@ matmul_r8_avx512f (gfc_array_r8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -1829,8 +1862,8 @@ matmul_r8_vanilla (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1838,8 +1871,8 @@ matmul_r8_vanilla (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -1847,17 +1880,15 @@ matmul_r8_vanilla (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -1898,7 +1929,9 @@ matmul_r8_vanilla (gfc_array_r8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -1943,7 +1976,18 @@ matmul_r8_vanilla (gfc_array_r8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -2460,8 +2504,8 @@ matmul_r8 (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2469,8 +2513,8 @@ matmul_r8 (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -2478,17 +2522,15 @@ matmul_r8 (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -2529,7 +2571,9 @@ matmul_r8 (gfc_array_r8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -2574,7 +2618,18 @@ matmul_r8 (gfc_array_r8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 5cb0f6ad6f35472d002ea9779b388e1f7bf036ab..03914715d5c0c1e237496784b542a62d8bdb224a 100644 (file)
@@ -109,8 +109,8 @@ matmul_c10_avx128_fma3 (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -118,8 +118,8 @@ matmul_c10_avx128_fma3 (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -127,17 +127,15 @@ matmul_c10_avx128_fma3 (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -178,7 +176,9 @@ matmul_c10_avx128_fma3 (gfc_array_c10 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -223,7 +223,18 @@ matmul_c10_avx128_fma3 (gfc_array_c10 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -667,8 +678,8 @@ matmul_c10_avx128_fma4 (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -676,8 +687,8 @@ matmul_c10_avx128_fma4 (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -685,17 +696,15 @@ matmul_c10_avx128_fma4 (gfc_array_c10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -736,7 +745,9 @@ matmul_c10_avx128_fma4 (gfc_array_c10 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -781,7 +792,18 @@ matmul_c10_avx128_fma4 (gfc_array_c10 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 66272fefaf91e5c2c97cbfe8fb7f88a45dc306af..876fc691ed8f6b897e9f335e2c35ead81b83d4bb 100644 (file)
@@ -109,8 +109,8 @@ matmul_c16_avx128_fma3 (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -118,8 +118,8 @@ matmul_c16_avx128_fma3 (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -127,17 +127,15 @@ matmul_c16_avx128_fma3 (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -178,7 +176,9 @@ matmul_c16_avx128_fma3 (gfc_array_c16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -223,7 +223,18 @@ matmul_c16_avx128_fma3 (gfc_array_c16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -667,8 +678,8 @@ matmul_c16_avx128_fma4 (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -676,8 +687,8 @@ matmul_c16_avx128_fma4 (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -685,17 +696,15 @@ matmul_c16_avx128_fma4 (gfc_array_c16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -736,7 +745,9 @@ matmul_c16_avx128_fma4 (gfc_array_c16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -781,7 +792,18 @@ matmul_c16_avx128_fma4 (gfc_array_c16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index f6e06e2e88f3225bafa750a720d2b0bf329c196e..a577887d0bd7edd51d0a95aac8370378be6aefd5 100644 (file)
@@ -109,8 +109,8 @@ matmul_c4_avx128_fma3 (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -118,8 +118,8 @@ matmul_c4_avx128_fma3 (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -127,17 +127,15 @@ matmul_c4_avx128_fma3 (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -178,7 +176,9 @@ matmul_c4_avx128_fma3 (gfc_array_c4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -223,7 +223,18 @@ matmul_c4_avx128_fma3 (gfc_array_c4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -667,8 +678,8 @@ matmul_c4_avx128_fma4 (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -676,8 +687,8 @@ matmul_c4_avx128_fma4 (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -685,17 +696,15 @@ matmul_c4_avx128_fma4 (gfc_array_c4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -736,7 +745,9 @@ matmul_c4_avx128_fma4 (gfc_array_c4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -781,7 +792,18 @@ matmul_c4_avx128_fma4 (gfc_array_c4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index accc69c4d1a20556569fc2bb00ec28f9a96a61e8..2ca470106121826c15adad213ddb085743185eec 100644 (file)
@@ -109,8 +109,8 @@ matmul_c8_avx128_fma3 (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -118,8 +118,8 @@ matmul_c8_avx128_fma3 (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -127,17 +127,15 @@ matmul_c8_avx128_fma3 (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -178,7 +176,9 @@ matmul_c8_avx128_fma3 (gfc_array_c8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -223,7 +223,18 @@ matmul_c8_avx128_fma3 (gfc_array_c8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -667,8 +678,8 @@ matmul_c8_avx128_fma4 (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -676,8 +687,8 @@ matmul_c8_avx128_fma4 (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -685,17 +696,15 @@ matmul_c8_avx128_fma4 (gfc_array_c8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -736,7 +745,9 @@ matmul_c8_avx128_fma4 (gfc_array_c8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -781,7 +792,18 @@ matmul_c8_avx128_fma4 (gfc_array_c8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 48b15c8074a625cac0109065e67a17561443bfbe..1af28d1672f6bba991155478996bdf54ba18f348 100644 (file)
@@ -109,8 +109,8 @@ matmul_i1_avx128_fma3 (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -118,8 +118,8 @@ matmul_i1_avx128_fma3 (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -127,17 +127,15 @@ matmul_i1_avx128_fma3 (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -178,7 +176,9 @@ matmul_i1_avx128_fma3 (gfc_array_i1 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -223,7 +223,18 @@ matmul_i1_avx128_fma3 (gfc_array_i1 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -667,8 +678,8 @@ matmul_i1_avx128_fma4 (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -676,8 +687,8 @@ matmul_i1_avx128_fma4 (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -685,17 +696,15 @@ matmul_i1_avx128_fma4 (gfc_array_i1 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -736,7 +745,9 @@ matmul_i1_avx128_fma4 (gfc_array_i1 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -781,7 +792,18 @@ matmul_i1_avx128_fma4 (gfc_array_i1 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 319321eca492f872446c588b32d4814a59ecbd6b..37a41252870465705d0314913e57fd0b190e7e58 100644 (file)
@@ -109,8 +109,8 @@ matmul_i16_avx128_fma3 (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -118,8 +118,8 @@ matmul_i16_avx128_fma3 (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -127,17 +127,15 @@ matmul_i16_avx128_fma3 (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -178,7 +176,9 @@ matmul_i16_avx128_fma3 (gfc_array_i16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -223,7 +223,18 @@ matmul_i16_avx128_fma3 (gfc_array_i16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -667,8 +678,8 @@ matmul_i16_avx128_fma4 (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -676,8 +687,8 @@ matmul_i16_avx128_fma4 (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -685,17 +696,15 @@ matmul_i16_avx128_fma4 (gfc_array_i16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -736,7 +745,9 @@ matmul_i16_avx128_fma4 (gfc_array_i16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -781,7 +792,18 @@ matmul_i16_avx128_fma4 (gfc_array_i16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 4d8945b10a24538709750c23459658ee315a4e23..033133a4729ca3cb296c131a7bd67cabdfe70141 100644 (file)
@@ -109,8 +109,8 @@ matmul_i2_avx128_fma3 (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -118,8 +118,8 @@ matmul_i2_avx128_fma3 (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -127,17 +127,15 @@ matmul_i2_avx128_fma3 (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -178,7 +176,9 @@ matmul_i2_avx128_fma3 (gfc_array_i2 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -223,7 +223,18 @@ matmul_i2_avx128_fma3 (gfc_array_i2 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -667,8 +678,8 @@ matmul_i2_avx128_fma4 (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -676,8 +687,8 @@ matmul_i2_avx128_fma4 (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -685,17 +696,15 @@ matmul_i2_avx128_fma4 (gfc_array_i2 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -736,7 +745,9 @@ matmul_i2_avx128_fma4 (gfc_array_i2 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -781,7 +792,18 @@ matmul_i2_avx128_fma4 (gfc_array_i2 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index acaa00a30bbef0611dcbab07ba2a4a27c87208da..7cc2ba817bb946909b897a58905ae238f12f7222 100644 (file)
@@ -109,8 +109,8 @@ matmul_i4_avx128_fma3 (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -118,8 +118,8 @@ matmul_i4_avx128_fma3 (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -127,17 +127,15 @@ matmul_i4_avx128_fma3 (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -178,7 +176,9 @@ matmul_i4_avx128_fma3 (gfc_array_i4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -223,7 +223,18 @@ matmul_i4_avx128_fma3 (gfc_array_i4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -667,8 +678,8 @@ matmul_i4_avx128_fma4 (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -676,8 +687,8 @@ matmul_i4_avx128_fma4 (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -685,17 +696,15 @@ matmul_i4_avx128_fma4 (gfc_array_i4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -736,7 +745,9 @@ matmul_i4_avx128_fma4 (gfc_array_i4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -781,7 +792,18 @@ matmul_i4_avx128_fma4 (gfc_array_i4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 56e85167a3f909e98f3a4cd8fafd42bdd42ce00c..5628064d887a2f1c9f6bed17fb7ed18231972fe9 100644 (file)
@@ -109,8 +109,8 @@ matmul_i8_avx128_fma3 (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -118,8 +118,8 @@ matmul_i8_avx128_fma3 (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -127,17 +127,15 @@ matmul_i8_avx128_fma3 (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -178,7 +176,9 @@ matmul_i8_avx128_fma3 (gfc_array_i8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -223,7 +223,18 @@ matmul_i8_avx128_fma3 (gfc_array_i8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -667,8 +678,8 @@ matmul_i8_avx128_fma4 (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -676,8 +687,8 @@ matmul_i8_avx128_fma4 (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -685,17 +696,15 @@ matmul_i8_avx128_fma4 (gfc_array_i8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -736,7 +745,9 @@ matmul_i8_avx128_fma4 (gfc_array_i8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -781,7 +792,18 @@ matmul_i8_avx128_fma4 (gfc_array_i8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 880c9d921b2b20c6bdf24f239c76c1de5f414c06..68c0ef33a23126e8971f43d3b764c0c91f4bd1bb 100644 (file)
@@ -109,8 +109,8 @@ matmul_r10_avx128_fma3 (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -118,8 +118,8 @@ matmul_r10_avx128_fma3 (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -127,17 +127,15 @@ matmul_r10_avx128_fma3 (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -178,7 +176,9 @@ matmul_r10_avx128_fma3 (gfc_array_r10 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -223,7 +223,18 @@ matmul_r10_avx128_fma3 (gfc_array_r10 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -667,8 +678,8 @@ matmul_r10_avx128_fma4 (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -676,8 +687,8 @@ matmul_r10_avx128_fma4 (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -685,17 +696,15 @@ matmul_r10_avx128_fma4 (gfc_array_r10 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -736,7 +745,9 @@ matmul_r10_avx128_fma4 (gfc_array_r10 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -781,7 +792,18 @@ matmul_r10_avx128_fma4 (gfc_array_r10 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 328e251a3a11769df77d9e40b2a4e2338719287e..fadff1d6d63aa012b273e3d425622c793ec51d4d 100644 (file)
@@ -109,8 +109,8 @@ matmul_r16_avx128_fma3 (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -118,8 +118,8 @@ matmul_r16_avx128_fma3 (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -127,17 +127,15 @@ matmul_r16_avx128_fma3 (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -178,7 +176,9 @@ matmul_r16_avx128_fma3 (gfc_array_r16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -223,7 +223,18 @@ matmul_r16_avx128_fma3 (gfc_array_r16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -667,8 +678,8 @@ matmul_r16_avx128_fma4 (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -676,8 +687,8 @@ matmul_r16_avx128_fma4 (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -685,17 +696,15 @@ matmul_r16_avx128_fma4 (gfc_array_r16 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -736,7 +745,9 @@ matmul_r16_avx128_fma4 (gfc_array_r16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -781,7 +792,18 @@ matmul_r16_avx128_fma4 (gfc_array_r16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 013a1804a11d5ba3ce8bfabeff3745edbfd8c573..accec42ce17afaf2cc77cf6d38f5c091c3ae3e3c 100644 (file)
@@ -109,8 +109,8 @@ matmul_r4_avx128_fma3 (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -118,8 +118,8 @@ matmul_r4_avx128_fma3 (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -127,17 +127,15 @@ matmul_r4_avx128_fma3 (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -178,7 +176,9 @@ matmul_r4_avx128_fma3 (gfc_array_r4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -223,7 +223,18 @@ matmul_r4_avx128_fma3 (gfc_array_r4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -667,8 +678,8 @@ matmul_r4_avx128_fma4 (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -676,8 +687,8 @@ matmul_r4_avx128_fma4 (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -685,17 +696,15 @@ matmul_r4_avx128_fma4 (gfc_array_r4 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -736,7 +745,9 @@ matmul_r4_avx128_fma4 (gfc_array_r4 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -781,7 +792,18 @@ matmul_r4_avx128_fma4 (gfc_array_r4 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 4da59f9e69c7b0605f2c2b61b36fd1feb6626913..06e0437b606c01198d606b8f27c63a08d3819f07 100644 (file)
@@ -109,8 +109,8 @@ matmul_r8_avx128_fma3 (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -118,8 +118,8 @@ matmul_r8_avx128_fma3 (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -127,17 +127,15 @@ matmul_r8_avx128_fma3 (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -178,7 +176,9 @@ matmul_r8_avx128_fma3 (gfc_array_r8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -223,7 +223,18 @@ matmul_r8_avx128_fma3 (gfc_array_r8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -667,8 +678,8 @@ matmul_r8_avx128_fma4 (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -676,8 +687,8 @@ matmul_r8_avx128_fma4 (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -685,17 +696,15 @@ matmul_r8_avx128_fma4 (gfc_array_r8 * const restrict retarray,
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -736,7 +745,9 @@ matmul_r8_avx128_fma4 (gfc_array_r8 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -781,7 +792,18 @@ matmul_r8_avx128_fma4 (gfc_array_r8 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
index 2020e8a50dfe20e7c7fb491f361aed5025eec20b..32a1e01e12f66c6951412291f7783cd6af7a86e8 100644 (file)
@@ -59,8 +59,8 @@
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -68,8 +68,8 @@
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
          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",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          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:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -129,7 +127,9 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -174,7 +174,18 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;