Revert changes from PR#1419
authorMartin Kroeker <martin@ruby.chemie.uni-freiburg.de>
Thu, 17 May 2018 09:40:08 +0000 (11:40 +0200)
committerGitHub <noreply@github.com>
Thu, 17 May 2018 09:40:08 +0000 (11:40 +0200)
at least one of these changes apparently is an oversimplification, leading to TRMM breakage on some platforms as observed in #1563

kernel/generic/trmm_ltcopy_2.c
kernel/generic/trmm_utcopy_16.c
kernel/generic/trmm_utcopy_2.c
kernel/generic/trmm_utcopy_4.c
kernel/generic/trsm_ltcopy_4.c
kernel/generic/ztrmm_ltcopy_2.c
kernel/generic/ztrsm_utcopy_1.c
kernel/generic/ztrsm_utcopy_2.c

index 60cdeed..e9ad45f 100644 (file)
@@ -116,22 +116,34 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
       if (m & 1) {
 
        if (X > posY) {
-         /* ao1 += 1;
-         ao2 += 1; */
+         ao1 += 1;
+         ao2 += 1;
          b += 2;
        } else
-#ifdef UNIT
          if (X < posY) {
-#endif 
-            b[ 0] = *(ao1 + 0);
-#ifdef UNIT
+           data01 = *(ao1 + 0);
+           data02 = *(ao1 + 1);
+
+           b[ 0] = data01;
+           b[ 1] = data02;
+           ao1 += lda;
+           b += 2;
          } else {
+#ifdef UNIT
+           data02 = *(ao1 + 1);
 
            b[ 0] = ONE;
+           b[ 1] = data02;
+#else
+           data01 = *(ao1 + 0);
+           data02 = *(ao1 + 1);
+
+           b[ 0] = data01;
+           b[ 1] = data02;
+#endif
+           ao1 += 2;
+           b += 2;
          }
-#endif 
-         b[ 1] = *(ao1 + 1);
-         b += 2;
       }
 
       posY += 2;
@@ -178,7 +190,7 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
        } while (i > 0);
       }
 
-      // posY += 1;
+      posY += 1;
   }
 
   return 0;
index 12642e7..b83989f 100644 (file)
@@ -518,7 +518,7 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
       i = (m & 15);
       if (i > 0) {
        if (X < posY) {
-         /* a01 += i;
+         a01 += i;
          a02 += i;
          a03 += i;
          a04 += i;
@@ -533,7 +533,7 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
          a13 += i;
          a14 += i;
          a15 += i;
-         a16 += i; */
+         a16 += i;
          b += 16 * i;
        } else
          if (X > posY) {
@@ -1130,14 +1130,14 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
       i = (m & 7);
       if (i > 0) {
        if (X < posY) {
-         /* a01 += i;
+         a01 += i;
          a02 += i;
          a03 += i;
          a04 += i;
          a05 += i;
          a06 += i;
          a07 += i;
-         a08 += i; */
+         a08 += i;
          b += 8 * i;
        } else
          if (X > posY) {
@@ -1156,13 +1156,13 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
              b += 8;
            }
 
-           /* a02 += i * lda;
+           a02 += i * lda;
            a03 += i * lda;
            a04 += i * lda;
            a05 += i * lda;
            a06 += i * lda;
            a07 += i * lda;
-           a08 += i * lda; */
+           a08 += i * lda;
          } else {
 #ifdef UNIT
            b[ 0] = ONE;
@@ -1371,10 +1371,10 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
       i = (m & 3);
       if (i > 0) {
        if (X < posY) {
-         /* a01 += i;
+         a01 += i;
          a02 += i;
          a03 += i;
-         a04 += i; */
+         a04 += i;
          b += 4 * i;
        } else
          if (X > posY) {
@@ -1387,9 +1387,9 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
              a01 += lda;
              b += 4;
            }
-           /* a02 += lda;
+           a02 += lda;
            a03 += lda;
-           a04 += lda; */
+           a04 += lda;
          } else {
 
 #ifdef UNIT
@@ -1487,19 +1487,23 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
       if (X < posY) {
        a01 ++;
        a02 ++;
-      } else {
-#ifdef UNIT
+       b += 2;
+      } else
        if (X > posY) {
-#endif
          b[  0] = *(a01 +  0);
-#ifdef UNIT
+         b[  1] = *(a01 +  1);
+         a01 += lda;
+         b += 2;
        } else {
+#ifdef UNIT
          b[  0] = ONE;
-       }
+         b[  1] = *(a01 +  1);
+#else
+         b[  0] = *(a01 +  0);
+         b[  1] = *(a01 +  1);
 #endif
-       b[  1] = *(a01 +  1);
-      }
-      b += 2;
+         b += 2;
+       }
     }
     posY += 2;
   }
