1 /* ************************************************************************
2  * Copyright 2013 Advanced Micro Devices, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  * ************************************************************************/
16 
17 
18 /*
19  * cblas to lapack's blas interface adapter
20  */
21 
22 #include <blas-cblas.h>
23 
24 #if !defined CORR_TEST_WITH_ACML
25 
26 #include "blas-lapack.h"
27 #if defined(__APPLE__)
28 #include <Accelerate/Accelerate.h>
29 #endif
30 
31 void
sgemv(char transa,int m,int n,float alpha,float * a,int lda,float * x,int incx,float beta,float * y,int incy)32 sgemv(char transa, int m, int n, float alpha, float *a, int lda, float *x, int incx, float beta, float *y, int incy)
33 {
34     sgemv_(&transa, &m, &n, &alpha, a, &lda, x, &incx, &beta, y, &incy);
35 }
36 
37 void
dgemv(char transa,int m,int n,double alpha,double * a,int lda,double * x,int incx,double beta,double * y,int incy)38 dgemv(char transa, int m, int n, double alpha, double *a, int lda, double *x, int incx, double beta, double *y, int incy)
39 {
40     dgemv_(&transa, &m, &n, &alpha, a, &lda, x, &incx, &beta, y, &incy);
41 }
42 
43 void
cgemv(char transa,int m,int n,complex * alpha,complex * a,int lda,complex * x,int incx,complex * beta,complex * y,int incy)44 cgemv(char transa, int m, int n, complex *alpha, complex *a, int lda, complex *x, int incx, complex *beta, complex *y, int incy)
45 {
46     cgemv_(&transa, &m, &n, alpha, a, &lda, x, &incx, beta, y, &incy);
47 }
48 
49 void
zgemv(char transa,int m,int n,doublecomplex * alpha,doublecomplex * a,int lda,doublecomplex * x,int incx,doublecomplex * beta,doublecomplex * y,int incy)50 zgemv(char transa, int m, int n, doublecomplex *alpha, doublecomplex *a, int lda, doublecomplex *x, int incx, doublecomplex *beta, doublecomplex *y, int incy)
51 {
52     zgemv_(&transa, &m, &n, alpha, a, &lda, x, &incx, beta, y, &incy);
53 }
54 
55 void
ssymv(char uplo,int n,float alpha,float * a,int lda,float * x,int incx,float beta,float * y,int incy)56 ssymv(char uplo, int n, float alpha, float *a, int lda, float *x, int incx, float beta, float *y, int incy)
57 {
58     ssymv_(&uplo, &n, &alpha, a, &lda, x, &incx, &beta, y, &incy);
59 }
60 
61 void
dsymv(char uplo,int n,double alpha,double * a,int lda,double * x,int incx,double beta,double * y,int incy)62 dsymv(char uplo, int n, double alpha, double *a, int lda, double *x, int incx, double beta, double *y, int incy)
63 {
64     dsymv_(&uplo, &n, &alpha, a, &lda, x, &incx, &beta, y, &incy);
65 }
66 
67 void
sgemm(char transa,char transb,int m,int n,int k,float alpha,float * a,int lda,float * b,int ldb,float beta,float * c,int ldc)68 sgemm(char transa, char transb, int m, int n, int k, float alpha, float *a, int lda, float *b, int ldb, float beta, float *c, int ldc)
69 {
70     sgemm_(&transa, &transb, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc);
71 }
72 
73 void
dgemm(char transa,char transb,int m,int n,int k,double alpha,double * a,int lda,double * b,int ldb,double beta,double * c,int ldc)74 dgemm(char transa, char transb, int m, int n, int k, double alpha, double *a, int lda, double *b, int ldb, double beta, double *c, int ldc)
75 {
76     dgemm_(&transa, &transb, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc);
77 }
78 
79 void
cgemm(char transa,char transb,int m,int n,int k,complex * alpha,complex * a,int lda,complex * b,int ldb,complex * beta,complex * c,int ldc)80 cgemm(char transa, char transb, int m, int n, int k, complex *alpha, complex *a, int lda, complex *b, int ldb, complex *beta, complex *c, int ldc)
81 {
82     cgemm_(&transa, &transb, &m, &n, &k, alpha, a, &lda, b, &ldb, beta, c, &ldc);
83 }
84 
85 void
zgemm(char transa,char transb,int m,int n,int k,doublecomplex * alpha,doublecomplex * a,int lda,doublecomplex * b,int ldb,doublecomplex * beta,doublecomplex * c,int ldc)86 zgemm(char transa, char transb, int m, int n, int k, doublecomplex *alpha, doublecomplex *a, int lda, doublecomplex *b, int ldb, doublecomplex *beta, doublecomplex *c, int ldc)
87 {
88     zgemm_(&transa, &transb, &m, &n, &k, alpha, a, &lda, b, &ldb, beta, c, &ldc);
89 }
90 
91 void
strmm(char side,char uplo,char transa,char diag,int m,int n,float alpha,float * a,int lda,float * b,int ldb)92 strmm(char side, char uplo, char transa, char diag, int m, int n, float alpha, float *a, int lda, float *b, int ldb)
93 {
94     strmm_(&side, &uplo, &transa, &diag, &m, &n, &alpha, a, &lda, b, &ldb);
95 }
96 
97 void
dtrmm(char side,char uplo,char transa,char diag,int m,int n,double alpha,double * a,int lda,double * b,int ldb)98 dtrmm(char side, char uplo, char transa, char diag, int m, int n, double alpha, double *a, int lda, double *b, int ldb)
99 {
100     dtrmm_(&side, &uplo, &transa, &diag, &m, &n, &alpha, a, &lda, b, &ldb);
101 }
102 
103 void
ctrmm(char side,char uplo,char transa,char diag,int m,int n,complex * alpha,complex * a,int lda,complex * b,int ldb)104 ctrmm(char side, char uplo, char transa, char diag, int m, int n, complex *alpha, complex *a, int lda, complex *b, int ldb)
105 {
106     ctrmm_(&side, &uplo, &transa, &diag, &m, &n, alpha, a, &lda, b, &ldb);
107 }
108 
109 void
ztrmm(char side,char uplo,char transa,char diag,int m,int n,doublecomplex * alpha,doublecomplex * a,int lda,doublecomplex * b,int ldb)110 ztrmm(char side, char uplo, char transa, char diag, int m, int n, doublecomplex *alpha, doublecomplex *a, int lda, doublecomplex *b, int ldb)
111 {
112     ztrmm_(&side, &uplo, &transa, &diag, &m, &n, alpha, a, &lda, b, &ldb);
113 }
114 
115 void
strsm(char side,char uplo,char transa,char diag,int m,int n,float alpha,float * a,int lda,float * b,int ldb)116 strsm(char side, char uplo, char transa, char diag, int m, int n, float alpha, float *a, int lda, float *b, int ldb)
117 {
118     strsm_(&side, &uplo, &transa, &diag, &m, &n, &alpha, a, &lda, b, &ldb);
119 }
120 
121 void
dtrsm(char side,char uplo,char transa,char diag,int m,int n,double alpha,double * a,int lda,double * b,int ldb)122 dtrsm(char side, char uplo, char transa, char diag, int m, int n, double alpha, double *a, int lda, double *b, int ldb)
123 {
124     dtrsm_(&side, &uplo, &transa, &diag, &m, &n, &alpha, a, &lda, b, &ldb);
125 }
126 
127 void
ctrsm(char side,char uplo,char transa,char diag,int m,int n,complex * alpha,complex * a,int lda,complex * b,int ldb)128 ctrsm(char side, char uplo, char transa, char diag, int m, int n, complex *alpha, complex *a, int lda, complex *b, int ldb)
129 {
130     ctrsm_(&side, &uplo, &transa, &diag, &m, &n, alpha, a, &lda, b, &ldb);
131 }
132 
133 void
ztrsm(char side,char uplo,char transa,char diag,int m,int n,doublecomplex * alpha,doublecomplex * a,int lda,doublecomplex * b,int ldb)134 ztrsm(char side, char uplo, char transa, char diag, int m, int n, doublecomplex *alpha, doublecomplex *a, int lda, doublecomplex *b, int ldb)
135 {
136     ztrsm_(&side, &uplo, &transa, &diag, &m, &n, alpha, a, &lda, b, &ldb);
137 }
138 
139 void
ssyr2k(char uplo,char transa,int n,int k,float alpha,float * a,int lda,float * b,int ldb,float beta,float * c,int ldc)140 ssyr2k(char uplo, char transa, int n, int k, float alpha, float *a, int lda, float *b, int ldb, float beta, float *c, int ldc)
141 {
142     ssyr2k_(&uplo, &transa, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc);
143 }
144 
145 void
dsyr2k(char uplo,char transa,int n,int k,double alpha,double * a,int lda,double * b,int ldb,double beta,double * c,int ldc)146 dsyr2k(char uplo, char transa, int n, int k, double alpha, double *a, int lda, double *b, int ldb, double beta, double *c, int ldc)
147 {
148     dsyr2k_(&uplo, &transa, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc);
149 }
150 
151 void
csyr2k(char uplo,char transa,int n,int k,complex * alpha,complex * a,int lda,complex * b,int ldb,complex * beta,complex * c,int ldc)152 csyr2k(char uplo, char transa, int n, int k, complex *alpha, complex *a, int lda, complex *b, int ldb, complex *beta, complex *c, int ldc)
153 {
154     csyr2k_(&uplo, &transa, &n, &k, alpha, a, &lda, b, &ldb, beta, c, &ldc);
155 }
156 
157 void
zsyr2k(char uplo,char transa,int n,int k,doublecomplex * alpha,doublecomplex * a,int lda,doublecomplex * b,int ldb,doublecomplex * beta,doublecomplex * c,int ldc)158 zsyr2k(char uplo, char transa, int n, int k, doublecomplex *alpha, doublecomplex *a, int lda, doublecomplex *b, int ldb, doublecomplex *beta, doublecomplex *c, int ldc)
159 {
160     zsyr2k_(&uplo, &transa, &n, &k, alpha, a, &lda, b, &ldb, beta, c, &ldc);
161 }
162 
163 void
ssyrk(char uplo,char transa,int n,int k,float alpha,float * a,int lda,float beta,float * c,int ldc)164 ssyrk(char uplo, char transa, int n, int k, float alpha, float *a, int lda, float beta, float *c, int ldc)
165 {
166     ssyrk_(&uplo, &transa, &n, &k, &alpha, a, &lda, &beta, c, &ldc);
167 }
168 
169 void
dsyrk(char uplo,char transa,int n,int k,double alpha,double * a,int lda,double beta,double * c,int ldc)170 dsyrk(char uplo, char transa, int n, int k, double alpha, double *a, int lda, double beta, double *c, int ldc)
171 {
172     dsyrk_(&uplo, &transa, &n, &k, &alpha, a, &lda, &beta, c, &ldc);
173 }
174 
175 void
csyrk(char uplo,char transa,int n,int k,complex * alpha,complex * a,int lda,complex * beta,complex * c,int ldc)176 csyrk(char uplo, char transa, int n, int k, complex *alpha, complex *a, int lda, complex *beta, complex *c, int ldc)
177 {
178     csyrk_(&uplo, &transa, &n, &k, alpha, a, &lda, beta, c, &ldc);
179 }
180 
181 void
zsyrk(char uplo,char transa,int n,int k,doublecomplex * alpha,doublecomplex * a,int lda,doublecomplex * beta,doublecomplex * c,int ldc)182 zsyrk(char uplo, char transa, int n, int k, doublecomplex *alpha, doublecomplex *a, int lda, doublecomplex *beta, doublecomplex *c, int ldc)
183 {
184     zsyrk_(&uplo, &transa, &n, &k, alpha, a, &lda, beta, c, &ldc);
185 }
186 
187 void
strmv(char uplo,char transa,char diag,int n,float * a,int lda,float * x,int incx)188 strmv(char uplo, char transa, char diag, int n, float *a, int lda, float *x, int incx)
189 {
190    strmv_( &uplo, &transa, &diag, &n, a, &lda, x, &incx);
191 }
192 
193 void
dtrmv(char uplo,char transa,char diag,int n,double * a,int lda,double * x,int incx)194 dtrmv(char uplo, char transa, char diag, int n, double *a, int lda, double *x, int incx)
195 {
196    dtrmv_( &uplo, &transa, &diag, &n, a, &lda, x, &incx);
197 }
198 
199 void
ctrmv(char uplo,char transa,char diag,int n,complex * a,int lda,complex * x,int incx)200 ctrmv(char uplo, char transa, char diag, int n, complex *a, int lda, complex *x, int incx)
201 {
202    ctrmv_( &uplo, &transa, &diag, &n, a, &lda, x, &incx);
203 }
204 
205 void
ztrmv(char uplo,char transa,char diag,int n,doublecomplex * a,int lda,doublecomplex * x,int incx)206 ztrmv(char uplo, char transa, char diag, int n, doublecomplex *a, int lda, doublecomplex *x, int incx)
207 {
208    ztrmv_( &uplo, &transa, &diag, &n, a, &lda, x, &incx);
209 }
210 
211 void
strsv(char uplo,char transa,char diag,int n,float * a,int lda,float * x,int incx)212 strsv(char uplo, char transa, char diag, int n, float *a, int lda, float *x, int incx)
213 {
214    strsv_( &uplo, &transa, &diag, &n, a, &lda, x, &incx);
215 }
216 
217 void
dtrsv(char uplo,char transa,char diag,int n,double * a,int lda,double * x,int incx)218 dtrsv(char uplo, char transa, char diag, int n, double *a, int lda, double *x, int incx)
219 {
220    dtrsv_( &uplo, &transa, &diag, &n, a, &lda, x, &incx);
221 }
222 
223 void
ctrsv(char uplo,char transa,char diag,int n,complex * a,int lda,complex * x,int incx)224 ctrsv(char uplo, char transa, char diag, int n, complex *a, int lda, complex *x, int incx)
225 {
226    ctrsv_( &uplo, &transa, &diag, &n, a, &lda, x, &incx);
227 }
228 
229 void
ztrsv(char uplo,char transa,char diag,int n,doublecomplex * a,int lda,doublecomplex * x,int incx)230 ztrsv(char uplo, char transa, char diag, int n, doublecomplex *a, int lda, doublecomplex *x, int incx)
231 {
232    ztrsv_( &uplo, &transa, &diag, &n, a, &lda, x, &incx);
233 }
234 
235 void
ssymm(char side,char uplo,int m,int n,float alpha,float * a,int lda,float * b,int ldb,float beta,float * c,int ldc)236 ssymm(char side, char uplo, int m, int n, float alpha, float *a, int lda, float *b, int ldb, float beta, float *c, int ldc)
237 {
238    ssymm_( &side, &uplo, &m, &n, &alpha, a, &lda, b, &ldb, &beta, c, &ldc);
239 }
240 
241 void
dsymm(char side,char uplo,int m,int n,double alpha,double * a,int lda,double * b,int ldb,double beta,double * c,int ldc)242 dsymm(char side, char uplo, int m, int n, double alpha, double *a, int lda, double *b, int ldb, double beta, double *c, int ldc)
243 {
244    dsymm_( &side, &uplo, &m, &n, &alpha, a, &lda, b, &ldb, &beta, c, &ldc);
245 }
246 
247 void
csymm(char side,char uplo,int m,int n,complex * alpha,complex * a,int lda,complex * b,int ldb,complex * beta,complex * c,int ldc)248 csymm(char side, char uplo, int m, int n, complex *alpha, complex *a, int lda, complex *b, int ldb, complex *beta, complex *c, int ldc)
249 {
250    csymm_( &side, &uplo, &m, &n, alpha, a, &lda, b, &ldb, beta, c, &ldc);
251 }
252 
253 void
zsymm(char side,char uplo,int m,int n,doublecomplex * alpha,doublecomplex * a,int lda,doublecomplex * b,int ldb,doublecomplex * beta,doublecomplex * c,int ldc)254 zsymm(char side, char uplo, int m, int n, doublecomplex *alpha, doublecomplex *a, int lda, doublecomplex *b, int ldb, doublecomplex *beta, doublecomplex *c, int ldc)
255 {
256    zsymm_( &side, &uplo, &m, &n, alpha, a, &lda, b, &ldb, beta, c, &ldc);
257 }
258 
259 void
sger(int m,int n,float alpha,float * x,int incx,float * y,int incy,float * a,int lda)260 sger(int m, int n, float alpha, float *x, int incx, float *y, int incy, float *a, int lda)
261 {
262    sger_( &m, &n, &alpha, x, &incx, y, &incy, a, &lda);
263 }
264 
265 void
dger(int m,int n,double alpha,double * x,int incx,double * y,int incy,double * a,int lda)266 dger(int m, int n, double alpha, double *x, int incx, double *y, int incy, double *a, int lda)
267 {
268    dger_( &m, &n, &alpha, x, &incx, y, &incy, a, &lda);
269 }
270 
271 void
cgeru(int m,int n,complex * alpha,complex * x,int incx,complex * y,int incy,complex * a,int lda)272 cgeru(int m, int n, complex *alpha, complex *x, int incx, complex *y, int incy, complex *a, int lda)
273 {
274    cgeru_( &m, &n, alpha, x, &incx, y, &incy, a, &lda);
275 }
276 
277 void
zgeru(int m,int n,doublecomplex * alpha,doublecomplex * x,int incx,doublecomplex * y,int incy,doublecomplex * a,int lda)278 zgeru(int m, int n, doublecomplex *alpha, doublecomplex *x, int incx, doublecomplex *y, int incy, doublecomplex *a, int lda)
279 {
280    zgeru_( &m, &n, alpha, x, &incx, y, &incy, a, &lda);
281 }
282 
283 void
cgerc(int m,int n,complex * alpha,complex * x,int incx,complex * y,int incy,complex * a,int lda)284 cgerc(int m, int n, complex *alpha, complex *x, int incx, complex *y, int incy, complex *a, int lda)
285 {
286    cgerc_( &m, &n, alpha, x, &incx, y, &incy, a, &lda);
287 }
288 
289 void
zgerc(int m,int n,doublecomplex * alpha,doublecomplex * x,int incx,doublecomplex * y,int incy,doublecomplex * a,int lda)290 zgerc(int m, int n, doublecomplex *alpha, doublecomplex *x, int incx, doublecomplex *y, int incy, doublecomplex *a, int lda)
291 {
292    zgerc_( &m, &n, alpha, x, &incx, y, &incy, a, &lda);
293 }
294 
295 void
ssyr(char uplo,int n,float alpha,float * x,int incx,float * a,int lda)296 ssyr(char uplo, int n, float alpha, float *x, int incx, float *a, int lda)
297 {
298    ssyr_( &uplo, &n, &alpha, x, &incx, a, &lda);
299 }
300 
301 void
dsyr(char uplo,int n,double alpha,double * x,int incx,double * a,int lda)302 dsyr(char uplo, int n, double alpha, double *x, int incx, double *a, int lda)
303 {
304    dsyr_( &uplo, &n, &alpha, x, &incx, a, &lda);
305 }
306 
307 void
ssyr2(char uplo,int n,float alpha,float * x,int incx,float * y,int incy,float * a,int lda)308 ssyr2(char uplo, int n, float alpha, float *x, int incx, float *y, int incy, float *a, int lda)
309 {
310    ssyr2_( &uplo, &n, &alpha, x, &incx, y, &incy, a, &lda);
311 }
312 
313 void
dsyr2(char uplo,int n,double alpha,double * x,int incx,double * y,int incy,double * a,int lda)314 dsyr2(char uplo, int n, double alpha, double *x, int incx, double *y, int incy, double *a, int lda)
315 {
316    dsyr2_( &uplo, &n, &alpha, x, &incx, y, &incy, a, &lda);
317 }
318 
319 void
cher(char uplo,int n,float alpha,complex * x,int incx,complex * a,int lda)320 cher(char uplo, int n, float alpha, complex *x, int incx, complex *a, int lda)
321 {
322    cher_( &uplo, &n, &alpha, x, &incx, a, &lda);
323 }
324 
325 void
zher(char uplo,int n,double alpha,doublecomplex * x,int incx,doublecomplex * a,int lda)326 zher(char uplo, int n, double alpha, doublecomplex *x, int incx, doublecomplex *a, int lda)
327 {
328    zher_( &uplo, &n, &alpha, x, &incx, a, &lda);
329 }
330 
331 void
cher2(char uplo,int n,complex * alpha,complex * x,int incx,complex * y,int incy,complex * a,int lda)332 cher2(char uplo, int n, complex *alpha, complex *x, int incx, complex *y, int incy, complex *a, int lda)
333 {
334    cher2_( &uplo, &n, alpha, x, &incx, y, &incy, a, &lda);
335 }
336 
337 void
zher2(char uplo,int n,doublecomplex * alpha,doublecomplex * x,int incx,doublecomplex * y,int incy,doublecomplex * a,int lda)338 zher2(char uplo, int n, doublecomplex *alpha, doublecomplex *x, int incx, doublecomplex *y, int incy, doublecomplex *a, int lda)
339 {
340    zher2_( &uplo, &n, alpha, x, &incx, y, &incy, a, &lda);
341 }
342 
343 void
chemv(char uplo,int n,complex * alpha,complex * a,int lda,complex * x,int incx,complex * beta,complex * y,int incy)344 chemv(char uplo, int n, complex *alpha, complex *a, int lda, complex *x, int incx, complex *beta, complex *y, int incy)
345 {
346    chemv_( &uplo, &n, alpha, a, &lda, x, &incx, beta, y, &incy );
347 }
348 
349 void
zhemv(char uplo,int n,doublecomplex * alpha,doublecomplex * a,int lda,doublecomplex * x,int incx,doublecomplex * beta,doublecomplex * y,int incy)350 zhemv(char uplo, int n, doublecomplex *alpha, doublecomplex *a, int lda, doublecomplex *x, int incx, doublecomplex *beta, doublecomplex *y, int incy)
351 {
352    zhemv_( &uplo, &n, alpha, a, &lda, x, &incx, beta, y, &incy );
353 }
354 
355 void
stpmv(char uplo,char transa,char diag,int n,float * ap,float * x,int incx)356 stpmv(char uplo, char transa, char diag, int n, float *ap, float *x, int incx)
357 {
358    stpmv_( &uplo, &transa, &diag, &n, ap, x, &incx);
359 }
360 
361 void
dtpmv(char uplo,char transa,char diag,int n,double * ap,double * x,int incx)362 dtpmv(char uplo, char transa, char diag, int n, double *ap, double *x, int incx)
363 {
364    dtpmv_( &uplo, &transa, &diag, &n, ap, x, &incx);
365 }
366 
367 void
ctpmv(char uplo,char transa,char diag,int n,complex * ap,complex * x,int incx)368 ctpmv(char uplo, char transa, char diag, int n, complex *ap, complex *x, int incx)
369 {
370    ctpmv_( &uplo, &transa, &diag, &n, ap, x, &incx);
371 }
372 
373 void
ztpmv(char uplo,char transa,char diag,int n,doublecomplex * ap,doublecomplex * x,int incx)374 ztpmv(char uplo, char transa, char diag, int n, doublecomplex *ap, doublecomplex *x, int incx)
375 {
376    ztpmv_( &uplo, &transa, &diag, &n, ap, x, &incx);
377 }
378 
379 void
stpsv(char uplo,char transa,char diag,int n,float * ap,float * x,int incx)380 stpsv(char uplo, char transa, char diag, int n, float *ap, float *x, int incx)
381 {
382    stpsv_( &uplo, &transa, &diag, &n, ap, x, &incx);
383 }
384 
385 void
dtpsv(char uplo,char transa,char diag,int n,double * ap,double * x,int incx)386 dtpsv(char uplo, char transa, char diag, int n, double *ap, double *x, int incx)
387 {
388    dtpsv_( &uplo, &transa, &diag, &n, ap, x, &incx);
389 }
390 
391 void
ctpsv(char uplo,char transa,char diag,int n,complex * ap,complex * x,int incx)392 ctpsv(char uplo, char transa, char diag, int n, complex *ap, complex *x, int incx)
393 {
394    ctpsv_( &uplo, &transa, &diag, &n, ap, x, &incx);
395 }
396 
397 void
ztpsv(char uplo,char transa,char diag,int n,doublecomplex * ap,doublecomplex * x,int incx)398 ztpsv(char uplo, char transa, char diag, int n, doublecomplex *ap, doublecomplex *x, int incx)
399 {
400    ztpsv_( &uplo, &transa, &diag, &n, ap, x, &incx);
401 }
402 
403 void
sspr(char uplo,int n,float alpha,float * x,int incx,float * ap)404 sspr(char uplo, int n, float alpha, float *x, int incx, float *ap )
405 {
406    sspr_( &uplo, &n, &alpha, x, &incx, ap );
407 }
408 
409 void
dspr(char uplo,int n,double alpha,double * x,int incx,double * ap)410 dspr(char uplo, int n, double alpha, double *x, int incx, double *ap )
411 {
412    dspr_( &uplo, &n, &alpha, x, &incx, ap );
413 }
414 
415 void
sspmv(char uplo,int n,float alpha,float * ap,float * x,int incx,float beta,float * y,int incy)416 sspmv(char uplo, int n, float alpha, float *ap, float *x, int incx, float beta, float *y, int incy)
417 {
418    sspmv_( &uplo, &n, &alpha, ap, x, &incx, &beta, y, &incy );
419 }
420 
421 void
dspmv(char uplo,int n,double alpha,double * ap,double * x,int incx,double beta,double * y,int incy)422 dspmv(char uplo, int n, double alpha, double *ap, double *x, int incx, double beta, double *y, int incy)
423 {
424    dspmv_( &uplo, &n, &alpha, ap, x, &incx, &beta, y, &incy );
425 }
426 
427 void
chpmv(char uplo,int n,complex * alpha,complex * ap,complex * x,int incx,complex * beta,complex * y,int incy)428 chpmv(char uplo, int n, complex *alpha, complex *ap, complex *x, int incx, complex *beta, complex *y, int incy)
429 {
430    chpmv_( &uplo, &n, alpha, ap, x, &incx, beta, y, &incy );
431 }
432 
433 void
zhpmv(char uplo,int n,doublecomplex * alpha,doublecomplex * ap,doublecomplex * x,int incx,doublecomplex * beta,doublecomplex * y,int incy)434 zhpmv(char uplo, int n, doublecomplex *alpha, doublecomplex *ap, doublecomplex *x, int incx, doublecomplex *beta, doublecomplex *y, int incy)
435 {
436    zhpmv_( &uplo, &n, alpha, ap, x, &incx, beta, y, &incy );
437 }
438 
439 void
chpr(char uplo,int n,float alpha,complex * x,int incx,complex * ap)440 chpr(char uplo, int n, float alpha, complex *x, int incx, complex *ap )
441 {
442    chpr_( &uplo, &n, &alpha, x, &incx, ap );
443 }
444 
445 void
zhpr(char uplo,int n,double alpha,doublecomplex * x,int incx,doublecomplex * ap)446 zhpr(char uplo, int n, double alpha, doublecomplex *x, int incx, doublecomplex *ap )
447 {
448    zhpr_( &uplo, &n, &alpha, x, &incx, ap );
449 }
450 
451 void
sspr2(char uplo,int n,float alpha,float * x,int incx,float * y,int incy,float * a)452 sspr2(char uplo, int n, float alpha, float *x, int incx, float *y, int incy, float *a )
453 {
454    sspr2_( &uplo, &n, &alpha, x, &incx, y, &incy, a );
455 }
456 void
dspr2(char uplo,int n,double alpha,double * x,int incx,double * y,int incy,double * a)457 dspr2(char uplo, int n, double alpha, double *x, int incx, double *y, int incy, double *a )
458 {
459    dspr2_( &uplo, &n, &alpha, x, &incx, y, &incy, a );
460 }
461 void
chpr2(char uplo,int n,complex * alpha,complex * x,int incx,complex * y,int incy,complex * a)462 chpr2(char uplo, int n, complex *alpha, complex *x, int incx, complex *y, int incy, complex *a )
463 {
464    chpr2_( &uplo, &n, alpha, x, &incx, y, &incy, a );
465 }
466 void
zhpr2(char uplo,int n,doublecomplex * alpha,doublecomplex * x,int incx,doublecomplex * y,int incy,doublecomplex * a)467 zhpr2(char uplo, int n, doublecomplex *alpha, doublecomplex *x, int incx, doublecomplex *y, int incy, doublecomplex *a )
468 {
469    zhpr2_( &uplo, &n, alpha, x, &incx, y, &incy, a );
470 }
471 
472 void
sgbmv(char trans,int m,int n,int kl,int ku,float alpha,float * a,int inca,float * x,int incx,float beta,float * y,int incy)473 sgbmv(char trans, int m, int n, int kl, int ku, float alpha, float *a, int inca, float *x, int incx, float beta, float *y, int incy )
474 {
475    sgbmv_( &trans, &m, &n, &kl, &ku, &alpha, a, &inca, x, &incx, &beta, y, &incy );
476 }
477 void
dgbmv(char trans,int m,int n,int kl,int ku,double alpha,double * a,int inca,double * x,int incx,double beta,double * y,int incy)478 dgbmv(char trans, int m, int n, int kl, int ku, double alpha, double *a, int inca, double *x, int incx, double beta, double *y, int incy )
479 {
480    dgbmv_( &trans, &m, &n, &kl, &ku, &alpha, a, &inca, x, &incx, &beta, y, &incy );
481 }
482 void
cgbmv(char trans,int m,int n,int kl,int ku,complex * alpha,complex * a,int inca,complex * x,int incx,complex * beta,complex * y,int incy)483 cgbmv(char trans, int m, int n, int kl, int ku, complex *alpha, complex *a, int inca, complex *x, int incx, complex *beta, complex *y, int incy )
484 {
485    cgbmv_( &trans, &m, &n, &kl, &ku, alpha, a, &inca, x, &incx, beta, y, &incy );
486 }
487 void
zgbmv(char trans,int m,int n,int kl,int ku,doublecomplex * alpha,doublecomplex * a,int inca,doublecomplex * x,int incx,doublecomplex * beta,doublecomplex * y,int incy)488 zgbmv(char trans, int m, int n, int kl, int ku, doublecomplex *alpha, doublecomplex *a, int inca, doublecomplex *x, int incx, doublecomplex *beta, doublecomplex *y, int incy )
489 {
490    zgbmv_( &trans, &m, &n, &kl, &ku, alpha, a, &inca, x, &incx, beta, y, &incy );
491 }
492 
493 void
stbmv(char uplo,char trans,char diag,int n,int k,float * a,int lda,float * x,int incx)494 stbmv(char uplo, char trans, char diag, int n, int k, float *a, int lda, float *x, int incx )
495 {
496    stbmv_( &uplo, &trans, &diag, &n, &k, a, &lda, x, &incx );
497 }
498 
499 void
dtbmv(char uplo,char trans,char diag,int n,int k,double * a,int lda,double * x,int incx)500 dtbmv(char uplo, char trans, char diag, int n, int k, double *a, int lda, double *x, int incx )
501 {
502    dtbmv_( &uplo, &trans, &diag, &n, &k, a, &lda, x, &incx );
503 }
504 
505 void
ctbmv(char uplo,char trans,char diag,int n,int k,complex * a,int lda,complex * x,int incx)506 ctbmv(char uplo, char trans, char diag, int n, int k, complex *a, int lda, complex *x, int incx )
507 {
508    ctbmv_( &uplo, &trans, &diag, &n, &k, a, &lda, x, &incx );
509 }
510 
511 void
ztbmv(char uplo,char trans,char diag,int n,int k,doublecomplex * a,int lda,doublecomplex * x,int incx)512 ztbmv(char uplo, char trans, char diag, int n, int k, doublecomplex *a, int lda, doublecomplex *x, int incx )
513 {
514    ztbmv_( &uplo, &trans, &diag, &n, &k, a, &lda, x, &incx );
515 }
516 
517 void
ssbmv(char uplo,int n,int k,float alpha,float * a,int lda,float * x,int incx,float beta,float * y,int incy)518 ssbmv(char uplo, int n, int k, float alpha, float *a, int lda, float *x, int incx, float beta, float *y, int incy )
519 {
520    ssbmv_( &uplo, &n, &k, &alpha, a, &lda, x, &incx, &beta, y, &incy );
521 }
522 
523 void
dsbmv(char uplo,int n,int k,double alpha,double * a,int lda,double * x,int incx,double beta,double * y,int incy)524 dsbmv(char uplo, int n, int k, double alpha, double *a, int lda, double *x, int incx, double beta, double *y, int incy )
525 {
526    dsbmv_( &uplo, &n, &k, &alpha, a, &lda, x, &incx, &beta, y, &incy );
527 }
528 
529 void
chbmv(char uplo,int n,int k,complex * alpha,complex * a,int lda,complex * x,int incx,complex * beta,complex * y,int incy)530 chbmv(char uplo, int n, int k, complex *alpha, complex *a, int lda, complex *x, int incx, complex *beta, complex *y, int incy )
531 {
532    chbmv_( &uplo, &n, &k, alpha, a, &lda, x, &incx, beta, y, &incy );
533 }
534 
535 void
zhbmv(char uplo,int n,int k,doublecomplex * alpha,doublecomplex * a,int lda,doublecomplex * x,int incx,doublecomplex * beta,doublecomplex * y,int incy)536 zhbmv(char uplo, int n, int k, doublecomplex *alpha, doublecomplex *a, int lda, doublecomplex *x, int incx, doublecomplex *beta, doublecomplex *y, int incy )
537 {
538    zhbmv_( &uplo, &n, &k, alpha, a, &lda, x, &incx, beta, y, &incy );
539 }
540 
541 void
stbsv(char uplo,char trans,char diag,int n,int k,float * a,int lda,float * x,int incx)542 stbsv(char uplo, char trans, char diag, int n, int k, float *a, int lda, float *x, int incx )
543 {
544    stbsv_( &uplo, &trans, &diag, &n, &k, a, &lda, x, &incx );
545 }
546 
547 void
dtbsv(char uplo,char trans,char diag,int n,int k,double * a,int lda,double * x,int incx)548 dtbsv(char uplo, char trans, char diag, int n, int k, double *a, int lda, double *x, int incx )
549 {
550    dtbsv_( &uplo, &trans, &diag, &n, &k, a, &lda, x, &incx );
551 }
552 
553 void
ctbsv(char uplo,char trans,char diag,int n,int k,complex * a,int lda,complex * x,int incx)554 ctbsv(char uplo, char trans, char diag, int n, int k, complex *a, int lda, complex *x, int incx )
555 {
556    ctbsv_( &uplo, &trans, &diag, &n, &k, a, &lda, x, &incx );
557 }
558 
559 void
ztbsv(char uplo,char trans,char diag,int n,int k,doublecomplex * a,int lda,doublecomplex * x,int incx)560 ztbsv(char uplo, char trans, char diag, int n, int k, doublecomplex *a, int lda, doublecomplex *x, int incx )
561 {
562    ztbsv_( &uplo, &trans, &diag, &n, &k, a, &lda, x, &incx );
563 }
564 
565 void
chemm(char side,char uplo,int m,int n,complex * alpha,complex * a,int lda,complex * b,int ldb,complex * beta,complex * c,int ldc)566 chemm(char side, char uplo, int m, int n, complex *alpha, complex *a, int lda, complex *b, int ldb, complex *beta, complex *c, int ldc)
567 {
568    chemm_( &side, &uplo, &m, &n, alpha, a, &lda, b, &ldb, beta, c, &ldc);
569 }
570 
571 void
zhemm(char side,char uplo,int m,int n,doublecomplex * alpha,doublecomplex * a,int lda,doublecomplex * b,int ldb,doublecomplex * beta,doublecomplex * c,int ldc)572 zhemm(char side, char uplo, int m, int n, doublecomplex *alpha, doublecomplex *a, int lda, doublecomplex *b, int ldb, doublecomplex *beta, doublecomplex *c, int ldc)
573 {
574    zhemm_( &side, &uplo, &m, &n, alpha, a, &lda, b, &ldb, beta, c, &ldc);
575 }
576 
577 void
cherk(char uplo,char transa,int n,int k,float alpha,complex * a,int lda,float beta,complex * c,int ldc)578 cherk(char uplo, char transa, int n, int k, float alpha, complex *a, int lda, float beta, complex *c, int ldc)
579 {
580    cherk_( &uplo, &transa, &n, &k, &alpha, a, &lda, &beta, c, &ldc);
581 }
582 
583 void
zherk(char uplo,char transa,int n,int k,double alpha,doublecomplex * a,int lda,double beta,doublecomplex * c,int ldc)584 zherk(char uplo, char transa, int n, int k, double alpha, doublecomplex *a, int lda, double beta, doublecomplex *c, int ldc)
585 {
586    zherk_( &uplo, &transa, &n, &k, &alpha, a, &lda, &beta, c, &ldc);
587 }
588 
589 void
cher2k(char uplo,char transa,int n,int k,complex * alpha,complex * a,int lda,complex * b,int ldb,float beta,complex * c,int ldc)590 cher2k(char uplo, char transa, int n, int k, complex *alpha, complex *a, int lda, complex *b, int ldb, float beta, complex *c, int ldc)
591 {
592    cher2k_( &uplo, &transa, &n, &k, alpha, a, &lda, b, &ldb, &beta, c, &ldc);
593 }
594 
595 void
zher2k(char uplo,char transa,int n,int k,doublecomplex * alpha,doublecomplex * a,int lda,doublecomplex * b,int ldb,double beta,doublecomplex * c,int ldc)596 zher2k(char uplo, char transa, int n, int k, doublecomplex *alpha, doublecomplex *a, int lda, doublecomplex *b, int ldb, double beta, doublecomplex *c, int ldc)
597 {
598    zher2k_( &uplo, &transa, &n, &k, alpha, a, &lda, b, &ldb, &beta, c, &ldc);
599 }
600 
sscal(int n,float alpha,float * x,int incx)601 void sscal( int n, float alpha, float *x, int incx)
602 {
603     sscal_(&n, &alpha, x, &incx);
604 }
605 
dscal(int n,double alpha,double * x,int incx)606 void dscal( int n, double alpha, double *x, int incx)
607 {
608     dscal_(&n, &alpha, x, &incx);
609 }
610 
cscal(int n,complex * alpha,complex * x,int incx)611 void cscal( int n, complex* alpha, complex *x, int incx)
612 {
613     cscal_(&n, alpha, x, &incx);
614 }
615 
zscal(int n,doublecomplex * alpha,doublecomplex * x,int incx)616 void zscal( int n, doublecomplex* alpha, doublecomplex *x, int incx)
617 {
618     zscal_(&n, alpha, x, &incx);
619 }
620 
csscal(int n,float alpha,complex * x,int incx)621 void csscal( int n, float alpha, complex *x, int incx)
622 {
623     csscal_(&n, &alpha, x, &incx);
624 }
625 
zdscal(int n,double alpha,doublecomplex * x,int incx)626 void zdscal( int n, double alpha, doublecomplex *x, int incx)
627 {
628     zdscal_(&n, &alpha, x, &incx);
629 }
630 
sdot(int n,float * x,int incx,float * y,int incy)631 float sdot( int n, float *x, int incx,  float *y, int incy)
632 {
633 #ifdef __APPLE__
634     return cblas_sdot(n, x, incx, y, incy);
635 #else
636     return sdot_(&n, x, &incx, y, &incy);
637 #endif
638 }
639 
ddot(int n,double * x,int incx,double * y,int incy)640 double ddot( int n, double *x, int incx,  double *y, int incy)
641 {
642 #ifdef __APPLE__
643     return cblas_ddot(n, x, incx, y, incy);
644 #else
645     return ddot_(&n, x, &incx, y, &incy);
646 #endif
647 }
648 
cdotu(int n,complex * x,int incx,complex * y,int incy)649 complex cdotu( int n, complex *x, int incx, complex *y, int incy)
650 {
651     complex ans;
652 
653 #if defined( _WIN32 ) || defined( _WIN64 )
654         ans = cdotu_(&n, x, &incx, y, &incy);
655     #elif defined( __APPLE__)
656         cblas_cdotu_sub(n, x, incx, y, incy, &ans);
657     #else
658         cdotusub_(&n, x, &incx, y, &incy, &ans);
659     #endif
660 
661     return ans;
662 }
663 
zdotu(int n,doublecomplex * x,int incx,doublecomplex * y,int incy)664 doublecomplex zdotu( int n, doublecomplex *x, int incx,  doublecomplex *y, int incy)
665 {
666     doublecomplex ans;
667 
668     #if defined( _WIN32 ) || defined( _WIN64 )
669         ans = zdotu_(&n, x, &incx, y, &incy);
670     #elif defined(__APPLE__)
671         cblas_zdotu_sub(n, x, incx, y, incy, &ans);
672     #else
673         zdotusub_(&n, x, &incx, y, &incy, &ans);
674     #endif
675 
676     return ans;
677 }
678 
cdotc(int n,complex * x,int incx,complex * y,int incy)679 complex cdotc( int n, complex *x, int incx, complex *y, int incy)
680 {
681     complex ans;
682 
683     #if defined( _WIN32 ) || defined( _WIN64 )
684         ans = cdotc_(&n, x, &incx, y, &incy);
685     #elif defined(__APPLE__)
686         cblas_cdotc_sub(n, x, incx, y, incy, &ans);
687     #else
688         cdotcsub_(&n, x, &incx, y, &incy, &ans);
689     #endif
690 
691     return ans;
692 }
693 
zdotc(int n,doublecomplex * x,int incx,doublecomplex * y,int incy)694 doublecomplex zdotc( int n, doublecomplex *x, int incx,  doublecomplex *y, int incy)
695 {
696     doublecomplex ans;
697 
698     #if defined( _WIN32 ) || defined( _WIN64 )
699         ans = zdotc_(&n, x, &incx, y, &incy);
700     #elif defined(__APPLE__)
701         cblas_zdotc_sub(n, x, incx, y, incy, &ans);
702     #else
703         zdotcsub_(&n, x, &incx, y, &incy, &ans);
704     #endif
705 
706     return ans;
707 }
708 
scopy(int n,float * x,int incx,float * y,int incy)709 void scopy( int n, float *x, int incx,  float *y, int incy)
710 {
711     scopy_(&n, x, &incx, y, &incy);
712 }
713 
dcopy(int n,double * x,int incx,double * y,int incy)714 void dcopy( int n, double *x, int incx,  double *y, int incy)
715 {
716     dcopy_(&n, x, &incx, y, &incy);
717 }
718 
ccopy(int n,complex * x,int incx,complex * y,int incy)719 void ccopy( int n, complex *x, int incx,  complex *y, int incy)
720 {
721     ccopy_(&n, x, &incx, y, &incy);
722 }
723 
zcopy(int n,doublecomplex * x,int incx,doublecomplex * y,int incy)724 void zcopy( int n, doublecomplex *x, int incx,  doublecomplex *y, int incy)
725 {
726     zcopy_(&n, x, &incx, y, &incy);
727 }
728 
sswap(int n,float * x,int incx,float * y,int incy)729 void sswap( int n, float *x, int incx,  float *y, int incy)
730 {
731     sswap_(&n, x, &incx, y, &incy);
732 }
733 
dswap(int n,double * x,int incx,double * y,int incy)734 void dswap( int n, double *x, int incx,  double *y, int incy)
735 {
736     dswap_(&n, x, &incx, y, &incy);
737 }
738 
cswap(int n,complex * x,int incx,complex * y,int incy)739 void cswap( int n, complex *x, int incx,  complex *y, int incy)
740 {
741     cswap_(&n, x, &incx, y, &incy);
742 }
743 
zswap(int n,doublecomplex * x,int incx,doublecomplex * y,int incy)744 void zswap( int n, doublecomplex *x, int incx,  doublecomplex *y, int incy)
745 {
746     zswap_(&n, x, &incx, y, &incy);
747 }
748 
saxpy(int n,float alpha,float * x,int incx,float * y,int incy)749 void saxpy( int n, float alpha, float *x, int incx,  float *y, int incy)
750 {
751     saxpy_(&n, &alpha, x, &incx, y, &incy);
752 }
753 
daxpy(int n,double alpha,double * x,int incx,double * y,int incy)754 void daxpy( int n, double alpha, double *x, int incx,  double *y, int incy)
755 {
756     daxpy_(&n, &alpha, x, &incx, y, &incy);
757 }
758 
caxpy(int n,complex * alpha,complex * x,int incx,complex * y,int incy)759 void caxpy( int n, complex *alpha, complex *x, int incx,  complex *y, int incy)
760 {
761     caxpy_(&n, alpha, x, &incx, y, &incy);
762 }
763 
zaxpy(int n,doublecomplex * alpha,doublecomplex * x,int incx,doublecomplex * y,int incy)764 void zaxpy( int n, doublecomplex *alpha, doublecomplex *x, int incx,  doublecomplex *y, int incy)
765 {
766     zaxpy_(&n, alpha, x, &incx, y, &incy);
767 }
768 
srotg(float * A,float * B,float * C,float * S)769 void srotg(float *A, float *B, float *C, float *S)
770 {
771     srotg_(A, B, C, S);
772 }
773 
drotg(double * A,double * B,double * C,double * S)774 void drotg(double *A, double *B, double *C, double *S)
775 {
776     drotg_(A, B, C, S);
777 }
778 
crotg(complex * A,complex * B,float * C,complex * S)779 void crotg(complex *A, complex *B, float *C, complex *S)
780 {
781     crotg_(A, B, C, S);
782 }
783 
zrotg(doublecomplex * A,doublecomplex * B,double * C,doublecomplex * S)784 void zrotg(doublecomplex *A, doublecomplex *B, double *C, doublecomplex *S)
785 {
786     zrotg_(A, B, C, S);
787 }
788 
srotmg(float * D1,float * D2,float * X1,const float * Y1,float * PARAM)789 void srotmg(float *D1, float *D2, float *X1, const float *Y1, float *PARAM)
790 {
791     srotmg_(D1, D2, X1, (float*)Y1, PARAM);
792 }
793 
drotmg(double * D1,double * D2,double * X1,const double * Y1,double * PARAM)794 void drotmg(double *D1, double *D2, double *X1, const double *Y1, double *PARAM)
795 {
796     drotmg_(D1, D2, X1, (double*)Y1, PARAM);
797 }
798 
srot(int N,float * x,int incx,float * y,int incy,float c,float s)799 void srot(int N, float *x, int incx, float *y, int incy, float c, float s)
800 {
801     srot_(&N, x, &incx, y, &incy, &c, &s);
802 }
803 
drot(int N,double * x,int incx,double * y,int incy,double c,double s)804 void drot(int N, double *x, int incx, double *y, int incy, double c, double s)
805 {
806     drot_(&N, x, &incx, y, &incy, &c, &s);
807 }
808 
csrot(int N,complex * x,int incx,complex * y,int incy,float c,float s)809 void csrot(int N, complex *x, int incx, complex *y, int incy, float c, float s)
810 {
811     csrot_(&N, x, &incx, y, &incy, &c, &s);
812 }
813 
zdrot(int N,doublecomplex * cx,int incx,doublecomplex * cy,int incy,double c,double s)814 void zdrot(int N, doublecomplex *cx, int incx, doublecomplex *cy, int incy, double c, double s)
815 {
816     zdrot_(&N, cx, &incx, cy, &incy, &c, &s);
817 }
818 
srotm(int N,float * X,int incx,float * Y,int incy,float * PARAM)819 void srotm(int N, float *X, int incx, float *Y, int incy, float* PARAM)
820 {
821     srotm_(&N, X, &incx, Y, &incy, PARAM);
822 }
823 
drotm(int N,double * X,int incx,double * Y,int incy,double * PARAM)824 void drotm(int N, double *X, int incx, double *Y, int incy, double* PARAM)
825 {
826     drotm_(&N, X, &incx, Y, &incy, PARAM);
827 }
828 
isamax(int n,float * x,int incx)829 int isamax( int n, float *x, int incx)
830 {
831     return isamax_(&n, x, &incx);
832 }
833 
idamax(int n,double * x,int incx)834 int idamax( int n, double *x, int incx)
835 {
836     return idamax_(&n, x, &incx);
837 }
838 
icamax(int n,complex * x,int incx)839 int icamax( int n, complex *x, int incx)
840 {
841     return icamax_(&n, x, &incx);
842 }
843 
izamax(int n,doublecomplex * x,int incx)844 int izamax( int n, doublecomplex *x, int incx)
845 {
846     return izamax_(&n, x, &incx);
847 }
848 
snrm2(int n,float * x,int incx)849 float snrm2( int n, float *x, int incx)
850 {
851 #ifdef __APPLE__
852     //On OSX passing negative values for incx can lead to a
853     //a crash, so we catch it here (cf. Github issue #37).
854     if (n < 1 || incx < 1) {
855         return 0;
856     }
857     return cblas_snrm2(n, x, incx);
858 #else
859     return snrm2_(&n, x, &incx);
860 #endif
861 }
862 
dnrm2(int n,double * x,int incx)863 double dnrm2( int n, double *x, int incx)
864 {
865 #ifdef __APPLE__
866     //On OSX passing negative values for incx can lead to a
867     //a crash, so we catch it here (cf. Github issue #37).
868     if (n < 1 || incx < 1) {
869         return 0;
870     }
871     return cblas_dnrm2(n, x, incx);
872 #else
873     return dnrm2_(&n, x, &incx);
874 #endif
875 }
876 
scnrm2(int n,complex * x,int incx)877 float scnrm2( int n, complex *x, int incx)
878 {
879 #ifdef __APPLE__
880     //On OSX passing negative values for incx can lead to a
881     //a crash, so we catch it here (cf. Github issue #37).
882     if (n < 1 || incx < 1) {
883         return 0;
884     }
885     return cblas_scnrm2(n, x, incx);
886 #else
887     return scnrm2_(&n, x, &incx);
888 #endif
889 }
890 
dznrm2(int n,doublecomplex * x,int incx)891 double dznrm2( int n, doublecomplex *x, int incx)
892 {
893 #ifdef __APPLE__
894     //On OSX passing negative values for incx can lead to a
895     //a crash, so we catch it here (cf. Github issue #37).
896     if (n < 1 || incx < 1) {
897         return 0;
898     }
899     return cblas_dznrm2(n, x, incx);
900 #else
901     return dznrm2_(&n, x, &incx);
902 #endif
903 }
904 
sasum(int n,float * x,int incx)905 float sasum( int n, float *x, int incx)
906 {
907 #ifdef __APPLE__
908     return cblas_sasum(n, x, incx);
909 #else
910     return sasum_(&n, x, &incx);
911 #endif
912 }
913 
dasum(int n,double * x,int incx)914 double dasum( int n, double *x, int incx)
915 {
916 #ifdef __APPLE__
917     return cblas_dasum(n, x, incx);
918 #else
919     return dasum_(&n, x, &incx);
920 #endif
921 }
922 
scasum(int n,complex * x,int incx)923 float scasum( int n, complex *x, int incx)
924 {
925 #ifdef __APPLE__
926     return cblas_scasum(n, x, incx);
927 #else
928     return scasum_(&n, x, &incx);
929 #endif
930 }
931 
dzasum(int n,doublecomplex * x,int incx)932 double dzasum( int n, doublecomplex *x, int incx)
933 {
934 #ifdef __APPLE__
935     return cblas_dzasum(n, x, incx);
936 #else
937     return dzasum_(&n, x, &incx);
938 #endif
939 }
940 
941 #endif
942