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 )
71 __attribute__((
const))
76 void LAPACKE_cgb_trans(
int matrix_layout, lapack_int m, lapack_int n,
77 lapack_int kl, lapack_int ku,
78 const lapack_complex_float *in, lapack_int ldin,
79 lapack_complex_float *out, lapack_int ldout );
80 void LAPACKE_cge_trans(
int matrix_layout, lapack_int m, lapack_int n,
81 const lapack_complex_float* in, lapack_int ldin,
82 lapack_complex_float* out, lapack_int ldout );
83 void LAPACKE_cgg_trans(
int matrix_layout, lapack_int m, lapack_int n,
84 const lapack_complex_float* in, lapack_int ldin,
85 lapack_complex_float* out, lapack_int ldout );
86 void LAPACKE_chb_trans(
int matrix_layout,
char uplo, lapack_int n,
88 const lapack_complex_float *in, lapack_int ldin,
89 lapack_complex_float *out, lapack_int ldout );
90 void LAPACKE_che_trans(
int matrix_layout,
char uplo, lapack_int n,
91 const lapack_complex_float *in, lapack_int ldin,
92 lapack_complex_float *out, lapack_int ldout );
93 void LAPACKE_chp_trans(
int matrix_layout,
char uplo, lapack_int n,
94 const lapack_complex_float *in,
95 lapack_complex_float *out );
96 void LAPACKE_chs_trans(
int matrix_layout, lapack_int n,
97 const lapack_complex_float *in, lapack_int ldin,
98 lapack_complex_float *out, lapack_int ldout );
99 void LAPACKE_cpb_trans(
int matrix_layout,
char uplo, lapack_int n,
101 const lapack_complex_float *in, lapack_int ldin,
102 lapack_complex_float *out, lapack_int ldout );
103 void LAPACKE_cpf_trans(
int matrix_layout,
char transr,
char uplo,
104 lapack_int n,
const lapack_complex_float *in,
105 lapack_complex_float *out );
106 void LAPACKE_cpo_trans(
int matrix_layout,
char uplo, lapack_int n,
107 const lapack_complex_float *in, lapack_int ldin,
108 lapack_complex_float *out, lapack_int ldout );
109 void LAPACKE_cpp_trans(
int matrix_layout,
char uplo, lapack_int n,
110 const lapack_complex_float *in,
111 lapack_complex_float *out );
112 void LAPACKE_csp_trans(
int matrix_layout,
char uplo, lapack_int n,
113 const lapack_complex_float *in,
114 lapack_complex_float *out );
115 void LAPACKE_csy_trans(
int matrix_layout,
char uplo, lapack_int n,
116 const lapack_complex_float *in, lapack_int ldin,
117 lapack_complex_float *out, lapack_int ldout );
118 void LAPACKE_ctb_trans(
int matrix_layout,
char uplo,
char diag,
119 lapack_int n, lapack_int kd,
120 const lapack_complex_float *in, lapack_int ldin,
121 lapack_complex_float *out, lapack_int ldout );
122 void LAPACKE_ctf_trans(
int matrix_layout,
char transr,
char uplo,
char diag,
123 lapack_int n,
const lapack_complex_float *in,
124 lapack_complex_float *out );
125 void LAPACKE_ctp_trans(
int matrix_layout,
char uplo,
char diag,
126 lapack_int n,
const lapack_complex_float *in,
127 lapack_complex_float *out );
128 void LAPACKE_ctr_trans(
int matrix_layout,
char uplo,
char diag, lapack_int n,
129 const lapack_complex_float *in, lapack_int ldin,
130 lapack_complex_float *out, lapack_int ldout );
132 void LAPACKE_dgb_trans(
int matrix_layout, lapack_int m, lapack_int n,
133 lapack_int kl, lapack_int ku,
134 const double *in, lapack_int ldin,
135 double *out, lapack_int ldout );
136 void LAPACKE_dge_trans(
int matrix_layout, lapack_int m, lapack_int n,
137 const double* in, lapack_int ldin,
138 double* out, lapack_int ldout );
139 void LAPACKE_dgg_trans(
int matrix_layout, lapack_int m, lapack_int n,
140 const double* in, lapack_int ldin,
141 double* out, lapack_int ldout );
142 void LAPACKE_dhs_trans(
int matrix_layout, lapack_int n,
143 const double *in, lapack_int ldin,
144 double *out, lapack_int ldout );
145 void LAPACKE_dpb_trans(
int matrix_layout,
char uplo, lapack_int n,
147 const double *in, lapack_int ldin,
148 double *out, lapack_int ldout );
149 void LAPACKE_dpf_trans(
int matrix_layout,
char transr,
char uplo,
150 lapack_int n,
const double *in,
152 void LAPACKE_dpo_trans(
int matrix_layout,
char uplo, lapack_int n,
153 const double *in, lapack_int ldin,
154 double *out, lapack_int ldout );
155 void LAPACKE_dpp_trans(
int matrix_layout,
char uplo, lapack_int n,
158 void LAPACKE_dsb_trans(
int matrix_layout,
char uplo, lapack_int n,
160 const double *in, lapack_int ldin,
161 double *out, lapack_int ldout );
162 void LAPACKE_dsp_trans(
int matrix_layout,
char uplo, lapack_int n,
165 void LAPACKE_dsy_trans(
int matrix_layout,
char uplo, lapack_int n,
166 const double *in, lapack_int ldin,
167 double *out, lapack_int ldout );
168 void LAPACKE_dtb_trans(
int matrix_layout,
char uplo,
char diag,
169 lapack_int n, lapack_int kd,
170 const double *in, lapack_int ldin,
171 double *out, lapack_int ldout );
172 void LAPACKE_dtf_trans(
int matrix_layout,
char transr,
char uplo,
char diag,
173 lapack_int n,
const double *in,
175 void LAPACKE_dtp_trans(
int matrix_layout,
char uplo,
char diag,
176 lapack_int n,
const double *in,
178 void LAPACKE_dtr_trans(
int matrix_layout,
char uplo,
char diag, lapack_int n,
179 const double *in, lapack_int ldin,
180 double *out, lapack_int ldout );
182 void LAPACKE_sgb_trans(
int matrix_layout, lapack_int m, lapack_int n,
183 lapack_int kl, lapack_int ku,
184 const float *in, lapack_int ldin,
185 float *out, lapack_int ldout );
186 void LAPACKE_sge_trans(
int matrix_layout, lapack_int m, lapack_int n,
187 const float* in, lapack_int ldin,
188 float* out, lapack_int ldout );
189 void LAPACKE_sgg_trans(
int matrix_layout, lapack_int m, lapack_int n,
190 const float* in, lapack_int ldin,
191 float* out, lapack_int ldout );
192 void LAPACKE_shs_trans(
int matrix_layout, lapack_int n,
193 const float *in, lapack_int ldin,
194 float *out, lapack_int ldout );
195 void LAPACKE_spb_trans(
int matrix_layout,
char uplo, lapack_int n,
197 const float *in, lapack_int ldin,
198 float *out, lapack_int ldout );
199 void LAPACKE_spf_trans(
int matrix_layout,
char transr,
char uplo,
200 lapack_int n,
const float *in,
202 void LAPACKE_spo_trans(
int matrix_layout,
char uplo, lapack_int n,
203 const float *in, lapack_int ldin,
204 float *out, lapack_int ldout );
205 void LAPACKE_spp_trans(
int matrix_layout,
char uplo, lapack_int n,
208 void LAPACKE_ssb_trans(
int matrix_layout,
char uplo, lapack_int n,
210 const float *in, lapack_int ldin,
211 float *out, lapack_int ldout );
212 void LAPACKE_ssp_trans(
int matrix_layout,
char uplo, lapack_int n,
215 void LAPACKE_ssy_trans(
int matrix_layout,
char uplo, lapack_int n,
216 const float *in, lapack_int ldin,
217 float *out, lapack_int ldout );
218 void LAPACKE_stb_trans(
int matrix_layout,
char uplo,
char diag,
219 lapack_int n, lapack_int kd,
220 const float *in, lapack_int ldin,
221 float *out, lapack_int ldout );
222 void LAPACKE_stf_trans(
int matrix_layout,
char transr,
char uplo,
char diag,
223 lapack_int n,
const float *in,
225 void LAPACKE_stp_trans(
int matrix_layout,
char uplo,
char diag,
226 lapack_int n,
const float *in,
228 void LAPACKE_str_trans(
int matrix_layout,
char uplo,
char diag, lapack_int n,
229 const float *in, lapack_int ldin,
230 float *out, lapack_int ldout );
232 void LAPACKE_zgb_trans(
int matrix_layout, lapack_int m, lapack_int n,
233 lapack_int kl, lapack_int ku,
234 const lapack_complex_double *in, lapack_int ldin,
235 lapack_complex_double *out, lapack_int ldout );
236 void LAPACKE_zge_trans(
int matrix_layout, lapack_int m, lapack_int n,
237 const lapack_complex_double* in, lapack_int ldin,
238 lapack_complex_double* out, lapack_int ldout );
239 void LAPACKE_zgg_trans(
int matrix_layout, lapack_int m, lapack_int n,
240 const lapack_complex_double* in, lapack_int ldin,
241 lapack_complex_double* out, lapack_int ldout );
242 void LAPACKE_zhb_trans(
int matrix_layout,
char uplo, lapack_int n,
244 const lapack_complex_double *in, lapack_int ldin,
245 lapack_complex_double *out, lapack_int ldout );
246 void LAPACKE_zhe_trans(
int matrix_layout,
char uplo, lapack_int n,
247 const lapack_complex_double *in, lapack_int ldin,
248 lapack_complex_double *out, lapack_int ldout );
249 void LAPACKE_zhp_trans(
int matrix_layout,
char uplo, lapack_int n,
250 const lapack_complex_double *in,
251 lapack_complex_double *out );
252 void LAPACKE_zhs_trans(
int matrix_layout, lapack_int n,
253 const lapack_complex_double *in, lapack_int ldin,
254 lapack_complex_double *out, lapack_int ldout );
255 void LAPACKE_zpb_trans(
int matrix_layout,
char uplo, lapack_int n,
257 const lapack_complex_double *in, lapack_int ldin,
258 lapack_complex_double *out, lapack_int ldout );
259 void LAPACKE_zpf_trans(
int matrix_layout,
char transr,
char uplo,
260 lapack_int n,
const lapack_complex_double *in,
261 lapack_complex_double *out );
262 void LAPACKE_zpo_trans(
int matrix_layout,
char uplo, lapack_int n,
263 const lapack_complex_double *in, lapack_int ldin,
264 lapack_complex_double *out, lapack_int ldout );
265 void LAPACKE_zpp_trans(
int matrix_layout,
char uplo, lapack_int n,
266 const lapack_complex_double *in,
267 lapack_complex_double *out );
268 void LAPACKE_zsp_trans(
int matrix_layout,
char uplo, lapack_int n,
269 const lapack_complex_double *in,
270 lapack_complex_double *out );
271 void LAPACKE_zsy_trans(
int matrix_layout,
char uplo, lapack_int n,
272 const lapack_complex_double *in, lapack_int ldin,
273 lapack_complex_double *out, lapack_int ldout );
274 void LAPACKE_ztb_trans(
int matrix_layout,
char uplo,
char diag,
275 lapack_int n, lapack_int kd,
276 const lapack_complex_double *in, lapack_int ldin,
277 lapack_complex_double *out, lapack_int ldout );
278 void LAPACKE_ztf_trans(
int matrix_layout,
char transr,
char uplo,
char diag,
279 lapack_int n,
const lapack_complex_double *in,
280 lapack_complex_double *out );
281 void LAPACKE_ztp_trans(
int matrix_layout,
char uplo,
char diag,
282 lapack_int n,
const lapack_complex_double *in,
283 lapack_complex_double *out );
284 void LAPACKE_ztr_trans(
int matrix_layout,
char uplo,
char diag, lapack_int n,
285 const lapack_complex_double *in, lapack_int ldin,
286 lapack_complex_double *out, lapack_int ldout );
289 #define LAPACK_SISNAN( x ) ( x != x )
290 #define LAPACK_DISNAN( x ) ( x != x )
291 #define LAPACK_CISNAN( x ) ( LAPACK_SISNAN(*((float*) &x)) || \
292 LAPACK_SISNAN(*(((float*) &x)+1)) )
293 #define LAPACK_ZISNAN( x ) ( LAPACK_DISNAN(*((double*)&x)) || \
294 LAPACK_DISNAN(*(((double*)&x)+1)) )
297 lapack_logical LAPACKE_c_nancheck( lapack_int n,
298 const lapack_complex_float *x,
300 lapack_logical LAPACKE_d_nancheck( lapack_int n,
303 lapack_logical LAPACKE_s_nancheck( lapack_int n,
306 lapack_logical LAPACKE_z_nancheck( lapack_int n,
307 const lapack_complex_double *x,
310 lapack_logical LAPACKE_cgb_nancheck(
int matrix_layout, lapack_int m,
311 lapack_int n, lapack_int kl,
313 const lapack_complex_float *ab,
315 lapack_logical LAPACKE_cge_nancheck(
int matrix_layout, lapack_int m,
317 const lapack_complex_float *a,
319 lapack_logical LAPACKE_cgg_nancheck(
int matrix_layout, lapack_int m,
321 const lapack_complex_float *a,
323 lapack_logical LAPACKE_cgt_nancheck( lapack_int n,
324 const lapack_complex_float *dl,
325 const lapack_complex_float *d,
326 const lapack_complex_float *du );
327 lapack_logical LAPACKE_chb_nancheck(
int matrix_layout,
char uplo,
328 lapack_int n, lapack_int kd,
329 const lapack_complex_float* ab,
331 lapack_logical LAPACKE_che_nancheck(
int matrix_layout,
char uplo,
333 const lapack_complex_float *a,
335 lapack_logical LAPACKE_chp_nancheck( lapack_int n,
336 const lapack_complex_float *ap );
337 lapack_logical LAPACKE_chs_nancheck(
int matrix_layout, lapack_int n,
338 const lapack_complex_float *a,
340 lapack_logical LAPACKE_cpb_nancheck(
int matrix_layout,
char uplo,
341 lapack_int n, lapack_int kd,
342 const lapack_complex_float* ab,
344 lapack_logical LAPACKE_cpf_nancheck( lapack_int n,
345 const lapack_complex_float *a );
346 lapack_logical LAPACKE_cpo_nancheck(
int matrix_layout,
char uplo,
348 const lapack_complex_float *a,
350 lapack_logical LAPACKE_cpp_nancheck( lapack_int n,
351 const lapack_complex_float *ap );
352 lapack_logical LAPACKE_cpt_nancheck( lapack_int n,
354 const lapack_complex_float *e );
355 lapack_logical LAPACKE_csp_nancheck( lapack_int n,
356 const lapack_complex_float *ap );
357 lapack_logical LAPACKE_cst_nancheck( lapack_int n,
358 const lapack_complex_float *d,
359 const lapack_complex_float *e );
360 lapack_logical LAPACKE_csy_nancheck(
int matrix_layout,
char uplo,
362 const lapack_complex_float *a,
364 lapack_logical LAPACKE_ctb_nancheck(
int matrix_layout,
char uplo,
char diag,
365 lapack_int n, lapack_int kd,
366 const lapack_complex_float* ab,
368 lapack_logical LAPACKE_ctf_nancheck(
int matrix_layout,
char transr,
369 char uplo,
char diag,
371 const lapack_complex_float *a );
372 lapack_logical LAPACKE_ctp_nancheck(
int matrix_layout,
char uplo,
char diag,
374 const lapack_complex_float *ap );
375 lapack_logical LAPACKE_ctr_nancheck(
int matrix_layout,
char uplo,
char diag,
377 const lapack_complex_float *a,
380 lapack_logical LAPACKE_dgb_nancheck(
int matrix_layout, lapack_int m,
381 lapack_int n, lapack_int kl,
385 lapack_logical LAPACKE_dge_nancheck(
int matrix_layout, lapack_int m,
389 lapack_logical LAPACKE_dgg_nancheck(
int matrix_layout, lapack_int m,
393 lapack_logical LAPACKE_dgt_nancheck( lapack_int n,
397 lapack_logical LAPACKE_dhs_nancheck(
int matrix_layout, lapack_int n,
400 lapack_logical LAPACKE_dpb_nancheck(
int matrix_layout,
char uplo,
401 lapack_int n, lapack_int kd,
404 lapack_logical LAPACKE_dpf_nancheck( lapack_int n,
406 lapack_logical LAPACKE_dpo_nancheck(
int matrix_layout,
char uplo,
410 lapack_logical LAPACKE_dpp_nancheck( lapack_int n,
412 lapack_logical LAPACKE_dpt_nancheck( lapack_int n,
415 lapack_logical LAPACKE_dsb_nancheck(
int matrix_layout,
char uplo,
416 lapack_int n, lapack_int kd,
419 lapack_logical LAPACKE_dsp_nancheck( lapack_int n,
421 lapack_logical LAPACKE_dst_nancheck( lapack_int n,
424 lapack_logical LAPACKE_dsy_nancheck(
int matrix_layout,
char uplo,
428 lapack_logical LAPACKE_dtb_nancheck(
int matrix_layout,
char uplo,
char diag,
429 lapack_int n, lapack_int kd,
432 lapack_logical LAPACKE_dtf_nancheck(
int matrix_layout,
char transr,
433 char uplo,
char diag,
436 lapack_logical LAPACKE_dtp_nancheck(
int matrix_layout,
char uplo,
char diag,
439 lapack_logical LAPACKE_dtr_nancheck(
int matrix_layout,
char uplo,
char diag,
444 lapack_logical LAPACKE_sgb_nancheck(
int matrix_layout, lapack_int m,
445 lapack_int n, lapack_int kl,
449 lapack_logical LAPACKE_sge_nancheck(
int matrix_layout, lapack_int m,
453 lapack_logical LAPACKE_sgg_nancheck(
int matrix_layout, lapack_int m,
457 lapack_logical LAPACKE_sgt_nancheck( lapack_int n,
461 lapack_logical LAPACKE_shs_nancheck(
int matrix_layout, lapack_int n,
464 lapack_logical LAPACKE_spb_nancheck(
int matrix_layout,
char uplo,
465 lapack_int n, lapack_int kd,
468 lapack_logical LAPACKE_spf_nancheck( lapack_int n,
470 lapack_logical LAPACKE_spo_nancheck(
int matrix_layout,
char uplo,
474 lapack_logical LAPACKE_spp_nancheck( lapack_int n,
476 lapack_logical LAPACKE_spt_nancheck( lapack_int n,
479 lapack_logical LAPACKE_ssb_nancheck(
int matrix_layout,
char uplo,
480 lapack_int n, lapack_int kd,
483 lapack_logical LAPACKE_ssp_nancheck( lapack_int n,
485 lapack_logical LAPACKE_sst_nancheck( lapack_int n,
488 lapack_logical LAPACKE_ssy_nancheck(
int matrix_layout,
char uplo,
492 lapack_logical LAPACKE_stb_nancheck(
int matrix_layout,
char uplo,
char diag,
493 lapack_int n, lapack_int kd,
496 lapack_logical LAPACKE_stf_nancheck(
int matrix_layout,
char transr,
497 char uplo,
char diag,
500 lapack_logical LAPACKE_stp_nancheck(
int matrix_layout,
char uplo,
char diag,
503 lapack_logical LAPACKE_str_nancheck(
int matrix_layout,
char uplo,
char diag,
508 lapack_logical LAPACKE_zgb_nancheck(
int matrix_layout, lapack_int m,
509 lapack_int n, lapack_int kl,
511 const lapack_complex_double *ab,
513 lapack_logical LAPACKE_zge_nancheck(
int matrix_layout, lapack_int m,
515 const lapack_complex_double *a,
517 lapack_logical LAPACKE_zgg_nancheck(
int matrix_layout, lapack_int m,
519 const lapack_complex_double *a,
521 lapack_logical LAPACKE_zgt_nancheck( lapack_int n,
522 const lapack_complex_double *dl,
523 const lapack_complex_double *d,
524 const lapack_complex_double *du );
525 lapack_logical LAPACKE_zhb_nancheck(
int matrix_layout,
char uplo,
526 lapack_int n, lapack_int kd,
527 const lapack_complex_double* ab,
529 lapack_logical LAPACKE_zhe_nancheck(
int matrix_layout,
char uplo,
531 const lapack_complex_double *a,
533 lapack_logical LAPACKE_zhp_nancheck( lapack_int n,
534 const lapack_complex_double *ap );
535 lapack_logical LAPACKE_zhs_nancheck(
int matrix_layout, lapack_int n,
536 const lapack_complex_double *a,
538 lapack_logical LAPACKE_zpb_nancheck(
int matrix_layout,
char uplo,
539 lapack_int n, lapack_int kd,
540 const lapack_complex_double* ab,
542 lapack_logical LAPACKE_zpf_nancheck( lapack_int n,
543 const lapack_complex_double *a );
544 lapack_logical LAPACKE_zpo_nancheck(
int matrix_layout,
char uplo,
546 const lapack_complex_double *a,
548 lapack_logical LAPACKE_zpp_nancheck( lapack_int n,
549 const lapack_complex_double *ap );
550 lapack_logical LAPACKE_zpt_nancheck( lapack_int n,
552 const lapack_complex_double *e );
553 lapack_logical LAPACKE_zsp_nancheck( lapack_int n,
554 const lapack_complex_double *ap );
555 lapack_logical LAPACKE_zst_nancheck( lapack_int n,
556 const lapack_complex_double *d,
557 const lapack_complex_double *e );
558 lapack_logical LAPACKE_zsy_nancheck(
int matrix_layout,
char uplo,
560 const lapack_complex_double *a,
562 lapack_logical LAPACKE_ztb_nancheck(
int matrix_layout,
char uplo,
char diag,
563 lapack_int n, lapack_int kd,
564 const lapack_complex_double* ab,
566 lapack_logical LAPACKE_ztf_nancheck(
int matrix_layout,
char transr,
567 char uplo,
char diag,
569 const lapack_complex_double *a );
570 lapack_logical LAPACKE_ztp_nancheck(
int matrix_layout,
char uplo,
char diag,
572 const lapack_complex_double *ap );
573 lapack_logical LAPACKE_ztr_nancheck(
int matrix_layout,
char uplo,
char diag,
575 const lapack_complex_double *a,