@@ -1518,25 +1522,28 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
     if (i > 0) {
       do {
        if (X < posY) {
-         a01 ++;
-       } else {
-#ifdef UNIT
+         a01 += 1;
+         b ++;
+       } else
          if (X > posY) {
-#endif
            b[  0] = *(a01 +  0);
-#ifdef UNIT
+           a01 += lda;
+           b ++;
          } else {
+#ifdef UNIT
            b[ 0] = ONE;
-         }
+#else
+           b[ 0] = *(a01 +  0);
 #endif
-         a01 += lda;
-       }
-       b ++;
-       X ++;
-       i --;
+           a01 += lda;
+           b ++;
+         }
+
+         X += 1;
+         i --;
       } while (i > 0);
     }
-    // posY += 1;
+    posY += 1;
   }
 
   return 0;
index 75076c3..ae4a19e 100644 (file)
@@ -117,8 +117,8 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
       if (m & 1) {
 
        if (X < posY) {
-         /* ao1 += 1;
-         ao2 += 1; */
+         ao1 += 1;
+         ao2 += 1;
          b += 2;
        } else
          if (X > posY) {
@@ -127,7 +127,7 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
 
            b[ 0] = data01;
            b[ 1] = data02;
-           // ao1 += lda;
+           ao1 += lda;
            b += 2;
          } else {
 #ifdef UNIT
@@ -139,7 +139,7 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
            b[ 0] = data01;
            b[ 1] = ZERO;
 #endif
-           // ao1 += lda;
+           ao1 += lda;
            b += 2;
          }
       }
@@ -161,18 +161,27 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
     i = m;
     if (m > 0) {
       do {
+       if (X < posY) {
+         b += 1;
+         ao1 += 1;
+       } else
+         if (X > posY) {
+           data01 = *(ao1 + 0);
+           b[ 0] = data01;
+           b += 1;
+           ao1 += lda;
+         } else {
 #ifdef UNIT
-        if (X > posY) {
-#endif
-         b[ 0] = *(ao1 + 0);
-#ifdef UNIT
-       } else {
-         b[ 0] = ONE;
-       }
+           b[ 0] = ONE;
+#else
+           data01 = *(ao1 + 0);
+           b[ 0] = data01;
 #endif
-        b ++;
-        ao1 += lda;
-       X ++;
+           b += 1;
+           ao1 += lda;
+         }
+
+       X += 1;
        i --;
       } while (i > 0);
     }
index e584409..441f733 100644 (file)
@@ -201,18 +201,18 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
        if (X < posY) {
 
          if (m & 2) {
-           /* ao1 += 2;
+           ao1 += 2;
            ao2 += 2;
            ao3 += 2;
-           ao4 += 2; */
+           ao4 += 2;
            b += 8;
          }
 
          if (m & 1) {
-           /* ao1 += 1;
+           ao1 += 1;
            ao2 += 1;
            ao3 += 1;
-           ao4 += 1; */
+           ao4 += 1;
            b += 4;
          }
 
@@ -238,7 +238,7 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
              b[ 7] = data08;
 
              ao1 += 2 * lda;
-             // ao2 += 2 * lda;
+             ao2 += 2 * lda;
              b   += 8;
            }
 
@@ -253,7 +253,7 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
              b[ 2] = data03;
              b[ 3] = data04;
 
