The R Project SVN R

Rev

Rev 86265 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
29932 ripley 1
/*
2
 *  R : A Computer Language for Statistical Data Analysis
85049 ripley 3
 *  Copyright (C) 2003-2023 The R Core Team.
29932 ripley 4
 *
71657 plummer 5
 *  This header file is free software; you can redistribute it and/or modify
29932 ripley 6
 *  it under the terms of the GNU Lesser General Public License as published by
7
 *  the Free Software Foundation; either version 2.1 of the License, or
8
 *  (at your option) any later version.
9
 *
71657 plummer 10
 *  This file is part of R. R is distributed under the terms of the
11
 *  GNU General Public License, either Version 2, June 1991 or Version 3,
12
 *  June 2007. See doc/COPYRIGHTS for details of the copyright status of R.
13
 *
29932 ripley 14
 *  This program is distributed in the hope that it will be useful,
15
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 *  GNU Lesser General Public License for more details.
18
 *
19
 *  You should have received a copy of the GNU Lesser General Public License
42308 ripley 20
 *  along with this program; if not, a copy is available at
68949 ripley 21
 *  https://www.R-project.org/Licenses/
29932 ripley 22
 */
23
 
60961 ripley 24
/*
25
   C declarations of BLAS Fortran subroutines always available in R.
26
 
27
   Part of the API.
28
 
71463 ripley 29
   R packages that use these should have PKG_LIBS in src/Makevars include
60961 ripley 30
   $(BLAS_LIBS) $(FLIBS)
31
 */
32
 
23063 bates 33
#ifndef R_BLAS_H
34
#define R_BLAS_H
35
 
36
#include <R_ext/RS.h>		/* for F77_... */
37
 
76600 ripley 38
#ifdef FC_LEN_T
76585 ripley 39
# include <stddef.h> // for size_t if needed
40
# define FCLEN ,FC_LEN_T
41
# define FCONE ,(FC_LEN_T)1
42
#else
43
# define FCLEN
44
# define FCONE
45
#endif
46
 
85054 ripley 47
/* Allow for future 64-bit nrow, ncol and increments. by using int64_t .
48
   configure checked that Fortran INTEGER is 32-bit and the same as C int.
49
   Only LSAME (not included here) has LOGICAL in its declaration.
50
   It is unclear what i[dz]amaz should return: the reference code has INTEGER,
51
   but CBLAS has size_t. Apple Accelerate has __LAPACK_int, so int or long 
52
   for ILP64.
53
*/
85049 ripley 54
#ifndef ILP64
55
# define BLAS_INT int
56
#endif
57
 
85053 ripley 58
#ifndef BLAS_complex
59
# include <R_ext/Complex.h>
60
# define BLAS_complex Rcomplex
61
#endif
62
 
