Skip to content

Use portable _Float128 instead of __float128. Fix ARM64 builds. #326

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

N-Storm
Copy link

@N-Storm N-Storm commented Apr 30, 2025

Hello,

( This fixes currently broken builds for ARM64 arch. )

From https://gcc.gnu.org/onlinedocs/gcc/Floating-Types.html:

__float128 is available on i386, x86_64, IA-64, LoongArch and hppa HP-UX, as well as on PowerPC GNU/Linux targets that enable the vector scalar (VSX) instruction set. __float128 supports the 128-bit floating type. On i386, x86_64, PowerPC, LoongArch and IA-64, other than HP-UX, __float128 is an alias for _Float128. On hppa and IA-64 HP-UX, __float128 is an alias for long double.

I.e. __float128 aren't portable, as it's not available on every platform. ARM64 aka aarch64 are the example platform without __float128. While _Float128 are standard and main platforms just alias __float128 to _Float128 anyways.

This fixes building for ARM64 with GCC. I've tested under Ubuntu 25.x / gcc-14.x and main branch for prpll.

In case there are some reasons to have __float128 here, I can change this patch to add conditional alias __float128 -> _Float128 only if aarch64 macro defined.

From https://gcc.gnu.org/onlinedocs/gcc/Floating-Types.html:

> __float128 is available on i386, x86_64, IA-64, LoongArch and hppa HP-UX, as well as on PowerPC GNU/Linux targets that enable the vector scalar (VSX) instruction set. __float128 supports the 128-bit floating type. On i386, x86_64, PowerPC, LoongArch and IA-64, other than HP-UX, __float128 is an alias for _Float128. On hppa and IA-64 HP-UX, __float128 is an alias for long double.

I.e. __float128 aren't portable, as it's not available on every platform. ARM64 aka aarch64 are the example platform without __float128. While _Float128 are standard and main platforms just alias __float128 to _Float128 anyways.
This fixes building for ARM64 with GCC at least (tested under Ubuntu 25.x / gcc-14.x)
@tdulcet
Copy link
Contributor

tdulcet commented Apr 30, 2025

Maybe update the CI to test on ARM as well. For example, update this line for Linux:

os: [ubuntu-22.04, ubuntu-24.04]
to something like:

        os: [ubuntu-22.04, ubuntu-24.04, ubuntu-22.04-arm, ubuntu-24.04-arm]

and this line for macOS:

runs-on: macos-13
to something like:

    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [macos-13, macos-latest]
      fail-fast: false

You may need to remove the hardcoded GCC 14 as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants