 
     if (k < kb) break;
 
-#pragma unroll
-    for (int l = 0; l < kb; l++) {
-      saxpy((trans == CBlasNoTrans) ? A[0] : a[ti][l], (trans == CBlasNoTrans) ? b[l] : &b[l][tj], x);
-      A += lda;
+    if (trans == CBlasNoTrans) {
+#pragma unroll
+      for (int l = 0; l < kb; l++) {
+        saxpy(A[0], b[l], x);
+        A += lda;
+      }
+    }
+    else {
+#pragma unroll
+      for (int l = 0; l < kb; l++)
+        saxpy(a[ti][l], &b[l][tj], x);
     }
 
     __syncthreads();

    k -= kb;
  }

  for (int l = 0; l < k; l++) {
    saxpy((trans == CBlasNoTrans) ? A[0] : a[ti][l], (trans == CBlasNoTrans) ? b[l] : &b[l][tj], x);
    A += lda;
  }

  // For Upper/Trans and Lower/NoTrans process diagonal last

            saxpy(1.0f, (trans == CBlasNoTrans) ? b[ll] : &b[ll][tj], x);
          else if (ti < l)
            saxpy((trans == CBlasNoTrans) ? A[0] : a[ti][ll], (trans == CBlasNoTrans) ? b[ll] : &b[ll][tj], x);
          if (trans == CBlasNoTrans)
            A += lda;
          l++;
        }
      }
