1
1
module BLAS
2
2
3
3
import .. axpy!
4
- import Base. copy!
4
+ import Base: copy!, @blas_suffix
5
5
6
6
export
7
7
# Level 1
@@ -57,10 +57,10 @@ import ..LinAlg: BlasReal, BlasComplex, BlasFloat, BlasChar, BlasInt, blas_int,
57
57
58
58
# Level 1
59
59
# # copy
60
- for (fname, elty) in ((:dcopy_ ,:Float64 ),
61
- (:scopy_ ,:Float32 ),
62
- (:zcopy_ ,:Complex128 ),
63
- (:ccopy_ ,:Complex64 ))
60
+ for (fname, elty) in ((@blas_suffix ( :dcopy_ ) ,:Float64 ),
61
+ (@blas_suffix ( :scopy_ ) ,:Float32 ),
62
+ (@blas_suffix ( :zcopy_ ) ,:Complex128 ),
63
+ (@blas_suffix ( :ccopy_ ) ,:Complex64 ))
64
64
@eval begin
65
65
# SUBROUTINE DCOPY(N,DX,INCX,DY,INCY)
66
66
function blascopy! (n:: Integer , DX:: Union(Ptr{$elty},StridedArray{$elty}) , incx:: Integer , DY:: Union(Ptr{$elty},StridedArray{$elty}) , incy:: Integer )
@@ -73,10 +73,10 @@ for (fname, elty) in ((:dcopy_,:Float64),
73
73
end
74
74
75
75
# # scal
76
- for (fname, elty) in ((:dscal_ ,:Float64 ),
77
- (:sscal_ ,:Float32 ),
78
- (:zscal_ ,:Complex128 ),
79
- (:cscal_ ,:Complex64 ))
76
+ for (fname, elty) in ((@blas_suffix ( :dscal_ ) ,:Float64 ),
77
+ (@blas_suffix ( :sscal_ ) ,:Float32 ),
78
+ (@blas_suffix ( :zscal_ ) ,:Complex128 ),
79
+ (@blas_suffix ( :cscal_ ) ,:Complex64 ))
80
80
@eval begin
81
81
# SUBROUTINE DSCAL(N,DA,DX,INCX)
82
82
function scal! (n:: Integer , DA:: $elty , DX:: Union(Ptr{$elty},StridedArray{$elty}) , incx:: Integer )
@@ -89,8 +89,8 @@ for (fname, elty) in ((:dscal_,:Float64),
89
89
end
90
90
scal (n, DA, DX, incx) = scal! (n, DA, copy (DX), incx)
91
91
# In case DX is complex, and DA is real, use dscal/sscal to save flops
92
- for (fname, elty, celty) in ((:sscal_ , :Float32 , :Complex64 ),
93
- (:dscal_ , :Float64 , :Complex128 ))
92
+ for (fname, elty, celty) in ((@blas_suffix ( :sscal_ ) , :Float32 , :Complex64 ),
93
+ (@blas_suffix ( :dscal_ ) , :Float64 , :Complex128 ))
94
94
@eval begin
95
95
function scal! (n:: Integer , DA:: $elty , DX:: Union(Ptr{$celty},StridedArray{$celty}) , incx:: Integer )
96
96
ccall (($ (string (fname)),libblas), Void,
@@ -102,8 +102,8 @@ for (fname, elty, celty) in ((:sscal_, :Float32, :Complex64),
102
102
end
103
103
104
104
# # dot
105
- for (fname, elty) in ((:ddot_ ,:Float64 ),
106
- (:sdot_ ,:Float32 ))
105
+ for (fname, elty) in ((@blas_suffix ( :ddot_ ) ,:Float64 ),
106
+ (@blas_suffix ( :sdot_ ) ,:Float32 ))
107
107
@eval begin
108
108
# DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
109
109
# * .. Scalar Arguments ..
@@ -118,8 +118,8 @@ for (fname, elty) in ((:ddot_,:Float64),
118
118
end
119
119
end
120
120
end
121
- for (fname, elty) in ((:cblas_zdotc_sub ,:Complex128 ),
122
- (:cblas_cdotc_sub ,:Complex64 ))
121
+ for (fname, elty) in ((@blas_suffix ( :cblas_zdotc_sub ) ,:Complex128 ),
122
+ (@blas_suffix ( :cblas_cdotc_sub ) ,:Complex64 ))
123
123
@eval begin
124
124
# DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
125
125
# * .. Scalar Arguments ..
@@ -136,8 +136,8 @@ for (fname, elty) in ((:cblas_zdotc_sub,:Complex128),
136
136
end
137
137
end
138
138
end
139
- for (fname, elty) in ((:cblas_zdotu_sub ,:Complex128 ),
140
- (:cblas_cdotu_sub ,:Complex64 ))
139
+ for (fname, elty) in ((@blas_suffix ( :cblas_zdotu_sub ) ,:Complex128 ),
140
+ (@blas_suffix ( :cblas_cdotu_sub ) ,:Complex64 ))
141
141
@eval begin
142
142
# DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
143
143
# * .. Scalar Arguments ..
@@ -171,10 +171,10 @@ function dotu{T<:BlasComplex}(DX::StridedArray{T}, DY::StridedArray{T})
171
171
end
172
172
173
173
# # nrm2
174
- for (fname, elty, ret_type) in ((:dnrm2_ ,:Float64 ,:Float64 ),
175
- (:snrm2_ ,:Float32 ,:Float32 ),
176
- (:dznrm2_ ,:Complex128 ,:Float64 ),
177
- (:scnrm2_ ,:Complex64 ,:Float32 ))
174
+ for (fname, elty, ret_type) in ((@blas_suffix ( :dnrm2_ ) ,:Float64 ,:Float64 ),
175
+ (@blas_suffix ( :snrm2_ ) ,:Float32 ,:Float32 ),
176
+ (@blas_suffix ( :dznrm2_ ) ,:Complex128 ,:Float64 ),
177
+ (@blas_suffix ( :scnrm2_ ) ,:Complex64 ,:Float32 ))
178
178
@eval begin
179
179
# SUBROUTINE DNRM2(N,X,INCX)
180
180
function nrm2 (n:: Integer , X:: Union(Ptr{$elty},StridedVector{$elty}) , incx:: Integer )
@@ -188,10 +188,10 @@ nrm2(x::StridedVector) = nrm2(length(x), x, stride(x,1))
188
188
nrm2 (x:: Array ) = nrm2 (length (x), pointer (x), 1 )
189
189
190
190
# # asum
191
- for (fname, elty, ret_type) in ((:dasum_ ,:Float64 ,:Float64 ),
192
- (:sasum_ ,:Float32 ,:Float32 ),
193
- (:dzasum_ ,:Complex128 ,:Float64 ),
194
- (:scasum_ ,:Complex64 ,:Float32 ))
191
+ for (fname, elty, ret_type) in ((@blas_suffix ( :dasum_ ) ,:Float64 ,:Float64 ),
192
+ (@blas_suffix ( :sasum_ ) ,:Float32 ,:Float32 ),
193
+ (@blas_suffix ( :dzasum_ ) ,:Complex128 ,:Float64 ),
194
+ (@blas_suffix ( :scasum_ ) ,:Complex64 ,:Float32 ))
195
195
@eval begin
196
196
# SUBROUTINE ASUM(N, X, INCX)
197
197
function asum (n:: Integer , X:: Union(Ptr{$elty},StridedVector{$elty}) , incx:: Integer )
@@ -205,10 +205,10 @@ asum(x::StridedVector) = asum(length(x), x, stride(x,1))
205
205
asum (x:: Array ) = asum (length (x), pointer (x), 1 )
206
206
207
207
# # axpy
208
- for (fname, elty) in ((:daxpy_ ,:Float64 ),
209
- (:saxpy_ ,:Float32 ),
210
- (:zaxpy_ ,:Complex128 ),
211
- (:caxpy_ ,:Complex64 ))
208
+ for (fname, elty) in ((@blas_suffix ( :daxpy_ ) ,:Float64 ),
209
+ (@blas_suffix ( :saxpy_ ) ,:Float32 ),
210
+ (@blas_suffix ( :zaxpy_ ) ,:Complex128 ),
211
+ (@blas_suffix ( :caxpy_ ) ,:Complex64 ))
212
212
@eval begin
213
213
# SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY)
214
214
# DY <- DA*DX + DY
@@ -243,10 +243,10 @@ function axpy!{T<:BlasFloat,Ta<:Number,Ti<:Integer}(alpha::Ta, x::Array{T}, rx::
243
243
end
244
244
245
245
# # iamax
246
- for (fname, elty) in ((:idamax_ ,:Float64 ),
247
- (:isamax_ ,:Float32 ),
248
- (:izamax_ ,:Complex128 ),
249
- (:icamax_ ,:Complex64 ))
246
+ for (fname, elty) in ((@blas_suffix ( :idamax_ ) ,:Float64 ),
247
+ (@blas_suffix ( :isamax_ ) ,:Float32 ),
248
+ (@blas_suffix ( :izamax_ ) ,:Complex128 ),
249
+ (@blas_suffix ( :icamax_ ) ,:Complex64 ))
250
250
@eval begin
251
251
function iamax (n:: BlasInt , dx:: Union(StridedVector{$elty}, Ptr{$elty}) , incx:: BlasInt )
252
252
ccall (($ (string (fname)), libblas),BlasInt,
@@ -260,10 +260,10 @@ iamax(dx::StridedVector) = iamax(length(dx), dx, 1)
260
260
# Level 2
261
261
# # mv
262
262
# ## gemv
263
- for (fname, elty) in ((:dgemv_ ,:Float64 ),
264
- (:sgemv_ ,:Float32 ),
265
- (:zgemv_ ,:Complex128 ),
266
- (:cgemv_ ,:Complex64 ))
263
+ for (fname, elty) in ((@blas_suffix ( :dgemv_ ) ,:Float64 ),
264
+ (@blas_suffix ( :sgemv_ ) ,:Float32 ),
265
+ (@blas_suffix ( :zgemv_ ) ,:Complex128 ),
266
+ (@blas_suffix ( :cgemv_ ) ,:Complex64 ))
267
267
@eval begin
268
268
# SUBROUTINE DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
269
269
# * .. Scalar Arguments ..
@@ -294,10 +294,10 @@ for (fname, elty) in ((:dgemv_,:Float64),
294
294
end
295
295
296
296
# ## (GB) general banded matrix-vector multiplication
297
- for (fname, elty) in ((:dgbmv_ ,:Float64 ),
298
- (:sgbmv_ ,:Float32 ),
299
- (:zgbmv_ ,:Complex128 ),
300
- (:cgbmv_ ,:Complex64 ))
297
+ for (fname, elty) in ((@blas_suffix ( :dgbmv_ ) ,:Float64 ),
298
+ (@blas_suffix ( :sgbmv_ ) ,:Float32 ),
299
+ (@blas_suffix ( :zgbmv_ ) ,:Complex128 ),
300
+ (@blas_suffix ( :cgbmv_ ) ,:Complex64 ))
301
301
@eval begin
302
302
# SUBROUTINE DGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
303
303
# * .. Scalar Arguments ..
@@ -329,10 +329,10 @@ for (fname, elty) in ((:dgbmv_,:Float64),
329
329
end
330
330
331
331
# ## symv
332
- for (fname, elty) in ((:dsymv_ ,:Float64 ),
333
- (:ssymv_ ,:Float32 ),
334
- (:zsymv_ ,:Complex128 ),
335
- (:csymv_ ,:Complex64 ))
332
+ for (fname, elty) in ((@blas_suffix ( :dsymv_ ) ,:Float64 ),
333
+ (@blas_suffix ( :ssymv_ ) ,:Float32 ),
334
+ (@blas_suffix ( :zsymv_ ) ,:Complex128 ),
335
+ (@blas_suffix ( :csymv_ ) ,:Complex64 ))
336
336
# Note that the complex symv are not BLAS but auiliary functions in LAPACK
337
337
@eval begin
338
338
# SUBROUTINE DSYMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
@@ -365,8 +365,8 @@ for (fname, elty) in ((:dsymv_,:Float64),
365
365
end
366
366
367
367
# ## hemv
368
- for (fname, elty) in ((:zhemv_ ,:Complex128 ),
369
- (:chemv_ ,:Complex64 ))
368
+ for (fname, elty) in ((@blas_suffix ( :zhemv_ ) ,:Complex128 ),
369
+ (@blas_suffix ( :chemv_ ) ,:Complex64 ))
370
370
@eval begin
371
371
function hemv! (uplo:: Char , α:: $elty , A:: StridedMatrix{$elty} , x:: StridedVector{$elty} , β:: $elty , y:: StridedVector{$elty} )
372
372
n = size (A, 2 )
@@ -394,10 +394,10 @@ for (fname, elty) in ((:zhemv_,:Complex128),
394
394
end
395
395
396
396
# ## sbmv, (SB) symmetric banded matrix-vector multiplication
397
- for (fname, elty) in ((:dsbmv_ ,:Float64 ),
398
- (:ssbmv_ ,:Float32 ),
399
- (:zsbmv_ ,:Complex128 ),
400
- (:csbmv_ ,:Complex64 ))
397
+ for (fname, elty) in ((@blas_suffix ( :dsbmv_ ) ,:Float64 ),
398
+ (@blas_suffix ( :ssbmv_ ) ,:Float32 ),
399
+ (@blas_suffix ( :zsbmv_ ) ,:Complex128 ),
400
+ (@blas_suffix ( :csbmv_ ) ,:Complex64 ))
401
401
@eval begin
402
402
# SUBROUTINE DSBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
403
403
# * .. Scalar Arguments ..
@@ -427,10 +427,10 @@ for (fname, elty) in ((:dsbmv_,:Float64),
427
427
end
428
428
429
429
# ## trmv, Triangular matrix-vector multiplication
430
- for (fname, elty) in ((:dtrmv_ ,:Float64 ),
431
- (:strmv_ ,:Float32 ),
432
- (:ztrmv_ ,:Complex128 ),
433
- (:ctrmv_ ,:Complex64 ))
430
+ for (fname, elty) in ((@blas_suffix ( :dtrmv_ ) ,:Float64 ),
431
+ (@blas_suffix ( :strmv_ ) ,:Float32 ),
432
+ (@blas_suffix ( :ztrmv_ ) ,:Complex128 ),
433
+ (@blas_suffix ( :ctrmv_ ) ,:Complex64 ))
434
434
@eval begin
435
435
# SUBROUTINE DTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
436
436
# * .. Scalar Arguments ..
@@ -456,10 +456,10 @@ for (fname, elty) in ((:dtrmv_,:Float64),
456
456
end
457
457
end
458
458
# ## trsv, Triangular matrix-vector solve
459
- for (fname, elty) in ((:dtrsv_ ,:Float64 ),
460
- (:strsv_ ,:Float32 ),
461
- (:ztrsv_ ,:Complex128 ),
462
- (:ctrsv_ ,:Complex64 ))
459
+ for (fname, elty) in ((@blas_suffix ( :dtrsv_ ) ,:Float64 ),
460
+ (@blas_suffix ( :strsv_ ) ,:Float32 ),
461
+ (@blas_suffix ( :ztrsv_ ) ,:Complex128 ),
462
+ (@blas_suffix ( :ctrsv_ ) ,:Complex64 ))
463
463
@eval begin
464
464
# SUBROUTINE DTRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
465
465
# .. Scalar Arguments ..
@@ -484,10 +484,10 @@ for (fname, elty) in ((:dtrsv_,:Float64),
484
484
end
485
485
486
486
# ## ger
487
- for (fname, elty) in ((:dger_ ,:Float64 ),
488
- (:sger_ ,:Float32 ),
489
- (:zgerc_ ,:Complex128 ),
490
- (:cgerc_ ,:Complex64 ))
487
+ for (fname, elty) in ((@blas_suffix ( :dger_ ) ,:Float64 ),
488
+ (@blas_suffix ( :sger_ ) ,:Float32 ),
489
+ (@blas_suffix ( :zgerc_ ) ,:Complex128 ),
490
+ (@blas_suffix ( :cgerc_ ) ,:Complex64 ))
491
491
@eval begin
492
492
function ger! (α:: $elty , x:: StridedVector{$elty} , y:: StridedVector{$elty} , A:: StridedMatrix{$elty} )
493
493
m, n = size (A)
@@ -506,10 +506,10 @@ for (fname, elty) in ((:dger_,:Float64),
506
506
end
507
507
508
508
# ## syr
509
- for (fname, elty) in ((:dsyr_ ,:Float64 ),
510
- (:ssyr_ ,:Float32 ),
511
- (:zsyr_ ,:Complex128 ),
512
- (:csyr_ ,:Complex64 ))
509
+ for (fname, elty) in ((@blas_suffix ( :dsyr_ ) ,:Float64 ),
510
+ (@blas_suffix ( :ssyr_ ) ,:Float32 ),
511
+ (@blas_suffix ( :zsyr_ ) ,:Complex128 ),
512
+ (@blas_suffix ( :csyr_ ) ,:Complex64 ))
513
513
@eval begin
514
514
function syr! (uplo:: Char , α:: $elty , x:: StridedVector{$elty} , A:: StridedMatrix{$elty} )
515
515
n = chksquare (A)
@@ -525,8 +525,8 @@ for (fname, elty) in ((:dsyr_,:Float64),
525
525
end
526
526
527
527
# ## her
528
- for (fname, elty) in ((:zher_ ,:Complex128 ),
529
- (:cher_ ,:Complex64 ))
528
+ for (fname, elty) in ((@blas_suffix ( :zher_ ) ,:Complex128 ),
529
+ (@blas_suffix ( :cher_ ) ,:Complex64 ))
530
530
@eval begin
531
531
function her! (uplo:: Char , α:: $elty , x:: StridedVector{$elty} , A:: StridedMatrix{$elty} )
532
532
n = chksquare (A)
@@ -544,10 +544,10 @@ end
544
544
# Level 3
545
545
# # (GE) general matrix-matrix multiplication
546
546
for (gemm, elty) in
547
- ((:dgemm_ ,:Float64 ),
548
- (:sgemm_ ,:Float32 ),
549
- (:zgemm_ ,:Complex128 ),
550
- (:cgemm_ ,:Complex64 ))
547
+ ((@blas_suffix ( :dgemm_ ) ,:Float64 ),
548
+ (@blas_suffix ( :sgemm_ ) ,:Float32 ),
549
+ (@blas_suffix ( :zgemm_ ) ,:Complex128 ),
550
+ (@blas_suffix ( :cgemm_ ) ,:Complex64 ))
551
551
@eval begin
552
552
# SUBROUTINE DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
553
553
# * .. Scalar Arguments ..
@@ -587,10 +587,10 @@ for (gemm, elty) in
587
587
end
588
588
589
589
# # (SY) symmetric matrix-matrix and matrix-vector multiplication
590
- for (mfname, elty) in ((:dsymm_ ,:Float64 ),
591
- (:ssymm_ ,:Float32 ),
592
- (:zsymm_ ,:Complex128 ),
593
- (:csymm_ ,:Complex64 ))
590
+ for (mfname, elty) in ((@blas_suffix ( :dsymm_ ) ,:Float64 ),
591
+ (@blas_suffix ( :ssymm_ ) ,:Float32 ),
592
+ (@blas_suffix ( :zsymm_ ) ,:Complex128 ),
593
+ (@blas_suffix ( :csymm_ ) ,:Complex64 ))
594
594
@eval begin
595
595
# SUBROUTINE DSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
596
596
# .. Scalar Arguments ..
@@ -622,10 +622,10 @@ for (mfname, elty) in ((:dsymm_,:Float64),
622
622
end
623
623
624
624
# # syrk
625
- for (fname, elty) in ((:dsyrk_ ,:Float64 ),
626
- (:ssyrk_ ,:Float32 ),
627
- (:zsyrk_ ,:Complex128 ),
628
- (:csyrk_ ,:Complex64 ))
625
+ for (fname, elty) in ((@blas_suffix ( :dsyrk_ ) ,:Float64 ),
626
+ (@blas_suffix ( :ssyrk_ ) ,:Float32 ),
627
+ (@blas_suffix ( :zsyrk_ ) ,:Complex128 ),
628
+ (@blas_suffix ( :csyrk_ ) ,:Complex64 ))
629
629
@eval begin
630
630
# SUBROUTINE DSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
631
631
# * .. Scalar Arguments ..
@@ -659,7 +659,7 @@ function syrk(uplo::BlasChar, trans::BlasChar, alpha::Number, A::StridedVecOrMat
659
659
end
660
660
syrk (uplo:: BlasChar , trans:: BlasChar , A:: StridedVecOrMat ) = syrk (uplo, trans, one (eltype (A)), A)
661
661
662
- for (fname, elty) in ((:zherk_ ,:Complex128 ), (:cherk_ ,:Complex64 ))
662
+ for (fname, elty) in ((@blas_suffix ( :zherk_ ) ,:Complex128 ), (@blas_suffix ( :cherk_ ) ,:Complex64 ))
663
663
@eval begin
664
664
# SUBROUTINE CHERK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
665
665
# * .. Scalar Arguments ..
@@ -692,10 +692,10 @@ for (fname, elty) in ((:zherk_,:Complex128), (:cherk_,:Complex64))
692
692
end
693
693
694
694
# # syr2k
695
- for (fname, elty) in ((:dsyr2k_ ,:Float64 ),
696
- (:ssyr2k_ ,:Float32 ),
697
- (:zsyr2k_ ,:Complex128 ),
698
- (:csyr2k_ ,:Complex64 ))
695
+ for (fname, elty) in ((@blas_suffix ( :dsyr2k_ ) ,:Float64 ),
696
+ (@blas_suffix ( :ssyr2k_ ) ,:Float32 ),
697
+ (@blas_suffix ( :zsyr2k_ ) ,:Complex128 ),
698
+ (@blas_suffix ( :csyr2k_ ) ,:Complex64 ))
699
699
@eval begin
700
700
# SUBROUTINE DSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
701
701
#
@@ -731,7 +731,7 @@ function syr2k(uplo::BlasChar, trans::BlasChar, alpha::Number, A::StridedVecOrMa
731
731
end
732
732
syr2k (uplo:: BlasChar , trans:: BlasChar , A:: StridedVecOrMat , B:: StridedVecOrMat ) = syr2k (uplo, trans, one (eltype (A)), A, B)
733
733
734
- for (fname, elty1, elty2) in ((:zher2k_ ,:Complex128 ,:Float64 ), (:cher2k_ ,:Complex64 ,:Float32 ))
734
+ for (fname, elty1, elty2) in ((@blas_suffix ( :zher2k_ ) ,:Complex128 ,:Float64 ), (@blas_suffix ( :cher2k_ ) ,:Complex64 ,:Float32 ))
735
735
@eval begin
736
736
# SUBROUTINE CHER2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
737
737
#
@@ -768,10 +768,10 @@ end
768
768
769
769
# # (TR) Triangular matrix and vector multiplication and solution
770
770
for (mmname, smname, elty) in
771
- ((:dtrmm_ , :dtrsm_ ,:Float64 ),
772
- (:strmm_ , :strsm_ ,:Float32 ),
773
- (:ztrmm_ , :ztrsm_ ,:Complex128 ),
774
- (:ctrmm_ , :ctrsm_ ,:Complex64 ))
771
+ ((@blas_suffix ( :dtrmm_ ), @blas_suffix ( :dtrsm_ ) ,:Float64 ),
772
+ (@blas_suffix ( :strmm_ ), @blas_suffix ( :strsm_ ) ,:Float32 ),
773
+ (@blas_suffix ( :ztrmm_ ), @blas_suffix ( :ztrsm_ ) ,:Complex128 ),
774
+ (@blas_suffix ( :ctrmm_ ), @blas_suffix ( :ctrsm_ ) ,:Complex64 ))
775
775
@eval begin
776
776
# SUBROUTINE DTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
777
777
# * .. Scalar Arguments ..
0 commit comments