Skip to content

Commit c6e4d17

Browse files
authored
Follow-up on ?GESVDQ updates from PR 1146 (Reference-LAPACK PR 1221)
1 parent b9ba9be commit c6e4d17

4 files changed

Lines changed: 107 additions & 38 deletions

File tree

lapack-netlib/LAPACKE/src/lapacke_cgesvdq_work.c

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,17 @@ lapack_int LAPACKE_cgesvdq_work( int matrix_layout, char joba, char jobp,
5050
info = info - 1;
5151
}
5252
} else if( matrix_layout == LAPACK_ROW_MAJOR ) {
53-
lapack_int nrows_u = ( LAPACKE_lsame( jobu, 'a' ) ||
54-
LAPACKE_lsame( jobu, 's' ) ) ? m : 1;
53+
lapack_int nrows_u = LAPACKE_lsame( jobu, 'a' ) ||
54+
LAPACKE_lsame( jobu, 'u' ) ||
55+
LAPACKE_lsame( jobu, 'r' ) ||
56+
LAPACKE_lsame( jobu, 'f' ) ||
57+
LAPACKE_lsame( jobu, 's' ) ? m : 1;
5558
lapack_int ncols_u = LAPACKE_lsame( jobu, 'a' ) ? m :
56-
(LAPACKE_lsame( jobu, 's' ) ? MIN(m,n) : 1);
57-
lapack_int nrows_v = LAPACKE_lsame( jobv, 'a' ) ? n :
58-
( LAPACKE_lsame( jobv, 's' ) ? MIN(m,n) : 1);
59+
( LAPACKE_lsame( jobu, 's' ) ||
60+
(LAPACKE_lsame( jobu, 'u' ) ) ? MIN(m,n) : 1);
61+
lapack_int nrows_v = ( LAPACKE_lsame( jobv, 'a' ) ||
62+
LAPACKE_lsame( jobv, 'v' ) ||
63+
LAPACKE_lsame( jobv, 'r' )) ? n : 1;
5964
lapack_int lda_t = MAX(1,m);
6065
lapack_int ldu_t = MAX(1,nrows_u);
6166
lapack_int ldv_t = MAX(1,nrows_v);
@@ -91,15 +96,19 @@ lapack_int LAPACKE_cgesvdq_work( int matrix_layout, char joba, char jobp,
9196
info = LAPACK_TRANSPOSE_MEMORY_ERROR;
9297
goto exit_level_0;
9398
}
94-
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ) {
99+
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ||
100+
LAPACKE_lsame( jobu, 'u' ) ||
101+
LAPACKE_lsame( jobu, 'r' ) ||
102+
LAPACKE_lsame( jobu, 'f' ) ) {
95103
u_t = (lapack_complex_float*)
96104
LAPACKE_malloc( sizeof(lapack_complex_float) * ldu_t * MAX(1,ncols_u) );
97105
if( u_t == NULL ) {
98106
info = LAPACK_TRANSPOSE_MEMORY_ERROR;
99107
goto exit_level_1;
100108
}
101109
}
102-
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 's' ) ) {
110+
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ||
111+
LAPACKE_lsame( jobv, 'r' ) ) {
103112
v_t = (lapack_complex_float*)
104113
LAPACKE_malloc( sizeof(lapack_complex_float) * ldv_t * MAX(1,n) );
105114
if( v_t == NULL ) {
@@ -118,20 +127,28 @@ lapack_int LAPACKE_cgesvdq_work( int matrix_layout, char joba, char jobp,
118127
}
119128
/* Transpose output matrices */
120129
LAPACKE_cge_trans( LAPACK_COL_MAJOR, m, n, a_t, lda_t, a, lda );
121-
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ) {
130+
if( LAPACKE_lsame( jobu, 'a' ) ||LAPACKE_lsame( jobu, 's' ) ||
131+
LAPACKE_lsame( jobu, 'u' ) ||
132+
LAPACKE_lsame( jobu, 'r' ) ||
133+
LAPACKE_lsame( jobu, 'f' ) ) {
122134
LAPACKE_cge_trans( LAPACK_COL_MAJOR, nrows_u, ncols_u, u_t, ldu_t,
123135
u, ldu );
124136
}
125-
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 's' ) ) {
137+
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ||
138+
LAPACKE_lsame( jobv, 'r' )) {
126139
LAPACKE_cge_trans( LAPACK_COL_MAJOR, nrows_v, n, v_t, ldv_t, v,
127140
ldv );
128141
}
129142
/* Release memory and exit */
130-
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 's' ) ) {
143+
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ||
144+
LAPACKE_lsame( jobv, 'r' ) ) {
131145
LAPACKE_free( v_t );
132146
}
133147
exit_level_2:
134-
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ) {
148+
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ||
149+
LAPACKE_lsame( jobu, 'u' ) ||
150+
LAPACKE_lsame( jobu, 'r' ) ||
151+
LAPACKE_lsame( jobu, 'f' ) ) {
135152
LAPACKE_free( u_t );
136153
}
137154
exit_level_1:

