Skip to content

Commit e0d5b58

Browse files
authored
[MLAS] Fix building on FreeBSD / powerpc64le (microsoft#26895)
### Description <!-- Describe your changes. --> 1. platform.cpp missed inclusion of sys/auxv.h (for elf_aux_info) and machine/cpu.h (for PPC_FEATURE2_ARCH_3_00). I missed that in my previous commit. 2. Same as on AIX, __vector int32_t is not defined and __vector int needs to be used. ### Motivation and Context <!-- - Why is this change required? What problem does it solve? - If it fixes an open issue, please link to the issue here. --> Fixes build on FreeBSD / powerpc64le platform.
1 parent 5d24c95 commit e0d5b58

3 files changed

Lines changed: 7 additions & 4 deletions

File tree

onnxruntime/core/mlas/lib/platform.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ Module Name:
3434
#define POWER_10_ANDUP (POWER_10)
3535
#include <sys/systemcfg.h>
3636
#define __power_10_andup() (_system_configuration.implementation & POWER_10_ANDUP)
37+
#elif defined(__FreeBSD__)
38+
#include <machine/cpu.h>
39+
#include <sys/auxv.h>
3740
#endif
3841
#endif
3942

onnxruntime/core/mlas/lib/power/qgemm_kernel_power10.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -880,14 +880,14 @@ MlasQgemmStoreVectorMMA
880880
{
881881
size_t RowCount;
882882
__vector signed int vsum0, vsum1, vsum2, vsum3;
883-
#if defined(_AIX) && defined(__clang__)
883+
#if (defined(_AIX) || defined(__FreeBSD__)) && defined(__clang__)
884884
__vector signed int columnsum = *reinterpret_cast<const __vector int *>(&ColumnSumBuffer[pos]);
885885
#else
886886
__vector signed int columnsum = *reinterpret_cast<const __vector int32_t *>(&ColumnSumBuffer[pos]);
887887
#endif
888888
C += VectorCount;
889889
if (ZeroPointB != nullptr) {
890-
#if defined(_AIX) && defined(__clang__)
890+
#if (defined(_AIX) || defined(__FreeBSD__)) && defined(__clang__)
891891
__vector signed int zeropoint = *reinterpret_cast<const __vector int *>(&ZeroPointB[pos]);
892892
#else
893893
__vector signed int zeropoint = *reinterpret_cast<const __vector int32_t *>(&ZeroPointB[pos]);

onnxruntime/core/mlas/lib/qlmul.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ MlasQLinearMulKernel(
325325
}
326326

327327
while (N >= 4) {
328-
#if defined(_AIX) && defined(__clang__)
328+
#if (defined(_AIX) || defined(__FreeBSD__)) && defined(__clang__)
329329
__vector int IntegerAVector {InputA[0], InputA[1], InputA[2], InputA[3]};
330330
#else
331331
__vector int32_t IntegerAVector {InputA[0], InputA[1], InputA[2], InputA[3]};
@@ -334,7 +334,7 @@ MlasQLinearMulKernel(
334334
auto ValueAVector = vec_mul(ScaleAVector, vec_ctf(IntegerVector, 0));
335335

336336
if (!IsScalarB) {
337-
#if defined(_AIX) && defined(__clang__)
337+
#if (defined(_AIX) || defined(__FreeBSD__)) && defined(__clang__)
338338
__vector int IntegerBVector {InputB[0], InputB[1], InputB[2], InputB[3]};
339339
#else
340340
__vector int32_t IntegerBVector {InputB[0], InputB[1], InputB[2], InputB[3]};

0 commit comments

Comments
 (0)