1 #ifndef CBLAS_H
2 #define CBLAS_H
3 #include <stddef.h>
4 
5 /*
6  * Enumerated and derived types
7  */
8 #define CBLAS_INDEX size_t  /* this may vary between platforms */
9 
10 enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102};
11 enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113};
12 enum CBLAS_UPLO {CblasUpper=121, CblasLower=122};
13 enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132};
14 enum CBLAS_SIDE {CblasLeft=141, CblasRight=142};
15 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
20 /*
21  * ===========================================================================
22  * Prototypes for level 1 BLAS functions (complex are recast as routines)
23  * ===========================================================================
24  */
25 float  cblas_sdsdot(const int N, const float alpha, const float *X,
26                     const int incX, const float *Y, const int incY);
27 double cblas_dsdot(const int N, const float *X, const int incX, const float *Y,
28                    const int incY);
29 float  cblas_sdot(const int N, const float  *X, const int incX,
30                   const float  *Y, const int incY);
31 double cblas_ddot(const int N, const double *X, const int incX,
32                   const double *Y, const int incY);
33 
34 /*
35  * Functions having prefixes Z and C only
36  */
37 void   cblas_cdotu_sub(const int N, const void *X, const int incX,
38                        const void *Y, const int incY, void *dotu);
39 void   cblas_cdotc_sub(const int N, const void *X, const int incX,
40                        const void *Y, const int incY, void *dotc);
41 
42 void   cblas_zdotu_sub(const int N, const void *X, const int incX,
43                        const void *Y, const int incY, void *dotu);
44 void   cblas_zdotc_sub(const int N, const void *X, const int incX,
45                        const void *Y, const int incY, void *dotc);
46 
47 
48 /*
49  * Functions having prefixes S D SC DZ
50  */
51 float  cblas_snrm2(const int N, const float *X, const int incX);
52 float  cblas_sasum(const int N, const float *X, const int incX);
53 
54 double cblas_dnrm2(const int N, const double *X, const int incX);
55 double cblas_dasum(const int N, const double *X, const int incX);
56 
57 float  cblas_scnrm2(const int N, const void *X, const int incX);
58 float  cblas_scasum(const int N, const void *X, const int incX);
59 
60 double cblas_dznrm2(const int N, const void *X, const int incX);
61 double cblas_dzasum(const int N, const void *X, const int incX);
62 
63 
64 /*
65  * Functions having standard 4 prefixes (S D C Z)
66  */
67 CBLAS_INDEX cblas_isamax(const int N, const float  *X, const int incX);
68 CBLAS_INDEX cblas_idamax(const int N, const double *X, const int incX);
69 CBLAS_INDEX cblas_icamax(const int N, const void   *X, const int incX);
70 CBLAS_INDEX cblas_izamax(const int N, const void   *X, const int incX);
71 
72 /*
73  * ===========================================================================
74  * Prototypes for level 1 BLAS routines
75  * ===========================================================================
76  */
77 
78 /*
79  * Routines with standard 4 prefixes (s, d, c, z)
80  */
81 void cblas_sswap(const int N, float *X, const int incX,
82                  float *Y, const int incY);
83 void cblas_scopy(const int N, const float *X, const int incX,
84                  float *Y, const int incY);
85 void cblas_saxpy(const int N, const float alpha, const float *X,
86                  const int incX, float *Y, const int incY);
87 
88 void cblas_dswap(const int N, double *X, const int incX,
89                  double *Y, const int incY);
90 void cblas_dcopy(const int N, const double *X, const int incX,
91                  double *Y, const int incY);
92 void cblas_daxpy(const int N, const double alpha, const double *X,
93                  const int incX, double *Y, const int incY);
94 
95 void cblas_cswap(const int N, void *X, const int incX,
96                  void *Y, const int incY);
97 void cblas_ccopy(const int N, const void *X, const int incX,
98                  void *Y, const int incY);
99 void cblas_caxpy(const int N, const void *alpha, const void *X,
100                  const int incX, void *Y, const int incY);
101 
102 void cblas_zswap(const int N, void *X, const int incX,
103                  void *Y, const int incY);
104 void cblas_zcopy(const int N, const void *X, const int incX,
105                  void *Y, const int incY);
106 void cblas_zaxpy(const int N, const void *alpha, const void *X,
107                  const int incX, void *Y, const int incY);
108 
109 
110 /*
111  * Routines with S and D prefix only
112  */
113 void cblas_srotg(float *a, float *b, float *c, float *s);
114 void cblas_srotmg(float *d1, float *d2, float *b1, const float b2, float *P);
115 void cblas_srot(const int N, float *X, const int incX,
116                 float *Y, const int incY, const float c, const float s);
117 void cblas_srotm(const int N, float *X, const int incX,
118                 float *Y, const int incY, const float *P);
119 
120 void cblas_drotg(double *a, double *b, double *c, double *s);
121 void cblas_drotmg(double *d1, double *d2, double *b1, const double b2, double *P);
122 void cblas_drot(const int N, double *X, const int incX,
123                 double *Y, const int incY, const double c, const double  s);
124 void cblas_drotm(const int N, double *X, const int incX,
125                 double *Y, const int incY, const double *P);
126 
127 
128 /*
129  * Routines with S D C Z CS and ZD prefixes
130  */
131 void cblas_sscal(const int N, const float alpha, float *X, const int incX);
132 void cblas_dscal(const int N, const double alpha, double *X, const int incX);
133 void cblas_cscal(const int N, const void *alpha, void *X, const int incX);
134 void cblas_zscal(const int N, const void *alpha, void *X, const int incX);
135 void cblas_csscal(const int N, const float alpha, void *X, const int incX);
136 void cblas_zdscal(const int N, const double alpha, void *X, const int incX);
137 
138 /*
139  * ===========================================================================
140  * Prototypes for level 2 BLAS
141  * ===========================================================================
142  */
143 
144 /*
145  * Routines with standard 4 prefixes (S, D, C, Z)
146  */
147 void cblas_sgemv(const enum CBLAS_ORDER order,
148                  const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
149                  const float alpha, const float *A, const int lda,
150                  const float *X, const int incX, const float beta,
151                  float *Y, const int incY);
152 void cblas_sgbmv(const enum CBLAS_ORDER order,
153                  const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
154                  const int KL, const int KU, const float alpha,
155                  const float *A, const int lda, const float *X,
156                  const int incX, const float beta, float *Y, const int incY);
157 void cblas_strmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
158                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
159                  const int N, const float *A, const int lda,
160                  float *X, const int incX);
161 void cblas_stbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
162                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
163                  const int N, const int K, const float *A, const int lda,
164                  float *X, const int incX);
165 void cblas_stpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
166                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
167                  const int N, const float *Ap, float *X, const int incX);
168 void cblas_strsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
169                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
170                  const int N, const float *A, const int lda, float *X,
171                  const int incX);
172 void cblas_stbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
173                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
174                  const int N, const int K, const float *A, const int lda,
175                  float *X, const int incX);
176 void cblas_stpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
177                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
178                  const int N, const float *Ap, float *X, const int incX);
179 
180 void cblas_dgemv(const enum CBLAS_ORDER order,
181                  const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
182                  const double alpha, const double *A, const int lda,
183                  const double *X, const int incX, const double beta,
184                  double *Y, const int incY);
185 void cblas_dgbmv(const enum CBLAS_ORDER order,
186                  const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
187                  const int KL, const int KU, const double alpha,
188                  const double *A, const int lda, const double *X,
189                  const int incX, const double beta, double *Y, const int incY);
190 void cblas_dtrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
191                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
192                  const int N, const double *A, const int lda,
193                  double *X, const int incX);
194 void cblas_dtbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
195                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
196                  const int N, const int K, const double *A, const int lda,
197                  double *X, const int incX);
198 void cblas_dtpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
199                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
200                  const int N, const double *Ap, double *X, const int incX);
201 void cblas_dtrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
202                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
203                  const int N, const double *A, const int lda, double *X,
204                  const int incX);
205 void cblas_dtbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
206                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
207                  const int N, const int K, const double *A, const int lda,
208                  double *X, const int incX);
209 void cblas_dtpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
210                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
211                  const int N, const double *Ap, double *X, const int incX);
212 
213 void cblas_cgemv(const enum CBLAS_ORDER order,
214                  const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
215                  const void *alpha, const void *A, const int lda,
216                  const void *X, const int incX, const void *beta,
217                  void *Y, const int incY);
218 void cblas_cgbmv(const enum CBLAS_ORDER order,
219                  const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
220                  const int KL, const int KU, const void *alpha,
221                  const void *A, const int lda, const void *X,
222                  const int incX, const void *beta, void *Y, const int incY);
223 void cblas_ctrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
224                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
225                  const int N, const void *A, const int lda,
226                  void *X, const int incX);
227 void cblas_ctbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
228                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
229                  const int N, const int K, const void *A, const int lda,
230                  void *X, const int incX);
231 void cblas_ctpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
232                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
233                  const int N, const void *Ap, void *X, const int incX);
234 void cblas_ctrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
235                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
236                  const int N, const void *A, const int lda, void *X,
237                  const int incX);
238 void cblas_ctbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
239                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
240                  const int N, const int K, const void *A, const int lda,
241                  void *X, const int incX);
242 void cblas_ctpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
243                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
244                  const int N, const void *Ap, void *X, const int incX);
245 
246 void cblas_zgemv(const enum CBLAS_ORDER order,
247                  const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
248                  const void *alpha, const void *A, const int lda,
249                  const void *X, const int incX, const void *beta,
250                  void *Y, const int incY);
251 void cblas_zgbmv(const enum CBLAS_ORDER order,
252                  const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
253                  const int KL, const int KU, const void *alpha,
254                  const void *A, const int lda, const void *X,
255                  const int incX, const void *beta, void *Y, const int incY);
256 void cblas_ztrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
257                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
258                  const int N, const void *A, const int lda,
259                  void *X, const int incX);
260 void cblas_ztbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
261                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
262                  const int N, const int K, const void *A, const int lda,
263                  void *X, const int incX);
264 void cblas_ztpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
265                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
266                  const int N, const void *Ap, void *X, const int incX);
267 void cblas_ztrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
268                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
269                  const int N, const void *A, const int lda, void *X,
270                  const int incX);
271 void cblas_ztbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
272                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
273                  const int N, const int K, const void *A, const int lda,
274                  void *X, const int incX);
275 void cblas_ztpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
276                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
277                  const int N, const void *Ap, void *X, const int incX);
278 
279 
280 /*
281  * Routines with S and D prefixes only
282  */
283 void cblas_ssymv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
284                  const int N, const float alpha, const float *A,
285                  const int lda, const float *X, const int incX,
286                  const float beta, float *Y, const int incY);
287 void cblas_ssbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
288                  const int N, const int K, const float alpha, const float *A,
289                  const int lda, const float *X, const int incX,
290                  const float beta, float *Y, const int incY);
291 void cblas_sspmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
292                  const int N, const float alpha, const float *Ap,
293                  const float *X, const int incX,
294                  const float beta, float *Y, const int incY);
295 void cblas_sger(const enum CBLAS_ORDER order, const int M, const int N,
296                 const float alpha, const float *X, const int incX,
297                 const float *Y, const int incY, float *A, const int lda);
298 void cblas_ssyr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
299                 const int N, const float alpha, const float *X,
300                 const int incX, float *A, const int lda);
301 void cblas_sspr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
302                 const int N, const float alpha, const float *X,
303                 const int incX, float *Ap);
304 void cblas_ssyr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
305                 const int N, const float alpha, const float *X,
306                 const int incX, const float *Y, const int incY, float *A,
307                 const int lda);
308 void cblas_sspr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
309                 const int N, const float alpha, const float *X,
310                 const int incX, const float *Y, const int incY, float *A);
311 
312 void cblas_dsymv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
313                  const int N, const double alpha, const double *A,
314                  const int lda, const double *X, const int incX,
315                  const double beta, double *Y, const int incY);
316 void cblas_dsbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
317                  const int N, const int K, const double alpha, const double *A,
318                  const int lda, const double *X, const int incX,
319                  const double beta, double *Y, const int incY);
320 void cblas_dspmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
321                  const int N, const double alpha, const double *Ap,
322                  const double *X, const int incX,
323                  const double beta, double *Y, const int incY);
324 void cblas_dger(const enum CBLAS_ORDER order, const int M, const int N,
325                 const double alpha, const double *X, const int incX,
326                 const double *Y, const int incY, double *A, const int lda);
327 void cblas_dsyr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
328                 const int N, const double alpha, const double *X,
329                 const int incX, double *A, const int lda);
330 void cblas_dspr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
331                 const int N, const double alpha, const double *X,
332                 const int incX, double *Ap);
333 void cblas_dsyr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
334                 const int N, const double alpha, const double *X,
335                 const int incX, const double *Y, const int incY, double *A,
336                 const int lda);
337 void cblas_dspr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
338                 const int N, const double alpha, const double *X,
339                 const int incX, const double *Y, const int incY, double *A);
340 
341 
342 /*
343  * Routines with C and Z prefixes only
344  */
345 void cblas_chemv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
346                  const int N, const void *alpha, const void *A,
347                  const int lda, const void *X, const int incX,
348                  const void *beta, void *Y, const int incY);
349 void cblas_chbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
350                  const int N, const int K, const void *alpha, const void *A,
351                  const int lda, const void *X, const int incX,
352                  const void *beta, void *Y, const int incY);
353 void cblas_chpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
354                  const int N, const void *alpha, const void *Ap,
355                  const void *X, const int incX,
356                  const void *beta, void *Y, const int incY);
357 void cblas_cgeru(const enum CBLAS_ORDER order, const int M, const int N,
358                  const void *alpha, const void *X, const int incX,
359                  const void *Y, const int incY, void *A, const int lda);
360 void cblas_cgerc(const enum CBLAS_ORDER order, const int M, const int N,
361                  const void *alpha, const void *X, const int incX,
362                  const void *Y, const int incY, void *A, const int lda);
363 void cblas_cher(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
364                 const int N, const float alpha, const void *X, const int incX,
365                 void *A, const int lda);
366 void cblas_chpr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
367                 const int N, const float alpha, const void *X,
368                 const int incX, void *A);
369 void cblas_cher2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N,
370                 const void *alpha, const void *X, const int incX,
371                 const void *Y, const int incY, void *A, const int lda);
372 void cblas_chpr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N,
373                 const void *alpha, const void *X, const int incX,
374                 const void *Y, const int incY, void *Ap);
375 
376 void cblas_zhemv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
377                  const int N, const void *alpha, const void *A,
378                  const int lda, const void *X, const int incX,
379                  const void *beta, void *Y, const int incY);
380 void cblas_zhbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
381                  const int N, const int K, const void *alpha, const void *A,
382                  const int lda, const void *X, const int incX,
383                  const void *beta, void *Y, const int incY);
384 void cblas_zhpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
385                  const int N, const void *alpha, const void *Ap,
386                  const void *X, const int incX,
387                  const void *beta, void *Y, const int incY);
388 void cblas_zgeru(const enum CBLAS_ORDER order, const int M, const int N,
389                  const void *alpha, const void *X, const int incX,
390                  const void *Y, const int incY, void *A, const int lda);
391 void cblas_zgerc(const enum CBLAS_ORDER order, const int M, const int N,
392                  const void *alpha, const void *X, const int incX,
393                  const void *Y, const int incY, void *A, const int lda);
394 void cblas_zher(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
395                 const int N, const double alpha, const void *X, const int incX,
396                 void *A, const int lda);
397 void cblas_zhpr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
398                 const int N, const double alpha, const void *X,
399                 const int incX, void *A);
400 void cblas_zher2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N,
401                 const void *alpha, const void *X, const int incX,
402                 const void *Y, const int incY, void *A, const int lda);
403 void cblas_zhpr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N,
404                 const void *alpha, const void *X, const int incX,
405                 const void *Y, const int incY, void *Ap);
406 
407 /*
408  * ===========================================================================
409  * Prototypes for level 3 BLAS
410  * ===========================================================================
411  */
412 
413 /*
414  * Routines with standard 4 prefixes (S, D, C, Z)
415  */
416 void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
417                  const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
418                  const int K, const float alpha, const float *A,
419                  const int lda, const float *B, const int ldb,
420                  const float beta, float *C, const int ldc);
421 void cblas_ssymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
422                  const enum CBLAS_UPLO Uplo, const int M, const int N,
423                  const float alpha, const float *A, const int lda,
424                  const float *B, const int ldb, const float beta,
425                  float *C, const int ldc);
426 void cblas_ssyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
427                  const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
428                  const float alpha, const float *A, const int lda,
429                  const float beta, float *C, const int ldc);
430 void cblas_ssyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
431                   const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
432                   const float alpha, const float *A, const int lda,
433                   const float *B, const int ldb, const float beta,
434                   float *C, const int ldc);
435 void cblas_strmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
436                  const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
437                  const enum CBLAS_DIAG Diag, const int M, const int N,
438                  const float alpha, const float *A, const int lda,
439                  float *B, const int ldb);
440 void cblas_strsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
441                  const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
442                  const enum CBLAS_DIAG Diag, const int M, const int N,
443                  const float alpha, const float *A, const int lda,
444                  float *B, const int ldb);
445 
446 void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
447                  const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
448                  const int K, const double alpha, const double *A,
449                  const int lda, const double *B, const int ldb,
450                  const double beta, double *C, const int ldc);
451 void cblas_dsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
452                  const enum CBLAS_UPLO Uplo, const int M, const int N,
453                  const double alpha, const double *A, const int lda,
454                  const double *B, const int ldb, const double beta,
455                  double *C, const int ldc);
456 void cblas_dsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
457                  const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
458                  const double alpha, const double *A, const int lda,
459                  const double beta, double *C, const int ldc);
460 void cblas_dsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
461                   const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
462                   const double alpha, const double *A, const int lda,
463                   const double *B, const int ldb, const double beta,
464                   double *C, const int ldc);
465 void cblas_dtrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
466                  const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
467                  const enum CBLAS_DIAG Diag, const int M, const int N,
468                  const double alpha, const double *A, const int lda,
469                  double *B, const int ldb);
470 void cblas_dtrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
471                  const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
472                  const enum CBLAS_DIAG Diag, const int M, const int N,
473                  const double alpha, const double *A, const int lda,
474                  double *B, const int ldb);
475 
476 void cblas_cgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
477                  const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
478                  const int K, const void *alpha, const void *A,
479                  const int lda, const void *B, const int ldb,
480                  const void *beta, void *C, const int ldc);
481 void cblas_csymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
482                  const enum CBLAS_UPLO Uplo, const int M, const int N,
483                  const void *alpha, const void *A, const int lda,
484                  const void *B, const int ldb, const void *beta,
485                  void *C, const int ldc);
486 void cblas_csyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
487                  const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
488                  const void *alpha, const void *A, const int lda,
489                  const void *beta, void *C, const int ldc);
490 void cblas_csyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
491                   const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
492                   const void *alpha, const void *A, const int lda,
493                   const void *B, const int ldb, const void *beta,
494                   void *C, const int ldc);
495 void cblas_ctrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
496                  const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
497                  const enum CBLAS_DIAG Diag, const int M, const int N,
498                  const void *alpha, const void *A, const int lda,
499                  void *B, const int ldb);
500 void cblas_ctrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
501                  const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
502                  const enum CBLAS_DIAG Diag, const int M, const int N,
503                  const void *alpha, const void *A, const int lda,
504                  void *B, const int ldb);
505 
506 void cblas_zgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
507                  const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
508                  const int K, const void *alpha, const void *A,
509                  const int lda, const void *B, const int ldb,
510                  const void *beta, void *C, const int ldc);
511 void cblas_zsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
512                  const enum CBLAS_UPLO Uplo, const int M, const int N,
513                  const void *alpha, const void *A, const int lda,
514                  const void *B, const int ldb, const void *beta,
515                  void *C, const int ldc);
516 void cblas_zsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
517                  const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
518                  const void *alpha, const void *A, const int lda,
519                  const void *beta, void *C, const int ldc);
520 void cblas_zsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
521                   const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
522                   const void *alpha, const void *A, const int lda,
523                   const void *B, const int ldb, const void *beta,
524                   void *C, const int ldc);
525 void cblas_ztrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
526                  const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
527                  const enum CBLAS_DIAG Diag, const int M, const int N,
528                  const void *alpha, const void *A, const int lda,
529                  void *B, const int ldb);
530 void cblas_ztrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
531                  const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
532                  const enum CBLAS_DIAG Diag, const int M, const int N,
533                  const void *alpha, const void *A, const int lda,
534                  void *B, const int ldb);
535 
536 
537 /*
538  * Routines with prefixes C and Z only
539  */
540 void cblas_chemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
541                  const enum CBLAS_UPLO Uplo, const int M, const int N,
542                  const void *alpha, const void *A, const int lda,
543                  const void *B, const int ldb, const void *beta,
544                  void *C, const int ldc);
545 void cblas_cherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
546                  const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
547                  const float alpha, const void *A, const int lda,
548                  const float beta, void *C, const int ldc);
549 void cblas_cher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
550                   const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
551                   const void *alpha, const void *A, const int lda,
552                   const void *B, const int ldb, const float beta,
553                   void *C, const int ldc);
554 
555 void cblas_zhemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
556                  const enum CBLAS_UPLO Uplo, const int M, const int N,
557                  const void *alpha, const void *A, const int lda,
558                  const void *B, const int ldb, const void *beta,
559                  void *C, const int ldc);
560 void cblas_zherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
561                  const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
562                  const double alpha, const void *A, const int lda,
563                  const double beta, void *C, const int ldc);
564 void cblas_zher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
565                   const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
566                   const void *alpha, const void *A, const int lda,
567                   const void *B, const int ldb, const double beta,
568                   void *C, const int ldc);
569 
570 void cblas_xerbla(int p, const char *rout, const char *form, ...);
571 
572 #ifdef __cplusplus
573 }
574 #endif
575 #endif
576