lapack-netlib/LAPACKE/src/lapacke_dgesvdq_work.c

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,16 @@ lapack_int LAPACKE_dgesvdq_work( int matrix_layout, char joba, char jobp,
5151
}
5252
} else if( matrix_layout == LAPACK_ROW_MAJOR ) {
5353
lapack_int nrows_u = ( LAPACKE_lsame( jobu, 'a' ) ||
54+
LAPACKE_lsame( jobu, 'u' ) ||
55+
LAPACKE_lsame( jobu, 'r' ) ||
56+
LAPACKE_lsame( jobu, 'f' ) ||
5457
LAPACKE_lsame( jobu, 's' ) ) ? m : 1;
5558
lapack_int ncols_u = LAPACKE_lsame( jobu, 'a' ) ? m :
56-
(LAPACKE_lsame( jobu, 's' ) ? MIN(m,n) : 1);
57-
lapack_int nrows_v = LAPACKE_lsame( jobv, 'a' ) ? n :
58-
( LAPACKE_lsame( jobv, 's' ) ? MIN(m,n) : 1);
59+
( (LAPACKE_lsame( jobu, 's' ) ||
60+
LAPACKE_lsame( jobu, 'u' ) ) ? MIN(m,n) : 1);
61+
lapack_int nrows_v = ( LAPACKE_lsame( jobv, 'a' ) ||
62+
LAPACKE_lsame( jobu, 'v' ) ||
63+
LAPACKE_lsame( jobu, 'r' )) ? n : 1;
5964
lapack_int lda_t = MAX(1,m);
6065
lapack_int ldu_t = MAX(1,nrows_u);
6166
lapack_int ldv_t = MAX(1,nrows_v);
@@ -91,15 +96,19 @@ lapack_int LAPACKE_dgesvdq_work( int matrix_layout, char joba, char jobp,
9196
info = LAPACK_TRANSPOSE_MEMORY_ERROR;
9297
goto exit_level_0;
9398
}
94-
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ) {
99+
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ||
100+
LAPACKE_lsame( jobu, 'u' ) ||
101+
LAPACKE_lsame( jobu, 'r' ) ||
102+
LAPACKE_lsame( jobu, 'f' ) ) {
95103
u_t = (double*)
96104
LAPACKE_malloc( sizeof(double) * ldu_t * MAX(1,ncols_u) );
97105
if( u_t == NULL ) {
98106
info = LAPACK_TRANSPOSE_MEMORY_ERROR;
99107
goto exit_level_1;
100108
}
101109
}
102-
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 's' ) ) {
110+
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ||
111+
LAPACKE_lsame( jobu, 'r' ) ) {
103112
v_t = (double*)
104113
LAPACKE_malloc( sizeof(double) * ldv_t * MAX(1,n) );
105114
if( v_t == NULL ) {
@@ -118,20 +127,28 @@ lapack_int LAPACKE_dgesvdq_work( int matrix_layout, char joba, char jobp,
118127
}
119128
/* Transpose output matrices */
120129
LAPACKE_dge_trans( LAPACK_COL_MAJOR, m, n, a_t, lda_t, a, lda );
121-
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ) {
122-
LAPACKE_dge_trans( LAPACK_COL_MAJOR, nrows_u, ncols_u, u_t, ldu_t,
130+
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ||
131+
LAPACKE_lsame( jobu, 'u' ) ||
132+
LAPACKE_lsame( jobu, 'r' ) ||
133+
LAPACKE_lsame( jobu, 'f' ) ) {
134+
LAPACKE_dge_trans)( LAPACK_COL_MAJOR, nrows_u, ncols_u, u_t, ldu_t,
123135
u, ldu );
124136
}
125-
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 's' ) ) {
137+
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ||
138+
LAPACKE_lsame( jobu, 'r' )) {
126139
LAPACKE_dge_trans( LAPACK_COL_MAJOR, nrows_v, n, v_t, ldv_t, v,
127140
ldv );
128141
}
129142
/* Release memory and exit */
130-
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 's' ) ) {
143+
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ||
144+
LAPACKE_lsame( jobu, 'r' ) ) {
131145
LAPACKE_free( v_t );
132146
}
133147
exit_level_2:
134-
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ) {
148+
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ||
149+
LAPACKE_lsame( jobu, 'u' ) ||
150+
LAPACKE_lsame( jobu, 'r' ) ||
151+
LAPACKE_lsame( jobu, 'f' ) ) {
135152
LAPACKE_free( u_t );
136153
}
137154
exit_level_1:

