1 /*
2 * File taken (with minor modifications) from cblas:
3 * http://www.netlib.org/blas/
4 */
5
6 #ifndef CXXBLAS_DRIVERS_CBLAS_H
7 #define CXXBLAS_DRIVERS_CBLAS_H 1
8
9 #ifndef CBLAS_INT
10 # define CBLAS_INT int
11 #endif // CBLAS_INT
12
13
14 extern "C" {
15
16 enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102};
17 enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112,
18 CblasConjTrans=113, CblasConjNoTrans=114};
19 enum CBLAS_UPLO {CblasUpper=121, CblasLower=122};
20 enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132};
21 enum CBLAS_SIDE {CblasLeft=141, CblasRight=142};
22
23 //-- LEVEL 1 -------------------------------------------------------------------
24
25 // asum
26 float
27 cblas_sasum(CBLAS_INT n, const float *x, CBLAS_INT incX);
28
29 double
30 cblas_dasum (CBLAS_INT n, const double *x, CBLAS_INT incX);
31
32 float
33 cblas_scasum(CBLAS_INT n, const float *x, CBLAS_INT incX);
34
35 double
36 cblas_dzasum(CBLAS_INT n, const double *x, CBLAS_INT incX);
37
38 // axpy
39 void
40 cblas_saxpy(CBLAS_INT n, float alpha,
41 const float *x, CBLAS_INT incX,
42 float *y, CBLAS_INT incY);
43
44 void
45 cblas_daxpy(CBLAS_INT n, double alpha,
46 const double *x, CBLAS_INT incX,
47 double *y, CBLAS_INT incY);
48
49 void
50 cblas_caxpy(CBLAS_INT n, const float *alpha,
51 const float *x, CBLAS_INT incX,
52 float *y, CBLAS_INT incY);
53
54 void
55 cblas_zaxpy(CBLAS_INT n, const double *alpha,
56 const double *x, CBLAS_INT incX,
57 double *y, CBLAS_INT incY);
58
59 // copy
60 void
61 cblas_scopy(CBLAS_INT n,
62 const float *x, CBLAS_INT incX,
63 float *y, CBLAS_INT incY);
64
65 void
66 cblas_dcopy(CBLAS_INT n,
67 const double *x, CBLAS_INT incX,
68 double *y, CBLAS_INT incY);
69
70 void
71 cblas_ccopy(CBLAS_INT n,
72 const float *x, CBLAS_INT incX,
73 float *y, CBLAS_INT incY);
74
75 void
76 cblas_zcopy(CBLAS_INT n,
77 const double *x, CBLAS_INT incX,
78 double *y, CBLAS_INT incY);
79
80 // dot
81 float
82 cblas_sdsdot(CBLAS_INT n, float alpha,
83 const float *x, CBLAS_INT incX,
84 const float *y, CBLAS_INT incY);
85
86 double
87 cblas_dsdot(CBLAS_INT n,
88 const float *x, CBLAS_INT incX,
89 const float *y, CBLAS_INT incY);
90
91 float
92 cblas_sdot(CBLAS_INT n,
93 const float *x, CBLAS_INT incX,
94 const float *y, CBLAS_INT incY);
95
96 double
97 cblas_ddot(CBLAS_INT n,
98 const double *x, CBLAS_INT incX,
99 const double *y, CBLAS_INT incY);
100
101 void
102 cblas_cdotu_sub(CBLAS_INT n,
103 const float *x, CBLAS_INT incX,
104 const float *y, CBLAS_INT incY,
105 float *result);
106
107 void
108 cblas_cdotc_sub(CBLAS_INT n,
109 const float *x, CBLAS_INT incX,
110 const float *y, CBLAS_INT incY,
111 float *result);
112
113 void
114 cblas_zdotu_sub(CBLAS_INT n,
115 const double *x, CBLAS_INT incX,
116 const double *y, CBLAS_INT incY,
117 double *result);
118
119 void
120 cblas_zdotc_sub(CBLAS_INT n,
121 const double *x, CBLAS_INT incX,
122 const double *y, CBLAS_INT incY,
123 double *result);
124
125 // iamax
126 CBLAS_INDEX
127 cblas_isamax(CBLAS_INT n, const float *x, CBLAS_INT incX);
128
129 CBLAS_INDEX
130 cblas_idamax(CBLAS_INT n, const double *x, CBLAS_INT incX);
131
132 CBLAS_INDEX
133 cblas_icamax(CBLAS_INT n, const float *x, CBLAS_INT incX);
134
135 CBLAS_INDEX
136 cblas_izamax(CBLAS_INT n, const double *x, CBLAS_INT incX);
137
138 // nrm2
139 float
140 cblas_snrm2(CBLAS_INT n, const float *X, CBLAS_INT incX);
141
142 double
143 cblas_dnrm2(CBLAS_INT n, const double *X, CBLAS_INT incX);
144
145 float
146 cblas_scnrm2(CBLAS_INT n, const float *X, CBLAS_INT incX);
147
148 double
149 cblas_dznrm2(CBLAS_INT n, const double *X, CBLAS_INT incX);
150
151 // rot
152 void
153 cblas_srot(CBLAS_INT n,
154 float *X, CBLAS_INT incX,
155 float *Y, CBLAS_INT incY,
156 float c, float s);
157
158 void
159 cblas_drot(CBLAS_INT n,
160 double *X, CBLAS_INT incX,
161 double *Y, CBLAS_INT incY,
162 double c, double s);
163
164 void
165 cblas_srotg(float *a, float *b, float *c, float *s);
166
167 void
168 cblas_drotg(double *a, double *b, double *c, double *s);
169
170 // rotm
171 void
172 cblas_srotm(CBLAS_INT n,
173 float *X, CBLAS_INT incX,
174 float *Y, CBLAS_INT incY,
175 const float *P);
176
177 void
178 cblas_drotm(CBLAS_INT n,
179 double *X, CBLAS_INT incX,
180 double *Y, CBLAS_INT incY,
181 const double *P);
182
183 void
184 cblas_srotmg(float *d1, float *d2, float *b1, float *b2, float *P);
185
186 void
187 cblas_drotmg(double *d1, double *d2, double *b1, double *b2, double *P);
188
189 // scal
190 void
191 cblas_sscal(CBLAS_INT n, float alpha, float *x, CBLAS_INT incX);
192
193 void
194 cblas_dscal(CBLAS_INT n, double alpha, double *x, CBLAS_INT incX);
195
196 void
197 cblas_cscal(CBLAS_INT n, float *alpha, float *x, CBLAS_INT incX);
198
199 void
200 cblas_zscal(CBLAS_INT n, double *alpha, double *x, CBLAS_INT incX);
201
202 void
203 cblas_csscal(CBLAS_INT n, float alpha, float *x, CBLAS_INT incX);
204
205 void
206 cblas_zdscal(CBLAS_INT n, double alpha, double *x, CBLAS_INT incX);
207
208 // swap
209 void
210 cblas_sswap(CBLAS_INT n, float *x, CBLAS_INT incX, float *y, CBLAS_INT incY);
211
212 void
213 cblas_dswap(CBLAS_INT n, double *x, CBLAS_INT incX, double *y, CBLAS_INT incY);
214
215 void
216 cblas_cswap(CBLAS_INT n, float *x, CBLAS_INT incX, float *y, CBLAS_INT incY);
217
218 void
219 cblas_zswap(CBLAS_INT n, double *x, CBLAS_INT incX, double *y, CBLAS_INT incY);
220
221 //-- LEVEL 2 -------------------------------------------------------------------
222
223 // gemv
224 void
225 cblas_sgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE trans,
226 CBLAS_INT m, CBLAS_INT n,
227 float alpha,
228 const float *A, CBLAS_INT ldA,
229 const float *x, CBLAS_INT incX,
230 float beta,
231 float *y, CBLAS_INT incY);
232
233 void
234 cblas_dgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE trans,
235 CBLAS_INT m, CBLAS_INT n,
236 double alpha,
237 const double *A, CBLAS_INT ldA,
238 const double *x, CBLAS_INT incX,
239 double beta,
240 double *y, CBLAS_INT incY);
241
242 void
243 cblas_cgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE trans,
244 CBLAS_INT m, CBLAS_INT n,
245 const float *alpha,
246 const float *A, CBLAS_INT ldA,
247 const float *x, CBLAS_INT incX,
248 const float *beta,
249 float *y, CBLAS_INT incY);
250
251 void
252 cblas_zgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE trans,
253 CBLAS_INT m, CBLAS_INT n,
254 const double *alpha,
255 const double *A, CBLAS_INT ldA,
256 const double *x, CBLAS_INT incX,
257 const double *beta,
258 double *y, CBLAS_INT incY);
259
260 // symv
261 void
262 cblas_ssymv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
263 CBLAS_INT n, float alpha,
264 const float *A, CBLAS_INT ldA,
265 const float *x, CBLAS_INT incX,
266 float beta,
267 float *y, CBLAS_INT incY);
268
269 void
270 cblas_dsymv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
271 CBLAS_INT n, double alpha,
272 const double *A, CBLAS_INT ldA,
273 const double *x, CBLAS_INT incX,
274 double beta,
275 double *y, CBLAS_INT incY);
276
277 // hemv
278 void
279 cblas_chemv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
280 CBLAS_INT n, const float *alpha,
281 const float *A, CBLAS_INT ldA,
282 const float *x, CBLAS_INT incX,
283 const float *beta,
284 float *y, CBLAS_INT incY);
285
286 void
287 cblas_zhemv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
288 CBLAS_INT n, const double *alpha,
289 const double *A, CBLAS_INT ldA,
290 const double *x, CBLAS_INT incX,
291 const double *beta,
292 double *y, CBLAS_INT incY);
293
294 // trsv
295 void
296 cblas_strsv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
297 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
298 CBLAS_INT n,
299 const float *A, CBLAS_INT lda,
300 float *X, CBLAS_INT incX);
301
302 void
303 cblas_dtrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
304 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
305 CBLAS_INT n,
306 const double *A, CBLAS_INT lda,
307 double *X, CBLAS_INT incX);
308
309 void
310 cblas_ctrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
311 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
312 CBLAS_INT n,
313 const float *A, CBLAS_INT lda,
314 float *X, CBLAS_INT incX);
315
316 void
317 cblas_ztrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
318 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
319 CBLAS_INT n,
320 const double *A, CBLAS_INT lda,
321 double *X, CBLAS_INT incX);
322
323 // trmv
324 void
325 cblas_strmv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
326 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
327 CBLAS_INT n,
328 const float *A, CBLAS_INT lda,
329 float *x, CBLAS_INT incX);
330
331 void
332 cblas_dtrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
333 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
334 CBLAS_INT n,
335 const double *A, CBLAS_INT lda,
336 double *x, CBLAS_INT incX);
337
338 void
339 cblas_ctrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
340 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
341 CBLAS_INT n,
342 const float *A, CBLAS_INT lda,
343 float *x, CBLAS_INT incX);
344
345 void
346 cblas_ztrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
347 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
348 CBLAS_INT N,
349 const double *A, CBLAS_INT lda,
350 double *x, CBLAS_INT incX);
351
352 // ger
353 void
354 cblas_sger(enum CBLAS_ORDER order,
355 CBLAS_INT m, CBLAS_INT n,
356 float alpha,
357 const float *X, CBLAS_INT incX,
358 const float *Y, CBLAS_INT incY,
359 float *A, CBLAS_INT lda);
360
361 void
362 cblas_dger(enum CBLAS_ORDER order,
363 CBLAS_INT m, CBLAS_INT n,
364 double alpha,
365 const double *X, CBLAS_INT incX,
366 const double *Y, CBLAS_INT incY,
367 double *A, CBLAS_INT lda);
368
369 void
370 cblas_cgeru(enum CBLAS_ORDER order,
371 CBLAS_INT m, CBLAS_INT n,
372 const float *alpha,
373 const float *X, CBLAS_INT incX,
374 const float *Y, CBLAS_INT incY,
375 const float *A, CBLAS_INT lda);
376
377 void
378 cblas_cgerc(enum CBLAS_ORDER order,
379 CBLAS_INT m, CBLAS_INT n,
380 const float *alpha,
381 const float *X, CBLAS_INT incX,
382 const float *Y, CBLAS_INT incY,
383 float *A, CBLAS_INT lda);
384
385 void
386 cblas_zgeru(enum CBLAS_ORDER order,
387 CBLAS_INT m, CBLAS_INT n,
388 const double *alpha,
389 const double *X, CBLAS_INT incX,
390 const double *Y, CBLAS_INT incY,
391 double *A, CBLAS_INT lda);
392
393 void
394 cblas_zgerc(enum CBLAS_ORDER order,
395 CBLAS_INT m, CBLAS_INT n,
396 const double *alpha,
397 const double *X, CBLAS_INT incX,
398 const double *Y, CBLAS_INT incY,
399 double *A, CBLAS_INT lda);
400
401 // syr
402 void
403 cblas_ssyr(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
404 CBLAS_INT n,
405 float alpha,
406 const float *X, CBLAS_INT incX,
407 float *A, CBLAS_INT lda);
408
409 void
410 cblas_dsyr(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
411 CBLAS_INT n,
412 double alpha,
413 const double *X, CBLAS_INT incX,
414 double *A, CBLAS_INT lda);
415
416 // her
417 void
418 cblas_cher(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
419 CBLAS_INT n,
420 float alpha,
421 const float *X, CBLAS_INT incX,
422 float *A, CBLAS_INT lda);
423
424 void
425 cblas_zher(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
426 CBLAS_INT n,
427 double alpha,
428 const double *X, CBLAS_INT incX,
429 double *A, CBLAS_INT lda);
430
431 // syr2
432 void
433 cblas_ssyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
434 CBLAS_INT n,
435 float alpha,
436 const float *X, CBLAS_INT incX,
437 const float *Y, CBLAS_INT incY,
438 float *A, CBLAS_INT lda);
439
440 void
441 cblas_dsyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
442 CBLAS_INT n,
443 double alpha,
444 const double *X, CBLAS_INT incX,
445 const double *Y, CBLAS_INT incY,
446 double *A, CBLAS_INT lda);
447 // her2
448 void
449 cblas_cher2(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
450 CBLAS_INT n,
451 const float *alpha,
452 const float *X, CBLAS_INT incX,
453 const float *Y, CBLAS_INT incY,
454 float *A, CBLAS_INT lda);
455
456 void
457 cblas_zher2(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
458 CBLAS_INT n,
459 const double *alpha,
460 const double *X, CBLAS_INT incX,
461 const double *Y, CBLAS_INT incY,
462 double *A, CBLAS_INT lda);
463
464 //-- LEVEL 3 -------------------------------------------------------------------
465
466 // gemm
467 void
468 cblas_sgemm(enum CBLAS_ORDER order,
469 enum CBLAS_TRANSPOSE transA, enum CBLAS_TRANSPOSE transB,
470 CBLAS_INT m, CBLAS_INT n, CBLAS_INT k,
471 float alpha,
472 const float *A, CBLAS_INT ldA,
473 const float *B, CBLAS_INT ldB,
474 float beta,
475 float *C, CBLAS_INT ldC);
476
477 void
478 cblas_dgemm(enum CBLAS_ORDER order,
479 enum CBLAS_TRANSPOSE transA, enum CBLAS_TRANSPOSE transB,
480 CBLAS_INT m, CBLAS_INT n, CBLAS_INT k,
481 double alpha,
482 const double *A, CBLAS_INT ldA,
483 const double *B, CBLAS_INT ldB,
484 double beta,
485 double *C, CBLAS_INT ldC);
486
487 void
488 cblas_cgemm(enum CBLAS_ORDER order,
489 enum CBLAS_TRANSPOSE transA, enum CBLAS_TRANSPOSE transB,
490 CBLAS_INT m, CBLAS_INT n, CBLAS_INT k,
491 const float *alpha,
492 const float *A, CBLAS_INT ldA,
493 const float *B, CBLAS_INT ldB,
494 const float *beta,
495 float *C, CBLAS_INT ldC);
496
497 void
498 cblas_zgemm(enum CBLAS_ORDER order,
499 enum CBLAS_TRANSPOSE transA, enum CBLAS_TRANSPOSE transB,
500 CBLAS_INT m, CBLAS_INT n, CBLAS_INT k,
501 const double *alpha,
502 const double *A, CBLAS_INT ldA,
503 const double *B, CBLAS_INT ldB,
504 const double *beta,
505 double *C, CBLAS_INT ldC);
506
507 // hemm
508 void
509 cblas_chemm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
510 CBLAS_INT m, CBLAS_INT n,
511 const float *alpha,
512 const float *A, CBLAS_INT ldA,
513 const float *B, CBLAS_INT ldB,
514 const float *beta,
515 float *C, CBLAS_INT ldC);
516
517 void
518 cblas_zhemm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
519 CBLAS_INT m, CBLAS_INT n,
520 const double *alpha,
521 const double *A, CBLAS_INT ldA,
522 const double *B, CBLAS_INT ldB,
523 const double *beta,
524 double *C, CBLAS_INT ldC);
525
526 // herk
527 void
528 cblas_cherk(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
529 enum CBLAS_TRANSPOSE trans, CBLAS_INT n, CBLAS_INT k,
530 float alpha,
531 const float *A, CBLAS_INT ldA,
532 float beta,
533 float *C, CBLAS_INT ldC);
534
535 void
536 cblas_zherk(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
537 enum CBLAS_TRANSPOSE trans,
538 CBLAS_INT n, CBLAS_INT k,
539 double alpha,
540 const double *A, CBLAS_INT ldA,
541 double beta,
542 double *C, CBLAS_INT ldC);
543
544 // her2k
545 void
546 cblas_cher2k(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
547 enum CBLAS_TRANSPOSE trans,
548 CBLAS_INT n, CBLAS_INT k,
549 const float *alpha,
550 const float *A, CBLAS_INT ldA,
551 const float *B, CBLAS_INT ldB,
552 float beta,
553 float *C, CBLAS_INT ldC);
554
555 void
556 cblas_zher2k(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
557 enum CBLAS_TRANSPOSE trans,
558 CBLAS_INT n, CBLAS_INT k,
559 const double *alpha,
560 const double *A, CBLAS_INT ldA,
561 const double *B, CBLAS_INT ldB,
562 double beta,
563 double *C, CBLAS_INT ldC);
564
565 // symm
566 void
567 cblas_ssymm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
568 CBLAS_INT m, CBLAS_INT n,
569 float alpha,
570 const float *A, CBLAS_INT ldA,
571 const float *B, CBLAS_INT ldB,
572 float beta,
573 float *C, CBLAS_INT ldC);
574
575
576 void
577 cblas_dsymm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
578 CBLAS_INT m, CBLAS_INT n,
579 double alpha,
580 const double *A, CBLAS_INT ldA,
581 const double *B, CBLAS_INT ldB,
582 double beta,
583 double *C, CBLAS_INT ldC);
584
585 void
586 cblas_csymm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
587 CBLAS_INT m, CBLAS_INT n,
588 const float *alpha,
589 const float *A, CBLAS_INT ldA,
590 const float *B, CBLAS_INT ldB,
591 const float *beta,
592 float *C, CBLAS_INT ldC);
593
594 void
595 cblas_zsymm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
596 CBLAS_INT m, CBLAS_INT n,
597 const double *alpha,
598 const double *A, CBLAS_INT ldA,
599 const double *B, CBLAS_INT ldB,
600 const double *beta,
601 double *C, CBLAS_INT ldC);
602
603 // syrk
604 void
605 cblas_ssyrk(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
606 enum CBLAS_TRANSPOSE trans,
607 CBLAS_INT n, CBLAS_INT k,
608 float alpha,
609 const float *A, CBLAS_INT ldA,
610 float beta,
611 float *C, CBLAS_INT ldC);
612
613 void
614 cblas_dsyrk(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
615 enum CBLAS_TRANSPOSE trans,
616 CBLAS_INT n, CBLAS_INT k,
617 double alpha,
618 const double *A, CBLAS_INT ldA,
619 double beta,
620 double *C, CBLAS_INT ldC);
621
622 void
623 cblas_csyrk(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
624 enum CBLAS_TRANSPOSE trans,
625 CBLAS_INT n, CBLAS_INT k,
626 const float *alpha,
627 const float *A, CBLAS_INT ldA,
628 const float *beta,
629 float *C, CBLAS_INT ldC);
630
631 void
632 cblas_zsyrk(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
633 enum CBLAS_TRANSPOSE trans,
634 CBLAS_INT n, CBLAS_INT k,
635 const double *alpha,
636 const double *A, CBLAS_INT ldA,
637 const double *beta,
638 double *C, CBLAS_INT ldC);
639
640 // syr2k
641 void
642 cblas_ssyr2k(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
643 enum CBLAS_TRANSPOSE trans,
644 CBLAS_INT n, CBLAS_INT k,
645 float alpha,
646 const float *A, CBLAS_INT ldA,
647 const float *B, CBLAS_INT ldB,
648 float beta,
649 float *C, CBLAS_INT ldC);
650
651 void
652 cblas_dsyr2k(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
653 enum CBLAS_TRANSPOSE trans,
654 CBLAS_INT n, CBLAS_INT k,
655 double alpha,
656 const double *A, CBLAS_INT ldA,
657 const double *B, CBLAS_INT ldB,
658 double beta,
659 double *C, CBLAS_INT ldC);
660
661 void
662 cblas_csyr2k(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
663 enum CBLAS_TRANSPOSE trans,
664 CBLAS_INT n, CBLAS_INT k,
665 const float *alpha,
666 const float *A, CBLAS_INT ldA,
667 const float *B, CBLAS_INT ldB,
668 const float *beta,
669 float *C, CBLAS_INT ldC);
670
671 void
672 cblas_zsyr2k(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
673 enum CBLAS_TRANSPOSE trans,
674 CBLAS_INT n, CBLAS_INT k,
675 const double *alpha,
676 const double *A, CBLAS_INT ldA,
677 const double *B, CBLAS_INT ldB,
678 const double *beta,
679 double *C, CBLAS_INT ldC);
680
681 // trmm
682 void
683 cblas_strmm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
684 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
685 CBLAS_INT m, CBLAS_INT n,
686 float alpha,
687 const float *A, CBLAS_INT ldA,
688 float *B, CBLAS_INT ldB);
689
690 void
691 cblas_dtrmm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
692 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
693 CBLAS_INT m, CBLAS_INT n,
694 double alpha,
695 const double *A, CBLAS_INT ldA,
696 double *B, CBLAS_INT ldB);
697
698 void
699 cblas_ctrmm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
700 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
701 CBLAS_INT m, CBLAS_INT n,
702 const float *alpha,
703 const float *A, CBLAS_INT ldA,
704 float *B, CBLAS_INT ldB);
705
706 void
707 cblas_ztrmm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
708 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
709 CBLAS_INT m, CBLAS_INT n,
710 const double *alpha,
711 const double *A, CBLAS_INT ldA,
712 double *B, CBLAS_INT ldB);
713
714 // trsm
715 void
716 cblas_strsm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
717 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
718 CBLAS_INT m, CBLAS_INT n,
719 float alpha,
720 const float *A, CBLAS_INT ldA,
721 float *B, CBLAS_INT ldB);
722
723 void
724 cblas_dtrsm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
725 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
726 CBLAS_INT m, CBLAS_INT n,
727 double alpha,
728 const double *A, CBLAS_INT ldA,
729 double *B, CBLAS_INT ldB);
730
731 void
732 cblas_ctrsm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
733 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
734 CBLAS_INT m, CBLAS_INT n,
735 const float *alpha,
736 const float *A, CBLAS_INT ldA,
737 float *B, CBLAS_INT ldB);
738
739 void
740 cblas_ztrsm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
741 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
742 CBLAS_INT m, CBLAS_INT n,
743 const double *alpha,
744 const double *A, CBLAS_INT ldA,
745 double *B, CBLAS_INT ldB);
746
747 } // extern "C"
748
749 #endif // CXXBLAS_DRIVERS_CBLAS_H
2 * File taken (with minor modifications) from cblas:
3 * http://www.netlib.org/blas/
4 */
5
6 #ifndef CXXBLAS_DRIVERS_CBLAS_H
7 #define CXXBLAS_DRIVERS_CBLAS_H 1
8
9 #ifndef CBLAS_INT
10 # define CBLAS_INT int
11 #endif // CBLAS_INT
12
13
14 extern "C" {
15
16 enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102};
17 enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112,
18 CblasConjTrans=113, CblasConjNoTrans=114};
19 enum CBLAS_UPLO {CblasUpper=121, CblasLower=122};
20 enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132};
21 enum CBLAS_SIDE {CblasLeft=141, CblasRight=142};
22
23 //-- LEVEL 1 -------------------------------------------------------------------
24
25 // asum
26 float
27 cblas_sasum(CBLAS_INT n, const float *x, CBLAS_INT incX);
28
29 double
30 cblas_dasum (CBLAS_INT n, const double *x, CBLAS_INT incX);
31
32 float
33 cblas_scasum(CBLAS_INT n, const float *x, CBLAS_INT incX);
34
35 double
36 cblas_dzasum(CBLAS_INT n, const double *x, CBLAS_INT incX);
37
38 // axpy
39 void
40 cblas_saxpy(CBLAS_INT n, float alpha,
41 const float *x, CBLAS_INT incX,
42 float *y, CBLAS_INT incY);
43
44 void
45 cblas_daxpy(CBLAS_INT n, double alpha,
46 const double *x, CBLAS_INT incX,
47 double *y, CBLAS_INT incY);
48
49 void
50 cblas_caxpy(CBLAS_INT n, const float *alpha,
51 const float *x, CBLAS_INT incX,
52 float *y, CBLAS_INT incY);
53
54 void
55 cblas_zaxpy(CBLAS_INT n, const double *alpha,
56 const double *x, CBLAS_INT incX,
57 double *y, CBLAS_INT incY);
58
59 // copy
60 void
61 cblas_scopy(CBLAS_INT n,
62 const float *x, CBLAS_INT incX,
63 float *y, CBLAS_INT incY);
64
65 void
66 cblas_dcopy(CBLAS_INT n,
67 const double *x, CBLAS_INT incX,
68 double *y, CBLAS_INT incY);
69
70 void
71 cblas_ccopy(CBLAS_INT n,
72 const float *x, CBLAS_INT incX,
73 float *y, CBLAS_INT incY);
74
75 void
76 cblas_zcopy(CBLAS_INT n,
77 const double *x, CBLAS_INT incX,
78 double *y, CBLAS_INT incY);
79
80 // dot
81 float
82 cblas_sdsdot(CBLAS_INT n, float alpha,
83 const float *x, CBLAS_INT incX,
84 const float *y, CBLAS_INT incY);
85
86 double
87 cblas_dsdot(CBLAS_INT n,
88 const float *x, CBLAS_INT incX,
89 const float *y, CBLAS_INT incY);
90
91 float
92 cblas_sdot(CBLAS_INT n,
93 const float *x, CBLAS_INT incX,
94 const float *y, CBLAS_INT incY);
95
96 double
97 cblas_ddot(CBLAS_INT n,
98 const double *x, CBLAS_INT incX,
99 const double *y, CBLAS_INT incY);
100
101 void
102 cblas_cdotu_sub(CBLAS_INT n,
103 const float *x, CBLAS_INT incX,
104 const float *y, CBLAS_INT incY,
105 float *result);
106
107 void
108 cblas_cdotc_sub(CBLAS_INT n,
109 const float *x, CBLAS_INT incX,
110 const float *y, CBLAS_INT incY,
111 float *result);
112
113 void
114 cblas_zdotu_sub(CBLAS_INT n,
115 const double *x, CBLAS_INT incX,
116 const double *y, CBLAS_INT incY,
117 double *result);
118
119 void
120 cblas_zdotc_sub(CBLAS_INT n,
121 const double *x, CBLAS_INT incX,
122 const double *y, CBLAS_INT incY,
123 double *result);
124
125 // iamax
126 CBLAS_INDEX
127 cblas_isamax(CBLAS_INT n, const float *x, CBLAS_INT incX);
128
129 CBLAS_INDEX
130 cblas_idamax(CBLAS_INT n, const double *x, CBLAS_INT incX);
131
132 CBLAS_INDEX
133 cblas_icamax(CBLAS_INT n, const float *x, CBLAS_INT incX);
134
135 CBLAS_INDEX
136 cblas_izamax(CBLAS_INT n, const double *x, CBLAS_INT incX);
137
138 // nrm2
139 float
140 cblas_snrm2(CBLAS_INT n, const float *X, CBLAS_INT incX);
141
142 double
143 cblas_dnrm2(CBLAS_INT n, const double *X, CBLAS_INT incX);
144
145 float
146 cblas_scnrm2(CBLAS_INT n, const float *X, CBLAS_INT incX);
147
148 double
149 cblas_dznrm2(CBLAS_INT n, const double *X, CBLAS_INT incX);
150
151 // rot
152 void
153 cblas_srot(CBLAS_INT n,
154 float *X, CBLAS_INT incX,
155 float *Y, CBLAS_INT incY,
156 float c, float s);
157
158 void
159 cblas_drot(CBLAS_INT n,
160 double *X, CBLAS_INT incX,
161 double *Y, CBLAS_INT incY,
162 double c, double s);
163
164 void
165 cblas_srotg(float *a, float *b, float *c, float *s);
166
167 void
168 cblas_drotg(double *a, double *b, double *c, double *s);
169
170 // rotm
171 void
172 cblas_srotm(CBLAS_INT n,
173 float *X, CBLAS_INT incX,
174 float *Y, CBLAS_INT incY,
175 const float *P);
176
177 void
178 cblas_drotm(CBLAS_INT n,
179 double *X, CBLAS_INT incX,
180 double *Y, CBLAS_INT incY,
181 const double *P);
182
183 void
184 cblas_srotmg(float *d1, float *d2, float *b1, float *b2, float *P);
185
186 void
187 cblas_drotmg(double *d1, double *d2, double *b1, double *b2, double *P);
188
189 // scal
190 void
191 cblas_sscal(CBLAS_INT n, float alpha, float *x, CBLAS_INT incX);
192
193 void
194 cblas_dscal(CBLAS_INT n, double alpha, double *x, CBLAS_INT incX);
195
196 void
197 cblas_cscal(CBLAS_INT n, float *alpha, float *x, CBLAS_INT incX);
198
199 void
200 cblas_zscal(CBLAS_INT n, double *alpha, double *x, CBLAS_INT incX);
201
202 void
203 cblas_csscal(CBLAS_INT n, float alpha, float *x, CBLAS_INT incX);
204
205 void
206 cblas_zdscal(CBLAS_INT n, double alpha, double *x, CBLAS_INT incX);
207
208 // swap
209 void
210 cblas_sswap(CBLAS_INT n, float *x, CBLAS_INT incX, float *y, CBLAS_INT incY);
211
212 void
213 cblas_dswap(CBLAS_INT n, double *x, CBLAS_INT incX, double *y, CBLAS_INT incY);
214
215 void
216 cblas_cswap(CBLAS_INT n, float *x, CBLAS_INT incX, float *y, CBLAS_INT incY);
217
218 void
219 cblas_zswap(CBLAS_INT n, double *x, CBLAS_INT incX, double *y, CBLAS_INT incY);
220
221 //-- LEVEL 2 -------------------------------------------------------------------
222
223 // gemv
224 void
225 cblas_sgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE trans,
226 CBLAS_INT m, CBLAS_INT n,
227 float alpha,
228 const float *A, CBLAS_INT ldA,
229 const float *x, CBLAS_INT incX,
230 float beta,
231 float *y, CBLAS_INT incY);
232
233 void
234 cblas_dgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE trans,
235 CBLAS_INT m, CBLAS_INT n,
236 double alpha,
237 const double *A, CBLAS_INT ldA,
238 const double *x, CBLAS_INT incX,
239 double beta,
240 double *y, CBLAS_INT incY);
241
242 void
243 cblas_cgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE trans,
244 CBLAS_INT m, CBLAS_INT n,
245 const float *alpha,
246 const float *A, CBLAS_INT ldA,
247 const float *x, CBLAS_INT incX,
248 const float *beta,
249 float *y, CBLAS_INT incY);
250
251 void
252 cblas_zgemv(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE trans,
253 CBLAS_INT m, CBLAS_INT n,
254 const double *alpha,
255 const double *A, CBLAS_INT ldA,
256 const double *x, CBLAS_INT incX,
257 const double *beta,
258 double *y, CBLAS_INT incY);
259
260 // symv
261 void
262 cblas_ssymv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
263 CBLAS_INT n, float alpha,
264 const float *A, CBLAS_INT ldA,
265 const float *x, CBLAS_INT incX,
266 float beta,
267 float *y, CBLAS_INT incY);
268
269 void
270 cblas_dsymv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
271 CBLAS_INT n, double alpha,
272 const double *A, CBLAS_INT ldA,
273 const double *x, CBLAS_INT incX,
274 double beta,
275 double *y, CBLAS_INT incY);
276
277 // hemv
278 void
279 cblas_chemv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
280 CBLAS_INT n, const float *alpha,
281 const float *A, CBLAS_INT ldA,
282 const float *x, CBLAS_INT incX,
283 const float *beta,
284 float *y, CBLAS_INT incY);
285
286 void
287 cblas_zhemv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
288 CBLAS_INT n, const double *alpha,
289 const double *A, CBLAS_INT ldA,
290 const double *x, CBLAS_INT incX,
291 const double *beta,
292 double *y, CBLAS_INT incY);
293
294 // trsv
295 void
296 cblas_strsv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
297 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
298 CBLAS_INT n,
299 const float *A, CBLAS_INT lda,
300 float *X, CBLAS_INT incX);
301
302 void
303 cblas_dtrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
304 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
305 CBLAS_INT n,
306 const double *A, CBLAS_INT lda,
307 double *X, CBLAS_INT incX);
308
309 void
310 cblas_ctrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
311 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
312 CBLAS_INT n,
313 const float *A, CBLAS_INT lda,
314 float *X, CBLAS_INT incX);
315
316 void
317 cblas_ztrsv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
318 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
319 CBLAS_INT n,
320 const double *A, CBLAS_INT lda,
321 double *X, CBLAS_INT incX);
322
323 // trmv
324 void
325 cblas_strmv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
326 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
327 CBLAS_INT n,
328 const float *A, CBLAS_INT lda,
329 float *x, CBLAS_INT incX);
330
331 void
332 cblas_dtrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
333 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
334 CBLAS_INT n,
335 const double *A, CBLAS_INT lda,
336 double *x, CBLAS_INT incX);
337
338 void
339 cblas_ctrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
340 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
341 CBLAS_INT n,
342 const float *A, CBLAS_INT lda,
343 float *x, CBLAS_INT incX);
344
345 void
346 cblas_ztrmv(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
347 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
348 CBLAS_INT N,
349 const double *A, CBLAS_INT lda,
350 double *x, CBLAS_INT incX);
351
352 // ger
353 void
354 cblas_sger(enum CBLAS_ORDER order,
355 CBLAS_INT m, CBLAS_INT n,
356 float alpha,
357 const float *X, CBLAS_INT incX,
358 const float *Y, CBLAS_INT incY,
359 float *A, CBLAS_INT lda);
360
361 void
362 cblas_dger(enum CBLAS_ORDER order,
363 CBLAS_INT m, CBLAS_INT n,
364 double alpha,
365 const double *X, CBLAS_INT incX,
366 const double *Y, CBLAS_INT incY,
367 double *A, CBLAS_INT lda);
368
369 void
370 cblas_cgeru(enum CBLAS_ORDER order,
371 CBLAS_INT m, CBLAS_INT n,
372 const float *alpha,
373 const float *X, CBLAS_INT incX,
374 const float *Y, CBLAS_INT incY,
375 const float *A, CBLAS_INT lda);
376
377 void
378 cblas_cgerc(enum CBLAS_ORDER order,
379 CBLAS_INT m, CBLAS_INT n,
380 const float *alpha,
381 const float *X, CBLAS_INT incX,
382 const float *Y, CBLAS_INT incY,
383 float *A, CBLAS_INT lda);
384
385 void
386 cblas_zgeru(enum CBLAS_ORDER order,
387 CBLAS_INT m, CBLAS_INT n,
388 const double *alpha,
389 const double *X, CBLAS_INT incX,
390 const double *Y, CBLAS_INT incY,
391 double *A, CBLAS_INT lda);
392
393 void
394 cblas_zgerc(enum CBLAS_ORDER order,
395 CBLAS_INT m, CBLAS_INT n,
396 const double *alpha,
397 const double *X, CBLAS_INT incX,
398 const double *Y, CBLAS_INT incY,
399 double *A, CBLAS_INT lda);
400
401 // syr
402 void
403 cblas_ssyr(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
404 CBLAS_INT n,
405 float alpha,
406 const float *X, CBLAS_INT incX,
407 float *A, CBLAS_INT lda);
408
409 void
410 cblas_dsyr(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
411 CBLAS_INT n,
412 double alpha,
413 const double *X, CBLAS_INT incX,
414 double *A, CBLAS_INT lda);
415
416 // her
417 void
418 cblas_cher(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
419 CBLAS_INT n,
420 float alpha,
421 const float *X, CBLAS_INT incX,
422 float *A, CBLAS_INT lda);
423
424 void
425 cblas_zher(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
426 CBLAS_INT n,
427 double alpha,
428 const double *X, CBLAS_INT incX,
429 double *A, CBLAS_INT lda);
430
431 // syr2
432 void
433 cblas_ssyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
434 CBLAS_INT n,
435 float alpha,
436 const float *X, CBLAS_INT incX,
437 const float *Y, CBLAS_INT incY,
438 float *A, CBLAS_INT lda);
439
440 void
441 cblas_dsyr2(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
442 CBLAS_INT n,
443 double alpha,
444 const double *X, CBLAS_INT incX,
445 const double *Y, CBLAS_INT incY,
446 double *A, CBLAS_INT lda);
447 // her2
448 void
449 cblas_cher2(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
450 CBLAS_INT n,
451 const float *alpha,
452 const float *X, CBLAS_INT incX,
453 const float *Y, CBLAS_INT incY,
454 float *A, CBLAS_INT lda);
455
456 void
457 cblas_zher2(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
458 CBLAS_INT n,
459 const double *alpha,
460 const double *X, CBLAS_INT incX,
461 const double *Y, CBLAS_INT incY,
462 double *A, CBLAS_INT lda);
463
464 //-- LEVEL 3 -------------------------------------------------------------------
465
466 // gemm
467 void
468 cblas_sgemm(enum CBLAS_ORDER order,
469 enum CBLAS_TRANSPOSE transA, enum CBLAS_TRANSPOSE transB,
470 CBLAS_INT m, CBLAS_INT n, CBLAS_INT k,
471 float alpha,
472 const float *A, CBLAS_INT ldA,
473 const float *B, CBLAS_INT ldB,
474 float beta,
475 float *C, CBLAS_INT ldC);
476
477 void
478 cblas_dgemm(enum CBLAS_ORDER order,
479 enum CBLAS_TRANSPOSE transA, enum CBLAS_TRANSPOSE transB,
480 CBLAS_INT m, CBLAS_INT n, CBLAS_INT k,
481 double alpha,
482 const double *A, CBLAS_INT ldA,
483 const double *B, CBLAS_INT ldB,
484 double beta,
485 double *C, CBLAS_INT ldC);
486
487 void
488 cblas_cgemm(enum CBLAS_ORDER order,
489 enum CBLAS_TRANSPOSE transA, enum CBLAS_TRANSPOSE transB,
490 CBLAS_INT m, CBLAS_INT n, CBLAS_INT k,
491 const float *alpha,
492 const float *A, CBLAS_INT ldA,
493 const float *B, CBLAS_INT ldB,
494 const float *beta,
495 float *C, CBLAS_INT ldC);
496
497 void
498 cblas_zgemm(enum CBLAS_ORDER order,
499 enum CBLAS_TRANSPOSE transA, enum CBLAS_TRANSPOSE transB,
500 CBLAS_INT m, CBLAS_INT n, CBLAS_INT k,
501 const double *alpha,
502 const double *A, CBLAS_INT ldA,
503 const double *B, CBLAS_INT ldB,
504 const double *beta,
505 double *C, CBLAS_INT ldC);
506
507 // hemm
508 void
509 cblas_chemm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
510 CBLAS_INT m, CBLAS_INT n,
511 const float *alpha,
512 const float *A, CBLAS_INT ldA,
513 const float *B, CBLAS_INT ldB,
514 const float *beta,
515 float *C, CBLAS_INT ldC);
516
517 void
518 cblas_zhemm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
519 CBLAS_INT m, CBLAS_INT n,
520 const double *alpha,
521 const double *A, CBLAS_INT ldA,
522 const double *B, CBLAS_INT ldB,
523 const double *beta,
524 double *C, CBLAS_INT ldC);
525
526 // herk
527 void
528 cblas_cherk(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
529 enum CBLAS_TRANSPOSE trans, CBLAS_INT n, CBLAS_INT k,
530 float alpha,
531 const float *A, CBLAS_INT ldA,
532 float beta,
533 float *C, CBLAS_INT ldC);
534
535 void
536 cblas_zherk(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
537 enum CBLAS_TRANSPOSE trans,
538 CBLAS_INT n, CBLAS_INT k,
539 double alpha,
540 const double *A, CBLAS_INT ldA,
541 double beta,
542 double *C, CBLAS_INT ldC);
543
544 // her2k
545 void
546 cblas_cher2k(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
547 enum CBLAS_TRANSPOSE trans,
548 CBLAS_INT n, CBLAS_INT k,
549 const float *alpha,
550 const float *A, CBLAS_INT ldA,
551 const float *B, CBLAS_INT ldB,
552 float beta,
553 float *C, CBLAS_INT ldC);
554
555 void
556 cblas_zher2k(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
557 enum CBLAS_TRANSPOSE trans,
558 CBLAS_INT n, CBLAS_INT k,
559 const double *alpha,
560 const double *A, CBLAS_INT ldA,
561 const double *B, CBLAS_INT ldB,
562 double beta,
563 double *C, CBLAS_INT ldC);
564
565 // symm
566 void
567 cblas_ssymm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
568 CBLAS_INT m, CBLAS_INT n,
569 float alpha,
570 const float *A, CBLAS_INT ldA,
571 const float *B, CBLAS_INT ldB,
572 float beta,
573 float *C, CBLAS_INT ldC);
574
575
576 void
577 cblas_dsymm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
578 CBLAS_INT m, CBLAS_INT n,
579 double alpha,
580 const double *A, CBLAS_INT ldA,
581 const double *B, CBLAS_INT ldB,
582 double beta,
583 double *C, CBLAS_INT ldC);
584
585 void
586 cblas_csymm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
587 CBLAS_INT m, CBLAS_INT n,
588 const float *alpha,
589 const float *A, CBLAS_INT ldA,
590 const float *B, CBLAS_INT ldB,
591 const float *beta,
592 float *C, CBLAS_INT ldC);
593
594 void
595 cblas_zsymm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
596 CBLAS_INT m, CBLAS_INT n,
597 const double *alpha,
598 const double *A, CBLAS_INT ldA,
599 const double *B, CBLAS_INT ldB,
600 const double *beta,
601 double *C, CBLAS_INT ldC);
602
603 // syrk
604 void
605 cblas_ssyrk(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
606 enum CBLAS_TRANSPOSE trans,
607 CBLAS_INT n, CBLAS_INT k,
608 float alpha,
609 const float *A, CBLAS_INT ldA,
610 float beta,
611 float *C, CBLAS_INT ldC);
612
613 void
614 cblas_dsyrk(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
615 enum CBLAS_TRANSPOSE trans,
616 CBLAS_INT n, CBLAS_INT k,
617 double alpha,
618 const double *A, CBLAS_INT ldA,
619 double beta,
620 double *C, CBLAS_INT ldC);
621
622 void
623 cblas_csyrk(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
624 enum CBLAS_TRANSPOSE trans,
625 CBLAS_INT n, CBLAS_INT k,
626 const float *alpha,
627 const float *A, CBLAS_INT ldA,
628 const float *beta,
629 float *C, CBLAS_INT ldC);
630
631 void
632 cblas_zsyrk(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
633 enum CBLAS_TRANSPOSE trans,
634 CBLAS_INT n, CBLAS_INT k,
635 const double *alpha,
636 const double *A, CBLAS_INT ldA,
637 const double *beta,
638 double *C, CBLAS_INT ldC);
639
640 // syr2k
641 void
642 cblas_ssyr2k(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
643 enum CBLAS_TRANSPOSE trans,
644 CBLAS_INT n, CBLAS_INT k,
645 float alpha,
646 const float *A, CBLAS_INT ldA,
647 const float *B, CBLAS_INT ldB,
648 float beta,
649 float *C, CBLAS_INT ldC);
650
651 void
652 cblas_dsyr2k(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
653 enum CBLAS_TRANSPOSE trans,
654 CBLAS_INT n, CBLAS_INT k,
655 double alpha,
656 const double *A, CBLAS_INT ldA,
657 const double *B, CBLAS_INT ldB,
658 double beta,
659 double *C, CBLAS_INT ldC);
660
661 void
662 cblas_csyr2k(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
663 enum CBLAS_TRANSPOSE trans,
664 CBLAS_INT n, CBLAS_INT k,
665 const float *alpha,
666 const float *A, CBLAS_INT ldA,
667 const float *B, CBLAS_INT ldB,
668 const float *beta,
669 float *C, CBLAS_INT ldC);
670
671 void
672 cblas_zsyr2k(enum CBLAS_ORDER order, enum CBLAS_UPLO upLo,
673 enum CBLAS_TRANSPOSE trans,
674 CBLAS_INT n, CBLAS_INT k,
675 const double *alpha,
676 const double *A, CBLAS_INT ldA,
677 const double *B, CBLAS_INT ldB,
678 const double *beta,
679 double *C, CBLAS_INT ldC);
680
681 // trmm
682 void
683 cblas_strmm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
684 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
685 CBLAS_INT m, CBLAS_INT n,
686 float alpha,
687 const float *A, CBLAS_INT ldA,
688 float *B, CBLAS_INT ldB);
689
690 void
691 cblas_dtrmm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
692 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
693 CBLAS_INT m, CBLAS_INT n,
694 double alpha,
695 const double *A, CBLAS_INT ldA,
696 double *B, CBLAS_INT ldB);
697
698 void
699 cblas_ctrmm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
700 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
701 CBLAS_INT m, CBLAS_INT n,
702 const float *alpha,
703 const float *A, CBLAS_INT ldA,
704 float *B, CBLAS_INT ldB);
705
706 void
707 cblas_ztrmm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
708 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
709 CBLAS_INT m, CBLAS_INT n,
710 const double *alpha,
711 const double *A, CBLAS_INT ldA,
712 double *B, CBLAS_INT ldB);
713
714 // trsm
715 void
716 cblas_strsm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
717 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
718 CBLAS_INT m, CBLAS_INT n,
719 float alpha,
720 const float *A, CBLAS_INT ldA,
721 float *B, CBLAS_INT ldB);
722
723 void
724 cblas_dtrsm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
725 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
726 CBLAS_INT m, CBLAS_INT n,
727 double alpha,
728 const double *A, CBLAS_INT ldA,
729 double *B, CBLAS_INT ldB);
730
731 void
732 cblas_ctrsm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
733 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
734 CBLAS_INT m, CBLAS_INT n,
735 const float *alpha,
736 const float *A, CBLAS_INT ldA,
737 float *B, CBLAS_INT ldB);
738
739 void
740 cblas_ztrsm(enum CBLAS_ORDER order, enum CBLAS_SIDE side, enum CBLAS_UPLO upLo,
741 enum CBLAS_TRANSPOSE transA, enum CBLAS_DIAG diag,
742 CBLAS_INT m, CBLAS_INT n,
743 const double *alpha,
744 const double *A, CBLAS_INT ldA,
745 double *B, CBLAS_INT ldB);
746
747 } // extern "C"
748
749 #endif // CXXBLAS_DRIVERS_CBLAS_H