Skip to content

Commit eaa76df

Browse files
committed
Alias *gemmt_ as *gemmtr_ to fix lapack 3.12.1 compatibility.
Copy changes from upstream BLIS to add gemmtr interfaces to match new BLAS functionality in recent LAPACK releases. This addresses #31, thanks to Greg Jones for reporting this issue. AMD-Internal: [CPUPL-6581] Change-Id: I2b1a724d80902541b1d2b073fa3d1ea71442f445
1 parent 6d1afea commit eaa76df

File tree

7 files changed

+341
-92
lines changed

7 files changed

+341
-92
lines changed

frame/compat/cblas/src/cblas.h

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
An object-based framework for developing high-performance BLAS-like
55
libraries.
66
7-
Copyright (C) 2020 - 2024, Advanced Micro Devices, Inc. All rights reserved.
7+
Copyright (C) 2020 - 2025, Advanced Micro Devices, Inc. All rights reserved.
88
99
Redistribution and use in source and binary forms, with or without
1010
modification, are permitted provided that the following conditions are
@@ -572,6 +572,11 @@ void BLIS_EXPORT_BLAS cblas_sgemmt(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
572572
f77_int N, f77_int K, float alpha, const float *A,
573573
f77_int lda, const float *B, f77_int ldb,
574574
float beta, float *C, f77_int ldc);
575+
void BLIS_EXPORT_BLAS cblas_sgemmtr(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
576+
enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB,
577+
f77_int N, f77_int K, float alpha, const float *A,
578+
f77_int lda, const float *B, f77_int ldb,
579+
float beta, float *C, f77_int ldc);
575580
/** @}*/
576581
void BLIS_EXPORT_BLAS cblas_dgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA,
577582
enum CBLAS_TRANSPOSE TransB, f77_int M, f77_int N,
@@ -642,8 +647,13 @@ void BLIS_EXPORT_BLAS cblas_dtrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side,
642647
* @return None
643648
*/
644649
void BLIS_EXPORT_BLAS cblas_dgemmt(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
645-
enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB,
646-
f77_int N, f77_int K, double alpha, const double *A,
650+
enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB,
651+
f77_int N, f77_int K, double alpha, const double *A,
652+
f77_int lda, const double *B, f77_int ldb,
653+
double beta, double *C, f77_int ldc);
654+
void BLIS_EXPORT_BLAS cblas_dgemmtr(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
655+
enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB,
656+
f77_int N, f77_int K, double alpha, const double *A,
647657
f77_int lda, const double *B, f77_int ldb,
648658
double beta, double *C, f77_int ldc);
649659
/** @}*/
@@ -716,8 +726,13 @@ void BLIS_EXPORT_BLAS cblas_ctrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side,
716726
* @return None
717727
*/
718728
void BLIS_EXPORT_BLAS cblas_cgemmt(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
719-
enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB,
720-
f77_int N, f77_int K, const void *alpha, const void *A,
729+
enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB,
730+
f77_int N, f77_int K, const void *alpha, const void *A,
731+
f77_int lda, const void *B, f77_int ldb,
732+
const void *beta, void *C, f77_int ldc);
733+
void BLIS_EXPORT_BLAS cblas_cgemmtr(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
734+
enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB,
735+
f77_int N, f77_int K, const void *alpha, const void *A,
721736
f77_int lda, const void *B, f77_int ldb,
722737
const void *beta, void *C, f77_int ldc);
723738
/** @}*/
@@ -790,8 +805,13 @@ void BLIS_EXPORT_BLAS cblas_ztrsm(enum CBLAS_ORDER Order, enum CBLAS_SIDE Side,
790805
* @return None
791806
*/
792807
void BLIS_EXPORT_BLAS cblas_zgemmt(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
793-
enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB,
794-
f77_int N, f77_int K, const void *alpha, const void *A,
808+
enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB,
809+
f77_int N, f77_int K, const void *alpha, const void *A,
810+
f77_int lda, const void *B, f77_int ldb,
811+
const void *beta, void *C, f77_int ldc);
812+
void BLIS_EXPORT_BLAS cblas_zgemmtr(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
813+
enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB,
814+
f77_int N, f77_int K, const void *alpha, const void *A,
795815
f77_int lda, const void *B, f77_int ldb,
796816
const void *beta, void *C, f77_int ldc);
797817
/** @}*/
@@ -840,7 +860,6 @@ void BLIS_EXPORT_BLAS cblas_xerbla(f77_int p, const char *rout, const char *form
840860
BLIS_EXPORT_BLAS float cblas_scabs1( const void *z);
841861
BLIS_EXPORT_BLAS double cblas_dcabs1( const void *z);
842862

843-
844863
/*
845864
* ===========================================================================
846865
* BLAS Extension prototypes

frame/compat/cblas/src/cblas_cgemmt.c renamed to frame/compat/cblas/src/extra/cblas_cgemmt.c

Lines changed: 67 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,69 @@
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+
135
#include "blis.h"
236
#ifdef BLIS_ENABLE_CBLAS
337
/*
438
*
539
* cblas_cgemmt.c
640
* This program is a C interface to cgemmt.
7-
* Copyright (C) 2020 - 2023, Advanced Micro Devices, Inc. All rights reserved.
841
*
942
*/
1043

1144
#include "cblas.h"
1245
#include "cblas_f77.h"
1346
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,
1649
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)
1952
{
20-
char TA, TB, UL;
53+
char UL, TA, TB;
2154
#ifdef F77_CHAR
22-
F77_CHAR F77_TA, F77_TB, F77_UL;
55+
F77_CHAR F77_UL, F77_TA, F77_TB;
2356
#else
57+
#define F77_UL &UL
2458
#define F77_TA &TA
2559
#define F77_TB &TB
26-
#define F77_UL &UL
2760
#endif
2861

2962
#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;
3164
F77_INT F77_ldc=ldc;
3265
#else
33-
#define F77_N N
66+
#define F77_M M
3467
#define F77_K K
3568
#define F77_lda lda
3669
#define F77_ldb ldb
@@ -44,7 +77,8 @@ void cblas_cgemmt(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
4477

4578
if( Order == CblasColMajor )
4679
{
47-
if( Uplo == CblasUpper ) UL='U';
80+
81+
if( Uplo == CblasUpper) UL='U';
4882
else if ( Uplo == CblasLower ) UL='L';
4983
else
5084
{
@@ -53,6 +87,7 @@ void cblas_cgemmt(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
5387
RowMajorStrg = 0;
5488
return;
5589
}
90+
5691
if(TransA == CblasTrans) TA='T';
5792
else if ( TransA == CblasConjTrans ) TA='C';
5893
else if ( TransA == CblasNoTrans ) TA='N';
@@ -76,27 +111,29 @@ void cblas_cgemmt(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
76111
}
77112

78113
#ifdef F77_CHAR
114+
F77_UL = C2F_CHAR(&UL);
79115
F77_TA = C2F_CHAR(&TA);
80116
F77_TB = C2F_CHAR(&TB);
81117
#endif
82118

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);
85121
} else if (Order == CblasRowMajor)
86122
{
87123
RowMajorStrg = 1;
88124
/* In case of row major order,
89125
* Swap A & B and induce transpose to C
90126
*/
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';
93129
else
94130
{
95131
cblas_xerbla(2, "cblas_cgemmt","Illegal Uplo setting, %d\n", Uplo);
96132
CBLAS_CallFromC = 0;
97133
RowMajorStrg = 0;
98134
return;
99135
}
136+
100137
if(TransA == CblasTrans) TB='T';
101138
else if ( TransA == CblasConjTrans ) TB='C';
102139
else if ( TransA == CblasNoTrans ) TB='N';
@@ -118,16 +155,30 @@ void cblas_cgemmt(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
118155
return;
119156
}
120157
#ifdef F77_CHAR
158+
F77_UL = C2F_CHAR(&UL);
121159
F77_TA = C2F_CHAR(&TA);
122160
F77_TB = C2F_CHAR(&TB);
123161
#endif
124162

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,
126164
&F77_ldb, (scomplex*)A, &F77_lda, (scomplex*)beta, (scomplex*)C, &F77_ldc);
127165
}
128166
else cblas_xerbla(1, "cblas_cgemmt", "Illegal Order setting, %d\n", Order);
129167
CBLAS_CallFromC = 0;
130168
RowMajorStrg = 0;
131169
return;
132170
}
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+
133184
#endif

frame/compat/cblas/src/cblas_dgemmt.c renamed to frame/compat/cblas/src/extra/cblas_dgemmt.c

Lines changed: 68 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,70 @@
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+
135
#include "blis.h"
236
#ifdef BLIS_ENABLE_CBLAS
337
/*
438
*
539
* cblas_dgemmt.c
640
* This program is a C interface to dgemmt.
741
*
8-
* Copyright (C) 2020, Advanced Micro Devices, Inc. All rights reserved.
9-
*
1042
*/
1143

1244
#include "cblas.h"
1345
#include "cblas_f77.h"
14-
void cblas_dgemmt( enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
15-
enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANSPOSE TransB,
16-
f77_int N, f77_int K,
17-
double alpha, const double *A,
18-
f77_int lda, const double *B, f77_int ldb,
19-
double beta, double *C, f77_int ldc)
46+
void cblas_dgemmt(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
47+
enum CBLAS_TRANSPOSE TransA,
48+
enum CBLAS_TRANSPOSE TransB, f77_int M, f77_int K,
49+
double alpha, const double *A,
50+
f77_int lda, const double *B, f77_int ldb,
51+
double beta, double *C, f77_int ldc)
2052
{
21-
AOCL_DTL_TRACE_ENTRY(AOCL_DTL_LEVEL_TRACE_1);
22-
char TA, TB, UL;
53+
AOCL_DTL_TRACE_ENTRY(AOCL_DTL_LEVEL_TRACE_1);
54+
char UL, TA, TB;
2355
#ifdef F77_CHAR
24-
F77_CHAR F77_TA, F77_TB, F77_UL;
56+
F77_CHAR F77_UL, F77_TA, F77_TB;
2557
#else
58+
#define F77_UL &UL
2659
#define F77_TA &TA
2760
#define F77_TB &TB
28-
#define F77_UL &UL
2961
#endif
3062

3163
#ifdef F77_INT
32-
F77_INT F77_N=N, F77_K=K, F77_lda=lda, F77_ldb=ldb;
64+
F77_INT F77_M=M, F77_K=K, F77_lda=lda, F77_ldb=ldb;
3365
F77_INT F77_ldc=ldc;
3466
#else
35-
#define F77_N N
67+
#define F77_M M
3668
#define F77_K K
3769
#define F77_lda lda
3870
#define F77_ldb ldb
@@ -46,8 +78,9 @@ void cblas_dgemmt( enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
4678

4779
if( Order == CblasColMajor )
4880
{
49-
if( Uplo == CblasUpper) UL = 'U';
50-
else if(Uplo == CblasLower) UL = 'L';
81+
82+
if( Uplo == CblasUpper) UL='U';
83+
else if ( Uplo == CblasLower ) UL='L';
5184
else
5285
{
5386
cblas_xerbla(2, "cblas_dgemmt","Illegal Uplo setting, %d\n", Uplo);
@@ -82,21 +115,21 @@ void cblas_dgemmt( enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
82115
}
83116

84117
#ifdef F77_CHAR
118+
F77_UL = C2F_CHAR(&UL);
85119
F77_TA = C2F_CHAR(&TA);
86120
F77_TB = C2F_CHAR(&TB);
87-
F77_UL = C2F_CHAR(&UL);
88121
#endif
89122

90-
F77_dgemmt(F77_UL,F77_TA, F77_TB, &F77_N, &F77_K, &alpha, A,
123+
F77_dgemmt(F77_UL, F77_TA, F77_TB, &F77_M, &F77_K, &alpha, A,
91124
&F77_lda, B, &F77_ldb, &beta, C, &F77_ldc);
92125
} else if (Order == CblasRowMajor)
93126
{
94127
RowMajorStrg = 1;
95128
/* In case of row major order,
96129
* Swap A & B and induce transpose to C
97130
*/
98-
if(Uplo == CblasUpper) UL = 'L';
99-
else if(Uplo == CblasLower) UL = 'U';
131+
if( Uplo == CblasUpper) UL='L';
132+
else if ( Uplo == CblasLower ) UL='U';
100133
else
101134
{
102135
cblas_xerbla(2, "cblas_dgemmt","Illegal Uplo setting, %d\n", Uplo);
@@ -129,12 +162,12 @@ void cblas_dgemmt( enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
129162
return;
130163
}
131164
#ifdef F77_CHAR
165+
F77_UL = C2F_CHAR(&UL);
132166
F77_TA = C2F_CHAR(&TA);
133167
F77_TB = C2F_CHAR(&TB);
134-
F77_UL = C2F_CHAR(&UL);
135168
#endif
136169

137-
F77_dgemmt(F77_UL,F77_TA, F77_TB, &F77_N, &F77_K, &alpha, B,
170+
F77_dgemmt(F77_UL, F77_TA, F77_TB, &F77_M, &F77_K, &alpha, B,
138171
&F77_ldb, A, &F77_lda, &beta, C, &F77_ldc);
139172
}
140173
else
@@ -148,4 +181,17 @@ void cblas_dgemmt( enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
148181
AOCL_DTL_TRACE_EXIT(AOCL_DTL_LEVEL_TRACE_1);
149182
return;
150183
}
184+
185+
void cblas_dgemmtr(enum CBLAS_ORDER Order, enum CBLAS_UPLO Uplo,
186+
enum CBLAS_TRANSPOSE TransA,
187+
enum CBLAS_TRANSPOSE TransB, f77_int M, f77_int K,
188+
double alpha, const double *A,
189+
f77_int lda, const double *B, f77_int ldb,
190+
double beta, double *C, f77_int ldc)
191+
#ifdef BLIS_OS_OSX
192+
{ cblas_dgemmt(Order, Uplo, TransA, TransB, M, K, alpha, A, lda, B, ldb, beta, C, ldc); }
193+
#else
194+
__attribute__((alias("cblas_dgemmt")));
195+
#endif
196+
151197
#endif

0 commit comments

Comments
 (0)