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