23063 bates 63
#ifdef  __cplusplus
64
extern "C" {
65
#endif
66
 
60961 ripley 67
// never defined in R itself.
44687 maechler 68
#ifndef BLAS_extern
69
#define BLAS_extern extern
70
#endif
71
 
23063 bates 72
/* Double Precision Level 1 BLAS */
73
 
44687 maechler 74
BLAS_extern double /* DASUM - sum of absolute values of a one-dimensional array */
85049 ripley 75
F77_NAME(dasum)(const BLAS_INT *n, const double *dx, const BLAS_INT *incx);
76573 ripley 76
BLAS_extern void   /* DAXPY - replace y by da*x + y */
85049 ripley 77
F77_NAME(daxpy)(const BLAS_INT *n, const double *da,
78
		const double *dx, const BLAS_INT *incx,
79
		double *dy, const BLAS_INT *incy);
44687 maechler 80
BLAS_extern void   /* DCOPY - copy x to y */
85049 ripley 81
F77_NAME(dcopy)(const BLAS_INT *n, const double *dx, const BLAS_INT *incx,
82
		double *dy, const BLAS_INT *incy);
44687 maechler 83
BLAS_extern double /* DDOT - inner product of x and y */
85049 ripley 84
F77_NAME(ddot)(const BLAS_INT *n, const double *dx, const BLAS_INT *incx,
85
	       const double *dy, const BLAS_INT *incy);
44687 maechler 86
BLAS_extern double /* DNRM2 - 2-norm of a vector */
85049 ripley 87
F77_NAME(dnrm2)(const BLAS_INT *n, const double *dx, const BLAS_INT *incx);
88
BLAS_extern void   /* DROT - apply a Givens rotation */
89
F77_NAME(drot)(const BLAS_INT *n, double *dx, const BLAS_INT *incx,
90
	       double *dy, const BLAS_INT *incy, const double *c, const double *s);
91
BLAS_extern void   /* DROTG - generate a Givens rotation */
23063 bates 92
F77_NAME(drotg)(const double *a, const double *b, double *c, double *s);
85049 ripley 93
BLAS_extern void   /* DROTM - apply a modified Givens rotation */
94
F77_NAME(drotm)(const BLAS_INT *n, double *dx, const BLAS_INT *incx,
95
		double *dy, const BLAS_INT *incy, const double *dparam);
96
BLAS_extern void   /* DROTMG - generate a modified Givens rotation */
36367 ripley 97
F77_NAME(drotmg)(const double *dd1, const double *dd2, const double *dx1,
36352 ripley 98
		 const double *dy1, double *param);
44687 maechler 99
BLAS_extern void   /* DSCAL - scale a one-dimensional array */
85049 ripley 100
F77_NAME(dscal)(const BLAS_INT *n, const double *alpha, double *dx, const BLAS_INT *incx);
44687 maechler 101
BLAS_extern void   /* DSWAP - interchange one-dimensional arrays */
85049 ripley 102
F77_NAME(dswap)(const BLAS_INT *n, double *dx, const BLAS_INT *incx,
103
		double *dy, const BLAS_INT *incy);
104
BLAS_extern BLAS_INT    /* IDAMAX - return the index of the element with max abs value */
105
F77_NAME(idamax)(const BLAS_INT *n, const double *dx, const BLAS_INT *incx);
23063 bates 106
 
107
/* Double Precision Level 2 BLAS */
108
 
109
/* DGBMV - perform one of the matrix-vector operations */
110
/* y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y, */
44687 maechler 111
BLAS_extern void
85049 ripley 112
F77_NAME(dgbmv)(const char *trans, const BLAS_INT *m, const BLAS_INT *n,
113
		const BLAS_INT *kl,const BLAS_INT *ku,
114
		const double *alpha, const double *a, const BLAS_INT *lda,
115
		const double *x, const BLAS_INT *incx,
116
		const double *beta, double *y, const BLAS_INT *incy FCLEN);
23063 bates 117
/* DGEMV - perform one of the matrix-vector operations */
118
/* y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y,  */
44687 maechler 119
BLAS_extern void
85049 ripley 120
F77_NAME(dgemv)(const char *trans, const BLAS_INT *m, const BLAS_INT *n,
121
		const double *alpha, const double *a, const BLAS_INT *lda,
122
		const double *x, const BLAS_INT *incx, const double *beta,
123
		double *y, const BLAS_INT *incy FCLEN);
23063 bates 124
/* DSBMV - perform the matrix-vector operation */
125
/* y := alpha*A*x + beta*y, */
44687 maechler 126
BLAS_extern void
85049 ripley 127
F77_NAME(dsbmv)(const char *uplo, const BLAS_INT *n, const BLAS_INT *k,
128
		const double *alpha, const double *a, const BLAS_INT *lda,
129
		const double *x, const BLAS_INT *incx,
130
		const double *beta, double *y, const BLAS_INT *incy FCLEN);
23063 bates 131
/* DSPMV - perform the matrix-vector operation */
132
/* y := alpha*A*x + beta*y, */
44687 maechler 133
BLAS_extern void
85049 ripley 134
F77_NAME(dspmv)(const char *uplo, const BLAS_INT *n,
23063 bates 135
		const double *alpha, const double *ap,
85049 ripley 136
		const double *x, const BLAS_INT *incx,
137
		const double *beta, double *y, const BLAS_INT *incy FCLEN);
23063 bates 138
 
139
/* DSYMV - perform the matrix-vector operation */
140
/*  y := alpha*A*x + beta*y, */
44687 maechler 141
BLAS_extern void
85049 ripley 142
F77_NAME(dsymv)(const char *uplo, const BLAS_INT *n, const double *alpha,
143
		const double *a, const BLAS_INT *lda,
144
		const double *x, const BLAS_INT *incx,
145
		const double *beta, double *y, const BLAS_INT *incy FCLEN);
23063 bates 146
/* DTBMV - perform one of the matrix-vector operations */
147
/* x := A*x, or x := A'*x, */
44687 maechler 148
BLAS_extern void
23063 bates 149
F77_NAME(dtbmv)(const char *uplo, const char *trans,
85049 ripley 150
		const char *diag, const BLAS_INT *n, const BLAS_INT *k,
151
		const double *a, const BLAS_INT *lda,
152
		double *x, const BLAS_INT *incx FCLEN FCLEN FCLEN);
23063 bates 153
/* DTPMV - perform one of the matrix-vector operations */
154
/* x := A*x, or x := A'*x, */
44687 maechler 155
BLAS_extern void
23063 bates 156
F77_NAME(dtpmv)(const char *uplo, const char *trans, const char *diag,
85049 ripley 157
		const BLAS_INT *n, const double *ap,
158
		double *x, const BLAS_INT *incx FCLEN FCLEN FCLEN);
23063 bates 159
/* DTRMV - perform one of the matrix-vector operations  */
160
/* x := A*x, or x := A'*x, */
44687 maechler 161
BLAS_extern void
23063 bates 162
F77_NAME(dtrmv)(const char *uplo, const char *trans, const char *diag,
85049 ripley 163
		const BLAS_INT *n, const double *a, const BLAS_INT *lda,
164
		double *x, const BLAS_INT *incx FCLEN FCLEN FCLEN);
23063 bates 165
/* DTBSV - solve one of the systems of equations */
166
/* A*x = b, or A'*x = b, */
44687 maechler 167
BLAS_extern void
23063 bates 168
F77_NAME(dtbsv)(const char *uplo, const char *trans,
85049 ripley 169
		const char *diag, const BLAS_INT *n, const BLAS_INT *k,
170
		const double *a, const BLAS_INT *lda,
171
		double *x, const BLAS_INT *incx FCLEN FCLEN FCLEN);
23063 bates 172
/* DTPSV - solve one of the systems of equations */
173
/* A*x = b, or A'*x = b, */
44687 maechler 174
BLAS_extern void
23063 bates 175
F77_NAME(dtpsv)(const char *uplo, const char *trans,
85049 ripley 176
		const char *diag, const BLAS_INT *n,
177
		const double *ap, double *x, const BLAS_INT *incx
76585 ripley 178
		FCLEN FCLEN FCLEN);
23063 bates 179
/* DTRSV - solve one of the systems of equations */
180
/* A*x = b, or A'*x = b, */
44687 maechler 181
BLAS_extern void
23063 bates 182
F77_NAME(dtrsv)(const char *uplo, const char *trans,
85049 ripley 183
		const char *diag, const BLAS_INT *n,
184
		const double *a, const BLAS_INT *lda,
185
		double *x, const BLAS_INT *incx FCLEN FCLEN FCLEN);
23063 bates 186
/* DGER - perform the rank 1 operation   A := alpha*x*y' + A */
44687 maechler 187
BLAS_extern void
85049 ripley 188
F77_NAME(dger)(const BLAS_INT *m, const BLAS_INT *n, const double *alpha,
189
	       const double *x, const BLAS_INT *incx,
190
	       const double *y, const BLAS_INT *incy,
191
	       double *a, const BLAS_INT *lda);
23063 bates 192
/* DSYR - perform the symmetric rank 1 operation A := alpha*x*x' + A */
44687 maechler 193
BLAS_extern void
85049 ripley 194
F77_NAME(dsyr)(const char *uplo, const BLAS_INT *n, const double *alpha,
195
	       const double *x, const BLAS_INT *incx,
196
	       double *a, const BLAS_INT *lda FCLEN);
23063 bates 197
/* DSPR - perform the symmetric rank 1 operation A := alpha*x*x' + A */
44687 maechler 198
BLAS_extern void
85049 ripley 199
F77_NAME(dspr)(const char *uplo, const BLAS_INT *n, const double *alpha,
200
	       const double *x, const BLAS_INT *incx, double *ap FCLEN);
23063 bates 201
/* DSYR2 - perform the symmetric rank 2 operation */
202
/* A := alpha*x*y' + alpha*y*x' + A, */
44687 maechler 203
BLAS_extern void
85049 ripley 204
F77_NAME(dsyr2)(const char *uplo, const BLAS_INT *n, const double *alpha,
205
		const double *x, const BLAS_INT *incx,
206
		const double *y, const BLAS_INT *incy,
207
		double *a, const BLAS_INT *lda FCLEN);
23063 bates 208
/* DSPR2 - perform the symmetric rank 2 operation */
209
/* A := alpha*x*y' + alpha*y*x' + A,  */
44687 maechler 210
BLAS_extern void
85049 ripley 211
F77_NAME(dspr2)(const char *uplo, const BLAS_INT *n, const double *alpha,
212
		const double *x, const BLAS_INT *incx,
213
		const double *y, const BLAS_INT *incy, double *ap FCLEN);
23063 bates 214
 
215
/* Double Precision Level 3 BLAS */
216
 
217
/* DGEMM - perform one of the matrix-matrix operations    */
218
/* C := alpha*op( A )*op( B ) + beta*C */
44687 maechler 219
BLAS_extern void
85049 ripley 220
F77_NAME(dgemm)(const char *transa, const char *transb, const BLAS_INT *m,
221
		const BLAS_INT *n, const BLAS_INT *k, const double *alpha,
222
		const double *a, const BLAS_INT *lda,
223
		const double *b, const BLAS_INT *ldb,
224
		const double *beta, double *c, const BLAS_INT *ldc 
76585 ripley 225
		FCLEN FCLEN);
23063 bates 226
/* DTRSM - solve one of the matrix equations  */
227
/* op(A)*X = alpha*B, or  X*op(A) = alpha*B  */
44687 maechler 228
BLAS_extern void
23063 bates 229
F77_NAME(dtrsm)(const char *side, const char *uplo,
230
		const char *transa, const char *diag,
85049 ripley 231
		const BLAS_INT *m, const BLAS_INT *n, const double *alpha,
232
		const double *a, const BLAS_INT *lda,
233
		double *b, const BLAS_INT *ldb
76585 ripley 234
		FCLEN FCLEN FCLEN FCLEN);
23063 bates 235
/* DTRMM - perform one of the matrix-matrix operations */
236
/* B := alpha*op( A )*B, or B := alpha*B*op( A ) */
44687 maechler 237
BLAS_extern void
23063 bates 238
F77_NAME(dtrmm)(const char *side, const char *uplo, const char *transa,
85049 ripley 239
		const char *diag, const BLAS_INT *m, const BLAS_INT *n,
240
		const double *alpha, const double *a, const BLAS_INT *lda,
241
		double *b, const BLAS_INT *ldb
76585 ripley 242
		FCLEN FCLEN FCLEN FCLEN);
23063 bates 243
/* DSYMM - perform one of the matrix-matrix operations   */
244
/*  C := alpha*A*B + beta*C, */
44687 maechler 245
BLAS_extern void
85049 ripley 246
F77_NAME(dsymm)(const char *side, const char *uplo, const BLAS_INT *m,
247
		const BLAS_INT *n, const double *alpha,
248
		const double *a, const BLAS_INT *lda,
249
		const double *b, const BLAS_INT *ldb,
250
		const double *beta, double *c, const BLAS_INT *ldc
76585 ripley 251
		FCLEN FCLEN);
23063 bates 252
/* DSYRK - perform one of the symmetric rank k operations */
253
/* C := alpha*A*A' + beta*C or C := alpha*A'*A + beta*C */
44687 maechler 254
BLAS_extern void
23063 bates 255
F77_NAME(dsyrk)(const char *uplo, const char *trans,
85049 ripley 256
		const BLAS_INT *n, const BLAS_INT *k,
257
		const double *alpha, const double *a, const BLAS_INT *lda,
258
		const double *beta, double *c, const BLAS_INT *ldc
76585 ripley 259
		FCLEN FCLEN);
23063 bates 260
/* DSYR2K - perform one of the symmetric rank 2k operations */
261
/* C := alpha*A*B' + alpha*B*A' + beta*C or */
262
/* C := alpha*A'*B + alpha*B'*A + beta*C */
44687 maechler 263
BLAS_extern void
23063 bates 264
F77_NAME(dsyr2k)(const char *uplo, const char *trans,
85049 ripley 265
		 const BLAS_INT *n, const BLAS_INT *k,
266
		 const double *alpha, const double *a, const BLAS_INT *lda,
267
		 const double *b, const BLAS_INT *ldb,
268
		 const double *beta, double *c, const BLAS_INT *ldc
76585 ripley 269
		 FCLEN FCLEN);
36352 ripley 270
/*
85073 ripley 271
  LSAME is declared in Lapack.h.
272
  (https://netlib.org/lapack/explore-html/dc/d9c/_i_n_s_t_a_l_l_2lsame_8f_ada799b40a93f1fd2c6d1a86a95f21631.html
273
  calls it a 'LAPACK auxiliary routine'.)
274
 
275
  It is used in the code of other BLAS routines and hence included in
276
  src/extra/blas/blas.f.  However, it is not included by
277
   Apple's Accelerate (nor cblas: it is in lapacke).
36352 ripley 278
*/
35002 ripley 279
 
36367 ripley 280
/* Double complex BLAS routines added for 2.3.0 */
44669 maechler 281
/* #ifdef HAVE_FORTRAN_DOUBLE_COMPLEX */
44687 maechler 282
    BLAS_extern double
85053 ripley 283
    F77_NAME(dcabs1)(const BLAS_complex *z);
44687 maechler 284
    BLAS_extern double
85053 ripley 285
    F77_NAME(dzasum)(const BLAS_INT *n, const BLAS_complex *zx, const BLAS_INT *incx);
44687 maechler 286
    BLAS_extern double
85053 ripley 287
    F77_NAME(dznrm2)(const BLAS_INT *n, const BLAS_complex *x, const BLAS_INT *incx);
85049 ripley 288
    BLAS_extern BLAS_INT
85053 ripley 289
    F77_NAME(izamax)(const BLAS_INT *n, const BLAS_complex *zx, const BLAS_INT *incx);
44687 maechler 290
    BLAS_extern void
85053 ripley 291
    F77_NAME(zaxpy)(const BLAS_INT *n, const BLAS_complex *za, const BLAS_complex *zx,
292
		    const BLAS_INT *incx, const BLAS_complex *zy, const BLAS_INT *incy);
44687 maechler 293
    BLAS_extern void
85053 ripley 294
    F77_NAME(zcopy)(const BLAS_INT *n, const BLAS_complex *zx, const BLAS_INT *incx,
295
		    const BLAS_complex *zy, const BLAS_INT *incy);
58613 ripley 296
 
297
    /* WARNING!  The next two return a value that may not be
298
       compatible between C and Fortran, and even if it is, this might
299
       not be the right translation to C.  Only use after
300
       configure-testing with your compilers.
301
     */
85053 ripley 302
    BLAS_extern BLAS_complex
85049 ripley 303
    F77_NAME(zdotc)(const BLAS_INT *n,
85053 ripley 304
		    const BLAS_complex *zx, const BLAS_INT *incx, 
305
		    const BLAS_complex *zy, const BLAS_INT *incy);
306
    BLAS_extern BLAS_complex
85049 ripley 307
    F77_NAME(zdotu)(const BLAS_INT *n,
85053 ripley 308
		    const BLAS_complex *zx, const BLAS_INT *incx,
309
		    const BLAS_complex *zy, const BLAS_INT *incy);
58613 ripley 310
 
44687 maechler 311
    BLAS_extern void
85049 ripley 312
    F77_NAME(zdrot)(const BLAS_INT *n, 
85053 ripley 313
		    const BLAS_complex *zx, const BLAS_INT *incx, 
314
		    BLAS_complex *zy, const BLAS_INT *incy, 
71463 ripley 315
		    const double *c, const double *s);
44687 maechler 316
    BLAS_extern void
85049 ripley 317
    F77_NAME(zdscal)(const BLAS_INT *n, const double *da, 
85053 ripley 318
		     BLAS_complex *zx, const BLAS_INT *incx);
44687 maechler 319
    BLAS_extern void
85049 ripley 320
    F77_NAME(zgbmv)(const char *trans, BLAS_INT *m, BLAS_INT *n, BLAS_INT *kl,
85053 ripley 321
		    BLAS_INT *ku, BLAS_complex *alpha, BLAS_complex *a, BLAS_INT *lda,
322
		    BLAS_complex *x, BLAS_INT *incx, BLAS_complex *beta, BLAS_complex *y,
85049 ripley 323
		    BLAS_INT *incy FCLEN);
44687 maechler 324
    BLAS_extern void
85049 ripley 325
    F77_NAME(zgemm)(const char *transa, const char *transb, const BLAS_INT *m,
85053 ripley 326
		    const BLAS_INT *n, const BLAS_INT *k, const BLAS_complex *alpha,
327
		    const BLAS_complex *a, const BLAS_INT *lda,
328
		    const BLAS_complex *b, const BLAS_INT *ldb,
329
		    const BLAS_complex *beta, BLAS_complex *c, const BLAS_INT *ldc
76585 ripley 330
		    FCLEN FCLEN);
44687 maechler 331
    BLAS_extern void
85049 ripley 332
    F77_NAME(zgemv)(const char *trans, const BLAS_INT *m, const BLAS_INT *n,
85053 ripley 333
		    const BLAS_complex *alpha, const BLAS_complex *a, const BLAS_INT *lda,
334
		    const BLAS_complex *x, const BLAS_INT *incx, const BLAS_complex *beta,
335
		    BLAS_complex *y, const BLAS_INT *incy FCLEN);
44687 maechler 336
    BLAS_extern void
85053 ripley 337
    F77_NAME(zgerc)(const BLAS_INT *m, const BLAS_INT *n, const BLAS_complex *alpha,
338
		    const BLAS_complex *x, const BLAS_INT *incx, const BLAS_complex *y,
339
		    const BLAS_INT *incy, BLAS_complex *a, const BLAS_INT *lda);
44687 maechler 340
    BLAS_extern void
85053 ripley 341
    F77_NAME(zgeru)(const BLAS_INT *m, const BLAS_INT *n, const BLAS_complex *alpha,
342
		    const BLAS_complex *x, const BLAS_INT *incx, const BLAS_complex *y,
343
		    const BLAS_INT *incy, BLAS_complex *a, const BLAS_INT *lda);
44687 maechler 344
    BLAS_extern void
85049 ripley 345
    F77_NAME(zhbmv)(const char *uplo, const BLAS_INT *n, const BLAS_INT *k,
85053 ripley 346
		    const BLAS_complex *alpha, const BLAS_complex *a, const BLAS_INT *lda,
347
		    const BLAS_complex *x, const BLAS_INT *incx, const BLAS_complex *beta,
348
		    BLAS_complex *y, const BLAS_INT *incy FCLEN);
44687 maechler 349
    BLAS_extern void
85049 ripley 350
    F77_NAME(zhemm)(const char *side, const char *uplo, const BLAS_INT *m,
85053 ripley 351
		    const BLAS_INT *n, const BLAS_complex *alpha, const BLAS_complex *a,
352
		    const BLAS_INT *lda, const BLAS_complex *b, const BLAS_INT *ldb,
353
		    const BLAS_complex *beta, BLAS_complex *c, const BLAS_INT *ldc
76585 ripley 354
		    FCLEN FCLEN);
44687 maechler 355
    BLAS_extern void
85053 ripley 356
    F77_NAME(zhemv)(const char *uplo, const BLAS_INT *n, const BLAS_complex *alpha,
357
		    const BLAS_complex *a, const BLAS_INT *lda, const BLAS_complex *x,
358
		    const BLAS_INT *incx, const BLAS_complex *beta,
359
		    BLAS_complex *y, const BLAS_INT *incy FCLEN);
44687 maechler 360
    BLAS_extern void
85049 ripley 361
    F77_NAME(zher)(const char *uplo, const BLAS_INT *n, const double *alpha,
85053 ripley 362
		   const BLAS_complex *x, const BLAS_INT *incx, BLAS_complex *a,
85049 ripley 363
		   const BLAS_INT *lda FCLEN);
44687 maechler 364
    BLAS_extern void
85053 ripley 365
    F77_NAME(zher2)(const char *uplo, const BLAS_INT *n, const BLAS_complex *alpha,
366
		    const BLAS_complex *x, const BLAS_INT *incx, const BLAS_complex *y,
367
		    const BLAS_INT *incy, BLAS_complex *a, const BLAS_INT *lda FCLEN);
44687 maechler 368
    BLAS_extern void
85049 ripley 369
    F77_NAME(zher2k)(const char *uplo, const char *trans, const BLAS_INT *n,
85053 ripley 370
		     const BLAS_INT *k, const BLAS_complex *alpha, const BLAS_complex *a,
371
		     const BLAS_INT *lda, const BLAS_complex *b, const  BLAS_INT *ldb,
372
		     const double *beta, BLAS_complex *c, const BLAS_INT *ldc
76585 ripley 373
		     FCLEN FCLEN);
44687 maechler 374
    BLAS_extern void
85049 ripley 375
    F77_NAME(zherk)(const char *uplo, const char *trans, const BLAS_INT *n,
85053 ripley 376
		    const BLAS_INT *k, const double *alpha, const BLAS_complex *a,
377
		    const BLAS_INT *lda, const double *beta, BLAS_complex *c,
85049 ripley 378
		    const BLAS_INT *ldc FCLEN FCLEN);
44687 maechler 379
    BLAS_extern void
85053 ripley 380
    F77_NAME(zhpmv)(const char *uplo, const BLAS_INT *n, const BLAS_complex *alpha,
381
		    const BLAS_complex *ap, const BLAS_complex *x, const BLAS_INT *incx,
382
		    const BLAS_complex * beta, BLAS_complex *y, const BLAS_INT *incy
76585 ripley 383
		    FCLEN);
44687 maechler 384
    BLAS_extern void
85049 ripley 385
    F77_NAME(zhpr)(const char *uplo, const BLAS_INT *n, const double *alpha,
85053 ripley 386
		   const BLAS_complex *x, const BLAS_INT *incx, BLAS_complex *ap
76585 ripley 387
		   FCLEN);
44687 maechler 388
    BLAS_extern void
85053 ripley 389
    F77_NAME(zhpr2)(const char *uplo, const BLAS_INT *n, const BLAS_complex *alpha,
390
		    const BLAS_complex *x, const BLAS_INT *incx, const BLAS_complex *y,
391
		    const BLAS_INT *incy, BLAS_complex *ap FCLEN);
44687 maechler 392
    BLAS_extern void
85053 ripley 393
    F77_NAME(zrotg)(const BLAS_complex *ca, const BLAS_complex *cb, 
394
		    double *c, BLAS_complex *s);
44687 maechler 395
    BLAS_extern void
85053 ripley 396
    F77_NAME(zscal)(const BLAS_INT *n, const BLAS_complex *za, BLAS_complex *zx,
85049 ripley 397
		    const BLAS_INT *incx);
44687 maechler 398
    BLAS_extern void
85053 ripley 399
    F77_NAME(zswap)(const BLAS_INT *n, BLAS_complex *zx, const BLAS_INT *incx,
400
		    BLAS_complex *zy, const BLAS_INT *incy);
44687 maechler 401
    BLAS_extern void
85049 ripley 402
    F77_NAME(zsymm)(const char *side, const char *uplo, const BLAS_INT *m,
85053 ripley 403
		    const BLAS_INT *n, const BLAS_complex *alpha, const BLAS_complex *a,
404
		    const BLAS_INT *lda, const BLAS_complex *b, const BLAS_INT *ldb,
405
		    const BLAS_complex *beta, BLAS_complex *c, const BLAS_INT *ldc
76585 ripley 406
		    FCLEN FCLEN);
44687 maechler 407
    BLAS_extern void
85049 ripley 408
    F77_NAME(zsyr2k)(const char *uplo, const char *trans, BLAS_INT *n, BLAS_INT *k,
85053 ripley 409
		     BLAS_complex *alpha, BLAS_complex *a, BLAS_INT *lda, BLAS_complex *b,
410
		     BLAS_INT *ldb, BLAS_complex *beta, BLAS_complex *c, BLAS_INT *ldc
76585 ripley 411
		     FCLEN FCLEN);
44687 maechler 412
    BLAS_extern void
85049 ripley 413
    F77_NAME(zsyrk)(const char *uplo, const char *trans, const  BLAS_INT *n,
85053 ripley 414
		    const BLAS_INT *k, const BLAS_complex *alpha, const BLAS_complex *a,
415
		    const BLAS_INT *lda, const BLAS_complex *beta, BLAS_complex *c,
85049 ripley 416
		    const BLAS_INT *ldc FCLEN FCLEN);
44687 maechler 417
    BLAS_extern void
71463 ripley 418
    F77_NAME(ztbmv)(const char *uplo, const char *trans, const char *diag,
85053 ripley 419
		    const BLAS_INT *n, const BLAS_INT *k, const BLAS_complex *a,
420
		    const BLAS_INT *lda, BLAS_complex *x, const BLAS_INT *incx
76585 ripley 421
		    FCLEN FCLEN FCLEN);
44687 maechler 422
    BLAS_extern void
71463 ripley 423
    F77_NAME(ztbsv)(const char *uplo, const char *trans, const char *diag,
85053 ripley 424
		    const BLAS_INT *n, const BLAS_INT *k, const BLAS_complex *a,
425
		    const BLAS_INT *lda, BLAS_complex *x, const BLAS_INT *incx
76585 ripley 426
		    FCLEN FCLEN FCLEN);
44687 maechler 427
    BLAS_extern void
71463 ripley 428
    F77_NAME(ztpmv)(const char *uplo, const char *trans, const char *diag,
85053 ripley 429
		    const BLAS_INT *n, const BLAS_complex *ap, BLAS_complex *x,
85049 ripley 430
		    const BLAS_INT *incx FCLEN FCLEN FCLEN);
44687 maechler 431
    BLAS_extern void
71463 ripley 432
    F77_NAME(ztpsv)(const char *uplo, const char *trans, const char *diag,
85053 ripley 433
		    const BLAS_INT *n, const BLAS_complex *ap, BLAS_complex *x,
85049 ripley 434
		    const BLAS_INT *incx FCLEN FCLEN FCLEN);
44687 maechler 435
    BLAS_extern void
71463 ripley 436
    F77_NAME(ztrmm)(const char *side, const char *uplo, const char *transa,
85049 ripley 437
		    const char *diag, const BLAS_INT *m, const BLAS_INT *n,
85053 ripley 438
		    const BLAS_complex *alpha, const BLAS_complex *a,
439
		    const BLAS_INT *lda, BLAS_complex *b, const BLAS_INT *ldb
76585 ripley 440
		    FCLEN FCLEN FCLEN FCLEN);
44687 maechler 441
    BLAS_extern void
71463 ripley 442
    F77_NAME(ztrmv)(const char *uplo, const char *trans, const char *diag,
85053 ripley 443
		    const BLAS_INT *n, const BLAS_complex *a, const BLAS_INT *lda,
444
		    BLAS_complex *x, const BLAS_INT *incx
76585 ripley 445
		    FCLEN FCLEN FCLEN);
44687 maechler 446
    BLAS_extern void
71463 ripley 447
    F77_NAME(ztrsm)(const char *side, const char *uplo, const char *transa,
85053 ripley 448
		    const char *diag, BLAS_INT *m, BLAS_INT *n, BLAS_complex *alpha,
449
		    BLAS_complex *a, BLAS_INT *lda, BLAS_complex *b, BLAS_INT *ldb
76585 ripley 450
		    FCLEN FCLEN FCLEN FCLEN);
44687 maechler 451
    BLAS_extern void
71463 ripley 452
    F77_NAME(ztrsv)(const char *uplo, const char *trans, const char *diag,
85053 ripley 453
		    const BLAS_INT *n, const BLAS_complex *a, const BLAS_INT *lda,
454
		    BLAS_complex *x, const BLAS_INT *incx
76585 ripley 455
		    FCLEN FCLEN FCLEN);
44669 maechler 456
/* #endif */
36367 ripley 457
 
86265 maechler 458
/* ZSPMV  performs the matrix-vector operation
459
 *
460
 *     y := alpha*A*x + beta*y,
461
 *
462
 * where alpha and beta are scalars, x and y are n element vectors
463
 * and A is an n by n symmetric matrix, supplied in packed form.
464
 * Added in R 4.4.0
465
 */
466
BLAS_extern void
467
F77_NAME(zspmv)(const char *uplo, const BLAS_INT *n,
468
		 const BLAS_complex *alpha, const BLAS_complex *ap,
469
		 const BLAS_complex *x, const BLAS_INT *incx,
470
		 const BLAS_complex *beta, BLAS_complex *y, const BLAS_INT *incy FCLEN);
471
 
23063 bates 472
#ifdef  __cplusplus
473
}
474
#endif
475
 
476
#endif /* R_BLAS_H */