33 #ifndef _LAPACKE_UTILS_H_
34 #define _LAPACKE_UTILS_H_
43 #define ABS(x) (((x) < 0) ? -(x) : (x))
46 #define MAX(x,y) (((x) > (y)) ? (x) : (y))
49 #define MIN(x,y) (((x) < (y)) ? (x) : (y))
52 #define MAX3(x,y,z) (((x) > MAX(y,z)) ? (x) : MAX(y,z))
55 #define MIN3(x,y,z) (((x) < MIN(y,z)) ? (x) : MIN(y,z))
58 #define IS_S_NONZERO(x) ( (x) < 0 || (x) > 0 )
59 #define IS_D_NONZERO(x) ( (x) < 0 || (x) > 0 )
60 #define IS_C_NONZERO(x) ( IS_S_NONZERO(*((float*)&x)) || \
61 IS_S_NONZERO(*(((float*)&x)+1)) )
62 #define IS_Z_NONZERO(x) ( IS_D_NONZERO(*((double*)&x)) || \
63 IS_D_NONZERO(*(((double*)&x)+1)) )
66 void LAPACKE_xerbla(
const char *name, lapack_int info );
69 lapack_logical LAPACKE_lsame(
char ca,
char cb );
72 void LAPACKE_cgb_trans(
int matrix_layout, lapack_int m, lapack_int n,
73 lapack_int kl, lapack_int ku,
74 const lapack_complex_float *in, lapack_int ldin,
75 lapack_complex_float *out, lapack_int ldout );
76 void LAPACKE_cge_trans(
int matrix_layout, lapack_int m, lapack_int n,
77 const lapack_complex_float* in, lapack_int ldin,
78 lapack_complex_float* out, lapack_int ldout );
79 void LAPACKE_cgg_trans(
int matrix_layout, lapack_int m, lapack_int n,
80 const lapack_complex_float* in, lapack_int ldin,
81 lapack_complex_float* out, lapack_int ldout );
82 void LAPACKE_chb_trans(
int matrix_layout,
char uplo, lapack_int n,
84 const lapack_complex_float *in, lapack_int ldin,
85 lapack_complex_float *out, lapack_int ldout );
86 void LAPACKE_che_trans(
int matrix_layout,
char uplo, lapack_int n,
87 const lapack_complex_float *in, lapack_int ldin,
88 lapack_complex_float *out, lapack_int ldout );
89 void LAPACKE_chp_trans(
int matrix_layout,
char uplo, lapack_int n,
90 const lapack_complex_float *in,
91 lapack_complex_float *out );
92 void LAPACKE_chs_trans(
int matrix_layout, lapack_int n,
93 const lapack_complex_float *in, lapack_int ldin,
94 lapack_complex_float *out, lapack_int ldout );
95 void LAPACKE_cpb_trans(
int matrix_layout,
char uplo, lapack_int n,
97 const lapack_complex_float *in, lapack_int ldin,
98 lapack_complex_float *out, lapack_int ldout );
99 void LAPACKE_cpf_trans(
int matrix_layout,
char transr,
char uplo,
100 lapack_int n,
const lapack_complex_float *in,
101 lapack_complex_float *out );
102 void LAPACKE_cpo_trans(
int matrix_layout,
char uplo, lapack_int n,
103 const lapack_complex_float *in, lapack_int ldin,
104 lapack_complex_float *out, lapack_int ldout );
105 void LAPACKE_cpp_trans(
int matrix_layout,
char uplo, lapack_int n,
106 const lapack_complex_float *in,
107 lapack_complex_float *out );
108 void LAPACKE_csp_trans(
int matrix_layout,
char uplo, lapack_int n,
109 const lapack_complex_float *in,
110 lapack_complex_float *out );
111 void LAPACKE_csy_trans(
int matrix_layout,
char uplo, lapack_int n,
112 const lapack_complex_float *in, lapack_int ldin,
113 lapack_complex_float *out, lapack_int ldout );
114 void LAPACKE_ctb_trans(
int matrix_layout,
char uplo,
char diag,
115 lapack_int n, lapack_int kd,
116 const lapack_complex_float *in, lapack_int ldin,
117 lapack_complex_float *out, lapack_int ldout );
118 void LAPACKE_ctf_trans(
int matrix_layout,
char transr,
char uplo,
char diag,
119 lapack_int n,
const lapack_complex_float *in,
120 lapack_complex_float *out );
121 void LAPACKE_ctp_trans(
int matrix_layout,
char uplo,
char diag,
122 lapack_int n,
const lapack_complex_float *in,
123 lapack_complex_float *out );
124 void LAPACKE_ctr_trans(
int matrix_layout,
char uplo,
char diag, lapack_int n,
125 const lapack_complex_float *in, lapack_int ldin,
126 lapack_complex_float *out, lapack_int ldout );
128 void LAPACKE_dgb_trans(
int matrix_layout, lapack_int m, lapack_int n,
129 lapack_int kl, lapack_int ku,
130 const double *in, lapack_int ldin,
131 double *out, lapack_int ldout );
132 void LAPACKE_dge_trans(
int matrix_layout, lapack_int m, lapack_int n,
133 const double* in, lapack_int ldin,
134 double* out, lapack_int ldout );
135 void LAPACKE_dgg_trans(
int matrix_layout, lapack_int m, lapack_int n,
136 const double* in, lapack_int ldin,
137 double* out, lapack_int ldout );
138 void LAPACKE_dhs_trans(
int matrix_layout, lapack_int n,
139 const double *in, lapack_int ldin,
140 double *out, lapack_int ldout );
141 void LAPACKE_dpb_trans(
int matrix_layout,
char uplo, lapack_int n,
143 const double *in, lapack_int ldin,
144 double *out, lapack_int ldout );
145 void LAPACKE_dpf_trans(
int matrix_layout,
char transr,
char uplo,
146 lapack_int n,
const double *in,
148 void LAPACKE_dpo_trans(
int matrix_layout,
char uplo, lapack_int n,
149 const double *in, lapack_int ldin,
150 double *out, lapack_int ldout );
151 void LAPACKE_dpp_trans(
int matrix_layout,
char uplo, lapack_int n,
154 void LAPACKE_dsb_trans(
int matrix_layout,
char uplo, lapack_int n,
156 const double *in, lapack_int ldin,
157 double *out, lapack_int ldout );
158 void LAPACKE_dsp_trans(
int matrix_layout,
char uplo, lapack_int n,
161 void LAPACKE_dsy_trans(
int matrix_layout,
char uplo, lapack_int n,
162 const double *in, lapack_int ldin,
163 double *out, lapack_int ldout );
164 void LAPACKE_dtb_trans(
int matrix_layout,
char uplo,
char diag,
165 lapack_int n, lapack_int kd,
166 const double *in, lapack_int ldin,
167 double *out, lapack_int ldout );
168 void LAPACKE_dtf_trans(
int matrix_layout,
char transr,
char uplo,
char diag,
169 lapack_int n,
const double *in,
171 void LAPACKE_dtp_trans(
int matrix_layout,
char uplo,
char diag,
172 lapack_int n,
const double *in,
174 void LAPACKE_dtr_trans(
int matrix_layout,
char uplo,
char diag, lapack_int n,
175 const double *in, lapack_int ldin,
176 double *out, lapack_int ldout );
178 void LAPACKE_sgb_trans(
int matrix_layout, lapack_int m, lapack_int n,
179 lapack_int kl, lapack_int ku,
180 const float *in, lapack_int ldin,
181 float *out, lapack_int ldout );
182 void LAPACKE_sge_trans(
int matrix_layout, lapack_int m, lapack_int n,
183 const float* in, lapack_int ldin,
184 float* out, lapack_int ldout );
185 void LAPACKE_sgg_trans(
int matrix_layout, lapack_int m, lapack_int n,
186 const float* in, lapack_int ldin,
187 float* out, lapack_int ldout );
188 void LAPACKE_shs_trans(
int matrix_layout, lapack_int n,
189 const float *in, lapack_int ldin,
190 float *out, lapack_int ldout );
191 void LAPACKE_spb_trans(
int matrix_layout,
char uplo, lapack_int n,
193 const float *in, lapack_int ldin,
194 float *out, lapack_int ldout );
195 void LAPACKE_spf_trans(
int matrix_layout,
char transr,
char uplo,
196 lapack_int n,
const float *in,
198 void LAPACKE_spo_trans(
int matrix_layout,
char uplo, lapack_int n,
199 const float *in, lapack_int ldin,
200 float *out, lapack_int ldout );
201 void LAPACKE_spp_trans(
int matrix_layout,
char uplo, lapack_int n,
204 void LAPACKE_ssb_trans(
int matrix_layout,
char uplo, lapack_int n,
206 const float *in, lapack_int ldin,
207 float *out, lapack_int ldout );
208 void LAPACKE_ssp_trans(
int matrix_layout,
char uplo, lapack_int n,
211 void LAPACKE_ssy_trans(
int matrix_layout,
char uplo, lapack_int n,
212 const float *in, lapack_int ldin,
213 float *out, lapack_int ldout );
214 void LAPACKE_stb_trans(
int matrix_layout,
char uplo,
char diag,
215 lapack_int n, lapack_int kd,
216 const float *in, lapack_int ldin,
217 float *out, lapack_int ldout );
218 void LAPACKE_stf_trans(
int matrix_layout,
char transr,
char uplo,
char diag,
219 lapack_int n,
const float *in,
221 void LAPACKE_stp_trans(
int matrix_layout,
char uplo,
char diag,
222 lapack_int n,
const float *in,
224 void LAPACKE_str_trans(
int matrix_layout,
char uplo,
char diag, lapack_int n,
225 const float *in, lapack_int ldin,
226 float *out, lapack_int ldout );
228 void LAPACKE_zgb_trans(
int matrix_layout, lapack_int m, lapack_int n,
229 lapack_int kl, lapack_int ku,
230 const lapack_complex_double *in, lapack_int ldin,
231 lapack_complex_double *out, lapack_int ldout );
232 void LAPACKE_zge_trans(
int matrix_layout, lapack_int m, lapack_int n,
233 const lapack_complex_double* in, lapack_int ldin,
234 lapack_complex_double* out, lapack_int ldout );
235 void LAPACKE_zgg_trans(
int matrix_layout, lapack_int m, lapack_int n,
236 const lapack_complex_double* in, lapack_int ldin,
237 lapack_complex_double* out, lapack_int ldout );
238 void LAPACKE_zhb_trans(
int matrix_layout,
char uplo, lapack_int n,
240 const lapack_complex_double *in, lapack_int ldin,
241 lapack_complex_double *out, lapack_int ldout );
242 void LAPACKE_zhe_trans(
int matrix_layout,
char uplo, lapack_int n,
243 const lapack_complex_double *in, lapack_int ldin,
244 lapack_complex_double *out, lapack_int ldout );
245 void LAPACKE_zhp_trans(
int matrix_layout,
char uplo, lapack_int n,
246 const lapack_complex_double *in,
247 lapack_complex_double *out );
248 void LAPACKE_zhs_trans(
int matrix_layout, lapack_int n,
249 const lapack_complex_double *in, lapack_int ldin,
250 lapack_complex_double *out, lapack_int ldout );
251 void LAPACKE_zpb_trans(
int matrix_layout,
char uplo, lapack_int n,
253 const lapack_complex_double *in, lapack_int ldin,
254 lapack_complex_double *out, lapack_int ldout );
255 void LAPACKE_zpf_trans(
int matrix_layout,
char transr,
char uplo,
256 lapack_int n,
const lapack_complex_double *in,
257 lapack_complex_double *out );
258 void LAPACKE_zpo_trans(
int matrix_layout,
char uplo, lapack_int n,
259 const lapack_complex_double *in, lapack_int ldin,
260 lapack_complex_double *out, lapack_int ldout );
261 void LAPACKE_zpp_trans(
int matrix_layout,
char uplo, lapack_int n,
262 const lapack_complex_double *in,
263 lapack_complex_double *out );
264 void LAPACKE_zsp_trans(
int matrix_layout,
char uplo, lapack_int n,
265 const lapack_complex_double *in,
266 lapack_complex_double *out );
267 void LAPACKE_zsy_trans(
int matrix_layout,
char uplo, lapack_int n,
268 const lapack_complex_double *in, lapack_int ldin,
269 lapack_complex_double *out, lapack_int ldout );
270 void LAPACKE_ztb_trans(
int matrix_layout,
char uplo,
char diag,
271 lapack_int n, lapack_int kd,
272 const lapack_complex_double *in, lapack_int ldin,
273 lapack_complex_double *out, lapack_int ldout );
274 void LAPACKE_ztf_trans(
int matrix_layout,
char transr,
char uplo,
char diag,
275 lapack_int n,
const lapack_complex_double *in,
276 lapack_complex_double *out );
277 void LAPACKE_ztp_trans(
int matrix_layout,
char uplo,
char diag,
278 lapack_int n,
const lapack_complex_double *in,
279 lapack_complex_double *out );
280 void LAPACKE_ztr_trans(
int matrix_layout,
char uplo,
char diag, lapack_int n,
281 const lapack_complex_double *in, lapack_int ldin,
282 lapack_complex_double *out, lapack_int ldout );
285 #define LAPACK_SISNAN( x ) ( x != x )
286 #define LAPACK_DISNAN( x ) ( x != x )
287 #define LAPACK_CISNAN( x ) ( LAPACK_SISNAN(*((float*) &x)) || \
288 LAPACK_SISNAN(*(((float*) &x)+1)) )
289 #define LAPACK_ZISNAN( x ) ( LAPACK_DISNAN(*((double*)&x)) || \
290 LAPACK_DISNAN(*(((double*)&x)+1)) )
293 lapack_logical LAPACKE_c_nancheck( lapack_int n,
294 const lapack_complex_float *x,
296 lapack_logical LAPACKE_d_nancheck( lapack_int n,
299 lapack_logical LAPACKE_s_nancheck( lapack_int n,
302 lapack_logical LAPACKE_z_nancheck( lapack_int n,
303 const lapack_complex_double *x,
306 lapack_logical LAPACKE_cgb_nancheck(
int matrix_layout, lapack_int m,
307 lapack_int n, lapack_int kl,
309 const lapack_complex_float *ab,
311 lapack_logical LAPACKE_cge_nancheck(
int matrix_layout, lapack_int m,
313 const lapack_complex_float *a,
315 lapack_logical LAPACKE_cgg_nancheck(
int matrix_layout, lapack_int m,
317 const lapack_complex_float *a,
319 lapack_logical LAPACKE_cgt_nancheck( lapack_int n,
320 const lapack_complex_float *dl,
321 const lapack_complex_float *d,
322 const lapack_complex_float *du );
323 lapack_logical LAPACKE_chb_nancheck(
int matrix_layout,
char uplo,
324 lapack_int n, lapack_int kd,
325 const lapack_complex_float* ab,
327 lapack_logical LAPACKE_che_nancheck(
int matrix_layout,
char uplo,
329 const lapack_complex_float *a,
331 lapack_logical LAPACKE_chp_nancheck( lapack_int n,
332 const lapack_complex_float *ap );
333 lapack_logical LAPACKE_chs_nancheck(
int matrix_layout, lapack_int n,
334 const lapack_complex_float *a,
336 lapack_logical LAPACKE_cpb_nancheck(
int matrix_layout,
char uplo,
337 lapack_int n, lapack_int kd,
338 const lapack_complex_float* ab,
340 lapack_logical LAPACKE_cpf_nancheck( lapack_int n,
341 const lapack_complex_float *a );
342 lapack_logical LAPACKE_cpo_nancheck(
int matrix_layout,
char uplo,
344 const lapack_complex_float *a,
346 lapack_logical LAPACKE_cpp_nancheck( lapack_int n,
347 const lapack_complex_float *ap );
348 lapack_logical LAPACKE_cpt_nancheck( lapack_int n,
350 const lapack_complex_float *e );
351 lapack_logical LAPACKE_csp_nancheck( lapack_int n,
352 const lapack_complex_float *ap );
353 lapack_logical LAPACKE_cst_nancheck( lapack_int n,
354 const lapack_complex_float *d,
355 const lapack_complex_float *e );
356 lapack_logical LAPACKE_csy_nancheck(
int matrix_layout,
char uplo,
358 const lapack_complex_float *a,
360 lapack_logical LAPACKE_ctb_nancheck(
int matrix_layout,
char uplo,
char diag,
361 lapack_int n, lapack_int kd,
362 const lapack_complex_float* ab,
364 lapack_logical LAPACKE_ctf_nancheck(
int matrix_layout,
char transr,
365 char uplo,
char diag,
367 const lapack_complex_float *a );
368 lapack_logical LAPACKE_ctp_nancheck(
int matrix_layout,
char uplo,
char diag,
370 const lapack_complex_float *ap );
371 lapack_logical LAPACKE_ctr_nancheck(
int matrix_layout,
char uplo,
char diag,
373 const lapack_complex_float *a,
376 lapack_logical LAPACKE_dgb_nancheck(
int matrix_layout, lapack_int m,
377 lapack_int n, lapack_int kl,
381 lapack_logical LAPACKE_dge_nancheck(
int matrix_layout, lapack_int m,
385 lapack_logical LAPACKE_dgg_nancheck(
int matrix_layout, lapack_int m,
389 lapack_logical LAPACKE_dgt_nancheck( lapack_int n,
393 lapack_logical LAPACKE_dhs_nancheck(
int matrix_layout, lapack_int n,
396 lapack_logical LAPACKE_dpb_nancheck(
int matrix_layout,
char uplo,
397 lapack_int n, lapack_int kd,
400 lapack_logical LAPACKE_dpf_nancheck( lapack_int n,
402 lapack_logical LAPACKE_dpo_nancheck(
int matrix_layout,
char uplo,
406 lapack_logical LAPACKE_dpp_nancheck( lapack_int n,
408 lapack_logical LAPACKE_dpt_nancheck( lapack_int n,
411 lapack_logical LAPACKE_dsb_nancheck(
int matrix_layout,
char uplo,
412 lapack_int n, lapack_int kd,
415 lapack_logical LAPACKE_dsp_nancheck( lapack_int n,
417 lapack_logical LAPACKE_dst_nancheck( lapack_int n,
420 lapack_logical LAPACKE_dsy_nancheck(
int matrix_layout,
char uplo,
424 lapack_logical LAPACKE_dtb_nancheck(
int matrix_layout,
char uplo,
char diag,
425 lapack_int n, lapack_int kd,
428 lapack_logical LAPACKE_dtf_nancheck(
int matrix_layout,
char transr,
429 char uplo,
char diag,
432 lapack_logical LAPACKE_dtp_nancheck(
int matrix_layout,
char uplo,
char diag,
435 lapack_logical LAPACKE_dtr_nancheck(
int matrix_layout,
char uplo,
char diag,
440 lapack_logical LAPACKE_sgb_nancheck(
int matrix_layout, lapack_int m,
441 lapack_int n, lapack_int kl,
445 lapack_logical LAPACKE_sge_nancheck(
int matrix_layout, lapack_int m,
449 lapack_logical LAPACKE_sgg_nancheck(
int matrix_layout, lapack_int m,
453 lapack_logical LAPACKE_sgt_nancheck( lapack_int n,
457 lapack_logical LAPACKE_shs_nancheck(
int matrix_layout, lapack_int n,
460 lapack_logical LAPACKE_spb_nancheck(
int matrix_layout,
char uplo,
461 lapack_int n, lapack_int kd,
464 lapack_logical LAPACKE_spf_nancheck( lapack_int n,
466 lapack_logical LAPACKE_spo_nancheck(
int matrix_layout,
char uplo,
470 lapack_logical LAPACKE_spp_nancheck( lapack_int n,
472 lapack_logical LAPACKE_spt_nancheck( lapack_int n,
475 lapack_logical LAPACKE_ssb_nancheck(
int matrix_layout,
char uplo,
476 lapack_int n, lapack_int kd,
479 lapack_logical LAPACKE_ssp_nancheck( lapack_int n,
481 lapack_logical LAPACKE_sst_nancheck( lapack_int n,
484 lapack_logical LAPACKE_ssy_nancheck(
int matrix_layout,
char uplo,
488 lapack_logical LAPACKE_stb_nancheck(
int matrix_layout,
char uplo,
char diag,
489 lapack_int n, lapack_int kd,
492 lapack_logical LAPACKE_stf_nancheck(
int matrix_layout,
char transr,
493 char uplo,
char diag,
496 lapack_logical LAPACKE_stp_nancheck(
int matrix_layout,
char uplo,
char diag,
499 lapack_logical LAPACKE_str_nancheck(
int matrix_layout,
char uplo,
char diag,
504 lapack_logical LAPACKE_zgb_nancheck(
int matrix_layout, lapack_int m,
505 lapack_int n, lapack_int kl,
507 const lapack_complex_double *ab,
509 lapack_logical LAPACKE_zge_nancheck(
int matrix_layout, lapack_int m,
511 const lapack_complex_double *a,
513 lapack_logical LAPACKE_zgg_nancheck(
int matrix_layout, lapack_int m,
515 const lapack_complex_double *a,
517 lapack_logical LAPACKE_zgt_nancheck( lapack_int n,
518 const lapack_complex_double *dl,
519 const lapack_complex_double *d,
520 const lapack_complex_double *du );
521 lapack_logical LAPACKE_zhb_nancheck(
int matrix_layout,
char uplo,
522 lapack_int n, lapack_int kd,
523 const lapack_complex_double* ab,
525 lapack_logical LAPACKE_zhe_nancheck(
int matrix_layout,
char uplo,
527 const lapack_complex_double *a,
529 lapack_logical LAPACKE_zhp_nancheck( lapack_int n,
530 const lapack_complex_double *ap );
531 lapack_logical LAPACKE_zhs_nancheck(
int matrix_layout, lapack_int n,
532 const lapack_complex_double *a,
534 lapack_logical LAPACKE_zpb_nancheck(
int matrix_layout,
char uplo,
535 lapack_int n, lapack_int kd,
536 const lapack_complex_double* ab,
538 lapack_logical LAPACKE_zpf_nancheck( lapack_int n,
539 const lapack_complex_double *a );
540 lapack_logical LAPACKE_zpo_nancheck(
int matrix_layout,
char uplo,
542 const lapack_complex_double *a,
544 lapack_logical LAPACKE_zpp_nancheck( lapack_int n,
545 const lapack_complex_double *ap );
546 lapack_logical LAPACKE_zpt_nancheck( lapack_int n,
548 const lapack_complex_double *e );
549 lapack_logical LAPACKE_zsp_nancheck( lapack_int n,
550 const lapack_complex_double *ap );
551 lapack_logical LAPACKE_zst_nancheck( lapack_int n,
552 const lapack_complex_double *d,
553 const lapack_complex_double *e );
554 lapack_logical LAPACKE_zsy_nancheck(
int matrix_layout,
char uplo,
556 const lapack_complex_double *a,
558 lapack_logical LAPACKE_ztb_nancheck(
int matrix_layout,
char uplo,
char diag,
559 lapack_int n, lapack_int kd,
560 const lapack_complex_double* ab,
562 lapack_logical LAPACKE_ztf_nancheck(
int matrix_layout,
char transr,
563 char uplo,
char diag,
565 const lapack_complex_double *a );
566 lapack_logical LAPACKE_ztp_nancheck(
int matrix_layout,
char uplo,
char diag,
568 const lapack_complex_double *ap );
569 lapack_logical LAPACKE_ztr_nancheck(
int matrix_layout,
char uplo,
char diag,
571 const lapack_complex_double *a,