-             // ao1 += lda;
+             ao1 += lda;
              b += 4;
            }
 
@@ -401,7 +401,7 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
       if (i) {
 
        if (X < posY) {
-         // ao1 += 2;
+         ao1 += 2;
          b += 2;
        } else
          if (X > posY) {
@@ -411,7 +411,7 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
            b[ 0] = data01;
            b[ 1] = data02;
 
-           // ao1 += lda;
+           ao1 += lda;
            b += 2;
          } else {
 #ifdef UNIT
@@ -443,21 +443,26 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
        do {
 
          if (X < posY) {
+           b += 1;
            ao1 += 1;
-         } else {
-#ifdef UNIT
+         } else
            if (X > posY) {
-#endif
-             b[ 0] = *(ao1 + 0);
-#ifdef UNIT
+             data01 = *(ao1 + 0);
+             b[ 0] = data01;
+             ao1 += lda;
+             b += 1;
            } else {
+#ifdef UNIT
              b[ 0] = ONE;
-           }
+#else
+             data01 = *(ao1 + 0);
+             b[ 0] = data01;
 #endif
-           ao1 += lda;
-         }
-         b ++;
-         X ++;
+             ao1 += lda;
+             b += 1;
+           }
+
+         X += 1;
          i --;
        } while (i > 0);
       }
index 07bb137..12043eb 100644 (file)
@@ -206,7 +206,7 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG offset, FLOAT
       }
 
       a1 += 2 * lda;
-      // a2 += 2 * lda;
+      a2 += 2 * lda;
       b += 8;
 
       ii += 2;
index 7969f4f..457890c 100644 (file)
@@ -139,18 +139,48 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
       }
 
       if (m & 1) {
-#ifdef UNIT
+
+       if (X > posY) {
+         ao1 += 2;
+         ao2 += 2;
+         b += 4;
+
+       } else
          if (X < posY) {
-#endif
-           b[ 0] = *(ao1 + 0);
-           b[ 1] = *(ao1 + 1);
-#ifdef UNIT
+           data1 = *(ao1 + 0);
+           data2 = *(ao1 + 1);
+           data3 = *(ao1 + 2);
+           data4 = *(ao1 + 3);
+
+           b[ 0] = data1;
+           b[ 1] = data2;
+           b[ 2] = data3;
+           b[ 3] = data4;
+
+           ao1 += lda;
+           b += 4;
          } else {
+#ifdef UNIT
+           data3 = *(ao1 + 2);
+           data4 = *(ao1 + 3);
+
            b[ 0] = ONE;
            b[ 1] = ZERO;
-         }
+           b[ 2] = data3;
+           b[ 3] = data4;
+#else
+           data1 = *(ao1 + 0);
+           data2 = *(ao1 + 1);
+           data3 = *(ao1 + 2);
+           data4 = *(ao1 + 3);
+
+           b[ 0] = data1;
+           b[ 1] = data2;
+           b[ 2] = data3;
+           b[ 3] = data4;
 #endif
-         b += 4;
+           b += 4;
+         }
       }
 
       posY += 2;
@@ -203,7 +233,7 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
        } while (i > 0);
       }
 
-      // posY += 1;
+      posY += 1;
   }
 
   return 0;
index 0e33a7d..08f85e8 100644 (file)
@@ -43,7 +43,7 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG offset, FLOAT
 
   BLASLONG i, ii, j, jj;
 
-  FLOAT data01 = 0.0, data02 = 0.0;
+  FLOAT data01, data02;
   FLOAT *a1;
 
   lda *= 2;
index c34d741..387bb25 100644 (file)
@@ -43,8 +43,8 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG offset, FLOAT
 
   BLASLONG i, ii, j, jj;
 
-  FLOAT data01 = 0.0, data02 = 0.0, data03, data04;
-  FLOAT data05, data06, data07 = 0.0, data08 = 0.0;
+  FLOAT data01, data02, data03, data04;
+  FLOAT data05, data06, data07, data08;
   FLOAT *a1, *a2;
 
   lda *= 2;