Skip to content

Commit b8abbd5

Browse files
authored
Port Sleef to AIX (#629)
Closes #628.
1 parent d1663ca commit b8abbd5

File tree

3 files changed

+10
-4
lines changed

3 files changed

+10
-4
lines changed

Configure.cmake

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
197197
set(COMPILER_SUPPORTS_NEON32VFPV4 1)
198198

199199
set(CLANG_FLAGS_ENABLE_PURECFMA_SCALAR "-mfpu=vfpv4")
200-
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64")
200+
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)")
201201
set(SLEEF_ARCH_PPC64 ON CACHE INTERNAL "True for PPC64 architecture.")
202202

203203
set(CLANG_FLAGS_ENABLE_PURECFMA_SCALAR "-mvsx")
@@ -626,8 +626,8 @@ if(SLEEF_ARCH_PPC64 AND NOT SLEEF_DISABLE_VSX)
626626
string (REPLACE ";" " " CMAKE_REQUIRED_FLAGS "${FLAGS_ENABLE_VSX}")
627627
CHECK_C_SOURCE_COMPILES("
628628
#include <altivec.h>
629-
#ifndef __LITTLE_ENDIAN__
630-
#error \"Only VSX(ISA2.07) little-endian mode is supported \"
629+
#if !defined(__LITTLE_ENDIAN__) && !defined(_AIX)
630+
#error \"Only VSX(ISA2.07) little-endian mode and AIX is supported \"
631631
#endif
632632
int main() {
633633
vector double d;

src/common/quaddef.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
#if !defined(Sleef_quad_DEFINED)
1717
#define Sleef_quad_DEFINED
1818
typedef struct { uint64_t x, y; } Sleef_uint64_2t;
19+
#ifdef _AIX
20+
#undef SLEEF_FLOAT128_IS_IEEEQP
21+
#endif
1922
#if defined(SLEEF_FLOAT128_IS_IEEEQP) || defined(ENABLEFLOAT128)
2023
typedef __float128 Sleef_quad;
2124
#define SLEEF_QUAD_C(x) (x ## Q)

src/libm/sleeflibm_header.h.org.in

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
#include <arm_sve.h>
6464
#endif
6565

66-
#if defined(__VSX__) && defined(__PPC64__) && defined(__LITTLE_ENDIAN__)
66+
#if (defined(__VSX__) && defined(__PPC64__) && defined(__LITTLE_ENDIAN__)) || defined(_AIX)
6767
#include <altivec.h>
6868
typedef __vector double SLEEF_VECTOR_DOUBLE;
6969
typedef __vector float SLEEF_VECTOR_FLOAT;
@@ -175,6 +175,9 @@ typedef struct {
175175
#if !defined(Sleef_quad_DEFINED)
176176
#define Sleef_quad_DEFINED
177177
typedef struct { uint64_t x, y; } Sleef_uint64_2t;
178+
#ifdef _AIX
179+
#undef SLEEF_FLOAT128_IS_IEEEQP
180+
#endif
178181
#if defined(SLEEF_FLOAT128_IS_IEEEQP) || defined(ENABLEFLOAT128)
179182
typedef __float128 Sleef_quad;
180183
#define SLEEF_QUAD_C(x) (x ## Q)

0 commit comments

Comments
 (0)