{
#define a_ref(a_1,a_2) (dA+(a_2)*(ldda) + (a_1))
#define t_ref(a_1) (dT+(a_1)*nb)
#define d_ref(a_1) (dT+(minmn+(a_1))*nb)
#define dd_ref(a_1) (dT+(2*minmn+(a_1))*nb)
#define work_ref(a_1) ( work + (a_1))
#define hwork ( work + (nb)*(m))
*info = 0;
if (m < 0) {
*info = -1;
} else if (n < 0) {
*info = -2;
}
else if (ldda <
max(1,m)) {
*info = -4;
}
if (*info != 0) {
return *info;
}
if (k == 0)
return *info;
lwork = (m + n + nb)*nb;
lhwork = lwork - m*nb;
return *info;
}
memset( ut, 0, nb*nb*sizeof(double));
static cudaStream_t stream[2];
ldwork = m;
lddwork= n;
if ( (nb > 1) && (nb < k) ) {
old_i = 0; old_ib = nb;
for (i = 0; i < k-nb; i += nb) {
rows = m -i;
if (i>0){
cols = n-old_i-2*old_ib;
m-old_i, cols, old_ib,
a_ref(old_i, old_i+2*old_ib), ldda,
dd_ref(0), lddwork);
ut, old_ib,
d_ref(old_i), old_ib, stream[0] );
}
&rows, &ib,
work_ref(i), &ldwork, tau+i, hwork, &ib);
if (i + ib < n) {
if (i+nb < k-nb){
rows, ib, ib,
}
else {
cols = n-i-ib;
rows, cols, ib,
}
old_i = i;
old_ib = ib;
}
}
} else {
i = 0;
}
if (i < k) {
ib = n-i;
rows = m-i;
lhwork = lwork - rows*ib;
}
return *info;
}