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