lapack-netlib/LAPACKE/src/lapacke_sgesvdq_work.c

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,16 @@ lapack_int LAPACKE_sgesvdq_work( int matrix_layout, char joba, char jobp,
5151
}
5252
} else if( matrix_layout == LAPACK_ROW_MAJOR ) {
5353
lapack_int nrows_u = ( LAPACKE_lsame( jobu, 'a' ) ||
54+
LAPACKE_lsame( jobu, 'u' ) ||
55+
LAPACKE_lsame( jobu, 'r' ) ||
56+
LAPACKE_lsame( jobu, 'f' ) ||
5457
LAPACKE_lsame( jobu, 's' ) ) ? m : 1;
5558
lapack_int ncols_u = LAPACKE_lsame( jobu, 'a' ) ? m :
56-
(LAPACKE_lsame( jobu, 's' ) ? MIN(m,n) : 1);
57-
lapack_int nrows_v = LAPACKE_lsame( jobv, 'a' ) ? n : 1;
59+
( (LAPACKE_lsame( jobu, 's' ) ||
60+
LAPACKE_lsame( jobu, 'u' ) ) ? MIN(m,n) : 1);
61+
lapack_int nrows_v = ( LAPACKE_lsame( jobv, 'a' ) ||
62+
LAPACKE_lsame( jobv, 'v' ) ||
63+
LAPACKE_lsame( jobv, 'r' )) ? n : 1;
5864
lapack_int lda_t = MAX(1,m);
5965
lapack_int ldu_t = MAX(1,nrows_u);
6066
lapack_int ldv_t = MAX(1,nrows_v);
@@ -90,15 +96,19 @@ lapack_int LAPACKE_sgesvdq_work( int matrix_layout, char joba, char jobp,
9096
info = LAPACK_TRANSPOSE_MEMORY_ERROR;
9197
goto exit_level_0;
9298
}
93-
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ) {
99+
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ||
100+
LAPACKE_lsame( jobu, 'u' ) ||
101+
LAPACKE_lsame( jobu, 'r' ) ||
102+
LAPACKE_lsame( jobu, 'f' ) ) {
94103
u_t = (float*)
95104
LAPACKE_malloc( sizeof(float) * ldu_t * MAX(1,ncols_u) );
96105
if( u_t == NULL ) {
97106
info = LAPACK_TRANSPOSE_MEMORY_ERROR;
98107
goto exit_level_1;
99108
}
100109
}
101-
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 's' ) ) {
110+
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ||
111+
LAPACKE_lsame( jobv, 'r' ) ) {
102112
v_t = (float*)
103113
LAPACKE_malloc( sizeof(float) * ldv_t * MAX(1,n) );
104114
if( v_t == NULL ) {
@@ -117,20 +127,28 @@ lapack_int LAPACKE_sgesvdq_work( int matrix_layout, char joba, char jobp,
117127
}
118128
/* Transpose output matrices */
119129
LAPACKE_sge_trans( LAPACK_COL_MAJOR, m, n, a_t, lda_t, a, lda );
120-
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ) {
130+
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ||
131+
LAPACKE_lsame( jobu, 'u' ) ||
132+
LAPACKE_lsame( jobu, 'r' ) ||
133+
LAPACKE_lsame( jobu, 'f' ) ) {
121134
LAPACKE_sge_trans( LAPACK_COL_MAJOR, nrows_u, ncols_u, u_t, ldu_t,
122135
u, ldu );
123136
}
124-
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 's' ) ) {
137+
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ||
138+
LAPACKE_lsame( jobv, 'r' )) {
125139
LAPACKE_sge_trans( LAPACK_COL_MAJOR, nrows_v, n, v_t, ldv_t, v,
126140
ldv );
127141
}
128142
/* Release memory and exit */
129-
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 's' ) ) {
143+
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ||
144+
LAPACKE_lsame( jobv, 'r' ) ) {
130145
LAPACKE_free( v_t );
131146
}
132147
exit_level_2:
133-
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ) {
148+
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ||
149+
LAPACKE_lsame( jobu, 'u' ) ||
150+
LAPACKE_lsame( jobu, 'r' ) ||
151+
LAPACKE_lsame( jobu, 'f' ) ) {
134152
LAPACKE_free( u_t );
135153
}
136154
exit_level_1:

lapack-netlib/LAPACKE/src/lapacke_zgesvdq_work.c

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,16 @@ lapack_int LAPACKE_zgesvdq_work( int matrix_layout, char joba, char jobp,
5151
}
5252
} else if( matrix_layout == LAPACK_ROW_MAJOR ) {
5353
lapack_int nrows_u = ( LAPACKE_lsame( jobu, 'a' ) ||
54+
LAPACKE_lsame( jobu, 'u' ) ||
55+
LAPACKE_lsame( jobu, 'r' ) ||
56+
LAPACKE_lsame( jobu, 'f' ) ||
5457
LAPACKE_lsame( jobu, 's' ) ) ? m : 1;
5558
lapack_int ncols_u = LAPACKE_lsame( jobu, 'a' ) ? m :
56-
(LAPACKE_lsame( jobu, 's' ) ? MIN(m,n) : 1);
57-
lapack_int nrows_v = LAPACKE_lsame( jobv, 'a' ) ? n :
58-
( LAPACKE_lsame( jobv, 's' ) ? MIN(m,n) : 1);
59+
( (LAPACKE_lsame( jobu, 's' ) ||
60+
LAPACKE_lsame( jobu, 'u' ) ) ? MIN(m,n) : 1);
61+
lapack_int nrows_v = ( LAPACKE_lsame( jobv, 'a' ) ||
62+
LAPACKE_lsame( jobv, 'v' ) ||
63+
LAPACKE_lsame( jobv, 'r' )) ? n : 1;
5964
lapack_int lda_t = MAX(1,m);
6065
lapack_int ldu_t = MAX(1,nrows_u);
6166
lapack_int ldv_t = MAX(1,nrows_v);
@@ -91,15 +96,19 @@ lapack_int LAPACKE_zgesvdq_work( int matrix_layout, char joba, char jobp,
9196
info = LAPACK_TRANSPOSE_MEMORY_ERROR;
9297
goto exit_level_0;
9398
}
94-
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ) {
99+
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ||
100+
LAPACKE_lsame( jobu, 'u' ) ||
101+
LAPACKE_lsame( jobu, 'r' ) ||
102+
LAPACKE_lsame( jobu, 'f' ) ) {
95103
u_t = (lapack_complex_double*)
96104
LAPACKE_malloc( sizeof(lapack_complex_double) * ldu_t * MAX(1,ncols_u) );
97105
if( u_t == NULL ) {
98106
info = LAPACK_TRANSPOSE_MEMORY_ERROR;
99107
goto exit_level_1;
100108
}
101109
}
102-
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 's' ) ) {
110+
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ||
111+
LAPACKE_lsame( jobv, 'r' ) ) {
103112
v_t = (lapack_complex_double*)
104113
LAPACKE_malloc( sizeof(lapack_complex_double) * ldv_t * MAX(1,n) );
105114
if( v_t == NULL ) {
@@ -118,20 +127,28 @@ lapack_int LAPACKE_zgesvdq_work( int matrix_layout, char joba, char jobp,
118127
}
119128
/* Transpose output matrices */
120129
LAPACKE_zge_trans( LAPACK_COL_MAJOR, m, n, a_t, lda_t, a, lda );
121-
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ) {
130+
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ||
131+
LAPACKE_lsame( jobu, 'u' ) ||
132+
LAPACKE_lsame( jobu, 'r' ) ||
133+
LAPACKE_lsame( jobu, 'f' ) ) {
122134
LAPACKE_zge_trans( LAPACK_COL_MAJOR, nrows_u, ncols_u, u_t, ldu_t,
123135
u, ldu );
124136
}
125-
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 's' ) ) {
137+
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ||
138+
LAPACKE_lsame( jobv, 'r' )) {
126139
LAPACKE_zge_trans( LAPACK_COL_MAJOR, nrows_v, n, v_t, ldv_t, v,
127140
ldv );
128141
}
129142
/* Release memory and exit */
130-
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 's' ) ) {
143+
if( LAPACKE_lsame( jobv, 'a' ) || LAPACKE_lsame( jobv, 'v' ) ||
144+
LAPACKE_lsame( jobv, 'r' ) ) {
131145
LAPACKE_free( v_t );
132146
}
133147
exit_level_2:
134-
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ) {
148+
if( LAPACKE_lsame( jobu, 'a' ) || LAPACKE_lsame( jobu, 's' ) ||
149+
LAPACKE_lsame( jobu, 'u' ) ||
150+
LAPACKE_lsame( jobu, 'r' ) ||
151+
LAPACKE_lsame( jobu, 'f' ) ) {
135152
LAPACKE_free( u_t );
136153
}
137154
exit_level_1:

0 commit comments

Comments
 (0)