1
+ /*
2
+
3
+ BLIS
4
+ An object-based framework for developing high-performance BLAS-like
5
+ libraries.
6
+
7
+ Copyright (C) 2020 - 2025, Advanced Micro Devices, Inc. All rights reserved.
8
+
9
+ Redistribution and use in source and binary forms, with or without
10
+ modification, are permitted provided that the following conditions are
11
+ met:
12
+ - Redistributions of source code must retain the above copyright
13
+ notice, this list of conditions and the following disclaimer.
14
+ - Redistributions in binary form must reproduce the above copyright
15
+ notice, this list of conditions and the following disclaimer in the
16
+ documentation and/or other materials provided with the distribution.
17
+ - Neither the name(s) of the copyright holder(s) nor the names of its
18
+ contributors may be used to endorse or promote products derived
19
+ from this software without specific prior written permission.
20
+
21
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
+ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
+
33
+ */
34
+
1
35
#include "blis.h"
2
36
#ifdef BLIS_ENABLE_CBLAS
3
37
/*
4
38
*
5
39
* cblas_cgemmt.c
6
40
* This program is a C interface to cgemmt.
7
- * Copyright (C) 2020 - 2023, Advanced Micro Devices, Inc. All rights reserved.
8
41
*
9
42
*/
10
43
11
44
#include "cblas.h"
12
45
#include "cblas_f77.h"
13
46
void cblas_cgemmt (enum CBLAS_ORDER Order , enum CBLAS_UPLO Uplo ,
14
- enum CBLAS_TRANSPOSE TransA , enum CBLAS_TRANSPOSE TransB ,
15
- f77_int N , f77_int K ,
47
+ enum CBLAS_TRANSPOSE TransA ,
48
+ enum CBLAS_TRANSPOSE TransB , f77_int M , f77_int K ,
16
49
const void * alpha , const void * A ,
17
- f77_int lda , const void * B , f77_int ldb ,
18
- const void * beta , void * C , f77_int ldc )
50
+ f77_int lda , const void * B , f77_int ldb ,
51
+ const void * beta , void * C , f77_int ldc )
19
52
{
20
- char TA , TB , UL ;
53
+ char UL , TA , TB ;
21
54
#ifdef F77_CHAR
22
- F77_CHAR F77_TA , F77_TB , F77_UL ;
55
+ F77_CHAR F77_UL , F77_TA , F77_TB ;
23
56
#else
57
+ #define F77_UL &UL
24
58
#define F77_TA &TA
25
59
#define F77_TB &TB
26
- #define F77_UL &UL
27
60
#endif
28
61
29
62
#ifdef F77_INT
30
- F77_INT F77_N = N , F77_K = K , F77_lda = lda , F77_ldb = ldb ;
63
+ F77_INT F77_M = M , F77_K = K , F77_lda = lda , F77_ldb = ldb ;
31
64
F77_INT F77_ldc = ldc ;
32
65
#else
33
- #define F77_N N
66
+ #define F77_M M
34
67
#define F77_K K
35
68
#define F77_lda lda
36
69
#define F77_ldb ldb
@@ -44,7 +77,8 @@ void cblas_cgemmt(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
44
77
45
78
if ( Order == CblasColMajor )
46
79
{
47
- if ( Uplo == CblasUpper ) UL = 'U' ;
80
+
81
+ if ( Uplo == CblasUpper ) UL = 'U' ;
48
82
else if ( Uplo == CblasLower ) UL = 'L' ;
49
83
else
50
84
{
@@ -53,6 +87,7 @@ void cblas_cgemmt(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
53
87
RowMajorStrg = 0 ;
54
88
return ;
55
89
}
90
+
56
91
if (TransA == CblasTrans ) TA = 'T' ;
57
92
else if ( TransA == CblasConjTrans ) TA = 'C' ;
58
93
else if ( TransA == CblasNoTrans ) TA = 'N' ;
@@ -76,27 +111,29 @@ void cblas_cgemmt(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
76
111
}
77
112
78
113
#ifdef F77_CHAR
114
+ F77_UL = C2F_CHAR (& UL );
79
115
F77_TA = C2F_CHAR (& TA );
80
116
F77_TB = C2F_CHAR (& TB );
81
117
#endif
82
118
83
- F77_cgemmt (F77_UL , F77_TA , F77_TB , & F77_N , & F77_K , (scomplex * )alpha , (scomplex * )A ,
84
- & F77_lda , (scomplex * )B , & F77_ldb , (scomplex * )beta , (scomplex * )C , & F77_ldc );
119
+ F77_cgemmt (F77_UL , F77_TA , F77_TB , & F77_M , & F77_K , (scomplex * )alpha , (scomplex * )A ,
120
+ & F77_lda , (scomplex * )B , & F77_ldb , (scomplex * )beta , (scomplex * )C , & F77_ldc );
85
121
} else if (Order == CblasRowMajor )
86
122
{
87
123
RowMajorStrg = 1 ;
88
124
/* In case of row major order,
89
125
* Swap A & B and induce transpose to C
90
126
*/
91
- if ( Uplo == CblasUpper ) UL = 'L' ;
92
- else if ( Uplo == CblasLower ) UL = 'U' ;
127
+ if ( Uplo == CblasUpper ) UL = 'L' ;
128
+ else if ( Uplo == CblasLower ) UL = 'U' ;
93
129
else
94
130
{
95
131
cblas_xerbla (2 , "cblas_cgemmt" ,"Illegal Uplo setting, %d\n" , Uplo );
96
132
CBLAS_CallFromC = 0 ;
97
133
RowMajorStrg = 0 ;
98
134
return ;
99
135
}
136
+
100
137
if (TransA == CblasTrans ) TB = 'T' ;
101
138
else if ( TransA == CblasConjTrans ) TB = 'C' ;
102
139
else if ( TransA == CblasNoTrans ) TB = 'N' ;
@@ -118,16 +155,30 @@ void cblas_cgemmt(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
118
155
return ;
119
156
}
120
157
#ifdef F77_CHAR
158
+ F77_UL = C2F_CHAR (& UL );
121
159
F77_TA = C2F_CHAR (& TA );
122
160
F77_TB = C2F_CHAR (& TB );
123
161
#endif
124
162
125
- F77_cgemmt (F77_UL , F77_TA , F77_TB , & F77_N , & F77_K , (scomplex * )alpha , (scomplex * )B ,
163
+ F77_cgemmt (F77_UL , F77_TA , F77_TB , & F77_M , & F77_K , (scomplex * )alpha , (scomplex * )B ,
126
164
& F77_ldb , (scomplex * )A , & F77_lda , (scomplex * )beta , (scomplex * )C , & F77_ldc );
127
165
}
128
166
else cblas_xerbla (1 , "cblas_cgemmt" , "Illegal Order setting, %d\n" , Order );
129
167
CBLAS_CallFromC = 0 ;
130
168
RowMajorStrg = 0 ;
131
169
return ;
132
170
}
171
+
172
+ void cblas_cgemmtr (enum CBLAS_ORDER Order , enum CBLAS_UPLO Uplo ,
173
+ enum CBLAS_TRANSPOSE TransA ,
174
+ enum CBLAS_TRANSPOSE TransB , f77_int M , f77_int K ,
175
+ const void * alpha , const void * A ,
176
+ f77_int lda , const void * B , f77_int ldb ,
177
+ const void * beta , void * C , f77_int ldc )
178
+ #ifdef BLIS_OS_OSX
179
+ { cblas_cgemmt (Order , Uplo , TransA , TransB , M , K , alpha , A , lda , B , ldb , beta , C , ldc ); }
180
+ #else
181
+ __attribute__((alias ("cblas_cgemmt" )));
182
+ #endif
183
+
133
184
#endif
0 commit comments